KOI · Privacy

Privacy Policy

This policy explains how KOI Keyboard handles local input, account and purchase data, and the sync and AI features you choose to use.

Effective date: 3 October 2026

Overview

Advertising and device permissions

KOI has no advertising or cross-app advertising tracking feature and does not use IDFA. Installation identifiers and SDK data needed for the service are handled separately from advertising tracking.

KOI does not browse your contacts, location, calendars or existing photo library. Only when you press “儲存到相片” (Save to Photos) does it use add-only permission to add that generated image.

The keyboard reads the clipboard when you press Paste to put text into the AI input field. Content subsequently submitted is handled under the AI sharing rules.

Local input and learning

The input engine decomposes codes, generates and ranks candidates on your device, and stores selected candidates and associations to improve later input.

Learning data and settings are stored in the container shared by the KOI app and keyboard. Ordinary input is not sent keystroke by keystroke to KOI's servers. Optional sync, AI requests and developer diagnostics are described separately below.

Deleting a KOI account removes account access and related synced data. Ordinary local learning, settings and saved images have their own clearing controls and are not all erased by account deletion.

The “Full Access” permission

The keyboard's network features and sharing data with the KOI app require “Allow Full Access”. This includes KOI Agent, JEV requests for eligible test accounts, handwriting model downloads and the shared generated-image library.

Full Access does not replace AI sharing consent. You must explicitly agree before submitting new AI requests. Basic local input remains available without Full Access.

The KOI app's “AI 與 Credits” page and the keyboard's first AI action show “AI 資料分享”, describing data, recipients, purposes and retention, with “同意並繼續” (Agree and Continue) and “取消” (Cancel). Displaying the notice does not grant consent.

Consent is recorded by version in KOI's shared settings. Without consent to the current version, updated clients block new AI sharing. Keyboard actions also require Full Access and respect context limits.

In “AI 與 Credits”, press “已同意 AI 資料分享 · 撤回” and confirm “撤回同意” to stop new AI sharing, including JEV. Already transmitted data cannot be recalled. Withdrawal does not automatically delete stored results or existing provider records. Retrieval and delivery acknowledgement of completed results remain available.

Data sent by KOI Agent

When you agree and explicitly execute an Agent action, the following content passes through KOI's Firebase/Google Cloud service and OpenRouter to OpenAI models. Image understanding may also use OpenAI models provided by Microsoft Azure.

This content supports understanding requests, answering questions, rewriting, replies, translation and image generation. Viewing the context preview does not itself submit that text.

KOI services separately receive installation and account-binding identifiers, Firebase App Check verification data, and metadata needed to reconcile operations, delivery and Credits. KOI's account, security and accounting services use these verification data; they are not sent as model prompts or context.

Text questions needing current information may use OpenRouter's web search and fetch services. Image research sends derived search terms to Brave Search and fetches references from source websites; those services and websites receive the corresponding queries or requests.

KOI does not itself train models on Agent content. Text requests ask providers for zero retention and no content collection. This is not a zero-retention guarantee for all images, search, JEV, service logs or provider processing. Provider links and retention differences appear below.

Service providers

These services process data needed for their features. Providers and their service providers may process data outside your jurisdiction. KOI does not treat all encrypted or hashed data as anonymous.

Provider policies and applicable service agreements describe their handling. A setting for a text request does not mean every service retains no data.
Service and policyPurposeData involved
Firebase/Google CloudSign-in, App Check, AI relay, accounting, temporary storage and securityName, account/installation identifiers, purchases, AI requests and encrypted results, service metadata
Google ML KitOn-device handwriting recognition, model downloads and SDK diagnosticsDevice/app information, installation identifiers, feature events, performance, errors and configured languages
RevenueCatPurchase, subscription and restoration statusApp-user identifiers, purchases and device/service information
OpenRouterAI routing, text search and web fetchingPrompts, context, conversations and reference images
OpenAI API data policyText and image modelsAI instructions, context, conversations and applicable images
Microsoft Azure model data policyImage understandingImages and related text
CloudflareJEV authentication, rate limits and relayAccount/installation verification, network security metadata and bounded input excerpts
TypeSafe JEVBackground correction evaluation for eligible test accountsBounded input sentences and locally generated replacement candidates
Brave Search APIImage-reference researchSearch terms derived from a request
Reference-source websitesWeb content and reference imagesServer requests to fetch their content, handled under each site's policies
AppleApp Store, Apple sign-in, device verification and private CloudKitPurchases, sign-in/verification and data you choose to sync

