FARIGATE CLOUD

AP2 v0.2.0 mandate profile — integration guide

What your agent platform must present for the gate to verify an agent_payment. Distilled from the pinned specification (google-agentic-commerce/AP2, tag v0.2.0 = commit b4587ac1d055888a73b4b21750973cffba961793) and the wire-format notes in the FARIGATE repository (docs/adr/ADR-003-ap2-spec-pin.md, core/crates/farigate-mandate/spec/WIRE-NOTES.md).

Claim discipline. FARIGATE implements the AP2 v0.2.0 mandate profile as published at that tag — nothing here claims AP2 certification or Google/FIDO endorsement. AP2 has been contributed to the FIDO Alliance; re-evaluate when v0.3 appears.

The v0.2 model (not what most press describes)

AP2 v0.1 press described Intent/Cart/Payment mandates as W3C Verifiable Credentials. v0.2 is different and is what the gate enforces:

What the gate verifies (fail closed)

CheckDetail
SD-JWT signaturesES256 over each hop; root key from your registered user trust (P-256 JWK), later hops from the previous hop's verified cnf.jwk.
Disclosure digestsHashes of the exact wire bytes of each disclosure; unreferenced disclosures and unmatched digests are rejected outright (stricter than the reference SDK, which drops them silently).
Chain bindingsd_hash/issuer_jwt_hash over the previous segment's exact bytes; typ whitelist per hop; terminal hops must not carry cnf, intermediate hops must.
Time validityiat/exp on every hop and inside every resolved delegate payload, with 300 s skew, evaluated at decision time — and re-evaluated at the SAME recorded time by offline verifiers later.
Checkout/payment linkagetransaction_id == checkout_hash, recomputed from checkout_jwt.
ConstraintsAllowed merchants/payees, amount ranges, execution-date windows. FARIGATE is deliberately stricter than the SDK: a missing execution_date is derived as the decision date (immediate execution) and still checked — never skipped.
Replay fieldsexpected_aud / nonces are enforced on terminal hops when supplied; when a presentation carries none (e.g. the frozen demo vectors), the pack records those checks as skipped — never as passed.

What you send

The agent_payment context of the gate request:

{
  "action_type": "agent_payment",
  "action_digest": "sha256:<canonical digest over the agent_payment context>",
  "agent_payment": {
    "checkout_mandate": "<SD-JWT or ~~-joined chain>",
    "payment_mandate":  "<SD-JWT or ~~-joined chain>",
    "expected_aud":     "did:ap2:...",        // optional, recommended
    "checkout_nonce":   "...",                // optional, recommended
    "payment_nonce":    "..."                 // optional, recommended
  },
  ...
}

Budgets and recurrence

Open-mandate constraints that need cross-presentation state (payment.budget, payment.agent_recurrence) are recorded in the evidence pack; gate-side stateful enforcement is on the roadmap (Phase 7) and not part of FARIGATE Cloud v0. The pack states what was and was not enforced.