Column Webhooks

HMAC-SHA256 signed event callbacks for ACH, wire, international wire (SWIFT), realtime (RTP/FedNow), book transfers, checks, bank accounts, identity verification, loans, and reporting.

AsyncAPI Specification

column-asyncapi.yml Raw ↑
asyncapi: '2.6.0'
info:
  title: Column Webhooks
  version: '1.0.0'
  description: |
    AsyncAPI specification for Column's webhook surface.

    Column delivers state-change notifications as HTTP POST callbacks to
    application-registered webhook endpoints. Each delivery carries an
    Event payload signed with an HMAC-SHA256 signature derived from the
    webhook endpoint's signing secret applied to the raw request body.

    Source: https://docs.column.com/working-with-the-api/events-and-webhooks/

    This document was generated from Column's public webhook documentation
    and is best-effort. Only event types confirmed in Column's documentation
    are modeled here; no event names are fabricated. The requested groupings
    transaction.*, root.account.*, person.*, and business.* are not documented
    as webhook event prefixes by Column and are therefore omitted.
  contact:
    name: Column
    url: https://column.com
    email: [email protected]
  license:
    name: Proprietary
defaultContentType: application/json
tags:
  - name: ACH
    description: ACH transfer event callbacks.
  - name: Wire
    description: Domestic wire transfer event callbacks.
  - name: BookTransfer
    description: Internal Column ledger book transfer event callbacks.
  - name: Check
    description: Check issuance, deposit, and delivery event callbacks.
  - name: Account
    description: Bank account state change event callbacks.
servers:
  production:
    url: '{webhook_endpoint_url}'
    protocol: https
    description: |
      Customer-hosted HTTPS endpoint registered with Column via
      POST /webhook-endpoints. Column delivers events as HTTP POST
      requests to this URL.
    variables:
      webhook_endpoint_url:
        description: HTTPS URL configured on your Column webhook endpoint.
        default: https://example.com/column/webhooks
