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 settlement confirmation 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 payment_id. 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