Webhooks and callbacks
Ads platform webhooks
2 endpoints.
GET
/api/v1/ads/webhook/{platform}Webhook subscription handshake (returns hub.challenge)
Meta calls this once when the subscription is created — must echo back ``hub.challenge`` if our verify-token matches.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
platformrequired | path | string | |
hub.moderequired | query | string | |
hub.challengerequired | query | string | |
hub.verify_tokenrequired | query | string |
Responses
200Successful Responseapplication/jsonany400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
POST
/api/v1/ads/webhook/{platform}Receive webhook event (signature-verified inline; ack 200 fast)
Verify signature → dispatch by topic → ack.
Verification uses the raw request body — read it before parsing to avoid HMAC mismatch from re-encoding. Failures return 401 silently; Meta retries automatically.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
platformrequired | path | string | |
X-Hub-Signature-256 | header | string | null |
Responses
200Successful Responseapplication/jsonany400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.