API reference
Error codes
Every failed request returns one JSON envelope with a stable machine-readable
code. The doc_url in that envelope links to the page
for its code, so you can paste it straight from a log into a browser.
The error envelope
4xx · error
{
"error": {
"code": "validation_failed",
"message": "The request could not be processed.",
"details": [
{
"field": "execution_mode",
"message": "must be test or live"
}
],
"request_id": "6f1c2a3e-8d4b-4c5e-9f0a-1b2c3d4e5f60",
"doc_url": "https://cascades.crscreditapi.com/docs/api/errors/validation_failed"
}
}| Field | Type | Meaning |
|---|---|---|
code |
string | Stable identifier for the failure. Branch on this, never on message. |
message |
string | Human-readable summary. Wording may change; safe to log and show to operators. |
details |
array | Zero or more { field, message } entries naming the parameter, filter, or scope at fault. |
request_id |
string | Correlation id, also sent as the X-Request-Id header. Quote it when contacting support. |
doc_url |
string | Link to the page for this code on the origin you called. |
Rate limits (429) also send a Retry-After header in seconds, and
every 401 carries an RFC 6750 WWW-Authenticate challenge.
400 Bad Request
| Code | Title | Message |
|---|---|---|
| bad_request | Bad request | |
| malformed_body | Malformed request body |
401 Unauthorized
| Code | Title | Message |
|---|---|---|
| unauthorized | Unauthorized |
403 Forbidden
| Code | Title | Message |
|---|---|---|
| insufficient_scope | Insufficient scope | |
| forbidden | Forbidden | |
| live_mode_forbidden | Live mode forbidden | |
| activation_forbidden | Activation forbidden | |
| review_assigned_elsewhere | Review assigned to another user |
404 Not Found
| Code | Title | Message |
|---|---|---|
| not_found | Not found |
405 Method Not Allowed
| Code | Title | Message |
|---|---|---|
| method_not_allowed | Method not allowed |
406 Not Acceptable
| Code | Title | Message |
|---|---|---|
| not_acceptable | Not acceptable | |
| unsupported_format | Unsupported export format |
409 Conflict
| Code | Title | Message |
|---|---|---|
| workflow_inactive | Workflow inactive | |
| conflict | Conflict | |
| idempotency_conflict | Idempotency key reused | |
| execution_not_cancellable | Execution not cancellable | |
| review_not_pending | Review not pending | |
| review_already_decided | Review already decided | |
| batch_not_cancellable | Batch not cancellable | |
| batch_not_resumable | Batch not resumable | |
| batch_not_retryable | Batch has no retryable rows | |
| delivery_not_retryable | Delivery not retryable |
422 Unprocessable Content
| Code | Title | Message |
|---|---|---|
| unprocessable_content | Unprocessable content | |
| validation_failed | Validation failed | |
| missing_idempotency_key | Idempotency-Key header missing | |
| generation_failed | Cascade generation failed |
429 Too Many Requests
| Code | Title | Message |
|---|---|---|
| rate_limited | Rate limited |
500 Internal Server Error
| Code | Title | Message |
|---|---|---|
| internal_server_error | Internal server error |
501 Not Implemented
| Code | Title | Message |
|---|---|---|
| not_implemented | Not implemented |
503 Service Unavailable
| Code | Title | Message |
|---|---|---|
| designer_busy | Cascade designer busy |