Intent Statuses
Understand the lifecycle of a Cross402 Intent.
Lifecycle Flow
┌──────────────────┐
│ AWAITING_PAYMENT │
└────────┬─────────┘
│
┌────────────┼────────────┐
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌─────────────────────┐
│ EXPIRED │ │ PENDING │ │ VERIFICATION_FAILED │
└──────────┘ └────┬─────┘ └─────────────────────┘
│
▼
┌────────────────┐
│ SOURCE_SETTLED │◄────────────┐
└───────┬────────┘ │
│ │ rollback on
▼ │ target failure
┌─────────────────┐ │
│ TARGET_SETTLING │────────────┘
└────────┬────────┘
│
┌─────────┼─────────┐
▼ ▼
┌────────────────┐ ┌────────────────────┐
│ TARGET_SETTLED │ │ PARTIAL_SETTLEMENT │
└────────────────┘ └────────────────────┘
Status Reference
Rollback: TARGET_SETTLING → SOURCE_SETTLED
If the target-chain transfer cannot be dispatched — for example the agent's wallet for the target chain is missing or the payment service is temporarily unavailable — the intent is atomically rolled back from TARGET_SETTLING to SOURCE_SETTLED so the settlement pipeline can retry. This is an internal transition; to a polling caller the status briefly becomes TARGET_SETTLING then returns to SOURCE_SETTLED, then proceeds to TARGET_SETTLED on the next attempt.
PARTIAL_SETTLEMENT is distinct from this rollback: it is terminal and signals that the source chain settled but the target-chain settlement could not be completed at all. Funds on the payer side have moved; contact support for reconciliation.
SDK Constants
Use typed constants instead of raw strings when checking intent status.
TypeScript / JavaScript
import { IntentStatus } from '@cross402/usdc';
Go
Terminal States
The following states are terminal — the intent will not transition to any other state:
TARGET_SETTLED— SuccessEXPIRED— TimeoutVERIFICATION_FAILED— Verification errorPARTIAL_SETTLEMENT— Source settled, target did not complete