# Transactions

A **transaction order** is an order to transfer assets or request an operation on the ledger. In the simplest case, it relates to the transfer of a native cryptocurrency; in more advanced cases, it can apply to the execution of smart contract methods and other on-ledger features.

**Transaction orders** may differ from one ledger protocol to another, but they at least define the account origin, and normally have an amount and a destination address; for some protocols, a single transaction may include multiple destinations and amounts, possibly denominated in various currencies.

**Transaction orders** rely on property `parameters` to define ledger-specific transaction order parameters.

We present below the transaction order parameters for Bitcoin:
 - `outputs`: sequence of pairs of destination and amount;
 - `feeStrategy`: fee calculation strategy, which may be `Low`, `Medium` or `High`; the actual fee amount corresponding to the selected strategy is automatically set by the system at execution time based on a network metrics;
 - `maximumFee`: maximum fee the user is willing to pay to execute the transaction; in rare occasions, Ripple Custody may decide to rebroadcast a transaction with higher fees to ensure inclusion within the ledger, as long as `maximumFee` has not been reached.

For an exhaustive list corresponding to each respective ledger protocol, we refer to the reference manual.

Ripple Custody supports multiple types of destinations for **transaction orders**:
 - ledger address: a ledger address is a protocol-level address, whose format may differ from one ledger protocol to another;
 - account: an account destination is an **account** `id`, which is guaranteed to implicitly resolve to an address of the account; for protocols supporting multiple addresses per account, no guarantee is provided over which account address the resolution leads to;
 - endpoint: an endpoint destination is an **endpoint** `id`, which is guaranteed to implicitly resolve to the address of the endpoint.

Once a **transaction order** is fully approved the order becomes executable. The corresponding **vault** may capture the pending **transaction order** and build and sign a corresponding ledger transaction.

**Transactions** are incoming or outgoing ledger transactions that have been detected on the ledger or shall be broadcast. **Transfers** are the financial representation of their corresponding **transactions**. 

## List transaction orders

 - [GET /v1/domains/{domainId}/transactions/orders](https://docs.ripple.com/products/custody/v1.19/api/reference/openapi/transactions/getorders.md)

## Get transaction order details

 - [GET /v1/domains/{domainId}/transactions/orders/{transactionOrderId}](https://docs.ripple.com/products/custody/v1.19/api/reference/openapi/transactions/getorder.md)

## List transfers

 - [GET /v1/domains/{domainId}/transactions/transfers](https://docs.ripple.com/products/custody/v1.19/api/reference/openapi/transactions/gettransfers.md)

## Get transfer details

 - [GET /v1/domains/{domainId}/transactions/transfers/{transferId}](https://docs.ripple.com/products/custody/v1.19/api/reference/openapi/transactions/gettransfer.md)

## List transactions

 - [GET /v1/domains/{domainId}/transactions](https://docs.ripple.com/products/custody/v1.19/api/reference/openapi/transactions/gettransactions.md)

## Get transaction details

 - [GET /v1/domains/{domainId}/transactions/{transactionId}](https://docs.ripple.com/products/custody/v1.19/api/reference/openapi/transactions/gettransaction.md)

## Dry run a transaction order

 - [POST /v1/domains/{domainId}/transactions/dry-run](https://docs.ripple.com/products/custody/v1.19/api/reference/openapi/transactions/dryruntransaction.md)

