GET /v3/auction/{auctionId}/gram-recipients — bidder-safe gram recipient search
const url = 'https://api-ha-prod-p8.handbid.dev/v3/auction/33934/gram-recipients?q=jan&limit=20&offset=0';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api-ha-prod-p8.handbid.dev/v3/auction/33934/gram-recipients?q=jan&limit=20&offset=0' \ --header 'Authorization: Bearer <token>'The Events gram picker’s recipient search (HAN-3276), restored after SEC-38 closed GET /organization/contacts to managers. The organization is never taken from the client: it is derived from the caller’s canonical registration in {auctionId} (one no-leak query — an unknown auction and a non-participant both answer 404 not_found “Auction not found.”). Population: the organization’s authorized, live, e-mail-bearing contacts whose first name, last name, e-mail or null-safe full name STARTS with q (escaped prefix; no substring walk). Disclosure: id, name (null-safe, may be "") and emailMasked (j***@c***.com) only — never the raw e-mail, phone, company or userId. Bare v3 body (no envelope). Ordered lastName, firstName, id; totalCount is constant across pages.
Auth: required (bearer; feeds the participant gate and the auctionGramRecipients limiter, 30/min).
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”Example
33934Query Parameters
Section titled “Query Parameters ”Search prefix, 3–64 characters after trim; matched case-insensitively at the start of first name, last name, e-mail or the full name.
Example
janPage size, canonical unsigned decimal only (+5, 05, 1e1, 10.5 → 400). Default 20, max 50.
Canonical unsigned decimal only. Default 0.
Responses
Section titled “ Responses ”Matching recipients (first page) and the total.
object
object
Null-safe display name; "" when the contact has no first or last name.
j***@c***.com; *** when the stored e-mail has no @.
Example
{ "recipients": [ { "id": 123, "name": "Jane Smith", "emailMasked": "j***@c***.com" } ], "totalCount": 1}validation_error — q shorter than 3 / longer than 64, a bracketed array, or a non-canonical limit/offset.
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}No or invalid bearer.
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 “Auction not found.” — unknown auction OR the caller is not a registered participant of it (indistinguishable by design).
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 (rate_limited); retryAfter 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}