Skip to main content
Give each user an address that never expires. They send any supported token from any supported chain, and you receive the token you configured, on the chain you configured, in the wallet you configured. No swap interface, no wallet connection, and no approvals.

How it works

1

Get a deposit address from a quote

Request a quote with mpsDeposit: true and a destinationAddress, then read mpsDepositAddress off an eligible quote. It is a deterministic address on the source chain of that quote, permanent and reusable for the same API key, mpsUserId and destination.
2

The user deposits

Show the address to your user. They send the input token on the source chain, with no signature and no transaction to build.
3

Mayan detects and settles

The deposit is detected and its USD value checked. The user’s smart wallet is deployed on the first deposit on each chain, then the swap executes through Mayan.
4

Funds delivered

The destination token arrives at the destination wallet on the destination chain, and the swap reaches status: "completed".
Track every step in real time through events, or by polling the /swaps endpoint.

Key concepts

  • Deterministic and permanent addresses. The same parameters always produce the same address. Addresses never expire and can be reused for repeat payments from the same user.
  • One address, many chains. An EVM deposit address is valid on every supported EVM chain; quote from an EVM source chain to get it. A Solana source quote returns a Solana vault that accepts native SOL as well as SPL and Token-2022 deposits, where SOL, USDC, USDT, WETH and WSOL are auto-detected.
  • Any token in, one token out. Users pay in whatever they hold, and you always receive the destination token you configured. Common tokens are detected automatically, and anything else can be indexed on demand.
  • Structured, real-time lifecycle. A single status_changed event stream reports progress, retries, success, and terminal failure, each with a stable error model.

Supported chains

Deposits are accepted on a fixed set of source chains, and settle to the same set of chains as the destination. Chains are identified by their Wormhole chain ID (the EVM chain ID is shown for reference only).

Deposit (source) chains

Destination chains

The destination (destChain) can be any chain in the table above: Solana, Ethereum, BSC, Polygon, Avalanche, Arbitrum, Optimism, Base or Monad. Other destinations are not supported, and the quote comes back without a deposit address.
Always pass the Wormhole chain ID in destChain and read it in chainId. Base is 30, not 8453. Passing an EVM chain ID will produce a different, wrong deposit address or be rejected.

Supported tokens

A deposit address can receive any token, but the scanner auto-detects and settles this whitelist per source chain with no action from you. Each token has a minimum deposit that moves with gas and prices; read it live from GET /source-config. A deposit below it is detected but not settled yet.
On Solana, SOL and WSOL are separate entries. SOL is native lamports sent to the vault address, and WSOL is the wrapped-SOL SPL token. Both are auto-detected, but they are different balances, so use the address matching what you actually send.
The table above is a convenience snapshot. The authoritative, live list, with current per-token minimums, is GET /source-config. Poll it rather than hardcoding, and surface each token’s minDeposit to your users before they pay.
Need another token whitelisted? Email support@mayan.finance with the chain and token contract, and we add tokens in under 12 hours, 24/7. Until then, any other token can still be settled on demand via POST /request-index, which sweeps the wallet’s balance and settles it if Mayan can route the token.

Fees

Mayan takes a small settlement cost from each deposit to pay for gas. On EVM chains it covers the swap transaction and, on the first deposit on each chain, the deployment of the user’s wallet. On Solana it is a flat fee of about 0.004 SOL, and USDC, USDT and WETH sent cross-chain from Solana are not charged. The cost is capped at 5% of the deposit, and quotes requested with mpsDeposit: true already show the amount after it is deducted. Any referrer fee you set on the quote is charged on top of this cost and is saved on the deposit address. It is not charged on a Solana deposit swapped into another token on Solana, or on a deposit that is already the destination token on the destination chain. The Quote API page explains where it is paid, and GET /swaps shows the referrer on each settlement.

Unsettled funds

Mayan never sends a deposit back on its own. Anything that isn’t settled stays in the deposit address until it can be settled. A deposit below the minimum is settled together with the next deposit, once the total clears the minimum. A token that is not auto-detected is settled when you call POST /request-index. When an item becomes dead after its retries, the next deposit or a POST /request-index call starts a new settlement for the full balance. If a cross-chain order is refunded, the funds return to the deposit address and are settled again without charging the cost a second time. To have funds sent back from an EVM deposit address instead, contact support@mayan.finance.

Getting access

You need an API key, a UUID, to call the tracking API, connect to the event stream, and log in to the MPS panel. Pass the same key when you request the quote. The deposit address is tied to that key, and only that key can track its payments. To request a key, email support@mayan.finance.
Want to try it right away? Use the shared demo key:
It works with every example in these docs. It is public and shared by everyone, so use it only for evaluation, and request your own key for anything beyond testing.
A web dashboard is also available at mps.mayan.finance. Log in with your API key to browse generated addresses and settlement statuses.

Next steps

Quickstart

Get your first deposit address from a quote and receive events end to end.

API Reference

Every endpoint, request and response shape, and the structured error model.

Swap Statuses

The full status lifecycle, covering phase, category, terminal, and retries.