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

# Exchange connections

> Let a user authorise an exchange account so you can read balances and transfer funds, with no on-chain wallet and nothing for them to sign.

An exchange connection lets a user authorise an account they hold at an exchange. Once it is connected, you can read the balances there and, with the right permission, transfer funds out to an external wallet address.

An exchange connection works on its own and does not fund a [Flow payment](https://docs.dynamic.xyz/docs/flow/payments.md). To let a payer pay from an exchange in a Flow payment, offer the [exchange payment source](https://docs.dynamic.xyz/docs/flow/payment-sources.md#exchange), which uses a purchase link and needs no linked account.

## What the user does

The user authorises the account over OAuth, in the exchange's own interface. They never hand you credentials and they sign no on-chain transaction, which is the main practical difference from a [wallet connection](https://docs.dynamic.xyz/docs/external-wallets/native.md).

## Supported exchanges

A user can connect a **Coinbase**, **Kraken**, or **Gemini** account.

Authorisation is set up per exchange in the console, under the OAuth providers for your environment. **Coinbase**, **Kraken**, and **Gemini** have their own setup pages:

> [card] [Coinbase](https://docs.dynamic.xyz/docs/platform/social-providers/coinbase.md)
>
> Creating the app and obtaining OAuth credentials.

> [card] [Kraken](https://docs.dynamic.xyz/docs/platform/social-providers/kraken.md)
>
> Arranged with the Kraken team.

> [card] [Gemini](https://docs.dynamic.xyz/docs/platform/social-providers/gemini.md)
>
> Linking only, not a sign-in method.

> [!NOTE]
>
> Gemini authorises an exchange account rather than a person, so it can only be linked to a user who is already signed in. It is not available as a sign-up or login method.

## Permissions are per exchange

How much an authorisation grants differs by exchange, and the difference decides what your integration can do. Both are configured through the **Additional Scopes** field on the OAuth provider in the console.

**Coinbase** grants read-only access when the user connects, which is enough to list accounts and show balances. Sending funds needs an extra scope. An app that only displays balances never gains the ability to move the user's money, which is a reasonable default to leave in place.

**Kraken** needs explicit scopes for everything, account reads included. A Kraken connection with no scopes configured cannot even list balances.

The specific scope strings, and the transfer flow that uses them, are in [Building an exchange transfer UI](https://docs.dynamic.xyz/docs/javascript/building-ui/exchange-transfers.md).

## Once connected

Reading balances is the baseline. With the sending permission added, a connected account can also transfer funds out to an external wallet address. That transfer is separate from Flow payments: it does not create or complete a flow.

Coinbase transfers can require additional confirmation after submission, including two-step verification and Travel Rule information, so a transfer is not always a single round trip.

## Next

> [card] [Connections](https://docs.dynamic.xyz/docs/flow/connections.md)
>
> How exchange connections compare to the other kinds.

> [card] [Exchange transfer UI](https://docs.dynamic.xyz/docs/javascript/building-ui/exchange-transfers.md)
>
> The JavaScript implementation, including scopes and Coinbase's extra steps.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.