Payment drafts & pay links.
Zero custody. Built for humans and AI agents.

send21 creates clean, verifiable payment instructions for BTC, USDC, USDT, and EURC — across Bitcoin, Solana, Ethereum, and Base. Funds move directly from the sender's own wallet to the receiver. We never touch keys. We never touch coins.

Drafts: PSBT wallets (Bitcoin Core, Sparrow, Electrum) · Checkout pay links: any QR-scanning wallet

Non-custodial by structure, not by promise

Your keys never leave your wallet

send21 has no hot wallets, stores no private keys, and contains no signing code. A full server compromise cannot move a single satoshi.

Receiver gets the exact amount

Multi-output drafts carry the send21 fee as a separate transparent output; single-output payments carry no fee at all — it accrues to the creator's account. Either way the receiver gets the exact billed amount and your wallet sets the network fee.

Fiat-pegged or exact amount

Bill in any of 165 world currencies — USD, EUR and SEK to NGN and VND — with a locked, recorded exchange rate. Or set an exact amount in BTC, USDC, or USDT. Full quote provenance on every payment.

Payment drafts AI agents can actually use

send21 is agent-first: everything a human does in the UI, an agent does over REST. Scoped API keys mean an agent can create and track drafts but can never move funds — nobody can, that's the point.

Scoped API keys

drafts:write, drafts:read, webhooks:manage — grant only what the agent needs.

Idempotent + batch creation

Retry-safe Idempotency-Key support and batch endpoints for up to 25 drafts per call.

Recurring templates

Daily, weekly, or monthly drafts generated automatically — subscriptions without custody.

Checkout pay links

POST /payment-requests — fiat-priced, multi-currency (BTC / USDC / USDT / EURC) pay links with a hosted QR pay page.

Signed webhooks

HMAC-SHA256 signed status events (draft.seen, draft.confirmed, …) instead of polling.

MCP server built in

Point any MCP client at https://send21.io/mcp with your API key — tools for drafts, pay links, rates, and fees. No wrapper needed.

Create a draft in one call

curl -X POST https://send21.io/api/v1/drafts \
  -H "Authorization: Bearer s21_yourkey" \
  -H "Idempotency-Key: invoice-2026-001" \
  -H "Content-Type: application/json" \
  -d '{
    "receiverAddress": "bc1q...",
    "network": "Mainnet",
    "paymentMethod": "MultiOutput",
    "fiatCurrency": "USD",
    "fiatAmount": 50.00,
    "memo": "Invoice 2026-001"
  }'

The full agent payment flow

agent → create draftfetch tx template → fund & sign in own wallet → broadcast → webhook: draft.confirmed

  1. Authenticate

    Send a scoped API key as Authorization: Bearer s21_…. Grant only the scopes the agent needs (drafts:write, drafts:read, webhooks:manage). No scope can ever move funds.

  2. Create the draft

    POST /api/v1/drafts with the receiver address and either an exactamountSats or a fiat-pegged fiatCurrency + fiatAmount. Include an Idempotency-Key header — retries are safe and return the same draft.

  3. Read the rate lock & fee

    The response contains the exact receiver amount (amountSats), the send21 fee as a separate transparent output (platformFeeSats, feeOutputs), and for fiat-pegged drafts a locked exchange rate (quote.rate, valid until quote.expiresAt — call POST /drafts/{id}/requote if it lapses).

  4. Fetch the transaction template, fund & sign locally

    GET /api/v1/drafts/{id}/tx-template returns the exact output list, a ready bitcoin-cli walletcreatefundedpsbt example, and a pay-to-many CSV. The agent funds and signs it with its own node, wallet, or HSM — private keys never touch send21, and send21 contains no signing code.

    curl https://send21.io/api/v1/drafts/{id}/tx-template \
      -H "Authorization: Bearer s21_yourkey"
  5. Broadcast from your own node

    Broadcast the signed transaction yourself. There is nothing to report back — send21 watches the receiver address on-chain and matches the exact amount automatically.

  6. Get confirmation — webhook-first

    Register a webhook (POST /api/v1/webhooks) and receive HMAC-SHA256-signed events instead of polling. For quick checks, GET /drafts/{id}/status returns status, txid, and confirmation count.

Webhook eventWhen it fires
draft.createdDraft is created
draft.seenMatching transaction seen in the mempool / on-chain
draft.confirmedRequired confirmations reached — payment final
draft.expiredDraft expired without payment
draft.cancelledDraft cancelled by its owner

