Skip to content

Cookies, data and retention

Last updated 12 October 2026

What this website keeps in your browser, what the app's server keeps and for exactly how long, and how to have any of it deleted. Every number here is read out of the code that enforces it, and a check in the repository fails if the two drift apart.

The short version

This website

Cookies

None are set by these pages. If your browser shows a cookie for this domain, it did not come from us.

Local storage

Four keys, written only after you act and gone when you clear the site's data:

KeyWhat it holdsSet when
cwi.adultThat you said you are 18 or over. Nothing else: no date of birth, no age.You press I am 18 or over on the gate.
cwi.consentThe day you dismissed the notice that links here, so it is shown once.You press OK on the notice.
cwi.territoryThe country you chose on the pricing page, as Apple's three-letter code, so prices are shown in your currency next time.You press Set my country.
cwi.reelsA random token sent to our server for your likes and comments. It is not linked to an account; the server stores only its hash.You first like a reel or send a comment.

The country is guessed once from your browser's language setting and then asked, not assumed. Your location is never read.

Reel likes and comments

Likes are counted per browser. Comments wait for our approval before they appear publicly; your chosen display name and comment are then visible to everyone. We keep likes, comments and their browser-token hashes in Cloudflare for up to one year, or until removed. We use your network address briefly to limit requests, without storing it in these records. No Instagram information is shared with us by the Follow link.

Open Comments on the same reel in the same browser to remove your own comment, including one awaiting approval. Clearing this site's storage removes your ability to manage earlier likes and comments; you can still email us for removal. Like counts update from the saved server total. Comment counts and removals may take about a minute to update. Please do not post private information.

Page views

The home page loads /_vercel/insights/script.js, the page-view counter of Vercel, which hosts this site. It reports that a page was viewed; it sets no cookie and stores nothing in your browser, which you can confirm in your browser's own storage inspector. No other analytics, advertising or tracking script is loaded on any page.

The early-access form

If you fill in the form on the home page, what you type is stored on our server, in Cloudflare, for 180 days, and emailed to our inbox through our email provider, Bird; the email is kept until you ask us to delete it. Only if our server cannot be reached does the form send what you typed to a form-forwarding service, FormSubmit, instead. We use your network address briefly to limit requests, without storing it with your answers. The form sends what you have typed when you move past its first step and again past its third, so a form you abandon halfway still reaches us; that is deliberate, so that a lost connection does not lose your request. It is used to open the trial to you and for nothing else.

Studio service enquiries

The Studio form sends your name, email, profession, selected plan, language and optional goals only when you submit. We store the enquiry on Cloudflare for 180 days and forward it to our inbox through Bird to discuss the service. There is no partial submission or FormSubmit fallback for Studio. Forwarded emails remain until you request deletion. The form saves no contact details in browser storage. Production material handling is agreed separately before onboarding; see Studio privacy information.

Hasyam API private preview

This optional business API runs separately from the app’s server. It processes the script, language and pronunciation choices sent in each request on Cloudflare. Its code does not persist request bodies or replies, call external model providers, or use the material for training. Responses have a no-store instruction, and application request logging is disabled. Cloudflare can still process operational and security metadata.

API-key digests and opaque key identifiers stay in the access registry until access is revoked. Throttling uses a brief per-minute counter by key identifier. There is no saved personal vocabulary: overrides apply only to the current request. Pilot enquiries remain in our email inbox until removed on request. For revocation or removal, contact sachin@getconvi.com. See the API documentation and privacy details.

The app on your device

Everything you write, record and perform is stored in the app's own database on your device, and in the private part of your own iCloud if iCloud is on. The privacy page has the whole account; the retention that matters is:

The app's server

The server is a single Cloudflare Worker. It stores neither the text you send the generator nor what comes back. The only audio or video that passes through it is what you send for your double or a reel, which it forwards to the render service without keeping, and a Private Mic reel, which it hosts for the link's life. What it does keep is keyed by a salted hash of an Apple transaction identifier or of an App Attest key, never by a name, email or device identifier, and each item expires on its own. The lives below are the constants in the Worker's source, named so that they can be checked against it.

