Skip to main content
Bridging transfers stablecoins across different blockchain networks. Move assets from one chain to another, such as transferring USDC from Ethereum to Polygon or Solana.

How Bridging Works

Bridging follows a straightforward process:
1

Create bridge request

Specify source chain, destination chain, and amount to bridge.
2

Processing

HIFI executes the cross-chain operations (burn on source, mint on destination).
3

Completion

Stablecoins arrive on the destination chain.

Creating Bridge Requests

Use the Create Bridge endpoint to initiate a cross-chain transfer. Request:
curl -X POST "https://sandbox.hifibridge.com/v2/wallets/bridges" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "requestId": "1d860428-1d0b-47c5-9e65-98961ff59215",
    "amount": 10,
    "source": {
      "userId": "usr_abc123",
      "chain": "POLYGON",
      "currency": "usdc"
    },
    "destination": {
      "userId": "usr_abc123",
      "chain": "ETHEREUM",
      "currency": "usdc"
    }
  }'
The response contains the bridge request details:
{
  "transferType": "WALLET.BRIDGE",
  "transferDetails": {
    "id": "brg_abc123",
    "requestId": "1d860428-1d0b-47c5-9e65-98961ff59215",
    "createdAt": "2025-02-24T17:44:54.781519+00:00",
    "updatedAt": "2025-02-24T17:44:54.781519+00:00",
    "amount": 10,
    "status": "CREATED",
    "source": {
      "userId": "usr_abc123",
      "walletAddress": "0xE9cfBf1D690565579D823264170eE357f80e9A34",
      "chain": "POLYGON",
      "currency": "usdc"
    },
    "destination": {
      "userId": "usr_abc123",
      "walletAddress": "0x17f043FB0a39334641beD627551AC095941157B0",
      "chain": "ETHEREUM",
      "currency": "usdc"
    },
    "receipt": {
      "transactionHash": null,
      "operations": {
        "mint": null,
        "burn": null,
        "approve": null
      }
    },
    "failedReason": null,
    "quoteInformation": {
      "sendGross": {
        "amount": "10.00",
        "currency": "usdc"
      },
      "sendNet": {
        "amount": "10.00",
        "currency": "usdc"
      },
      "receiveGross": {
        "amount": "10.00",
        "currency": "usdc"
      },
      "receiveNet": {
        "amount": "10.00",
        "currency": "usdc"
      },
      "rate": "1",
      "railFee": {
        "amount": "0",
        "currency": "usdc"
      }
    }
  }
}
transferDetails.id
string
Unique bridge ID. Use this to check status using the Retrieve Bridge endpoint.
transferDetails.status
string
Bridge status. Progression: CREATEDSOURCE_INITIATEDSOURCE_PROCESSEDDESTINATION_INITIATEDCOMPLETED. See Transaction Status for details.
transferDetails.source
object
Source chain details including wallet address, chain, and currency.
transferDetails.destination
object
Destination chain details including wallet address, chain, and currency.
transferDetails.amount
number
Amount being bridged in the specified currency.
transferDetails.quoteInformation
object
Bridge quote details including amounts and rate. For same-asset bridges, the rate is always “1”.
transferDetails.receipt
object
Transaction receipt. Contains transactionHash and operations (approve, burn, mint) once bridge operations are executed on-chain.
For detailed field documentation, see the Create Bridge API reference.

Transaction Status

Bridge transactions progress through several phases:

Source Chain Phase

StatusDescription
CREATEDBridge request created and awaiting processing
SOURCE_INITIATEDBurning tokens on source chain
SOURCE_PENDINGWaiting for source chain confirmation
SOURCE_PROCESSEDTokens successfully burned on source chain
SOURCE_FAILEDSource chain operation failed

Destination Chain Phase

StatusDescription
DESTINATION_INITIATEDMinting tokens on destination chain
DESTINATION_PENDINGWaiting for destination chain confirmation
COMPLETEDTokens successfully minted on destination chain
DESTINATION_FAILEDDestination chain operation failed

Other Statuses

StatusDescription
NOT_INITIATEDBridge not submitted due to validation error
QUOTE_FAILEDQuote expired (bridges typically don’t use quotes)
UNKNOWNStatus could not be determined

Tracking Bridges

Status Updates: Subscribe to WALLET.BRIDGE.CREATE and WALLET.BRIDGE.UPDATE webhook events to receive real-time status notifications. See Webhooks for setup instructions.
Monitor bridge status using the Retrieve Bridge endpoint. Request:
curl -X GET "https://sandbox.hifibridge.com/v2/wallets/bridges/brg_abc123" \
  -H "Authorization: Bearer YOUR_API_KEY"
