Webhook events
metrics.updated
Fresh totals for an ad account.
Event type: metrics.updated.
When it fires
Fresh totals for an ad account. Hourly.
Envelope
Every event shares these top-level fields. The event-specific fields are under data.
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Unique event id. Deliveries are at-least-once, so dedupe on it. |
type | "metrics.updated" | Yes | |
createdAt | string (date-time) | Yes | |
apiVersion | "v1" | Yes | |
organizationId | integer | Yes | |
brandId | integer | null | Yes | |
accountId | string | null | Yes | The ad account the event concerns. |
provider | string | null | Yes | The ad platform the event happened on. One of meta, whop. |
Data
| Field | Type | Required | Description |
|---|---|---|---|
data.accountId | string | Yes | |
data.datePreset | string | Yes | |
data.dateRange | object | No | |
data.dateRange.start | string | Yes | |
data.dateRange.end | string | Yes | |
data.totalBatches | number | Yes | |
data.batchesSampled | number | Yes | |
data.batchesUnavailable | number | Yes | |
data.totalSpend | number | null | Yes | Null when the spend could not be read, never 0. |
data.totalResults | number | null | Yes | Null when the results could not be read, never 0. |
data.currency | string | null | No | |
data.asOf | string (date-time) | Yes | ISO time of the live provider read behind these numbers. |
Example payload
{
"id": "evt_2xKq7Vb9mN4pR8sT",
"type": "metrics.updated",
"createdAt": "2026-09-19T14:30:00Z",
"apiVersion": "v1",
"organizationId": 1,
"brandId": 1,
"accountId": "string",
"provider": "meta",
"data": {
"accountId": "string",
"datePreset": "string",
"dateRange": {
"start": "string",
"end": "string"
},
"totalBatches": 12.5,
"batchesSampled": 12.5,
"batchesUnavailable": 12.5,
"totalSpend": 12.5,
"totalResults": 12.5,
"currency": "string",
"asOf": "2026-09-19T14:30:00Z"
}
}Delivery headers
| Header | Required | Description |
|---|---|---|
webhook-id | Yes | The delivery id; identical across retries of the same event. Dedupe on the envelope id. |
webhook-timestamp | Yes | Unix seconds at signing time. Reject deliveries older than 5 minutes. |
webhook-signature | Yes | Space-separated v1,<base64 HMAC-SHA256> signatures (Standard Webhooks). Two are sent while a rotated secret overlaps. |
Acknowledge
| Your response | Meaning |
|---|---|
2XX | Return any 2xx status to acknowledge the delivery. |
Signing, retries and endpoint setup are in the Webhooks guide.