# ad.delivery_issue

An ad Zernio already tracked moved into the platform's error state and stopped delivering.

### What triggers it

Meta `WITH_ISSUES` (payment, policy or account problems), TikTok account punishment or missing balance, or any platform status Zernio does not recognize yet (check `issue.raw`).

### When it fires

Fires at most once per ad per 24 hours. Ads seen for the first time by a sync never fire it.

### Payload notes

`issue.raw` is the platform's status string. On Meta, `issue.reasons` carries Meta's messages for the campaign; other networks send none, so it is empty.

### Platform notes

On Meta the same problem can also arrive as `ad.status_changed` with `WITH_ISSUES`, straight from Meta's webhook and usually sooner. Pick one of the two to act on.




**Payload for `ad.delivery_issue`:**

- **id** (required) `string`: Stable webhook event ID: the dedupe key, also sent as the X-Zernio-Event-Id header and identical on every retry and redelivery.
- **profiles**: `WebhookProfiles` - See schema definition
- **test** `boolean`: Always true when present: only a sample sent by POST /v1/webhooks/test with an event carries it. Real deliveries never do.
- **event** (required) `string`: No description - one of: ad.delivery_issue
- **account** (required): `WebhookAdsAccount` - See schema definition
- **adObject** (required) `object`: 
  - **level** (required) `string`: Always `AD`. - one of: AD
  - **platformId** (required) `string`: Platform-native ad ID.
  - **platformAdAccountId** (required) `string`: Platform-native ad account ID.
  - **adId** (required) `string`: Zernio ad ID, usable with GET /v1/ads/{adId}.
  - **name** (required) `string`: No description
- **issue** (required) `object`: 
  - **raw** (required) `string`: Platform-native status string, forwarded verbatim (Meta `WITH_ISSUES`, TikTok `ADVERTISER_ACCOUNT_PUNISH`, LinkedIn `REMOVED`, ...).
  - **reasons** (required) `array[object]`: What the platform says is wrong. Meta reports it per campaign; other networks send no message today, so it is empty there.
    - **message** (required) `string`: No description
- **timestamp** (required) `string` (date-time): UTC time at which Zernio generated this event.