For the complete documentation index, see llms.txt. This page is also available as Markdown.

API

Complete reference for the ZeroDelta read API: quoting, transaction tracking, and chain/token/route/solver/protocol discovery. For an integration walkthrough see the Integration Guide.

Conventions

  • Auth. Most endpoints require an API key in the x-apikey request header (a Authorization: Bearer <key> form is also accepted). The health probes are public. The base URL and your API key are provided during onboarding (separate dev/staging/production hosts); they are not published here.

  • Versioning. Paths are namespaced under /api/v1/. Changes within v1 are additive; breaking changes ship under a new version.

  • Roles. Keys are viewer (all /api/v1/* read and quote endpoints) or admin (viewer access plus the /api/v1/admin/* management surface, which is not documented here).

  • Envelope. Every /api/v1/* response is wrapped in a standard envelope: the resource lives under data, errors under error, and list responses carry meta and paging. The examples below show the data payload; assume the envelope around it.

  • Amounts. Token amounts are strings in the token's smallest unit (e.g. "1000000" = 1 USDC at 6 decimals). Chain IDs are serialized as strings in responses. Native fees are wei strings.

  • Pagination. List endpoints accept limit (max 500; default 50 for transactions, 100 elsewhere) and offset (default 0).

Endpoints at a glance

Method
Path
Purpose

POST

/api/v1/quote

Cross-chain swap quote

GET

/api/v1/transactions

List tracked transactions

GET

/api/v1/transactions/{txHash}

One transaction, with steps

GET

/api/v1/transactions/{txHash}/orders

Batch orders in single transaction

GET

/api/v1/transactions/stats

Aggregated transaction statistics

GET

/api/v1/chains

List supported chains

GET

/api/v1/chains/{chainId}

One chain

GET

/api/v1/tokens

List supported tokens

GET

/api/v1/tokens/{tokenId}

One token by ID

GET

/api/v1/tokens/lookup

One token by address + chain

GET

/api/v1/tokens/configs

Token bridge configuration documents

GET

/api/v1/routes

List supported routes

GET

/api/v1/routes/{routeId}

One route

GET

/api/v1/protocols

List supported GMP protocols

GET

/api/v1/solvers

Solvers grouped by chain

GET

/api/v1/solvers/{chainId}

Solvers on one chain

GET

/health

Liveness probe (no auth)

GET

/health/ready

Readiness probe (no auth)


Quotes

POST /api/v1/quote

Wallet screening. ZeroDelta screens wallets at two points. (1) At quote time — when you supply owner (and optionally destinationReceiver), both are screened by the compliance engine before a quote is returned; a blocked pair receives no quote or deposit instructions (422 COMPLIANCE_BLOCKED). (2) At execution time — the solver re-screens the pair through its pre-fill compliance gate before filling the order, so a pair that becomes blocked after quoting is still stopped before settlement. When owner is omitted the quote returns complianceStatus: UNSCREENED and the execution-time gate remains the enforcement point.

Calculates a firm cross-chain swap quote between two supported tokens. The quote is computed in-process: the engine races every configured liquidity provider in parallel, picks the best output, adds LayerZero/CCTP fees and a bridge-time estimate, and returns a prepared orderRequest struct ready for submitOrder. The response carries a masked provider label (the specific market maker is not disclosed). fromToken and toToken must differ — same-token bridge-only quotes are not supported. This endpoint is per-key rate limited; max request body 1 MB.

Request body (QuoteRequest):

Field
Required
Description

fromChainId

yes

Source chain ID (string or number).

toChainId

yes

Destination chain ID.

fromToken

yes

Source token symbol or contract address.

toToken

yes

Destination token symbol or contract address. Must differ from fromToken.

fromAmount

yes

Amount to sell, in the source token's smallest unit.

owner

no

Order owner address. When provided, the response also populates escrowAddress and executionChainId.

destinationReceiver

no

Recipient wallet; screened alongside owner when present.

The request does not accept destinationReceiver; the returned orderRequest.destinationReceiver is null and is filled client-side before submitting (see the Integration Guide).

Response (200, data is a Quote; illustrative values):

When owner is supplied in the request, the response additionally includes escrowAddress, executionChainId, and executionEscrowAddress.

Fee and amount semantics:

  • toAmount is the on-chain order.askTokenAmount — the swap output threshold the solver must meet to fill the order, used to construct orderRequest.askTokenAmount. It is not what the destination receiver gets when the outbound bridge charges a protocol fee — see finalAmount.

  • finalAmount is what the destination receiver actually gets: toAmount minus the outbound bridge protocol fee (CCTP fast-track maxFee). It equals toAmount for LayerZero outbound and CCTP slow-track outbound, and is otherwise slightly lower. finalAmount <= toAmount always; always populated.

  • feeBps is the route protocol fee in basis points (CCTP fast-track fee for Circle lanes; 0 for LayerZero). Metadata only — it is not subtracted from toAmount. The actual fee shows up as the gap between toAmount and finalAmount.

  • estimatedDuration is the end-to-end transfer time in seconds, composed of inbound bridge finality + execution-chain swap window + outbound bridge finality, plus a per-leg fill-latency buffer that covers tx inclusion on each hop. CCTP legs use fast vs standard finality depending on the deployed adapter's slow-track setting.

  • lifespanSeconds is how long the quote stays valid, in seconds, derived from the winning provider's signed expiry (expiry minus generation time, floored at 0). It is 0 when the provider does not sign an expiry or the quote has already lapsed. The on-chain fill threshold itself does not expire — this is the provider's price-validity window.

  • swapTimeSeconds is the estimated time for the on-chain swap to settle on the execution chain. The swap executes in a single transaction, so this is one block of the execution chain (its average block time, which differs per chain); 0 when block-time data is unavailable.

  • gasCostSource / gasCostDest are LayerZero native messaging fees in wei (inbound and outbound respectively), and are 0 for CCTP (USDC). Pass gasCostSource as msg.value on submitOrder.

  • swapCost is a gas hint from the winning liquidity provider (decimal string; empty when the provider does not return one).

  • provider is a masked liquidity-provider label, always "zerodelta" on a successful quote — the specific market maker the engine routes through is not disclosed. Set on every successful quote.

Errors:

Status

error.code

Cause

400

BAD_REQUEST

Malformed body, missing required field, non-positive fromAmount, or fromToken equal to toToken.

401

UNAUTHORIZED

Missing or invalid API key.

422

BELOW_MIN_TRADE_SIZE

Bid amount is under the per-pair minimum (about $0.02 globally, about $0.11 for USDe pairs). error.fieldErrors carries a fromAmount entry with the exact minimum.

422

QUOTE_UNAVAILABLE

No registered route for the requested (token, source chain, destination chain) — e.g. the token is not enabled on that chain.

422

VALIDATION_ERROR

Semantic validation failure, with per-field details.

422

COMPLIANCE_BLOCKED

Supplied owner/destinationReceiver pair failed screening; no quote or deposit instructions returned. The error reasons[] array is populated per the disclosure policy.

429

RATE_LIMITED

Rate limit exceeded; a Retry-After header (seconds) is returned.

502

UPSTREAM_ERROR

The quoting engine could not produce a quote (all liquidity providers failed, or bridge-fee estimation failed). Transient; retry with backoff.

503

SERVICE_UNAVAILABLE

Compliance engine unreachable while screening — the quote gate fails closed (only when owner is supplied and the gate is configured).


Transactions

GET /api/v1/transactions

Lists tracked cross-chain transactions, most recent first. Returns an array of TrackedTransaction (without the per-transaction steps array — fetch a single transaction for steps).

Query parameters:

Parameter
Description

status

Filter by TrackingStatus.

protocol

Filter by GMP protocol (e.g. layerzero).

chainId

Matches source or destination chain.

fromChainId

Filter by source chain.

toChainId

Filter by destination chain.

txHash

Filter by transaction hash (list filter, not the path lookup).

wallet

Filter by wallet address.

createdAfter / createdBefore

RFC 3339 time-window bounds.

sortBy

created_at (default) or updated_at.

sortOrder

desc (default) or asc.

limit / offset

Pagination (default limit 50, max 500).

Errors: 400 BAD_REQUEST, 401 UNAUTHORIZED.

GET /api/v1/transactions/{txHash}

Returns one TrackedTransaction keyed by source transaction hash, including the steps array. This is the endpoint the status poller calls (see the Integration Guide). Before the source tx is mined and indexed, this returns 404 — treat that as "not indexed yet" and keep polling.

Path parameter: txHash — the source-chain submit transaction hash.

Errors: 401 UNAUTHORIZED, 404 NOT_FOUND.

GET /api/v1/transactions/{txHash}/orders

Returns all orders sharing a submit transaction hash, most-recent first. A single submit tx can create more than one order (a batch); the single-object GET /api/v1/transactions/{txHash} collapses to the most-recent, while this returns the full set — each enriched identically to the single GET. Requires an API key.

Path parameter: txHash — the source-chain submit transaction hash.

Response (200): data = array of TrackedTransaction (each with its steps).

Errors: 401 UNAUTHORIZED, 404 NOT_FOUND.

GET /api/v1/transactions/stats

Returns aggregated statistics over the transactions matching the filters. The data payload is a TransactionStats object.

Query parameters: status, protocol, chainId (matches source or destination chain), fromChainId, toChainId, wallet, createdAfter, createdBefore (same semantics as the list endpoint).

Errors: 401 UNAUTHORIZED.


Chains

GET /api/v1/chains

Lists supported chains. Returns an array of Chain. Each chain is enriched at response time with its contract addresses and execution-chain flag.

Query parameters: enabledOnly (string; set to false to include disabled chains, default true), limit, offset.

Errors: 401 UNAUTHORIZED.

GET /api/v1/chains/{chainId}

Returns one Chain.

Path parameter: chainId (integer).

Errors: 401 UNAUTHORIZED, 404 NOT_FOUND.


Tokens

GET /api/v1/tokens

Lists supported tokens as per-chain rows. Returns an array of Token, each enriched with bridge metadata and its enabled outbound routes. This is the canonical source for per-(chain, token) contract addresses — do not hardcode them.

Query parameters: chainId, symbol (e.g. USDC), isEnabled (string; false includes disabled tokens, default true), limit, offset.

Errors: 401 UNAUTHORIZED.

GET /api/v1/tokens/{tokenId}

Returns one Token by its ID.

Path parameter: tokenId (string).

Errors: 401 UNAUTHORIZED, 404 NOT_FOUND.

GET /api/v1/tokens/lookup

Resolves a single Token by contract address and chain.

Query parameters (both required): address, chainId.

Errors: 400 BAD_REQUEST, 401 UNAUTHORIZED, 404 NOT_FOUND.

GET /api/v1/tokens/configs

Returns the per-symbol token bridge configs (loaded from the token config directory), as an array of typed TokenConfig objects — one per token, sorted by name. contracts is keyed by chain ID. Useful for discovering bridge/standard metadata across chains in one call.

Errors: 401 UNAUTHORIZED.


Routes

GET /api/v1/routes

Lists supported routes. Returns an array of Route. A route is one enabled (fromChain, fromToken) → (toChain, toToken) lane with its bridge, fee, and duration metadata. Treat this as the source of truth for which lanes are live before building a route picker.

Query parameters:

Parameter
Description

fromChainId

Filter by source chain.

toChainId

Filter by destination chain.

token

Filter by token symbol, token name, token ID, or source/destination token address.

tokenId

Filter by token ID.

bridge

Filter by bridge provider (e.g. layerzero, Circle).

isEnabled

String; false includes disabled routes, default true.

limit / offset

Pagination.

Errors: 401 UNAUTHORIZED.

GET /api/v1/routes/{routeId}

Returns one Route.

Path parameter: routeId (string).

Errors: 401 UNAUTHORIZED, 404 NOT_FOUND.


Protocols

GET /api/v1/protocols

Lists the supported cross-chain messaging (GMP) protocols and their per-chain state. The data payload has protocols (a string array) and states (an array of ProtocolState).

Errors: 401 UNAUTHORIZED.


Solvers

A solver is a wallet authorized to fill orders on a given chain. These endpoints expose the public solver registry (read-only).

GET /api/v1/solvers

Returns active solvers grouped by chain, as an array of ChainSolvers.

Query parameter: enabledOnly (boolean; set to false to include soft-deleted rows, default true).

Errors: 401 UNAUTHORIZED.

GET /api/v1/solvers/{chainId}

Returns one ChainSolvers group for a single chain. Returns 404 for chain IDs not in the chain registry.

Path parameter: chainId (integer). Query parameter: enabledOnly (boolean, default true).

Errors: 400 BAD_REQUEST, 401 UNAUTHORIZED, 404 NOT_FOUND.


Health

These probes require no API key.

GET /health

Liveness probe. Always returns 200.

GET /health/ready

Readiness probe. Probes downstream dependencies in parallel; only the database pools are critical. Returns 503 when a critical DB check fails, otherwise 200 — with status: degraded when a non-critical dependency (solver, gmp, drpc, bebop) is down. No auth.

  • status is ok or degraded.

  • checks holds infrastructure dependencies under generic role labels (database, read_database, cache).

  • providers holds third-party / internal-service dependencies under opaque hashed keys — the specific vendor is never disclosed.

  • Each entry has status (ok | unavailable | stub | not_configured), a critical flag, and optional latencyMs / ageSeconds. Per-check error detail is intentionally omitted.

  • failures lists the masked keys of non-ok checks (omitted when empty).


Internal endpoints (not for integrators)

The following endpoints exist on the API but are not part of the integration surface and are not documented here:

  • GET /api/v1/transactions/{txHash}/gmp — on-demand GMP status enrichment, IP-whitelisted to internal services (Listener/Executor).

  • GET /metrics — Prometheus metrics, optionally IP-whitelisted.

  • POST /api/v1/admin/genesis, GET|POST|DELETE /api/v1/admin/api-keys, and all /api/v1/admin/solvers CRUD plus other /api/v1/admin/* routes — operator-only key, solver, and chain management requiring the admin role.


Models

Envelope

Every /api/v1/* response uses this wrapper. data carries the result (an object or array); error is present only on failure; meta and paging appear on list responses.

Field
Type
Description

data

object or array

The resource payload.

error.code

ErrorCode

Machine-readable error code.

error.message

string

Human-readable message.

error.fieldErrors[]

array

Per-field errors, each { field, message }.

error.reasons[]

array

Machine-readable decision reason codes, populated on COMPLIANCE_BLOCKED per the server's disclosure policy (POLICY_GUARD_REASON_DISCLOSURE).

meta.page

integer

Current page.

meta.perPage

integer

Items per page.

meta.totalCount

integer

Total matching items.

paging.self

string

URL of the current page.

paging.next

string or null

URL of the next page, or null.

paging.prev

string or null

URL of the previous page, or null.

On error, only the error object is populated:

Branch on error.code (machine-readable), not on error.message.

ErrorCode

Value
Typical status

INTERNAL_ERROR

500

BAD_REQUEST

400

NOT_FOUND

404

CONFLICT

409

VALIDATION_ERROR

422

UNAUTHORIZED

401

FORBIDDEN

403

RATE_LIMITED

429

SERVICE_UNAVAILABLE

503

QUOTE_UNAVAILABLE

422

UPSTREAM_ERROR

502

BELOW_MIN_TRADE_SIZE

422

COMPLIANCE_BLOCKED

422

TrackingStatus

Lifecycle status of a tracked cross-chain transaction. Returned as a lowercase string (not the on-chain OrderStatus enum — see the Smart Contract Reference). When polling, treat any value outside the non-terminal set as terminal so a newly added status cannot trap your loop.

Status
Terminal?
Meaning

pending

no

Submitted; awaiting arrival on the hub.

in_progress

no

Arrived on the hub; awaiting fill.

outbound_bridging

no

Filled; bridging out to the destination chain.

cancel_pending

no

User pre-cancelled; awaiting arrival to claim.

awaiting_claim

no

Arrived after a pre-cancel; user can claim funds.

delivered

yes

Success — receiver got the asset.

expired

yes

Deadline elapsed in transit (claim required).

cancelled

yes

Order cancelled; funds returned.

fill_failed

yes

Solver gave up before filling.

delivery_failed

yes

Outbound bridge permanently failed.

failed

yes

Generic unrecoverable failure.

Happy path: pending → in_progress → outbound_bridging → delivered.

QuoteRequest

Field
Type
Required
Description

fromChainId

string

yes

Source chain ID (string or number accepted).

toChainId

string

yes

Destination chain ID.

fromToken

string

yes

Source token symbol or contract address.

toToken

string

yes

Destination token symbol or address; must differ from fromToken.

fromAmount

string

yes

Amount to sell, in smallest unit.

owner

string

no

Order owner address; when set, the response includes escrowAddress and executionChainId.

Does not accept destinationReceiver.

Quote

Field
Type
Description

fromChainId

string

Source chain ID.

toChainId

string

Destination chain ID.

fromToken

string

Source token.

toToken

string

Destination token.

fromAmount

string

Amount sold, smallest unit.

toAmount

string

On-chain order.askTokenAmount — the swap output threshold the solver must meet to fill the order; used to construct orderRequest.askTokenAmount. NOT what the receiver gets when the outbound bridge charges a protocol fee — see finalAmount.

finalAmount

string

What the receiver gets: toAmount minus the outbound CCTP fast-track maxFee. <= toAmount (equal for LayerZero outbound / CCTP slow-track). Always populated.

bridge

string

Bridge provider for the route (e.g. Circle).

feeBps

integer

Route protocol fee in basis points (CCTP fast-track fee for Circle lanes; 0 for LayerZero). Metadata only — NOT subtracted from toAmount; the actual fee is the gap between toAmount and finalAmount.

estimatedDuration

integer

End-to-end transfer time in seconds: inbound bridge finality + execution-chain swap window + outbound bridge finality, plus a per-leg fill-latency buffer for tx inclusion.

lifespanSeconds

integer

Quote validity in seconds, from the winning provider's signed expiry (floored at 0). 0 when the provider does not sign an expiry or the quote has lapsed. The on-chain fill threshold itself does not expire.

swapTimeSeconds

integer

Estimated time for the on-chain swap to settle on the execution chain — one block of the execution chain (average block time, differs per chain). 0 when block-time data is unavailable.

route

Route

The route this quote priced.

gasCostSource

string

LayerZero inbound native fee in wei; 0 for CCTP. Pass as msg.value.

gasCostDest

string

LayerZero outbound native fee in wei; 0 for CCTP.

swapCost

string

Gas hint from the winning liquidity provider (decimal string; empty when not provided).

provider

string

Masked liquidity-provider label — always "zerodelta" on a successful quote; the specific market maker is not disclosed.

orderRequest

OrderRequest

Pre-built struct for submitOrder.

escrowAddress

string

Source-chain escrow address (present when owner is supplied).

executionChainId

string

Chain ID where settlement executes (present when owner is supplied).

executionEscrowAddress

string

Escrow address on the execution chain.

OrderRequest

Pre-built Solidity OrderRequest struct for submitOrder(). owner and destinationReceiver come back null — the frontend must fill both with real, non-zero addresses before calling the contract (see the Integration Guide).

Field
Type
Description

owner

string or null

null — fill with the user's wallet address.

bidToken

string

Resolved source token contract address.

bidTokenAmount

string

Amount in smallest unit.

askToken

string

Resolved destination token contract address.

askTokenAmount

string

On-chain fill threshold — the swap output the solver must meet to fill the order. Always equals Quote.toAmount. NOT what the destination receiver gets when the outbound bridge charges a protocol fee — see Quote.finalAmount.

destinationReceiver

string or null

null — fill with the recipient address.

destinationChainId

string

Target chain ID.

deadline

string

Unix seconds; "0" means no deadline.

data

string

Arbitrary bytes (currently always "0x").

Chain

Field
Type
Description

chainId

string

Chain ID (serialized as a string).

name

string

Internal name (e.g. arbitrum).

displayName

string

Human label (e.g. Arbitrum One).

explorerUrl

string

Block explorer base URL.

nativeCurrency

string

Native currency symbol.

isTestnet

boolean

Testnet flag.

isEnabled

boolean

Whether the chain is enabled.

isExecutionChain

boolean

True when this is the configured execution (hub) chain.

contracts

object

Contract addresses for this chain (string → address).

escrowContract

string

Escrow contract address.

rolesContract

string

Roles contract address.

providerIds

integer[]

Provider IDs available on this chain.

slug

string

Chain slug.

createdAt / updatedAt

string

RFC 3339 timestamps.

Token

Field
Type
Description

id

string

Token ID.

symbol

string

Symbol (e.g. USDC).

name

string

Token name.

chainId

string

Chain ID.

chainName

string

Chain name.

address

string

Contract address on this chain.

decimals

integer

Token decimals.

logoUrl

string

Logo URL.

isEnabled

boolean

Whether the token is enabled.

implAddress

string

Per-chain implementation address (e.g. OFT impl).

bridge

string

Bridge provider (e.g. Circle, LayerZero).

standard

string

Token standard (e.g. CCTPV2, LayerZeroV2OFT).

facet

string

Diamond facet name.

homeChainId

string

Home chain ID of the canonical token.

homeTokenAddress

string

Canonical token address on the home chain.

gmpParameters

string

GMP-encoded parameters for this token (hex).

routes

Route[]

Enabled outbound routes from this token.

Route

Field
Type
Description

id

string

Route ID.

tokenId

string

Token ID.

tokenName

string

Token name.

fromChainId / fromChainName

string

Source chain.

toChainId / toChainName

string

Destination chain.

fromAddress / toAddress

string

Source / destination token addresses.

homeChainId

string

Home chain ID of the canonical token.

homeTokenAddress

string

Canonical token address on the home chain.

decimals

integer

Token decimals.

bridge

string

Bridge provider.

adapter

string

Bridge adapter address.

standard

string

Token standard (e.g. CCTPV2).

facet

string

Diamond facet name.

estimatedDuration

integer

Estimated settlement time, seconds.

minAmount / maxAmount

string

Route amount bounds.

feeBps

integer

Route protocol fee in basis points.

isEnabled

boolean

Whether the route is enabled.

Solver

Field
Type
Description

id

string (uuid)

Solver ID.

chainId

integer

Chain the solver operates on.

chainName

string

Resolved chain name.

address

string

0x-prefixed EVM address.

name

string

Solver name.

operator

string

Operator name.

operatorType

string

internal or third-party.

description

string

Optional description.

website

string

Optional website.

contact

string

Optional contact.

isActive

boolean

Whether the solver is active.

createdBy

string

Creator.

createdAt / updatedAt

string

RFC 3339 timestamps.

ChainSolvers

Per-chain group in the /solvers response.

Field
Type
Description

chainId

integer

Chain ID.

chainName

string

Chain name.

solvers

Solver[]

Solvers on this chain.

ProtocolState

Field
Type
Description

chainId

string

Chain ID.

executionChainId

string

Configured execution chain.

isPaused

boolean

Whether the protocol is paused on this chain.

updatedAt

string

RFC 3339 timestamp.

TrackedTransaction

Key fields (a single-transaction GET additionally returns the steps array):

Field
Type
Description

id

string

Internal ID.

txHash

string

Source transaction hash (the lookup key).

protocol

string[]

GMP protocol(s) involved.

sourceChainId / destChainId

string

Source / destination chain IDs.

wallet

string

Order owner wallet.

status

TrackingStatus

Lifecycle status.

claimable

boolean

True iff claimCancellation() on the execution-chain escrow would succeed right now (status is awaiting_claim or expired).

fromTokenAddress / fromTokenSymbol / fromTokenDecimals

Source token metadata.

fromTokenAmount / fromTokenRawAmount

string

Human-readable / raw source amount.

toTokenAddress / toTokenSymbol / toTokenDecimals

Destination token metadata.

toTokenAmount / toTokenRawAmount

string

Human-readable / raw destination amount.

completedSteps / totalSteps

integer

Step progress.

currentStep

string

Current step name.

submittedAt / arrivedAt / filledAt / deliveredAt / failedAt

string or null

Lifecycle timestamps.

failedReason / failedStep

string

Failure detail.

steps

TransactionStep[]

Step entries (single-transaction GET only).

sourceExplorerLink / destinationExplorerLink

string

Explorer links.

destinationTx

string

Destination transaction hash.

gmpStatus / gmpMessageId

string

GMP status / message ID.

orderNonce

string

Per-source-chain order nonce (decimal string); needed to rebuild the Order struct for cancel / claimCancellation.

destinationReceiver

string

Receiver of the ask token on the destination chain.

orderDeadline

string

Order deadline (unix seconds, decimal string); "0" means none.

executionChainId

string

Chain where the escrow lives (where cancel / claimCancellation are called).

executionEscrowAddress

string

Escrow proxy address on the execution chain.

createdAt / updatedAt

string

RFC 3339 timestamps.

TransactionStep

Field
Type
Description

stepNumber

integer

Step index.

stepName

string

One of submitted, arrived, filled, delivered.

stepStatus

string

One of completed, pending, failed, recovered.

eventType

string

Underlying event type.

chainName / chainId

string

Chain this step occurred on.

txHash

string

Step transaction hash.

explorerLink / protocolExplorerLink

string

Explorer links.

blockNumber

integer

Block number.

blockTimestamp

string or null

Block timestamp.

gasUsed

integer

Gas units consumed (omitted when unknown).

gasPriceWei

string

Effective gas price in wei (omitted when unknown).

TransactionStats

Field
Type
Description

total

integer

Total matching transactions.

byStatus

object

Count keyed by TrackingStatus.

byProtocol

object

Count keyed by protocol.

avgDeliveryMs

number or null

Average delivery time in milliseconds.

bySourceChain / byDestChain

object

Counts keyed by chain ID.


Authentication and rate limits

  • Auth. Send your key in the x-apikey header on every /api/v1/* request. The base URL and key are provided during onboarding (separate dev/staging/production hosts). A missing or invalid key returns 401 UNAUTHORIZED. The health probes need no key.

  • Rate limits. A global per-IP limit applies to every route (on the order of ~100 requests/second, with a short burst allowance roughly double that). A separate, tighter per-key limit applies to the pricing endpoints such as /api/v1/quote (on the order of tens of requests/second per key, with a short burst on top). These are order-of-magnitude defaults; your key's exact limit is set at onboarding. On 429 RATE_LIMITED the API returns a Retry-After header (seconds) — honor it, then retry. If you run many concurrent sessions refetching quotes, tell the Glacis team your expected /quote rate so your key is sized for it.

Last updated