Skip to main content

Cross-chain API

Transfer USDC tokens seamlessly across multiple EVM chains (Sepolia, Amoy, Neon) using burn-and-mint mechanism with automated bridge operations.

📋 Complete Network Details: For comprehensive network configurations, USDC contracts, and chain specifications, see USDC and Chains Guide.

Chain Normalization​

The API uses internal chain normalization for processing:

Input ChainNormalized ChainNetworkNative TokenChain ID
sepoliaEthereumSepolia TestnetETH11155111
amoyPolygonPolygon AmoyPOL80002
neonNeonNeon EVMNEON245022926

Initiate Cross-chain Transfer​

POST/api/crosschain/initiate

Initiate Cross-chain Transfer

Start a cross-chain transfer by creating a burn log. This is the first step in the burn-and-mint bridge process.

Parameters

user_idnumberrequired

User ID initiating the transfer

amountstringrequired

Amount of USDC to transfer

from_chainstringrequired

Source chain (sepolia, amoy, neon)

to_chainstringrequired

Destination chain (sepolia, amoy, neon)

tokenstringrequired

Token symbol (USDC)

recipient_addressstringrequired

Recipient wallet address on destination chain

return_addressstring

Return address on source chain (for failed transfers)

Request Body

{
  "user_id": 123,
  "amount": "50.00",
  "from_chain": "sepolia",
  "to_chain": "amoy",
  "token": "USDC",
  "recipient_address": "0x742d35Cc6834C0532925a3b8D93b3C3e1DEF3e4D",
  "return_address": "0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359"
}

Response

200Transfer initiated successfully
{
  "success": true,
  "data": {
    "log_id": "550e8400-e29b-41d4-a716-446655440000",
    "nonce": "nonce_1734567890123",
    "amount": "50.00",
    "from_chain": "Ethereum",
    "to_chain": "Polygon",
    "token": "USDC",
    "recipient_address": "0x742d35Cc6834C0532925a3b8D93b3C3e1DEF3e4D",
    "return_address": "0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359",
    "status": "INITIATED",
    "created_at": "2024-01-15T10:30:00Z"
  },
  "message": "Crosschain transfer log created successfully"
}
400Invalid transfer parameters
{
  "error": "Token USDC is not supported on Polygon."
}
curl -X POST https://api.brdz.link/api/crosschain/initiate \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
  "user_id": 123,
  "amount": "50.00",
  "from_chain": "sepolia",
  "to_chain": "amoy",
  "token": "USDC",
  "recipient_address": "0x742d35Cc6834C0532925a3b8D93b3C3e1DEF3e4D",
  "return_address": "0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359"
}'

Confirm Transfer (Update Burn Status)​

PATCH/api/crosschain/confirm

Confirm Transfer

Update transfer log after burn transaction is completed. Provides transaction hash and status update.

Parameters

log_idstringrequired

Transfer log ID from initiate response

tx_hashstringrequired

Transaction hash of the burn transaction

statusstringrequired

Transaction status (BURNED, FAILED)

Request Body

{
  "log_id": "550e8400-e29b-41d4-a716-446655440000",
  "tx_hash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
  "status": "BURNED"
}

Response

200Transfer confirmed successfully
{
  "success": true,
  "data": {
    "log_id": "550e8400-e29b-41d4-a716-446655440000",
    "tx_hash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
    "status": "BURNED",
    "updated_at": "2024-01-15T10:35:00Z"
  },
  "message": "Crosschain log updated successfully"
}
400Invalid confirmation data
{
  "error": "Missing log_id, tx_hash or status"
}
curl -X PATCH https://api.brdz.link/api/crosschain/confirm \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
  "log_id": "550e8400-e29b-41d4-a716-446655440000",
  "tx_hash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
  "status": "BURNED"
}'

Mint Tokens​

POST/api/crosschain/mint

Mint Tokens

Mint tokens on the destination chain after successful burn. This completes the cross-chain transfer.

Parameters

noncestringrequired

Unique nonce from the transfer log

Request Body

{
  "nonce": "nonce_1734567890123"
}

Response

