Pulse Pick 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. 28 codes are listed.
400 Bad Request
Retryable? No. Fix the request first.
| Code | Message | Parameters |
|---|---|---|
common.invalid_date_format | Invalid date format for {name}. Use ISO format 'YYYY-MM-DDTHH:MM:SS'. | name |
history.invalid_cursor | Invalid cursor. | none |
integration.api_config_not_found | Could not resolve API configuration '{config_id}'. | config_id |
kpi.invalid_frequency | Invalid frequency. Use 'day', 'week', 'month' or 'hour'. | none |
optimize.invalid_request_id | Invalid request id. | none |
request.invalid_gzip | We couldn't decompress the request body. Make sure it's valid gzip content and try again. | none |
warehouse.version_not_ready | Warehouse version is not ready. Please process it first. | none |
401 Unauthorized
Retryable? No. Check your API key.
| Code | Message | Parameters |
|---|---|---|
auth.not_authenticated | Not authenticated. | none |
402 Payment Required
Retryable? No. The subscription does not cover this action. Contact us to change your plan.
| Code | Message | Parameters |
|---|---|---|
subscription.not_subscribed | Your subscription does not cover this action. | none |
404 Not Found
Retryable? No. The resource does not exist.
| Code | Message | Parameters |
|---|---|---|
optimize.postprocessing_step_not_found | Post-processing step not found with function_id '{function_id}'. | function_id |
optimize.preprocessing_step_not_found | Pre-processing step not found with function_id '{function_id}'. | function_id |
optimize.request_not_found | No optimization request found for id '{request_id}'. | request_id |
warehouse.no_production_version | No production version found for warehouse '{warehouse_name}'. Mark a version as production first. | warehouse_name |
warehouse.not_found_by_name | No warehouse found with name '{warehouse_name}'. Check the warehouse_name matches exactly. | warehouse_name |
warehouse.version_not_found_for_site | Warehouse version not found for site '{site_name}'. | site_name |
422 Unprocessable Content
Retryable? No. Fix the request first.
| Code | Message | Parameters |
|---|---|---|
request.invalid_body | The request body is invalid. | none |
validation.bool_type | Field '{field}' must be true or false. | field |
validation.duplicate_order_pick_ids | Provided (order ID, pick ID) combinations are not unique. | none |
validation.duplicate_pick_ids | Provided pick_id's are not unique. | none |
validation.float_type | Field '{field}' must be a number. | field |
validation.int_type | Field '{field}' must be a whole number. | field |
validation.invalid | Field '{field}' is invalid ({type}). | field, type |
validation.missing | Field '{field}' is required. | field |
validation.string_type | Field '{field}' must be text. | field |
validation.too_short | Field '{field}' must not be empty. | field |
429 Too Many Requests
Retryable? Yes, after a pause. This is a usage limit.
| Code | Message | Parameters |
|---|---|---|
algo.task_limit_exceeded | You have reached the limit of {limit} concurrent {algo_task_type} tasks ({current} running). Please wait for existing tasks to finish. | algo_task_type, current, limit |
500 Internal Server Error
Retryable? Yes, once, with backoff. Contact support if it persists.
| Code | Message | Parameters |
|---|---|---|
optimize.failed | Optimization task failed. | none |
202 Accepted, still processing
Retryable? Yes. The result is not ready yet; poll again or use a webhook.
| Code | Message | Parameters |
|---|---|---|
optimize.still_processing | Optimization still in progress. | none |
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. |
504 | The request took longer than the gateway allows (currently 120 seconds). | Use the asynchronous flow rather than waiting on a synchronous response. |
429 | Platform-level throttling, distinct from the account limits listed above. | Back off and retry. If it recurs at normal volume, 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"}
]
}