When the bridge is completed, the response includes all operation hashes:
{
  "transferType": "WALLET.BRIDGE",
  "transferDetails": {
    "id": "brg_abc123",
    "status": "COMPLETED",
    "receipt": {
      "transactionHash": "0x17f043FB0a39334641beD627551AC095941157B0",
      "operations": {
        "mint": {
          "transactionHash": "0x5784890f9efd0160e9401439a5cf2aa5350580ecf48f9ca2af617338ae089e53",
          "userOpHash": "0xef7bdb071b1fcfb5df629bd4d27ffa6dc32d0a5df676f26fb8c25311df1185ac",
          "chain": "ETHEREUM"
        },
        "burn": {
          "transactionHash": "0x8a95b01e9fed0270f0512550b6dg3bb6461691fdg59i0db3bg728449bf19017d",
          "userOpHash": "0xgh8cec182c2gdhgi6eg740c5e38gib7ed43e1b6eg787g37gc9d36412eg2296bd",
          "chain": "POLYGON"
        },
        "approve": {
          "transactionHash": "0x7j84j90h8hfe0160h8291228j4dg2jj4239469hd38h8dj1jg516227228jh078h42",
          "userOpHash": "0xij7iji061i1hidhj5ii518ij3i27iih5id22i0j4ii575i25hj7c15300ii1074ji",
          "chain": "POLYGON"
        }
      }
    }
  }
}
transferDetails.status
string
Bridge status. COMPLETED means tokens have been successfully minted on the destination chain.
transferDetails.receipt.operations
object
Blockchain operations that were executed during the bridge. Each operation (approve, burn, mint) contains transactionHash, userOpHash, and chain for verification on block explorers.

Bridge Operations

Bridging involves three blockchain operations tracked in the receipt.operations object:
OperationDescriptionChain
ApproveAuthorizes bridge contract to spend your tokensSource chain
BurnDestroys tokens on the source chainSource chain
MintCreates equivalent tokens on the destination chainDestination
Each operation includes:
  • transactionHash - Blockchain transaction hash (view on block explorer)
  • userOpHash - User operation hash for account abstraction wallets
  • chain - Which blockchain the operation occurred on
Processing Time: Bridge operations typically complete within 2-5 minutes depending on network congestion. Use the transaction hashes to track progress on block explorers.

Supported Routes

Currently supported bridging routes:
Source ChainDestination Chains
PolygonEthereum, Base, Optimism, Arbitrum, Solana
EthereumPolygon, Base, Optimism, Arbitrum, Solana
SolanaPolygon, Ethereum, Base, Optimism, Arbitrum
BasePolygon, Ethereum, Solana, Optimism, Arbitrum
OptimismPolygon, Ethereum, Solana, Base, Arbitrum
ArbitrumPolygon, Ethereum, Solana, Base, Optimism
Supported currencies: USDC, USDT

Key Concepts

Bridges maintain a 1:1 ratio when transferring the same asset across chains. When you bridge 10 USDC from Polygon to Ethereum, you receive 10 USDC on Ethereum (minus any network fees).The quoteInformation.rate will always be “1” for same-asset bridges.
You can bridge to external wallet addresses (not managed by HIFI) by providing walletAddress instead of userId in the destination:
{
  "destination": {
    "chain": "ETHEREUM",
    "currency": "usdc",
    "walletAddress": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb"
  }
}
Gas Sponsorship Required: To bridge to external addresses, you must be enrolled in HIFI’s Gas Sponsorship Program. Otherwise, provide a userId to bridge to a HIFI wallet.
Bridges move assets across different blockchains (e.g., Polygon → Ethereum).Transfers move assets within the same blockchain (e.g., Polygon wallet A → Polygon wallet B).Use bridges when you need assets on a different chain. Use transfers for same-chain movements.

Sample Code

Complete bridge flow

1

Create bridge request

curl -X POST "https://sandbox.hifibridge.com/v2/wallets/bridges" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "requestId": "1d860428-1d0b-47c5-9e65-98961ff59215",
    "amount": 10,
    "source": {
      "userId": "usr_abc123",
      "chain": "POLYGON",
      "currency": "usdc"
    },
    "destination": {
      "userId": "usr_abc123",
      "chain": "ETHEREUM",
      "currency": "usdc"
    }
  }'
2

Monitor progress

Poll the retrieve endpoint or subscribe to WALLET.BRIDGE.UPDATE webhooks. Track through statuses:
  1. SOURCE_INITIATED → SOURCE_PENDING → SOURCE_PROCESSED
  2. DESTINATION_INITIATED → DESTINATION_PENDING → COMPLETED
3

Verify on block explorers

Once COMPLETED, use transaction hashes from receipt.operations to verify:
  • Check burn transaction on source chain explorer (Polygonscan)
  • Check mint transaction on destination chain explorer (Etherscan)

Bridge with approval

1

Create bridge with approval

Set requireApproval: true for multi-party authorization:
curl -X POST "https://sandbox.hifibridge.com/v2/wallets/bridges" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "requestId": "1d860428-1d0b-47c5-9e65-98961ff59215",
    "amount": 100,
    "source": {
      "userId": "usr_abc123",
      "chain": "POLYGON",
      "currency": "usdc"
    },
    "destination": {
      "userId": "usr_abc123",
      "chain": "ETHEREUM",
      "currency": "usdc"
    },
    "requireApproval": true
  }'
2

Review pending bridge

The bridge enters PENDING_APPROVAL status. Dashboard admins are notified to approve or reject via email and webhook.
3

Execution or rejection

If approved, the bridge proceeds through normal processing. If rejected, it’s cancelled.

Getting Help