Optional iCloud sync

Cross-device sync is off by default. When you enable it and run a manual sync, KOI writes selected keyboard settings, learned candidates and associations to your private Apple CloudKit database.

The sync payload uses CloudKit encrypted fields. Sync does not upload every keystroke or sync AI sharing consent or the local diagnostics flag.

Account deletion handles synced data bound to that KOI account. If iCloud identity or network availability prevents completion, the app retains the cleanup state and offers a retry. Apple's platform retention and backups are governed by its policies.

Accounts and identifiers

KOI creates an installation UUID and uses Firebase account or guest identifiers for purchases, Credits, binding, recovery and abuse prevention. The server also uses hashes of installation, account or network data for reconciliation and rate limits. Hashes that remain associated with an account or installation are still identifiers.

For Sign in with Apple, KOI requests the name scope and passes the supplied name to Firebase Authentication to create or update the account. This flow does not request the email scope. Apple and Firebase still handle sign-in data under their policies and applicable settings.

KOI services use account, installation-binding and entitlement data to admit requests. Firebase/Google SDKs also process their diagnostics. Google ML Kit's official disclosure lists device/app information, installation identifiers, performance, feature events, errors and configured languages for diagnostics and usage analytics.

Developer diagnostics and JEV testing

Local input diagnostics are enabled automatically only for accounts granted Lifetime Plus with a verified TestFlight/Sandbox or Xcode environment. There is no manual diagnostics enable switch. The App Store production environment is excluded, and ordinary accounts do not acquire local input diagnostics through this gate.

These local records can include input codes, committed characters, deletion and correction-evaluation events for development testing. They are not synced through iCloud, and there is no automatic upload of the entire trail. Eligible accounts have a clear control; local maintenance applies a 30-day retention rule.

Background JEV evaluation additionally requires current AI sharing consent, Full Access and valid Lifetime eligibility. Bounded sentences and replacement candidates pass through KOI's Cloudflare service to TypeSafe JEV. Withdrawing AI consent blocks new requests. JEV evaluates in the background in this version and does not automatically edit text.

Cloudflare's membership authorization cache lasts at most 60 seconds and contains no input text. This does not mean all Cloudflare or TypeSafe records are deleted after 60 seconds. TypeSafe's published policy states it does not train or fine-tune models on Input; its general retention terms give no fixed deletion period.

Purchases and transaction records

Apple processes payments. KOI uses product, transaction, purchase/subscription status and app-user identifiers from Apple and RevenueCat to calculate Credits, provide Plus, restore purchases, handle refunds and prevent duplicate accounting.

KOI retains Credits ledgers and purchase reconciliation data linked to accounts or guest wallets. After account deletion, transaction data needed for Apple refunds and accounting moves into a private audit record using replacement identifiers for the deleted account. This does not restore the original account or forfeited Credits.

Deleting a KOI account does not cancel an Apple subscription. Use “管理 Apple 訂閱” (Manage Apple Subscriptions) on the deletion confirmation screen or Apple's subscription page in iOS Settings to cancel it.

Service records and result reports

KOI processes request identifiers, timing, stages, models, status/error classifications, App Check and rate-limit data to operate and protect the service. These application summaries do not automatically attach raw prompts or generated content. Cloud platforms also process request and network logs under their configuration.

After separate report confirmation, KOI receives the result type, a SHA-256 digest identifying the generated result and an unsafe-content reason. It stores these with an installation HMAC, App Check app identifier and timestamps. This report does not send your account UID, full prompt, generated text/image or conversation history.

Report metadata becomes eligible for asynchronous deletion 30 days after creation. This is not a guarantee of physical deletion immediately on day 30. Account deletion does not extend or reset that date. If you contact support directly, you also provide your correspondence address, message and attachments.

Retention and deletion timing

Children

KOI is not designed specifically for children under 13 and does not knowingly collect their personal data. Contact us if you believe a child has provided us personal data so we can address it.

Your choices and account deletion

Policy updates

We update this page and its effective date when data handling changes. Changes to AI recipients, shared data or purposes will update the sharing notice and consent version and require renewed agreement.

Contact