> For a complete index of Agora Finance documentation, fetch https://docs.agora.finance/llms.txt

# Overview

A **transaction** is a movement of value through Agora: a mint, a redeem, a bridge, a rewards payout, a returned transfer, or a stablecoin conversion. Each records a `source`, a `recipient`, and the per-currency totals that moved. The detail endpoint adds the **legs** behind it: the individual settlement steps, like an onchain transfer, a wire, or a book transfer.

* **`GET /v0/transactions`** lists your transactions, newest first, with cursor pagination.
* **`GET /v0/transactions/{txnId}`** returns one transaction plus its `legs`.

## Types

A transaction's `type` tells you what it did:

* **`mint`**: fiat or stablecoin in, AUSD out.
* **`redeem`**: AUSD in, fiat or stablecoin out.
* **`bridge`**: AUSD moved between chains.
* **`reward`**: a rewards payout.
* **`return`**: a returned or reversed transfer.
* **`tokenConversion`**: a stablecoin-to-stablecoin conversion executed from a [Convert Stablecoins](/api/production/guides/convert-stablecoins/overview) quote.

We will add new `type` values over time, so handle ones you don't recognize gracefully. `isInstantSettlement` is `true` when the transaction took Agora's instant-settlement path.

## Status

For every type except `tokenConversion`, `status` is always `settled`: these are settled-only rows. A `tokenConversion` starts `pending` (deposit received, conversion not yet sent), moves to `submitted` (conversion sent on the destination chain), and ends `settled`, `refunded` (deposit returned), or `failed`. We will add further values over time, so handle ones you don't recognize gracefully.

On a `failed` `tokenConversion`, `failureReason` says why the conversion failed (`BLOCKED_WALLET`, `EXPIRED`, `INSUFFICIENT_FUNDS`, `PROVIDER_UNAVAILABLE`, `SLIPPAGE`, or `OTHER`), and `refundFailureReason` is set when the deposit won't come back on its own (`AMOUNT_TOO_LOW`, `MANUAL_REVIEW`, or `OTHER`). Treat both as open enums. Both are always `null` for every other type. `initiatedAt` is the first leg's time; `settledAt` is when settlement completed, `null` until then.

## Counterparties

The transaction and each of its legs carry a `source` and a `recipient`, each tagged by `kind`:

* **`bank`**: carries `bankName`, `accountNumber`, and the `name` you registered the account under.
* **`wallet`**: carries the checksummed `address`, the `chain`, and the `name` you registered the wallet under.

The non-customer side of a transfer is named `"Agora"` — except on a `tokenConversion` leg, where it's the liquidity provider that filled the quote (e.g., `"Relay"`), not Agora itself. Each counterparty carries an `accountId` matching an account from [`GET /v0/accounts`](/api/production/accounts/get), or `null` when the account isn't associated with your organization. Bank counterparties currently return `null`.

On the transaction itself (not its legs), `source` and `recipient` also carry `amounts`, the per-currency totals that moved on that side.

## Legs

The detail endpoint adds a `legs` array, one entry per settlement step. Each leg has a decimal-string `amount` and `currency`, its own `source` and `recipient`, and:

* **`direction`**: relative to the customer: `INBOUND` is value arriving, `OUTBOUND` is value leaving. On a `tokenConversion`, the deposit to the provider is `OUTBOUND`, and the fill or refund from the provider is `INBOUND`.
* **`detail`**: rail-specific ids, keyed by `type`: `token` (onchain `transactionHash`), `wire` (Fedwire `imad`), `bookTransfer` (`confirmationNumber`), or `instantPayment` (`confirmationNumber`). A `fee` leg is a manual accounting entry, so its `detail` carries only the `type`.

> **Info**
>
> A leg's `detail.type` names the settlement *rail* (`token`, `wire`, …). The transaction-level `type` classifies the whole transaction (`mint`, `redeem`, …). Same field name, different values.

## Filtering

`GET /v0/transactions` narrows the list by movement `type`, by `sourceChain` / `recipientChain`, by `isInstantSettlement`, and by an `initiatedAt` range. The grammar is shared across the list endpoints. See [Filtering list endpoints](/api/production#filtering-list-endpoints).

The chain filters match the `source` and `recipient` the response reports, not every leg the transaction touched: a mint funded by wire has no source chain, so it matches on `recipientChain` only. `isInstantSettlement=false` covers standard settlement plus the types that have no settlement path of their own, such as `reward` and `return`.

## Pagination

Both list responses return `{ data, nextCursor }`:

* **`data`**: the page, newest first.
* **`nextCursor`**: an opaque cursor. Pass it back as the `cursor` query param for the next page; `null` when there are none.

Size the page with `limit`. Amounts are decimal strings, not numbers (see the [API overview](/api/production)). Every endpoint needs authentication (see the [Authentication guide](/api/production/authentication)); for errors, see the [Error Reference](/api/production/errors).