Skip to content

POST /v3/vendor/products/:id/pull — withdraw package

POST
/v3/vendor/products/{productId}/pull
curl --request POST \
--url https://api-ha-prod-p8.handbid.dev/v3/vendor/products/5001/pull \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "emergency": false, "reason": "" }'

Withdraw the package from the marketplace. Preview first with GET .../pull-preview.

Emergency pull: emergency: true bypasses the standard 60-day notice window but requires a non-empty reason — omitting it is a 422 validation_error (“An emergency pull requires a reason.”).

Responses: 204 No Content on success; 422 (emergency without a reason); 404 (not in your catalog); 401 / 403 as elsewhere.

productId
required
integer
Example
5001
Media type application/json
object
emergency

Bypass the standard notice window. Requires a non-empty reason.

boolean
reason
string
Example
{
"emergency": false,
"reason": ""
}

The package was pulled.

No or invalid Bearer token.

Media type application/json

Unified error envelope. retryAfter is present only on transient (429 / 503) responses.

object
error
required

Stable machine-readable error code (e.g. unauthorized, forbidden, not_found, validation_error, unavailable).

string
message
required

Human-readable explanation.

string
retryAfter

Seconds to wait before retrying. Present on 429 and 503.

integer
Example
{
"error": "unauthorized",
"message": "A valid Bearer token is required."
}

The token’s organization is not a marketplace vendor.

Media type application/json

Unified error envelope. retryAfter is present only on transient (429 / 503) responses.

object
error
required

Stable machine-readable error code (e.g. unauthorized, forbidden, not_found, validation_error, unavailable).

string
message
required

Human-readable explanation.

string
retryAfter

Seconds to wait before retrying. Present on 429 and 503.

integer
Example
{
"error": "forbidden",
"message": "Your organization is not a marketplace vendor."
}

Not found in your catalog.

Media type application/json

Unified error envelope. retryAfter is present only on transient (429 / 503) responses.

object
error
required

Stable machine-readable error code (e.g. unauthorized, forbidden, not_found, validation_error, unavailable).

string
message
required

Human-readable explanation.

string
retryAfter

Seconds to wait before retrying. Present on 429 and 503.

integer
Example
{
"error": "not_found",
"message": "Product not found in your catalog."
}

An emergency pull was requested without a reason.

Media type application/json

Unified error envelope. retryAfter is present only on transient (429 / 503) responses.

object
error
required

Stable machine-readable error code (e.g. unauthorized, forbidden, not_found, validation_error, unavailable).

string
message
required

Human-readable explanation.

string
retryAfter

Seconds to wait before retrying. Present on 429 and 503.

integer
Example
{
"error": "validation_error",
"message": "An emergency pull requires a reason."
}