channels:
  ach.outgoing_transfer.initiated:
    description: Outgoing ACH transfer was initiated.
    subscribe:
      operationId: onAchOutgoingTransferInitiated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/AchOutgoingTransferEvent'
  ach.outgoing_transfer.manual_review:
    description: Outgoing ACH transfer entered manual review.
    subscribe:
      operationId: onAchOutgoingTransferManualReview
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/AchOutgoingTransferEvent'
  ach.outgoing_transfer.submitted:
    description: Outgoing ACH transfer was submitted to the Federal Reserve.
    subscribe:
      operationId: onAchOutgoingTransferSubmitted
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/AchOutgoingTransferEvent'
  ach.outgoing_transfer.settled:
    description: Outgoing ACH transfer settled.
    subscribe:
      operationId: onAchOutgoingTransferSettled
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/AchOutgoingTransferEvent'
  ach.outgoing_transfer.completed:
    description: Outgoing ACH transfer completed.
    subscribe:
      operationId: onAchOutgoingTransferCompleted
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/AchOutgoingTransferEvent'
  ach.outgoing_transfer.returned:
    description: Outgoing ACH transfer was returned by the receiving bank.
    subscribe:
      operationId: onAchOutgoingTransferReturned
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/AchOutgoingTransferEvent'
  ach.outgoing_transfer.return_dishonored:
    description: A return on an outgoing ACH transfer was dishonored.
    subscribe:
      operationId: onAchOutgoingTransferReturnDishonored
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/AchOutgoingTransferEvent'
  ach.outgoing_transfer.return_contested:
    description: A return on an outgoing ACH transfer was contested.
    subscribe:
      operationId: onAchOutgoingTransferReturnContested
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/AchOutgoingTransferEvent'
  ach.outgoing_transfer.canceled:
    description: Outgoing ACH transfer was canceled.
    subscribe:
      operationId: onAchOutgoingTransferCanceled
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/AchOutgoingTransferEvent'
  ach.outgoing_transfer.noc:
    description: Notification of Change received on outgoing ACH transfer.
    subscribe:
      operationId: onAchOutgoingTransferNoc
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/AchOutgoingTransferEvent'
  ach.incoming_transfer.scheduled:
    description: Incoming ACH transfer was scheduled.
    subscribe:
      operationId: onAchIncomingTransferScheduled
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/AchIncomingTransferEvent'
  ach.incoming_transfer.settled:
    description: Incoming ACH transfer settled.
    subscribe:
      operationId: onAchIncomingTransferSettled
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/AchIncomingTransferEvent'
  ach.incoming_transfer.nsf:
    description: Incoming ACH transfer failed due to insufficient funds.
    subscribe:
      operationId: onAchIncomingTransferNsf
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/AchIncomingTransferEvent'
  ach.incoming_transfer.completed:
    description: Incoming ACH transfer completed.
    subscribe:
      operationId: onAchIncomingTransferCompleted
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/AchIncomingTransferEvent'
  ach.incoming_transfer.returned:
    description: Incoming ACH transfer was returned.
    subscribe:
      operationId: onAchIncomingTransferReturned
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/AchIncomingTransferEvent'
  ach.incoming_transfer.return_dishonored:
    description: A return on an incoming ACH transfer was dishonored.
    subscribe:
      operationId: onAchIncomingTransferReturnDishonored
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/AchIncomingTransferEvent'
  ach.incoming_transfer.return_contested:
    description: A return on an incoming ACH transfer was contested.
    subscribe:
      operationId: onAchIncomingTransferReturnContested
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/AchIncomingTransferEvent'
  wire.outgoing_transfer.initiated:
    description: Outgoing wire transfer was initiated.
    subscribe:
      operationId: onWireOutgoingTransferInitiated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/WireOutgoingTransferEvent'
  wire.outgoing_transfer.manual_review:
    description: Outgoing wire transfer entered manual review.
    subscribe:
      operationId: onWireOutgoingTransferManualReview
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/WireOutgoingTransferEvent'
  wire.outgoing_transfer.submitted:
    description: Outgoing wire transfer was submitted.
    subscribe:
      operationId: onWireOutgoingTransferSubmitted
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/WireOutgoingTransferEvent'
  wire.outgoing_transfer.rejected:
    description: Outgoing wire transfer was rejected.
    subscribe:
      operationId: onWireOutgoingTransferRejected
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/WireOutgoingTransferEvent'
  wire.outgoing_transfer.completed:
    description: Outgoing wire transfer completed.
    subscribe:
      operationId: onWireOutgoingTransferCompleted
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/WireOutgoingTransferEvent'
  wire.incoming_transfer.completed:
    description: Incoming wire transfer completed.
    subscribe:
      operationId: onWireIncomingTransferCompleted
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/WireIncomingTransferEvent'
  wire.incoming_return_request.initiated:
    description: Incoming wire return request was initiated.
    subscribe:
      operationId: onWireIncomingReturnRequestInitiated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/WireReturnRequestEvent'
  wire.incoming_return_request.manual_review:
    description: Incoming wire return request entered manual review.
    subscribe:
      operationId: onWireIncomingReturnRequestManualReview
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/WireReturnRequestEvent'
  wire.incoming_return_request.approved:
    description: Incoming wire return request was approved.
    subscribe:
      operationId: onWireIncomingReturnRequestApproved
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/WireReturnRequestEvent'
  wire.incoming_return_request.rejected:
    description: Incoming wire return request was rejected.
    subscribe:
      operationId: onWireIncomingReturnRequestRejected
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/WireReturnRequestEvent'
  wire.incoming_return_request.completed:
    description: Incoming wire return request completed.
    subscribe:
      operationId: onWireIncomingReturnRequestCompleted
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/WireReturnRequestEvent'
  wire.outgoing_return_request.scheduled:
    description: Outgoing wire return request was scheduled.
    subscribe:
      operationId: onWireOutgoingReturnRequestScheduled
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/WireReturnRequestEvent'
  wire.outgoing_return_request.sent:
    description: Outgoing wire return request was sent.
    subscribe:
      operationId: onWireOutgoingReturnRequestSent
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/WireReturnRequestEvent'
  wire.outgoing_return_request.manual_review:
    description: Outgoing wire return request entered manual review.
    subscribe:
      operationId: onWireOutgoingReturnRequestManualReview
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/WireReturnRequestEvent'
  wire.outgoing_return_request.approved:
    description: Outgoing wire return request was approved.
    subscribe:
      operationId: onWireOutgoingReturnRequestApproved
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/WireReturnRequestEvent'
  wire.outgoing_return_request.rejected:
    description: Outgoing wire return request was rejected.
    subscribe:
      operationId: onWireOutgoingReturnRequestRejected
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/WireReturnRequestEvent'
  wire.outgoing_return_request.completed:
    description: Outgoing wire return request completed.
    subscribe:
      operationId: onWireOutgoingReturnRequestCompleted
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/WireReturnRequestEvent'
  wire.incoming_drawdown_request.received:
    description: Incoming wire drawdown request received.
    subscribe:
      operationId: onWireIncomingDrawdownRequestReceived
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/WireDrawdownRequestEvent'
  wire.incoming_drawdown_request.approved:
    description: Incoming wire drawdown request approved.
    subscribe:
      operationId: onWireIncomingDrawdownRequestApproved
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/WireDrawdownRequestEvent'
  wire.incoming_drawdown_request.denied:
    description: Incoming wire drawdown request denied.
    subscribe:
      operationId: onWireIncomingDrawdownRequestDenied
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/WireDrawdownRequestEvent'
  book.transfer.initiated:
    description: Book transfer was initiated. Per Column docs, this type is not delivered as a webhook.
    subscribe:
      operationId: onBookTransferInitiated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/BookTransferEvent'
  book.transfer.completed:
    description: Book transfer completed.
    subscribe:
      operationId: onBookTransferCompleted
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/BookTransferEvent'
  book.transfer.hold_created:
    description: A hold was created on a book transfer.
    subscribe:
      operationId: onBookTransferHoldCreated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/BookTransferEvent'
  book.transfer.updated:
    description: A book transfer was updated.
    subscribe:
      operationId: onBookTransferUpdated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/BookTransferEvent'
  book.transfer.canceled:
    description: Book transfer was canceled.
    subscribe:
      operationId: onBookTransferCanceled
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/BookTransferEvent'
  check.incoming_debit.initiated:
    description: Incoming check debit was initiated.
    subscribe:
      operationId: onCheckIncomingDebitInitiated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckIncomingDebitEvent'
  check.incoming_debit.issued:
    description: Incoming check debit was issued.
    subscribe:
      operationId: onCheckIncomingDebitIssued
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckIncomingDebitEvent'
  check.incoming_debit.settled:
    description: Incoming check debit settled.
    subscribe:
      operationId: onCheckIncomingDebitSettled
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckIncomingDebitEvent'
  check.incoming_debit.pending_first_return:
    description: Incoming check debit is pending first return.
    subscribe:
      operationId: onCheckIncomingDebitPendingFirstReturn
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckIncomingDebitEvent'
  check.incoming_debit.returned:
    description: Incoming check debit was returned.
    subscribe:
      operationId: onCheckIncomingDebitReturned
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckIncomingDebitEvent'
  check.incoming_debit.pending_reclear:
    description: Incoming check debit is pending reclear.
    subscribe:
      operationId: onCheckIncomingDebitPendingReclear
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckIncomingDebitEvent'
  check.incoming_debit.pending_second_return:
    description: Incoming check debit is pending second return.
    subscribe:
      operationId: onCheckIncomingDebitPendingSecondReturn
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckIncomingDebitEvent'
  check.incoming_debit.second_return:
    description: Incoming check debit second return occurred.
    subscribe:
      operationId: onCheckIncomingDebitSecondReturn
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckIncomingDebitEvent'
  check.incoming_debit.user_initiated_return_submitted:
    description: User-initiated return on incoming check debit was submitted.
    subscribe:
      operationId: onCheckIncomingDebitUserInitiatedReturnSubmitted
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckIncomingDebitEvent'
  check.incoming_debit.user_initiated_returned:
    description: User-initiated return on incoming check debit completed.
    subscribe:
      operationId: onCheckIncomingDebitUserInitiatedReturned
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckIncomingDebitEvent'
  check.incoming_debit.user_initiated_return_dishonored:
    description: User-initiated return on incoming check debit dishonored.
    subscribe:
      operationId: onCheckIncomingDebitUserInitiatedReturnDishonored
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckIncomingDebitEvent'
  check.incoming_debit.pending_stop:
    description: Incoming check debit pending stop.
    subscribe:
      operationId: onCheckIncomingDebitPendingStop
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckIncomingDebitEvent'
  check.incoming_debit.stopped:
    description: Incoming check debit was stopped.
    subscribe:
      operationId: onCheckIncomingDebitStopped
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckIncomingDebitEvent'
  check.incoming_debit.manual_review:
    description: Incoming check debit entered manual review.
    subscribe:
      operationId: onCheckIncomingDebitManualReview
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckIncomingDebitEvent'
  check.incoming_debit.rejected:
    description: Incoming check debit was rejected.
    subscribe:
      operationId: onCheckIncomingDebitRejected
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckIncomingDebitEvent'
  check.incoming_debit.delivery.created:
    description: Delivery record created for incoming check debit.
    subscribe:
      operationId: onCheckIncomingDebitDeliveryCreated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckDeliveryEvent'
  check.incoming_debit.delivery.rendered_pdf:
    description: PDF rendered for incoming check debit delivery.
    subscribe:
      operationId: onCheckIncomingDebitDeliveryRenderedPdf
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckDeliveryEvent'
  check.incoming_debit.delivery.mailed:
    description: Incoming check debit delivery was mailed.
    subscribe:
      operationId: onCheckIncomingDebitDeliveryMailed
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckDeliveryEvent'
  check.incoming_debit.delivery.in_transit:
    description: Incoming check debit delivery in transit.
    subscribe:
      operationId: onCheckIncomingDebitDeliveryInTransit
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckDeliveryEvent'
  check.incoming_debit.delivery.in_local_area:
    description: Incoming check debit delivery in local area.
    subscribe:
      operationId: onCheckIncomingDebitDeliveryInLocalArea
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckDeliveryEvent'
  check.incoming_debit.delivery.processed_for_delivery:
    description: Incoming check debit delivery processed for delivery.
    subscribe:
      operationId: onCheckIncomingDebitDeliveryProcessedForDelivery
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckDeliveryEvent'
  check.incoming_debit.delivery.delivered:
    description: Incoming check debit delivery delivered.
    subscribe:
      operationId: onCheckIncomingDebitDeliveryDelivered
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckDeliveryEvent'
  check.incoming_debit.delivery.rerouted:
    description: Incoming check debit delivery rerouted.
    subscribe:
      operationId: onCheckIncomingDebitDeliveryRerouted
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckDeliveryEvent'
  check.incoming_debit.delivery.returned_to_sender:
    description: Incoming check debit delivery returned to sender.
    subscribe:
      operationId: onCheckIncomingDebitDeliveryReturnedToSender
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckDeliveryEvent'
  check.incoming_debit.delivery.failed:
    description: Incoming check debit delivery failed.
    subscribe:
      operationId: onCheckIncomingDebitDeliveryFailed
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckDeliveryEvent'
  check.outgoing_debit.initiated:
    description: Outgoing check debit was initiated.
    subscribe:
      operationId: onCheckOutgoingDebitInitiated
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckOutgoingDebitEvent'
  check.outgoing_debit.manual_review:
    description: Outgoing check debit entered manual review.
    subscribe:
      operationId: onCheckOutgoingDebitManualReview
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckOutgoingDebitEvent'
  check.outgoing_debit.rejected:
    description: Outgoing check debit was rejected.
    subscribe:
      operationId: onCheckOutgoingDebitRejected
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckOutgoingDebitEvent'
  check.outgoing_debit.pending_debit:
    description: Outgoing check debit pending debit.
    subscribe:
      operationId: onCheckOutgoingDebitPendingDebit
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckOutgoingDebitEvent'
  check.outgoing_debit.deposited:
    description: Outgoing check was deposited.
    subscribe:
      operationId: onCheckOutgoingDebitDeposited
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckOutgoingDebitEvent'
  check.outgoing_debit.settled:
    description: Outgoing check debit settled.
    subscribe:
      operationId: onCheckOutgoingDebitSettled
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckOutgoingDebitEvent'
  check.outgoing_debit.returned:
    description: Outgoing check debit was returned.
    subscribe:
      operationId: onCheckOutgoingDebitReturned
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckOutgoingDebitEvent'
  check.outgoing_debit.pending_reclear:
    description: Outgoing check debit pending reclear.
    subscribe:
      operationId: onCheckOutgoingDebitPendingReclear
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckOutgoingDebitEvent'
  check.outgoing_debit.recleared:
    description: Outgoing check debit was recleared.
    subscribe:
      operationId: onCheckOutgoingDebitRecleared
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/CheckOutgoingDebitEvent'
  account.overdrafted:
    description: Bank account became overdrafted.
    subscribe:
      operationId: onAccountOverdrafted
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/AccountEvent'
  account.overdraft_released:
    description: Bank account overdraft was released.
    subscribe:
      operationId: onAccountOverdraftReleased
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/AccountEvent'
  account.frozen:
    description: Bank account was frozen.
    subscribe:
      operationId: onAccountFrozen
      bindings:
        http:
          type: request
          method: POST
      message:
        $ref: '#/components/messages/AccountEvent'
