Skip to main content
Plaid does not allow servers to mint a Production public_token from a username and password. Your end user must complete Plaid Link in a browser — you cannot automate this. Once they do, capture the public_token Plaid Link returns and paste it below. StackOne handles the exchange for the permanent access_token automatically.

Before opening Plaid Link, your backend must create a short-lived link_token that configures the Link session for this specific user.

1

Call /link/token/create

From your backend (server-side, never client-side), call POST https://production.plaid.com/link/token/create with at minimum:

  • client_id and secret — your Plaid credentials
  • user.client_user_id — a stable unique ID for this end user in your system (UUID recommended)
  • client_name — your app’s display name shown to the user during Link
  • products — array of products to enable (e.g., ["transactions", "auth"])
  • country_codes — e.g., ["US"]
  • language — e.g., "en"
  • redirect_uri — the URI you registered in Setup step 4 (only required if you support OAuth banks)
2

Capture the link_token

Plaid responds with { link_token: "link-production-...", expiration }. The link_token is valid for 4 hours. You will pass it to Plaid Link in the next step.

Plaid Link is the hosted UI Plaid serves. The user picks their bank, types their banking credentials, and completes any MFA — Plaid never exposes the bank password to you. Two minimal ways to run it:

1

Option A — Plaid Quickstart (fastest)

Clone Plaid Quickstart and follow the README. It runs locally with Docker or Node.js, opens Plaid Link in your browser, the user authenticates with their real bank, and the Quickstart app prints the resulting public_token to its console. Copy it.

2

Option B — Embed Plaid Link in your own app

Load the Plaid Link Web SDK and initialize it with the link_token from step 1.

  • Add <script src="https://cdn.plaid.com/link/v2/stable/link-initialize.js"></script> to your page.
  • Call Plaid.create({ token: 'YOUR_LINK_TOKEN', onSuccess: (public_token, metadata) => console.log(public_token) }).open().
  • After the user finishes authenticating, the public_token arrives in the onSuccess callback. Capture it (e.g., POST it to your backend, or for testing log it to the browser console).
  • Full reference: https://plaid.com/docs/link/web/

3. Paste the public_token below

Take the public_token from step 2 and paste it into the Public Token field in StackOne, then click Connect.

1

public_tokens are short-lived

A public_token is single-use and expires roughly 30 minutes after Plaid Link issues it. If you wait too long the exchange will fail and you will need to re-run Plaid Link to get a new one.

2

What StackOne does next

When you click Connect, StackOne calls POST /item/public_token/exchange with your client_id, secret, and the public_token. Plaid returns a permanent access_token (Plaid access_tokens do not expire) which StackOne stores on this connection. All actions for the products you specified in /link/token/create are now ready to run.

3

One Item per connection

Each access_token is tied to one Item — one user’s connection to one financial institution. To connect a different user or a different bank for the same user, create a new connection and run Plaid Link again.

Linking the Account from the Hub

1

Navigate to the Hub

Use one of the three Linking Account Methods to access the Hub.
2

Fill out the fields

Fill out the following fields using details from your provider:
  • Public Token
3

Connect

  • Click Connect
  • If applicable, the provider will redirect you to a sign-in or authorization page. Complete the provider’s authorization flow.
  • Once authorization is successful, you will see a confirmation popup

If the account linking is successful, you will see the newly linked account in your Accounts page.