Skip to content
Docs

Norynta public docs

Norynta Error Codes

Public error taxonomy for retry behavior, alerting, and operator remediation.

Error Codes

Purpose

This page defines the public error taxonomy Norynta clients should use for retry behavior, alerting, and operator remediation.

The live taxonomy is also exposed through:

  • GET /api/bot/config -> execution.errorTaxonomy
  • POST /api/v1/developer/explain-error
  • GET /api/v1/status

Error Shape

Most API errors return a JSON object with at least an error string. Some routes also include a machine-readable code, requestId, or remediation metadata.

Representative shape:

{
  "error": "Rate limited",
  "code": "RATE_LIMITED",
  "requestId": "req_..."
}

When code is absent, clients should classify by HTTP status and exact endpoint context, then log the raw body for diagnostics.

Global Codes

CodeHTTPRetryableMeaningClient behavior
UNAUTHORIZED401noMissing or invalid credentialsRefresh or replace credentials
FORBIDDEN403noScope, policy, country, or compliance blockStop writes and inspect access state
NOT_FOUND404noResource or endpoint not foundCheck identifiers and API version
RATE_LIMITED429yesQuota exceededBack off with jitter and preserve idempotency identity
TRADING_PAUSED503yesTrading temporarily pausedStop writes, continue read-only reconciliation
LIVE_TRADING_DISABLED503yesLive trading disabled for environment or control stateStop writes and monitor discovery metadata
INTERNAL_ERROR500yesUnexpected server failureRetry with capped backoff when safe

Validation And Payload

CodeHTTPRetryableMeaning
INVALID_JSON400noRequest body is not valid JSON
INVALID_PAYLOAD400noRequired fields are missing or malformed
MISSING_IDEMPOTENCY_KEY400noMutating v1 request did not include Idempotency-Key
IDEMPOTENT_REPLAY200/409noSame logical write was replayed
ACCEPTED_UNKNOWN_CONFIRMATION202/504conditionalWrite may have been accepted but confirmation is unknown

For IDEMPOTENT_REPLAY, treat exact replay as recovery and reconcile by clientOrderId. Do not create a new logical order after an uncertain write.

Trading And CLOB

CodeHTTPRetryableMeaningClient behavior
CLOB_INVALID_ORDER400noOrder payload fails CLOB validationFix payload before retry
CLOB_INVALID_SIGNATURE400/401noWallet signature does not match payloadRebuild and re-sign
CLOB_MISSING_SIGNATURE400/401noSigned write is missing wallet authorizationAdd wallet signature headers/body
CLOB_EXPIRED400noSignature or order freshness window expiredRequest a fresh signature
INSUFFICIENT_BALANCE400/402noNot enough collateral for intended orderReduce size or add funds
STALE_ORDERBOOK409yesPreflight data is staleRefresh snapshot/orderbook and rerun checks
MARKET_CLOSED409noMarket is closed or resolvedStop writes for that market
MARKET_PAUSED409/503yesMarket writes are pausedStop writes and monitor market state
SIMULATION_DISABLED410noLegacy simulation endpoint is disabledUse /api/v1/orders/validate or /api/v1/orders/estimate-impact

Country And Access Controls

CodeHTTPRetryableMeaning
GEO_BLOCKED403noJurisdiction is blocked
GEO_UNKNOWN403noCountry could not be determined for real-money behavior
REAL_MONEY_COUNTRY_NOT_ALLOWED403noCountry is not allowed for real-money writes
REAL_MONEY_COUNTRY_NOT_APPROVED403noCountry requires additional approval

Read-only discovery may remain available when real-money writes are blocked. Do not retry with proxy or VPN country spoofing.

Streaming

ConditionRetryableClient behavior
Stream disconnectyesReconnect and fetch a fresh snapshot before trusting new deltas
Heartbeat timeoutyesTreat as disconnect and reseed
Sequence gapyesPause strategy writes, request replay, then refresh snapshot if replay is unavailable
Duplicate sequencenoIgnore duplicate for the same channel key

The stream contract is available at GET /api/v1/streams/manifest.

Explain An Error

curl -sS -X POST "$NORYNTA_BASE_URL/api/v1/developer/explain-error" \
  -H 'content-type: application/json' \
  -d '{"code":"RATE_LIMITED","requestId":"req_example"}' | jq

The response maps the code to retryability and remediation guidance.

Client Policy

  • Retry 429, network timeouts, and selected 5xx with capped exponential backoff and full jitter.
  • Reuse the same clientOrderId and Idempotency-Key across write retries.
  • Do not retry validation, payload, signature, country, or compliance failures unchanged.
  • Reconcile before replacing an order after an unknown write outcome.
  • Log request IDs, idempotency key hashes, and stable order IDs.

Related Docs

  • docs/public/AUTH_AND_RATE_LIMITS.md
  • docs/public/TRADING_INTEGRATION_WORKFLOW.md
  • docs/public/STREAMING_AND_RECONCILIATION.md
  • docs/public/API_REFERENCE.md