# Rail Classes

> The fiat-vs-crypto enum that unifies funding endpoints, withdrawal destinations, and deposit instructions under one resource shape with a routing-pair pattern.

Source: https://business-api-docs.youhodler.com/docs/concepts/rail-classes

`rail_class` is a small typed enum — `fiat` or `crypto` — that lives on
every resource that can move money on either kind of payment rail. It
exists so the public API can cover both rail families with one unified
resource shape instead of two parallel surfaces, and so the same
discriminator appears on `FundingEndpoint`, `DepositInstruction`, and
`WithdrawalDestination` rather than splitting into rail-specific
variants.

> **Practical rule:** Read `rail_class` first when you look at a funding endpoint, a withdrawal destination, or a deposit instruction. It tells you which routing block to expect and which one will be `null`.

## Where Rail Class Appears

`rail_class` is part of the public contract on:

- `FundingEndpoint` — declares whether the inbound route is fiat or
crypto
- `DepositInstruction` — inherits the rail class of its parent funding
endpoint
- `WithdrawalDestination` — declares whether the outbound route is fiat
or crypto

It is also a filter parameter on the corresponding list endpoints, so
you can narrow listings to one rail class at a time.

## The Routing Pair Pattern

Two parallel routing blocks, one populated per resource:

- `fiat_routing` — bank-rail movements (account/IBAN-style routing,
settlement coordinates, rail-specific reference fields)
- `crypto_routing` — on-chain movements (address/network routing,
on-chain identifiers, network-specific destination data)

Reading order:

1. Look at `rail_class`.
2. Look at the matching routing block.
3. Treat the other routing block as guaranteed `null`.

The benefit is that the resource shape stays stable across both rail
classes — no rail-specific variants, no `oneOf` to disambiguate, and
every consumer can write one parser that handles both cases.

## How This Appears In The API

**Request URL — GET**
```http
GET /funding-endpoints?account_ref=client-accounts/44444444-4444-4444-8444-444444444444&rail_class=crypto
```
**Response — application/json**
```json
{
  "items": [
    {
      "id": "11111111-1111-4111-8111-111111111111",
      "account_ref": "client-accounts/44444444-4444-4444-8444-444444444444",
      "status": "active",
      "rail_class": "crypto",
      "asset": "USDC",
      "network": "ethereum",
      "crypto_routing": {
        "asset": "USDC",
        "network": "ethereum",
        "endpoint": {
          "address": "0xAbCd1234567890AbCd1234567890AbCd12345678",
          "memo": null
        }
      },
      "fiat_routing": null,
      "created_at": "2026-05-01T10:00:00Z",
      "updated_at": "2026-05-01T10:00:00Z"
    }
  ],
  "next_page_token": null
}
```
