HTTPS API · MCP tool · no custody

Put one decision
before every signature.

The agent proposes a payment. The control plane evaluates it. Your existing wallet or processor remains the only component that can move funds. x402 requests also bind a one-time nonce before signing.

pre-sign sequence
agent creates payment intent
        ↓
POST /check
        ↓
ALLOW | BLOCK | REQUIRE_APPROVAL
        ↓
external signer verifies decision

STABLE CONTRACT

Three outcomes an agent can act on.

01

ALLOW

The declared intent passes current policy. The signer must still verify that the payment matches the checked intent.

02

BLOCK

Stop execution. The response includes reason codes and a receipt for the attempted action.

03

REQUIRE_APPROVAL

Pause execution and route the intent to the owner or an approved human workflow.

QUICK START

Use a separate credential for each agent.

Register an isolated free client credential, keep its administration token outside the model, and send the client token only with API or MCP calls.

1. POST /register
2. Store the returned administration credential outside the agent
3. Give client_token to one agent
4. POST /check before signing
5. Continue only on ALLOW
6. Verify receipt and intent at the signer

FAIL CLOSED

Unavailable means do not pay.

A timeout, malformed response or unreachable control plane must stop the payment or send it for approval. It must never silently become an ALLOW.

decision = control_plane.check(intent)

if decision.status != "ALLOW":
    stop_or_request_approval(decision)

signer.verify(intent, decision.receipt)
signer.sign(intent)
Per-agent tokensQuota + rate limitsNonce replay blockAuthenticated receiptsReceipt verificationScoped exposure capsRevocationAudit receipts

INDEPENDENT EVALUATION

Verify the public control path yourself.

A dependency-free Node.js verifier creates one isolated free evaluation tenant, confirms a request-bound receipt, proves that a prompt-injection-driven payment is blocked, and checks idempotency, audit-chain status and usage. The local conformance proof also signs five decisions and rejects tampered receipts. Credentials stay in memory and are never printed.

node demo-conformance.mjs

result: PASS
receipts: 5
tamper detection: PASS
funds moved: false

node evaluate-live.mjs --live

result: PASS
baseline: ALLOW | REQUIRE_APPROVAL
dangerous payment: BLOCK
credentials printed: no

UPSTREAM INTEROPERABILITY WORK

Concrete integration work in public review.

The links below are proposals and pull requests, not endorsements or accepted standards. They expose only the integration boundary; policy logic and credentials remain private.

01

x402 wallet gate

An opt-in, fail-closed Base/USDC pre-sign integration with five network-free tests.

Review pull request ↗
02

Cloudflare callback

A selected-requirement callback proposal so authorization can bind to the exact payment later signed.

Review interface proposal ↗
03

x402 lifecycle rules

Host lifecycle and fail-closed invariants contributed to the Foundation's pre-payment-guard discussion.

Review contribution ↗
04

Machine Payments Protocol

A one-time charge adapter tested against the official mppx 0.11.0 prepare-and-pay runtime.

Open MPP adapter ↗
05

InFlow x402 buyer

A fail-closed hook for InFlow's corrected pre-sign managed-payment boundary, with network-free tests.

Open InFlow adapter ↗

CONTROLLED PILOT

Integrate one real payment path.

Public qualification contains no secrets. Architecture, credentials and customer data stay out of the public request.

Pilot entry
from€2,500
Request a controlled pilot ↗