components:
  messageTraits:
    ColumnSignedDelivery:
      headers:
        type: object
        required:
          - Column-Signature
          - Webhook-Endpoint-Id
          - Content-Type
        properties:
          Column-Signature:
            type: string
            description: |
              HMAC-SHA256 signature of the raw JSON request body using the
              webhook endpoint's signing secret as the key. Per Column docs:
              "The signature is a hash-based message authentication code
              (HMAC) with SHA-256, by applying the webhook endpoint's
              signing secret as the key, and the JSON payload (i.e., the
              request body) as the message." Signatures must be computed
              over the unmodified raw payload.
            example: 5fb8b3a3f6c7a3a5e6c7a3a5e6c7a3a5e6c7a3a5e6c7a3a5e6c7a3a5e6c7a3a5
          Webhook-Endpoint-Id:
            type: string
            description: ID of the Column webhook endpoint that received the delivery.
            example: whep_2NfQ8ZQ9TgYf7vCk9w
          Content-Type:
            type: string
            const: application/json
  messages:
    AchOutgoingTransferEvent:
      name: AchOutgoingTransferEvent
      title: Outgoing ACH transfer event
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/ColumnSignedDelivery'
      payload:
        $ref: '#/components/schemas/Event'
    AchIncomingTransferEvent:
      name: AchIncomingTransferEvent
      title: Incoming ACH transfer event
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/ColumnSignedDelivery'
      payload:
        $ref: '#/components/schemas/Event'
    WireOutgoingTransferEvent:
      name: WireOutgoingTransferEvent
      title: Outgoing wire transfer event
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/ColumnSignedDelivery'
      payload:
        $ref: '#/components/schemas/Event'
    WireIncomingTransferEvent:
      name: WireIncomingTransferEvent
      title: Incoming wire transfer event
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/ColumnSignedDelivery'
      payload:
        $ref: '#/components/schemas/Event'
    WireReturnRequestEvent:
      name: WireReturnRequestEvent
      title: Wire return request event
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/ColumnSignedDelivery'
      payload:
        $ref: '#/components/schemas/Event'
    WireDrawdownRequestEvent:
      name: WireDrawdownRequestEvent
      title: Wire drawdown request event
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/ColumnSignedDelivery'
      payload:
        $ref: '#/components/schemas/Event'
    BookTransferEvent:
      name: BookTransferEvent
      title: Book transfer event
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/ColumnSignedDelivery'
      payload:
        $ref: '#/components/schemas/Event'
    CheckIncomingDebitEvent:
      name: CheckIncomingDebitEvent
      title: Incoming check debit event
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/ColumnSignedDelivery'
      payload:
        $ref: '#/components/schemas/Event'
    CheckOutgoingDebitEvent:
      name: CheckOutgoingDebitEvent
      title: Outgoing check debit event
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/ColumnSignedDelivery'
      payload:
        $ref: '#/components/schemas/Event'
    CheckDeliveryEvent:
      name: CheckDeliveryEvent
      title: Check delivery event
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/ColumnSignedDelivery'
      payload:
        $ref: '#/components/schemas/Event'
    AccountEvent:
      name: AccountEvent
      title: Bank account event
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/ColumnSignedDelivery'
      payload:
        $ref: '#/components/schemas/Event'
  schemas:
    Event:
      type: object
      description: |
        Column Event object delivered as the JSON body of a webhook callback.
        Per Column docs, an Event is "a snapshot of data at a point in time"
        created on each state change of an underlying resource.
      required:
        - id
        - type
        - created_at
        - data
      properties:
        id:
          type: string
          description: Unique identifier for the Event. Stable across redeliveries; use it for idempotent processing.
          example: evt_2NfQ8ZQ9TgYf7vCk9w
        type:
          type: string
          description: The dotted event type name (for example, ach.outgoing_transfer.settled).
        created_at:
          type: string
          format: date-time
          description: Timestamp the event was created.
        data:
          type: object
          description: |
            Resource snapshot for the event. The shape depends on the
            event type and corresponds to the underlying Column resource
            (ACH transfer, wire transfer, book transfer, check, bank
            account, identity, etc.). Refer to the Column API reference
            for each resource's full schema.
          additionalProperties: true