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

# Overview

A **route** is a persistent path from a source currency to a destination [account](/api/production/accounts/overview) — for example, an inbound USD wire that mints AUSD to your wallet, or AUSD redeemed to a USD payout. A route carries **no amount**: creating one returns reusable settlement **instructions**, and every inbound transfer that matches them settles independently to the route's destination, for whatever amount actually arrives.

#### Create a route

`POST /v0/routes` with a `from` currency and a `to` destination account. No amount — a route is a reusable path, not a single transfer.

#### Get reusable instructions

The response includes settlement `instructions`: a wire memo for fiat sources, or a mint or redeem address per chain for onchain sources.

#### Funds arrive

A sender follows the instructions. Every inbound transfer that matches them is detected automatically.

#### Settlement

Agora delivers the destination currency to `to.accountId` for the amount received. The instructions don't expire, so this repeats for every matching transfer.

## Instructions

Instructions are the actionable part of a route — how a sender actually moves funds. A route returns whichever shape fits its source:

* **Wire instruction** (fiat source) — a `memo` plus beneficiary and bank details (`accountNumber`, `bankName`, `routingNumber`). The `memo` is the key: any wire received against that account carrying the memo settles to this route.
* **Onchain instruction** (blockchain source) — one reusable mint or redeem address (`depositAddress`) per supported chain, each listing the `supportedCurrencies` it accepts.

Instructions don't expire. Reuse them across many transfers; each matching transfer settles on its own.

## Deterministic IDs

Route IDs are **deterministic** — the same canonical inputs always derive the same `id` — so creating a route is idempotent: calling `POST /v0/routes` again with the same inputs returns `200` with the existing route rather than creating a duplicate. `409 route_already_exists` is reserved for the rare case where the deterministic id is occupied by a route the call couldn't read back cleanly; see [200, 201, or 409](/api/production/routes/create#200-201-or-409) on `POST /v0/routes`.

## Topologies

The pairing of `from.currency`, `to.currency`, and `to.chain` determines what a route does — mint from fiat (`usd → ausd`), mint from stablecoin (`usdc → ausd`), redeem to fiat (`ausd → usd`), or redeem to a token (`ausd → usdc`) — and is returned on every route as `direction`. The `Create a Route` endpoint below documents the supported topologies and chains in full.

The endpoints below let you create a route (`POST /v0/routes`), list routes (`GET /v0/routes`), and retrieve one (`GET /v0/routes/{routeId}`). The list takes `fromCurrency`, `toCurrency`, `toChain`, `direction`, and `toAccountId` filters. See [Filtering list endpoints](/api/production#filtering-list-endpoints). `usdc` is valid on either side — as `fromCurrency` for a mint-from-stablecoin route, as `toCurrency` for a redeem-to-stablecoin route — matching what route creation accepts. See the [Error Reference](/api/production/errors) for route-specific errors (`route_not_found`, `route_already_exists`, `route_creation_unavailable`).