Boarding a merchant
The core workflow. Three calls in order and you're done.
Steps
- Find an acquirer you can board onto —
GET /acquirers - Create the merchant —
POST /merchants - Board onto one acquirer —
POST /merchants/USERNAME/acquirers
Repeat step 3 for each additional acquirer.
Boarding is synchronous. A board that can't complete is reported inline on the POST as a
422— fix the details and re-submit.
Step 1 — list the acquirers you can board onto
curl https://gateway.pmnts.io/v2/partners/acquirers \
-u "$PARTNER_USERNAME:$PARTNER_TOKEN"{
"items": [
{ "code": "nab", "name": "National Australia Bank" },
{ "code": "cba", "name": "Commonwealth Bank" },
{ "code": "anz", "name": "ANZ" }
],
"next_cursor": null
}Step 2 — create the merchant
curl -X POST https://gateway.pmnts.io/v2/partners/merchants \
-u "$PARTNER_USERNAME:$PARTNER_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Coffee",
"username": "acme-coffee",
"mcc": "5814",
"trading_country": "AU",
"settlement_currency": "AUD"
}'{
"username": "acme-coffee",
"name": "Acme Coffee",
"status": "active",
"credentials": {
"username": "acme-coffee",
"token": "k_live_…",
"shared_secret": "…"
},
"created_at": "2026-06-16T06:08:46Z"
}The credentials.token is shown once. Hand it to the merchant immediately — they'll use it against the Gateway API.
Step 3 — board onto an acquirer
curl -X POST https://gateway.pmnts.io/v2/partners/merchants/acme-coffee/acquirers \
-u "$PARTNER_USERNAME:$PARTNER_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"acquirer": "nab",
"mid": "1234567890",
"tid": "00000001"
}'Success (live immediately):
{
"id": "042-ACQ-NAB",
"acquirer": "nab",
"merchant": "acme-coffee",
"status": "enabled",
"mid": "1234567890",
"tid": "00000001",
"boarded_at": "2026-06-16T06:09:01Z"
}Failure (a processor rejected the request — 422 processor_error):
{
"error": {
"type": "processor_error",
"message": "a processor is temporarily unavailable",
"fields": {},
"request_id": "req_01HZX2…"
}
}Fix and re-submit. See Errors and troubleshooting.
Failure, idempotency and retries
Boarding is synchronous and recovery is always the partner re-issuing a call. Safe-retry behaviour is built into the calls themselves:
- Identity create dedupes on
(ABN, business name, trading name). Re-posting the same business returns409 conflictinstead of creating a duplicate. A shared ABN alone is allowed. - Combined create-and-board (a
POST /merchantswithacquirers) either creates the merchant and every requested connection, or creates nothing. There is no partial state to clean up on the partner's side. - Standalone board (
POST /merchants/USERNAME/acquirers) is idempotent per acquirer: re-posting the sameacquireragainst a merchant that already has it returns the existing connection. Aprocessor_errorretry is safe for the same reason.
What to do on each failure
| Failure | What to do |
|---|---|
422 validation_error | Read error.fields, correct the named input (currency, MID, card type, etc.), POST again. A corrected retry is safe. |
422 processor_error | The request is fine — the upstream processor isn't. Back off and re-post the identical request, or escalate if it persists. Don't mutate the payload. |
409 conflict on create | The merchant already exists for this partner. Fetch it with GET /merchants/USERNAME instead of re-creating. |
See Errors and troubleshooting.
What's next
- Managing acquirer connections — list, update, enable, disable
- Merchant lifecycle — suspend, close, rotate credentials