401 Unauthorized
Identity evidence missing or invalid. No wallet, no DID, no VC. Nothing reaches the upstream provider.
Run a real sandbox gateway flow against https://sandbox.aisthetic.services, 401 → 402 → 200 + signed receipt, without contacting us, without a sign-up, and without real funds.
Identity evidence missing or invalid. No wallet, no DID, no VC. Nothing reaches the upstream provider.
Identity is good, policy allows the call, but the call is paid. The gateway emits a payment challenge bound to this exact request.
Verified, paid, audited. The response carries an X-AgentTrust-Receipt-Id pointing at the canonical Ed25519-signed receipt.
The receipt + hash-chained audit + proof bundle verify offline against the published gateway public key. No contact with us required.
curl -i https://sandbox.aisthetic.services/live
# → 200 OK
# { "ok": true, "service": "agenttrust-api", ... }curl -s https://sandbox.aisthetic.services/v1/sandbox/demo-session # → bounded JSON, no secrets, schema-versioned
curl -i -X POST https://sandbox.aisthetic.services/g/aisthetic/probe # → 401 Unauthorized # identity evidence missing
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
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 the 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: rcp_<placeholder>
# clone the repo locally, then:
pnpm proof:verify ./bundle-<placeholder>.zip
# → { "verdict": "valid", "hashChainContinuous": true, "signaturesValid": true }The same 401 → 402 → 200 + signed receipt flow runs on Solana mainnet via SPL transferChecked. An agent transfers 0.01 USDC to the AgentTrust recipient associated token account, the gateway waits for finalized commitment, an on-chain Anchor receipt verifier program validates the signed receipt against the Ed25519SigVerify sysvar instruction in a single transaction, and a signed receipt is issued. Verify-first, settle-once, never-retry — same invariant as the EVM x402 path.
Recipient associated token account: Hbzx5A9MzU1PfHD2UMaGFcBLi3fDDadphBcyVtH6s11A. USDC mint: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v. Network: solana-mainnet. Commitment: finalized. Amount: 0.01 USDC (10000 base units, 6 decimals).
# Build the SPL transferChecked tx with 0.01 USDC to: # Hbzx5A9MzU1PfHD2UMaGFcBLi3fDDadphBcyVtH6s11A # Mint: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v # Network: solana-mainnet (commitment: finalized) # Sign with the agent's wallet, submit, and capture the base58 signature.
curl -i -X POST \ -H "X-AgentTrust-Wallet-Address: <agent solana wallet>" \ -H "X-AgentTrust-Signature-Scheme: solana" \ -H "X-AgentTrust-Principal: <agent principal DID>" \ -H "X-Payment-Solana: <base58 signature>" \ https://sandbox.aisthetic.services/g/aisthetic/probe # → 200 OK # X-AgentTrust-Receipt-Id: <UUID> # (the receipt's externalPaymentId is the Solana transaction signature)
First mainnet canary transaction (slot 417818028, 2026-05-05): solscan.io/tx/4N9XggyC…gQaY. On-chain Anchor receipt verifier program FWdCDkFnex…vw9Z is the deployed verifier on Solana mainnet.