200Tokens minted successfully
{
  "success": true,
  "tx_hash": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
  "mint_tx_hash": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
  "log_id": "550e8400-e29b-41d4-a716-446655440000",
  "nonce": "nonce_1734567890123",
  "status": "MINTED",
  "data": {
    "log_id": "550e8400-e29b-41d4-a716-446655440000",
    "status": "MINTED",
    "mint_tx_hash": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
    "updated_at": "2024-01-15T10:38:00Z"
  }
}
400Mint failed
{
  "error": "Already minted"
}
404Bridge log not found
{
  "error": "Bridge log not found"
}
curl -X POST https://api.brdz.link/api/crosschain/mint \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "x-api-key: YOUR_API_KEY" \
-d '{"nonce": "nonce_1734567890123"}'

Get USDC Balance​

GET/api/crosschain/balance/{chain}/{address}

Get USDC Balance

Check USDC balance on a specific chain for a given wallet address.

Parameters

chainstringrequired

Chain ID (sepolia, amoy, neon) - path parameter

addressstringrequired

Wallet address to check balance for - path parameter

contract_addressstring

USDC contract address (query parameter) - optional, uses environment default if not provided

Response

200Balance retrieved successfully
{
  "chain": "sepolia",
  "address": "0x742d35Cc6834C0532925a3b8D93b3C3e1DEF3e4D",
  "balance": "125.50",
  "contract_address": "0x9BF350fBaaA8c7200990B051809334c90778f435",
  "source": "environment"
}
400Invalid chain or address
{
  "error": "Invalid wallet address"
}
curl -X GET https://api.brdz.link/api/crosschain/balance/sepolia/0x742d35Cc6834C0532925a3b8D93b3C3e1DEF3e4D \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "x-api-key: YOUR_API_KEY"

# With custom contract address
curl -X GET "https://api.brdz.link/api/crosschain/balance/sepolia/0x742d35Cc6834C0532925a3b8D93b3C3e1DEF3e4D?contract_address=0x9BF350fBaaA8c7200990B051809334c90778f435" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "x-api-key: YOUR_API_KEY"

Test Mint (Testnet Only)​

POST/api/crosschain/test-mint

Test Mint USDC

Mint test USDC tokens for development and testing purposes. Available on testnets only.

Parameters

chainstringrequired

Chain to mint on (sepolia, amoy, neon)

addressstringrequired

Recipient wallet address

amountstringrequired

Amount of USDC to mint

modestring

Mint mode (manual, metamask) - default: manual

Request Body

{
  "chain": "sepolia",
  "address": "0x742d35Cc6834C0532925a3b8D93b3C3e1DEF3e4D",
  "amount": "100.00",
  "mode": "manual"
}

Response

200Test tokens minted successfully
{
  "success": true,
  "tx_hash": "0xtest1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
  "mode": "manual",
  "address": "0x742d35Cc6834C0532925a3b8D93b3C3e1DEF3e4D",
  "chain": "sepolia"
}
400Test mint failed
{
  "error": "Invalid wallet address format"
}
curl -X POST https://api.brdz.link/api/crosschain/test-mint \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
  "chain": "sepolia",
  "address": "0x742d35Cc6834C0532925a3b8D93b3C3e1DEF3e4D",
  "amount": "100.00",
  "mode": "manual"
}'

Burn Tokens (Backend/MetaMask)​

POST/api/crosschain/burn

Burn Tokens

Execute burn transaction either via backend hot wallet or confirm MetaMask transaction.

Parameters

log_idstringrequired

Transfer log ID from initiate response

noncestringrequired

Unique nonce from transfer log

tx_hashstring

Transaction hash (required for metamask mode)

modestring

Burn mode (backend, metamask) - default: backend

Request Body

{
  "log_id": "550e8400-e29b-41d4-a716-446655440000",
  "nonce": "nonce_1734567890123",
  "mode": "backend"
}

Response

200Burn transaction successful
{
  "success": true,
  "data": {
    "log_id": "550e8400-e29b-41d4-a716-446655440000",
    "tx_hash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
    "status": "BURNED",
    "updated_at": "2024-01-15T10:35:00Z"
  }
}
400Burn failed
{
  "error": "Invalid status. Burn already executed or failed."
}
# Backend mode
curl -X POST https://api.brdz.link/api/crosschain/burn \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
  "log_id": "550e8400-e29b-41d4-a716-446655440000",
  "nonce": "nonce_1734567890123",
  "mode": "backend"
}'

