# Developer docs

> Take USDC and USDT payments with the Mintage Pay API, store plugins, payment links and webhooks.

Source: https://mintagepay.com/docs/ (last updated 2026-10-30)

Mintage Pay lets you take payments in USDC and USDT, the US dollar stablecoins. Every payment goes straight to your
own wallet. Mintage Pay never holds the money. These pages cover the store plugins, payment links, the API, webhooks
and the sandbox.

## Pick how to connect

| Option | Best for | Code needed |
|---|---|---|
| [Store plugin](https://mintagepay.com/docs/integrations/) | WooCommerce and other store platforms | None |
| [Payment links and the buy button](https://mintagepay.com/docs/integrations/#payment-links-and-the-buy-button) | Any website, social posts, emails, one-off invoices | None, or one snippet |
| [API and webhooks](https://mintagepay.com/docs/api/) | Your own checkout, app or billing system | A few HTTP calls |

Running a store? Start with the [store plugins](https://mintagepay.com/docs/integrations/). The rest of this page is for developers.

## How a payment works

1. Your server creates an **invoice** for the order, with the amount and your own order number.
2. You send the customer to the invoice's `checkout_url`. This is a payment page hosted by Mintage Pay.
3. The customer chooses a network and pays from their wallet, or straight from an exchange on Base and Polygon.
4. Mintage Pay watches for the payment. Once it is confirmed, the invoice changes to `paid` and your server receives
   an `invoice.paid` [webhook](https://mintagepay.com/docs/webhooks/).
5. Your store marks the order as paid and ships it.

How the money reaches you:

- **Base and Polygon:** each invoice gets its own payment address. It passes the payment on to your wallet and takes
  the Mintage Pay fee in the same step. Nobody, including Mintage Pay, can send it anywhere else.
- **Solana:** the customer's payment pays your wallet and the fee together, in one transaction.
- **TRON:** the customer pays your own address directly. The fee is taken from prepaid fee credit you top up in your
  dashboard.

## Quickstart

This takes about ten minutes in the [sandbox](https://mintagepay.com/docs/sandbox/), with free test money.

1. Create a free test account at [sandbox.mintagepay.com](https://sandbox.mintagepay.com).
2. In **Payout addresses**, add an address for at least one network.
3. In **Developers > API keys**, create a key. Test keys start with `mp_test_`. You only see the key once, so copy it.
4. Create an invoice:

```bash
curl https://sandbox.mintagepay.com/v1/invoices \
  -H "Authorization: Bearer mp_test_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-1042" \
  -d '{"amount": "15.00", "order_id": "1042", "redirect_url": "https://example.com/thank-you"}'
```

5. Open the `checkout_url` from the response and pay it. The sandbox payment page has a button that gives you test
   money.
6. Tell Mintage Pay where to send order updates:

```bash
curl https://sandbox.mintagepay.com/v1/webhook-endpoints \
  -H "Authorization: Bearer mp_test_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/mintagepay/webhook"}'
```

   The response includes a `secret` starting with `whsec_`. You only see it once. Use it to
   [check that each update really came from Mintage Pay](https://mintagepay.com/docs/webhooks/#verify-the-signature).
7. When your server receives `invoice.paid`, mark the order as paid.

No public web address yet? Read the invoice with `GET /v1/invoices/{id}` and check its `status` instead.

## Going live

Live accounts are by application: [apply on the home page](https://mintagepay.com/#apply). Once you are approved:

1. Sign in at [app.mintagepay.com](https://app.mintagepay.com) and add your payout addresses.
2. Create a live key. Live keys start with `mp_live_`.
3. Change your base URL to `https://app.mintagepay.com/v1`, and register your webhook address again with the live
   key.

| | Sandbox | Live |
|---|---|---|
| Dashboard | `https://sandbox.mintagepay.com` | `https://app.mintagepay.com` |
| API base URL | `https://sandbox.mintagepay.com/v1` | `https://app.mintagepay.com/v1` |
| Payment pages | `https://sandbox.mintagepay.com/i/...` | `https://pay.mintagepay.com/i/...` |
| API keys | `mp_test_...` | `mp_live_...` |
| Money | Free test coins on test networks | Real USDC and USDT |

Test keys do not work on live, and live keys do not work in the sandbox, so you cannot mix them up by accident.

## Networks

| What the customer pays with | Where they can pay from | How it reaches you |
|---|---|---|
| USDC on Base | Any wallet or exchange | Its own payment address per invoice. The fee is taken on the way |
| USDC or USDT on Polygon | Any wallet or exchange | Same as Base |
| USDC or USDT on Solana | A Solana wallet (Phantom, Solflare, Backpack) | Solana Pay. The customer needs no SOL |
| USDT on TRON | A TRON wallet (TronLink, Trust) | Straight to your own address. The fee comes from fee credit |

A network only appears at checkout once you have added a payout address for it. For USDC on Base and Polygon,
customers with a browser wallet do not need any gas: they sign once and Mintage Pay pays the network fee.

### Customers with no crypto: Cash App

Cash App can send USDC from a customer's cash balance, with no fee, on Polygon. So a customer with a verified Cash App
account can pay even if they have never owned crypto. Cash App's minimum is $1, and it is not available in New York.
See Cash App's help page, [Stablecoins](https://cash.app/help/us/en-us/31115-stablecoins).

To let these customers pay, **add a USDC on Polygon payout address**, even if you mostly use Base. If you use an
exchange account, choose USDC and the Polygon network on its Receive screen, and check the page says USDC, not POL
or MATIC.

## Reference

- [API reference](https://mintagepay.com/docs/api/)
- [Webhooks](https://mintagepay.com/docs/webhooks/)
- [Plugins and payment links](https://mintagepay.com/docs/integrations/)
- [Sandbox](https://mintagepay.com/docs/sandbox/)
- [Cash out to your bank](https://mintagepay.com/docs/cash-out/)
- Machine-readable API description (OpenAPI): [app.mintagepay.com/v1/openapi.json](https://app.mintagepay.com/v1/openapi.json).
  No key is needed to read it.

Questions? Write to [hello@mintagepay.com](mailto:hello@mintagepay.com).
