Early access · Paid API credit is live. New accounts still get free starter credit.
PricingDocsModelsFAQEarnBlogAboutSign in →
Home · Blog

How Umbra is building verifiable prompt privacy

June 28, 2026 · Umbra's target prompt-privacy architecture, what provider and coordinator attestation proves today, and which response-level guarantees are still pending.

Every inference API says your data is “private.” Almost none let you check. “We don’t log prompts” is a policy, not a proof - you’re trusting a screenshot of a dashboard toggle. Umbra’s bet is different: you should be able to verify the hardware and software boundary that handled a prompt, and if the evidence is missing, you should not treat the request as private. The alpha has registration-level evidence today, including live APNs running-code identity; signed per-response receipts are still pending.

Here’s the whole chain, from the silicon up.

1. The prompt is decrypted only inside a hardened process

Models run in-process (llama.cpp) on a provider’s Apple-Silicon Mac. Your prompt is re-encrypted to that specific provider’s attested key and decrypted only inside a process that requires PT_DENY_ATTACH, Apple’s Hardened Runtime, SIP, and authenticated root before a hardware-backed provider starts. Prompt and output buffers stay in memory and the provider does not intentionally log them. This reduces the local attack surface; it is not yet a per-response proof.

2. Provider registration proves hardware identity

The provider holds a hardware-bound key in the Secure Enclave. At registration, the coordinator validates Apple Managed Device Attestation evidence, freshness, serial binding, and the provider’s prompt-encryption key. The console can expose that network state. Individual responses do not yet carry a signed receipt, so registration evidence must not be presented as proof for a particular response.

3. The operator can’t read it either

The usual hole in “private inference” is the broker in the middle - the company routing your traffic. Umbra’s coordinator runs inside an AMD SEV-SNP confidential VM. Its attestation endpoint reports the current SEV-SNP posture. That is coordinator-level evidence; the receipt work needed to bind a particular request to both coordinator and provider evidence is still in progress.

4. Private buyer routing fails closed

Authenticated buyer traffic fails closed unless a non-self provider reaches the code_attested tier. During alpha, that can mean a request returns unavailable when no code-attested provider has capacity. A caller cannot turn an authenticated private request into a weaker public-provider route by asking for a lower tier.

client.chat.completions.create(
    model=model_id,  # an id from GET /v1/models (the catalog rotates)
    messages=[{"role": "user", "content": "..."}],
    # no trust downgrade is needed or accepted for private buyer routing
)

Why this matters more than price (even though we’re also cheaper)

If you’re building in legal, medical, security, or finance - or any product where “we sent your users’ text to a vendor who logs it” is a non-starter - a policy promise isn’t enough. A verifiable chain is. That’s the difference between “trust us” and “check for yourself.”

Swap your base_url, keep your SDK: quickstart. Read the adversary model in the threat model.

(Umbra is an experimental alpha. Treat unavailable receipt or attestation evidence as unavailable privacy proof.)