x402-signals (mirror inside x402_1 monorepo)

May 12, 2026 · View on GitHub

Canonical home: github.com/sF1nX/x402-signals. Issues, comments, and pull requests go there. The files in this directory are a mirror inside the private monorepo — convenient for local cross-references; not the primary publication channel.

A small, machine-readable convention for x402 services to declare fulfillment SLA, refund policy, and operational signals so that paying agents can reason about risk, wait, and recovery without human intervention.

DocumentStatusLast updated
v0.2.md — full v0.2 DRAFTDRAFT2026-05-12
v0.2-outline.md — integration planDRAFT OUTLINE2026-05-12
v0.1.md — full v0.1 DRAFTDRAFT2026-05-08
x402-profile.md — x402-specific bindingsplaceholder2026-05-08

TL;DR

A provider that wants to publish x402-signals adds three top-level fields to its existing /.well-known/x402 document (or to a 402 challenge extensions["x402-signals"] block):

{
  "fulfillment_policy": {
    "mode": "instant",
    "fulfillment_deadline_seconds": 60,
    "status_endpoint": "/api/orders/{orderId}",
    "retry_after_seconds": 5
  },
  "refund_policy": {
    "type": "none",
    "refund_to": "original_payer",
    "refund_endpoint": "/api/refunds",
    "refund_deadline_seconds": 86400,
    "refund_claim_deadline_seconds": null,
    "partial_refunds_supported": true,
    "idempotency_required": true,
    "refund_policy_by_state": {
      "FULFILLMENT_FAILED": {
        "type": "automatic",
        "triggers": ["fulfillment_failed", "upstream_timeout"]
      }
    }
  },
  "signals": {
    "provider_health": "healthy",
    "agent_action": "pay",
    "last_updated": "2026-05-08T14:30:00Z"
  }
}

Every paid 200 response then carries a small object so that lost responses can be recovered:

{
  "paymentId": "pay_01H8...",
  "orders": [ { "orderId": "ord_01H8a...", "state": "FULFILLED", "result": { ... } } ]
}

That's it. No new wire envelope, no required transport, no fee. Read v0.2.md for the canonical state machine, field-by-field semantics, status / refund endpoint contracts, security considerations, and worked examples from the first public field implementation report.

Why

x402 settles money in seconds. It does not yet specify what an agent should expect when an upstream supplier is degraded, when fulfillment takes longer than the HTTP request, or when a paid call fails after settlement. Without a convention, every operator invents a private one and every agent re-implements the same dispute logic. This is the convention.

Open process

This is a working DRAFT. Comments, edge cases, missing patterns, and alternative wordings are welcome.

If you operate an x402 service and want to pressure-test v0.2, file an issue with concrete field-shape, state-transition, or voucher/topup divergence examples. Redacted response bodies and public on-chain tx hashes are the most useful review material.

License

CC0 1.0 — public domain dedication. Take it. Fork it. Improve it.