Checkout
A hosted page, a shareable link, or an embedded widget. The buyer picks a chain and a token; you get one webhook when the money lands.
A customer connects an exchange account or a self-custody wallet once. Your platform charges them afterwards - one time, on a schedule, or for an amount decided after the service is delivered. Funds move from the payer straight to your wallet or exchange account, so we are never in the path.
Most crypto products ask a platform to adopt a crypto-specific flow. PayZap does the opposite: it arrives underneath the payment abstraction you already have, and behaves like the methods already in it.
Authorizes an exchange account or wallet inside your product. Revocable by them at any moment.
Checkout, subscriptions, post-service billing, and refunds keep their current logic.
PayZap registers beside the methods you already expose.
A normalized payment method: bind, mandate, charge, refund, status, webhook. Identical whichever source sits beneath it.
A wallet and an exchange balance are both payment methods behind one API. Your code does not change when a customer switches between them.
The hardest pattern for a platform is not the checkout. It is charging a customer who has already left, for an amount nobody knew when they authorized. That is the case PayZap is built for.
A hosted page, a shareable link, or an embedded widget. The buyer picks a chain and a token. You get one webhook when the money lands.
// one integration, one object
{
"amount": "49.90",
"currency": "AED", // priced locally
"customer_ref": "cus_8121",
"metadata": { "order": "A-5512" }
}
// → the buyer chooses chain + token
// → one webhook when it settles
{ "status": "settled",
"rate_locked_at": "2026-08-25T09:14:02Z",
"fee": 0.42 }One standing authorization per customer covers every later charge. It uses the token's own approval mechanism, so no contract of ours stands between the customer and their funds.
// once, with the customer present
{
"customer_ref": "cus_8121",
"limit": "200.00",
"currency": "USD"
}
// afterwards, nobody present
POST /v1/payments/charge
{ "mandate_id": "mnd_2f91",
"amount": "19.00" }
// customer revokes at any time
POST /v1/mandates/:id/revokeA ride that ran long, a basket with substitutions, a rental with tolls and fuel. The customer authorized before any of it was known. This is the pattern card-on-file solved for cards, and the one most digital-asset products still do not cover.
// the trip ended; now you know the fare
{
"mandate_id": "mnd_2f91",
"amount": "23.75",
"currency": "BRL"
}
// header: Idempotency-Key: trip_99120
// failures arrive told apart, not lumped
{ "error": "mandate_reauthorization_required" }
{ "error": "insufficient_balance" }
// they need different handling, so they
// arrive as different codesA refund belongs to the same order lifecycle as the payment, which is what separates payment infrastructure from a transfer widget. Authorize once and we send them for you, or keep every outbound transfer under your own signature.
{
"amount": "12.50", // partial
"reason": "order_adjusted"
}
// keep outbound transfers under your own
// signature instead:
POST /v1/payments/:id/refund/submit
// or delegate signing once
GET /v1/merchant/refund-delegationPriced API calls an autonomous agent can settle without a human, over the open x402 standard. Verification and settlement are ours; you keep the endpoint. It runs on the same facilitator as everything else on this page, which means an agent paying your API is the same settlement path as a checkout.
// your endpoint answers 402 with a price
HTTP 402 Payment Required
{ "price": "0.004", "asset": "USDC" }
// the agent pays and retries; we verify
// and settle, you keep serving the call
GET /v1/merchant/x402/stats
{ "settled": 1284, "period": "24h" }Checkout, saved payment methods, partner top-ups and machine payments run on the same sessions, the same webhooks and the same ledger.
A hosted page, a shareable link, or an embedded widget. The buyer picks a chain and a token; you get one webhook when the money lands.
A customer authorizes once and you charge them per order afterwards, with nobody present. One standing authorization, revocable by them at any moment.
Business partners fund their balance by sending stablecoins. Each deposit gets a figure that identifies it, so simultaneous transfers to one address never credit the wrong account.
Priced API calls an autonomous agent can pay for by itself, over the open x402 standard. Verification and settlement are ours; you keep the endpoint.
Quote an order in bolivianos, dirhams or reais. The rate is fixed the moment the order opens and stored with it, so what the customer saw is what settles.
Full or partial, on every chain we accept on. Authorize once and we send them for you, or keep every outbound transfer under your own signature.
A buyer holding stablecoins but no native token still pays. We sponsor the network fee and show you exactly what each one cost.
Settlements and refunds in one file, in your finance team's own field names, with the fee charged on each. Re-requesting last month returns last month.
Take custody, net it off, pay out on a cycle. We took the opposite decision at each of these points, and the consequences run through the whole product.
The processor receives your money and remits it on a schedule.
Float, settlement lag, and a balance they owe you at period end.
Funds move payer to merchant in a single transfer. We are never in the path.
Nothing to reconcile, nothing owed, nothing to lose if we have a bad day.
Recurring charges need a custom contract deployed on-chain.
An audit, an upgrade path, and a contract your customers must trust.
Saved methods use the token's own approval mechanism. No contract of ours exists.
The customer revokes it from their wallet, without asking us.
On-chain wallets and exchange accounts are two separate integrations.
Two sets of webhooks, two reconciliations, two failure modes.
A wallet and an exchange balance are both payment methods behind one API.
Your code does not change when a customer switches between them.
Reports are generated from current pricing when you ask for them.
Change a rate and last quarter quietly changes with it.
The rate and the fee are written onto each transaction as it settles.
A register re-run a year later returns the figures it returned then.
Agent and machine payments are on the roadmap.
A pilot, a waitlist, a separate product when it arrives.
x402 runs on the same facilitator as everything else, today.
An agent paying your API is the same settlement path as a checkout.
The strongest fit is a platform whose customers already save a method and come back, and whose backend can charge after the customer has gone. Crypto enthusiasm is not the qualifier.
The final fare is known after the service, users pay frequently, and the internal payment layer is mature.
Final baskets, substitutions, tips and post-order adjustments all change the amount after checkout.
Duration, tolls, fuel, damage and extras are determined long after the customer authorized.
Metered usage produces naturally variable final amounts on every single transaction.
Consumption is measured first and billed later, and the audience is already digital-asset relevant.
Global users, top-ups, pay-as-you-go and renewals across many fragmented markets.
High-value international payments with modifications, ancillaries and frequent refunds.
Digital-native users, repeat purchases and global distribution from day one.
Expose digital assets to many downstream merchants as one alternative payment method, through a single integration.
If the answer to the first four is yes, the architecture already fits and the rest is commercial. If it is no, a different product is probably the honest answer.
Contracts and decimals are resolved on our side and never supplied by the caller, because a caller-supplied contract address is a class of incident nobody needs.
Plus Solana and TON on their own rails.
Contract and decimals resolved on our side.
Including standing authorization for off-session charging.
Distorted markets priced against real trading rates, not official ones.
Anyone can move a stablecoin once. What a payments team actually evaluates is what happens on the second attempt, the ambiguous transfer and the delivery that never lands.
Every money-moving call takes an idempotency key. A repeat returns the original answer instead of charging twice, which matters because your retry logic will fire eventually.
Idempotency-Key: trip_99120
Five seconds to one hour, backing off. A delivery that never lands stays readable through the API rather than being quietly lost.
"Needs re-authorization" and "not enough balance" arrive as different codes, because they need different handling. One is a prompt to the customer, the other is a retry.
A partner who rounds an amount ends up in a review queue. Assigning the nearest open deposit would be wrong exactly as confidently as it would be right.
/v1/deposits/unmatched
A payment session has a fixed lifetime rather than staying open forever, and amount matching carries a defined tolerance so a rounding difference does not strand a real payment. Both are constants in the codebase, not per-deal improvisation.
The useful proof is not a brand mark. It is that a large platform kept its own PSP, connected PayZap as one more payment method, and used it for the hardest pattern there is: charging after the service, server to server.
Thirty minutes with the team that built it. We look at what you take today and what it costs you, then say plainly whether this helps. If it does not, that is a faster answer than a pilot.