CryptoConnect Integration for MoR Mode
• This guide provides the end-to-end workflow for MOR mode integration with CryptoConnect.
• Before starting the integration, confirm your operating model: MoR (Merchant of Record) or Gateway Mode. Refer to the official documentation for guidance: Determine Your Integration Model.
Generate a Wallet Address
This section explains how to generate and retrieve crypto wallet addresses for your users, which is the first step in enabling crypto deposits.
Step 1 — Create a new wallet
Use the Create a wallet API to generate a new CryptoConnect wallet for a user. This API returns a unique wallet ID that will be used in all subsequent operations.
Tip: You can assign a nickname to the wallet during creation to simplify management.
Request Example
# Replace ${YOUR_API_ACCESS_TOKEN} with your API access token.
curl --request POST \
--url https://api-sandbox.interlace.money/open-api/v3/cryptoconnect/wallets \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'x-access-token: ${YOUR_API_ACCESS_TOKEN}' \
--data '{
"referenceId": "92a86ee7-5bb7-4272-afdb-3865bea9a2d5",
"accountId": "b27c8873-e400-47cd-adc1-035cfa0d5347",
"nickname": "Developer"
}'Response Example
{
"code": "000000",
"message": "success",
"data": {
"id": "60c667cd-06f4-48c0-85ca-24e570097685",
"referenceId": "92a86ee7-5bb7-4272-afdb-3865bea9a2d5",
"accountId": "b27c8873-e400-47cd-adc1-035cfa0d5347",
"nickname": "Developer",
"master": false,
"balances": [
{
"currency": "USDC",
"available": "0",
"frozen": "0"
},
{
"currency": "USDT",
"available": "0",
"frozen": "0"
}
],
"addresses": []
}
}Step 2 — Get a wallet address
Use the Get a wallet API to fetch wallet details, including balance and available addresses.
Note: The request must include the wallet ID parameter.
Request Example
# Replace ${YOUR_API_ACCESS_TOKEN} with your API access token.
curl --request GET \
--url https://api-sandbox.interlace.money/open-api/v3/cryptoconnect/wallets/60c667cd-06f4-48c0-85ca-24e570097685 \
--header 'accept: application/json' \
--header 'x-access-token: ${YOUR_API_ACCESS_TOKEN}'Response Example
{
"code": "000000",
"message": "success",
"data": {
"id": "60c667cd-06f4-48c0-85ca-24e570097685",
"referenceId": "92a86ee7-5bb7-4272-afdb-3865bea9a2d5",
"accountId": "b27c8873-e400-47cd-adc1-035cfa0d5347",
"nickname": "Developer",
"master": false,
"balances": [
{
"currency": "USDC",
"available": "0",
"frozen": "0"
},
{
"currency": "USDT",
"available": "0",
"frozen": "0"
}
],
"addresses": []
}
}Step 3 — Generate an additional address (optional)
If no address is available, or if you need an address on a different blockchain, use the Create a blockchain address API to generate a new one.
Request Example
# Replace ${YOUR_API_ACCESS_TOKEN} with your API access token.
curl --request POST \
--url https://api-sandbox.interlace.money/open-api/v3/cryptoconnect/wallets/60c667cd-06f4-48c0-85ca-24e570097685/addresses \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'x-access-token: ${YOUR_API_ACCESS_TOKEN}' \
--data '{
"currency": "USDC",
"chain": "ETH"
}'Response Example
{
"code": "000000",
"message": "success",
"data": {
"currency": "USDC",
"chain": "ETH",
"address": "0xd8b5f8e714d70e5cff389c5c2bf51d27e61c92c2",
"selected": true
}
}Deposit Crypto to Infinity Account
After receiving the deposit webhook notification, use the Intra-account business transfer API to move USD/USDC/USDT/WUSD into your Infinity Account.
Step 1 — Get infinity account wallet
Use the List wallets API to retrieve details for wallets associated with an Infinity Account.
Request Example
# Replace ${YOUR_API_ACCESS_TOKEN} with your API access token.
curl --request GET \
--url https://api-sandbox.interlace.money/open-api/v3/cards/wallets?accountId=b27c8873-e400-47cd-adc1-035cfa0d5347&walletType=0 \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'x-access-token: ${YOUR_API_ACCESS_TOKEN}'Response Example
{
"code": "000000",
"message": "success",
"data": {
"list": [
{
"id": "63b2af21-1e8c-407b-8df9-10adc05963aa",
"accountId": "b27c8873-e400-47cd-adc1-035cfa0d5347",
"createTime": "1700620189590",
"currency": "USD",
"walletType": 0,
"available": "56846.52"
}
],
"total": "1"
}
}Step 2 — Deposit Crypto to Infinity Account
use the Intra-account business transfer API to move USD/USDC/USDT/WUSD into your Infinity Account.
Request Example
# Replace ${YOUR_API_ACCESS_TOKEN} with your API access token.
curl --request POST \
--url https://api-sandbox.interlace.money/open-api/v3/business/transfer/internal \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'x-access-token: ${YOUR_API_ACCESS_TOKEN}' \
--data '{
"clientTransactionId": "a0f57479-8218-4844-bec6-e819a38af55a",
"accountId": "b27c8873-e400-47cd-adc1-035cfa0d5347",
"from": {
"businessType": 2,
"id": "32aae8b7-4a69-474f-b7d5-337e190af878",
"currency": "USDC"
},
"to": {
"businessType": 0,
"currency": "USD",
"id": "63b2af21-1e8c-407b-8df9-10adc05963aa"
},
"amount": "10"
}'Response Example
{
"code": "000000",
"message": "success",
"data": {
"clientTransactionId": "a0f57479-8218-4844-bec6-e819a38af55a",
"id": "1986315238040416258",
"status": "CLOSED",
"accountTransferType": "SAME_ACCOUNT",
"from": {
"id": "32aae8b7-4a69-474f-b7d5-337e190af878",
"transferId": "33dd4cfb-ab69-4fd3-b472-358c89f2acb9",
"accountId": "b27c8873-e400-47cd-adc1-035cfa0d5347",
"amount": "10",
"rate": 1.00,
"currency": "USDC",
"businessType": 2,
"fees": [
{
"feeType": 6,
"amount": "0.05",
"currency": "USDC"
}
]
},
"to": {
"id": "63b2af21-1e8c-407b-8df9-10adc05963aa",
"transferId": "bf7dc081-947e-4eb7-96a2-06fa249516e8",
"accountId": "b27c8873-e400-47cd-adc1-035cfa0d5347",
"amount": "9.95",
"currency": "USD",
"businessType": 0,
"fees": [
{
"feeType": 0,
"amount": "0",
"currency": "USD"
}
]
}
}
}Convert & Withdraw Crypto (Redemption and Withdrawal)
To withdraw funds from your Infinity Account to an external wallet, follow these steps.
Step 1 — Move USD from Infinity Account to CryptoConnect Wallet
Use the Intra-account business transfer API to transfer USD from your Infinity Account into your CryptoConnect Wallet.
Request Example
# Replace ${YOUR_API_ACCESS_TOKEN} with your API access token.
curl --request POST \
--url https://api-sandbox.interlace.money/open-api/v3/business/transfer/internal \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'x-access-token: ${YOUR_API_ACCESS_TOKEN}' \
--data '{
"clientTransactionId": "24ec3603-293b-4f53-8d4d-ed68a3e40828",
"accountId": "b27c8873-e400-47cd-adc1-035cfa0d5347",
"from": {
"businessType": 0,
"currency": "USD",
"id": "63b2af21-1e8c-407b-8df9-10adc05963aa"
},
"to": {
"businessType": 2,
"id": "b27c8873-e400-47cd-adc1-035cfa0d5347",
"currency": "USD"
},
"amount": "10"
}'Response Example
{
"code": "000000",
"message": "success",
"data": {
"clientTransactionId": "24ec3603-293b-4f53-8d4d-ed68a3e40828",
"id": "1986330518716162050",
"status": "CLOSED",
"accountTransferType": "SAME_ACCOUNT",
"from": {
"id": "63b2af21-1e8c-407b-8df9-10adc05963aa",
"transferId": "984ccaad-b018-42cf-acc7-c1a74ec85fd9",
"accountId": "b27c8873-e400-47cd-adc1-035cfa0d5347",
"amount": "10",
"rate": 1,
"currency": "USD",
"businessType": 0,
"fees": [
{
"feeType": 0,
"amount": "0",
"currency": "USD"
}
]
},
"to": {
"id": "b27c8873-e400-47cd-adc1-035cfa0d5347",
"transferId": "0875ddd2-d375-4d70-9204-ab6a681a99c7",
"accountId": "b27c8873-e400-47cd-adc1-035cfa0d5347",
"amount": "10",
"currency": "USD",
"businessType": 2,
"fees": []
}
}
}Step 2 — Preview exchange rates and fees (optional)
Use the Get an estimate quote API to check rates and fees before conversion.
Note: If skipped, the system will automatically request a quote in Step 3.
Request Example
# Replace ${YOUR_API_ACCESS_TOKEN} with your API access token.
curl --request POST \
--url https://api-sandbox.interlace.money/open-api/v3/cryptoconnect/convert/estimate-quote \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'x-access-token: ${YOUR_API_ACCESS_TOKEN}' \
--data '{
"accountId": "b27c8873-e400-47cd-adc1-035cfa0d5347",
"baseCurrency": "USDC",
"quoteCurrency": "USD",
"side": "BUY",
"rfqCurrency": "USD",
"rfqAmount": "10"
}'Response Example
{
"code": "000000",
"message": "success",
"data": {
"id": "4ee15a1c-ade4-4e99-9222-661f33c0a7fe",
"quoteTime": "1762413531106",
"baseCurrency": "USDC",
"baseAmount": "9.95",
"quoteCurrency": "USD",
"quoteAmount": "10",
"side": "BUY",
"rate": "1",
"rfqAmount": "10",
"rfqCurrency": "USD",
"fee": "0.05",
"feeCurrency": "USD",
"ttlMs": "60000"
}
}Step 3 — Convert USD to Crypto
Use the Create a trade API to exchange USD for USDC/USDT/WUSD.
Note:
- Currently only conversions between USD ↔ USDC/USDT/WUSD and USDC ↔ USDT are supported.
- For detailed instructions on using this endpoint, please refer to our official guide: Converting USD to Cryptocurrency
Request Example
# Replace ${YOUR_API_ACCESS_TOKEN} with your API access token.
curl --request POST \
--url https://api-sandbox.interlace.money/open-api/v3/cryptoconnect/convert/trades \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'x-access-token: ${YOUR_API_ACCESS_TOKEN}' \
--data '{
"referenceId": "590a3852-f1aa-494f-a6d5-a3d13a715f70",
"accountId": "b27c8873-e400-47cd-adc1-035cfa0d5347",
"baseCurrency": "USDC",
"quoteCurrency": "USD",
"side": "BUY",
"rfqCurrency": "USD",
"rfqAmount": "10"
}'Response Example
{
"code": "000000",
"message": "success",
"data": {
"id": "d8ffbe31-e3d2-4615-9e13-0cae46d09b75",
"accountId": "b27c8873-e400-47cd-adc1-035cfa0d5347",
"symbol": "USDC-USD",
"baseWalletId": "32aae8b7-4a69-474f-b7d5-337e190af878",
"baseCurrency": "USDC",
"baseAmount": "9.95",
"quoteCurrency": "USD",
"quoteAmount": "10",
"side": "BUY",
"rate": "1",
"fee": "0.05",
"feeCurrency": "USD",
"status": "COMPLETE",
"referenceId": "590a3852-f1aa-494f-a6d5-a3d13a715f70",
"createTime": "1762413577403",
"completeTime": "1762413578326"
}
}Step 4 — Preview withdrawal fees (optional)
Use the Get transfer fee API to check fees before withdrawal.
Note: If skipped, fees will be retrieved automatically in Step 5.
Request Example
# Replace ${YOUR_API_ACCESS_TOKEN} with your API access token.
curl --request POST \
--url https://api-sandbox.interlace.money/open-api/v3/cryptoconnect/transfers/fee-and-quota \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'x-access-token: ${YOUR_API_ACCESS_TOKEN}' \
--data '{
"accountId": "b27c8873-e400-47cd-adc1-035cfa0d5347",
"source": {
"type": "WALLET",
"id": "32aae8b7-4a69-474f-b7d5-337e190af878"
},
"destination": {
"type": "BLOCKCHAIN",
"chain": "ARB",
"address": "0x89F9Cfaa0dA076351DdfC6E320bD8df8b538dB17"
},
"amount": {
"currency": "USDC",
"amount": "10"
}
}'Response Example
{
"code": 0,
"message": "ok",
"data": {
"crossChainQuota": "10000",
"crossChainFeeRate": "0.003",
"crossChainAmount": "0",
"fees": [
{
"amount": "0.2",
"currency": "USDC",
"type": "GAS"
}
]
}
}Step 5 — Withdraw Crypto
Use the Create a blockchain transfer API to withdraw crypto to an external wallet.
Note: Ensure that both the wallet address and the blockchain network are correctly specified before initiating the withdrawal.
Withdrawal Status Flow 💰
-
When you initiate a withdrawal, Interlace first receives the request and assigns it a status of Pending, with the
transactionHashset to null. This indicates that your request has been accepted and the on-chain transfer process has started. -
Once the transaction is broadcast, Interlace monitors its progress. The status will update to Closed after 30 block confirmations, and a valid
transactionHashwill be available. -
You can use this
transactionHashto track the transfer directly on-chain, for example via Etherscan's tracker on Sepolia.
Request Example
# Replace ${YOUR_API_ACCESS_TOKEN} with your API access token.
curl --request POST \
--url https://api-sandbox.interlace.money/open-api/v3/cryptoconnect/transfers \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'x-access-token: ${YOUR_API_ACCESS_TOKEN}' \
--data '{
"idempotencyKey": "bfafe401-a54d-445a-a6c5-4b407b68a2cc",
"source": {
"type": "cryptoconnect_wallet",
"id": "32aae8b7-4a69-474f-b7d5-337e190af878"
},
"destination": {
"type": "blockchain",
"chain": "ETH",
"address": "0x89F9Cfaa0dA076351DdfC6E320bD8df8b538dB17"
},
"amount": {
"amount": "9.95",
"currency": "USDC"
}
}'Response Example
{
"code": 0,
"message": "ok",
"data": {
"id": "aba46642-edcf-4faa-8942-7d63c967fb07",
"accountId": "b27c8873-e400-47cd-adc1-035cfa0d5347",
"idempotencyKey": "bfafe401-a54d-445a-a6c5-4b407b68a2cc",
"source": {
"type": "cryptoconnect_wallet",
"id": "32aae8b7-4a69-474f-b7d5-337e190af878"
},
"destination": {
"type": "blockchain",
"chain": "ETH",
"address": "0x89F9Cfaa0dA076351DdfC6E320bD8df8b538dB17"
},
"amount": {
"amount": "9.95",
"currency": "USDC"
},
"fees": [
{
"amount": "0.2",
"currency": "USDC",
"type": "GAS"
}
],
"status": "Pending",
"createTime": "1758276661923",
"updateTime": "1758276662488"
}
}🎉 Congratulations! The cryptocurrency transfer has been successfully completed using Interlace APIs.
Updated 3 days ago