Interchecks · AsyncAPI Specification
Interchecks Webhooks
Version
View Spec
View on GitHub
PaymentsPayoutsACHReal-Time PaymentsInstant PaymentsDisbursementsCardsFinancial-ServicesFintechWebhookAsyncAPIEvents
AsyncAPI Specification
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.
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 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.