Errors

Errors

All errors are returned in the standard envelope:

{
  "error": {
    "code": "RESOURCE_NOT_FOUND",
    "message": "Partner not found",
    "details": { "uuid": "…" },
    "requestId": "req_01H…"
  }
}

HTTP status mapping

StatusMeaning
400Validation or business-rule failure (see code)
401Missing/invalid credentials
403Authenticated but not allowed for this resource (RBAC)
404Resource does not exist or is not visible to you
409Conflict (duplicate, concurrent modification)
422Semantically invalid request (e.g. wrong state machine)
429Rate limit exceeded — see Rate limits
5xxServer-side error — safe to retry idempotent operations

Code catalogue (excerpt)

Nova ships a stable code list — only additions are made between minor
versions. Removed or renamed codes are announced in the
Changelog at least 90 days in advance.

CodeTypical statusMeaning
VALIDATION_FAILED400Request body failed schema validation
BUSINESS_RULE_VIOLATION400Request was schema-valid but rejected by a rule
UNAUTHORIZED401Credential missing or invalid
TOKEN_EXPIRED401JWT expired — refresh and retry
FORBIDDEN403Caller lacks permission
RESOURCE_NOT_FOUND404Resource does not exist or is not visible
DUPLICATE_RESOURCE409Unique constraint violated
CONCURRENT_MODIFICATION409Optimistic-lock conflict, refetch and retry
INVALID_STATE_TRANSITION422Requested transition not allowed from current state
RATE_LIMITED429Quota exceeded
UPSTREAM_PROVIDER_ERROR502/504A third-party (Nexus, payment, KYC) call failed
INTERNAL_ERROR500Unexpected — quote the requestId to support

Handling guidance

  • Always read error.code. Never branch on error.message text.
  • For 5xx and UPSTREAM_PROVIDER_ERROR, retry idempotent calls with
    exponential backoff (start 500 ms, cap at 30 s, ≤ 5 attempts).
  • For 429, honour the Retry-After header if present.
  • For CONCURRENT_MODIFICATION, refetch the resource before retrying.
  • Log requestId on every failure — it is the fastest way for support to
    pull the matching server log.