# MetaMask mode
curl -X POST https://api.brdz.link/api/crosschain/burn \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
  "log_id": "550e8400-e29b-41d4-a716-446655440000",
  "nonce": "nonce_1734567890123",
  "tx_hash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
  "mode": "metamask"
}'

Burn Tokens (Frontend Wallet)​

POST/api/crosschain/burn-frontend

Burn Tokens with Frontend Wallet

Execute burn transaction using frontend wallet private key. Use with caution - private keys should be handled securely.

Parameters

log_idstringrequired

Transfer log ID from initiate response

noncestringrequired

Unique nonce from transfer log

private_keystringrequired

Private key of the wallet to execute burn transaction

Request Body

{
  "log_id": "550e8400-e29b-41d4-a716-446655440000",
  "nonce": "nonce_1734567890123",
  "private_key": "0x..."
}

Response

200Frontend burn successful
{
  "success": true,
  "tx_hash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
  "log_id": "550e8400-e29b-41d4-a716-446655440000",
  "nonce": "nonce_1734567890123",
  "status": "BURNED",
  "data": {
    "log_id": "550e8400-e29b-41d4-a716-446655440000",
    "tx_hash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
    "status": "BURNED",
    "updated_at": "2024-01-15T10:35:00Z"
  }
}
400Frontend burn failed
{
  "error": "Invalid status. Burn already executed or failed."
}
curl -X POST https://api.brdz.link/api/crosschain/burn-frontend \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
  "log_id": "550e8400-e29b-41d4-a716-446655440000",
  "nonce": "nonce_1734567890123",
  "private_key": "0x..."
}'

Get Cross-chain Transaction History​

GET/api/crosschain/history/{user_id}

Get Cross-chain Transaction History

Retrieve user's cross-chain transaction history with pagination and filtering options.

Parameters

user_idnumberrequired

User ID to get history for (path parameter)

limitnumber

Maximum records to return (1-100, default: 50)

offsetnumber

Records to skip for pagination (default: 0)

from_chainstring

Filter by source chain (sepolia, amoy, neon)

to_chainstring

Filter by destination chain (sepolia, amoy, neon)

statusstring

Filter by status (INITIATED, BURNED, MINTED, FAILED)

Response

200Transaction history retrieved
{
  "success": true,
  "message": "Crosschain transaction history retrieved successfully",
  "data": {
    "user_id": 123,
    "transactions": [
      {
        "log_id": "550e8400-e29b-41d4-a716-446655440000",
        "nonce": "nonce_1734567890123",
        "user_id": 123,
        "amount": "50.00",
        "token": "USDC",
        "from_chain": "Ethereum",
        "to_chain": "Polygon",
        "status": "MINTED",
        "recipient_address": "0x742d35Cc6834C0532925a3b8D93b3C3e1DEF3e4D",
        "burn_tx_hash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
        "mint_tx_hash": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
        "created_at": "2024-01-15T10:30:00Z",
        "updated_at": "2024-01-15T10:38:00Z"
      }
    ],
    "pagination": {
      "total_count": 15,
      "limit": 50,
      "offset": 0,
      "has_more": false
    },
    "filters_applied": {
      "from_chain": null,
      "to_chain": null,
      "status": null
    }
  },
  "timestamp": "2024-01-15T10:40:00Z"
}
403Access denied
{
  "success": false,
  "error": {
    "code": "ACCESS_DENIED",
    "message": "You can only access your own crosschain transaction history",
    "details": "Insufficient permissions"
  },
  "timestamp": "2024-01-15T10:40:00Z"
}
curl -X GET "https://api.brdz.link/api/crosschain/history/123?limit=10&status=MINTED" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "x-api-key: YOUR_API_KEY"

Get Cross-chain Transaction Details​

GET/api/crosschain/details/{log_id}

Get Cross-chain Transaction Details

Get detailed information about a specific cross-chain transfer by log ID.

Parameters

log_idstringrequired

Transfer log ID (UUID) - path parameter

Response

