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-apikeyrequest header (aAuthorization: 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 withinv1are additive; breaking changes ship under a new version.Roles. Keys are
viewer(all/api/v1/*read and quote endpoints) oradmin(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 underdata, errors undererror, and list responses carrymetaandpaging. The examples below show thedatapayload; 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) andoffset(default 0).
Endpoints at a glance
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
POST /api/v1/quoteWallet screening. ZeroDelta screens wallets at two points. (1) At quote time — when you supply
owner(and optionallydestinationReceiver), 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. Whenowneris omitted the quote returnscomplianceStatus: UNSCREENEDand 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):
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:
toAmountis the on-chainorder.askTokenAmount— the swap output threshold the solver must meet to fill the order, used to constructorderRequest.askTokenAmount. It is not what the destination receiver gets when the outbound bridge charges a protocol fee — seefinalAmount.finalAmountis what the destination receiver actually gets:toAmountminus the outbound bridge protocol fee (CCTP fast-track maxFee). It equalstoAmountfor LayerZero outbound and CCTP slow-track outbound, and is otherwise slightly lower.finalAmount <= toAmountalways; always populated.feeBpsis the route protocol fee in basis points (CCTP fast-track fee for Circle lanes;0for LayerZero). Metadata only — it is not subtracted fromtoAmount. The actual fee shows up as the gap betweentoAmountandfinalAmount.estimatedDurationis 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.lifespanSecondsis how long the quote stays valid, in seconds, derived from the winning provider's signed expiry (expiry minus generation time, floored at 0). It is0when 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.swapTimeSecondsis 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);0when block-time data is unavailable.gasCostSource/gasCostDestare LayerZero native messaging fees in wei (inbound and outbound respectively), and are0for CCTP (USDC). PassgasCostSourceasmsg.valueonsubmitOrder.swapCostis a gas hint from the winning liquidity provider (decimal string; empty when the provider does not return one).provideris 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
GET /api/v1/transactionsLists 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:
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}
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
GET /api/v1/transactions/{txHash}/ordersReturns 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
GET /api/v1/transactions/statsReturns 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
GET /api/v1/chainsLists 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}
GET /api/v1/chains/{chainId}Returns one Chain.
Path parameter: chainId (integer).
Errors: 401 UNAUTHORIZED, 404 NOT_FOUND.
Tokens
GET /api/v1/tokens
GET /api/v1/tokensLists 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}
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
GET /api/v1/tokens/lookupResolves 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
GET /api/v1/tokens/configsReturns 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
GET /api/v1/routesLists 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:
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}
GET /api/v1/routes/{routeId}Returns one Route.
Path parameter: routeId (string).
Errors: 401 UNAUTHORIZED, 404 NOT_FOUND.
Protocols
GET /api/v1/protocols
GET /api/v1/protocolsLists 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
GET /api/v1/solversReturns 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}
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
GET /healthLiveness probe. Always returns 200.
GET /health/ready
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.
statusisokordegraded.
checksholds infrastructure dependencies under generic role labels (database,read_database,cache).
providersholds third-party / internal-service dependencies under opaque hashed keys — the specific vendor is never disclosed.Each entry has
status(ok | unavailable | stub | not_configured), acriticalflag, and optionallatencyMs/ageSeconds. Per-check error detail is intentionally omitted.
failureslists 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/solversCRUD 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.
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
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.
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
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
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).
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
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
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
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
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.
chainId
integer
Chain ID.
chainName
string
Chain name.
solvers
Solver[]
Solvers on this chain.
ProtocolState
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):
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
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
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-apikeyheader on every/api/v1/*request. The base URL and key are provided during onboarding (separate dev/staging/production hosts). A missing or invalid key returns401 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. On429 RATE_LIMITEDthe API returns aRetry-Afterheader (seconds) — honor it, then retry. If you run many concurrent sessions refetching quotes, tell the Glacis team your expected/quoterate so your key is sized for it.
Last updated

