---
title: "Webhook event: balance_sweep.created.v1"
method: POST
path: "balance_sweep.created.v1"
---

# Webhook event: balance_sweep.created.v1

`POST balance_sweep.created.v1` (webhook)

Fired when a new balance sweep is initiated. The event includes details about the sweep, categories, type, and initial payment 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` BalanceSweepEventV1, required
    - `id` string, uuid, required: Unique identifier for this balance sweep.
    - `from_category` 'available' | 'revenue' | 'returns', required
    - `to_category` 'available' | 'revenue' | 'returns', required
    - `amount` integer, required: Sweep amount in the smallest currency unit (e.g. 1000 = $10.00 USD).
    - `currency` string, required: Three-letter ISO 4217 currency code.
    - `description` string, nullable: A human-readable description of the sweep.
    - `external_id` string, nullable: Your unique identifier for this sweep.
    - `created_at` string, date-time, required: Timestamp when this balance sweep was created.
    - `updated_at` string, date-time, required: Timestamp when this balance sweep was last updated.
    - `processed_at` string, date-time, nullable: Timestamp when this balance sweep was applied to your balance. Null until processed.
    - `status` 'created' | 'failed' | 'paid', 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' | 'validating' | 'auto_hold', required
      - `source` 'watchtower' | 'bank_decline' | 'customer_dispute' | 'user_action' | '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` BalanceSweepStatusEventV1StatusHistoryEventV1[], required: Complete ordered history of all status changes for this balance sweep.
      - `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' | 'validating' | 'auto_hold', required
      - `source` 'watchtower' | 'bank_decline' | 'customer_dispute' | 'user_action' | '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' | 'failed' | 'paid', required
    - `metadata` object, nullable: Key-value metadata stored with this balance sweep.

## 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.dev/straddleio/apis/straddle-api/revisions/284d54c51439?raw)
