Skip to main content
The Payment Integration guide covers every step required to move funds into and out of WhiteBIT programmatically — crypto deposits, crypto withdrawals, crypto withdrawals with currency conversion, fiat (SEPA) operations, and WhiteBIT Codes. Each section includes the full transaction lifecycle, status state machine, fee calculation, and webhook events.
EEA users: USDT deposits and withdrawals are not available since December 30, 2024 (MiCA compliance). Use USDC or EURI as alternatives. See Regulatory Compliance for details.

Deposit address generation

Generate a deposit address by calling POST /api/v4/main-account/address. See the API Reference for the full endpoint specification.Required parameters:
ParameterTypeDescription
tickerstringCurrency ticker (e.g., BTC, ETH). The currency must have can_deposit: true in the Asset Status response.
networkstringCryptocurrency network (e.g., ERC20, TRC20). Required for multi-network currencies like USDT. Query the Asset Status endpoint for available networks per currency.
The endpoint returns the same address for the same ticker and network combination on repeated calls — addresses are permanent and reusable, not ephemeral.Key response fields: account.address, account.memo (for currencies requiring a memo or destination tag), required.fixedFee, required.flexFee, required.minAmount, required.maxAmount.Rate limit: 1,000 requests per 10 seconds.
# Generate a BTC deposit address
curl -X POST "https://whitebit.com/api/v4/main-account/address" \
  -H "Content-Type: application/json" \
  -H "X-TXC-APIKEY: YOUR_API_KEY" \
  -H "X-TXC-PAYLOAD: YOUR_PAYLOAD" \
  -H "X-TXC-SIGNATURE: YOUR_SIGNATURE" \
  -d '{
    "ticker": "BTC",
    "request": "/api/v4/main-account/address",
    "nonce": "YOUR_NONCE"
  }'

# Generate an ERC20 USDT deposit address
curl -X POST "https://whitebit.com/api/v4/main-account/address" \
  -H "Content-Type: application/json" \
  -H "X-TXC-APIKEY: YOUR_API_KEY" \
  -H "X-TXC-PAYLOAD: YOUR_PAYLOAD" \
  -H "X-TXC-SIGNATURE: YOUR_SIGNATURE" \
  -d '{
    "ticker": "USDT",
    "network": "ERC20",
    "request": "/api/v4/main-account/address",
    "nonce": "YOUR_NONCE"
  }'
For Go and PHP examples, see SDKs.

Unique address per user

The POST /api/v4/main-account/address endpoint above returns the same address for the same ticker and network combination on every call. For payment provider integrations that assign a unique deposit address per end user, use POST /api/v4/main-account/create-new-address instead — this endpoint generates a fresh address on every call. See the API Reference for the full specification.
The /create-new-address endpoint is not available by default. Contact support@whitebit.com to request access.
Required parameters:
ParameterTypeDescription
tickerstringCurrency ticker (e.g., BTC, ETH)
networkstringCryptocurrency network (e.g., ERC20, TRC20). Required for multi-network currencies.
Rate limit: 1,000 requests per 10 seconds.
# Generate a unique BTC deposit address
curl -X POST "https://whitebit.com/api/v4/main-account/create-new-address" \
  -H "Content-Type: application/json" \
  -H "X-TXC-APIKEY: YOUR_API_KEY" \
  -H "X-TXC-PAYLOAD: YOUR_PAYLOAD" \
  -H "X-TXC-SIGNATURE: YOUR_SIGNATURE" \
  -d '{
    "ticker": "BTC",
    "request": "/api/v4/main-account/create-new-address",
    "nonce": "YOUR_NONCE"
  }'
Which endpoint to use:
EndpointBehaviorBest for
POST /api/v4/main-account/addressReturns the same address for the same ticker + networkSingle-wallet setups, treasury management
POST /api/v4/main-account/create-new-addressGenerates a new address on every callPayment providers assigning one address per end user

Deposit lifecycle

After funds arrive at a generated deposit address, the deposit passes through a defined sequence of states before crediting to the Main balance.
  1. Address generated (POST /api/v4/main-account/address)
  2. Funds sent by the external party — mempool detection begins
  3. Confirmation tracking begins — deposit.accepted webhook fires, confirmations.actual < confirmations.required
  4. Confirmations reach the required threshold — deposit.updated webhook fires with updated confirmations.actual
  5. Deposit credited to Main balance — deposit.processed webhook fires — terminal success state
  6. OR: Deposit canceled — deposit.canceled webhook fires — terminal failure state
  7. OR (EEA/Turkey): Travel Rule hold — deposit frozen (status 27 or 28), see Travel Rule section below

Deposit status state machine

