Skip to main content
POST
POST /tx-status returns the status of a cross-chain transfer, as reported by the provider that executes it. Call it after you broadcast the transaction from a cross-chain POST /swap, and poll until the status is final. For the on-chain result of a transaction itself, including a single-chain swap or the source transaction of a transfer, use GET /transactions/{hash}.

Request body

Store dexHash with the transaction hash as soon as you broadcast. POST /swap is the only response that carries it, and every status call needs both.

Read the status

status and detailStatus are the provider’s own values, and different providers spell the same outcome differently. Compare status against these exact values: detailStatus is the provider’s sub-status or message. Display it, but don’t branch on it. status, detailStatus, fromChainId and toChainId are always present. The other fields appear when the provider reports them.

Poll until the status is final

  1. Confirm the source transaction first. Read its receipt from your RPC, or poll GET /transactions/{hash}. If it reverted, nothing left the source chain, so there is nothing to poll.
  2. Poll with backoff, for example every 15 to 30 seconds. Sign every attempt again: nonces are single-use, and the reference clients sign each call for you.
  3. Keep polling through 500 TX_STATUS_ERROR, other 5xx responses and network errors. Stop on a 4xx: fix the request instead of retrying it unchanged. The exception is a gateway 401 or 403: sign again once with a new nonce, and if that fails too, stop and check your credentials and server clock.
  4. Set a deadline that fits your product. When it passes without a final status, check the source transaction in a block explorer and contact partners@olympex.io with meta.requestId and the transaction hash.
500 TX_STATUS_ERROR doesn’t mean the transfer failed. It means the status is unknown: it’s expected right after broadcast, and it’s also returned for some transfers the provider marks failed. Treat it as “not yet known” until your deadline. The same error comes back, and never clears, when hash, chainId or dexHash doesn’t identify a transfer: for example the destination chain ID sent instead of the source chain ID, or a dexHash that isn’t lowercase. If it persists, check all three values against your broadcast transaction and the POST /swap response.
Track a swap to finality covers the full flow, and Cross-chain mechanics explains what happens between the two chains. The examples below poll with a deadline and throw when it passes. For a production poller that adds jitter and returns unknown at your cap instead of throwing, use waitForTransfer from Track a swap to finality. The 200 response example is illustrative.

Authorizations

x-api-key-id
string
header
required

Your API key ID (UUID). See Sign requests.

x-value-info
string
header
required

Base64 of timestamp + "\n" + nonce + "\n" + bodyHash, where timestamp is Unix seconds, nonce is 24 new hexadecimal characters and bodyHash is the unpadded base64url SHA-256 of the canonical body.

x-passphrase
string
header
required

Your account passphrase. Treat it like the secret key.

x-signature
string
header
required

Lowercase hex HMAC-SHA256 (signature v2), keyed with your secret key string (UTF-8, not decoded), of seven lines joined with \n, with no trailing newline: OLPX-HMAC-SHA256-V2, timestamp, nonce, the uppercase method, path, canonicalQuery and bodyHash. path is the request path including /api/v1, without the query string, for example /api/v1/limit-order/<id>. canonicalQuery is the query parameters decoded (+ is a space), sorted by key and then by value, re-encoded per RFC 3986 and joined with &, or the empty string when there is no query. Headers signed for one request are rejected on any other. See Sign requests.

Body

application/json
hash
string
required

Hash of the transaction you broadcast on the source chain.

Minimum string length: 1
chainId
integer
required

Source chain ID as an integer, for example 137.

Required range: 0 < x <= 9007199254740991
dexHash
string
required

The dexHash returned by the cross-chain POST /swap, in lowercase hex. It identifies the provider.

Minimum string length: 1

Response

Transfer status.

success
enum<boolean>
required
Available options:
true
data
object
required
meta
object
required