Skip to main content

Documentation Index

Fetch the complete documentation index at: https://developer.meow.com/llms.txt

Use this file to discover all available pages before exploring further.

Every event Meow sends has the same envelope. The data object is the resource snapshot (or {id, object} in thin mode). The lifecycle stage lives on data.status — dispatch on that, not the event name.
Envelope
{
  "type": "ach_transfer.updated",
  "timestamp": "2026-04-28T08:00:00Z",
  "data": { "...": "..." }
}
ID shapes.
  • Meow-managed IDs (entity_id, account_id, counterparty_id, virtual_account_id, subscription_id, delivery_id) are UUIDs.
  • Resource IDs (ach_transfer.id, wire_transfer.id, inbound transaction id, check_deposit.id, global_account_transfer.id) are opaque strings whose format varies by the underlying bank:
    • CRB / FirstBank: deposit_inach_11mn5s777xgveb9, withdrawal_txc_15wp3bd309xenf6p, book_11n0b3vs9vy0ypw, interest_txc_15wp2ghq09qm3141.
    • Bridge global accounts: bridge_va_inach_<uuid> (incoming ACH), bridge_va_iw_<uuid> (incoming wire), bridge_wallet_ext_ach_<uuid> (external ACH off-ramp), bridge_wallet_ext_wire_<uuid> (external wire), wallet_transfer_group_<uuid> / wallet_deposit_group_<uuid> (wallet send / receive).
    • Treasury Prime: TP’s own external IDs.
    Treat resource IDs as tokens; don’t parse them.
EventWhen it fires
ach_transfer.createdA new outbound ACH transfer was created.
ach_transfer.updatedAn outbound ACH transfer changed state.
wire_transfer.createdA new outbound wire was created.
wire_transfer.updatedAn outbound wire changed state.
inbound_ach_transfer.createdAn ACH credit or debit hit your account.
inbound_ach_transfer.updatedAn inbound ACH changed state.
inbound_wire_transfer.createdA wire arrived at your account.
inbound_wire_transfer.updatedAn inbound wire changed state.
check_deposit.createdA check deposit was submitted.
check_deposit.updatedA check deposit changed state.
global_account_transfer.createdActivity on a global (virtual) account. Single-emission.
webhook.testA test event you triggered.
message.attempt.exhaustedA delivery hit 10 failed attempts and the subscription was auto-disabled.

ach_transfer

status values: pending, processing, sent, returned, canceled, error. Optional fields not shown in the sample: operation_request_id.
{
  "type": "ach_transfer.updated",
  "timestamp": "2026-04-28T08:00:00Z",
  "data": {
    "id": "withdrawal_txc_15wp3bd309xenf6p",
    "object": "ach_transfer",
    "created": "2026-04-28T07:59:50Z",
    "updated": "2026-04-28T08:00:00Z",
    "entity_id": "6f3b1d7c-aa90-4f0c-a5d2-9c8b1d3e2c10",
    "status": "sent",
    "amount": "1500.00",
    "counterparty_id": "5dada3c2-7f3a-4f2e-8a91-3d6f1c9b9e22",
    "counterparty_name": "Acme Corp",
    "counterparty_account_number": "****1234",
    "counterparty_routing_number": "021000021",
    "description": "April invoice",
    "error": null
  }
}

wire_transfer

Same status values as ach_transfer. Extra wire-only fields: counterparty_bank_name, purpose, imad (Fed reference), instructions.
{
  "type": "wire_transfer.updated",
  "timestamp": "2026-04-28T08:00:00Z",
  "data": {
    "id": "wire_dom_a8e9c7d24b1f4a3e8a91d9e87c5b9001",
    "object": "wire_transfer",
    "created": "2026-04-28T07:59:50Z",
    "updated": "2026-04-28T08:00:00Z",
    "entity_id": "6f3b1d7c-aa90-4f0c-a5d2-9c8b1d3e2c10",
    "status": "sent",
    "amount": "10000.00",
    "counterparty_id": "5dada3c2-7f3a-4f2e-8a91-3d6f1c9b9e22",
    "counterparty_name": "Acme Corp",
    "counterparty_bank_name": "JPMorgan Chase",
    "purpose": "Q2 settlement",
    "imad": "20260428B1QGC07C012345"
  }
}

inbound_ach_transfer

status values: pending, posted, scheduled, failed, canceled, returned. Casing matches outbound (lowercase on the wire).
{
  "type": "inbound_ach_transfer.updated",
  "timestamp": "2026-04-28T14:00:00Z",
  "data": {
    "id": "deposit_inach_11mn5s777xgveb9",
    "object": "inbound_ach_transfer",
    "created": "2026-04-28T13:59:00Z",
    "updated": "2026-04-28T14:00:00Z",
    "entity_id": "6f3b1d7c-aa90-4f0c-a5d2-9c8b1d3e2c10",
    "account_id": "a8e9c7d2-4b1f-4a3e-8a91-d9e87c5b9001",
    "amount": "250.00",
    "currency": "USD",
    "status": "posted",
    "originator_name": "Stripe Connect"
  }
}

inbound_wire_transfer

Same shape as inbound ACH; object is inbound_wire_transfer.

check_deposit

Same shape as inbound ACH; object is check_deposit.

global_account_transfer

Activity on a global (virtual) account. Each activity is one-shot — funds_scheduled and funds_received for the same deposit share deposit_id but arrive as two separate events with different ids. activity_type values: funds_scheduled, funds_received, payment_submitted, payment_processed, refund_in_flight, refunded, refund_failed. currency is lowercase: usd, usdc, usdt, usdb, usdg, pyusd, dai, cash.
{
  "type": "global_account_transfer.created",
  "timestamp": "2026-04-28T08:00:00Z",
  "data": {
    "id": "bridge_va_inach_f5140b06-814e-4f4b-810b-217859d7b721",
    "object": "global_account_transfer",
    "created": "2026-04-28T08:00:00Z",
    "updated": null,
    "entity_id": "6f3b1d7c-aa90-4f0c-a5d2-9c8b1d3e2c10",
    "virtual_account_id": "9b3a7c5e-1d20-4a6f-8c1d-e7b34f25a8e9",
    "activity_type": "funds_received",
    "amount": "5000.00",
    "currency": "usdc",
    "payment_rail": null
  }
}

webhook.test

Triggered manually via POST /webhooks/subscriptions/{id}/test. Always sent in full (the thin mode falls through because there’s no id to GET).
{
  "type": "webhook.test",
  "timestamp": "2026-04-28T08:00:00Z",
  "data": {
    "subscription_id": "7b9e8a5f-3c2d-4d11-9a8c-1e6c4f2a5b30",
    "entity_id": "6f3b1d7c-aa90-4f0c-a5d2-9c8b1d3e2c10",
    "generated_at": "2026-04-28T08:00:00Z"
  }
}

message.attempt.exhausted

Fires when a delivery hits 10 failed attempts. The subscription is auto-disabled (disabled_reason=retry_exhausted). Use this to page an on-call. last_response_status is null if every attempt failed before getting an HTTP response (timeout, DNS, TLS).
{
  "type": "message.attempt.exhausted",
  "timestamp": "2026-04-28T08:00:00Z",
  "data": {
    "delivery_id": "0c5b4a3e-9d2c-4f1a-b7e0-21b1d8c4a9f1",
    "subscription_id": "7b9e8a5f-3c2d-4d11-9a8c-1e6c4f2a5b30",
    "event_type": "ach_transfer.updated",
    "attempt_count": 10,
    "last_response_status": 504,
    "last_error_message": "Your endpoint did not respond within the timeout."
  }
}