> ## Documentation Index
> Fetch the complete documentation index at: https://docs.teel.finance/llms.txt
> Use this file to discover all available pages before exploring further.

# Get recipient requirements

> Field schema for creating a recipient.

Two sections: `bank` for fiat, `wallet` for stablecoin. Call before [`POST /recipients`](/api-reference/recipients/create).

<Info>**Scope** `recipients:read`</Info>

## Headers

<ParamField header="Authorization" type="string" required>
  API key.
</ParamField>

## Query parameters

<ParamField query="relationship" type="string">
  Optional. `self` or `third_party`.
</ParamField>

<ParamField query="country" type="string">
  Optional ISO 3166-1 alpha-2. Filters out rails not valid for the country.
</ParamField>

## Response

<ResponseField name="success" type="boolean">
  `true` on success.
</ResponseField>

<ResponseField name="data" type="object">
  The merged schema.

  <Expandable title="data">
    <ResponseField name="required" type="boolean">
      Always `true` today.
    </ResponseField>

    <ResponseField name="fields" type="array">
      Every field that may apply. Rail-specific fields carry `visibleWhen` conditions. See [Field object](#field-requirement-object).
    </ResponseField>

    <ResponseField name="bank" type="object">
      Currencies + rails for fiat. All rail-gated fields sit on `data.fields`, not here.

      <Expandable title="bank">
        <ResponseField name="currencies" type="string[]">
          Supported currencies.
        </ResponseField>

        <ResponseField name="currencyRailMap" type="object">
          Currency → list of rails.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="wallet" type="object">
      Currencies + chains for stablecoin.

      <Expandable title="wallet">
        <ResponseField name="currencies" type="string[]">
          Stablecoin tickers (e.g. `USDC`, `USDCPOLYGON`).
        </ResponseField>

        <ResponseField name="rails" type="string[]">
          Chain names, sorted.
        </ResponseField>

        <ResponseField name="railLabels" type="string[]">
          Labels parallel to `rails`.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

### Field requirement object

Every entry in `data.fields` has this shape:

<ResponseField name="name" type="string">
  JSON key on the create-recipient body.
</ResponseField>

<ResponseField name="type" type="string">
  `string` · `number` · `enum` · `object` · `array`.
</ResponseField>

<ResponseField name="required" type="boolean">
  Required on submit.
</ResponseField>

<ResponseField name="description" type="string">
  Form label / hint.
</ResponseField>

<ResponseField name="enum" type="string[]">
  Allowed values (enum).
</ResponseField>

<ResponseField name="visibleWhen" type="object">
  Show only when sibling fields match (e.g. `{ rail: ["ach", "wire"] }`).
</ResponseField>

<ResponseExample>
  ```json 200 theme={null}
  {
    "success": true,
    "data": {
      "required": true,
      "fields": [
        { "name": "email", "type": "string", "required": true },
        { "name": "country", "type": "string", "required": true },
        { "name": "transferType", "type": "enum", "required": true, "enum": ["fiat", "stablecoin"] },
        { "name": "accountNumber", "type": "string", "required": true, "visibleWhen": { "transferType": ["fiat"] } },
        { "name": "routingNumber", "type": "string", "required": true, "visibleWhen": { "rail": ["ach", "wire"] } },
        { "name": "iban", "type": "string", "required": true, "visibleWhen": { "rail": ["sepa"] } }
      ],
      "bank": {
        "currencies": ["USD", "EUR", "PHP"],
        "currencyRailMap": {
          "USD": ["ach", "wire"],
          "EUR": ["sepa"],
          "PHP": ["bank_transfer"]
        }
      },
      "wallet": {
        "currencies": ["USDC", "USDCPOLYGON", "USDCARBITRUM"],
        "rails": ["arbitrum", "ethereum", "polygon"],
        "railLabels": ["Arbitrum", "Ethereum", "Polygon"]
      }
    }
  }
  ```
</ResponseExample>

## Errors

| Status | Code           | Meaning                                     |
| ------ | -------------- | ------------------------------------------- |
| `400`  | —              | No active routing yet — complete KYB first. |
| `401`  | `UNAUTHORIZED` | Missing/invalid key.                        |
| `403`  | `FORBIDDEN`    | Key lacks `recipients:read`.                |
