POST/v1/partner-relationship-offers/search
Read the offer a link carries
The offer of a relationship that the code in a partner's link names, for an owner deciding whether to let the partner in (docs/decisions/0104 §2). A search rather than a read by id, because the code is a secret: it travels in the body and never in an address a log keeps.
Only an owner may read one. A code nobody issued, or one already answered, revoked or lapsed,
is 404.
Request body application/json · PartnerRelationshipOfferCode
codestringRequired
1–128 chars
Responses
-
200
The offer.
PartnerRelationshipOfferToAnswer · application/json
idstring · uuidRequired
lapses_atstring · date-timeRequired
notestringRequired
offered_by_namestringRequired
Who on the partner's team made the offer.
partner_kindstring · enumRequired
What the partner does for the businesses it looks after.
operatorreselleraccountantpartner_namestringRequired
rolestring · enumRequired
What the partner asks to be. The owner may grant staff in place of manager, never more.
managerstaff
-
400
The request could not be parsed. Malformed JSON, a bad query parameter, or a header that failed to decode, among them an
API-Versionlater than the server speaks or not a date (api-version-unknown, with the server's own inapi_version).Distinct from
422: a400never reached validation, soinvalid_paramsis absent. Retrying without changing the request will fail again, except that a request refused for itsAPI-Versiongoes once the server is updated. -
401
No credentials, or credentials that could not be verified — missing bearer token, malformed JWT, expired token, or a signature that failed against the issuer's JWKS.
Refresh the token and retry once. Repeated
401after a refresh means the device needs to re-enrol. -
403
Authenticated, but not permitted. The token is valid and its merchant was resolved, but the caller's role does not allow this operation, or the target belongs to a different merchant.
Cross-tenant access is reported as
403on a resource the caller may not see, and as404where even confirming existence would leak information. Retrying will not help. -
404
No such resource, or none visible to this caller.
Also returned instead of
403where acknowledging existence would itself leak information — so a404does not prove the id is unused globally, only that it is not yours. -
410
The request names an
API-Versionthis server no longer serves (docs/decisions/0011). Nothing in it was read.api_versionnames the version the server speaks: the client is behind, and sends the request again once it is updated. -
415
The request
Content-Typeis not supported. This API acceptsapplication/jsonon all mutations. -
429
Rate limit exceeded. Honour
Retry-Afterrather than applying your own backoff.A fleet of tills coming back online together after an outage is the realistic cause, which is exactly when uncoordinated client-side retry turns a brief outage into a sustained one. The limit is per process, and per site for what records trade there — a request spends its site's budget, and a till's own smaller one inside it — and per
(client, merchant)for everything else; noRateLimitfield is sent, so this response and itsRetry-Afterare the whole of the contract. -
500
Something failed on our side.
trace_ididentifies the request in our tracing — quote it in a support ticket.The body never carries internal detail: no SQL, no stack traces, no upstream error strings. Safe to retry with the same
Idempotency-Key.