Spending Authority
Webmesh · https://webmesh.ai
https://authority.webmesh.ai/.well-known/agent-card.json
● healthy
Proof-of-concept spending authority for buyer agents. request_mandate issues a short-lived signed mandate after two gates (each on by deployment flag): Gate 1, a request_jws signed by the caller's ANS identity key; Gate 0, a human approval round trip (call, a human approves by passkey or operator signature, call again with approval_token). mandate_format=ap2 returns an open AP2 v0.2 checkout + payment pair for UCP sellers; pov1 returns one mandate for supplier.webmesh.ai book_flight. Both are capped per trip. delegate_mandate attenuates an AP2 pair; get_policy returns the caps.
Transport
—
Protocol
1.0
Price
—
Skills
-
Issue MandateMCP tool request_mandate, two rounds. Round 1: send quote_id, total, currency, merchant_ans, scope_hint (purchase:flight:ORIG-DEST:YYYY-MM-DD), subject_ans (your ans:// name), traveler_dpop_jwk (your public JWK as JSON; for ap2 the P-256 key that becomes the mandate cnf), request_jws, and for ap2 also mandate_format=ap2, merchant_id, offer_id, total_minor (= total x 100), issuer_mode. Reply: status=pending_approval, challenge, prompt, approval_method, approve_url, passkey_available, approval_instructions. approval_method passkey: a human completes the passkey assertion at approve_url, and approval_token is then the challenge. approval_method operator_signature: this authority's operator approves the reply and returns approval_token, an EdDSA JWS by the operator approval key over the challenge and the prompt fields. The challenge alone is refused APPROVAL_INVALID; with no approver configured every purchase is refused GATE0_APPROVER_NOT_CONFIGURED. Round 2: identical arguments plus approval_token and a fresh request_jws. A challenge is valid 15 minutes and single-use; the same purchase repeated inside one 5-minute window gets the same challenge and is refused APPROVAL_REPLAYED. request_jws: compact JWS, alg EdDSA, signed by the Ed25519 key for subject_ans published at https://<subject host>/.well-known/jwks.json; payload {subject_ans, args, iat, jti}, args = every bound argument with the value the tool receives, defaults included (subject_ans, quote_id, total, currency, merchant_ans, scope_hint, traveler_dpop_jwk; for ap2 also merchant_id, offer_id, total_minor, and issuer_mode when guest); iat within 300 s; jti single-use. issuer_mode: authority (iss https://authority.webmesh.ai; the seller lists it in mandate_issuers; the only mode supplier.webmesh.ai accepts) or guest (iss = your own origin, ap2 only; the seller offers dev.agenthaven.guest and your /.well-known/ucp publishes this authority's key). ap2 returns open checkout_mandate and payment_mandate (dc+sd-jwt, shared jti, 300 s lifetime), capped at get_policy max_per_trip_by_currency before any approval round (a currency with no cap is refused); close each with your cnf key as the seller's mandate-form schema specifies (supplier.webmesh.ai: https://supplier.webmesh.ai/.well-known/mandate-forms/ap2-v0.2-delegate-chain.json) and send both to the seller's complete call. pov1 returns one Ed25519 mandate, 15 minutes, capped at get_policy max_per_trip. Refusals (error): INVALID_ISSUER_MODE, AMOUNT_MISMATCH, POLICY_VIOLATION, REQUEST_NOT_SIGNED, BAD_SIGNATURE, SUBJECT_MISMATCH, ARGS_MISMATCH, STALE_REQUEST, REPLAYED_REQUEST, IDENTITY_UNVERIFIED, GUEST_MODE_REQUIRES_REQUEST_AUTH, GUEST_ISSUER_UNRESOLVED, GATE0_APPROVER_NOT_CONFIGURED, APPROVAL_INVALID, APPROVAL_REPLAYED, APPROVAL_STORE_UNAVAILABLE, PASSKEY_REQUIRED; pov1 also INSUFFICIENT_FUNDS.mandateauthorizationap2human-approvalrequester-signature
-
Get PolicyMCP tool get_policy, no inputs. Returns the static policy {max_per_trip: 1000.0, currency: USD, max_per_trip_by_currency: {USD: 1000.0, EUR: 900.0}, allowed_merchants: [*], categories: [travel]}. request_mandate refuses POLICY_VIOLATION an ap2 pair over its currency's max_per_trip_by_currency, or in a currency with no entry, before any approval round; and a pov1 mandate over max_per_trip, whatever its currency. The caps are fixed figures, not live exchange rates.mandatepolicy
-
Delegate MandateMCP tool delegate_mandate. Issue a delegated AP2 spending mandate attenuated from a parent mandate. Inputs: parent_mandate (the parent checkout mandate) and parent_payment_mandate (the parent payment mandate), both open, signed by this authority and unexpired; buyer_jwk (the child's P-256 cnf key); sub_amount, sub_scope, quote_jti (one of the parent's acceptable offers), optional merchant_id and currency; and delegation_jws, a delegation JWS (header alg ES256, typ ap2-delegation+jwt) signed by the private half of the parent's cnf key (cnf.jwk), with claims parent_jti, sub_amount_minor, currency, merchant_id, buyer_jkt (RFC 7638 thumbprint of buyer_jwk), sub_scope, quote_jti, iat (within 60 s) and a single-use nonce (1-128 chars). Two rounds, like request_mandate: round 1 returns status=pending_approval with challenge and prompt (parent, amount, merchant, the child key thumbprint cnf_jkt); each delegation is approved by the human (passkey or operator signature), then round 2 repeats the call with approval_token and a fresh delegation JWS. The child is capped by the remaining budget of its parent and of every ancestor up to the root (everything minted under one root mandate together stays within the root's amount), and keeps the parent's currency, merchant, offer and expiry. Delegating does not cancel the parent, which stays spendable; that is why each child needs its own approval. Returns checkout_mandate and payment_mandate as open AP2 chains, or a reason_code: DELEGATION_PROOF_REQUIRED, DELEGATION_PROOF_INVALID, DELEGATION_NONCE_REPLAYED, DELEGATION_BUDGET_EXHAUSTED, INVALID_AMOUNT, CURRENCY_MISMATCH, MERCHANT_NOT_ALLOWED, OFFER_NOT_ALLOWED, PARENT_EXPIRED, SCOPE_EXCEEDED_AT_HOP_2, REDELEGATION_EXCEEDS_GRANT or DELEGATION_LEDGER_UNAVAILABLE; or an approval error: APPROVAL_INVALID, APPROVAL_REPLAYED, PASSKEY_REQUIRED, GATE0_APPROVER_NOT_CONFIGURED.mandatedelegationattenuationap2
How to call
A2A endpoint (JSONRPC)
https://authority.webmesh.ai
Documentation
https://agent.webmesh.ai
Homepage
https://webmesh.ai
Listed in
Directories this entry was found in.
agenstry