Creating a Deposit Account

Step 1 — Create a Deposit Account

A single API call creates the account and returns all deposit addresses.

curl -i -X POST https://confirmo.net/api/v3/deposits/crypto/accounts \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "notifyUrl": "https://your-platform.com/webhooks/deposits",
    "balanceAsset": "EUR",
    "reference": "your_unique_reference",
    "customerProfile": {
      "type": "individual",
      "profileId": "customer-unique-id-123",
      "firstName": "Jane",
      "lastName": "Doe",
      "streetAddress": "Sheikh Zayed Road 1",
      "city": "Dubai",
      "country": "AE",
      "postalCode": "00000"
    },
    "customerEmailAddress": "[email protected]"
  }'

Request body parameters:

ParameterTypeRequiredDescription
balanceAssetstringNoTarget asset for automatic conversion. Every deposit on this account is converted to this fiat or stablecoin. If omitted, the received asset is credited directly with no conversion.
notifyUrlstring (URL)NoWebhook URL for deposit and account status notifications.
customerProfileobjectYesTravel Rule information for the customer who owns this account. In most jurisdictions this is required at account creation — see Travel Rule.
customerEmailAddressstringNoCustomer's email address.
referencestringNoMerchant-defined string used to identify this account. Copied onto every deposit it receives. Useful for reconciliation.

Example response 201 Created:

{
  "id": "cda1a2b3c4d5e7f8",
  "status": "ENABLED",
  "balanceAsset": "EUR",
  "notifyUrl": "https://your-platform.com/webhooks/deposits",
  "reference": "your_unique_reference",
  "addresses": [
    {
      "address": "0xd46faFF817D27c8C10edC580eB573cd4E8fC424d",
      "paymentMethodIds": [
        "ETHEREUM-BLOCKCHAIN-MAINNET-ETH-CURRENCY",
        "ETHEREUM-BLOCKCHAIN-MAINNET-USDC-STANDARD",
        "ETHEREUM-BLOCKCHAIN-MAINNET-USDT-STANDARD"
      ]
    },
    {
      "address": "T9yD14Nj9j7xAB9kf14qMjdZR43bE1Z2L9",
      "paymentMethodIds": [
        "TRON-BLOCKCHAIN-MAINNET-TRX-CURRENCY",
        "TRON-BLOCKCHAIN-MAINNET-USDT-STANDARD"
      ]
    }
  ],
  "createdAt": 1772539200,
  "updatedAt": 1772539200
}
💡

Save the id. You'll use it to retrieve the account, filter deposits, and update settings. Deposit addresses are permanent and never expire — you don't need to call this endpoint again for the same customer.

If you specify a balanceAsset, Confirmo automatically converts all funds that arrive on the addresses to that target asset. The conversion rate at the moment the deposit transitions to DONE is applied. The target asset can be a stablecoin or fiat.


Step 2 — Share an Address with Your Customer

The addresses array contains one entry per supported blockchain. Each entry includes the wallet address and a list of paymentMethodIds telling you which assets are accepted on that address.

Pick the address for the chain your customer will use and display it in your UI. You can show the address as text or render it as a QR code for the customer to scan.

⚠️

Each address accepts only the assets listed in its paymentMethodIds. Sending an asset over the wrong network may result in funds that cannot be credited automatically and require manual recovery.


Step 3 — Receive the Deposit

When your customer sends funds, Confirmo detects the transaction on-chain automatically. The deposit moves through its lifecycle and, if a notifyUrl is set, you receive a webhook at each status change. The DONE status means the funds have been credited to your balance.

To reconcile without webhooks, you can list and filter deposits by account, asset, chain, status, or date.