# How transactions work

In this section
- [Send assets](/products/wallet/transactions/send-assets) – Send payments in the console or transfers through the API, estimate fees, and transfer across EVM chains
- [Receive assets](/products/wallet/transactions/receive-assets) – Find a wallet's address and understand how deposits appear
- [View and track transactions](/products/wallet/transactions/view-and-track-transactions) – Follow transactions in the console or through the API
- [XRP Ledger transactions](/products/wallet/transactions/xrpl) – Trust lines, DEX offers, AMM operations, and other XRP Ledger transaction types
- [Raw signing](/products/wallet/transactions/raw-signing) – Sign custom transaction payloads
- [External IDs](/products/wallet/api-and-developer-experience/api-conventions#external-ids) – Ensure idempotent requests for vaults, wallets, and transactions


A transaction of digital assets refers to the transfer of ownership of digital assets from one party to another. Assets may be transferred between decentralized applications (dApps), individuals or organizations.

After transactions are made, they are verified and recorded as entries on a blockchain network, which is essentially a digital public ledger with no central authority (such as a bank). These entries can be viewed by anyone and cannot be altered.

Digital asset transactions are secured through cryptography. See our [Wallets guide](/products/wallet/vaults-and-wallets/wallets) for more information on cryptographic keys and how they are used to authenticate transactions.

## Transaction status flow

When you create a transaction in Ripple Custody (Wallet), it flows through several stages from initial request to final confirmation on the blockchain. Understanding these stages helps you track transaction progress, handle delays, and troubleshoot issues.

Every transaction follows a predictable path through these stages:

```
REQUESTED → POLICY CHECK → COMPILATION → SIGNATURE → PUBLISHING → CONFIRMATION → CONFIRMED
```

## The complete stage breakdown

| Stage | Description | What Happens |
|  --- | --- | --- |
| **REQUESTED** | Transaction created | Your transaction request is received and queued for processing |
| **POLICY_CHECK_PENDING** | Policy validation in progress | Ripple Custody (Wallet) verifies the transaction against your configured policies (wallet limits, daily limits, etc.). The transaction also waits here while it collects any required approvals, so this stage can last for the full approval window. |
| **POLICY_CHECK_PASSED** | Policy validation passed | Transaction cleared policy checks and all required approvals, and is eligible to proceed. |
| **COMPILATION_PENDING** | Preparing for blockchain | Transaction is being prepared and encoded for the target blockchain |
| **COMPILED** | Blockchain-ready | Transaction is now in blockchain format and ready for signing |
| **SIGNATURE_PENDING** | Waiting for signature | Transaction is waiting to be cryptographically signed by your wallet |
| **SIGNED** | Signature complete | Transaction has been signed and is ready to submit to the blockchain |
| **PUBLISH_PENDING** | Submitting to blockchain | Transaction is being submitted to the blockchain network |
| **PUBLISHED** | On the blockchain | Transaction has been received by the blockchain network |
| **CONFIRMATION_PENDING** | Waiting for finality | Blockchain is processing the transaction; awaiting the network-specific finality requirement |
| **CONFIRMED** | Transaction complete | Transaction is finalized on the blockchain (terminal state) |


## Important notes

**Linear Progression**: Transactions always move forward through these stages—they never go backward. Once a stage is passed, the transaction continues forward.

**Approvals Are Optional**: A transaction collects any required approvals during `POLICY_CHECK_PENDING`. If no approval is required, it moves on as soon as it passes the policy checks.

**Asynchronous Processing**: Status updates happen automatically as Ripple Custody (Wallet) and the blockchain process your transaction. You don't need to take action between stages.

**Failure States**: At any stage, a transaction may be rejected or fail:

* **REJECTED**: The transaction was denied (e.g., policy rejection, approval denial)
* **FAILED**: A technical error occurred during processing


## Where policies, approvals, and freeze apply

- **Policies** apply to outgoing transactions during the policy check stage (`POLICY_CHECK_PENDING`). A transaction that fails the policy check ends in `REJECTED`. Asset sweeping bypasses policies, and inbound [Travel Rule](/products/wallet/compliance/travel-rule) policy rules can freeze deposits. See [Policies](/products/wallet/governance-and-controls/policies).
- **Approvals** happen inside the policy check stage (`POLICY_CHECK_PENDING`). A denied approval ends the transaction in `REJECTED`. See [Approvals](/products/wallet/governance-and-controls/approvals).
- **Freeze** applies to incoming transactions. A frozen deposit's funds stay in the wallet but move to the frozen balance until you unfreeze it. See [Configure transaction freeze controls](/products/wallet/compliance/transaction-freeze).


## Monitoring transaction status

You can check transaction status through:

1. **Console**: View status in the **Transactions** tab of your wallet, or in **Transactions** in the main menu. The console shows a simplified status badge (**Requested**, **Pending**, **Signed**, **Published**, **Confirming**, **Success**, **Failed**, or **Violation**), and the transaction page shows the full stage timeline. See [View transactions in the console](/products/wallet/transactions/view-and-track-transactions)
2. **API**: Use the transactions API to programmatically fetch current status. See [Track transactions via the API](/products/wallet/transactions/view-and-track-transactions)
3. **Webhooks**: Get real-time notifications when transactions change status (see [Webhooks](/products/wallet/integrations-and-monitoring/webhooks))