---
title: "Create Plaid link token"
method: POST
path: "/accounts/{account_id}/financial-institutions/plaid/link_token"
tags: ["Financial Institutions"]
---

# Create Plaid link token

`POST /accounts/{account_id}/financial-institutions/plaid/link_token`

## Request

- Base URL: `https://api.brale.xyz`
- URL: `https://api.brale.xyz/accounts/{account_id}/financial-institutions/plaid/link_token`
- Auth: OAuth 2
  - Client credentials
  - Token URL: `https://auth.brale.xyz/oauth2/token` scopes: `financial-institutions:write`

Creates a Plaid link token for bank authentication

## Path parameters

- `account_id` string, required: ID of the resource

## Request body

- CreateLinkTokenRequest
  - `android_package_name` string: Android package name for OAuth return-to-app. Must be pre-registered for the account and allowlisted in Plaid Dashboard. Required for Android OAuth flows. Cannot be used with redirect_uri.
  - `client_name` string: Name of your application, as shown to users in Plaid Link. Defaults to Brale when not provided. Maximum 30 characters.
  - `date_of_birth` string: User's date of birth (optional)
  - `email_address` string: User's email address (optional)
  - `language` 'da' | 'nl' | 'en' | 'et' | 'fr' | 'de' | 'hi' | 'it' | 'lv' | 'lt' | 'no' | 'pl' | 'pt' | 'ro' | 'es' | 'sv' | 'vi': Plaid Link UI language. Omit for English.
  - `legal_name` string: User's legal name (optional)
  - `phone_number` string: User's phone number (optional)
  - `redirect_uri` string, uri: Universal link for iOS OAuth return-to-app. Must be pre-registered for the account and allowlisted in Plaid Dashboard. Required for iOS OAuth flows. Cannot be used with android_package_name.

## Response `200`

OK

- LinkTokenResponse
  - `callback_url` string, required: The URL to POST the public token tox after Plaid Link completion to register the account
  - `expiration` string, required: ISO 8601 timestamp when the link token expires
  - `link_token` string, required: The Plaid link token for bank authentication

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `500`: Unknown

## Changes

- **2026-09-19** `fd1edeaad806`: 1 info
  - added the new optional request property `language`
- **2026-09-18** `a67982fbaae5`: 1 info
  - added the new optional request property `client_name`
- **2026-07-13** `d934fd29acc3`: 5 breaking
  - media type `application/vnd.api+json` was changed to a more general media type `application/json` for the response status `200`
  - media type `application/vnd.api+json` was changed to a more general media type `application/json` for the response status `401`
  - media type `application/vnd.api+json` was changed to a more general media type `application/json` for the response status `403`
  - media type `application/vnd.api+json` was changed to a more general media type `application/json` for the response status `404`
  - …1 more
- **2026-02-07** `4f67c6cbfdb8`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/brale/apis/brale-api/changes/accounts/:account_id/financial-institutions/plaid/link_token/post.md)

---

[API](https://skmtc.dev/brale/apis/brale-api.md) - [All operations](https://skmtc.dev/brale/apis/brale-api/llms.txt) - [OpenAPI document](https://skmtc.dev/brale/apis/brale-api/revisions/3378b8f911e0?raw)
