Oppsett av Webooks i whoo

Webhook-integrasjon (Zapier)

Whoo støtter webhooks som lar deg automatisere arbeidsflyter ved å sende data til eksterne tjenester som Zapier, Make, n8n og andre. Når noe skjer i systemet — for eksempel at en ny kandidat søker eller at en søker endrer status — sender Whoo en HTTP-forespørsel til en URL du velger.

Innhold

Komme i gang

  1. Opprett en API-nøkkel under Innstillinger → API-nøkler

  2. Bruk API-nøkkelen til å registrere et webhook-abonnement via API-et

  3. Whoo sender data til din URL hver gang den valgte hendelsen inntreffer

Opprette API-nøkkel

Gå til Innstillinger → API-nøkler i Whoo.

  1. Skriv inn et beskrivende navn (f.eks. «Zapier-integrasjon»)

  2. Klikk Opprett

  3. Kopier nøkkelen umiddelbart — den vises kun én gang

Nøkkelen brukes som Bearer-token i alle API-kall. Hver nøkkel er knyttet til teamet ditt. Du kan opprette flere nøkler og slette dem individuelt.

Opprette Webhooks

Gå til Innstillger -> Webhooks i Whoo.

Her kan du opprette webhoos i et grafisk grensesnitt.

Støttede hendelser

Hendelse Beskrivelse applicant.created En ny søker har sendt inn en søknad applicant.status_changed En søkers status har blitt endret applicant.rejected En søker har blitt avvist (status satt til «rejected») applicant.hired En søker har blitt ansatt (status satt til «hired»)

Merk: applicant.rejected og applicant.hired er spesialiserte varianter av applicant.status_changed. Hvis en søker avvises, vil både applicant.status_changed og applicant.rejected trigges.

API-endepunkter

Basis-URL: https://whoo.no/api

Alle endepunkter krever autentisering med en API-nøkkel.

List webhook-abonnementer

GET /api/webhooks/subscriptions

Respons:

{ "data": [ { "id": 1, "event": "applicant.created", "url": "https://hooks.zapier.com/hooks/catch/12345/abcdef", "is_active": true, "created_at": "2026-02-05T19:18:25.000000Z" } ] }

Opprett webhook-abonnement

POST /api/webhooks/subscribe

Body:

{ "event": "applicant.created", "url": "https://hooks.zapier.com/hooks/catch/12345/abcdef" }

Felt Type Beskrivelse event string En av de støttede hendelsene url string URL-en som skal motta webhook-data (maks 2048 tegn)

Respons (201):

{ "id": 1, "event": "applicant.created", "url": "https://hooks.zapier.com/hooks/catch/12345/abcdef", "secret": "aB3dEfGhIjKlMnOpQrStUvWxYz012345", "created_at": "2026-02-05T19:18:25.000000Z" }

Viktig: secret returneres kun ved opprettelse. Ta vare på denne verdien — den brukes til å verifisere signaturer på innkommende webhooks.

Slett webhook-abonnement

DELETE /api/webhooks/subscribe/{id}

Returnerer 204 No Content ved suksess.

Hent eksempel-payload

GET /api/webhooks/sample/{event}

Nyttig for å se strukturen på dataen som sendes for en gitt hendelse uten å måtte trigge en ekte hendelse.

Autentisering

Alle API-kall autentiseres med en Bearer-token i Authorization-headeren:

Authorization: Bearer <din-api-nøkkel>

Eksempel med curl:

curl -H "Authorization: Bearer abc123def456..." \ https://whoo.no/api/webhooks/subscriptions

Ugyldig eller manglende nøkkel returnerer 401 Unauthorized.

Verifisering av webhook-signatur

Hver webhook-forespørsel signeres med HMAC-SHA256 ved hjelp av secret som ble returnert da abonnementet ble opprettet. Signaturen sendes i headeren X-Webhook-Signature.

Slik verifiserer du signaturen:

