Skip to content

Errors ​

RORCex uses consistent JSON error envelopes across all endpoints. This page documents every shared error shape. Endpoint-specific errors are noted inline in each endpoint's documentation.


Authentication & Authorization ​

401 — Unauthenticated

No token was supplied, or the token is expired/invalid.

json
{ "error": "Unauthenticated." }

401 — Wrong token type

A token of the wrong type was presented (e.g., a user token on a service-only endpoint or vice versa).

json
{ "error": "invalid_token_type" }

403 — Forbidden

The token is valid but the caller lacks the required permission, or the request targets an organization outside the caller's accessible scope.

json
{ "error": "Forbidden." }

Upstream Proxy Errors ​

Live-proxy read and write endpoints relay requests to the RORC lane software. When the upstream returns a 4xx or 5xx, RORCex mirrors the HTTP status code and wraps the response:

json
{
  "error": "upstream_error",
  "upstream_status": 500,
  "message": "Upstream returned an unexpected error.",
  "upstream_body": "..."
}
FieldTypeDescription
errorstringAlways "upstream_error"
upstream_statusintegerHTTP status code returned by the RORC lane
messagestringHuman-readable summary
upstream_bodystringRaw response body from the lane (may be empty)

502 — Transport failure

When RORCex cannot reach the lane at all (network timeout, connection refused, etc.) the status is 502 Bad Gateway and the same envelope is returned with upstream_status omitted or set to 0.


Store Not Installed ​

Returned when a requested store_org_id has no active RORCex install, or the install is out of scope for the calling organization.

Status: 404 Not Found

json
{
  "error": "store_not_found",
  "store_org_id": "org_00000k1L2m3N4o5",
  "message": "No active install found for this store."
}

Report Errors ​

These errors are returned by /v1/reports/{report_id}/run and related run endpoints.

404 — Report not found

The report_id does not match any registered report slug.

json
{
  "error": "report_not_found",
  "report_id": "sales.nonexistent_report",
  "message": "No report registered for 'sales.nonexistent_report'."
}

422 — Parameter validation failed

The request body does not satisfy the report's parameter_schema. The errors map keys correspond to parameter field names.

json
{
  "error": "report_param_validation_failed",
  "report_id": "sales.department_performance_by_store",
  "errors": {
    "from": ["The from field must be a valid date in Y-m-d format."],
    "dimension": ["The selected dimension is invalid."]
  }
}

422 — Report execution failed

The report ran but produced no result due to a non-recoverable runtime error. params_echo reflects the parameters that were submitted.

json
{
  "error": "report_failed",
  "report_id": "sales.department_performance_by_store",
  "message": "Report execution failed.",
  "params_echo": {
    "from": "2026-01-01",
    "to": "2026-01-31"
  }
}

CommerceStream Query Errors ​

Endpoints backed by the CommerceStream materialization (e.g. HQ timeseries and some reports) return this when the materialization query fails. The HTTP status is 422 when the upstream returned a 4xx, otherwise 502.

json
{
  "error": "cs_query_failed",
  "cs_status": 401,
  "message": "CS materialization query failed: HTTP 401 Unauthorized",
  "cs_body": "..."
}

Fan-Out Errors ​

Returned by the multi-store fan-out endpoints (/v1/fanout/...). A failed preview validation is not an error envelope — it is reported via the dispatch status (preview_failed) in a 200 response; see Fan-out.

404 — Unknown operation type

json
{
  "error": "fanout_operation_not_found",
  "operation_type": "not_a_real_operation",
  "message": "No fan-out operation registered for 'not_a_real_operation'."
}

422 — Payload validation failed

The payload does not satisfy the operation's schema. errors keys are payload field names.

json
{
  "error": "fanout_payload_validation_failed",
  "operation_type": "hostcom_batch",
  "errors": {
    "file_id": ["The file_id field is required."]
  }
}

422 — Store out of scope

One or more requested store_org_ids fall outside the caller's accessible scope. Fan-out writes are rejected (not silently narrowed). offending_stores lists the out-of-scope stores.

json
{
  "error": "fanout_store_out_of_scope",
  "operation_type": "hostcom_batch",
  "offending_stores": ["org_00000z9Y8x7W6v5"],
  "message": "One or more stores are outside the caller's scope."
}

409 — Dispatch not previewed

Returned when committing a dispatch that is not in a committable state (e.g. its preview failed or it was already committed). status is the dispatch's current status.

json
{
  "error": "fanout_not_previewed",
  "dispatch_id": "01J9XR4K7P8VN2YQ6ZB3TGD0WC",
  "status": "preview_failed",
  "message": "Dispatch is not in a committable state."
}

Hostcom Authoring Errors ​

These errors are returned by the hostcom file authoring endpoint (POST /v1/hostcom/files/author).

422 — Record validation failed

A record in the submitted hostcom payload failed field-level validation. row_index is zero-based. The errors map keys are the snake_case row field names within the failing record.

json
{
  "error": "hostcom_record_validation_failed",
  "record_type": "ProdRetail",
  "row_index": 0,
  "errors": {
    "retail_price": ["The retail_price field must match the pattern xxxxx.xx."],
    "product_code": ["The product_code field is required."]
  },
  "message": "Row 0 of ProdRetail failed validation."
}

422 — Unknown record type

The hostcom payload contains a record type that RORCex does not recognise. supported_types lists the valid record types.

json
{
  "error": "hostcom_unknown_record_type",
  "record_type": "NotARealRecord",
  "supported_types": ["ProdRetail", "ItemDeal", "Department", "ProdMaint", "Vendor", "VendorItem", "..."],
  "message": "Unknown record type 'NotARealRecord'."
}

422 — Unorderable record

The record type is known but the (record_type, action_code) pair cannot be ordered into the hostcom file (e.g. an unsupported action for that type).

json
{
  "error": "hostcom_unorderable_record",
  "record_type": "ProdNonRtl",
  "action_code": "A",
  "message": "Record type 'ProdNonRtl' does not support action 'A'."
}

ShopHero CommerceCore Platform