Skip to main content
Use this page when parsing workspace records from our Platform API. For public blockchain data, see Data API responses. Authentication belongs in the shared quickstart; failures and retries belong in Errors and rate limits.

Pagination

Platform lists have seven contracts. All operations in this table are GET requests. For cursor lists, reuse meta.next_cursor with the same filters and stop at null. Treat it as opaque. Do not assume every list returns previous_cursor, total_count, or page_number. For investigations, increase offset by the number of returned items. Stop at an empty page or when the next offset reaches total.

Transaction identity and amounts

On persisted transaction reads, id and transaction_id identify the stored transaction row. provider_transaction_id is the provider’s event identifier; a public hash is a separate, optional field. On live adapter responses, id carries the provider-native identifier instead. See Workspace data model before joining records. Read kind before interpreting the event payload: TRANSFER uses transfers, while TRADE uses trade. A transfer can have no parsed legs, so an empty transfers array does not establish that no event occurred. Keep decimal quantities as strings until you use decimal arithmetic. Transfer-leg amount and usd_amount are unsigned magnitudes; transfers[].direction supplies the account-relative direction (IN, OUT, or SELF). Custom-ingestion movement quantity is also unsigned, with in or out in its separate direction; snapshot quantities may be signed. The event’s top-level direction is workspace-relative (in, out, or internal), based on the first transfer leg and all saved workspace accounts. A group filter does not redefine the workspace boundary. It is null for trades or transfers without parsed legs. Do not substitute it for the account-relative direction on each leg.

Missing, hidden, and stale data

  • A balance’s usd: null means no USD price is available. It is distinct from the decimal string "0".
  • hidden_count counts holdings excluded by workspace token visibility settings. An empty visible balances array can coexist with hidden holdings; hidden_usd is only their aggregate known USD value.
  • balances_updated_at tracks a successful balance read. last_balance_refresh_at tracks the latest attempt, including failure. Read it with last_balance_refresh_status and last_balance_refresh_reason.
  • Transaction freshness is separate: last_synced_at is the last successful transaction sync, transactions_history_from marks its history coverage floor, and sync_status describes the latest sync run. A failed sync does not advance last_synced_at.
These account fields describe persisted accounts. Connection previews can omit fields for records that have not been imported. A failed preview balance lookup is not evidence of a zero balance.

Reconciliation outcomes

GET /v2/reconciliation/roll-forward separates account eligibility from quantity tie-out: An ok account with no lines can be tied. Check the expected account, asset, and nonempty quantities before treating a result as evidence of a reconciliation. A tie-out compares observed quantities; it does not prove complete transaction ingestion. An incomplete sibling scan can leave account status: ok while the account rollup is not_evaluated, so inspect unreconcilable_reason as well.

Workflow execution, sync, and delivery

Workflow runs expose four status fields: Execution success alone does not establish delivery success. Read these fields on GET /v2/workflows/runs; use the API reference for run details and output contracts.

Case status and resolution

Case status is open, in_review, or resolved. resolution is separate and nullable, with dismissed, escalated, paid, and explained as its non-null values. available_actions describes actions for the case’s source and current state; write permissions still apply. Follow Triage a manual case for the transition sequence. A manual-case example does not establish the same actions for screening or redemption cases.
Last modified on November 10, 2026