SPayFi

On-chain settlement · USDC / USDT / SPUSD

Take payments in stablecoins, settled straight to your treasury.

Invoice in dollars. Collect USDC or USDT across major chains. Signed webhooks on confirmation. No checkout code.

Settled volume

$18,407.42

Across the public demo ledger

Networks

5

Chains, one unified API

Confirmation

32s

Median time to signed webhook

Custody

100%

On-chain, nothing held

How it works

Three steps between your invoice and a settled balance.

Step 1

Create an invoice

Set the amount in cents, pick the chain and stablecoin, and the gateway returns a payment link with a frozen exchange rate.

Step 2

Share the link

Your customer opens a hosted payment page, sees the amount in their own currency, and sends the exact deposit in USDC or USDT.

Step 3

We watch the chain

The gateway detects the deposit, waits for confirmations, marks the invoice settled, and posts your signed webhook.

Networks

One invoice format, every major chain.

Ethereum logo

Ethereum

EVM

evm:1

Polygon logo

Polygon

EVM

evm:137

Base logo

Base

EVM

evm:8453

Arbitrum logo

Arbitrum

EVM

evm:42161

Solana logo

Solana

SVM

svm:101

USDC logo

USDC

asset

settles at face value on every network

USDT logo

USDT

asset

settles at face value on every network

SPUSD logo

SPUSD

asset

settles at face value on every network

Built for the merchants who'd rather build on top.

Hosted payment pages

Every invoice gets a clean, public payment link. Your customer sees the amount in their currency and an address to send from; you never handle the checkout flow.

API keys and webhooks

Create invoices and read settlements from the API with a publishable key. We post signed webhook deliveries the moment a payment confirms or fails.

Sandbox to live

Generate sandbox keys on Sepolia and Solana devnet to build against, then swap to live keys without changing your integration.

SPUSD auto-deposits

Link a SPUSD account and settled balances move automatically instead of sitting in a withdrawal queue. Set the scope per app or globally.

The API

An invoice is one request away.

Amounts travel as integers in cents. Create an invoice, hand the response's pay_url to your customer, and wait for the webhook.

curl - create an invoice
$ curl -X POST ${API_URL}/api/v1/invoices \
  -H "X-API-Key: pk_live_9f2c…" \
  -H "Content-Type: application/json" \
  -d '{"amount_cents": 24500,
       "currency": "USD"}'

→ 201 Created
{
  "id": "inv_01JH…",
  "status": "pending",
  "amount_cents": 24500,
  "pay_url": "https://pay.example.com/pay/inv_01JH…"
}

Webhooks posted signed on every status change

Questions, answered plainly.

Your first invoice can be live in five minutes.