POST /v3/auctions/by-key/{key}/access — exchange invitation code by key
const url = 'https://api-ha-prod-p8.handbid.dev/v3/auctions/by-key/spring-gala/access';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"invitationCode":"AB-12!"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api-ha-prod-p8.handbid.dev/v3/auctions/by-key/spring-gala/access \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "invitationCode": "AB-12!" }'The same exchange as the id route, reached by auction key — the identifier the web holds when the 403 private_event_pin_required denial (which carries no id) refuses it (HAN-2904). Scoped by whitelabelKey/whitelabelId (key wins). Failures are the id route’s verbatim; an unknown key → 404 not_found (treating it as a wrong code would make it a key oracle). Both limiter budgets are the id route’s by name.
Success body adds auctionId — the grant is per-id and every other gated read is id-keyed, so a by-key caller needs it to attach X-Auction-Access. The id route’s body stays {accessToken, expiresAt}.
Auth: none.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”Example
spring-galaQuery Parameters
Section titled “Query Parameters ”Whitelabel slug; wins over whitelabelId when both are sent.
Numeric whitelabel scope (native callers).
Request Body required
Section titled “Request Body required ”object
Example
AB-12!Responses
Section titled “ Responses ”Grant issued (with auctionId).
object
Example generated
{ "accessToken": "example", "expiresAt": 1, "auctionId": 1}Validation error.
Unified error envelope. retryAfter is present only on transient (429 / 503) responses.
object
Stable machine-readable error code (e.g. unauthorized, forbidden, not_found, validation_error, unavailable).
Human-readable explanation.
Seconds to wait before retrying. Present on 429 and 503.
Example generated
{ "error": "example", "message": "example", "retryAfter": 1}Not found (unknown id/key, or a privacy-blocked auction — a 403 would assert existence).
Unified error envelope. retryAfter is present only on transient (429 / 503) responses.
object
Stable machine-readable error code (e.g. unauthorized, forbidden, not_found, validation_error, unavailable).
Human-readable explanation.
Seconds to wait before retrying. Present on 429 and 503.
Example generated
{ "error": "example", "message": "example", "retryAfter": 1}Rate limited; Retry-After seconds.
Unified error envelope. retryAfter is present only on transient (429 / 503) responses.
object
Stable machine-readable error code (e.g. unauthorized, forbidden, not_found, validation_error, unavailable).
Human-readable explanation.
Seconds to wait before retrying. Present on 429 and 503.
Example generated
{ "error": "example", "message": "example", "retryAfter": 1}Access-grant secret unconfigured (access routes only).
Unified error envelope. retryAfter is present only on transient (429 / 503) responses.
object
Stable machine-readable error code (e.g. unauthorized, forbidden, not_found, validation_error, unavailable).
Human-readable explanation.
Seconds to wait before retrying. Present on 429 and 503.
Example generated
{ "error": "example", "message": "example", "retryAfter": 1}