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:
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:
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:
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:
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 answers429
today. See Rate limits.
Troubleshooting
403 but /me succeeds
403 but /me succeeds
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.409 on POST that was supposed to be idempotent
409 on POST that was supposed to be idempotent
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.422 with no errors[] array
422 with no errors[] array
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.Intermittent 500 errors
Intermittent 500 errors
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.