Search documentation
Fuzzy search across every docs page and section
API referenceLink tokens
Fuzzy search across every docs page and section
API referenceLink tokens
API reference
POST /v1/link/token/create and /v1/link/token/exchange — mint Link sessions and exchange public tokens for access tokens.
All endpoints are POST with a JSON body, authenticated with your secret key (Authentication). Errors use the standard envelope; money is in major units with an iso_currency_code; dates are YYYY-MM-DD strings.
/v1/link/token/createCreates a 30-minute link_token that opens one Link session for one end user. Tokens are signed JWTs; nothing about them is persisted client-side.
user.client_user_idstringrequiredproductsstring[]requiredtransactions, balances, identity, income, assets, investments, liabilities, recurring, crypto.client_namestringinstitution_idstringupdate_item_idstringclient_user_id.webhookstringcurl https://api.feelconnect.dev/v1/link/token/create \-H "Authorization: Bearer $FEELCONNECT_SECRET_KEY" \-H "Content-Type: application/json" \-d '{"client_name":"My App","user":{"client_user_id":"user-123"},"products":["transactions","balances"]}'
{"link_token": "lnk_tok_eyJhbGciOiJIUzI1NiJ9.eyJzaWQiOiJsbmtfMmY4...","expiration": "2026-07-28T12:30:00.000Z"}
/v1/link/token/exchangeExchanges the public_token from Link's onSuccess for a persistent access_token and item_id. A public token can be exchanged exactly once and expires with the session.
An item holds exactly one access_token. After an update-mode session your stored token is still valid, so the exchange is optional there — and if you do call it, the token is rotated: rotated comes back true and the previous token stops working immediately.
public_tokenstringrequiredonSuccess.curl https://api.feelconnect.dev/v1/link/token/exchange \-H "Authorization: Bearer $FEELCONNECT_SECRET_KEY" \-H "Content-Type: application/json" \-d '{"public_token":"public-sandbox-4f1c…"}'
{"access_token": "fc_at_hK8mQ2xP7cW1nR4tYb8sJd3fV6zL0aGe","item_id": "item_7dJ3nWqZ5xC9vK1mTf4g","rotated": false}