Skip to content
Open app

Incognito

Run supported models on Phala's confidential-computing hardware by adding :incognito to the model id.

Deference Incognito is private inference. An Incognito request runs only on Phala's confidential-computing hardware — Intel TDX machines with confidential GPUs, where the model's memory is sealed from the machine's host and operator. The route carries a zero-data-retention policy and never falls back to a provider outside Phala.

It is one suffix on the model id. Your key, base URL, SDK and credit all work unchanged.

Use it

Append :incognito to a supported model id, such as qwen/qwen3.8-27b:incognito, and send it as model on any endpoint that takes a text model: Chat Completions, Messages or Responses.

curl https://deference.si/v1/chat/completions \
  -H "Authorization: Bearer $DEFERENCE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen/qwen3.8-27b:incognito",
    "messages": [{ "role": "user", "content": "Say hello in one sentence." }],
    "max_tokens": 100
  }'

The Anthropic SDK works the same way — its base URL keeps no /v1.

import os
import anthropic

client = anthropic.Anthropic(
    base_url="https://deference.si",
    api_key=os.environ["DEFERENCE_API_KEY"],
)

message = client.messages.create(
    model="qwen/qwen3.8-27b:incognito",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Say hello in one sentence."}],
)
print(message.content[0].text)

The response body names the base model, without the suffix: qwen/qwen3.8-27b. Billing, Activity and MCP receipts keep the id you sent.

Coding tools such as Claude Code and Codex work with any Incognito model whose supported_parameters lists tools, since they send tools on every request. The caller identifiers they send are removed before forwarding (see What Incognito removes).

Models

These are the models Incognito serves at launch. Each runs on one provider: Phala.

Model idInput, $/MOutput, $/MContextMax output
deepseek/deepseek-v4.1-flash:incognito0.210.841,048,576943,718
z-ai/glm-5.3-flash:incognito0.12750.4251,048,576131,072
z-ai/glm-5.3:incognito0.842.641,048,576943,718
deepseek/deepseek-v4-pro-0813:incognito0.9572.87761,048,576393,216
deepseek/deepseek-v4-flash-0731:incognito0.3080.9241,048,576393,216
moonshotai/kimi-k3:incognito2.5512.751,048,576943,718
z-ai/glm-5.2:incognito1.263.001,048,576131,072
qwen/qwen3.8-27b:incognito0.202.501,000,000262,144
tencent/hy3:incognito0.150.64262,144235,929
moonshotai/kimi-k2.7-code:incognito0.954.00262,144235,929
qwen/qwen3.6-35b-a3b:incognito0.201.27262,144235,929
qwen/qwen3.6-27b:incognito0.323.25262,144262,140
moonshotai/kimi-k2.6:incognito1.094.60262,144235,929
z-ai/glm-5.1:incognito1.214.20202,752128,000
qwen/qwen3.5-27b:incognito0.302.40262,14465,536
qwen/qwen3.5-397b-a17b:incognito0.553.50262,144235,929
deepseek/deepseek-v3.2:incognito1.001.00163,84064,000
openai/gpt-oss-120b:incognito0.150.60131,07232,768
qwen/qwen-2.5-7b-instruct:incognito0.100.2032,76829,491

Prices are Phala's prices per million tokens, before the 5% routing fee. Models and GET /v1/models show the prices you pay, fee included.

Each Incognito model in GET /v1/models carries "incognito": { "provider": "Phala", "zdr": true, "verification": "provider_reported" }, and its display_name ends in · Incognito.

A model's capabilities follow its Phala endpoint, which can differ from the same model's other providers. Check supported_parameters on GET /v1/models/{id} before you rely on tools, structured outputs or reasoning. A request that sends a parameter the Phala endpoint does not list fails instead of running without it, with 404 upstream_404 ("The model provider rejected the request"), and nothing is charged.

Pricing and holds

An Incognito call costs Phala's price plus a 5% routing fee. Deference adds no markup.

