Quickstart

Six curl calls. One signed receipt.

From an unknown agent call to a verifiable economic event, against the live public sandbox. No SDK. No sign-up. No real funds. Open a terminal.

1. Liveness probe

Confirm the gateway is up before anything else.

curl -i https://sandbox.aisthetic.services/live
# → 200 OK
# { "ok": true, "service": "agenttrust-api", ... }

2. Helper session

Returns the bounded JSON description of the public sandbox flow, schema-versioned, no secrets, ready to copy.

curl -s https://sandbox.aisthetic.services/v1/sandbox/demo-session
# → bounded JSON
# {
#   "schemaVersion": "agenttrust.public_sandbox_demo_session.v1",
#   "sandboxBaseUrl": "https://sandbox.aisthetic.services",
#   "demoEndpoint": "/g/aisthetic/probe",
#   "identityMode": "sandbox_header_only",
#   "paymentMode": "sandbox_x402",
#   ...
# }

3. Unauthenticated call → 401

The gateway refuses any call that carries no agent-identity evidence. The upstream provider never sees the request.

curl -i -X POST https://sandbox.aisthetic.services/g/aisthetic/probe
# → 401 Unauthorized
# identity evidence missing, no wallet, no DID, no VC

4. Identified but unpaid call → 402

With sandbox identity headers attached, the gateway accepts the principal but emits a payment challenge bound to this exact request. Replay against another request is rejected.

curl -i -X POST https://sandbox.aisthetic.services/g/aisthetic/probe \
  -H "X-AgentTrust-Wallet-Address: 0xSANDBOX" \
  -H "X-AgentTrust-Signature-Scheme: sandbox" \
  -H "X-AgentTrust-Principal: did:web:sandbox.aisthetic.services"
# → 402 Payment Required
# challenge body bound to the request hash

5. Sandbox paid call → 200 + signed receipt

X-AgentTrust-Sandbox-Proof: demo-paid is a sandbox-only header. It accepts no real settlement, calls no facilitator, touches no chain. Production deploys refuse this header unconditionally.

curl -i -X POST https://sandbox.aisthetic.services/g/aisthetic/probe \
  -H "X-AgentTrust-Wallet-Address: 0xSANDBOX" \
  -H "X-AgentTrust-Signature-Scheme: sandbox" \
  -H "X-AgentTrust-Principal: did:web:sandbox.aisthetic.services" \
  -H "X-AgentTrust-Sandbox-Proof: demo-paid"
# → 200 OK
# X-AgentTrust-Receipt-Id: <UUID>
# the response body is whatever the sandbox upstream returns

6. Verify the proof bundle offline

Receipts are Ed25519-signed and the audit log is hash-chained per provider. The proof bundle verifies offline against the published gateway public key, no contact with us required.

# clone the repo locally, then:
pnpm proof:verify ./bundle-<placeholder>.zip
# → { "verdict": "valid", "hashChainContinuous": true, "signaturesValid": true }

What this proves

What this does not prove

Next steps