Skip to main content
This guide is for the resource-server side of an MPP payment: a merchant, an API, or an agent-facing platform — an MCP tool, an agent-callable API, a dataset — that wants to charge for access without holding funds or keys.
  • Without a credential: Your server returns a 402 (payment required) listing the ways it accepts payment.
  • With a credential: Your server verifies the credential in-process and settles it by submitting to Atum’s Payment Gateway — there is no separate facilitator — then returns the requested resource and a Payment-Receipt.
Two paths, depending on where you’re starting from:

Agentic receives

Run a working example merchant locally, no code changes needed.

Develop with Atum SDK

Gate your own route, tool, or API directly.
The example merchant uses a stub submitter that returns a canned completed payment locally, with no gateway or on-chain funds. Set USE_STUB_SUBMITTER=false and point GATEWAY_URL at Atum’s Payment Gateway when you’re ready to settle against testnet or mainnet.

Idempotency on the acceptance side

Stamp an intentId from a value your route already has, submit and return (do not poll inside verify()), and deliver once per receipt paymentId. Quote the same amount and the same accounts every time you re-issue a challenge for one intentId — re-price it and the payer’s next attempt is refused with a 409 instead of resuming. Full model: Idempotency.

Next steps