Pitchfire

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 HTTPS zijn met een geldig certificaat.

Beschikbare events

EventPayload
campaign.createdCampaign
campaign.updatedCampaign (oud + nieuw)
campaign.archivedCampaign
asset.createdAsset
asset.status_changedAsset (oud + nieuw status)
linkedin_post.scheduledLinkedinPost
linkedin_post.publishedLinkedinPost (met URN)
ad_campaign.syncedAdCampaign (na sync)
ai.suggestion.generatedAiSuggestion
invoice.issuedInvoice (number, totals)
invoice.paidInvoice

Wildcard patronen ondersteund: campaign.*, *.paid, etc.

Webhooks · Pitchfire