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

# GET /status

> Poll intent and transaction progress. Returns pending before the receipt lands, then status, transaction hashes, and the metadata you passed to /route.

`GET https://api.trustware.io/api/v1/route-intent/:intentId/status`

Poll this endpoint to track routing and settlement progress through to completion. The `metadata` field echoes exactly what you passed in the `POST /route` call, so use it to attribute the transaction to the correct user or internal record.

You can start polling as soon as the intent exists. Until you submit the receipt there is no transaction record yet, so the endpoint returns `200` with `"status": "pending"` instead of an error.

Poll until status reaches `success` or `failed`.

## Path parameters

| Parameter | Description |
| - | - |
| `intentId` | The `intentId` returned by `POST /route`. |

## Response

```json theme={null}
{
  "data": {
    "id": "bc5a5e82-1ecb-453b-bf78-c7c3ccdc3223",
    "intent_id": "d9a10f42-7243-498d-914a-269a18b93660",
    "sdk_request": true,
    "from_address": "0xeb212fe20f26243ec4d4df2dd49c8aa9fa75a201",
    "to_address": "0xeb212fe20f26243ec4d4df2dd49c8aa9fa75a201",
    "from_chain_id": "43114",
    "to_chain_id": "137",
    "source_tx_hash": "0x4c8f91363c5f5e3ac2154f94995f5beac2993cc595af552c2681538af627e05d",
    "dest_tx_hash": "0x9b7e3f0a...",
    "request_id": "3f2504e0-4f89-41d3-9a0c-0305e82c3301",
    "provider_request_id": "eeaa53a4f2e254896ae690edac309e68",
    "status": "bridging",
    "routing_provider": "squid",
    "quote_to_amount_usd": "0.19000000",
    "to_amount_wei": "198584",
    "poll_attempt": 1,
    "next_poll_at": "2026-04-15T03:13:54.289994Z",
    "create_date": "2026-04-15T03:13:22.592483Z",
    "update_date": "2026-04-15T03:13:24.290292Z"
  }
}
```

## Status values

The `status` field on the response is one of five values:

| `status` | Meaning |
| - | - |
| `pending` | The intent exists but no receipt has been submitted yet, so there is no transaction to describe. Continue polling. |
| `submitted` | The receipt has been submitted; tracking has started. Continue polling. |
| `bridging` | Assets are in transit to the destination chain. Continue polling. |
| `success` | Route completed successfully. Final amounts and destination hash are available. |
| `failed` | The route failed. If funds moved on the source chain, a refund has been initiated back to the source address. |

HTTP `404 Not Found` means the intent ID is unknown. It is terminal, so stop polling.

### The pending response

A `pending` payload is a stub. The intent row exists, so the response reports the intent's own status, but none of the transaction fields exist yet:

```json theme={null}
{
  "data": {
    "intent_id": "d9a10f42-7243-498d-914a-269a18b93660",
    "status": "pending",
    "intent_status": "created",
    "create_date": "2026-04-15T03:13:22.592483Z",
    "steps": [
      {
        "step_index": 0,
        "step_kind": "approve",
        "chain_id": "43114",
        "status": "confirmed",
        "tx_hash": "0x1f0c...",
        "detail": {
          "token": "0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e",
          "spender": "0xce16f69375520ab01377ce7b88f5ba8c48f8d666",
          "amount": "1000000"
        },
        "create_date": "2026-04-15T03:13:22.592483Z",
        "update_date": "2026-04-15T03:13:40.101223Z"
      }
    ]
  }
}
```

Check `status` before reading any other field. `steps` appears only once the intent has an execution plan, so a resuming client can see that an approval already landed while the route transaction has not been submitted.

