---
title: "Ad Campaign Payment failed"
method: POST
path: "ad_campaign.payment_failed"
tags: ["Ad Campaigns"]
---

# Ad Campaign Payment failed

`POST ad_campaign.payment_failed` (webhook)

Sent when an ad campaign's payment fails and its ads stop delivering. The payload carries no performance stats; read the campaign for those

Required permissions:
 - `webhook_receive:ad_campaigns`

## Headers

- `webhook-id` string, required — A unique identifier for this webhook request
- `webhook-signature` string, required — The signature of the webhook request with the webhook version prepended
- `webhook-timestamp` string, required — The timestamp in seconds since the Unix epoch that the webhook was sent at on the server

## Payload

- object
  - `account_id` string, nullable — The account ID that this webhook event is associated with
  - `api_version` 'v1', required — The API version for this webhook
  - `api_version_date` string, nullable, required — The dated API version (Api-Version-Date) the payload is serialized to
  - `data` object, required
    - `bid_type` 'minimum_cost' | 'average_target' | 'maximum_target' | 'null', nullable — How delivery bids in the ad auction: `minimum_cost` gets the most results for the budget, `average_target` holds an average cost per result, and `maximum_target` never bids above a cap.
    - `budget_amount` number, nullable, required — The campaign's budget, in the ad account's currency. `null` when each ad group sets its own budget instead.
    - `budget_optimization` 'ad_campaign' | 'ad_group' | 'null', nullable, required — Which level owns the budget: the whole campaign (`ad_campaign`) or each ad group individually (`ad_group`).
    - `budget_type` 'daily' | 'lifetime' | 'null', nullable, required — Whether `budget_amount` is spent per day (`daily`) or over the campaign's full run (`lifetime`).
    - `created_at` string, required — When the campaign was created, as an ISO 8601 timestamp.
    - `delivery_status` 'payment_failed' | 'all_ads_rejected' | 'draft' | 'no_ad_groups' | 'no_ads' | 'paused' | 'processing' | 'issues' | 'scheduled' | 'completed' | 'ad_groups_off' | 'active', required — Whether the campaign's ads are delivering right now, and if not, why. When several states apply at once, the highest-precedence one is returned.
    - `id` string, required — Unique identifier for the ad campaign, prefixed `adcamp_`.
    - `issues` AdPlatformIssue[], required
      - `id` string, required — Unique identifier for the issue.
      - `message` string, required — A description of what the issue is and how it can be resolved.
      - `resource_id` string, nullable, required — The ID of the campaign, ad group, or ad the issue is attached to.
      - `resource_type` 'ad_campaign' | 'ad_group' | 'ad', required — The type of resource the issue is attached to.
    - `objective` 'awareness' | 'traffic' | 'engagement' | 'leads' | 'sales' | 'null', nullable, required — The goal the campaign optimizes toward.
    - `optimization_goal` string, nullable, required — The event the campaign optimizes for when a single goal is set campaign-wide. `null` when each ad group sets its own optimization_goal.
    - `platform` 'meta' | 'tiktok', required — The ad network the campaign runs on.
    - `special_ad_categories` string[], required
    - `status` 'active' | 'paused' | 'inactive' | 'stale' | 'pending_refund' | 'payment_failed' | 'draft' | 'in_review' | 'flagged' | 'importing' | 'imported' | 'duplicating', required — The lifecycle status of the ad campaign.
    - `title` string, required — Display name of the ad campaign.
    - `updated_at` string, required — When the campaign was last updated, as an ISO 8601 timestamp.
  - `id` string, required — A unique ID for every single webhook request
  - `previous_attributes` object — For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event
  - `timestamp` string, date-time, required — The timestamp in ISO 8601 format that the webhook was sent at on the server
  - `type` 'ad_campaign.payment_failed', required — The webhook event type

## Acknowledgement `200`

Return a 200 status to indicate that the data was received successfully

---

[API](https://skmtc.dev/whop/apis/whop-api.md) · [All operations](https://skmtc.dev/whop/apis/whop-api/llms.txt) · [OpenAPI document](https://skmtc.dev/whop/apis/whop-api/revisions/d629b0d5d839?raw)
