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

# Create Plaid link token

> Step 1 of the Plaid-linked bank account flow. Generates a Plaid Link token to launch the Plaid UI for connecting a bank account.

This endpoint is **step 1** of the **Plaid-linked bank account** flow for creating external off-chain bank addresses.

The Plaid-linked path supports `ach_debit`, `ach_credit`, and `rtp`. This is the **only** path that enables `ach_debit`.

**Native mobile apps:** If you are integrating Plaid Link in a native iOS or Android app, you must submit your iOS redirect URI or Android package name to Brale for whitelisting before mobile Plaid OAuth will work. See the [ACH on-ramp guide](https://docs.brale.xyz/guides/ach-on-ramp.md#create-plaid-link-token) for platform-specific setup details.

**Application name:** Use the optional `client_name` field (maximum 30 characters) to set the application name displayed in Plaid Link. It defaults to `Brale` and does not change logos, colors, or ACH bank statement descriptors. See [Customize the application name](https://docs.brale.xyz/guides/ach-on-ramp.md#customize-the-application-name).

**Next step:** After the user completes the Plaid Link flow, exchange the `public_token` using [Register financial institution account via Plaid](https://docs.brale.xyz/api-reference/brale/register-financial-institution-account-via-plaid-and-return-address-id.md) to create the `address_id`.

For a full comparison of both external bank address creation paths, see [External bank addresses](https://docs.brale.xyz/key-concepts/external-bank-addresses.md).

Use the playground below to try this endpoint directly, or review the OpenAPI details in the right panel.


## OpenAPI

````yaml POST /accounts/{account_id}/plaid/link_token
openapi: 3.0.3
info:
  title: Brale Issuance and Orchestration API
  version: 2.3.1
  description: >
    Brale supports stablecoin issuance and orchestration, enabling businesses
    and

    ecosystems to create their own stablecoins and convert between fiat and
    stablecoins

    seamlessly. From stablecoin onramps, offramps, and swaps to custody and
    payouts, the

    Brale API makes it easy to build stablecoin-enabled products.


    NOTE: All resource IDs (including account_id, address_id,
    financial_institution_id,

    and automation_id) are KSUIDs—27-character alphanumeric strings that are
    sortable

    by time. Examples showing UUIDs are incorrect.



    **What's new in 2.3.1**

    - Unified **Addresses** model for on-chain and off-chain endpoints
      - `Transfers` now accepts **address_id only** (no financial_institution_id)
      - Optional `brand` object to control bank statement presentation (`branding` still accepted as legacy alias)
    - Added off-chain rails: `ach_credit`, `same_day_ach_credit`, `ach_debit`,
    `same_day_ach_debit`, `rtp-credit`

    - Plaid endpoints moved to `/accounts/{account_id}/plaid/*`

    - `Financial Institutions` marked **deprecated** (migration path to
    **Addresses**)

    - Create Account now uses `CreateManagedAccountRequest` with
    `beneficial_owners`, `business_controller`, and `EndUserTosAttestation`.

    - Transfers now accept `brand` (replaces `branding`, still aliased in docs).

    - Plaid endpoints updated to return `address_id` and accept
    `transfer_types`.

    - Off-chain Address creation uses `CreateExternalAddressRequest` oneOf with
    bank + blockchain variants.

    - FI endpoints kept but marked deprecated; use Addresses instead.

    - `rtp_credit` is the canonical RTP rail name.



    **FedNow**

    - Added the `fednow_credit` rail. Outbound: create a Transfer with
      `destination.transfer_type: fednow_credit` to a bank Address that lists
      `fednow_credit` in `transfer_types`. Inbound: payers send FedNow credits to an
      active Automation's `source.funding_instructions`; Brale creates the Transfer
      automatically with `source.transfer_type: fednow_credit`.
    - Simulate a testnet FedNow deposit with `transfer_type: fednow` on
      `POST /accounts/{account_id}/automations/{automation_id}/simulations/deposits`.
    - `bank_address` and `beneficiary_address` are required only when an
    external
      bank Address requests `wire`.
    - FedNow availability depends on account enablement.
servers:
  - url: https://api.brale.xyz
    description: Production server
security:
  - BearerAuth: []
tags:
  - name: Accounts
    description: Endpoints related to managing customer accounts (KYB, details, etc.)
  - name: Transfers
    description: >-
      Endpoints for creating and retrieving transfers (fiat to stablecoins,
      etc.)
  - name: Addresses
    description: >-
      On-chain and off-chain endpoints (custodial or external) represented by a
      single Addresses resource
  - name: Financial Institutions
    description: Legacy (deprecated) bank endpoints. Use Addresses instead.
  - name: Automations
    description: Automated deposit addresses or onramps
  - name: Plaid
    description: Bank linking and ACH debit via Plaid.
  - name: Orders
    description: Legacy tag used for transfers in older specs.
paths:
  /accounts/{account_id}/plaid/link_token:
    post:
      tags:
        - Plaid
      summary: Create Plaid link token
      parameters:
        - in: path
          name: account_id
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateLinkTokenRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LinkTokenResponse'
components:
  schemas:
    CreateLinkTokenRequest:
      type: object
      title: CreateLinkTokenRequest
      properties:
        legal_name:
          type: string
          description: User's legal name
          example: John Doe
        email_address:
          type: string
          description: User's email address
          example: user@example.com
        phone_number:
          type: string
          description: User's phone number
          example: '+1234567890'
        date_of_birth:
          type: string
          description: User's date of birth
          example: '1990-01-01'
        client_name:
          type: string
          maxLength: 30
          default: Brale
          description: >-
            Application name displayed to users in Plaid Link. Defaults to
            `Brale` when omitted. Values longer than 30 characters return a
            validation error. This value changes the displayed application name
            only. It does not change logos, colors, or ACH bank statement
            descriptors.
          example: Rhythmic
    LinkTokenResponse:
      type: object
      title: LinkTokenResponse
      required:
        - link_token
        - expiration
        - callback_url
      properties:
        link_token:
          type: string
          description: Plaid Link token
          example: link-sandbox-123456789
        expiration:
          type: string
          description: ISO 8601 expiration
          example: '2024-01-01T12:00:00Z'
        callback_url:
          type: string
          description: URL to POST the public token to after Plaid Link
          example: https://customer.com/webhooks/plaid-updates
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: >
        Use the Bearer token returned from the Auth endpoint via OAuth2
        client_credentials flow. Include the token in the "Authorization: Bearer
        <token>" header.

````