Skip to main content
GET
/
v1
/
status
Check swap status
curl --request GET \
  --url https://api.hypermid.io/v1/status \
  --header 'X-API-Key: <api-key>'
{
  "data": {
    "status": "DONE",
    "subStatus": "COMPLETED",
    "sending": {
      "txHash": "0xSourceTransactionHash",
      "chainId": 1,
      "amount": "1000000000000000000",
      "token": {
        "symbol": "ETH",
        "address": "0x0000000000000000000000000000000000000000"
      },
      "gasUsed": "150000",
      "gasPrice": "20000000000",
      "timestamp": 1711234500
    },
    "receiving": {
      "txHash": "0xDestinationTransactionHash",
      "chainId": 42161,
      "amount": "3237500000",
      "token": {
        "symbol": "USDC",
        "address": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831"
      },
      "timestamp": 1711234620
    },
    "tool": "stargate",
    "fromAddress": "0xSenderAddress",
    "toAddress": "0xReceiverAddress"
  },
  "error": null,
  "meta": {
    "requestId": "i9d0e1f2-a3b4-5678-2345-789012345678",
    "timestamp": 1711234625,
    "rateLimit": {
      "limit": 2000,
      "remaining": 1991,
      "reset": 1711234627
    }
  }
}

Documentation Index

Fetch the complete documentation index at: https://docs.hypermid.io/llms.txt

Use this file to discover all available pages before exploring further.

Returns the current status of a cross-chain swap transaction. Use this to track the progress of swaps after the user has signed and submitted the transaction.
txHash
string
required
The transaction hash on the source chain.
fromChain
number
required
Source chain ID.
toChain
number
required
Destination chain ID.
bridge
string
The bridge/tool used. If not provided, Hypermid will auto-detect.
{
  "data": {
    "status": "DONE",
    "subStatus": "COMPLETED",
    "sending": {
      "txHash": "0xSourceTransactionHash",
      "chainId": 1,
      "amount": "1000000000000000000",
      "token": {
        "symbol": "ETH",
        "address": "0x0000000000000000000000000000000000000000"
      },
      "gasUsed": "150000",
      "gasPrice": "20000000000",
      "timestamp": 1711234500
    },
    "receiving": {
      "txHash": "0xDestinationTransactionHash",
      "chainId": 42161,
      "amount": "3237500000",
      "token": {
        "symbol": "USDC",
        "address": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831"
      },
      "timestamp": 1711234620
    },
    "tool": "stargate",
    "fromAddress": "0xSenderAddress",
    "toAddress": "0xReceiverAddress"
  },
  "error": null,
  "meta": {
    "requestId": "i9d0e1f2-a3b4-5678-2345-789012345678",
    "timestamp": 1711234625,
    "rateLimit": {
      "limit": 2000,
      "remaining": 1991,
      "reset": 1711234627
    }
  }
}

Status Values

StatusDescription
NOT_FOUNDTransaction not found or not yet indexed
PENDINGTransaction is being processed
DONESwap completed successfully
FAILEDSwap failed

Sub-Status Values

Sub-StatusDescription
WAIT_SOURCE_CONFIRMATIONSWaiting for source chain confirmations
BRIDGE_IN_PROGRESSBridge transfer is in progress
WAIT_DESTINATION_TRANSACTIONWaiting for destination chain transaction
COMPLETEDFully completed
PARTIALPartially completed (refund may follow)
REFUNDEDTransaction was refunded

SuperSwap Status Values

For SuperSwap routes (provider=superswap), the status field moves through a specific sequence. Add provider=superswap to the query when polling:
StatusDescriptionTerminal?
INITIATEDDeposit registered, waiting for bridgeno
BRIDGINGHyperlane message in flight from source chainno
BRIDGE_CONFIRMEDBridge delivered on PulseChain — preparing DEX swapno
SWAPPINGPiteas DEX swap executing on PulseChainno
COMPLETEDOutput token delivered to the user’s walletyes ✅
FAILEDUnrecoverable failure — funds may need manual recoveryyes ❌
FALLBACK_SENTDEX swap failed — USDCh sent to user as fallbackyes ⚠️
Suggested poll interval: 5 seconds. Typical time to COMPLETED is 3–5 minutes (Hyperlane delivery dominates). Stop polling once a terminal status is reached.
// Poll until complete
while (true) {
  const { data } = await client.getStatus({
    provider: "superswap",
    txHash,
    fromChain,
    toChain,
  });
  if (["COMPLETED", "FAILED", "FALLBACK_SENT"].includes(data.status)) break;
  await new Promise(r => setTimeout(r, 5000));
}
const status = await client.getStatus({
  txHash: "0xSourceTransactionHash",
  fromChain: 1,
  toChain: 42161,
});

switch (status.data.status) {
  case "DONE":
    console.log("Complete! Received:", status.data.receiving.amount);
    break;
  case "PENDING":
    console.log("In progress:", status.data.subStatus);
    break;
  case "FAILED":
    console.log("Failed");
    break;
  case "NOT_FOUND":
    console.log("Not found yet — try again shortly");
    break;
}
For manual deposit routes, use GET /v1/execute/deposit/status instead.

SuperSwap Refunds & Fallback

For SuperSwap (PulseChain) polls, the terminal states COMPLETED, FALLBACK_SENT, and FAILED each require different UX. In particular FALLBACK_SENT is a success-with-caveat — the user received bridged USDCh instead of their requested token because the DEX leg couldn’t execute; treat it as “swap complete, with a substituted output,” not as a failure. See the Safety & Fallback guide for the full state machine, every failure scenario, and suggested UI copy for each terminal state.

Authorizations

X-API-Key
string
header
required

Partner API key. Optional for public endpoints, required for /v1/partner/*.

Query Parameters

txHash
string

Transaction hash (required for LI.FI + SuperSwap)

bridge
string

Bridge name (LI.FI swaps)

fromChain
integer

Source chain ID (LI.FI + SuperSwap)

toChain
integer

Destination chain ID (LI.FI + SuperSwap — 369 for SuperSwap)

provider
enum<string>

Set to 'near-intents' or 'superswap' to select the status backend. Omit for LI.FI.

Available options:
near-intents,
superswap
correlationId
string

Correlation ID (required when provider=near-intents)

Response

Status retrieved

data
any
required

Response payload (null on error)

error
object
required
meta
object
required