Webhooks
Ontvang real-time push-notificaties wanneer events plaatsvinden in je workspace. Webhook-subscriptions zijn beschikbaar op het Growth- en Agency-plan.
Subscription aanmaken
curl https://acme.pitchfire.app/api/v1/webhooks \
-X POST \
-H "Authorization: Bearer pfk_..." \
-H "Content-Type: application/json" \
-d '{
"url": "https://yourapp.com/pitchfire-events",
"events": ["campaign.*", "invoice.paid"],
"secret": "<generate a random secret>"
}'Signature verificatie
Elke webhook bevat een X-Pitchfire-Signature header met een HMAC-SHA256 signature van het body, met jouw secret als sleutel. Verifieer altijd vóór je het event vertrouwt:
import { createHmac, timingSafeEqual } from 'crypto';
function verify(rawBody: string, signature: string, secret: string): boolean {
const expected = createHmac('sha256', secret).update(rawBody).digest('hex');
return timingSafeEqual(Buffer.from(signature, 'hex'), Buffer.from(expected, 'hex'));
}Payload formaat
{
"id": "evt_01HXYZ...",
"type": "campaign.created",
"createdAt": "2026-05-17T10:32:00Z",
"tenantSlug": "acme",
"workspaceId": "ws_abc",
"data": { /* het object dat het event triggerde */ },
"actor": { "userId": "user_xyz", "type": "user" }
}Delivery + retry
- Verwacht een HTTP 2xx binnen 5 seconden. Anders retry: 1m, 5m, 30m, 2u, 12u (5 pogingen totaal).
- Na 5 mislukte pogingen wordt de subscription automatisch op pauze gezet en krijg je een notificatie.
- Endpoint moet
HTTPSzijn met een geldig certificaat.
Beschikbare events
| Event | Payload |
|---|---|
| campaign.created | Campaign |
| campaign.updated | Campaign (oud + nieuw) |
| campaign.archived | Campaign |
| asset.created | Asset |
| asset.status_changed | Asset (oud + nieuw status) |
| linkedin_post.scheduled | LinkedinPost |
| linkedin_post.published | LinkedinPost (met URN) |
| ad_campaign.synced | AdCampaign (na sync) |
| ai.suggestion.generated | AiSuggestion |
| invoice.issued | Invoice (number, totals) |
| invoice.paid | Invoice |
Wildcard patronen ondersteund: campaign.*, *.paid, etc.