Skip to main content
Every rejection an x402 payment can produce has a stable machine-readable code. Buyers, sellers, and agents can rely on the code without parsing the human message. This is the single source of truth. If you find a code returned in the wild that is not on this page, file it as a bug — an undocumented rejection is treated as a defect. For how a buyer agent should react to each, see Handling Rejections.

Codes returned by /verify

Codes returned by /settle

All /verify codes plus:

HTTP-level errors (not rejections)

These use the standard error envelope with HTTP 4xx/5xx, not the isValid: false shape:

Custom codes from lifecycle hooks

Sellers can reject payments from an onVerify lifecycle hook with a code prefixed custom_. These are terminal from a buyer’s perspective by convention. Document your custom codes in your own seller docs; buyers cannot introspect them.