Error Model

Scope

Every Open Platform endpoint under /api/v1/open/ follows the same error envelope.

Standard Error Envelope

{
  "code": "VALIDATION_FAILED",
  "message": "invalid request payload",
  "request_id": "req-123"
}
  • code — Stable error code (string or numeric, see tables below).
  • message — Short caller-facing description.
  • request_id — Platform-issued trace ID for this call. Include it when contacting support.

Business Error Codes

codeHTTPDescription
INVALID_REQUEST_BODY400JSON request body cannot be parsed.
VALIDATION_FAILED400Required field missing, invalid type, non-object JSON payload, or out-of-range value.
IDEMPOTENCY_CONFLICT409The idempotency_key was reused with a different request body.
COMMAND_NOT_FOUND404command_id does not exist.
DEVICE_REQUEST_NOT_FOUND404request_id does not exist.
UNSUPPORTED_VENDOR400Vendor is not registered for 001 command acceptance.
UNSUPPORTED_COMMAND400Command type is unsupported or outside trusted capability scope for 001 command acceptance.
OBJECT_POLICY_DENIED403Object presign request does not satisfy tenant resource policy.
OBJECT_SIGNING_FAILED500Object storage URL signing failed.
CALLBACK_NOT_FOUND404Callback endpoint or subscription does not exist.
NATS_PRINCIPAL_CONFLICT409NATS principal already exists or conflicts with an active mapping.
NATS_SUBJECT_POLICY_INVALID400NATS subject is not tenant-prefixed or violates subject policy.
INTERNAL_ERROR500Platform internal error — include the request_id when contacting support.

Authentication & Access Control Error Codes

Authentication failures also use the standard envelope.
codeHTTPDescription
UNAUTHORIZED401Unauthenticated: missing API ID, timestamp, nonce, signature, or usable credential.
SIGNATURE_INVALID401Signature mismatch. Likely an API Key mismatch, malformed canonical string, or proxy-mutated body.
TIMESTAMP_EXPIRED401X-Api-Timestamp is outside the allowed skew window.
NONCE_REPLAYED401Nonce was reused within the replay window.
FORBIDDEN403Current API client lacks tenant-domain authorization.
TENANT_NOT_FOUND401No active tenant can be resolved, or the tenant is disabled/deleted.
TENANT_BINDING_INVALID403API client is not validly bound to the tenant.

Resolution Guide

  • INVALID_REQUEST_BODY / VALIDATION_FAILED / IDEMPOTENCY_CONFLICT — Fix the request and retry.
  • *_NOT_FOUND — Check the ID spelling and that the resource belongs to the current API client.
  • FORBIDDEN — Have the platform admin verify the API key’s tenant-domain scope grants.
  • INTERNAL_ERROR — Always escalate with request_id; do not retry blindly.

Examples

Business error:
{
  "code": "UNSUPPORTED_VENDOR",
  "message": "vendor is not supported",
  "request_id": "req-unsupported"
}
Authentication error:
{
  "code": "SIGNATURE_INVALID",
  "message": "invalid signature",
  "request_id": "req-signature"
}