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

# Remittances

Enable senders to pay recipients globally by creating a virtual account for the sender and a wallet for the recipient. Fiat deposits into the sender’s virtual account are converted to stablecoins and sent to the recipient’s wallet.

<img src="https://mintcdn.com/bridge-727305d3/cQZ0TmcY4hf9xT0k/images/Remittances.png?fit=max&auto=format&n=cQZ0TmcY4hf9xT0k&q=85&s=157673caf9bcf1c047b3c5b78376a970" alt="Remittances.png" width="3390" height="650" data-path="images/Remittances.png" />

***

## Step 1: Generate your API Keys

Head over to [**dashboard.bridge.xyz**](https://dashboard.bridge.xyz/). Once logged in, click on the “API Keys” tab on the top menu bar and generate a new API key.

Bridge will make your **API key available only once**, so make sure to **immediately copy and save the key safely and securely**. \
\
Your key is used to authenticate into our APIs and is highly sensitive. If it ever gets compromised, you can immediately revoke key access from our dashboard and generate a new key.

## Step 2: Onboard a customer

Create a customer ID for each sender initiating a payment. Customers will need to accept our terms of service and complete KYC.

Check out this [guide](/get-started/introduction/quick-start/create-your-first-customer) for a full in depth explanation on onboarding customers. The below example walks you through using a KYC link to onboard your customer.

```bash Request theme={null}
curl --location --request POST 'https://api.bridge.xyz/v0/kyc_links' \
--header 'Content-Type: application/json' \
--header 'Api-Key: <API Key>' \
--header 'Idempotency-Key: <generate a uuid>' \
--data-raw '{
  "full_name": "John Doe",
  "email": "johndoe@example.com",
  "type": "individual"
}'
```

```json Response theme={null}
{
  "id": "uuid",
  "full_name": "John Doe",
  "email": "johndoe@example.com",
  "type": "individual", // or "business"
  "kyc_link": "https://bridge.withpersona.com/verify?",
  "tos_link": "https://dashboard.bridge.xyz/accept-terms-of-service?",
  "kyc_status": "not_started", // or "under_review", "incomplete", "approved" or "rejected"
  "rejection_reasons": [],
  "tos_status": "pending", // or "approved"
  "created_at": "2025-07-16T18:28:25.970Z",
  "customer_id": "customer_id",
  "persona_inquiry_type": "gov_id_db"
}
```

Guide the user through:

1. Visiting the `tos_link` and accepting terms of service
2. Completing identity verification via the `kyc_link`

This process typically takes less than a minute and updates automatically once complete.

## Step 3: Create a wallet

Create a wallet for the recipient to receive funds from the sender.

The below example explains how to create a Bridge wallet associated with a customer object.

```bash Request theme={null}
curl --request POST \
     --url https://api.bridge.xyz/v0/customers/<customer_id>/wallets \
     --header 'Api-Key: <API Key>' \
     --header 'Idempotency-Key: <Unique-Key>' \
     --header 'Content-Type: application/json' \
     --data-raw '{
       "chain": "solana"
     }'
```

```json Response theme={null}
{
  "id": "wallet_123",
  "chain": "solana",
  "address": "4oG1sWkP8vcrnhbkzZc1m9RTT2VUjZHKx92qiVFK7FuZ",
  "created_at": "2025-07-15T18:00:00Z"
}
```

<Note>
  Use the `bridge_wallet_id` when referencing the wallet in other Bridge APIs.
</Note>

Check out this [guide](/get-started/guides/wallets/overview) for more information on using Bridge wallets.

## Step 4: Create a virtual account

Create a USD or EUR account for the sender. Provide them with the bank instructions so they can deposit funds. Deposits are converted to stablecoins and sent to their wallet.

Use the [Virtual Accounts](/api-reference/virtual-accounts/create-a-virtual-account) API to provision permanent fiat deposit addresses for your customers. You define the `source` currency for the account and configure the `destination` to specify where Bridge should deliver the converted funds.

Bridge handles the fiat-to-crypto conversion and sends the funds on-chain automatically.

<Tabs>
  <Tab title="USD Virtual Account">
    ```bash Request theme={null}
    curl --location --request POST 'https://api.bridge.xyz/v0/customers/<customer_id>/virtual_accounts' \
    --header 'Content-Type: application/json' \
    --header 'Api-Key: <Api-Key>' \
    --header 'Idempotency-Key: <Unique Idempotency Key>' \
    --data-raw '{
      # The source object specifies a USD virtual account.
      "source": {
        "currency": "usd",
      },
      # The destination object instructs Bridge where to send the USD deposits to.
      # Bridge will automatically handle converting and sending USD to the crypto destination. 
      "destination": {
        "payment_rail": "ethereum",
        "currency": "usdc",
        "address": "0x3f5CE5FBFe3E9af3971dD833D26BA9b5C936f0bE"
      },
      # You can specifcy an optional developer fee to monetize on transactions.
      "developer_fee_percent": "1.0" // 1%.
    }'
    ```

    ```json Response theme={null}
    {
        "id": "1a400dae-f7fc-4f75-8105-212a14d4132d",
        "status": "activated",
        "developer_fee_percent": "1.0",
        "customer_id": "23c2d200-4c00-4c5a-b31a-00d035d7e0ae",
        "created_at": "2025-07-04T22:10:34.564Z",
        "source_deposit_instructions": {
            "currency": "usd",
            "bank_name": "Lead Bank",
            "bank_address": "1801 Main St., Kansas City, MO 64108",
            "bank_routing_number": "101019644",
            "bank_account_number": "215268120000",
            "bank_beneficiary_name": "Ada Lovelace",
            "bank_beneficiary_address": "923 Folsom Street, 302, San Francisco, California 941070000, US",
            "payment_rail": "ach_push",
            "payment_rails": [
                "ach_push",
                "wire"
            ]
        },
        "destination": {
            "currency": "usdc",
            "payment_rail": "ethereum",
            "address": "0x3f5ce5fbfe3e9af3971dd833d26ba9b5c936f0be"
        }
    }
    ```
  </Tab>

  <Tab title="EUR Virtual IBAN">
    ```bash Request theme={null}
    curl --location --request POST 'https://api.bridge.xyz/v0/customers/<customer_id>/virtual_accounts' \
    --header 'Content-Type: application/json' \
    --header 'Api-Key: <Api-Key>' \
    --header 'Idempotency-Key: <Unique Idempotency Key>' \
    --data-raw '{
      # The source object specifies a SEPA virtual IBAN.
      "source": {
        "currency": "eur",
      },
      # The destination object instructs Bridge where to send the EURO deposits to.
      # Bridge will automatically handle converting and sending EURO to the crypto destination. 
      "destination": {
        "payment_rail": "ethereum",
        "currency": "usdc",
        "address": "0x3f5CE5FBFe3E9af3971dD833D26BA9b5C936f0bE"
      },
      # You can specifcy an optional developer fee to monetize on transactions.
      "developer_fee_percent": "1.0" // 1%.
    }'
    ```

    ```json Response theme={null}
    {
        "id": "393c6358-4c19-4cb7-bbfa-d4a56be58309",
        "status": "activated",
        "developer_fee_percent": "1.0",
        "customer_id": "23c2d200-4c00-4c5a-b31a-00d035d7e0ae",
        "created_at": "2025-07-04T22:07:18.701Z",
        "source_deposit_instructions": {
            "currency": "eur",
            "iban": "IE90MODR14035307970528",
            "bic": "MODRIE00XXX",
            "account_holder_name": "Bridge Building Sp.z.o.o.",
            "bank_name": "Modulr Finance, Ireland Branch",
            "bank_address": "Floor 6, 2 Grand Canal Square, Dublin, Ireland",
            "payment_rail": "sepa",
            "payment_rails": [
                "sepa"
            ]
        },
        "destination": {
            "currency": "usdc",
            "payment_rail": "ethereum",
            "address": "0x3f5ce5fbfe3e9af3971dd833d26ba9b5c936f0be"
        }
    } 
    ```
  </Tab>

  <Tab title="MXN Virtual Account">
    ```bash Request theme={null}
    curl --location --request POST 'https://api.bridge.xyz/v0/customers/<customer_id>/virtual_accounts' \
    --header 'Content-Type: application/json' \
    --header 'Api-Key: <Api-Key>' \
    --header 'Idempotency-Key: <Unique Idempotency Key>' \
    --data-raw '{
      # The source object specifies a MXN virtual account.
      "source": {
        "currency": "mxn",
      },
      # The destination object instructs Bridge where to send the MXN deposits to.
      # Bridge will automatically handle converting and sending MXN to the crypto destination. 
      "destination": {
        "payment_rail": "ethereum",
        "currency": "usdc",
        "address": "0x3f5CE5FBFe3E9af3971dD833D26BA9b5C936f0bE"
      },
      # You can specifcy an optional developer fee to monetize on transactions.
      "developer_fee_percent": "1.0" // 1%.
    }'
    ```

    ```json Response theme={null}
    {
        "id": "35334433-dcee-48e8-bdc8-90171234ad00",
        "status": "activated",
        "developer_fee_percent": "1.0",
        "customer_id": "23c2d200-4c00-4c5a-b31a-00d035d7e0ae",
        "created_at": "2025-07-04T22:13:29.481Z",
        "source_deposit_instructions": {
            "currency": "mxn",
            "clabe": "568980546701071234",
            "account_holder_name": "Ada Lovelace",
            "payment_rails": [
                "spei"
            ]
        },
        "destination": {
            "currency": "usdc",
            "payment_rail": "ethereum",
            "address": "0x3f5ce5fbfe3e9af3971dd833d26ba9b5c936f0be"
        }
    }
    ```
  </Tab>

  <Tab title="BRL Virtual Account">
    ```bash Request theme={null}
    curl --location --request POST 'https://api.bridge.xyz/v0/customers/<customer_id>/virtual_accounts' \
    --header 'Content-Type: application/json' \
    --header 'Api-Key: <Api-Key>' \
    --header 'Idempotency-Key: <Unique Idempotency Key>' \
    --data-raw '{
    "source": {
    "currency": "brl",
    },
    # The destination object instructs Bridge where to send the BRL deposits to.
    # Bridge will automatically handle converting and sending USDC to the crypto destination. 
    "destination": {
    "payment_rail": "ethereum",
    "currency": "usdc",
    "address": "0x3f5CE5FBFe3E9af3971dD833D26BA9b5C936f0bE"
    },
    # You can specify an optional developer fee to monetize transactions.
    "developer_fee_percent": "1.0" // 1%.
    }'
    ```

    ```json Response theme={null}
    {
      "id": "6e6ab621-6749-401f-b598-0c709c241696",
      "status": "activated",
      "developer_fee_percent": "0.0",
      "customer_id": "eeafff4b-2dbe-41f2-9444-a6e228aee975",
      "created_at": "2025-09-03T16:10:31.446Z",
      "source_deposit_instructions": {
        "currency": "brl",
        "br_code": "00020126770014br.gov.bcb.pix01366e6ab621-6749-401f-b598-0c709c2416960215Edson_Arantes5204000053039865802BR5914Bridge_Example6009Sao_Paulo622905256beca3e77fdd489289aa1daeb630416E9",
        "account_holder_name": "Edson Arantes do Nascimento",
        "payment_rails": [
          "pix"
        ]
      },
      "destination": {
        "currency": "usdc",
        "payment_rail": "ethereum",
        "address": "0x3f5CE5FBFe3E9af3971dD833D26BA9b5C936f0bE"
      }
    }
    ```
  </Tab>

  <Tab title="GBP Virtual Account (Beta)">
    ```bash Request theme={null}
    curl --location --request POST 'https://api.bridge.xyz/v0/customers/<customer_id>/virtual_accounts' \
    --header 'Content-Type: application/json' \
    --header 'Api-Key: <Api-Key>' \
    --header 'Idempotency-Key: <Unique Idempotency Key>' \
    --data-raw '{
    "source": {
    "currency": "gbp",
    },
    # The destination object instructs Bridge where to send the GBP deposits to.
    # Bridge will automatically handle converting and sending USDC to the crypto destination. 
    "destination": {
    "payment_rail": "ethereum",
    "currency": "usdc",
    "address": "0x3f5CE5FBFe3E9af3971dD833D26BA9b5C936f0bE"
    },
    # You can specify an optional developer fee to monetize transactions.
    "developer_fee_percent": "1.0" // 1%.
    }'
    ```

    ```json Response theme={null}
    {
      "id": "6e6ab621-6749-401f-b598-0c709c241696",
      "status": "activated",
      "developer_fee_percent": "0.0",
      "customer_id": "485c2b50-949c-412b-928a-f56fce42330d",
      "created_at": "2026-01-03T00:23:23.724Z",
      "source_deposit_instructions": {
        "currency": "brl",
        "account_number": "12345678",
        "sort_code": "123456",
        "account_holder_name": "Bridge Building Sp. Z.o.o.",
        "bank_name": "Banking Circle S.A.",
        "bank_address": "2 Boulevard de la Foire, L-1528 Luxembourg",
        "bank_beneficiary_name": "Bridge Building Sp. Z.o.o.",
        "bank_beneficiary_address": "2 Boulevard de la Foire, L-1528 Luxembourg",
        "payment_rails": [
          "faster_payments"
        ]
      },
      "destination": {
        "currency": "usdc",
        "payment_rail": "ethereum",
        "address": "0x3f5CE5FBFe3E9af3971dD833D26BA9b5C936f0bE"
      }
    }
    ```
  </Tab>

  <Tab />

  <Tab />
</Tabs>

### Sharing Deposit Instructions

Once a Virtual Account is created, use the `source_deposit_instructions` object in the response to share the fiat deposit details with your customer. Funds sent to those details will be automatically converted and delivered to the crypto destination you specified.

## Step 5: Explore Cards

Enable users to spend their stablecoin balances locally.

The below API example provision a card tied to a Bridge wallet.

```bash Request theme={null}
curl --request POST \
     --url https://api.bridge.xyz/v0/customers/customerID/card_accounts \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --data '{
  "currency": "usdb",
  "chain": "solana",
  "crypto_account": {
    "type": "bridge_wallet",
    "address": "4oG1sWkP8vcrnhbkzZc1m9RTT2VUjZHKx92qiVFK7FuZ"
  }
}'
```

### Retrieve card details

Access  card metadata, expiration, and access a secure image of the card.

```bash Request theme={null}
curl -X GET 'https://api.bridge.xyz/v0/customers/<customerID>/card_accounts/<cardAccountID>' \
--header 'Api-Key: <API Key>'
```

```json Response theme={null}
{
  "id": "XXX-YYY",
  "status": "active",
  "card_image_url": "https://...",
  "card_details": {
    "last_4": "1264",
    "expiry": "10/24",
    "bin": "44325280"
  }
}
```

<Check>
  You can now share these card details with your customer to **start spending!**
</Check>

Check our guide [here](/get-started/guides/cards/spend) for more information on setting up cards!
