Skip to main content
All Integration API errors follow RFC 9457 Problem Details (application/problem+json). A single schema covers every failure mode. Auth, validation, concurrency, server errors.

Problem shape

type and title identify the status, not the reason. They are derived from one another — title is the HTTP reason phrase, type is that phrase slugged onto the problems base URI — so every 409 on this API is …/problems/conflict with the title Conflict, whatever caused it. Branch on status for how to react, and read detail to tell same-status refusals apart: a stale If-Match, an externalOrderId already taken and a duplicate request still in flight are all 409, and only detail says which. detail is prose meant for a human reading a log, so match on it for diagnostics, never as a control-flow key.

Status-code catalog

The type URI adds nothing status does not already tell you, because it is derived from the status. It is published so the envelope is a conforming RFC 9457 problem document, not as a branch key.

Handling examples

Validation errors (422)

Body includes an errors[] array with per-field detail:
Show the per-field messages in your UI; root-level detail is a summary.

Concurrency conflicts (409 on a stale If-Match)

The tag is opaque: compare it, never parse it. A write whose If-Match does not name the current tag is refused with 409 — for a buyer, an invoice and a payment that means the whole tag. An order is narrower: it compares only the part of the tag the write itself could change, so an order write can still succeed after a merely projected field has moved:
The body is an ordinary problem document and carries no copy of the resource. There is no currentResource member, and no member naming the version you sent or the version in force. Re-read the resource, merge your intended change into what that read returned, and retry with the ETag it carried. order in the detail is the resource that refused the write — invoice and payment word it the same way. A buyer says more, because its record is shared with every partner holding its KYC result and any of them can move it:
Omitting If-Match on a versioned resource is a different refusal — 428, not 409 — because a client that forgot the header can simply add it, while one holding a stale tag has to re-read first:
409 is not reserved for stale tags: the same status and the same Conflict title answer an externalOrderId already taken, a duplicate request still in flight, and an order split across shipments. Read detail before assuming a retry-after-re-read will help. See optimistic concurrency for how tags are issued, what does and does not make one stale, and a retry loop.

Idempotency key reuse (422)

If you reuse an Idempotency-Key within the 24-hour window with a different body, NT24 rejects with 422:
This shares its status, title and type with a validation failure. The difference in the body is errors[], which a validation failure carries and this does not. A key whose first request is still running is a 409 rather than a 422: "A request with this Idempotency-Key is still being processed. Retry once it has completed." Generate fresh UUIDs for each logically-distinct request.

Rate limiting

Rate limiting is planned and not yet enforced: no endpoint answers 429 today. See Rate limits.

Troubleshooting

Your token is valid, but the specific partner in the URL path isn’t in your authorized partners list, OR a capability required for the endpoint (e.g. allowMarketplaceLedKyc) is false on your org. Check GET /v1/me.
The resource exists already with a different body than what you’re sending. Either re-send the exact original body, or switch to PATCH to update fields explicitly. Safe retries require both the same Idempotency-Key AND the same body.
Non-validation 422, most commonly idempotency-key reuse with a different body. type and title are the same for both, so the absent errors[] is the signal — read detail to confirm.
Capture traceId from the response body and include it when reaching our contact page. We correlate logs by trace id.

Next

Rate limits

Planned; not yet enforced.

Idempotency

Key format, TTL, replay semantics.