Verified inference

The verification surface of the Ambient API, covering request flags and the verified and merkle_root response fields.

Verified inference is Ambient's core promise: proof that the requested model ran on the requested prompt and produced the returned output. The API surface for it is small: three request flags, two response fields, and one response header you can rely on today.

Request flags#

POST /v1/chat/completions (and the legacy completions, runs, and responses endpoints) accepts these Ambient-specific fields alongside the standard OpenAI parameters. All default to false:

Flag Spec description
emit_verified "Whether to return verification status"
wait_for_verification "Whether to wait for verification to complete before completing the request"
emit_ambient_events "Whether to return lifecycle events"

All three flags are accepted in both streaming and non-streaming requests.

curl https://api.ambient.xyz/v1/chat/completions \
  -H "Authorization: Bearer $AMBIENT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "ambient/large",
    "messages": [{"role": "user", "content": "Say hello from Ambient."}],
    "max_tokens": 512,
    "emit_verified": true,
    "wait_for_verification": true
  }'

max_tokens caps reasoning and answer tokens combined, so on reasoning models set it high enough to leave room for the answer after any reasoning.

Response fields#

The public OpenAPI spec (api.ambient.xyz/openapi.json) declares two verification fields on the chat-completion response:

Field Type What it is
verified boolean | null Per-response verification verdict
merkle_root string Cryptographic commitment over the inference

Verification is delivered inline: a verdict plus a Merkle-root commitment on the response itself. No separate receipt API or verification-lookup endpoint exists in the public spec today.

What you can rely on right now#

  • Every inference returns an inference-id response header, a stable identifier for the request, also visible as x-request-id and embedded in the completion id. Log it for every request: it is the durable handle for the inference, and the natural key for any future verification lookup.
  • The flags are safe to send today: emit_verified: true has no latency cost, so clients can adopt it ahead of the fields shipping.
  • wait_for_verification and emit_ambient_events are accepted today and become active when inline verification ships.

How verification works underneath#

The network's verification mechanism is Proof of Logits: logits are fingerprints of a model's execution, and a validator only needs to re-run a single token position to check an output that took thousands of tokens to produce. See Proof of Logits for the concept-level explanation.