---
title: "Webhook event: charge.event.v1"
method: POST
path: "charge.event.v1"
---

# Webhook event: charge.event.v1

`POST charge.event.v1` (webhook)

Triggered throughout the charge lifecycle to indicate status changes and important events. This includes successful processing, failed attempts, balance check results, fraud detection alerts, and final settlement status.

## Payload

- object
  - `event_type` string, required — Type of the event
  - `event_id` string, uuid, required — UUID of the event
  - `account_id` string, uuid, required — UUID of the account associated with this event
  - `data` ChargeEventV1, required
    - `id` string, uuid, required — Id.
    - `paykey` string, required — Paykey.
    - `description` string, nullable, required — Description.
    - `payment_rail` 'ach' | 'ACH'
    - `paykey_details` PaykeyDetailsEventV1
      - `id` string, uuid, required — Id.
      - `customer_id` string, uuid, required — Customer id.
      - `label` string, required — Label.
      - `balance` integer, nullable — Balance.
    - `customer_details` CustomerDetailsEventV1
      - `id` string, uuid, required — Id.
      - `name` string, required — Name.
      - `email` string, required — Email.
      - `phone` string, required — Phone.
      - `customer_type` 'individual' | 'business' | 'Individual' | 'Business', required
    - `amount` integer, required — Amount.
    - `currency` string, required — Currency.
    - `payment_date` string, date, required — Payment date.
    - `consent_type` 'internet' | 'signed' | 'Internet' | 'Signed', required
    - `device` DeviceInfoEventV1, required
      - `ip_address` string, required — Ip address.
    - `external_id` string, nullable — External id.
    - `config` ChargeConfigurationEventV1, required
      - `balance_check` 'required' | 'enabled' | 'disabled' | 'Required' | 'Enabled' | 'Disabled', required
    - `created_at` string, date-time, nullable — Created at.
    - `updated_at` string, date-time, nullable — Updated at.
    - `processed_at` string, date-time, nullable — Processed at.
    - `effective_at` string, date-time, nullable — Effective at.
    - `status` 'created' | 'scheduled' | 'failed' | 'cancelled' | 'on_hold' | 'pending' | 'paid' | 'reversed' | 'Created' | 'Scheduled' | 'Failed' | 'Cancelled' | 'OnHold' | 'Pending' | 'Paid' | 'Reversed', required
    - `status_details` StatusDetailsEventV1, required
      - `message` string, required — A human-readable description of the current status.
      - `reason` 'insufficient_funds' | 'closed_bank_account' | 'invalid_bank_account' | 'invalid_routing' | 'disputed' | 'payment_stopped' | 'owner_deceased' | 'frozen_bank_account' | 'risk_review' | 'fraudulent' | 'duplicate_entry' | 'invalid_paykey' | 'payment_blocked' | 'amount_too_large' | 'too_many_attempts' | 'internal_system_error' | 'user_request' | 'ok' | 'other_network_return' | 'payout_refused' | 'InsufficientFunds' | 'ClosedBankAccount' | 'InvalidBankAccount' | 'InvalidRouting' | 'Disputed' | 'PaymentStopped' | 'OwnerDeceased' | 'FrozenBankAccount' | 'RiskReview' | 'Fraudulent' | 'DuplicateEntry' | 'InvalidPaykey' | 'PaymentBlocked' | 'AmountTooLarge' | 'TooManyAttempts' | 'InternalSystemError' | 'UserRequest' | 'Ok' | 'OtherNetworkReturn' | 'PayoutRefused', required
      - `source` 'watchtower' | 'bank_decline' | 'customer_dispute' | 'user_action' | 'system' | 'Watchtower' | 'BankDecline' | 'CustomerDispute' | 'UserAction' | 'System', required
      - `code` string, nullable, required — The status code if applicable.
      - `changed_at` string, date-time, required — The time the status change occurred.
    - `status_history` StatusHistoryEventV1[], required — Status history.
      - `reason` 'insufficient_funds' | 'closed_bank_account' | 'invalid_bank_account' | 'invalid_routing' | 'disputed' | 'payment_stopped' | 'owner_deceased' | 'frozen_bank_account' | 'risk_review' | 'fraudulent' | 'duplicate_entry' | 'invalid_paykey' | 'payment_blocked' | 'amount_too_large' | 'too_many_attempts' | 'internal_system_error' | 'user_request' | 'ok' | 'other_network_return' | 'payout_refused' | 'InsufficientFunds' | 'ClosedBankAccount' | 'InvalidBankAccount' | 'InvalidRouting' | 'Disputed' | 'PaymentStopped' | 'OwnerDeceased' | 'FrozenBankAccount' | 'RiskReview' | 'Fraudulent' | 'DuplicateEntry' | 'InvalidPaykey' | 'PaymentBlocked' | 'AmountTooLarge' | 'TooManyAttempts' | 'InternalSystemError' | 'UserRequest' | 'Ok' | 'OtherNetworkReturn' | 'PayoutRefused', required
      - `source` 'watchtower' | 'bank_decline' | 'customer_dispute' | 'user_action' | 'system' | 'Watchtower' | 'BankDecline' | 'CustomerDispute' | 'UserAction' | 'System', required
      - `message` string, required — A human-readable description of the status.
      - `code` string, nullable — The status code if applicable.
      - `changed_at` string, date-time, required — The time the status change occurred.
      - `status` 'created' | 'scheduled' | 'failed' | 'cancelled' | 'on_hold' | 'pending' | 'paid' | 'reversed' | 'Created' | 'Scheduled' | 'Failed' | 'Cancelled' | 'OnHold' | 'Pending' | 'Paid' | 'Reversed', required
    - `metadata` object, nullable — Metadata.
    - `funding_ids` string[], required — Funding Ids.

## Acknowledgement `200`

Webhook processed successfully

---

[API](https://skmtc.dev/straddleio/apis/straddle-api.md) · [All operations](https://skmtc.dev/straddleio/apis/straddle-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/straddleio/straddle-api/revisions/9fcdff18526e/schema)
