# Withdrawal Destinations

> Durable outbound routes for a tenant: rail class, asset, and the relationship between withdrawal destinations and withdrawal operations.

Source: https://business-api-docs.youhodler.com/docs/concepts/withdrawal-destinations

A `WithdrawalDestination` describes a route money can leave the platform on
behalf of a tenant. It binds a parent (enterprise or client), a rail class
(`fiat` or `crypto`), and the routing details the platform uses when a
withdrawal is executed.

Withdrawal destinations are configuration objects, not transactions. They
define the outbound surface; withdrawals are what flow through that surface
at runtime.

> **Practical rule:** Treat a withdrawal destination as the durable outbound contract for a tenant. Treat withdrawals as the per-event executions that target it.

## Mental Model

A withdrawal destination answers three questions for the platform:

- **Who is withdrawing?** — `parent` resolves to an `Enterprise` or a
`Client`.
- **On which rail?** — `rail_class` is either `fiat` or `crypto`.
- **To where?** — routing details specify the external address, account, or
beneficiary the rail will deliver funds to.

Routing details (`fiat_routing` or `crypto_routing`) carry the rail-specific
configuration the platform needs to dispatch funds to the correct external
target.

## Lifecycle

A withdrawal destination moves through these lifecycle states:

- `active` — available as a target for new withdrawals
- `disabled` — temporarily not selectable for new withdrawals
- `retired` — terminal; no longer in use

Disabling a destination prevents new withdrawals against it but does not
affect withdrawals already in flight.

## Relationship To Other Resources

Read the layering in this order:

1. `WithdrawalDestination` — the durable outbound route for a tenant
2. `Withdrawal` — a per-event execution that targets a specific destination

Many withdrawals typically share one destination over its lifetime, in the
same way deposits share a funding endpoint on the inbound side.

## How This Appears In The API

**Request URL — GET**
```http
GET /withdrawal-destinations?parent=clients/44444444-4444-4444-8444-444444444444&rail_class=crypto
```
**Response — application/json**
```json
{
  "items": [
    {
      "id": "22222222-2222-4222-8222-222222222222",
      "resource": "withdrawal-destinations/22222222-2222-4222-8222-222222222222",
      "parent": "clients/44444444-4444-4444-8444-444444444444",
      "status": "active",
      "rail_class": "crypto",
      "asset": "USDC",
      "crypto_routing": { "...": "rail-specific routing details" },
      "fiat_routing": null
    }
  ],
  "next_page_token": null
}
```