The hold works as on every request — an estimated cost is reserved, then the measured cost is charged — but because the route cannot fall back to a pricier provider, the estimate uses the Phala endpoint's own prices. The hold on an Incognito call can be smaller than the same model's standard hold. See Pricing.

Incognito needs credit. Free credit never pays for it: an account with only free credit gets 402 free_credit_not_eligible.

What Incognito removes

Incognito removes these caller identifiers from the request before forwarding it: user, session_id, sessionId, safety_identifier, prompt_cache_key, metadata and trace. The request still runs. This covers the metadata.user_id Claude Code sends on every Messages request and the prompt_cache_key Codex can send on Responses.

What an Incognito request refuses

Fields that would leave Phala's hardware, keep state, or change the route are refused before the request runs. Nothing is held or charged.

You sendResult
provider, models, fallbacks or route400 unsupported_parameter, as on every request
plugins, web_search_options, mcp_servers or container400 unsupported_parameter. These run outside Phala's confidential hardware.
Server tools such as web search400 unsupported_parameter: "Server tools such as web search are not available with Incognito models"
A file part400 unsupported_parameter: "Files are not available with Incognito models". Send text or images.
previous_response_id, conversation, prompt, background, or store other than false400 unsupported_parameter: "Incognito keeps no stored conversation state"
speed, or a service_tier other than default or standard400 unsupported_parameter: "Incognito runs on the standard tier only"
Any endpoint other than Chat Completions, Messages or Responses400 unsupported_endpoint
:incognito combined with another suffix, like :free:incognito404 model_not_found

A base model id that has no Incognito row also returns 404 model_not_found. A missing or stale Phala route fails the request rather than serve it elsewhere.

Function tools you define yourself still work where the model's endpoint supports them: the model proposes the call and your code runs it, in your own environment.

The MCP server accepts Incognito ids on deference_run_model and refuses its web_search option on them with invalid_input. Its receipt keeps the :incognito id, its provider reads "Phala", and its verification reads "provider_reported" (it is null on other models). See MCP tools.

What Deference stores

Deference keeps the billing record — key, model, provider, tokens, cost and times — so the charge can be reconciled and shown in Activity. Prompt and response text are never stored; the request's Content reads Not stored, as on every text call.

On an Incognito request the client and session are not recorded, and no account tag or caller identifier is sent upstream.

Incognito is not anonymous: the record stays tied to your account and key, and INFERENCE activity on chain is outside the inference path entirely.

Check what served a call

Open the request in Activity. Mode reads Incognito · provider reported, and Provider reads Phala, the provider the routing layer reported for that call. On a Responses call the provider appears once the request settles. Once the charge settles, the price reads Phala's price and Routing fee.

For evidence about the hardware itself, Phala publishes a live attestation for each model's current sessions:

https://inference.phala.com/v1/aci/sessions?model=<model-id>

Substitute the base model id, for example https://inference.phala.com/v1/aci/sessions?model=qwen/qwen-2.5-7b-instruct. The record describes the attested environment serving that model. It is evidence about the hardware, not a receipt for your specific call.

What Incognito does not do

Incognito routes supported models to Phala and only to Phala, under a zero-data-retention policy, with no fallback to another provider. The confidential-computing hardware is designed to keep the machine's host and operator from reading the memory the model runs in.

Within that boundary, read the limits plainly:

  • Your prompt is ordinary text to Deference and to the routing layer that forwards it — both process it to deliver the response. The software inside Phala's protected workload can read it too. Incognito is not end-to-end encrypted.
  • Zero data retention is the providers' retention policy for the route, not a proof that every copy is erased.
  • Deference keeps billing records, tied to your account and key. No prompt or response text is stored.
  • The provider attribution in Activity is reported by the routing layer. There is no per-request cryptographic receipt through this route today, and model weights are not verified by it.
  • A tool your agent runs, and anything the MCP host sees, stays outside the enclave.
  • Phala-only routing trades resilience for privacy: when the route cannot serve a model, the request fails rather than fall back.