Skip to main content
GET https://api.trustware.io/api/v1/route-intent/:intentId/status Poll this endpoint to track routing and settlement progress through to completion. The response doesn’t include the metadata you passed to POST /route. To attribute a transaction to a user or an internal record, store the intentId from the route response against that record, and look it up when you read the status. You can start polling as soon as the intent exists. Until you commit the transaction there is no transaction record yet, so the endpoint returns 200 with "status": "pending" and the intent’s expiresAt instead of an error. Poll until status reaches success or failed.

Path parameters

Response

Optional fields may be omitted. The fields always present on a transaction payload are id, intent_id, sdk_request, from_address, to_address, from_chain_id, to_chain_id, transaction_request, status, landed_amount_verified, routing_provider, poll_attempt, create_date, update_date, and gas_sponsored.

Status values

The status field on the response is one of these values: HTTP 404 Not Found means the intent ID is unknown. It is terminal, so stop polling.
expired is a new value. Before it, an intent with no commit reported pending indefinitely.

Expiry

The pending and expired payloads carry expiresAt, the intent’s broadcast deadline as an RFC 3339 timestamp. It is the same value the route response returns. Judge it on Trustware’s clock, not the device’s. An intent stays pending for at least 24 hours after expiresAt. After that, a periodic background sweep marks it expired, so the change doesn’t happen at an exact time. A commit still works in both states. Once the intent is expired, Trustware accepts it only when it can see the transaction on-chain from the payer. See committing late.

The pending response

A pending payload is a stub. The intent row exists, so the response reports the intent’s own status and expiry, but none of the transaction fields exist yet. An expired payload has the same shape, with status and intent_status both "expired".
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.

Auxiliary status fields

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

Response fields

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

Gas sponsorship fields

When the transaction is linked to a paymaster sponsorship record, the payload also carries the fields below. They describe that record at any sponsorship_status, so they don’t show that the gas was paid.

Polling guidance

Poll on an interval of your own. next_poll_at is Trustware’s internal retry schedule, not a hint for clients. Keep polling on pending, submitted, bridging, and any status you don’t recognize. 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. expired means nobody committed a payment for the intent. You can stop polling it unless you broadcast a transaction for it, in which case commit that transaction and keep polling. A failed status doesn’t confirm a refund: refund handling is provider dependent. Your application should not trigger any downstream payout until success is confirmed.
The status endpoint will become a WebSocket stream in a future release. The polling interface will remain supported.