Skip to main content
This is an enterprise-only feature. Please contact us to enable.
This guide walks through the one-time setup required before you can run a Fireblocks Flow payment, deposit, or withdrawal using the JavaScript SDK.

Prerequisites

1. Enable chains in the dashboard

Open Chains & Networks in the Dynamic dashboard and enable every chain you want users to pay from. Flow supports these source chains:
ChainDashboard toggleExtension package
EVM (Ethereum, Base, Polygon, Arbitrum, etc.)EVM@dynamic-labs-sdk/evm
SolanaSolana@dynamic-labs-sdk/solana
BitcoinBitcoin@dynamic-labs-sdk/bitcoin
SuiSui@dynamic-labs-sdk/sui
TRONTron@dynamic-labs-sdk/tron
Enable only the chains your users need. Each chain you enable appears in the wallet connection flow.

2. Install chain extension packages

Install the packages for the chains you enabled:
npm install @dynamic-labs-sdk/evm @dynamic-labs-sdk/solana @dynamic-labs-sdk/bitcoin @dynamic-labs-sdk/sui @dynamic-labs-sdk/tron
Remove any packages for chains you did not enable.

3. Add chain extensions to the client

After creating your Dynamic client, add an extension for each chain. Extensions register wallet providers so the SDK can discover, connect, and sign with wallets on that chain.
import { createDynamicClient, initializeClient } from "@dynamic-labs-sdk/client";
import { addEvmExtension } from "@dynamic-labs-sdk/evm";
import { addWalletConnectEvmExtension } from "@dynamic-labs-sdk/evm/wallet-connect";
import { addSolanaExtension } from "@dynamic-labs-sdk/solana";
import { addWalletConnectSolanaExtension } from "@dynamic-labs-sdk/solana/wallet-connect";
import { addBitcoinExtension } from "@dynamic-labs-sdk/bitcoin";
import { addSuiExtension } from "@dynamic-labs-sdk/sui";
import { addTronExtension } from "@dynamic-labs-sdk/tron";

createDynamicClient({
  environmentId: "<YOUR_ENVIRONMENT_ID>",
});

// Add one extension per enabled chain
addEvmExtension();
addSolanaExtension();
addBitcoinExtension();
addSuiExtension();
addTronExtension();

// Optional: add WalletConnect so users can connect mobile wallets via QR code
addWalletConnectEvmExtension();
addWalletConnectSolanaExtension();

initializeClient();
Only call the extensions for chains you enabled in the dashboard. WalletConnect extensions are optional but recommended — they let users scan a QR code to connect mobile wallets like MetaMask Mobile or Phantom Mobile. See Adding Extensions for the full list and standalone extension variants.

4. Create an API token

Go to Developer > API Tokens in the dashboard and create a token with flow.write scope. This token authenticates flow creation from your backend — it is the only call that requires it. Everything after flow creation uses a session token minted by the SDK.

5. Create a flow from your backend

Call the flow creation endpoint from your server. This is where you set the mode, amount, currency, settlement, and destination — all fixed at creation time.
curl --request POST \
  --url https://app.dynamic.xyz/api/v0/server/<YOUR_ENVIRONMENT_ID>/flow/payment \
  --header 'Authorization: Bearer <YOUR_API_TOKEN>' \
  --header 'Content-Type: application/json' \
  --data '{
    "amount": "25.00",
    "currency": "USD",
    "settlementConfig": {
      "strategy": "cheapest",
      "settlements": [
        {
          "chainName": "EVM",
          "tokenAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
          "chainId": "1",
          "symbol": "USDC",
          "tokenDecimals": 18
        }
      ]
    },
    "destinationConfig": {
      "destinations": [
        {
          "chainName": "EVM",
          "type": "address",
          "identifier": "0xYourSettlementAddress"
        }
      ]
    },
    "memo": {
      "description": "Payment for order #1234"
    }
  }'
The response includes a flow.id. Pass this to your frontend as flowId when calling the SDK functions.

Next steps

With the client configured and a flowId from your backend, you’re ready to run the flow on the client: