Skip to content

Error Codes — Production Taxonomy

UNSTABLE TARGET — Last verified: 2026-08-25 (26/26 checks passed). Jio AI Cloud has no public API. Endpoints change without notice and can break at any time. Features may stop working at any moment — check KNOWN_ISSUES.md for current status.

All codes below were observed live (2026-08-25) or present in verified captures. The SDK maps HTTP status to typed exceptions and, for batch operations, extracts the per-object errorCode from unprocessed[].


HTTP-level mapping

HTTP Exception Trigger Handling
400 InvalidRequestError bad params/headers/body surfaced; .error_code carries server code
401 AuthenticationError expired/invalid session token re-extract credentials
403 ForbiddenError operation not permitted check account permissions
404 ObjectNotFoundError unknown object/board key verify key via listing
429 RateLimitError throttled auto-retried w/ exponential backoff
5xx ServerError upstream fault auto-retried
net NetworkError DNS/TLS/reset/timeout auto-retried

Retry policy: max_retries=3, backoff 1.5 × 2^attempt seconds (configurable in JioCloudClient.__init__). Non-retryable: 400/401/403/404.


Server error codes (verified)

Code Message (abridged) Cause → Fix
NMSOM0001 "Accept language is null or empty." Missing Accept-Language header → SDK always sends it
NMSOM0003 "Content type is null or empty." GET without Content-Type → SDK always sends it
NMSOM0021 "Source name is null or empty." Batch op (RENAME/MOVE/…) without sourceName in object echo → SDK resolves full state first
NMSOM0129 "Kindly provide valid value for folder(W) or file(F) Search." type query param ≠ f/w → only those values exist
NMSOM0135 "Request is not proper" Malformed batch op shape (e.g. unknown operation name)
TEJVF0001 "constraint validation on objectName for value null" Batch op missing objectName → full object echo required
TEJRF0400 "Missing or Invalid value of X-Offset" / "nextPageDate must be a valid time…" Contacts endpoints require X-Offset header AND nextPageDate param (yyyy-MM-dd HH:mm:ss.SSSSSS) → handled by get_contacts()
BRSOM0036 "Content-Type header is not available in the request." Boards service variant of NMSOM0003

Silent rejection pattern (important)

Batch mutations return HTTP 200 even when individual ops fail; failures appear inside:

{ "objects": [],   // succeeded ops
  "unprocessed": [ { "operation": "TRASH",
                     "correlationId": "…",
                     "object": { "objectKey": "…",
                                 "errorMessage": "…",   // may be absent!
                                 "errorCode": "…" } } ] }

Note: some rejections carry no error message at all — just the bare object key. The SDK treats any entry in unprocessed[] as an InvalidRequestError and never reports silent failure as success. Historical example: the legacy PUT /nms/metadata/delete endpoint began rejecting every key this way after 2026-08-24 (see docs/KNOWN_ISSUES.md ISSUE-001); the fix routes deletes through the TRASH batch op with status:"T".


Client-side exceptions

Defined in jiocloud.exceptions:

JioCloudError                      # base
├── AuthenticationError            # 401
├── ForbiddenError                 # 403
├── ObjectNotFoundError            # 404 (+ local key resolution misses)
├── InvalidRequestError            # 400 + batch unprocessed[] errors
├── QuotaExceededError             # storage full (reserved)
├── RateLimitError                 # 429
├── ConflictError                  # 409
├── PayloadTooLargeError           # 413
├── ServerError                    # 5xx
└── NetworkError                   # transport failures

Also raised locally: FileExistsError from download_file() when the destination exists and overwrite=False.