> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mayan.finance/llms.txt
> Use this file to discover all available pages before exploring further.

# Payment Service Overview

> Accept any token on any chain with deterministic deposit addresses — MPS bridges and swaps it to the token and chain you want, automatically.

## What is the Mayan Payment Service?

The **Mayan Payment Service (MPS)** is cross-chain payment infrastructure. You get a
**deterministic deposit address** for each of your users from a [Mayan quote](/integration/quote-api#mps-deposit-address-mpsdeposit);
when they send *any* token on *any* supported chain to that address, MPS automatically detects the
deposit, bridges and swaps it via Mayan Protocol, and delivers the **destination token on the
destination chain** you specified.

It turns "accept a specific token on a specific chain" into "accept anything, settle in what you
want" — ideal for checkout, on-ramps, treasury top-ups, and wallet funding.

<Info>
  MPS is a hosted backend on top of Mayan. You integrate over a simple REST API plus real-time
  WebSocket events — no smart-contract work required.
</Info>

## How it works

<Steps>
  <Step title="Get a deposit address from a quote">
    Request a [Mayan quote](/integration/quote-api#mps-deposit-address-mpsdeposit) with
    `mpsDeposit: true` and a `destinationAddress`, then read `mpsDepositAddress` off an eligible
    quote. It's a deterministic address on the source chain of that quote — permanent and reusable
    for the same recipient.
  </Step>

  <Step title="User deposits">
    Show the address to your user. They send the input token on the source chain — no signature, no
    transaction to build.
  </Step>

  <Step title="MPS detects and settles">
    The scanner detects the deposit and checks its USD value. The worker deploys the user's smart
    wallet (first time only), then executes the bridge/swap through Mayan Protocol.
  </Step>

  <Step title="Funds delivered">
    The destination token arrives at the destination wallet on the destination chain, and the swap
    reaches `status: "completed"`.
  </Step>
</Steps>

You track every step in real time via [events](/payment-service/events) or by polling
the [`/swaps`](/payment-service/api-reference#list-swaps) endpoint.

<Tip>
  The deposit address comes from the **Quote API**: pass `mpsDeposit: true` (with `destinationAddress`)
  and read `mpsDepositAddress` off each eligible quote. See
  [MPS deposit address on the Quote API](/integration/quote-api#mps-deposit-address-mpsdeposit).
</Tip>

## Key concepts

* **Deterministic & 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 for SPL /
  Token-2022 deposits (USDC, USDT, and WETH are auto-detected).
* **Any token in, one token out** — users pay in whatever they hold; you always receive the
  destination token you configured. Common tokens are detected automatically; anything else can be
  indexed on demand (see [Supported tokens](#supported-tokens)).
* **Structured, real-time lifecycle** — a single `status_changed` event stream reports progress,
  retries, success, and terminal failure, each with a stable
  [error model](/payment-service/api-reference#errors).

## Supported chains

MPS accepts **deposits** on a fixed set of source chains, and settles to **any chain Mayan supports**
as the destination. Chains are identified by their **Wormhole chain ID** (the EVM chain ID is shown
for reference only).

### Deposit (source) chains

Users can deposit on these chains:

| Chain     | Wormhole chain ID | EVM chain ID | Native token |
| --------- | ----------------- | ------------ | ------------ |
| Solana    | 1                 | —            | SOL          |
| Ethereum  | 2                 | 1            | ETH          |
| BSC       | 4                 | 56           | BNB          |
| Polygon   | 5                 | 137          | POL          |
| Avalanche | 6                 | 43114        | AVAX         |
| Arbitrum  | 23                | 42161        | ETH          |
| Optimism  | 24                | 10           | ETH          |
| Base      | 30                | 8453         | ETH          |
| Monad     | 48                | 143          | MON          |

### Destination chains

The destination (`destChain`) can be **any chain Mayan supports** — including chains beyond the
deposit set above (e.g. Sui and many more). See
[Mayan's supported chains](https://docs.mayan.finance/) for the full list.

<Warning>
  Always pass the **Wormhole chain ID** in `destChain` and read it in `chainId` — e.g. Base is `30`,
  not `8453`. Passing an EVM chain ID will produce a different (wrong) deposit address or be rejected.
</Warning>

## Supported tokens

A deposit address can receive **any** token, but MPS's scanner **auto-detects** (and settles with no
action from you) this whitelist per source chain. `Min deposit` is in the token's own units — a
deposit below it is detected but not settled.

| Chain     | Token | Contract / mint address                        | Min deposit |
| --------- | ----- | ---------------------------------------------- | ----------- |
| Solana    | USDC  | `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v` | 1           |
| Solana    | USDT  | `Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB` | 1           |
| Solana    | WETH  | `7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs` | 0.0003      |
| Ethereum  | ETH   | native                                         | 0.003       |
| Ethereum  | USDC  | `0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48`   | 10          |
| BSC       | BNB   | native                                         | 0.002       |
| BSC       | USDC  | `0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d`   | 1           |
| Polygon   | POL   | native                                         | 2           |
| Polygon   | USDC  | `0x3c499c542cef5e3811e1192ce70d8cc03d5c3359`   | 1           |
| Avalanche | AVAX  | native                                         | 0.03        |
| Avalanche | USDC  | `0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e`   | 1           |
| Arbitrum  | ETH   | native                                         | 0.0003      |
| Arbitrum  | USDC  | `0xaf88d065e77c8cc2239327c5edb3a432268e5831`   | 1           |
| Optimism  | ETH   | native                                         | 0.0003      |
| Optimism  | USDC  | `0x0b2c639c533813f4aa9d7837caf62653d097ff85`   | 1           |
| Base      | ETH   | native                                         | 0.0003      |
| Base      | USDC  | `0x833589fcd6edb6e08f4c7c32d4f71b54bda02913`   | 1           |
| Monad     | MON   | native                                         | 1           |
| Monad     | USDC  | `0x754704bc059f8c67012fed69bc8a327a5aafb603`   | 1           |

The table above is a convenience snapshot. The **authoritative, live** list — with the current
per-token minimums — is [`GET /source-config`](/payment-service/api-reference#source-config). Poll it
rather than hardcoding, and surface each token's `minDeposit` to your users before they pay.

<Note>
  **Need another token whitelisted?** Email [support@mayan.finance](mailto:support@mayan.finance) with
  the chain and token contract — we add tokens in **under 12 hours, 24/7**. Until then, any other token
  can still be settled on demand via
  [`POST /request-index`](/payment-service/api-reference#request-index) (MPS sweeps the wallet's balance
  and settles it if Mayan can route the token).
</Note>

## Next steps

<Card title="Quickstart" icon="rocket" href="/payment-service/quickstart">
  Get your first deposit address from a quote and receive events end-to-end.
</Card>

<Card title="API Reference" icon="code" href="/payment-service/api-reference">
  Every endpoint, request/response shape, and the structured error model.
</Card>

<Card title="Swap Statuses" icon="list-check" href="/payment-service/statuses">
  The full status lifecycle: `phase`, `category`, `terminal`, and retries.
</Card>

<Card title="Events" icon="bell" href="/payment-service/events">
  Real-time WebSocket events and replay after disconnects.
</Card>

## Getting access

You need an **API key** (a UUID) to call the API and connect to the event stream. To receive one,
email [support@mayan.finance](mailto:support@mayan.finance) or reach out to the Mayan team in
[Discord](https://discord.com/invite/MayanFinance).

A web dashboard is also available — log in with your API key to browse generated addresses and
settlement statuses.
