Privacy Policy
What the Fronset service stores, for how long, who else sees it, and what erasure can and cannot reach.
Fronset — Privacy Policy
KAPUA Labs LLC, doing business as Fronset 30 N Gould St Ste R, Sheridan, WY 82801, United States
| Document kind | privacy |
| Version | 2026-11-05 (date-based versioning) |
| Effective | On publication at /legal/privacy/. This policy is notice, not a grant: unlike the Terms, the DPA and the per-tier data grant, it is not a document you accept and it carries no consent record |
| Companions | Terms of Service · Data Processing Agreement |
This policy explains what the Fronset service stores, where, for how long, who else sees it, and what a deletion request can and cannot reach. It is written to be checkable. Where the honest answer is uncomfortable — §5 in particular — it is stated plainly rather than softened.
Every factual statement below describes the service as built on 2026-11-05, not as planned.
1. Scope
This policy covers the personal data KAPUA Labs LLC handles for Fronset:
- the Fronset inference API service: the OpenAI-compatible gateway, its management console, and the evaluation and benchmark machinery behind it;
- the public Fronset Benchmark site and its journal (published until September 2026 as llm-bench), including the journal’s email list;
- the waitlist, and sign-up and onboarding;
- our outreach to prospective customers and the trials we run for them (§4.8);
- our community activity on social media: finding public posts about language models and benchmarks, replying to some of them, and measuring clicks on the links we post (§4.8);
- our own social media pages.
2. Who we are
| Controller | KAPUA Labs LLC, a Wyoming limited liability company, doing business as Fronset |
| Registered address | 30 N Gould St Ste R, Sheridan, WY 82801, United States |
| Data protection law | The EU General Data Protection Regulation (GDPR) and the UK GDPR apply to our processing of personal data where their terms reach it, and this policy gives the information they require |
| Privacy contact | privacy@fronset.ai |
| Data protection officer | Not appointed. We are not required to appoint one under Article 37 GDPR: our core activities do not consist of large-scale monitoring of individuals or large-scale processing of special categories of data. Contact for data protection: privacy@fronset.ai |
3. Our two roles
The service handles two materially different kinds of data, and our role differs between them.
| Data | Our role | Governed by |
|---|---|---|
| Call content: the prompts a customer sends and the model responses we return | Processor for the customer (CCPA: service provider) | The Data Processing Agreement |
Two uses of call content that we make for our own purposes (§6): free-tier prompt text, which we keep and replay to new models, and template text on free and shared_anon, which we compare with our library and may adopt | Controller | This policy, §3A and §6 |
| Account, sign-up, billing, support and security data about a customer and its users | Controller | This policy |
| Visitors to our public sites; waitlist and journal subscribers; prospective customers we contact; people whose public posts we read or reply to; people who click our links | Controller | This policy, §4.8 and §12 |
If your personal data reached us inside a customer’s prompt and you want to exercise a right, the customer is the controller for its use of the service, and we will pass your request to it and help it answer. For the two own-purpose uses in the second row we are the controller: write to us and we will answer you ourselves (§8.4). Note the practical limit: prompt content is unstructured and we apply no schema to it, so we cannot search a customer’s account for the records relating to a particular individual. Where we cannot identify you in the data, we will tell you so (GDPR Article 11(2)).
We do not require, expect or ask for personal data in prompt content, and we have no means of detecting it. Terms of Service §4 prohibits any personal data on the free tier, personal data in a Template on any tier, and — on any tier, absent a signed amendment — HIPAA-regulated health information, PCI cardholder data, GLBA-regulated information, government identification numbers, biometric identifiers, and the personal data of children under 13.
3A. Why we use personal data, and on what legal basis
| What we do | Personal data | Legal basis (GDPR Article 6(1)) |
|---|---|---|
| Open and run your account; let your team members work in it | Email, name, password (hashed), role, the account you belong to | (b) contract, where you are the customer; (f) legitimate interests, where you act for a business customer or were invited by one: running the account your organisation asked for |
| Sign-up: check your email address, prevent abuse, and learn which page or campaign brought you | Email, organisation, IP address, browser, the page that referred you and campaign tags in the link | (b) steps you asked for before a contract; (f) preventing abuse and measuring which outreach works |
| Record that you accepted a version of our terms | The account, user, email, document and version, time, IP address and browser | (f) proving the agreement and defending legal claims. Accepting our terms is not consent under the GDPR, and we do not rely on it as the basis for anything |
| Billing and payments, including credit bought by bank transfer | Identifiers at Stripe and Metronome, card brand, last four digits and expiry, billing name and address, a bank-transfer sender’s name, invoices | (b) contract; (c) legal obligation, for records that tax and accounting law makes us keep; (f) matching a transfer sent by someone else, and refunds |
| Support and correspondence | What you write to us | (b) for customers; (f) for anyone else who writes to us; (c) for answering requests about your rights |
| Security and operation of the service | Logs of requests (IP address, browser, address requested), sign-in attempts, error reports | (f) keeping the service and your data secure |
Measure, improve and introduce models using free-tier prompt text and free/shared_anon template text (§6) | Whatever a customer put there, although personal data there is prohibited (Terms §4) | (f) measuring models on real traffic and maintaining the shared library. See §3B |
| Publish the benchmark and the journal | Scores and counts about models; no customer content | (f) |
| The waitlist | Email, campaign tags | (a) consent, which you give when you confirm your address and can withdraw with the link in every email; (f) keeping a record that you left, so we do not add you again |
| The journal email | (a) consent; withdraw with the unsubscribe link | |
| Outreach to prospective customers (§4.8) | Name, work email, employer, role, country, public information about your work, our notes and correspondence | (f) offering our service to businesses that may need it, where the law of your country allows it without consent; otherwise we ask for consent first |
| Trials for prospective customers | Contact details; test inputs you send (we ask for none that are personal) | (f) |
| Community activity on social media (§4.8) | Your public handle, display name and post, and our reply | (f) taking part in public discussion of models and benchmarks |
| Counting clicks on links we post (§4.8) | A shortened form of your IP address, country, browser and device type, time of click | (f) measuring, in aggregate, whether our posts are useful |
| Our social media pages | What the platform shows us, including page statistics | (f); for page statistics we are joint controllers with the platform (Article 26) |
| Keeping registers of rights requests and personal-data breaches | Your request and our answer; breach facts | (c) legal obligation (GDPR Articles 5(2), 12, 33(5)) |
Where we rely on consent you may withdraw it at any time, as easily as you gave it. Withdrawing does not make earlier processing unlawful.
3B. The legitimate interests we rely on
Where the table in §3A gives basis (f), the interest is the one named in the row. We have weighed each against your interests and rights and written the assessment down; you can ask us for it. The ones you are most likely to ask about:
- Outreach. We contact people at businesses that may need a model-routing service, using their work address and public information about their work. Every message says who we are, links this policy and tells you how to say no. If you say no, we keep only what we need to make sure we never contact you again.
- Community activity. We read public posts about language models, reply to some of them, and keep a short record of who we have talked to so we do not repeat ourselves or reply to someone who asked us not to. We do not build a profile of you beyond that record.
- Our own uses of customer content. On the
freetier, prompt text is kept and re-sent to newly introduced models so we can measure them, and onfreeandshared_anontemplate text is compared with our library. Our terms prohibit personal data in both. If personal data reaches us there anyway, we use it only for those purposes, keep it only as long as §6 says, and delete it on request.
You have the right to object to any processing based on legitimate interests (§8.4). You may object to direct marketing at any time, without giving a reason, and we will stop.
3C. Where the data comes from, what you must give us, and automated decisions
Sources. Most data comes from you. We receive data from others in these cases: from Stripe, about payments and bank transfers; from your organisation, when a colleague invites you; from public sources (company websites, professional profiles, public posts and public code repositories) when we research a prospective customer; from social media platforms and a third-party search service for X, for public posts we read; and from TinyURL, for clicks on our links.
What you must give us. To open an account we need an email address, and to buy credit we need what Stripe asks for. Without them we cannot provide the service. Nothing else is required.
Automated decisions. We make no decision about you based solely on automated processing that has legal or similarly significant effects on you. Our routing and evaluation decide about models, not people. In our community activity, software sorts public posts to suggest which ones we might reply to.
4. What the service stores
Everything below is a real store in the running system.
4.1 Account and identity
| What | Notes |
|---|---|
| User email, name, password hash | Standard authentication records |
| Sign-up records | The email address and organisation you register with, and the IP address, browser, referring page and campaign tags of the sign-up. An unfinished sign-up is deleted 7 days after it expires and a refused one after 90 days. The IP address, browser and referrer are removed 30 days after the sign-up is completed |
| Invitations | The invited person’s email address, and who invited them. Deleted 30 days after the invitation is accepted, expires or is withdrawn |
| Account membership and role | A user belongs to exactly one account. Roles are owner, admin, billing and member; admin and billing are disjoint permission sets rather than ranks (Terms of Service §3) |
| Consent acceptance | Append-only. Stores the account, the user, a copy of the user’s email address so the record survives user deletion, the accepted document’s kind, tier and version, the acceptance timestamp, and metadata (IP address, user agent, signup surface). Consent is to a specific document version — accepting one version does not carry to the next. Withdrawal is recorded as a new superseding record, never as an edit or deletion |
| API keys | Only a SHA-256 digest of the token plus a short display hint. The raw token is returned once at issue and is never persisted, logged or recoverable |
4.2 Customer provider credentials
The service supports two access modes, and this section is about the first. In bring-your-own-key mode a customer supplies their own API key for a model provider and we call that provider as them. In operator-supplied mode we supply the model access on our own provider credentials and bill the customer for the usage — it is the mode the service, the portal and the documentation call managed; the two names describe one arrangement, and this policy uses “operator-supplied” throughout. §7.2 sets out what that changes, and the bullet at the end of this list explains why it is not a fallback.
- Stored under envelope encryption: a fresh 256-bit data key per credential, AES-256-GCM over the secret, and the data key wrapped by that account’s own key-encryption key in Azure Key Vault using RSA-OAEP-256. Ciphertext and wrapped data key live in our database; the key-encryption key never leaves Key Vault.
- Plaintext exists only in worker memory, cached for a configurable period, currently about five minutes (at most 330 seconds), which is also the bound on how long a revocation at the provider takes to take effect in a warm worker.
- Decryption fails closed: a Key Vault outage or a failed unwrap raises an error. It never falls back to a stored or operator value.
- We store the last four characters for display only.
- Every materialization of plaintext writes an append-only credential-access record (purpose, provider, capability — never key material).
- A customer account never falls back to our provider keys. Where a capability is served in the operator-supplied access mode, our keys are used by design and disclosed on the capability (§7.2) — not as a fallback when the customer’s own credential is missing, which always fails the call instead.
- Where the service accepts a key supplied on a per-request header rather than from the vault, that key is used for that request only and is never persisted.
4.3 Call content
Every API call writes one append-only call record. What that record holds depends on the account’s tier.
Prompt content. In an OpenAI-compatible request, the record’s prompt-variable field holds the messages for a capability that takes free text, and the request’s variables for any other capability — so that field is the customer’s prompt text. Whether it is written at all is decided at a single write chokepoint:
| Tier | Prompt text written? |
|---|---|
free | Yes, verbatim |
shared_anon | No — not written to the call record |
private | No — not written to the call record |
The gate fails closed: an unknown, missing or unreadable tier is treated as private, the most restrictive setting. It governs every write path — synchronous calls, batch enrolment, image calls, judge calls, fan-out sibling records and internal repair calls — because there is exactly one call-record creation site.
What “not written” does and does not mean. It means the prompt is not persisted on the call record. It does not mean the prompt never exists in our systems: it is necessarily present in worker memory while your call is being served, including when we retry or fail over to a second model within the same request. And for batched calls it is persisted, on every tier, for the operational window — see Batch working copies below. That is the one place this guarantee is qualified.
Model output. The parsed output — the validated result on success, or the raw response on a parse failure — is written on every tier, including private, because the delivery paths rebuild your result from it. How long it then lives depends on the tier: on shared_anon and private it is deleted once delivered and evaluated. See §5.
Everything else on the record is metadata rather than content: capability, model, provider, token counts, latency, cost, error category and message, service tier, and a pointer to the exact prompt-template snapshot used.
Batch working copies. A batched call cannot be served without keeping its rendered request: the provider submission reads it back, and a retry or a resubmission needs it again. So for batch traffic, on every tier including private, the rendered messages are held on the call record’s operational metadata for the operational window. They are stripped when the batch finalizes, and again by a daily sweep that catches anything left behind and strips any record still in flight after 72 hours. A batch also carries a hard 24-hour expiry backstop. In practice the window is hours to a couple of days.
4.4 Batch API files
| Artifact | Store | Retention |
|---|---|---|
| Customer-uploaded JSONL input file | Azure Blob Storage, with a database row | free: 30 days. shared_anon and private: deleted when the batch finishes |
| Service-rendered output and error files | Same | free: 30 days. shared_anon and private: deleted shortly after your first fetch, and in any case within 72 hours |
| Per-line parsed request body | Database | Cleared when the item reaches a terminal state; an item stuck short of that retains it until purge |
A batch itself expires after a hard 24-hour backstop.
4.5 Webhooks
- A customer registers a destination URL, validated at creation as HTTPS-only and public-IP-resolving, plus a signing secret shown exactly once and stored in the vault; the endpoint row holds a pointer, never the secret.
- Delivery records are deliberately content-free — the payload is rebuilt from the call record at send time. This is precisely why §5’s output retention exists.
- Undelivered records dead-letter after 24 hours.
4.6 Billing
- The service is prepaid: a customer buys credit and usage draws it down. Metering, the credit balance and invoicing run through Metronome (§7.3); the card is held by Stripe, and so is the bank account a customer can pay credit into by transfer, where that is offered.
- We store Stripe and Metronome customer identifiers, subscription identifiers and plan state. A full card number, card security code or bank account number never reaches our systems. A card is entered in a Stripe-hosted form. Stripe’s record of it, which we receive and keep, includes the card’s brand, last four digits and expiry date and any billing name, email and address entered with it.
- For a credit purchase by bank transfer, Stripe tells us the sender’s name as the sending bank reports it, the network (ACH or wire), the amount, the date and the reference the sender attached. We keep them with the purchase they paid for. We use them to match the transfer to the account, to hold a transfer sent from an account in another name until the customer confirms it, and to make any refund to the account that sent it. Where we must make a refund ourselves rather than through Stripe — an international wire, for example — we ask the customer for the account to send it to, and use those details for that refund.
- Metronome receives an account identifier, per-request usage records and invoice amounts. It does not receive prompt content, model output or an email address.
- Usage and cost aggregates derived from call records, and the card and bank-transfer records above, are retained for billing and legal-retention purposes and survive erasure (§8). We keep invoices and the records behind them for 10 years after the end of the financial year they relate to, which is the longest period tax and accounting law may require of us. A bank-transfer sender’s name that never became credit is deleted after 90 days. We keep copies of Stripe’s webhook messages for 90 days.
4.7 Operational and security data
| What | Where | Note |
|---|---|---|
| Application logs | The application host | Content values (prompt text, batch messages, content snippets) are excluded from logging by policy. This is a policy, not a mechanically enforced invariant. Kept for 30 days |
| Web server logs | The application host | IP address, browser, address requested and referring page of each request to the console, the API and the sign-up and waitlist pages. Kept for 14 days |
| Error events | Sentry, when a reporting endpoint is configured | Default personal-data capture is disabled; request-body capture is disabled — the mechanism by which prompt content would ordinarily reach an error event — and the entire local-variable set of every module that handles credentials or plaintext secrets is discarded before an event leaves the process. Local variables elsewhere are retained, because a stack trace without them is materially harder to diagnose, and are subject to the scrubbing below. Two composed scrubbing layers then apply: a recursive name-based scrubber extended with the service’s own secret-bearing field names, followed by a pass redacting provider-key headers in both HTTP and WSGI form. Scrubbing fails closed — a scrubbing error destroys the carrying fields, and failing that the event is dropped. We do not warrant that content can never appear inside an exception message produced by an upstream component. Sentry is hosted in the United States (Iowa) and engages its own subprocessors, listed at sentry.io/legal/subprocessors. Sentry retains error events for 30 days, after which they are no longer accessible. Retention is fixed when an event is ingested, so a later change to our Sentry plan would not extend events already stored. |
| Operational alerts | Email to our own staff, sent through Microsoft Azure | Alerts carry counts and identifiers, not content |
| Credential-access audit | Append-only records | See §4.2 |
4.8 Waitlist, journal, outreach and community data
| What | What we keep | How long |
|---|---|---|
| Waitlist | Your email address and the campaign tags of the link you came from | An unconfirmed sign-up is deleted 7 days after its deadline. A confirmed one is kept until 90 days after we invite you, or until you open an account. If you leave, we keep only a scrambled form of your address so we do not add it again |
| Journal email | Your email address, held by our email provider Buttondown | Until you unsubscribe |
| Outreach | Your name, work email, employer, role, country, public information about your work, and our correspondence | Until one month after we collected it if we have not contacted you; 12 months after our last message if you do not reply; if you ask us to stop, only what we need to never contact you again. Details: /legal/outreach/ |
| Prospect trials | The test inputs you send us and the results | Deleted within 7 days after we send you the results |
| Community activity | Your public handle and display name, the post we replied to, our reply, and whether you replied | We have not yet set a period for community activity; we will publish one. If you ask us not to contact you, we keep your handle only to honour that. Details: /legal/community/ |
| Link clicks | For each click on a link we posted: a shortened form of your IP address, country, browser, operating system and device type, and the time | Individual clicks 30 days; daily totals without IP addresses after that |
5. Model output — the honest statement
We write the model’s output on every tier, including shared_anon and private, and on those two tiers we delete it once you have it. Both halves of that are deliberate, documented decisions, and we will not describe them any other way.
Writing it is delivery-driven: three paths rebuild the customer’s own deliverable from that field after the call has finalized.
- Webhook delivery. Delivery records are content-free by design, so the payload is rebuilt from the stored output at send time. Without it, the delivery is lost.
- Batch API output files. The OpenAI-compatible output file is rendered from stored output at finalization.
- Retrieval by the customer. We serve the result back on request, for as long as we still hold it — which is also the recovery path when a webhook is lost.
Beyond those three, stored output is used for the evaluation and judging operations the customer instructs, and — on the free tier only — as a comparison baseline in model-introduction replay (§7.2A), which we perform for our own purposes as the consideration for that tier. It is used for nothing else.
On shared_anon and private, retention is bound to delivery. We delete the output of a call promptly — typically within minutes — once it has been delivered to the customer and any evaluation of it has finished. An output we could not deliver is held for retrieval for at most 72 hours, then deleted. There is no retrieval of a past output beyond that. The one exception is the evaluation evidence a customer elects to keep for review of their own criteria (§6). This is a schedule we enforce with a continuous sweep and monitor; if it lengthens, that is a new version of these documents.
On free, output is retained until erasure or account closure, because it is the replay baseline. Once delivery is complete we may also delete it at our own discretion to manage storage.
We do not say, because it would not be true:
“We do not retain the content of your requests or responses."— onfreewe do, verbatim, and on every tier we hold the output for the time it takes to deliver it.“On the shared and private tiers no raw content is retained."— a batch working copy and the output until delivered and evaluated are both raw content held for a bounded time.“Outputs are discarded immediately after delivery."— “promptly, once delivered and evaluated, backstopped at 72 hours” is the true sentence, and the difference is the evaluation and the undelivered case.
Erasure is a separate matter. It is real, it covers model output on every tier, and it is not governed by the retention matrix below — see §8, including §8.2 on what it does not reach.
6. Retention by tier
This is the authoritative statement of what we keep. It is enforced in code at a single write chokepoint, and it fails closed.
| Artifact | free | shared_anon | private |
|---|---|---|---|
| Prompt text | Retained verbatim | Never written | Never written |
| Prompt-template snapshot reference | Retained | Retained | Retained |
| Template content (system prompt / registered template) | Stored, and usable by us for taxonomy; yours to delete once the one-time evaluation is done | Stored, and usable by us for taxonomy; yours to delete once the one-time evaluation is done | Stored to run your calls only; not used for taxonomy; yours to delete at any time |
| Verdicts and quality statistics | Retained | Retained | Retained |
| Model output | Retained | Deleted once delivered and evaluated — see §5 | Deleted once delivered and evaluated — see §5 |
| Evaluation evidence (the judged exchange) | Retained with the output | Deleted with the output, except for the review window a customer sets on a capability judged on their own criteria | Deleted with the output, except for the review window a customer sets on a capability judged on their own criteria |
One thing this table does not cover: it applies by tier from the moment a tier takes effect: an account that moves to free limits is handled under the free column from the time of the move, whether or not it has since accepted the free-tier data grant (Terms §6.1 and §14).
Two points that matter:
- Two categories we use for our own purposes, not just to run the service.
free-tier prompt text (re-executed against newly introduced models, and used for taxonomy) and template content onfreeandshared_anon(compared with our library, and possibly adopted under Terms §9). For those two categories we are a controller under the GDPR and the UK GDPR, not the customer’s processor, and we are not acting as a “service provider” under the CCPA. Our basis is our legitimate interest in measuring models on real traffic and maintaining our library (§3B). We keepfree-tier prompt text for as long as we use it to measure models, and we will publish a period, and template text we adopt for as long as it is in our library. Our terms prohibit personal data in both. If it reaches us anyway, we use it only for those purposes, you can write to us directly (§8.4), and we delete it on request. We do not sell or share either. A customer that needs processor and service-provider treatment for everything it sends should use theprivatetier. See DPA §6.4. - Verdicts on our capabilities, on
freeandshared_anon, pool globally. Their verdicts and cost/quality signals feed a shared pool used to rank models. A capability of your own never pools, on any tier, andprivatekeeps its own statistics. This pooling is the economic basis of the free tier, and it is disclosed at signup — which is what the version-stamped consent record exists to evidence. - Tier changes are forward-only. Moving from
freetoprivatedoes not retroactively un-pool verdicts already contributed; it changes what happens from that point on. Verdicts already pooled will not be un-pooled. We word that as a commitment rather than as an impossibility: re-tagging and recomputing is technically possible, we reserve it for repairs and for honoring erasure requests where we determine it is required, and we do not offer it as a customer-triggered right. Saying “cannot” would be false.
7. Who else sees the data
7.1 Model providers under customer keys — not our subprocessors
Where a task runs in bring-your-own-key mode, a customer’s prompt is sent to the model provider using that customer’s own API key, under that customer’s own contract with that provider. We never substitute our key, with one exception: unless the customer turns it off for a capability of their own, we adapt that capability’s template once for each model it runs on, on our own credentials and through providers we contract with (which are our subprocessors for that call, §7.2). The adaptation is sent the template text, the capability’s description and its evaluation criteria — never the customer’s prompt variables. The provider is therefore the customer’s processor, not our subprocessor, and the provider’s own terms govern what it may do with that content.
This has a consequence customers must act on: at least one provider (Google’s Gemini API) applies materially different data-use terms to unpaid projects, under which it uses submitted content and generated responses to improve its products and human reviewers may read, annotate and process API input and output. The service does not detect the billing status of a supplied credential. Choosing a paid provider project is the customer’s responsibility, and no confidentiality commitment we make can override the terms of a provider the customer chose.
The current registered provider set is listed, with each provider’s contracting entity and location, in the Subprocessor Register. Several are established outside the United States, the EU and the UK, including in Singapore and the People’s Republic of China. We do not restrict which providers serve a customer’s data. A customer decides which models serve its data through the model group of a task of its own, which it can create, or copy from one of our shared tasks where that task can be copied; a task of its own is billed like any other. A shared task runs only on models in the model group we set for it, and a call cannot change that group. Wherever models and model groups are selected, the selector sees each model’s provider, establishment, serving region, transfer basis and data-use terms. For our shared tasks and our own workloads we select the providers, and each shared task’s current providers are listed.
7.2 Operator-supplied serving — model providers are our subprocessors
Operator-supplied is the access mode the service, the portal and the documentation call managed (§4.2). The two names describe one arrangement, and nothing else answers to either.
Where a capability is served in the operator-supplied access mode, we supply the model access on our own provider credentials and bill the customer for the usage. On that path the model providers are our subprocessors, because the content travels to them under our account and on our instructions.
- It serves the customer’s own request and returns them the result, unlike the replay in §7.2A.
- It is available on every tier, and the tier retention rules in §6 apply unchanged — the access mode decides who contracts with the provider, not what we keep.
- The customer cannot constrain the provider set by their choice of credentials, because the roster is ours. The 30-day notice and objection rights below apply to it in full.
7.2A The other path on our credentials: free-tier model-introduction replay
One further operation runs on our provider credentials rather than the customer’s, and is distinct from operator-supplied serving: model-introduction replay, in which we re-execute free-tier prompt text against a newly introduced model to measure it. On that path the model providers are our subprocessors, because the content travels under our own account.
- It applies to the
freetier only. Noshared_anonorprivatecontent travels this path — on those tiers prompt text is not retained, so there is nothing to replay. - The customer cannot constrain which providers are reached on this path, because the roster is ours. A customer that does not want its content to travel this path should not use the
freetier. - The work returns the customer nothing and is not billed to them. It is the consideration for the free tier.
- The replay corpus is strictly the account’s own calls — one customer’s prompts are never replayed for another customer’s benchmark. Likewise, judge reference examples are scoped to the account, so one customer’s outputs do not appear inside another customer’s judge prompt, and we never judge one customer’s output in the same request as another’s.
Benchmark-set inputs are, however, exempt from tier retention limits: an uploaded set is retained on every tier including private, so that it can be re-run. The service records the uploader’s acknowledgement of that retention — who, and when — and refuses to execute a set for which no acknowledgement exists. Benchmark sets are covered by erasure (§8.1).
7.3 Who else receives personal data
| Recipient | What it does for us | Personal data | Role | Where | Transfer safeguard |
|---|---|---|---|---|---|
| Microsoft Corporation (Azure) | Hosting: servers, database, file storage, key vault, backups | Everything this policy describes. File storage holds batch files, prompt text and raw model responses moved out of the database, uploaded benchmark sets and generated images | Processor | United States (Azure Central US) | 2021 Standard Contractual Clauses (SCCs) in Microsoft’s data protection addendum; Microsoft is also certified under the EU-US Data Privacy Framework (DPF) |
| Microsoft Corporation (Microsoft 365) | The email we send and receive: sign-up and invitation emails, waitlist confirmations, alerts, and our mailboxes | Email addresses, names, what you write to us | Processor | European Union / EFTA | As above |
| Cloudflare, Inc. | Domain name service and hosting of our public sites (no analytics) | Visitor IP address and request data, to deliver the page | Processor | United States and Cloudflare’s global network | DPF; SCCs as fallback in Cloudflare’s addendum |
| Functional Software, Inc. (Sentry) | Error reporting | Error reports, scrubbed of credentials (§4.7) | Processor | United States | DPF; SCCs |
| Stripe, LLC | Payments | See the paragraph below this table | Independent controller, and processor for the customer records and invoices we create | United States | DPF; SCCs |
| Cloud Metering, Inc. (Metronome), a Stripe company | Usage metering, credit balance and invoicing | Account identifier and name, usage records, invoice amounts | Processor | United States | SCCs |
| tawk.to, Inc. | Support tickets | Alerts and support requests | Processor | United States (hosting in the US; AWS in the US and Ireland) | DPF; SCCs |
| Buttondown, LLC | The journal email list | Subscriber email addresses | Processor | United States | SCCs |
| TinyURL LLC | Short links in our social posts | Click data (§4.8) | Processor | United States | None found |
| Buffer Inc. | Scheduling our social posts | Our posts, which may name or reply to you | Processor | United States | SCCs |
| Social media platforms (X, Reddit, Bluesky, Mastodon servers, LinkedIn, Meta) | Where we read public posts and publish ours | Public posts, handles, our replies | Independent controllers; joint controllers for page statistics | Various | — |
| twitterapi.io | Search of public posts on X | Public posts and handles | Processor | United States | None confirmed (no DPA offered) |
| Better Stack | Uptime monitoring and the status page | None: the status page has no subscribers | Processor | Not applicable (no personal data) | Not applicable (no personal data) |
| GitHub, Inc. | Our source code | Our working list of the people we may contact | Processor | United States | No DPA (free personal plan); GitHub is DPF-certified |
| Anthropic PBC | An AI coding assistant our operator uses to build and run the service | Occasional operational queries on production data and logs | Processor | United States | SCCs in Anthropic’s commercial terms |
| Model providers we select | Running the model calls for our shared tasks, for customers’ tasks and benchmark runs that run on access we supply, free-tier replay, template adaptation, evaluation and judging, and our own community activity and trials | Prompt content and model output | Processor (our subprocessors for customer content) | See the Subprocessor Register, which lists each provider’s entity, establishment, serving region, transfer basis and data-use terms | See the register, per provider |
| Professional advisers, authorities, a buyer of our business | Only where needed: legal advice, a legal obligation, or a sale of the business | What the purpose requires | Controller or processor as the case may be | Various | As the law requires |
Stripe is not our subprocessor. Billing contact and payment data are collected by Stripe — card data through a Stripe-hosted checkout, and bank transfers into an account Stripe holds for the customer; no full card number reaches our systems. For that data Stripe acts as an independent controller, determining its own purposes and means, and its processing is governed by Stripe’s own terms rather than by our DPA. For the records Stripe returns to us (§4.6), we are the controller.
We will give at least 30 days’ notice before adding or replacing a subprocessor, by updating the register and by email to the account address. A customer may object on reasonable data protection grounds within that period; if we cannot resolve the objection, the customer may terminate the affected service without penalty.
8. Your rights, and the honest limit on erasure
8.1 What we delete
On a verified erasure request, or on account closure, erasure completes within 30 days and produces a certificate listing exactly what was erased and what survived. It is a real, implemented, idempotent operation with a dry-run mode, and it refuses to run against our own operator account.
It blanks or deletes, for that account:
- every call record’s prompt text, content-bearing metadata, and model output — the last of these on every tier, because the retention matrix governs what we keep by default while erasure is the customer overriding it;
- evaluation dispatch input and output snippets, and the evaluation evidence kept for a customer’s review, which is deleted outright;
- fan-out judge candidate and winner payloads (the same model output, multiplied across the roster);
- the text of every template and every stored version of it — the record of which version ran a call survives, without the text;
- Batch API content at rest: every uploaded input blob and every rendered output and error file is deleted and its row tombstoned, and every per-line request body is blanked;
- uploaded benchmark sets: their items and uploaded files are deleted, and the set’s own row is retained, emptied of your content and deactivated, because operator records of benchmark runs reference it;
- vaulted provider credentials, which are destroyed, and service API keys, which are disabled;
- support data, other than the records §8.3 identifies as surviving. Your account and its API keys are deactivated rather than deleted: key rows hold only a one-way hash and never key material, and all API access stops immediately at the authentication layer.
Because several of these tables are append-only by design, erasure overwrites fields rather than deleting rows. A blanked row no longer matches the erasure query, which is what makes the operation safe to re-run. The procedure defaults to a dry run, cannot be executed against our own operator account, and is followed by a verification query whose report is available to the customer.
Before we erase, you get your data out. Following termination we give at least 7 days’ written notice before erasure begins. On written request made before then, we will provide within 14 days a copy of retained prompt text, model output, Batch API input files, benchmark sets and templates in a structured, machine-readable format; while such a request is outstanding erasure does not begin, and the 30-day period is extended. Provider credentials and webhook signing secrets are not exported.
8.2 What erasure does not reach
We list these because the alternative is a promise we would break. We make no warranty that customer content is absent from them.
| Not erased | Why it matters | Note |
|---|---|---|
| Registered output schemas | Structure a customer authored to describe a valid answer | Retained. This is why personal data in a schema is prohibited (§3). Template text, which this row used to cover, is now erased — the record of which version ran a call survives, without the text |
| Provider error messages stored on call records | A provider’s error text can echo part of the request | Retained. We will give notice if we bring this within erasure |
| Cached idempotency results, and unused file-reference columns on call records | Would include model output | Dormant — no current code path writes to them. If either is brought into active use, we will bring it within erasure first |
| Application logs and Sentry events | Content is not intentionally written to either (§4.7), but neither is within the erasure procedure’s reach | Governed by their own retention |
| Backups | Erasure reaches live data. A backup taken before the erasure keeps the data until the backup expires, after 30 days | We never restore a backup into use without repeating the erasures made since it was taken |
If you require any of the retained items above to be erased, contact us and we will treat it as a specific request rather than declining it. We do not represent it as automatic.
8.3 What survives, and why — the asymmetry
Capitalized terms in this section have the meaning given in Terms of Service §1; this section is worded identically to Terms of Service §12.3 by design.
We can delete your content. We cannot un-derive an Aggregate. This asymmetry is stated identically here and in the Terms of Service; DPA §8.4 states it subject to the qualification below. It is not a hedge; it is a structural property.
These survive an erasure request by design:
- Verdicts, and the Aggregates computed from them. A Verdict is a fact about a model — “model X scored 0.72 on Capability Y” — computed across many contributors. Once a
freeorshared_anonAccount’s Verdicts have been folded into the global pool, the pooled Aggregate cannot be un-derived: we can recompute the average without them, and will where erasure requires it, but the recomputed number is a new number. It does not undo routing decisions already made, models already retired, or rankings already published. Our erasure report counts these rows explicitly rather than silently omitting them. One qualification, and it now runs in your favour: a Verdict also carries the judge model’s written rationale, which is free text produced by a model that saw your Output and can therefore restate or quote part of it (“the answer omitted the revenue figure…”). Erasure blanks that rationale, on every tier. What survives a Verdict is the score, the failure mode and the counts — the numbers the comparison rests on — and no free text. - Aggregate usage and billing records, retained for the period required by applicable tax and accounting law.
- Access and audit records, including the append-only record of every time one of your Provider Credentials was decrypted and by which subsystem.
- Acceptance records. The record that you accepted a specific version of our terms on a specific date is our evidence of the agreement and of what we told you. These records are append-only and survive Account closure; withdrawal is recorded as a new superseding record, never as an edit or a deletion. On erasure we purge the incidental metadata attached to them (IP address, user agent) and retain the fact of acceptance.
8.4 Your rights, and how to use them
Whoever and wherever you are, you have these rights over personal data we hold as a controller:
- Access: a copy of your data and information about how we use it.
- Correction of inaccurate data. You can change your name and email address yourself in the console.
- Erasure, where the law allows it (for example, once we no longer need the data, or you withdraw consent or object and we have no overriding reason).
- Restriction: asking us to keep your data but stop using it while you contest its accuracy or object to our use of it, where our use is unlawful but you want the data kept, or where we no longer need it but you need it for a legal claim.
- Portability: receiving data you gave us, which we process by contract or consent, in a common machine-readable format, or having it sent to someone else.
- Objection to processing based on our legitimate interests. To direct marketing you can object at any time and we will stop.
- Withdrawal of consent, where consent is our basis, at any time.
How. Write to privacy@fronset.ai. We answer within one month of receiving your request. If a request is complex, or you send many, we may extend that by up to two further months; we will tell you within the first month and say why. We do not charge, unless a request is manifestly unfounded or excessive. We ask you to verify your identity only when we have a reasonable doubt, usually by replying from the address on the account. Someone may act for you with your written authority.
Complaints. You may complain to a data protection supervisory authority, in particular the one in the EU Member State of your habitual residence, your place of work or the place of the alleged infringement. In the UK you may complain to the Information Commission (which replaced the Information Commissioner on 30 September 2026 and still uses the name ICO). You can also complain to us: we will acknowledge a complaint within 30 days and tell you the outcome without undue delay, and the Information Commission may expect you to have raised it with us first.
US state privacy laws. Under the California Consumer Privacy Act and the comprehensive consumer privacy statutes of other US states, you may also have rights to know, correct and delete, to opt out of sale or sharing, and to not be discriminated against for exercising them. We do not sell personal information and we do not share it for cross-context behavioral advertising.
Two practical limits, stated plainly. First, for call content we act as a processor on our customer’s instructions, except for the two own-purpose uses in §3 and §6. If your data reached us inside a customer’s prompt, that customer answers for it and we will pass your request on and help. Second, prompt content is unstructured and we apply no schema to it, so we cannot search an account for the records relating to a particular individual. What we can do is erase a whole account, erase or amend a record identified to us by identifier, and provide the compliance information in DPA §13.
Customers can retrieve their own call records through the API, which covers much of access and portability in practice, and can export their content before erasure under §8.1.
9. Security
Each item is a description of the running system:
- Tenant isolation is enforced at the data-access layer. Models are account-scoped by default, and every deliberate cross-account read must appear in a reviewed allowlist that an automated test enforces — both new entries and stale ones fail the test suite.
- Credentials at rest: per-credential data key, AES-256-GCM, data key wrapped by a per-account key-encryption key in Azure Key Vault, fail-closed decryption, no plaintext at rest.
- API keys at rest: SHA-256 digest only; the raw token is unrecoverable.
- Webhook URLs validated HTTPS-only with public-IP resolution as a server-side request forgery guard; signing secrets vaulted and shown once.
- Error reporting scrubbed at two composed layers with a fail-closed fallback (§4.7).
- Retention decisions enforced at one write chokepoint that fails closed on an unknown or unreadable tier.
- Traffic in transit is carried over HTTPS.
Security incidents. If there is a breach leading to accidental or unlawful destruction, loss, alteration or unauthorized disclosure of or access to customer content or to the data we hold as controller, we notify affected customers at their registered account email address without undue delay, and in any event within 48 hours of becoming aware of it. Our detection is alert-driven rather than a continuously monitored security operations function, so the 48 hours run from our actual awareness.
For personal data we hold as a controller, we notify the competent supervisory authority within 72 hours of becoming aware of a breach unless it is unlikely to result in a risk to people, and we tell the people affected without undue delay when the risk to them is high. We keep a record of every personal-data breach.
What we do not have, and do not claim. No SOC 2 Type II or ISO 27001 certification. We do not represent that we conduct third-party penetration testing, formal business-continuity or disaster-recovery testing, or that we maintain documented recovery point or recovery time objectives. Our hosting provider encrypts the disks and file storage we use at rest, with keys it manages. The additional encryption described above protects provider credentials specifically. We will say so here when any of this changes.
10. Where your data is, and international transfers
Where it is. KAPUA Labs LLC is a United States company (§2). Our production systems (servers, database, file storage, key vault and backups) are hosted by Microsoft in Azure Central US, in the United States, and so is the copy we use to test releases, from which customer and personal data are removed or scrambled. Our personnel may administer those systems remotely from outside the United States. During development we also hold copies on a computer outside Azure.
Transfers. Customers and individuals in the EU and the UK who send personal data to us, in the United States, make a transfer under Chapter V of the GDPR or the UK GDPR; for customers, the Data Processing Agreement incorporates the European Commission’s Standard Contractual Clauses and the UK Addendum for it (DPA §12). When we pass personal data on to a recipient in another country, for each recipient §7.3 and the Subprocessor Register name the safeguard: in most cases the European Commission’s 2021 Standard Contractual Clauses, and, where the recipient is certified, also the EU-US Data Privacy Framework. For transfers from the UK we use the UK’s International Data Transfer Addendum to those clauses. You can ask us for a copy of the safeguard for any recipient at privacy@fronset.ai.
Model providers: establishment and serving location are different questions.
- Establishment is the domicile of the entity we or you contract with, and decides which legal system can compel it to disclose data wherever the data sits. Several providers contract through a company in Singapore whose group is based in the People’s Republic of China, and some are established in the People’s Republic of China itself; the register names each one. A provider whose group is based in another country may remain subject to that country’s laws.
- Serving location is where inference actually runs. It does not follow from establishment, and the register says what we know of it for each provider.
- What the selector sees. For every provider, the register states its contracting entity, establishment, serving region (as known), transfer basis and data-use terms. The serving region of each model is shown where models and model groups are selected and in the register.
Who chooses, and how you control regions. We do not restrict which providers serve your data. You control which models, and therefore which providers and serving regions, receive your content by the model group of a task of your own, which you can create, or copy from one of our shared tasks where that task can be copied, and which is billed like any other task of your own. The transfer to those providers is then made on your instruction, and in bring-your-own-key mode under your own agreement with each provider. A shared task runs only on models in the model group we set for it, and a call cannot change that group. For our shared tasks and our own workloads (free-tier replay, template adaptation, evaluation and judging, community activity and trials), we choose the providers; for those we are the exporter, we hold a transfer safeguard and a transfer assessment for each provider we use, and we list each shared task’s providers.
11. Children
The service is not directed to children. You must be at least 18 to open an account, and the Terms of Service prohibit submitting the personal data of children under 13 through the service. We do not knowingly collect personal data from children, and we will delete it if we learn we have.
12. The public benchmark site
The public Fronset Benchmark site publishes per-model quality bands, cost figures and rankings, generated from an immutable snapshot of the aggregate statistics described in §6.
The published artifact contains no customer prompt or output text — judge-derived scores are numbers. Published rankings name the providers’ models; that is comparative commentary about third-party products, not a disclosure about any customer.
Visitors to the public site. Our public sites are hosted by Cloudflare, which processes each visitor’s IP address and request to deliver the page. Requests to the management console, the sign-up pages and the API are recorded in our web server logs (§4.7). We use those records to operate and secure the service.
Cookies and similar technology. Our public sites use no analytics and no third-party tracking scripts, and set no cookies. The management console uses only strictly necessary cookies. We do not use advertising or cross-site tracking on any surface.
13. Changes to this policy
This policy is versioned by date (this version: 2026-11-05). Exactly one version is current at any time, and we record the URL of the published text, and, where we do not control the bytes of the published page, a SHA-256 digest of it, alongside the version.
This policy is versioned on its own: a new version of it does not change the Terms of Service or the Data Processing Agreement, and a new version of those does not change it.
| Version | Summary |
|---|---|
2026-11-05 | The GDPR version: states how the GDPR and the UK GDPR apply to our processing, with the changes listed at the end of this policy. From this version the policy carries its own version. |
2026-10-10 | Published with the Terms of Service and the Data Processing Agreement under one version string. |
We publish a new version on this page and in the console. Before we use personal data for a new purpose, we tell the people concerned first: account holders by email to the account address, waitlist and journal subscribers by email to their list, and everyone else on this page.
14. Contact
KAPUA Labs LLC, doing business as Fronset 30 N Gould St Ste R Sheridan, WY 82801 United States
Privacy and data requests: privacy@fronset.ai
Version 2026-11-05. Prepared by KAPUA Labs LLC, doing business as Fronset. This version supersedes 2026-10-10. It states how the GDPR and the UK GDPR apply to our processing; adds why we use personal data and on what basis, our legitimate interests, everyone who receives personal data and where, how long we keep it, and your rights under the GDPR and the UK GDPR, including the right to complain to a supervisory authority; states that our public sites use no analytics; covers the waitlist, the journal email, outreach, prospect trials, community activity, link clicks and our social pages; and corrects what we said about where data is held, transfers, provider establishment and how serving regions are controlled. Verified against the running system on 2026-11-05.