AsyncAPI Specification
generated: '2026-11-05'
method: searched
source:
- https://docs.rutter.com/implementation-guides/webhooks
- https://docs.rutter.com/rest/2024-08-31/basics#webhooks
- https://help.rutter.com/articles/5827777992-how-do-rutter-webhooks-work
- https://help.rutter.com/articles/9212187474-how-do-i-set-up-and-receive-webhooks
name: Rutter webhooks
summary: >-
Rutter emits webhooks for connection status changes and for platform object creation/update/deletion computed on
each incremental sync, with real-time delivery for QuickBooks Online, Xero and Sage Intacct. Every payload carries a
type and a code; webhook URLs and payload versions are configured in the dashboard (and readable via the
/configs/webhooks and /logs/webhooks operations). No AsyncAPI document is published.
asyncapi_published: false
configuration:
dashboard: Webhook URLs and the webhook payload version are set in the Rutter Dashboard
api: listWebhooks (GET /configs/webhooks), fetchWebhooksIdById, listWebhookLogs (GET /logs/webhooks), fetchWebhookLog, listEvents (GET /events)
delivery:
signature_header: X-Rutter-Signature
signature_scheme: 'sha256= prefix + base64(HMAC-SHA256(payload, organization client secret))'
rotation_header: 'X-Rutter-Signatures — comma-separated list of all currently active signatures; carries both new and expiring secrets during a client-secret rotation grace period'
verification: 'Split X-Rutter-Signatures on ", "; compute sha256= + base64(HMAC-SHA256(payload, secret)) for each active client secret; accept if any matches.'
response_required: 2xx within 5 seconds
retries:
policy: exponential backoff with jitter (up to 10 seconds), up to 6 retries, continuing for up to 15 minutes from the webhook's creation time, then marked permanently failed
schedule:
- { attempt: 1st retry, delay: ~15s, elapsed: ~15s }
- { attempt: 2nd retry, delay: ~25s, elapsed: ~40s }
- { attempt: 3rd retry, delay: ~45s, elapsed: ~1.5 min }
- { attempt: 4th retry, delay: ~1.5 min, elapsed: ~3 min }
- { attempt: 5th retry, delay: ~3 min, elapsed: ~6 min }
- { attempt: 6th retry, delay: ~5.5 min, elapsed: ~11 min }
realtime_platforms: [QuickBooks Online, Xero, Sage Intacct]
job_webhook: Both synchronous and asynchronous write requests are backed by a job; a webhook fires to configured URLs when the job succeeds.
events:
- type: CONNECTION
codes: [INITIAL_UPDATE, HISTORICAL_UPDATE, INCREMENTAL_SYNC_COMPLETED, CONNECTION_AUTHENTICATED, CONNECTION_UPDATED, CONNECTION_NEEDS_UPDATE, CONNECTION_DISABLED, CONNECTION_ERROR, CONNECTION_LINK_ERROR]
note: Fetching data before INITIAL_UPDATE returns PRODUCT_NOT_READY.
- type: PRODUCT
codes: [PRODUCT_READY, PRODUCT_FINISH_FAILED, PRODUCT_CREATED, PRODUCT_UPDATED, PRODUCT_DELETED]
- type: ACCOUNT
codes: [ACCOUNT_CREATED, ACCOUNT_UPDATED]
- type: BILL
codes: [BILL_CREATED, BILL_UPDATED, BILL_DELETED]
- type: BILL_PAYMENT
codes: [BILL_PAYMENT_CREATED, BILL_PAYMENT_UPDATED]
- type: CUSTOMER
codes: [CUSTOMER_CREATED, CUSTOMER_UPDATED]
- type: INVOICE
codes: [INVOICE_CREATED, INVOICE_UPDATED]
- type: INVOICE_CREDIT_MEMO
codes: [INVOICE_CREDIT_MEMO_CREATED, INVOICE_CREDIT_MEMO_UPDATED]
- type: JOURNAL_ENTRY
codes: [JOURNAL_ENTRY_CREATED, JOURNAL_ENTRY_UPDATED]
- type: VENDOR
codes: [VENDOR_CREATED, VENDOR_UPDATED]
- type: ORDER
codes: [ORDER_CREATED, ORDER_UPDATED, ORDER_DELETED]
- type: STORE
codes: [STORE_UPDATED]
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/rutter-webhooks"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
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.