Pulse Pack error reference
Every error this API returns carries a code. Build your integration against the code and the HTTP status. Do not match on message: it is a human-readable sentence and its wording can change between releases.
{
"message": "Response not found.",
"code": "pack.response.not_found"
}
Where no code applies the response omits the key entirely rather than sending "code": null, so an integration that reads only message keeps working.
This page is generated from the error catalogue published on the deployed OpenAPI spec, so it cannot drift from what the API actually returns. 24 codes are listed.
400 Bad Request
Retryable? No. Fix the request first.
| Code | Message | Parameters |
|---|---|---|
pack.request.invalid_gzip_body | The request body could not be decompressed. Check that it is valid gzip content before sending it with an 'X-Content-Encoding: gzip' header. | none |
402 Payment Required
Retryable? No. The subscription does not cover this action. Contact us to change your plan.
| Code | Message | Parameters |
|---|---|---|
pack.subscription.expired | Your /pack subscription has expired. Payment required. | none |
pack.subscription.missing | No active /pack subscription. Payment required. | none |
403 Forbidden
Retryable? No. Fix the request first.
| Code | Message | Parameters |
|---|---|---|
pack.auth.invalid_token | Invalid JWT token. | none |
pack.request.foreign_resource | The supplied {label} id belongs to another account. | label |
404 Not Found
Retryable? No. The resource does not exist.
| Code | Message | Parameters |
|---|---|---|
pack.response.bin_not_found | Could not find bin {bin_uuid} on this response. | bin_uuid |
pack.response.none_found | No responses found. | none |
pack.response.not_found | Response not found. | none |
pack.response.request_not_found | Could not find the request for response {response_id}. | response_id |
pack.viz.bin_index_out_of_range | Bin index {bin_index} is out of range for this order. | bin_index |
pack.viz.order_index_out_of_range | Order index {order_index} is out of range for this response. | order_index |
422 Unprocessable Content
Retryable? No. Fix the request first.
| Code | Message | Parameters |
|---|---|---|
pack.request.invalid_configuration | The request configuration is invalid: {reason} | reason |
pack.request.unknown_carrier_presets | Unknown carrier preset ids: {ids}. These carrier presets do not exist for your account. | ids |
pack.request.unknown_scenario | Unknown scenario '{scenario}'. Valid scenarios are: {valid}. | scenario, valid |
pack.request.unknown_warehouse | Unknown warehouse code '{warehouse_code}'. This warehouse does not exist for your account. | warehouse_code |
pack.response.invalid_id | The supplied response id is not valid. | none |
429 Too Many Requests
Retryable? Yes, after a pause. This is a usage limit.
| Code | Message | Parameters |
|---|---|---|
pack.limits.max_items | This request contains {count} items across all orders, which exceeds your limit of {limit}. | count, limit |
pack.limits.max_unique_bins | This request uses {count} unique bins, which exceeds your limit of {limit}. | count, limit |
pack.limits.pallet_packing_not_included | Pallet packing is not included in your current plan. | none |
One of these is permanent rather than a rate limit: pack.limits.pallet_packing_not_included. Retrying it never succeeds.
500 Internal Server Error
Retryable? Yes, once, with backoff. Contact support if it persists.
| Code | Message | Parameters |
|---|---|---|
pack.packing.async_start_failed | Could not start packing. Please retry. | none |
pack.response.unreadable | The stored response could not be read. Please contact support if this continues. | none |
pack.subscription.check_failed | Something went wrong while checking your subscription. Please retry; contact support if this continues. | none |
pack.viz.upload_failed | Could not generate the visualisation. Please retry. | none |
Codes that are not HTTP errors
These codes never appear as an HTTP error response. They are reported inside a successful response body, in the messages array, where a request was accepted but something went wrong while processing it. Check messages on a completed response as well as the HTTP status.
| Code | Message |
|---|---|
pack.packing.failed | Packing failed for this request. |
Errors that do not come from the API
These responses are produced by the infrastructure in front of the API, before a request reaches the application or after it has already returned. They never carry a code, and their body is not in the shape described above. Do not assume code is always present.
| Status | Usual cause | What to do |
|---|---|---|
413 | The request body exceeded the platform limit before reaching us. | Send fewer items per request, or compress the body. |
502 | The response was too large to return, or the function failed outright. | Split the work across smaller requests. If it persists on a small request, contact support. |
A 502 after a request that clearly succeeded usually means the result was too large to return in one response. That is the case the asynchronous flow exists for: submit the work, then fetch the result separately.
Validation errors
A malformed request body is rejected before it reaches an endpoint and returns a different shape: a detail list with one entry per problem. Each entry names the offending field in loc and the failure kind in type.
{
"detail": [
{"loc": ["body", "orders"], "msg": "Input should be a valid list", "type": "list_type"}
]
}