> ## Documentation Index
> Fetch the complete documentation index at: https://direkt.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Poll for Status

> Track a payment from deposit to completion.

## Status lifecycle

```
AWAITING_DEPOSIT → DEPOSIT_RECEIVED → EXECUTING → COMPLETED
                                               ↘ FAILED
AWAITING_DEPOSIT → EXPIRED
```

| Status             | Meaning                        | Action           |
| ------------------ | ------------------------------ | ---------------- |
| `AWAITING_DEPOSIT` | No on-chain activity yet       | Keep polling     |
| `DEPOSIT_RECEIVED` | Deposit seen on source chain   | Keep polling     |
| `EXECUTING`        | Cross-chain swap in progress   | Keep polling     |
| `COMPLETED`        | Funds delivered to recipient   | **Fulfil order** |
| `EXPIRED`          | Quote timed out (5 min window) | Show retry UI    |
| `FAILED`           | Execution failed               | Show error       |

## Request

```bash theme={null}
curl --location 'https://godirekt.xyz/api/status/5af8532c-5bf4-45c2-b099-1b36e96e91a3' \
  --header 'x-api-key: YOUR_API_KEY'
```

## Response

```json theme={null}
{
  "success": true,
  "quoteId": "5af8532c-5bf4-45c2-b099-1b36e96e91a3",
  "status": "AWAITING_DEPOSIT",
  "createdAt": 1780010048,
  "expiresAt": 1780010348,
  "depositAddress": "0x7fa491b5765b5eea6b113a9121c311d780f8c61b",
  "deposit": null,
  "gas": null,
  "execution": {
    "startedAt": null,
    "completedAt": null,
    "outputTxHash": null,
    "steps": []
  },
  "route": {
    "from": { "chainId": 8453, "chainName": "Base", "token": "0x000...000" },
    "to": { "chainId": 56, "chainName": "BNB Chain", "token": "0x000...000" },
    "amount": "1000000000000000000",
    "recipient": "0xa110c77fa4b07ab601e63ecd65e99ddb8f1df6ec"
  },
  "error": null
}
```

<Note>
  `execution.outputTxHash` is populated once the swap executes on the destination chain. Use it to link to a block explorer.
</Note>

## Polling implementation

```js theme={null}
async function pollStatus(quoteId, apiKey) {
  const res = await fetch(
    `https://godirekt.xyz/api/status/${quoteId}`,
    { headers: { Authorization: `Bearer ${apiKey}` } }
  );
  if (!res.ok) throw new Error(`HTTP ${res.status}`);
  return res.json();
}

// Poll every 7 seconds
const interval = setInterval(async () => {
  const data = await pollStatus(quoteId, apiKey);

  if (data.status === 'COMPLETED') {
    clearInterval(interval);
    fulfilOrder(data.execution.outputTxHash);
  } else if (data.status === 'EXPIRED' || data.status === 'FAILED') {
    clearInterval(interval);
    showError(data.error);
  }
}, 7000);
```
