Interchecks · AsyncAPI Specification

Interchecks Webhooks

Version

View Spec View on GitHub PaymentsPayoutsACHReal-Time PaymentsInstant PaymentsDisbursementsCardsFinancial ServicesFintechWebhooksAsyncAPIWebhooksEvents

AsyncAPI Specification

Raw ↑
generated: '2026-08-23'
method: searched
source: https://docs-v2.interchecks.com/docs/webhooks
asyncapi_published: false
asyncapi_note: >-
  Interchecks publishes no AsyncAPI, EventBridge schema, or machine-readable event catalog. It
  documents an HTTP webhook surface in prose with JSON payload samples, captured verbatim below.
  No AsyncAPI document has been authored on the provider's behalf.
transport: https-webhook
configuration: >-
  Webhook destination URLs are configured in the Developer area of the Interchecks Portal at the
  aggregator or the payer level. When the API account is created at the aggregator level, webhooks
  fire against the aggregator's webhook settings.
delivery:
  retry_policy: >-
    A non-2xx response triggers 2 additional retries within 15 seconds, then the whole cycle
    repeats again within the next 2 hours.
  ordering: not stated
  idempotency:
    header: x-webhook-id
    description: >-
      Every webhook carries an x-webhook-id whose value matches the Aws-Api-Gateway-Requestid
      response header from the originating create request, giving the consumer a dedupe key that
      also correlates back to the API call.
security:
  signature:
    header: x-verification
    format: JWT
    algorithm: RS256
    payload_claims:
    - name: iat
      description: issue time in seconds; reject webhooks older than 5 minutes
    - name: request_body_sha256_hash
      description: SHA-256 hash of the webhook body, case insensitive
    key_discovery: >-
      GET https://{env}.api.interchecks.io/api/v2/{payer_id}/webhooks/get_validation_key/{kid}
      returns the RSA public key as a JWK (kty, e, n). The kid comes from the JWT header.
    verification_steps:
    - Decode the x-verification header JWT and read its kid.
    - Fetch the validation key for that kid.
    - Verify the JWT signature; if invalid, do not process the webhook.
    - Compare request_body_sha256_hash to the SHA-256 of the received body; if they differ, do not process.
    - Reject if iat is more than 5 minutes old.
  origin_ips: >-
    The documentation states webhook origin IPs were published in the 2022-04 documentation
    update; the current values are held in the reference area rather than in this page.
event_count: 3
events:
- name: PAYMENT
  discriminator: webhook_type
  trigger: Payment status updates
  payload:
    webhook_type: 'PAYMENT'
    payment_id: 'String : Payment ID'
    payment_status: 'Enum : Payment Status'
    reference_id: 'String (optional) : Reference ID if included'
  related_operations:
  - create-payment
  - update-payment
  - get-payment-by-id
- name: TRANSACTION
  discriminator: webhook_type
  trigger: >-
    Transaction status updates. A transaction webhook is sent on the initial request and on every
    subsequent status change, which is how ACH, RTP and card settlement outcomes are learned.
  payload:
    webhook_type: 'TRANSACTION'
    type: 'Enum : Transaction Type'
    method: 'Enum: Transaction Method'
    transaction_id: 'String : Transaction ID'
    transaction_status: 'Enum : Transaction Status'
    reference_id: 'String (optional) : Reference ID if included'
    webhook_created_date: 'Timestamp'
    network_approval_code: 'String : Approval code for Instant Deposit'
  error_variant:
    webhook_type: 'TRANSACTION'
    transaction_id: 'String : Transaction ID'
    transaction_status: 'Enum : Transaction Status'
    reference_id: 'String (optional) : Reference ID if included'
    error_code: 'String: error code'
    error_message: 'String: error detail'
  statuses:
  - APPROVAL_REQUIRED
  - CANCELLED
  - FAILED
  - PAID
  - PENDING_KYC
  - PROCESSING
  - RETRY
  - REFUNDED
  - REFUNDED_PARTIAL
  - REVERSED
  - REVERSAL_PENDING
  - UNKNOWN
  related_operations:
  - create-transaction
  - update-transaction
  - get-transaction
- name: PAYMENT_ACCOUNT
  discriminator: webhook_type
  trigger: >-
    Destination account lifecycle — prepaid account created via API, card account added via the
    widget UI, bank account added via the widget UI, and bank account status change on a
    chargeback or reversal request.
  variants:
  - subject: bank-account-created
    payload:
      widget_id: 'String: Widget ID'
      webhook_type: 'PAYMENT_ACCOUNT'
      account_id: 'String : Account ID'
      recipient_id: 'String : Recipient ID'
      account_number: 'String : Last 4 of Account Number'
      account_type: 'String: CHECKING or SAVINGS'
      bank_name: 'String'
  - subject: bank-account-status-update
    payload:
      widget_id: 'String: Widget ID'
      webhook_type: 'PAYMENT_ACCOUNT'
      account_id: 'String : Account ID'
      recipient_id: 'String : Recipient ID'
      account_status: 'String : Status of Bank Account'
    account_statuses:
    - code: BANK_ACCOUNT_BLOCKED
      meaning: Account is blocked due to fraud controls
    - code: PLAID_REAUTH_REQUIRED
      meaning: >-
        Plaid authorization is due to expire or will expire; a Bank Account Widget request to
        reauthorize is required before transacting once it does
    - code: PLAID_PERMISSION_REVOKED
      meaning: >-
        The user explicitly revoked Plaid permission; a new Bank Account Widget request is
        required before transacting
  - subject: bank-account-failure
    payload:
      widget_id: 'String: Widget ID'
      webhook_type: 'PAYMENT_ACCOUNT'
      account_id: 'String : Account ID'
      recipient_id: 'String : Recipient ID'
      error_code: 'String: error code'
      error_message: 'String: error detail'
  - subject: card-account-created
    payload:
      widget_id: 'String: Widget ID'
      webhook_type: 'PAYMENT_ACCOUNT'
      account_id: 'String : Account ID'
      recipient_id: 'String : Recipient ID'
      card_number: 'String Masked card number'
  - subject: card-account-fraud-failure
    payload:
      widget_id: 'String: Widget ID'
      webhook_type: 'PAYMENT_ACCOUNT'
      account_id: 'String : Account ID'
      recipient_id: 'String : Recipient ID'
      card_number: 'String : Masked card number'
      error_code: 'ERR_ACCOUNT_SHARING_LIMIT_EXCEEDED'
  - subject: card-account-created-with-verification
    payload:
      widget_id: 'String: Widget ID'
      webhook_type: 'PAYMENT_ACCOUNT'
      account_id: 'String : Account ID'
      recipient_id: 'String : Recipient ID'
      card_number: 'String Masked card number'
      verification_result:
        network: 'String: VISA/MASTERCARD'
        pan: 'String: Match result'
        cvv: 'String: Match result'
        avs:
          street: 'String: Match result'
          zip: 'String Match result'
        ani:
          first_name: 'String: Match result'
          last_name: 'String: Match result'
  - subject: prepaid-account
    payload:
      widget_id: 'String: Widget ID'
      webhook_type: 'PAYMENT_ACCOUNT'
      account_id: 'String : Account ID'
      recipient_id: 'String : Recipient ID'
      prepaid_account_status: 'String : Account Status'
      prepaid_account_error: 'String : Account Error Detail'
  related_operations:
  - create-bank-widget
  - create-card-widget
  - create-prepaid-dashboard-widget
  - create-prepaid-account

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/interchecks-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.