Fully non-custodial

The agent always controls the keys; send21 only produces instructions and watches the chain.

Single transaction

Receiver amount + send21 fee are outputs of one transaction — no second payment step.

Idempotent & machine-readable

Retry-safe creation, structured errors, and explicit rate locks for fiat-priced payments.

Machine-readable overview at /llms.txt · full OpenAPI spec at /swagger · MCP endpoint at https://send21.io/mcp (Streamable HTTP, Authorization: Bearer s21_…)

Transparent fees. No custody, no surprises.

The send21 fee is priced in USD when the payment is created (same price feed as fiat conversion) and shown in your selected fiat currency too. On multi-output drafts it rides as a separate transparent output you can see and verify in your wallet. On single-output payments (checkout pay links, QR drafts) nothing extra rides along — the fee accrues to the creator's account and is settled with one payment (BTC, USDC, USDT, or EURC) once the balance reaches the cap. Either way, the receiver always gets the exact billed amount.

Full details on the pricing page · machine-readable: /api/v1/fees/schedule

How a payment flows

Flow diagram: a draft to send €50 is prepared, the payment goes wallet to wallet with no middleman, and the receiver sees it confirmed on-chain — send21 prepares the draft, your wallets do the paying

1. Draft

A human or agent creates a draft: receiver address, amount (exact or fiat-pegged), currency and network, memo.

2. Sign in your wallet

The sender loads the multi-output template into their own PSBT wallet (Bitcoin Core, Sparrow, Electrum), reviews every output, and signs. Single-output payments are one QR scan from any wallet. send21 is never in the money path.

3. Confirmed

send21 watches the receiver address and fires signed webhooks + email as the payment is seen and confirmed.

Supported currencies & networks

CurrencyBitcoinSolanaEthereumBase
BTC bitcoinnative — on-chain (PSBT) & Lightningwrapped BTC (SPL token)WBTC (ERC-20)
USDC USD stablecoin✓ SPL token✓ ERC-20✓ ERC-20
USDT USD stablecoin✓ SPL token✓ ERC-20
EURC EUR stablecoin✓ SPL token✓ ERC-20✓ ERC-20

Every combination works for drafts, payment requests, and fee settlement. Prices can be set in any of 165 world currencies — the rate locks when the payer picks a currency. Lightning drafts use a receiver-supplied BOLT11 invoice.

Works with the wallets people already use

There are two ways to pay through send21. Payment drafts (Bitcoin) are multi-output PSBT templates and need a PSBT-capable wallet — Bitcoin Core, Sparrow, Electrum — with hardware wallets signing through them. Checkout pay links are single transfers with a standard QR code (bitcoin: / solana: / ethereum: URI), so any wallet that can scan a QR and send an exact amount works — no fee output rides along; the send21 fee accrues to the account that created the payment and is settled separately.

Top-5 wallet (2026)BTC · BitcoinUSDC · SolanaUSDT · Ethereum
Ledger StaxDrafts + checkout — sign PSBTs via Sparrow or ElectrumCheckout — Ledger Live, or Phantom with LedgerCheckout — Ledger Live, or MetaMask with Ledger
Ledger FlexDrafts + checkout — sign PSBTs via Sparrow or ElectrumCheckout — Ledger Live, or Phantom with LedgerCheckout — Ledger Live, or MetaMask with Ledger
Trezor Safe 7Drafts + checkout — sign PSBTs via Electrum or SparrowLimited — native SOL only; no USDC (SPL) sends in Trezor SuiteCheckout — Trezor Suite, or MetaMask with Trezor
MetaMaskNot supported — no Bitcoin sends or PSBTCheckout — Solana accounts supportedCheckout — scans the EIP-681 QR directly
Trust WalletCheckout only — scans the bitcoin: QR; no PSBT for draftsCheckout — SPL tokens supportedCheckout — ERC-20 supported

"Top 5" per 2026 wallet roundups (Ledger, Coincub, bitcoinfoundation.org). Compatibility reflects each wallet's published feature set as of August 2026 — always verify the address and amount in your own wallet before signing.

Run a shop? Accept BTC, USDC, USDT & EURC at the counter

Price in your own currency — any of 165 world currencies — show one QR code, and your customer pays in the crypto of their choice — straight to your wallet, rate locked at checkout, accounting-ready webhooks with the exact conversion rate.