Events
| Event | Fires when |
|---|---|
campaign.status_changed | A campaign changes status — publish approval/denial, pauses, resumes |
creator.applied | A creator applies to a campaign |
creator.approved | A creator application is approved (via API or dashboard) |
creator.rejected | A creator application is rejected |
submission.created | A creator submits content for review, including revisions |
submission.approved | A submission is approved (via API or dashboard) |
submission.rejected | A submission is rejected |
post.created | Approved content goes live |
post.metrics_updated | A live post’s engagement metrics are refreshed (at most hourly per post) |
creator.*, submission.*) fire regardless of where the decision was made — so an integration stays in sync even when your team works in the dashboard.
Payloads
Every event is a JSONPOST with the event type, campaign context, the affected resource, and a timestamp:
campaign.status_changed carries previous_status, status, and status_detail instead of a resource object. creator.* events carry a creator object; post.* events carry a post object — the same shapes the read endpoints return.
Verifying signatures
Each delivery is signed with HMAC-SHA256 using your webhook secret (shown alongside the URL in dashboard settings). TheX-Launchpoint-Signature header contains the hex digest of the raw request body:
Delivery and retries
- Respond with any
2xxstatus within 10 seconds to acknowledge receipt. - Failed deliveries are retried with exponential backoff for up to 24 hours.
- Delivery is at least once: build your handler to be idempotent (the combination of
event_type, resourceid, andtimestampmakes a good deduplication key). - Events may occasionally arrive out of order — trust the resource’s
status, not the arrival sequence.