The deposit/withdraw history endpoint returns numeric status codes. The following table maps each code to the meaning and the corresponding webhook event.
Status CodeStateWebhook EventTerminal?Description
15Pendingdeposit.acceptedNoDeposit detected, awaiting confirmations
15Updateddeposit.updatedNoConfirmation count changed
3, 7Successfuldeposit.processedYesFunds credited to Main balance
4, 9Canceleddeposit.canceledYesDeposit canceled (refund may be available)
5Unconfirmed by userNoAwaiting user action
21Additional data requiredNoSystem requires additional information
22UncreditedNoDeposit detected but not yet credited
27Travel Rule frozenNoAwaiting Travel Rule verification (EEA/Turkey)
28Travel Rule processingNoTravel Rule data under review
Use POST /api/v4/main-account/history with transactionMethod: 1 and status filter to poll for deposits in specific states. Rate limit: 200 requests per 10 seconds.

Network confirmations

Each cryptocurrency network requires a different number of block confirmations before a deposit is credited.Webhook payloads include confirmations.actual and confirmations.required fields — use the confirmations.required value to determine when the deposit will complete. Query the Asset Status endpoint (GET /api/v4/public/assets) for per-currency confirmation requirements.Confirmation requirements vary by currency and network. Do not hardcode specific numbers — always retrieve the current values from the Asset Status endpoint.

Required endpoints for deposits

EndpointPurposeAPI Reference
POST /api/v4/main-account/create-new-addressGenerate a unique deposit address per userCreate New Address
Webhooks (deposit.accepted, deposit.updated, deposit.processed)Deposit status notificationsWebhooks
POST /api/v4/main-account/historyQuery deposit and withdrawal historyHistory
POST /api/v4/main-account/balanceCheck Main balanceMain Balance
POST /api/v4/main-account/feeAvailable currencies, networks, and deposit limitsGet Fees
For integrations that use a single persistent deposit address instead of unique addresses per user, substitute POST /api/v4/main-account/address (API Reference) for the /create-new-address endpoint.

Travel Rule (EEA and Turkey)

Since May 19, 2025, inbound crypto deposits for EEA and Turkey accounts are placed on hold until Travel Rule verification completes.
  • Status 27 (DEPOSIT_TRAVEL_RULE_FROZEN): deposit frozen, awaiting Travel Rule data from the account holder
  • Status 28 (DEPOSIT_TRAVEL_RULE_FROZEN_PROCESSING): Travel Rule data submitted, under review by WhiteBIT
Travel Rule verification for deposits requires the account holder to submit data through the WhiteBIT web interface. The API does not provide an endpoint to submit Travel Rule data for incoming deposits. Inform end users that frozen deposits require manual action at whitebit.com.
See Regulatory Compliance for the full Travel Rule reference. See the Travel Rule help center article for the complete requirements.

Webhook reconciliation

Reliable fund tracking requires both webhook-based and polling-based reconciliation. Primary method — webhooks for real-time notifications:
  • Configure the webhook URL in API key settings (see Webhooks)
  • Verify the HMAC-SHA512 signature on every incoming webhook (X-TXC-SIGNATURE header) — see Security Best Practices for the verification algorithm
  • Track the nonce field — each webhook nonce is strictly greater than the previous
Retry policy: 5 retries at 10-minute intervals = 50 minutes of delivery coverage. Fallback method — poll POST /api/v4/main-account/history:
  • Use transactionMethod: 1 for deposits, transactionMethod: 2 for withdrawals
  • Filter by status array for specific states
  • Recommended polling interval: every 5 minutes for active monitoring
  • Rate limit: 200 requests per 10 seconds
Deduplication: Use the uniqueId from webhook payloads and history responses to deduplicate across webhook and polling paths.
WhiteBIT does not offer a webhook replay mechanism. Implement polling as a fallback for outages longer than 50 minutes. Store all processed uniqueId values to prevent double-processing.
Reconciliation pattern:
  1. Receive webhook — verify signature — extract uniqueId and status
  2. Store the event with uniqueId as the idempotency key
  3. On polling cycle: query the history endpoint — compare uniqueId values against stored events
  4. Process any events found via polling that the webhook path did not deliver
  5. Mark transactions as complete only when a terminal status is reached (3/7 for success, 4/9 for canceled deposits, 4 for canceled withdrawals)

What’s Next

Webhooks

Full webhook setup, event types, and signature verification.

Convert

Conversion estimate and confirm flow, parameters, and history.

Regulatory Compliance

MiCA restrictions, Travel Rule requirements, and regional considerations.

Security Best Practices

API key management, IP whitelisting, and secret storage.