WhatKept forWhy, and where it is set
The challenge issued to prove an install is a real copy of the app5 minutesLong enough to answer, then gone.worker/src/tokens.ts · CHALLENGE_TTL_SECONDS
The install token record (a hash of the token, which install it belongs to, how it proved itself)90 daysHow long an attested install stays signed in before it proves itself again.worker/src/tokens.ts · TOKEN_TTL_SECONDS
The same record, for a build that proved itself with a subscription receipt instead7 daysA receipt says the subscription was live when read; a week is as long as that is trusted.worker/src/subscriptionproof.ts · SUBSCRIPTION_TOKEN_TTL_SECONDS
The month's spend counter, the number that says how far your plan's balance has gone70 daysA month, plus the slack for a clock that is behind. Then the key expires.worker/src/caps.ts · MONTH_TTL_SECONDS
Your ledger: one row per thing that cost credits, and the running totalsNo expiry; the last 200 rowsA history that expires quietly stops being one. Older rows fall off the front; the totals keep counting them.worker/src/ledger.ts · MAX_ROWS
Your reload balance, and the marker that says a reload was already creditedNo expiry, for eitherA reload does not expire: it stays on your balance until you spend it, and the oldest one is spent first. The marker stays so a purchase can never be credited twice.worker/src/topup.ts · grantLot
The subscriber record: plan, store, first and last seen, how many proofs400 days from the last visitA year, plus the slack for a subscription that renews late. No name, no email, no device.worker/src/subject.ts · SUBJECT_TTL_SECONDS
A hosted Show Report: the PDF and its record30 daysThen the link stops. Deleting it earlier removes the PDF at once and leaves a marker for the rest of the same window so the address cannot be reused.worker/src/reports.ts · REPORT_TTL_SECONDS
A Private Mic link: the reel file, its record and the viewers' reactions7 daysThen the link, the file and the reactions are gone. Taking the link down earlier removes the file at once; the reactions stay until the same day so you can still read them.worker/src/tape.ts · TAPE_TTL_SECONDS
A report about a Private Mic video: the reason, any words added, and a one-way hash of the reporter's address and the link90 daysLong enough to act on it, and it outlives the link, because a complaint about a link that has expired is still a complaint. The address itself is never stored.worker/src/tape.ts · TAPE_REPORT_TTL_SECONDS
A file you added to Media that was removed after a rights complaint: the reason, the file's type, size, date and fingerprint (a SHA-256 hash of its bytes), what you confirmed when you added it and your device's check of it, the reels that used it, and a one-way hash of your account; never the file or its name1,095 days (3 years)The record of a complaint and of what was done about it. The file itself is deleted at once. It stays if you delete everything, because it holds nothing of yours but that hash; the count of files removed from your account and any switch on adding to Media go with everything else.worker/src/media-block.ts · MEDIA_TAKEDOWN_TTL_SECONDS
Activity counts, if you turned them on: ten numbers, never a word400 days from the last reportThe same life as the subscriber record. Off until you switch it on in Settings.worker/src/usage.ts · USAGE_TTL_SECONDS
A render job: what was quoted, what was charged, whether it finished90 daysLong enough to settle the charge, short enough to forget. The lines sent for the render are held only while it is rendering and cleared the moment it settles.worker/src/reeljob.ts · JOB_TTL_SECONDS
Your double: our id for the reference video, the provider's ids for it (BytePlus group and asset, or Higgsfield's), its length, your consent and the face or liveness check's resultUntil you delete itDeleting it removes our record at once. The render provider, Higgsfield, offers no way to delete the video it holds, so the app tells you its copy remains rather than showing a success. A record of the request stays, with no expiry, so the deletion can be completed if the provider ever offers one.worker/src/double.ts · DELETE /v1/double
Media: each picture, video and sound you add, its thumbnail, and what you confirmed about your right to use it (when, and under which version of the Media terms)Until you delete it; 365 days after your plan with reels endsDeleting a file removes the file and its thumbnail 48 hours later and its record, the rights statement included, 30 days later, so a rights holder's claim can still be answered. Delete everything removes every file and record at once. When Apple tells us your plan with reels has ended, a clock starts; a renewal stops it, and at its end the nightly pass deletes your uploads and pack pictures the same way. Looks are not on this clock: they follow your double. The Media page shows a notice from 30 days before.worker/src/reel-reference-media.ts · TOMBSTONE_BYTES_MS, TOMBSTONE_RECORD_MS · worker/src/media-lapse.ts · MEDIA_LAPSE_DELETE_MS
The month's total render spend, for the whole app, with nothing per person in it365 daysOne number per month, checked against the provider's invoice.worker/src/reconcile.ts · RECONCILE_TTL_SECONDS
A LinkedIn or Instagram sign-in you connected for posting: the account's name, handle, picture and expiry, and its token, encrypted (AES-256-GCM) under a key that never leaves the serverUntil you disconnect it or delete everything; otherwise 30 days after the token expiresPosting while your phone is off needs something else to hold the right to post for you, and that is the server and only the server: the token never reaches your device. Disconnecting deletes the ciphertext at once and revokes it at LinkedIn; a token past its life is dropped by the nightly pass. Off until posting is switched on.worker/src/posting-refresh.ts · TOKEN_GRACE_SECONDS
A reel you posted to LinkedIn or Instagram from the app: the marked copy the server holds so it can post with your phone off7 days after it posted or was cancelledThe file goes to the platform from the server, once, through a link that works a single time; then it waits only for a Try again before the nightly pass removes it. Cancelling a post, deleting your double or deleting everything removes it at once. Off until posting is switched on.worker/src/posting-retention.ts · MEDIA_RETENTION_SECONDS
The caption of a post that went out, kept so the post's card can show it90 days after postingThen the words are removed and only the time, the platform and the link stay. A caption never appears on a notification or in a log line.worker/src/posting-retention.ts · CAPTION_RETENTION_SECONDS
A count of wrong passwords on the operator's own panel, by a hash of the address1 hourNot about you unless you are guessing our password.worker/src/admin.ts · ADMIN_LOCK_SECONDS

Request logs at the edge — status codes, timings, the route — are Cloudflare's operational logs for the Worker, and hold neither your material nor an identifier we could look you up by.

Having it deleted

Changes

If this page changes in a way that matters, the date at the top changes and the app's What's New will say so.

Contact

Getconvi Technologies Private Limited, India · Sachin Uppal, Founder and Director · sachin@getconvi.com