# Transaction Tracking

Track the status of a cross-chain swap with `GET /transaction/{requestId}`.

**Obtaining the requestId**

The `requestId` is emitted in the `ComplexOpProcessed` event on the source chain after the transaction is confirmed. You can extract it from the transaction receipt.

**Response structure**

```json
{
  "status": "inProgress",
  "inconsistency": false,
  "source": {
    "chainId": 11155111,
    "transactionHash": "0x...",
    "from": "0x...",
    "events": [],
    "status": "completed"
  },
  "oracle": {
    "relayChainId": 11155111,
    "requestId": "0x...",
    "status": "inProgress",
    "height": null,
    "epoch": null,
    "time": null
  },
  "destination": {
    "chainId": 64165,
    "transactionHash": null,
    "events": [],
    "emergency": false,
    "status": "inProgress",
    "bridgeState": {},
    "error": null
  },
  "data": null
}
```

The response contains three sub-objects representing each phase of the cross-chain operation:

| Sub-object    | Description                     |
| ------------- | ------------------------------- |
| `source`      | Status on the originating chain |
| `oracle`      | Validator confirmation status   |
| `destination` | Status on the target chain      |

`destination.emergency` becomes `true` if over 30 minutes pass without completion.

**Top-level status values**

| Status       | Final? | Description                                  |
| ------------ | ------ | -------------------------------------------- |
| `inProgress` | No     | Transaction is being processed               |
| `completed`  | Yes    | Successfully completed                       |
| `failed`     | Yes    | An error occurred                            |
| `reverted`   | Yes    | Reverted (emergency completion is available) |
| `retry`      | No     | Delivery is being retried                    |
| `canceled`   | Yes    | Transaction was canceled                     |

**Polling recommendations**

* Poll every **10-15 seconds**.
* Set a **15 minute** timeout.
* Stop polling when the top-level `status` reaches a final state (`completed`, `failed`, `reverted`, or `canceled`).

***
