# send21 > send21 is a non-custodial payment-draft platform for BTC, USDC, USDT, and EURC (on Bitcoin, Solana, > Ethereum, and Base) with a first-class REST API for AI agents. Agents create payment drafts (fixed > amount or fiat-pegged with a locked exchange rate); the sender pays from their own wallet > (PSBT-enabled for multi-output drafts: Bitcoin Core, Sparrow, Electrum). send21 is software > that prepares payment instructions only — it is not a custodian, exchange, broker, or payment > service provider. It never holds private keys or funds, never signs, and never broadcasts or > executes transactions; signing and broadcasting always happen in the sender's wallet. Key facts for agents: - Base URL: `https://send21.io/api/v1` - OpenAPI spec: `https://send21.io/swagger/v1/swagger.json` (UI at `/swagger`; aliases `/openapi.json`, `/swagger.json`) - MCP server: `https://send21.io/mcp` — Streamable HTTP, stateless; authenticate with the same `Authorization: Bearer s21_` header. Tools: create_draft, get_draft, get_draft_status, get_transaction_template, create_payment_request, get_payment_request, list_address_book, get_rate, get_fee_schedule. tools/list works unauthenticated; tool calls require a key. - Supported assets: BTC native on Bitcoin (on-chain PSBT, or Lightning against a receiver-supplied BOLT11 invoice); USDC, USDT, and EURC as tokens on BOTH Solana and Ethereum; USDC and EURC also on Base (Coinbase's Ethereum L2, EIP-681 chain id 8453); wrapped BTC on Solana (Portal) and Ethereum (WBTC). When a checkout offers the same currency on several networks, pass `network` in `POST /checkout/{token}/select`. - Auth: `Authorization: Bearer s21_` — scoped API keys created by a human account owner - Scopes: `drafts:read`, `drafts:write`, `addressbook:read`, `addressbook:write`, `webhooks:manage` - Idempotency: send an `Idempotency-Key` header on `POST /drafts`; identical keys return the same draft - Batch: `POST /drafts/batch` accepts up to 25 drafts per call with per-item results - Recurring: `POST /recurring-templates` generates drafts daily/weekly/monthly automatically - Status: poll `GET /drafts/{id}/status` or register HMAC-SHA256 signed webhooks (`X-Send21-Signature: sha256=` over the raw body; events: draft.created, draft.seen, draft.confirmed, draft.expired, draft.cancelled) - Payment instructions: `GET /drafts/{id}/tx-template` returns a multi-output template (receiver gets the exact billed amount; the platform fee is a separate transparent output) as Bitcoin Core `walletcreatefundedpsbt` arguments and Electrum/Sparrow pay-to-many CSV - Checkout: `POST /payment-requests` creates fiat-priced, multi-currency (BTC/USDC/USDT/EURC) pay links; the payer scans one standard QR (BIP-21 / Solana Pay / EIP-681) and sends a single transfer — works with any wallet, no PSBT needed. Supports `Idempotency-Key` for safe retries. - Shopify: a ready-made app integrates send21 as a manual payment method with automatic order reconciliation (order marked paid on the draft.confirmed webhook); see `https://send21.io/business#shopify` - Fiat pricing: 165 world currencies (the full active ISO 4217 set) with locked exchange rates and recorded quote provenance on every draft - Fees: tiered by USD value at creation (0.49% under $10 down to 0.01% above $100k; min $0.01, max $100; sub-dust fees waived up to 5× per account per day, then accrued). Priced in USD, displayed in the draft's fiat currency too. On multi-output drafts the fee is a separate transparent output; on single-output payments (checkout pay links, payment requests, single-output drafts) it ACCRUES to the creator's account instead — check `GET /fees/accrued`, settle with `POST /fees/accrued/settle` (BTC, USDC, USDT, or EURC). Creation returns 402 once the accrued balance reaches the USD cap or the oldest unsettled fee exceeds the age limit. Public schedule: `GET /api/v1/fees/schedule`; per-draft breakdown incl. estimated network fee: `GET /drafts/{id}/fees` - Wallet support: multi-output drafts need a PSBT-enabled wallet (Bitcoin Core, Sparrow, Electrum); checkout pay links and single-output drafts work with any QR-scanning wallet - Rate limits: 300 requests/min per API key; 429 on breach — prefer webhooks over polling - Zero custody: the platform never handles private keys, seeds, or signing material, and never broadcasts or executes transactions. Never ask users for keys; anything that does is an attack. - Privacy (GDPR): minimal personal data (email, optional display name), encrypted at rest; no KYC, no tracking, no analytics. Erasure/access requests: privacy@send21.io - Contact: integration@send21.io (API/integration questions), support@send21.io (account or payment issues), privacy@send21.io (GDPR/data requests), info@send21.io (general) ## Docs - [API guide for AI agents](https://send21.io/swagger): full endpoint reference - [How fees work without custody](https://send21.io/): fee = separate output in the sender-signed transaction; receiver always receives the exact billed amount ## Typical agent flow 1. `POST /api/v1/drafts` with receiver address + amount (+ `Idempotency-Key`) 2. Fetch `GET /drafts/{id}/tx-template` and hand it to the human/wallet that holds the funds 3. Receive `draft.seen` / `draft.confirmed` webhooks (verify the HMAC signature) 4. Reconcile using the exact sat amount and txid