---
title: "Ad set created event"
method: POST
path: "ad_set.created"
tags: ["Webhook Events"]
---

# Ad set created event

`POST ad_set.created` (webhook)

An ad set was created through Zernio (`source: "zernio"`) or detected by the sync (`source: "platform"`).

### When it fires

Fires once the ad set row is recorded, so `GET /v1/ads/ad-sets/{adSetId}` finds it. A detected ad set arrives up to one sync interval late.

### Payload notes

`adObject.campaign` is the campaign the ad set belongs to, or null when the platform has none.

### When it does not fire

History loaded when an account connects, and ad sets created more than 7 days ago, are never announced.

## Payload

- WebhookPayloadAdSetCreated: Webhook payload for the `ad_set.created` event. Fires when an ad set is created through Zernio (API, MCP or dashboard) or detected by the sync, once per ad set, after its row is recorded so `GET /v1/ads/ad-sets/{adSetId}` finds it. `source` is `zernio` for ad sets created through Zernio and `platform` for ad sets our sync detected, up to one sync interval later. History loaded when an account connects, and ad sets created more than 7 days ago, are never announced. An ad set is announced at most once per 24 hours.
  - `id` string, required: Stable webhook event ID: the dedupe key, also sent as the X-Zernio-Event-Id header and identical on every retry and redelivery.
  - `profiles` object[]: The profiles this event belongs to, each with the externalId you set on it (null when none is set). Use it to route the event to your tenant without storing Zernio profile ids. Present on every event tied to a profile, absent on events that belong to none. Events spanning several profiles (a post published to accounts of different profiles) list each once.
    - `id` string, required
    - `externalId` string, nullable, required
  - `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` 'ad_set.created', required
  - `account` WebhookAdsAccount, required: The connected ads account the event belongs to.
    - `accountId` string, required: Internal Zernio account ID (same as used in /v1/accounts/{accountId}).
    - `profileId` string, required: Internal Zernio profile ID this account belongs to.
    - `platform` string, required: Ads connection platform (`metaads`, `googleads`, `tiktokads`, `linkedinads`, `pinterestads`, `xads`, ...).
    - `username` string, required
    - `displayName` string, nullable
  - `adObject` object, required
    - `level` 'AD_SET', required: Always `AD_SET`.
    - `platformId` string, required: Platform-native ad set ID.
    - `platformAdAccountId` string, required: Platform-native ad account ID.
    - `name` string, nullable, required
    - `campaign` object, nullable, required: The campaign the ad set belongs to, or null when the platform has none.
      - `platformCampaignId` string, required
      - `name` string, nullable, required
  - `source` 'zernio' | 'platform', required: Where the ad set was created. `zernio` for ad sets created through Zernio, `platform` for ad sets the sync detected.
  - `timestamp` string, date-time, required: UTC time at which Zernio generated this event.

## Acknowledgement `200`

Webhook received successfully

---

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