Skip to main content
Use this flow after your backend has submitted a Delora transaction and received its source transaction hash. The Transaction Tracking API is asynchronous: it is a scanner read model, not an on-demand chain or bridge-provider query.
All tracking requests require x-api-key and must be made from your backend. The key returns records only for its associated integrator. Authorize your own end users before returning tracking data to them.
  1. Submit the transaction and persist the source transaction hash with your own order or user record.
  2. Wait for the source transaction to be confirmed.
  3. Call GET /v1/transactions/{txHash}/status.
  4. A known, just-submitted hash can initially return 404 while analytics ingestion catches up. Retry it with bounded backoff.
  5. Once a record exists, poll the lightweight status endpoint while the status is non-terminal. Fetch the full record only when you need token, fee, chain, or diagnostic fields.
  6. Stop automatic polling for terminal statuses and persist the result in your own system.
There are no webhooks. See Transaction Tracking API for typical worker refresh behavior and data-quality constraints.

Polling cadence

This is a client-side recommendation, not an API SLA:
  • After source confirmation, retry an initial 404 after 30 seconds, then use exponential backoff up to 60 seconds between attempts.
  • For bridge_pending, refund_pending, or unknown, poll no more often than once per 60 seconds. Increase the interval after sustained waiting rather than polling indefinitely.
  • Set an application-level timeout and reconciliation/support path appropriate to your product. A pending bridge can take longer than a normal API request.
The scanner ingests analytics approximately every minute and refreshes eligible bridge statuses about every two minutes. Polling faster than the read model updates usually returns the same stored state.

Server-side polling example

Keep DELORA_API_KEY in your server environment; do not expose it in browser code.
TypeScript

How to handle responses

substatus and rawBridgeStatus are not stable client contracts. Use the top-level status for business logic. For status meanings and terminal-state caveats, see Status lifecycle.

Full tracking record example

Use GET /v1/transactions/{txHash} when the UI or reconciliation process needs the complete record. This sanitized example shows a provider-specific destination chain ID (57) normalized to Arbitrum (42161).
protocolRawDestChainId is diagnostic only. Use canonicalDestChainId and the list endpoint’s destChainId filter for application logic.

Lightweight status response example

Record identity

Use id as the stable tracking-record identifier. transactionId can be null, and a single source transaction can contain more than one tracked event/log. Do not treat a source transaction hash as a globally unique tracking-record ID.