AsyncAPI Specification
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.
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.