Merchant
Your business profile — the trading name, site and overpayment policy the hosted checkout shows a payer (merchant accounts).
/v1/lookupConsole sessions only. ref is the MolnPay ID printed first on every receipt (MOLN- and twelve letters and digits). Returns which kind of record it names — deposit, payout, bridge_order, own_wallet_transfer, balance_release, conversion or swap — and the record in the shape its own endpoint returns; a swap comes back as every conversion row it wrote.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Query Parameters
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/lookup?ref=string"{ "object": "lookup", "ref": "string", "kind": "deposit", "records": [ {} ]}/v1/merchantWhat a payer is shown about you on a checkout link: the trading name, your site, your logo, and what happens to money sent beyond the invoice price. tolerance_bps and tolerance_min_cents come with it and are PLATFORM-WIDE, not yours to set — they are here so you can state the same band we settle against.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/merchant"{ "object": "merchant", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "display_name": "string", "website_url": "string", "logo_url": "string", "overpayment_policy": "keep", "settlement_asset": "string", "checkout_template": "string", "status": "active", "domain": "string", "domain_verified": true, "tolerance_bps": 0, "tolerance_min_cents": "string", "created_at": "2019-08-24T14:15:22Z"}/v1/merchantSend only the fields you are changing. Requires merchant:write, which is NOT granted by default on any key kind — everything this writes is read by strangers on a payment page, so a leaked storefront key must not be able to rename your business.
domain and logo_url are deliberately not writable here: the first is a claim we verified, the second is set by uploading a file. website_url is your own unverified link and is stated as such wherever it is shown.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
1 <= propertiesResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PATCH "https://example.com/v1/merchant" \ -H "Content-Type: application/json" \ -d '{}'{ "object": "merchant", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "display_name": "string", "website_url": "string", "logo_url": "string", "overpayment_policy": "keep", "settlement_asset": "string", "checkout_template": "string", "status": "active", "domain": "string", "domain_verified": true, "tolerance_bps": 0, "tolerance_min_cents": "string", "created_at": "2019-08-24T14:15:22Z"}/v1/merchant/domainThe verified domain (or null), how it was proven, and — for a pending claim or a verified domain — the three proofs you can publish: a DNS TXT record, a meta tag, or an HTML file. Once a domain is verified, every API key's origin_allowlist, every webhook endpoint URL and every invoice return_url / cancel_url on a live project must be on it.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/merchant/domain"{ "object": "merchant_domain", "domain": "string", "verified": true, "verified_at": "2019-08-24T14:15:22Z", "method": "dns", "last_checked_at": "2019-08-24T14:15:22Z", "unverifies_at": "2019-08-24T14:15:22Z", "claim": { "domain": "string", "expires_at": "2019-08-24T14:15:22Z", "last_attempt_at": "2019-08-24T14:15:22Z", "state": "idle", "watching_until": "2019-08-24T14:15:22Z", "gave_up_at": "2019-08-24T14:15:22Z" }, "proof": { "dns": { "type": "TXT", "host": "string", "value": "string" }, "meta": { "url": "string", "tag": "string" }, "file": { "url": "string", "content": "string" } }}/v1/merchant/domainMints a random token, good for 72 hours, and returns the three proofs. A verified domain stays verified until the new one passes. Signed-in owner or admin only — never a key.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/merchant/domain" \ -H "Content-Type: application/json" \ -d '{ "domain": "example.com" }'{ "object": "merchant_domain", "domain": "string", "verified": true, "verified_at": "2019-08-24T14:15:22Z", "method": "dns", "last_checked_at": "2019-08-24T14:15:22Z", "unverifies_at": "2019-08-24T14:15:22Z", "claim": { "domain": "string", "expires_at": "2019-08-24T14:15:22Z", "last_attempt_at": "2019-08-24T14:15:22Z", "state": "idle", "watching_until": "2019-08-24T14:15:22Z", "gave_up_at": "2019-08-24T14:15:22Z" }, "proof": { "dns": { "type": "TXT", "host": "string", "value": "string" }, "meta": { "url": "string", "tag": "string" }, "file": { "url": "string", "content": "string" } }}/v1/merchant/domain/checkLooks for the proof now: DNS first (at your domain's own nameservers), then the meta tag, then the HTML file — or only method if given. The first that passes verifies the domain at once.
On a miss, MolnPay keeps looking every 10 minutes for one hour, then stops and reports claim.state: gave_up with what it found on each method. Nothing is retried after that until you call this again.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/merchant/domain/check" \ -H "Content-Type: application/json" \ -d '{}'{ "object": "merchant_domain", "domain": "string", "verified": true, "verified_at": "2019-08-24T14:15:22Z", "method": "dns", "last_checked_at": "2019-08-24T14:15:22Z", "unverifies_at": "2019-08-24T14:15:22Z", "claim": { "domain": "string", "expires_at": "2019-08-24T14:15:22Z", "last_attempt_at": "2019-08-24T14:15:22Z", "state": "idle", "watching_until": "2019-08-24T14:15:22Z", "gave_up_at": "2019-08-24T14:15:22Z" }, "proof": { "dns": { "type": "TXT", "host": "string", "value": "string" }, "meta": { "url": "string", "tag": "string" }, "file": { "url": "string", "content": "string" } }}/v1/merchant/meConsole sessions only. The signed-in member's role (owner, admin, finance, developer, viewer) and what it may do — the console's chrome reads this. An API key has no role: it carries scopes instead.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/merchant/me"{ "object": "membership", "user_id": "string", "merchant_id": "500924a8-3f5e-4c00-beb8-2efcde988aea", "organization_id": "string", "role": "owner", "role_summary": "string", "can": { "manage_team": true, "manage_keys": true, "move_money": true, "update_profile": true, "update_billing": true, "transfer_ownership": true }}/v1/merchant/teamConsole sessions only. The owner, every member with their role, the open invitations, and the seats: how many members beyond the owner your plan includes, what one more costs a month, and how many are in use or invited.
Members and invitations are written through Better Auth's organization endpoints under /v1/auth/organization/ (invite-member, cancel-invitation, update-member-role, remove-member), which enforce the roles and the seats.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/merchant/team"{ "object": "team", "your_role": "owner", "organization_id": "string", "owner": { "user_id": "string", "email": "string", "name": "string" }, "members": [ { "id": "string", "user_id": "string", "email": "string", "name": "string", "role": "string", "since": "2019-08-24T14:15:22Z" } ], "invitations": [ { "id": "string", "email": "string", "role": "string", "expires_at": "2019-08-24T14:15:22Z", "invited_by": "string" } ], "seats": { "included": 0, "extra_seat_cents": "string", "members": 0, "pending": 0 }}/v1/merchant/passkeysConsole sessions only, and per person: the signed-in member's own passkeys. They confirm withdrawals and withdrawal-address changes; the authenticator code remains the fallback.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/merchant/passkeys"{ "object": "list", "has_more": true, "next_cursor": "string", "data": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "label": "string", "device_type": "string", "backed_up": true, "created_at": "2019-08-24T14:15:22Z", "last_used_at": "2019-08-24T14:15:22Z" } ]}/v1/merchant/passkeysThe browser's RegistrationResponseJSON for the options from POST /v1/merchant/passkeys/options. Takes effect immediately, and the person is emailed.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/merchant/passkeys" \ -H "Content-Type: application/json" \ -d '{ "label": "string", "response": {} }'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "total": 0}/v1/merchant/passkeys/challengeWebAuthn PublicKeyCredentialRequestOptionsJSON. Single use, five minutes. Sign it with the browser and send the result as passkey on a withdrawal, an address change, or a passkey change.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/merchant/passkeys/challenge"{}/v1/merchant/passkeys/optionsProof first: once you have any factor, a passkey or totp_code; the very first factor is bought with your password. Returns WebAuthn PublicKeyCredentialCreationOptionsJSON.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/merchant/passkeys/options" \ -H "Content-Type: application/json" \ -d '{}'{}/v1/merchant/passkeys/{id}Needs a second factor. Removing the last one while no authenticator is enrolled pauses withdrawals until a factor is set up again. The person is emailed.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Path Parameters
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X DELETE "https://example.com/v1/merchant/passkeys/497f6eca-6276-4993-bfeb-53cbbbba6f08" \ -H "Content-Type: application/json" \ -d '{}'{ "removed": true, "remaining": 0}/v1/merchant/notificationsConsole sessions only; any member may read. The topics (each with whether it is on), the notification addresses (pending until the code mailed to them is entered), the daily summary's zone and hour, and whether a private feed is live.
Notices are built from the same events GET /v1/events and your webhooks carry. Topics marked required — a payout awaiting approval, a failed payout, a reversed deposit, a balance moved by MolnPay staff, a disabled webhook endpoint — cannot be switched off.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/merchant/notifications"{ "object": "notification_settings", "plan": { "alerts_available": true, "required_plan": "string" }, "can_manage": true, "mail_configured": true, "include_test_mode": true, "timezone": "string", "summary_hour": 0, "topics": [ { "key": "string", "label": "string", "description": "string", "group": "money_in", "required": true, "available": true, "enabled": true } ], "recipients": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "email": "string", "status": "pending", "verified_at": "2019-08-24T14:15:22Z", "code_sent_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z" } ], "max_recipients": 0, "feed": { "active": true, "token_prefix": "string", "created_at": "2019-08-24T14:15:22Z" }}/v1/merchant/notificationsOwner or admin. Send only what changes: topics as { "deposits": false }, include_test_mode, timezone (IANA, e.g. Europe/Stockholm), summary_hour (0–23, local). Every optional topic starts off. Turning a required topic off is refused with topic_required; turning on a topic your plan does not include (available: false) is refused with alerts_not_on_plan (422).
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PATCH "https://example.com/v1/merchant/notifications" \ -H "Content-Type: application/json" \ -d '{}'{ "object": "notification_settings", "plan": { "alerts_available": true, "required_plan": "string" }, "can_manage": true, "mail_configured": true, "include_test_mode": true, "timezone": "string", "summary_hour": 0, "topics": [ { "key": "string", "label": "string", "description": "string", "group": "money_in", "required": true, "available": true, "enabled": true } ], "recipients": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "email": "string", "status": "pending", "verified_at": "2019-08-24T14:15:22Z", "code_sent_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z" } ], "max_recipients": 0, "feed": { "active": true, "token_prefix": "string", "created_at": "2019-08-24T14:15:22Z" }}/v1/merchant/notifications/recipientsOwner or admin. Mails a six-digit code to the address; nothing else is sent to it until the code is entered (…/verify). Up to five addresses.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/merchant/notifications/recipients" \ -H "Content-Type: application/json" \ -d '{ "email": "user@example.com" }'{ "object": "notification_settings", "plan": { "alerts_available": true, "required_plan": "string" }, "can_manage": true, "mail_configured": true, "include_test_mode": true, "timezone": "string", "summary_hour": 0, "topics": [ { "key": "string", "label": "string", "description": "string", "group": "money_in", "required": true, "available": true, "enabled": true } ], "recipients": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "email": "string", "status": "pending", "verified_at": "2019-08-24T14:15:22Z", "code_sent_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z" } ], "max_recipients": 0, "feed": { "active": true, "token_prefix": "string", "created_at": "2019-08-24T14:15:22Z" }}/v1/merchant/notifications/recipients/{id}Owner or admin. The last confirmed address cannot be removed (last_recipient): the always-on notices must reach someone.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Path Parameters
The recipient id.
uuidResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X DELETE "https://example.com/v1/merchant/notifications/recipients/497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "object": "notification_settings", "plan": { "alerts_available": true, "required_plan": "string" }, "can_manage": true, "mail_configured": true, "include_test_mode": true, "timezone": "string", "summary_hour": 0, "topics": [ { "key": "string", "label": "string", "description": "string", "group": "money_in", "required": true, "available": true, "enabled": true } ], "recipients": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "email": "string", "status": "pending", "verified_at": "2019-08-24T14:15:22Z", "code_sent_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z" } ], "max_recipients": 0, "feed": { "active": true, "token_prefix": "string", "created_at": "2019-08-24T14:15:22Z" }}/v1/merchant/notifications/recipients/{id}/verifyOwner or admin. The code expires after 30 minutes and allows five wrong tries.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Path Parameters
The recipient id.
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/merchant/notifications/recipients/497f6eca-6276-4993-bfeb-53cbbbba6f08/verify" \ -H "Content-Type: application/json" \ -d '{ "code": "string" }'{ "object": "notification_settings", "plan": { "alerts_available": true, "required_plan": "string" }, "can_manage": true, "mail_configured": true, "include_test_mode": true, "timezone": "string", "summary_hour": 0, "topics": [ { "key": "string", "label": "string", "description": "string", "group": "money_in", "required": true, "available": true, "enabled": true } ], "recipients": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "email": "string", "status": "pending", "verified_at": "2019-08-24T14:15:22Z", "code_sent_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z" } ], "max_recipients": 0, "feed": { "active": true, "token_prefix": "string", "created_at": "2019-08-24T14:15:22Z" }}/v1/merchant/notifications/recipients/{id}/resendOwner or admin. At most once a minute per address.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Path Parameters
The recipient id.
uuidResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/merchant/notifications/recipients/497f6eca-6276-4993-bfeb-53cbbbba6f08/resend"{ "object": "notification_settings", "plan": { "alerts_available": true, "required_plan": "string" }, "can_manage": true, "mail_configured": true, "include_test_mode": true, "timezone": "string", "summary_hour": 0, "topics": [ { "key": "string", "label": "string", "description": "string", "group": "money_in", "required": true, "available": true, "enabled": true } ], "recipients": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "email": "string", "status": "pending", "verified_at": "2019-08-24T14:15:22Z", "code_sent_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z" } ], "max_recipients": 0, "feed": { "active": true, "token_prefix": "string", "created_at": "2019-08-24T14:15:22Z" }}/v1/merchant/notifications/testOwner or admin. One test mail to every confirmed address; it appears in the delivery log.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/merchant/notifications/test"{ "object": "notification_test", "recipients": 0, "sent": 0}/v1/merchant/notifications/feedOwner or admin. Returns the Atom and RSS URLs ONCE — the token in them is the feed's only credential and is stored hashed. Any previous URL stops working.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/merchant/notifications/feed"{ "object": "notification_feed", "token": "string", "atom_url": "http://example.com", "rss_url": "http://example.com"}/v1/merchant/notifications/feedAuthorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X DELETE "https://example.com/v1/merchant/notifications/feed"{ "object": "notification_settings", "plan": { "alerts_available": true, "required_plan": "string" }, "can_manage": true, "mail_configured": true, "include_test_mode": true, "timezone": "string", "summary_hour": 0, "topics": [ { "key": "string", "label": "string", "description": "string", "group": "money_in", "required": true, "available": true, "enabled": true } ], "recipients": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "email": "string", "status": "pending", "verified_at": "2019-08-24T14:15:22Z", "code_sent_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z" } ], "max_recipients": 0, "feed": { "active": true, "token_prefix": "string", "created_at": "2019-08-24T14:15:22Z" }}/v1/merchant/notifications/deliveriesConsole sessions only. Every notice we tried to send, to which address, and whether it went.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Query Parameters
1 <= value <= 200100Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/merchant/notifications/deliveries"{ "object": "list", "has_more": true, "next_cursor": "string", "data": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "topic": "string", "topic_label": "string", "channel": "email", "recipient": "string", "subject": "string", "livemode": true, "status": "sending", "error": "string", "event_id": "string", "created_at": "2019-08-24T14:15:22Z", "sent_at": "2019-08-24T14:15:22Z" } ]}/v1/merchant/notifications/inboxDeposits, payouts, invoices, refunds, conversions, balance adjustments and funding top-ups worth telling a person about, newest first, within your plan's history window — each as a notice in plain words (the same as the notification email). unread is across the account for the calling member, up to 100.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Query Parameters
1 <= value <= 5020next_cursor of the previous page.
Comma list of categories.
Value in
- "true"
- "false"
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/merchant/notifications/inbox"{ "object": "inbox", "data": [ { "id": "string", "category": "invoices", "tone": "success", "subject": "string", "heading": "string", "summary": "string", "amount": { "value": "string", "asset": "string", "tone": "sent" }, "facts": [ { "label": "string", "value": "string", "mono": true } ], "hashes": [ { "label": "string", "value": "string", "href": "string" } ], "alert": "string", "cta": { "label": "string", "path": "string" }, "livemode": true, "created": "2019-08-24T14:15:22Z", "unread": true } ], "has_more": true, "next_cursor": "string", "unread": 0, "unread_capped": true}/v1/merchant/notifications/inbox/{id}Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Path Parameters
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/merchant/notifications/inbox/string"{ "id": "string", "category": "invoices", "tone": "success", "subject": "string", "heading": "string", "summary": "string", "amount": { "value": "string", "asset": "string", "tone": "sent" }, "facts": [ { "label": "string", "value": "string", "mono": true } ], "hashes": [ { "label": "string", "value": "string", "href": "string" } ], "alert": "string", "cta": { "label": "string", "path": "string" }, "livemode": true, "created": "2019-08-24T14:15:22Z", "unread": true}/v1/merchant/notifications/inbox/{id}/readFor the calling member only.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Path Parameters
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/merchant/notifications/inbox/string/read"{ "object": "inbox_read", "id": "string"}/v1/merchant/notifications/inbox/read-allFor the calling member only; every notice there is, not just a loaded page.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/merchant/notifications/inbox/read-all"{ "object": "inbox_read_all"}/v1/feeds/{token}/events.atomUnauthenticated: the nf_ token in the path is the whole credential (create it with POST /v1/merchant/notifications/feed). The latest 50 events, newest first, within your plan's history window. For feed readers and the RSS apps of Slack and Teams.
Path Parameters
Response Body
application/atom+xml
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/feeds/string/events.atom""string"/v1/feeds/{token}/events.rssThe same entries as the Atom feed, as RSS 2.0.
Path Parameters
Response Body
application/rss+xml
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/feeds/string/events.rss""string"/v1/merchant/chainsYour plan includes a number of chains (included); every chain you switch on beyond that is charged extra_chain_cents a month, prorated for the rest of the month you switch it on in and in full on the 1st after that. Enterprise includes every chain.
The switches limit the WALLET SERVICE only — where POST /v1/wallets may issue a static deposit address to one of your customers. Invoices and hosted checkout, your own wallet, payouts and conversions use every chain the platform serves your project (available) whatever is switched on here.
A LIVE project that has never chosen has no wallet-service chains: POST /v1/wallets answers chain_not_enabled until you switch something on here or in the dashboard. A test project with no choice gets every chain the platform serves, so trying the API needs no setup. Once you choose, the choice applies in both modes.
effective is what POST /v1/wallets gets right now — your selection narrowed to what the platform serves your project, the same list GET /v1/ping reports as wallet_chains.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/merchant/chains"{ "object": "merchant_chains", "plan": "string", "included": 0, "extra_chain_cents": "string", "chosen": true, "selected": [ "string" ], "effective": [ "string" ], "chains": [ { "chain": "string", "name": "string", "available": true, "on": true, "role": "included" } ]}/v1/merchant/chainsSend the full list of chains you want ON. Chains already on keep their place in the order (and so whether they are included or extra); new ones go on the end; anything missing is switched off. Requires merchant:write.
Switching an EXTRA chain on charges the rest of this month to your operational balance at once and is refused if the balance cannot carry it. Switching a chain off stops new addresses and invoices on it immediately, credits nothing back for the month, and never touches addresses your customers already hold — they keep receiving.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PUT "https://example.com/v1/merchant/chains" \ -H "Content-Type: application/json" \ -d '{ "chains": [ "string" ] }'{ "object": "merchant_chains", "plan": "string", "included": 0, "extra_chain_cents": "string", "chosen": true, "selected": [ "string" ], "effective": [ "string" ], "chains": [ { "chain": "string", "name": "string", "available": true, "on": true, "role": "included" } ]}