Accrue Savings · AsyncAPI Specification

Accrue Savings Merchant Api Webhooks

Version

View Spec View on GitHub CompanyPaymentsLoyaltyWalletsStored ValueRewardsBankingFintechWebhooksAsyncAPIEvents

AsyncAPI Specification

Raw ↑
generated: '2026-09-06'
method: searched
source: openapi/accrue-savings-merchant-api-openapi.yaml (top-level `webhooks` object, OpenAPI 3.1) and
  https://docs.byaccrue.com/docs/webhooks/
docs: https://docs.byaccrue.com/docs/webhooks/
asyncapi:
  published: false
  note: Accrue publishes NO AsyncAPI document. Its event surface is described inside the OpenAPI 3.1 `webhooks`
    object — the modern OpenAPI way to do this — with a full request schema per topic. That is a real
    machine-readable event contract; it is simply not AsyncAPI, so no asyncapi spec file is saved and
    none is fabricated.
delivery: HTTP POST to a merchant-registered endpoint, body application/vnd.api+json in the JSON:API document
  shape (data + included).
management_api:
  operations:
  - createWebhook
  - getWebhooks
  - getWebhook
  - updateWebhook
  - deleteWebhook
  - listWebhookEvents
  - getWebhookEvent
  note: Subscriptions are managed through the API itself, and delivered events are queryable after the
    fact via listWebhookEvents / getWebhookEvent — a replay/audit surface many providers omit. Subscribing
    with the "*" wildcard means new topics arrive automatically, which Accrue calls out in its changelog.
security:
  mechanism: signature verification
  documented: partially
  note: The getting-started guide says to always verify webhook signatures using a constant-time comparison,
    but neither the signing header name, the algorithm, nor the secret-provisioning flow is published
    publicly. An integrator cannot implement verification from the public docs alone.
topic_count: 20
topics:
- topic: paymentIntentCreated
  event: PaymentIntentCreated
  method: POST
  description: null
- topic: paymentIntentUpdated
  event: PaymentIntentUpdated
  method: POST
  description: null
- topic: paymentCreated
  event: PaymentCreated
  method: POST
  description: null
- topic: paymentUpdated
  event: PaymentUpdated
  method: POST
  description: null
- topic: paymentCaptured
  event: PaymentCaptured
  method: POST
  description: null
- topic: refundCreated
  event: RefundCreated
  method: POST
  description: null
- topic: refundUpdated
  event: RefundUpdated
  method: POST
  description: null
- topic: kycCreated
  event: KycCreated
  method: POST
  description: Fired when a KYC application is created for a user. This event is triggered when a user
    initiates the identity verification process.
- topic: kycApproved
  event: KycApproved
  method: POST
  description: Fired when a KYC application is approved. This event indicates that the user has successfully
    passed identity verification and can access banking features.
- topic: kycDeclined
  event: KycDeclined
  method: POST
  description: Fired when a KYC application is declined. This event indicates that the user did not pass
    identity verification and cannot access banking features.
- topic: kycAwaitingDocuments
  event: KycAwaitingDocuments
  method: POST
  description: Fired when a KYC application requires additional document verification. This event indicates
    that the user needs to upload identity documents (such as a driver's license or passport) to complete
    verification.
- topic: kycPending
  event: KycPending
  method: POST
  description: Fired when a KYC application is pending review. This event indicates that the application
    is being processed through automated verification checks.
- topic: kycManualReview
  event: KycManualReview
  method: POST
  description: Fired when a KYC application requires manual review. This event indicates that automated
    verification could not make a determination and the application needs human review.
- topic: transactionCleared
  event: Transaction Cleared
  method: POST
  description: Fired when a transaction is cleared. This event indicates that the transaction has been
    successfully processed and funds are available. The included payload contains event data with a **fee**
    object (fee type and amount in cents).
- topic: transactionFailed
  event: Transaction Failed
  method: POST
  description: 'Fired when a transaction fails. This event indicates that the transaction could not be
    processed successfully. The included payload contains event data with a **fee** object (fee type and
    amount in cents) and **failureReason** (TransactionFailureReason: e.g. Canceled, HardDecline, SoftDecline,
    Expired, InsufficientFunds, Reversed, Unknown).'
- topic: counterpartyIncomingPayment
  event: CounterpartyIncomingPayment
  method: POST
  description: 'Fired when a payment arrives on a counterparty''s bank account and has been recorded on
    the counterparty''s balance. Use this to reconcile funding you receive from a counterparty over bank
    rails without polling the counterparty balance.


    The included payload carries **counterpartyId**, **amount** (in cents), **currency**, **direction**
    (`credit` for funds received, `debit` for funds withdrawn), **method** (the bank rail, for example
    `ach` or `wire`), **asOfDate** (the bank settlement date), and **externalIncomingPaymentId** for reconciliation
    against your bank records.


    This event is only sent after the payment has been recorded, so the counterparty balance already reflects
    it when you receive the webhook.'
- topic: counterpartyPayoutCreated
  event: CounterpartyPayoutCreated
  method: POST
  description: 'Fired when a payout is created for a counterparty and submitted for processing. `status`
    is the payout''s initial state, which may be `Approved`, `NeedsApproval`, or `Processing` depending
    on your approval configuration.


    A duplicate create — the same idempotency key replayed — returns the existing payout and does **not**
    fire a second event.


    The included payload mirrors the payout resource — **payoutId**, **counterpartyId**, **amount** (in
    cents), **currency**, **status**, **description**, and **effectiveDate** — so you can act on the event
    without re-reading the payouts API.'
- topic: counterpartyPayoutSent
  event: CounterpartyPayoutSent
  method: POST
  description: 'Fired when the payout has been sent to the bank. The funds have left, but the payment
    is not yet reconciled — a payout can sit in this state for a few days depending on the rail, and can
    still be returned afterwards. Wait for `CounterpartyPayoutCompleted` before treating the money as
    delivered.


    The included payload mirrors the payout resource — **payoutId**, **counterpartyId**, **amount** (in
    cents), **currency**, **status**, **description**, and **effectiveDate** — so you can act on the event
    without re-reading the payouts API.'
- topic: counterpartyPayoutCompleted
  event: CounterpartyPayoutCompleted
  method: POST
  description: 'Fired when the payout has been reconciled to a posted bank transaction. This is the terminal
    success state: the funds have settled at the receiving bank.


    The included payload mirrors the payout resource — **payoutId**, **counterpartyId**, **amount** (in
    cents), **currency**, **status**, **description**, and **effectiveDate** — so you can act on the event
    without re-reading the payouts API.'
- topic: counterpartyPayoutReturned
  event: CounterpartyPayoutReturned
  method: POST
  description: 'Fired when a payout ends without delivering funds. This covers every terminal failure
    — returned, reversed, cancelled, denied, and failed — so read **status** to see which occurred rather
    than relying on the topic name.


    **returnCode** and **returnReason** are populated when the receiving bank returned the payment (for
    example `R01`, insufficient funds) and are null for the other failures. The payout amount is available
    on the counterparty balance again.


    The included payload mirrors the payout resource — **payoutId**, **counterpartyId**, **amount** (in
    cents), **currency**, **status**, **description**, and **effectiveDate** — so you can act on the event
    without re-reading the payouts API.'
error_codes:
- InvalidTopics (400) on webhook registration
- WebhookNotFoundResponse (404)

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/accrue-savings-merchant-api-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 email required.

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