Troubleshooting
Common errors and how to fix them
AUTH_MISSING_KEY
Fix: Confirm the vault credential referenced by
credentialID didn't resolve to a usable API key — the node checks this before any
HTTP request is made.
Fix: Confirm the vault credential referenced by
credentialID
exists and holds a valid Ondo API key — see Configuration.
AUTH_UNAUTHORIZED (401) / AUTH_FORBIDDEN (403)
401 means the API key itself is invalid or expired. 403 means the key is valid but lacks permission for the requested operation — commonly a read-only key calling
Fix: Rotate/verify the key for 401; request the correct scope (trading/attestation) for 403.
401 means the API key itself is invalid or expired. 403 means the key is valid but lacks permission for the requested operation — commonly a read-only key calling
limits.getTradingLimits or an attestations.* operation.
Fix: Rotate/verify the key for 401; request the correct scope (trading/attestation) for 403.
VAL_MISSING_SYMBOL / VAL_MISSING_CHAINID / other VAL_MISSING_* codes
A required operation field was empty. Every operation's fields table (see the resource pages) lists which are required.
Fix: Supply the missing field. These are caught before any HTTP call, so no API quota is spent on the failed attempt.
A required operation field was empty. Every operation's fields table (see the resource pages) lists which are required.
Fix: Supply the missing field. These are caught before any HTTP call, so no API quota is spent on the failed attempt.
VAL_MISSING_AMOUNT / VAL_BOTH_AMOUNTS
Attestation operations require exactly one of
Fix: See Attestation Operations.
Attestation operations require exactly one of
tokenAmount or
notionalValue — never both, never neither.
Fix: See Attestation Operations.
MARKET_CLOSED (status: "closed_market")
Returned by
Fix: Check getMarketStatus's
Returned by
attestations.createAttestation, attestations.createAttestationQuote,
and limits.getTradingLimits when the relevant market isn't open. This is a distinct,
expected outcome — not a generic error.
Fix: Check getMarketStatus's
isOpen/offhours.isOpen first, or branch your workflow on this specific status value.
RESOURCE_NOT_FOUND on getLatestDividend
This operation is keyed by the underlying stock ticker (e.g.
Fix: Pass the stock ticker — if you only have the GM symbol, resolve it via getMarket's
This operation is keyed by the underlying stock ticker (e.g.
AAPL),
not the GM symbol (AAPLon).
Fix: Pass the stock ticker — if you only have the GM symbol, resolve it via getMarket's
underlyingTicker field first.
RATE_LIMIT_EXCEEDED (HTTP 429)
The node automatically retries up to 3 times with exponential backoff (1s, 2s, 4s) before surfacing this error, so seeing it means the API is still rate-limiting after those retries.
Fix: Reduce call frequency, especially on
The node automatically retries up to 3 times with exponential backoff (1s, 2s, 4s) before surfacing this error, so seeing it means the API is still rate-limiting after those retries.
Fix: Reduce call frequency, especially on
assets.getAllPrices
and other "all" operations; cache slow-changing data like
getAllAddresses / getAllMetadata
client-side.
Unexpectedly large response from chains.getBalances
Omitting both
Fix: Always supply at least one filter in production workflows — see Chain Operations.
Omitting both
userAddress and tokenAddress returns balances for every
user and token on the chain.
Fix: Always supply at least one filter in production workflows — see Chain Operations.
PARSE_JSON_ERROR / PARSE_ERROR
The API returned a response body that didn't match the expected schema for that operation.
Fix: Check the raw response (surfaced internally for debugging) against the operation's documented shape — this can indicate an upstream API change.
The API returned a response body that didn't match the expected schema for that operation.
Fix: Check the raw response (surfaced internally for debugging) against the operation's documented shape — this can indicate an upstream API change.
SERVER_ERROR (5xx) / SERVICE_UNAVAILABLE
Ondo's API itself is failing or temporarily unavailable.
Fix: Retry with backoff at the workflow level; this is not something the node's built-in retry (which only targets 429) will resolve automatically.
Ondo's API itself is failing or temporarily unavailable.
Fix: Retry with backoff at the workflow level; this is not something the node's built-in retry (which only targets 429) will resolve automatically.