send21-io · AsyncAPI Specification

Send21 Io Webhooks

Version

View Spec View on GitHub CompanyPaymentsCryptoAPINon-custodialAIAsyncAPIEvents

AsyncAPI Specification

Raw ↑
generated: '2026-10-31'
method: searched
generator: extract-docs-artifacts.py (local)
source: https://send21.io/docs/webhooks.md
sources:
- https://send21.io/docs/webhooks.md
- https://send21.io/docs/webhooks
description: send21 calls your server when a draft changes.
events:
- event: draft.created
  description: 'A draft was created: by you, an API key, a recurring template, or a payer picking a currency on a pay link.'
- event: draft.seen
  description: 'A payment was seen but is not confirmed yet. Also sent with `acceptedByOwner: true` when you accept a payment with a different
    amount.'
- event: draft.confirmed
  description: 'The payment reached its required confirmations. For Lightning: the provider confirmed it with a valid preimage.'
- event: draft.amount_mismatch
  description: 'A transfer within 10% of the billed amount arrived (`reviewState: pending`). It does not pay the draft until you accept it. Sent
    once.'
- event: draft.mismatch_rejected
  description: 'You declined it with `rejectReason`. Carries both amounts and `refund: "manual"`: the money is in your wallet and any refund is
    up to you.'
- event: draft.mismatch_reminder
  description: Still undecided 2 hours before the draft expires. Sent once.
- event: draft.mismatch_unresolved
  description: The draft expired (or was cancelled) while the transfer was undecided. Money arrived; nobody decided. You can still accept it.
- event: draft.expired
  description: 'The draft expired unpaid. If a transfer with a different amount was undecided, `receivedAmountSats` and `reviewState: unresolved`
    are set. For pay‑link payments it also says `opened` and `quoteRequested`.'
- event: draft.mismatch_accepted
  description: 'A payment with a different amount was accepted: by you, with `acceptReason`, or by the draft''s `shortfallPolicy` (`acceptReason:
    "auto: shortfallPolicy"`). Carries the expected and received amounts.'
- event: payment_request.expired
  description: 'A pay link expired unpaid. `opened`: the payer loaded the pay page (link previews and bots ignored). `quoteRequested`: they picked
    a currency. No IP or payer data.'
- event: draft.cancelled
  description: The draft was cancelled.
- event: test
  description: Sent by the test endpoint.
delivery:
  content_type: 'application/json; POST body { "event": "<type>", "data": { ... } }'
note: Any 2xx response counts as delivered. Anything else, or no answer within 15 seconds, is retried after 1, 2, 4, 8 minutes and so on, up to
  8 attempts. Deliveries can arrive out of order. Retries reuse the same `X-Send21-Delivery` id.
docs: https://send21.io/docs/webhooks.md

Work with this as data

Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for asyncapi

4 MCP tools reach this
  • find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/send21-io-webhooks"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.