Portal Community

Shared Input Pattern

Every operation on this node takes the same three top-level config keys, plus its own operation-specific fields:

KeyRequiredDescription
resource✓ YesOne of assets, attestations, chains, limits, status, tickers.
operation✓ YesThe camelCase operation within that resource, e.g. getPrice.
credentialID✓ YesVault reference resolved to a Bearer token for every call — see Configuration.

Everything else is specific to the chosen resource + operation pair — see that resource's page for the exact field list.

Standard Output Envelope

A successful call always returns the same wrapper, with the operation-specific fields nested under result:

{
  "status": "success",
  "result": { /* operation-specific fields — see that operation's page */ },
  "timestamp": "2026-07-29T14:00:00Z"
}

A failed call routes to the node's error output port with this shape:

{
  "status": "error",
  "errorCode": "VAL_MISSING_SYMBOL",
  "resource": "assets",
  "operation": "getPrice",
  "message": "Symbol is required (e.g., 'AAPLon')"
}

The "Closed Market" Result

Three operations — attestations.createAttestation, attestations.createAttestationQuote, and limits.getTradingLimits — have a third outcome besides plain success/error: status: "closed_market" with error code MARKET_CLOSED, returned when the relevant market isn't open for that action. Treat this as a distinct, expected branch in your workflow rather than a generic failure.

How Errors Surface

SituationWhat happens
Missing/invalid credentialID Fails fast with AUTH_MISSING_KEY before any HTTP call is made.
Missing required operation field (e.g. symbol) Fails fast with a VAL_MISSING_* code before any HTTP call is made — see each operation's fields table.
Ondo API returns 4xx/5xx Mapped to a semantic error code — see the table on Configuration.
Ondo API rate limiting (429) Retried automatically (3 attempts, exponential backoff) before surfacing RATE_LIMIT_EXCEEDED — see Troubleshooting.
Idempotent reads, non-idempotent writes: Every operation under assets, chains, status, and tickers is a read — safe to call repeatedly. attestations.createAttestation mints a new signed, time-limited attestation on every call, so calling it twice produces two distinct attestations, not a cached repeat of the first.