200Transaction details retrieved
{
  "success": true,
  "message": "Crosschain transaction details retrieved successfully",
  "data": {
    "transaction": {
      "log_id": "550e8400-e29b-41d4-a716-446655440000",
      "nonce": "nonce_1734567890123",
      "user_id": 123,
      "amount": "50.00",
      "token": "USDC",
      "from_chain": "Ethereum",
      "to_chain": "Polygon",
      "status": "MINTED",
      "recipient_address": "0x742d35Cc6834C0532925a3b8D93b3C3e1DEF3e4D",
      "return_address": "0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359",
      "burn_tx_hash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
      "mint_tx_hash": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
      "created_at": "2024-01-15T10:30:00Z",
      "updated_at": "2024-01-15T10:38:00Z"
    },
    "requested_by": 123,
    "access_level": "user"
  },
  "timestamp": "2024-01-15T10:40:00Z"
}
404Transaction not found
{
  "success": false,
  "error": {
    "code": "TRANSACTION_NOT_FOUND",
    "message": "Crosschain transaction not found or access denied",
    "details": "Transaction may not exist or you may not have permission to view it"
  },
  "timestamp": "2024-01-15T10:40:00Z"
}
curl -X GET https://api.brdz.link/api/crosschain/details/550e8400-e29b-41d4-a716-446655440000 \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "x-api-key: YOUR_API_KEY"

Supported Chains & Tokens​

Blockchain Networks​

Chain IDNormalizedNetworkNative TokenChain IDUSDC Contract
sepoliaEthereumSepolia TestnetETH111551110x9BF350fBaaA8c7200990B051809334c90778f435
amoyPolygonPolygon AmoyPOL800020xC15239B6B9012F3225f9ebC091C7CE85FF31b983
neonNeonNeon EVMNEON2450229260xB5234C0418402775bCA3f73c4B0B5bDd906FCA11

Bridge Contracts​

NetworkBridge Contract
Sepolia0x432a3Ab53BEe8657cD5E26Bd9A7251Bbd19B3Fb1
Polygon Amoy0xb04EBd1cE956E5576c5A7A02f74E3DdCFeee564AF
Neon EVM0xF0E6D21447281D3a858B6Bfee045D5c48D2E6065

Transfer Routes​

All chains support bidirectional transfers:

  • Sepolia ↔ Amoy - ETH ecosystem ↔ Polygon ecosystem
  • Sepolia ↔ Neon - ETH ecosystem ↔ Solana-compatible EVM
  • Amoy ↔ Neon - Polygon ecosystem ↔ Solana-compatible EVM

Cross-chain Transfer Flow​

Complete Transfer Process​

  1. Initiate: Call /crosschain/initiate with transfer details
  2. Burn: Execute burn transaction (backend, MetaMask, or frontend wallet)
  3. Mint: Call /crosschain/mint with nonce to complete transfer

Transfer States​

StatusDescriptionNext Action
INITIATEDTransfer initiated, waiting for burnExecute burn transaction
BURNEDBurn transaction confirmedCall mint endpoint
MINTEDTransfer successfully completedNone
FAILEDTransfer failed at some stepContact support

Burn Modes​

ModeDescriptionUse Case
backendBackend executes burn with hot walletAutomated transfers
metamaskUser burns via MetaMask, confirms with tx hashUser-controlled transfers
frontendFrontend executes burn with provided private keyAdvanced wallet integration

Estimated Times​

  • Sepolia → Amoy: ~5-8 minutes
  • Amoy → Neon: ~3-6 minutes
  • Sepolia → Neon: ~6-10 minutes

Times may vary based on network congestion


Development Testing

Use /crosschain/test-mint to get test USDC tokens for development and testing cross-chain transfers.

Transfer Limits
  • Minimum transfer: 1.00 USDC
  • Maximum transfer: 10,000.00 USDC per transaction
  • Daily limit: 50,000.00 USDC per user
Bridge Fees
  • Platform fee: 0.1% of transfer amount
  • Network fees: Paid in native tokens (ETH, POL, NEON)
  • Minimum fee: $0.10 USD equivalent
Complete Network Details

For comprehensive network configurations, RPC URLs, explorers, and additional chain information, see the USDC and Chains Guide.