Skip to main content
https://inference.phala.com/v1 requires confidential routing through Phala’s attested gateway. Ordinary HTTP clients do not verify its attestation, pin its TLS key, or verify each response receipt. curl and jq can inspect the artifacts; client-side verification requires the TypeScript ACI verifier or Private AI Proxy.

Choose a verification client

Agent tools, MCP servers, browser automation, and telemetry remain separate trust boundaries.

What the verifier checks

  1. Verify a fresh nonce-bound gateway quote, recompute the JCS keyset digest, check not_after, and replay the measured compose evidence. See Attestation.
  2. Before sending model traffic, use hostname-validated TLS pinned to a key in the attested keyset.
  3. Fetch the receipt named by x-receipt-id using the same credential that made the request. Require workload_keyset_digest to match the verified keyset. Resolve key_id in receipt_signing_keys and verify the Ed25519 signature over the JCS receipt with signature removed.
  4. Match request.received.body_hash and response.returned.body_hash to the exact request and response bytes. For SSE, the response hash includes the complete in-order stream framing. E2EE request hashes follow the transport extension’s restored-plaintext rules.
  5. Require a successful upstream.verified event with result: "verified", required: true, and a session_id. Fetch the full session, recompute its bare SHA-256 JCS content address, verify its evidence and binding, and apply your claim policy. The receipt’s serving time must fall within that session’s validity interval.
A receipt event by itself is an assertion by the attested gateway. Verifying the cited session’s evidence provides the independent upstream audit; coverage varies by provider.

Inspect existing artifacts

The following commands only display documents for a request you already made. They do not produce a verification verdict.
The session uses upstream_name (for example chutes or phala-267). The list endpoint accepts ?upstream_name= and ?model=; it omits evidence.data, so fetch the full record for a content-address check.

Release policy and limits

A passing audit binds the exact exchange to a genuine attested gateway, pinned TLS channel, signed receipt, and verified upstream session. It establishes a reviewed release only when you enforce an independently obtained compose allowlist. Workload-declared source_provenance is not a trust root. See the SDK release policy.

Legacy signature endpoint

GET /v1/signature/{id} wraps the same canonical receipt for older clients. New integrations should verify /v1/aci/receipts/{id} directly.