| Field | Meaning |
| - | - |
| `intent_status` | The intent's own lifecycle state: `created`, `submitted`, `bridging`, `success`, or `failed`. Present on the pending payload so you can see how far the intent itself got. |
| `steps[].step_index` | Position of the step in the execution plan. Steps are ordered: one `approve` entry per required allowance, then the route's own transaction. |
| `steps[].step_kind` | `approve` or `main`. |
| `steps[].chain_id` | The chain the step belongs on. |
| `steps[].status` | `planned`, `submitted`, `confirmed`, `failed`, or `skipped`. A step stays `planned` until its transaction hash is reported. |
| `steps[].tx_hash` | Hash reported for that step. Absent while the step is `planned`. |
| `steps[].detail` | Plan snapshot. For an `approve` step: `token`, `spender`, and `amount`. |

### Auxiliary status fields

A few separate fields surface conditions that are not part of the main `status` enum:

| Field | Meaning |
| - | - |
| `gas_status` | Set to `"needs_gas"` when the destination chain step stalled due to insufficient gas. Present only when relevant. |
| `routing_provider` | The routing provider used for this route, as a runtime value such as `"squid"` or `"lifi"`. Useful when triaging a `failed` status. |

## Response fields

These are the fields of a transaction payload, which the endpoint returns from `submitted` onward. On a `pending` payload only `intent_id`, `status`, `intent_status`, `create_date`, and sometimes `steps` are present.

| Field | Description |
| - | - |
| `id` | Trustware internal transaction record ID. |
| `intent_id` | The `intentId` from the route response. |
| `sdk_request` | `true` when the intent originated from a Trustware SDK API key. |
| `from_address` | Source wallet address. |
| `to_address` | Destination wallet address. |
| `from_chain_id` | Source chain ID. |
| `to_chain_id` | Destination chain ID. |
| `source_tx_hash` | Transaction hash on the source chain. |
| `dest_tx_hash` | Transaction hash on the destination chain. Populated once the route settles. |
| `request_id` | Trustware's own request ID for the call that created the intent, a UUID. This is the ID to quote in a support request. |
| `provider_request_id` | The routing provider's own correlation ID, which its status API and its support recognize. Absent when the selected provider returned none. |
| `status` | Current status. One of `pending`, `submitted`, `bridging`, `success`, `failed`. |
| `intent_status` | The intent's own lifecycle state. Returned on the `pending` payload. |
| `steps` | Execution steps for the intent, when it has an execution plan. See [The pending response](#the-pending-response). |
| `routing_provider` | Routing provider used for this route, as a runtime value such as `"squid"` or `"lifi"`. |
| `quote_to_amount_usd` | Expected destination USD value from the quote. |
| `to_amount_wei` | Destination token amount received (in smallest unit). Populated on `success`. Exact only once `landed_amount_verified` is `true`; before that it is the pre-trade quote estimate. |
| `landed_amount_verified` | `true` once Trustware has confirmed `to_amount_wei` by reading the destination chain. Check it before using the amount to drive anything automatic. |
| `gas_status` | Optional. Surfaces conditions such as `"needs_gas"` when the destination step stalls. |
| `poll_attempt` | Number of times this intent has been polled. |
| `next_poll_at` | Suggested timestamp for the next poll. |
| `create_date` | When the intent record was created (ISO 8601). |
| `update_date` | When the status was last updated (ISO 8601). |

## Polling guidance

Use `next_poll_at` as the suggested time for your next request rather than a fixed interval. This avoids unnecessary requests while the route is in transit. `next_poll_at` is absent on a `pending` payload, so use your own interval until the receipt lands.

Keep polling on `pending`, `submitted`, and `bridging`. Stop on `success`, on `failed`, and on a `404`. Retrying a `404` cannot change the answer, and every attempt counts against your key's rate limit.

On `failed` status: if the source chain transaction confirmed but the route failed, Trustware initiates a refund to the source address. Your application should not trigger any downstream payout until `success` is confirmed.

<Note>
  The `status` endpoint will become a WebSocket stream in a future release. The polling interface will remain supported.
</Note>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.