> ## 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.

# Payroll

Enable employers to pay employees and contractors globally by creating a wallet and virtual account for the employer and a wallet for each employee. Fiat deposits into the virtual account are converted to stablecoins and held in the employer’s wallet. Use the Transfers API to pay out funds from the employer to the employee.

<img src="https://mintcdn.com/bridge-727305d3/cQZ0TmcY4hf9xT0k/images/Payroll.png?fit=max&auto=format&n=cQZ0TmcY4hf9xT0k&q=85&s=4471a44026e85f9b8927547f9234c353" alt="Payroll.png" width="4500" height="650" data-path="images/Payroll.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 employer to manage payroll. 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 for the employer

Create a wallet to hold the employer’s payroll funds.

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

```json Response theme={null}
{
  "id": "employer-wallet-id-123",
  "chain": "solana",
  "address": "0x353253250000000001340033",
  "created_at": "2024-09-01T02:03:04.567Z",
  "updated_at": "2024-09-01T02:03:04.567Z"
}
```

## Step 4: Create a wallet for an employee

Create a wallet for each employee to get paid in stablecoins.

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

```json Response theme={null}
{
  "id": "employee-wallet-id-abc",
  "chain": "solana",
  "address": "0x444415153153500000120",
  "created_at": "2024-09-01T02:03:04.567Z",
  "updated_at": "2024-09-01T02:03:04.567Z"
}
```

## Step 5: Create a virtual account

Create a USD or EUR account for the employer. Provide them with the bank instructions so they can deposit payroll. 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.

```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",
  },
  # You can specify the employer's wallet as the destination to receive funds
  "destination": {
    "payment_rail": "solana",
    "currency": "usdc",
    "bridge_wallet_id": "employer-wallet-id-123"
  }
}'
```

## Step 6: Make a transfer

Use the Transfers API to move funds from the employer’s wallet to the employee’s wallet. You will need to call the API for each employee.

Use the [Transfers](/api-reference/transfers/create-a-transfer) API with the employer's `bridge_wallet` as the source and the employee's `bridge_wallet` as the destination.

```bash Request theme={null}
curl --location --request POST 'https://api.bridge.xyz/v0/transfers' \
  --header 'Api-Key: <API Key>' \
  --header 'Idempotency-Key: <Unique Key>' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "amount": "10.0",
    "on_behalf_of": "<customer_id>",
    "developer_fee": "0.0",
    "source": {
      "payment_rail": "bridge_wallet",
      "currency": "usdc",
      "bridge_wallet_id": "employer-wallet-id-123"
    },
    "destination": {
      "payment_rail": "solana",
      "currency": "usdc",
      "bridge_wallet_id": "employee-wallet-id-abc"
    }
  }'
```

Bridge will then initiate a crypto transfer from between the two specified bridge wallets.
