Skip to main content
The Causeloop API uses a consistent error envelope for all failure responses. Every error is JSON with a top-level error object.

Error response shape

string
required
Machine-readable error code. Use this field for programmatic error handling.
string
required
Human-readable description of the error. Do not rely on this string in code — it may change. Use code instead.
string
required
Unique correlation ID for this request. Include this value when contacting support — it links to logs, audit events, and the outbound X-Request-Id response header.
object
Optional map of field-level error messages. Present on validation errors to pinpoint which input field failed and why.

HTTP status codes

Error codes

Abstention is not a failure

Causeloop’s engine never guesses to fill in a gap. Several codes above, plus two non-error response shapes, are the mechanism:
  • Classification (extraction, root-cause, criticality) returns abstained — either as the 409 error code above when the operation can’t proceed at all, or as a status: "abstained" field in an otherwise-200 response (e.g. GET /issues/{id}/root-cause) alongside a pointer into /review-queue. A human resolution appends an event and unblocks dependent computation; it is never silently skipped.
  • Hazard models (GET /patterns/{id}/hazard and everything derived from it — forecasts, predictions, financials) return 404 not_fitted with a reason when there isn’t enough signal to fit. The frontend renders the reason, never a fake curve.
  • Reports: every numeral in a generated narrative must resolve to the run’s facts JSON. A mismatch fails the run outright with report_facts_mismatch rather than shipping a wrong number.
  • Replay: POST /engine/runs/{id}/replay never errors on divergence. It always returns 200 with {identical: bool, diff_summary}identical: false is a real (alarmed) outcome, not an exception.
  • Ingest: an engine-eligible issue with no narrative is accepted (202) with engine_status: "blocked_no_narrative" in the ack’s engine_status_summary, not rejected and not silently clustered without evidence.

Validation errors

When request validation fails (status 400, code validation_error), the details object maps field names to error messages:
The field name in details is the dot-path to the invalid field in the request body (e.g. connector.config.api_key).

Handling errors

5xx errors and retries

500 Internal Server Error responses indicate an unexpected server-side failure. They are safe to retry with exponential backoff. Always include the trace_id from the error body if you report the issue to support.
Pass the trace_id to Causeloop support when reporting unexpected errors — it ties directly to the server-side logs for that request.