# View transactions

You can view different objects to obtain information about a transaction.

For more information about the different object types created in Ripple Custody for transactions, see [Transaction initiation](/products/custody/transactions/initiation).

## View transactions for a transaction order

To view the transactions for a transaction order, call the [List transactions](/products/custody/reference/api/openapi/transactions/gettransactions) operation, filtered by the `orderReference.id` query parameter.

The response includes information on the transactions from a blockchain perspective, including information on the specific ledger, the transaction hash, and the serialized raw transaction in the specific ledger format.

The section `ledgerTransactionData` contains information on what was executed on the blockchain ledger. You can use the `ledgerTransactionId` in any external blockchain viewer to view details of the transaction on the blockchain.

## View the transfers for a transaction

To view the transfers for a transaction, call the [List transfers](/products/custody/reference/api/openapi/transactions/gettransfers) operation, filtered by the `transactionID` query parameter.

## View incoming transactions

Incoming transactions are not associated with a transaction order.

To view incoming transactions, call the [List transactions](/products/custody/reference/api/openapi/transactions/gettransactions) operation, filtered with the query parameter `accountId`, if required.

If a transaction has a null `transactionOrderId`, that means this transaction is for an incoming transaction.

On ledgers that route funds by destination tag or memo (XRPL, Stellar, and Hedera), Ripple Custody attributes an incoming transfer to an endpoint by matching both the address and the tag or memo that the transaction carries, so deposits at a shared address resolve to the endpoint registered for that tag rather than to the address alone. If several pre-existing endpoints match the same key, Ripple Custody consistently uses the most recently created endpoint. The transfer's `metadata` field carries the ledger-specific tag or memo of the incoming transaction. For the endpoint uniqueness rules, see [Endpoints](/products/custody/accounts-and-assets/endpoints#destination-tags-and-memos).

## View the status of a transaction order

To view the status of a transaction, call the [Get transaction order details](/products/custody/reference/api/openapi/transactions/getorders) operation with the relevant transaction order ID.

The response includes two different statuses:

- `processing.status`: The internal processing status of the transaction in Ripple Custody. It reaches `Completed` status once the transaction is successfully broadcast.
[Learn more about Ripple Custody transaction statuses](/products/custody/transactions/processing#ripple-custody-statuses)
- `ledgerTransactionData.ledgerStatus`: The ledger service tracks the transaction on the ledger and detects if it is confirmed in a block. The `Confirmed` status is achieved once the finality value for the ledger is reached.
[Learn more about ledger transaction statuses](/products/custody/transactions/processing#ledger-statuses)


If the transaction is not executed or partially executed on chain, the `ledgerTransactionData.failure` field shows a non-null value, for example `PartiallyFailedOnChain`. In a scenario such as this, you need to conduct a thorough investigation to discover the root cause of the failure on chain.

We can conclude that a transaction was both successfully broadcast and executed on chain when:

- `ledgerTransactionData.ledgerStatus` is `Confirmed`.
- `ledgerTransactionData.failure` null.


You can also view other data in the `ledgerData` block of the transaction order, such as:

- `createdContractAddresses`: Addresses of any smart contracts deployed, reported by the `CREATE` and `CREATE2` functions of the smart contract. The value corresponds to an array, as it is possible to deploy multiple contracts using a single transaction.


When the transaction involves the destruction of an existing contract, the transaction includes `ledgerData.deletedContractAddresses`, exposing all the contract addresses reported by the `SUICIDE` functions of the smart contract.