Your business. A world of ways to pay.

Payments infrastructure for the borderless economy. One integration, local-currency pricing, stablecoin settlement, payouts in minutes.

Mayarin merchant dashboard

The opportunity

Your business can reach the world.
Your payments should be able to keep up.

Every new market brings new currencies, payment preferences, and ways to move money. Connecting separate systems and tracking every payment adds work at the exact moment your business is ready to grow.

Mayarin brings payment collection, conversion, and stablecoin settlement into one integration. Price in your local currency, let customers pay with supported assets, and manage payments in one place—from your first sale to your next market.

Reach more customers. Let them pay their way, while you get paid yours.

Mayarin checkout

Order total

50 $S

Pricing currencySGD

Choose how to pay

EURC on Base

EURC

Base

USDG on Arbitrum One

USDG

Arbitrum

ETH on Base

ETH

Base

PYUSD on Ethereum

PYUSD

Ethereum

Pay with EURC

Your sale. Settled.

Local-currency pricing to stablecoins in your wallet.

Customer paid
EURC on Base
You receive
USDC
Destination
Your wallet
Payment status
Settled

Your prices, in local currency. Keep prices in the currency your business uses. Mayarin handles the quote and conversion so customers know what to pay.

More ways to fund a payment. Let customers choose from supported assets and networks at checkout. One payment link brings those options together.

Stablecoin settlement, in your wallet. Receive stablecoins in your own wallet and follow each payment from checkout to settlement, with a clear record in your dashboard.

Your prices, in local currency

Your customers, paying their way

Your payments, in one place

Let customers pay their way, settle in the stablecoin you choose.

Mayarin turns whatever the payer brings into your stablecoin, so you reach more customers, get paid faster and never touch the blockchain.

Reach more payers

Accept any supported asset on any supported chain. Customers who hold crypto pay the way they already do, and the order still lands in your currency.

Get paid in minutes

Your stablecoin lands on-chain once the payment confirms, not days later when a card batch clears.

Price locally, sell globally

Quote in 22 local currencies from one integration. The rate is locked at checkout, so the price your customer sees is the price you get.

No chargebacks

A confirmed on-chain payment cannot be pulled back by the payer. No chargeback fraud, no dispute fees.

Everything a payment needs.
Nothing you have to assemble.

Solutions for every industry

One integration. Every way your money moves.

Checkout

Checkout in any supported asset

Price in your local currency. Shoppers pay in the crypto they hold, you settle in a stablecoin.

Payouts

Pay sellers and affiliates

Send stablecoins to up to 100 sellers, affiliates and partners in one transaction.

One clearing layer.
Wherever the payer is.

Priced in

  • IndonesiaRupiah · IDR (Rp)
  • SingaporeDollar · SGD (S$)
  • MalaysiaRinggit · MYR (RM)
  • ThailandBaht · THB (฿)
  • United StatesDollar · USD ($)
  • Other currencies(17 additional supported currencies)

Settled in

  • USDC · USD Coin
  • USDG · Global Dollar
  • EURC · Euro Coin
  • PYUSD · PayPal USD
on
  • Ethereum
  • Arc
  • Base
  • Arbitrum
  • Robinhood Chain

Whatever the payer brought, converted as part of the payment

For developers

Built for Developers,
Scaling their payment.

Integrate in hours using modern APIs and SDKs, with all the tools you need to launch smoothly.

APIs & SDKs

Start taking payments from one API

Create payments, links and invoices from the typed TypeScript SDK or plain HTTP. Signed webhooks tell your server the moment money lands, and every step is on the event log.

Read the API quickstart
create-payment.ts
import { createMayarin } from "@mayarin/sdk";

const mayarin = createMayarin({
  baseUrl: "https://api.mayarin.xyz",
  secretKey: process.env.MAYARIN_SECRET_KEY,
});

const intent = await mayarin.payment.createIntent({
  merchant: { id: "M-1", name: "Warung Kopi", city: "Jakarta", countryCode: "ID" },
  amount: { amount: "50000.00", asset: "IDR" },
});

console.log(intent.amount.display); // "Rp 50.000,00"

x402

Charge for any request with x402

Register a URL, set its price, and close the gate with one middleware. Mayarin verifies the signature, settles on-chain and credits you, no key and no chain code on your server.

Sell an endpoint to an agent
server.ts
import { createX402Gate } from "@mayarin/sdk";
import { x402Connect } from "@mayarin/sdk/x402/connect";

const gate = createX402Gate({
  baseUrl: "https://api.mayarin.xyz",
  resourceId: "your-resource-id",
});

app.get("/premium", x402Connect(gate), paidHandler);

Webhooks

Know the moment money lands

Every state change posts a signed webhook to your server — verify the signature, then fetch the payment before you fulfil. The same event log keeps every step, so any payment can be replayed or audited later.

Read the webhooks guide
webhook.ts
import { constructWebhook, createMayarin } from "@mayarin/sdk";

const secretKey = process.env.MAYARIN_SECRET_KEY;
const webhookSecret = process.env.MAYARIN_WEBHOOK_SECRET;
if (!secretKey || !webhookSecret) throw new Error("Mayarin secrets are required");

const mayarin = createMayarin({
  baseUrl: "https://api.mayarin.xyz",
  secretKey,
});

type PaymentEvent = {
  readonly type: "payment.created" | "payment.state_changed" | "payment.failed";
  readonly state: string;
  readonly clearingTransactionId: string;
};

export async function POST(request: Request) {
  const payload = await request.text();
  const signature = request.headers.get("Webhook-Signature");
  if (!signature) return new Response("Missing signature", { status: 400 });

  const event = await constructWebhook<PaymentEvent>({
    payload,
    signature,
    secret: webhookSecret,
  });

  // Treat the webhook as a signal; fetch the payment before fulfilment.
  if (event.type === "payment.state_changed" && event.state === "SUCCESS") {
    const payment = await mayarin.payment.get(event.clearingTransactionId);
    await fulfil(payment);
  }

  return new Response(null, { status: 204 });
}

Questions merchants
ask first.

Short answers to what comes up.

You do. Settlements land in a wallet you control — a Safe or a wallet you verify in the dashboard. On the contract path Mayarin never holds your customer's funds; on the deposit path they pass through a per-payment address only until the payment settles.

No. They pay with any supported asset on any supported network. You set the price in your local currency and receive a stablecoin, and Mayarin handles the conversion in between.

No. You price in your own currency and share a payment link, an invoice or a QR code. Choosing the network and converting the asset happen behind the checkout.

Yes. Mayarin settles in stablecoins to your own wallet, and you can cash them out to your bank account through a third-party provider.

Mayarin runs on testnet today, so no real money moves yet. Join early access and we will let you know when live payments open.

Get early access

Focus on building. Let Mayarin move the money.

Accept, route, and settle payments through one integration built to grow with your product.

Get early access