# Python-eksempel import hmac import hashlib def verify_signature(payload_body: bytes, signature: str, secret: str) -> bool: expected = hmac.new( secret.encode('utf-8'), payload_body, hashlib.sha256 ).hexdigest() return hmac.compare_digest(expected, signature)

// Node.js-eksempel const crypto = require('crypto'); function verifySignature(payloadBody, signature, secret) { const expected = crypto .createHmac('sha256', secret) .update(payloadBody) .digest('hex'); return crypto.timingSafeEqual( Buffer.from(expected), Buffer.from(signature) ); }

Headere som sendes med hver webhook:

Header Beskrivelse X-Webhook-Signature HMAC-SHA256-signatur av request-bodyen X-Webhook-Timestamp ISO 8601-tidsstempel for når hooken ble sendt X-Webhook-Event Navnet på hendelsen (f.eks. applicant.created) Content-Type application/json

Webhook-payload

Alle webhooks sendes som HTTP POST med JSON-body i følgende struktur:

{ "event": "applicant.created", "timestamp": "2026-02-05T19:18:25+00:00", "data": { // hendelsespesifikke data } }

Eksempel-payloads

applicant.created

{ "event": "applicant.created", "timestamp": "2026-02-05T19:18:25+00:00", "data": { "applicant": { "id": 1, "name": "Ola Nordmann", "email": "ola@example.com", "phone": "+47 123 45 678", "uuid": "abc12345-def6-7890-ghij-klmnopqrstuv", "vacancy_id": 1, "is_starred": false }, "vacancy_id": 1, "vacancy_title": "Senior Developer" } }

applicant.status_changed / applicant.rejected / applicant.hired

{ "event": "applicant.status_changed", "timestamp": "2026-02-05T19:18:25+00:00", "data": { "applicant": { "id": 1, "name": "Ola Nordmann", "email": "ola@example.com", "phone": "+47 123 45 678", "uuid": "abc12345-def6-7890-ghij-klmnopqrstuv", "vacancy_id": 1, "is_starred": false }, "vacancy_id": 1, "vacancy_title": "Senior Developer", "old_status": "reviewing", "new_status": "interview" } }

Feilhåndtering og deaktivering

Whoo forsøker å levere hver webhook opptil 3 ganger med økende ventetid mellom forsøkene:

Forsøk Ventetid 1 Umiddelbart 2 10 sekunder 3 60 sekunder

Etter 3 mislykkede forsøk:

  • Endepunktet deaktiveres automatisk (is_active settes til false)

  • Ingen flere webhooks sendes til denne URL-en

  • For å aktivere endepunktet igjen, slett abonnementet og opprett det på nytt

En levering anses som mislykket hvis:

  • Mottakeren svarer med HTTP-statuskode 4xx eller 5xx

  • Tilkoblingen tar mer enn 15 sekunder (timeout)

  • En nettverksfeil oppstår

Zapier-oppsett

For å koble Whoo til Zapier:

  1. Opprett en API-nøkkel i Whoo under Innstillinger → API-nøkler

  2. I Zapier, opprett en ny Zap og velg Webhooks by Zapier som trigger

  3. Velg Catch Hook som trigger-type

  4. Kopier webhook-URL-en fra Zapier

  5. Registrer URL-en ved å kalle API-et:

curl -X POST https://whoo.no/api/webhooks/subscribe \ -H "Authorization: Bearer <din-api-nøkkel>" \ -H "Content-Type: application/json" \ -d '{"event": "applicant.created", "url": "https://hooks.zapier.com/hooks/catch/..."}'
  1. Test ved å sende inn en test-søknad — Zapier skal fange opp dataen

  2. Sett opp handlinger i Zapier (f.eks. send e-post, opprett rad i Google Sheets, opprett oppgave i Trello)

Vanlige Zapier-automatiseringer

  • Ny søker → Slack-melding — Få varsel i Slack når noen søker

  • Ny søker → Google Sheets — Logg søkere automatisk i et regneark

  • Søker ansatt → Send e-post — Send automatisk velkomst-e-post til nyansatte

  • Status endret → Oppdater CRM — Hold CRM-systemet oppdatert med søkerstatus