Skip to content
Deposits

Fund an account from any chain a user already holds

Someone holding USDC on Base tops up a Sui balance without leaving your app or learning what a bridge is. You describe the destination; CoinVoyage finds the route.

You pay

8.80 USDC

Base

You receive

10 SUI

Sui

Network fee

Quoted upfront

Fund account

Deposits stall for boring reasons

Almost all of them come down to holding the wrong asset on the wrong chain. That is a routing problem, not a user-education problem.

They pay with what they already hold

The connected wallet is scanned for real balances first, so a user is never shown a route they cannot fund. No pre-swap, no bridge, no second app.

Four chain families in one modal

Sui, Bitcoin, Solana, and every supported EVM network from the same payment sheet. Zcash joins them through Pay to Address, transparent addresses only.

Quotes ranked by what actually lands

Routes are priced live across Uniswap, Jupiter, Cetus, Across, and CCTP, and ranked by what actually arrives, not by headline fee.

The public API key is enough

A DEPOSIT order can be created with your public key, because the user's own destination address defines where the funds go. No server signature required to get started.

Four steps, start to credited

The same lifecycle every CoinVoyage order follows, with nothing extra for the deposit case.

01

Collect the destination

Ask which supported chain and address the user wants to receive funds on. Usually their connected wallet, or an address you assign.

02

Create the order

Call createDepositOrder with the destination chain, token, amount, and recipient. CoinVoyage returns an order ID and fires ORDER_CREATED.

03

Open the payment modal

Render PayButton, or hand the generated orderId to your own checkout UI with PayButton.Custom.

04

Credit from the webhook

Listen for ORDER_COMPLETED, ORDER_EXPIRED, ORDER_REFUNDED, and ORDER_ERROR. Browser callbacks update the UI; webhooks decide whether the balance moves.

server/create-deposit.ts
const order = await apiClient.createDepositOrder({
  amount: "10",
  currency: {
    chain_id: ChainId.SUI,
    address: null, // null = native token
  },
  recipient: "0xYourWalletAddress",
});

The specifics

Order mode

DEPOSIT

Credential

Public API key, no server signature required

Payment window

A unique deposit address and exact amount, typically valid for 30 minutes

Typical settlement

Under 60 seconds end to end for most routes

Failure handling

An automatic refund to the user's refund address, followed by ORDER_REFUNDED

Underpayment

The order enters PARTIAL_PAYMENT and accepts further deposits until funded

Pricing

Depends on the products you use, your volume, and how you settle. Contact us.

Let users deposit from wherever their money already is

Create an organization, generate an API key, and put a working deposit button in front of a user today.