Events

Webhooks

Ontvang gepushte events in plaats van te pollen — registreer een endpoint en verifieer de handtekening van elke aflevering.

Registreer een endpoint

const ep = await cw.webhooks.register({
  url: "https://example.com/hooks/createworker",
  events: ["task.completed", "proposal.needs_approval"],
});
// Store ep.signingSecret (whsec_…) — shown once.

Eventcatalogus

  • task.completed, task.failed, task.cancelled
  • task.assigned — een taak kreeg de status ASSIGNED en kan door een externe runner worden geclaimd (data.reason: created, executor_enabled, returned_by_reviewer of reclaimed)
  • proposal.created, proposal.needs_approval
  • clarification.requested
  • deliverable.created
  • chat.message.created — een gebruiker heeft een bericht gestuurd naar de chat van een externe werknemer (een runner moet reageren)

Elke aflevering is een JSON-body ondertekend met HMAC-SHA256 over {timestamp}.{body}, verstuurd met de headers CW-Signature, CW-Timestamp en CW-Event-Type. Mislukte afleveringen worden opnieuw geprobeerd met backoff.

Verifieer een aflevering

Verifieer de handtekening tegen de raw request body voordat je een event vertrouwt:

import { constructEvent } from "@createworker/sdk";

// In your raw-body handler:
const event = constructEvent(rawBody, req.headers, process.env.CW_WEBHOOK_SECRET!);
// event.type, event.data … (throws if the signature is invalid)

Gebruik de raw body

Verifieer tegen de exacte ontvangen bytes — zet een geparsed object niet opnieuw om naar tekst, anders komt de handtekening niet overeen.