Overview
On-chain deposits let your users send crypto over a blockchain network to a deposit address held in custody by DCS. Once credited, the funds appear in the user’s dedicated account balance at DCS (availableBalance) and can be spent with a linked card. The whole flow runs on the blockchain, so no partner float or intermediary funding is required. As a licensed issuer with its own BINs, DCS handles on-chain monitoring, confirmation, and crediting on your behalf, turning “crypto → available balance → card payment” into a single path.
The flow is: the user sends crypto in → the platform monitors and confirms it → the funds are credited as available balance.
Two core steps:
- Call
GET /crypto/v2/deposit-address(recommended) to obtain the user’s deposit address on the chosen chain and token; no address is returned when the chain or token is unsupported or deposits are disabled. - The user transfers to that address; the platform monitors the on-chain transaction, credits the funds once the confirmation count is reached, and pushes
ORDER_STATUSover webhook and WebSocket.
Prerequisites
Before making an on-chain deposit, the user must complete the following compliance steps. Otherwise no deposit address can be issued and no funds can be credited:Key concepts
Chain model
The chain model means the user moves crypto directly over a blockchain network by transferring it to an on-chain address issued by the platform (an inbound deposit). The platform keeps the whole flow traceable through the blockchain transaction hash (txHash).
Deposit address
The receiving address the platform allocates to a user for a specific chain and token. Any transfer of the matching asset to that address counts as a deposit into the user’s DCS account.Confirmation
An on-chain transaction must reach a certain number of block confirmations before it is treated as final. DCS configures the required count per chain, and it varies by chain; no endpoint returns it, so confirm with DCS if you need to show it to users.API flow
Endpoints in detail
Step 1: obtain the deposit address
Query parameters:GET /crypto/v2/deposit-address — data fields:
Request example (placeholders/redacted; for authentication headers see Integration Resources · Authentication guide):fxRate(conversion rate) lets you show a converted amount, andstatustells you whether the address is ready. The minimum deposit and confirmation count are not returned here. When the chain or token does not exist,datais empty; when deposits are disabled for it, the error codeNETWORK_COIN_CONFIG_NOT_SUPPORTEDis returned.
The response envelope is the same across the documentation:{ code, message, messageDetail, data }(nosuccessboolean).messageDetailis normallynull; when populated it is an object{message, title, type, icon, action, linkTitle, linkUrl}. The success value ofcodeisSYS_SUCCESS(identical in both integration models).
What happens once the funds arrive
- User transfer: the user sends crypto of the matching chain and token to the deposit address, producing a transaction hash
txHashon-chain. - Platform monitoring: DCS watches the blockchain network and waits for the transaction to reach the confirmation count that chain requires.
- Crediting: once the confirmation count is reached, the funds are credited to the user’s account balance at DCS (the dedicated account
availableBalance). - Status push: DCS pushes
ORDER_STATUSorder status changes in real time over webhook and WebSocket (see Integration Resources · WebSocket real-time push). - Partner query: the partner can call
GET /card/v1/fiat/transactions?externalUserId=...at any time to retrieve deposit and fiat transaction records and reconcile what was credited.
fiat/transactions, the on-chain details sit in the transferDetails sub-object, which contains channelCode, txnAmt, txnCcy, sender, receiving, timeStamp, txHash, network, and asset.
Real-time push is the proactive “funds credited” notification;fiat/transactionsis the on-demand reconciliation query. Use both: let WebSocket drive UI updates and usefiat/transactionsfor final reconciliation.
Time to credit: deposits in DPT mode are typically credited in about 2 minutes (after the on-chain confirmation count is reached). Actual timing varies with network congestion and the required confirmation count; treat the WebSocket push and the status in
fiat/transactions as authoritative.Supported chain and token matrix
The supported chains and tokens are whateverGET /crypto/v2/deposit-address can return an address for; the configuration changes with the business, so do not hard-code a static list.
Simulating a deposit in the sandbox
To test the on-chain deposit and crediting flow, use the simulation endpoint to create a credit directly:When filling this in, setaddressto the deposit address obtained in step 3.chainandcurrencycurrently support only two pairs:TRON+USDTandEthereum+USDC. Simulated deposits work in the sandbox only, and exist to trigger crediting and theORDER_STATUSpush (webhook and WebSocket) so you can verify your integration; the endpoint returns the simulatedtxHash. For an overview of the simulation endpoints and other sandbox capabilities, see Simulating Transactions.
Error handling
Request the full error code dictionary from the DCS team; for any specific failure, thecodeandmessagereturned by the API are authoritative.
Next steps
- For real-time credit notifications, see Integration Resources · WebSocket real-time push

