Logo StartupKit
PL

Dokumentacja zdarzeń webhook

Struktura danych, nagłówki i definicje pól dla każdego zdarzenia webhook.

To tłumaczenie może być nieaktualne. Wersja angielska została zaktualizowana od czasu ostatniego tłumaczenia tej strony. Zobacz po angielsku →

Dlaczego to ważne

Każdy webhook zawiera dane zdarzenia w tej samej kopercie. Poniżej znajdziesz strukturę danych potrzebną do parsowania i obsługi poszczególnych zdarzeń.

Koperta danych

{
  "event": "application.submitted",
  "created_at": "2025-01-15T14:30:00Z",
  "data": { }
}
Pole Typ Opis
event string Typ zdarzenia, które wywołało to dostarczenie
created_at string Znacznik czasu ISO 8601 określający moment wystąpienia zdarzenia
data object Dane specyficzne dla zdarzenia (różnią się w zależności od typu zdarzenia)

Nagłówki żądania

Każde żądanie webhook zawiera następujące nagłówki:

Nagłówek Przykład Opis
Content-Type application/json Zawsze JSON
X-Webhook-Event application.submitted Typ zdarzenia
X-Webhook-Signature a1b2c3d4... Skrót HMAC-SHA256 w formacie szesnastkowym
X-Webhook-Timestamp 2025-01-15T14:30:00Z Znacznik czasu ISO 8601 użyty w podpisie
User-Agent Kit-Webhooks/1.0 Identyfikuje Kit jako nadawcę

Szczegóły weryfikacji podpisu znajdziesz w sekcji Bezpieczeństwo i dostarczanie webhooków.

Zdarzenia aplikacji

Zdarzenia: application.submitted, application.rejected, application.rejection_reverted, application.advanced, application.stage_returned, application.withdrawn, application.offer_extended

application.stage_returned jest wysyłane, gdy członek zespołu przenosi aplikację z powrotem na wcześniejszy etap. Korzysta z tych samych danych aplikacji co pozostałe zdarzenia w tej sekcji.

{
  "event": "application.submitted",
  "created_at": "2025-01-15T14:30:00Z",
  "data": {
    "id": 42,
    "candidate": {
      "id": 7,
      "name": "Jane Smith",
      "email": "[email protected]"
    },
    "job_posting": {
      "id": 3,
      "title": "Senior Engineer"
    },
    "current_stage": "Applied",
    "submitted_at": "2025-01-15T14:30:00Z",
    "rejected": false,
    "withdrawn": false,
    "offered": false
  }
}
Pole Typ Opis
id integer Identyfikator aplikacji
candidate.id integer Identyfikator kandydata
candidate.name string Imię i nazwisko kandydata
candidate.email string Adres e-mail kandydata
job_posting.id integer Identyfikator ogłoszenia o pracę
job_posting.title string Tytuł ogłoszenia o pracę
current_stage string Nazwa bieżącego etapu w procesie rekrutacji
submitted_at string | null Znacznik czasu ISO 8601 złożenia aplikacji
rejected boolean Czy aplikacja została odrzucona
withdrawn boolean Czy kandydat wycofał aplikację
offered boolean Czy przedstawiono ofertę

Zdarzenia ofert

Zdarzenia: offer.accepted, offer.declined

  • offer.accepted / offer.declined: wywoływane, gdy administrator akceptuje lub odrzuca ofertę
{
  "event": "offer.accepted",
  "created_at": "2025-01-20T10:00:00Z",
  "data": {
    "id": 15,
    "status": "accepted",
    "details": "Senior Engineer — $150k base",
    "extended_at": "2025-01-18T09:00:00Z",
    "expires_at": "2025-01-25T23:59:59Z",
    "accepted_at": null,
    "declined_at": null,
    "candidate": {
      "id": 7,
      "name": "Jane Smith",
      "email": "[email protected]"
    },
    "job_posting": {
      "id": 3,
      "title": "Senior Engineer"
    }
  }
}
Pole Typ Opis
id integer Identyfikator oferty
status string Jedna z wartości: pending, accepted, declined, candidate_accepted, candidate_declined, expired
details string | null Tekst szczegółów oferty
extended_at string | null Kiedy oferta została przedstawiona
expires_at string | null Kiedy oferta wygasa
accepted_at string | null Kiedy oferta została zaakceptowana przez administratora
declined_at string | null Kiedy oferta została odrzucona przez administratora
candidate object Dane kandydata (taka sama struktura jak w zdarzeniach aplikacji)
job_posting object Dane ogłoszenia o pracę (taka sama struktura jak w zdarzeniach aplikacji)

Zdarzenia rozmów kwalifikacyjnych

Zdarzenia: interview.scheduled, interview.confirmed, interview.completed, interview.cancelled, interview.no_show, interview.no_show_reverted, interview.rebooked

interview.no_show_reverted jest wysyłane po cofnięciu statusu nieobecności. interview.rebooked pojawia się po zamknięciu starej rozmowy i zaproszeniu kandydata do wyboru nowego terminu. Oba korzystają z danych rozmowy pokazanych niżej.

{
  "event": "interview.scheduled",
  "created_at": "2025-01-16T09:00:00Z",
  "data": {
    "id": 28,
    "status": "pending",
    "scheduled_at": "2025-01-20T14:00:00Z",
    "duration_minutes": 60,
    "candidate": {
      "id": 7,
      "name": "Jane Smith",
      "email": "[email protected]"
    },
    "job_posting": {
      "id": 3,
      "title": "Senior Engineer"
    }
  }
}
Pole Typ Opis
id integer Identyfikator rozmowy kwalifikacyjnej
status string Status rozmowy (pending, confirmed, completed, cancelled, no_show)
scheduled_at string | null Znacznik czasu ISO 8601 zaplanowanego terminu
duration_minutes integer Czas trwania rozmowy w minutach
candidate object Dane kandydata
job_posting object Dane ogłoszenia o pracę

Zdarzenia zadań programistycznych

Zdarzenia: code_assignment.submitted, code_assignment.auto_submitted

{
  "event": "code_assignment.submitted",
  "created_at": "2025-01-22T16:45:00Z",
  "data": {
    "id": 11,
    "repo_url": "https://github.com/org/assignment-jane-smith",
    "submitted_at": "2025-01-22T16:45:00Z",
    "submitted_by": null,
    "deadline_at": "2025-01-25T23:59:59Z",
    "candidate": {
      "id": 7,
      "name": "Jane Smith",
      "email": "[email protected]"
    },
    "job_posting": {
      "id": 3,
      "title": "Senior Engineer"
    }
  }
}
Pole Typ Opis
id integer Identyfikator przesłanego zadania programistycznego
repo_url string Adres URL repozytorium GitHub
submitted_at string | null Kiedy zadanie zostało przesłane
submitted_by object | null Członek zespołu (id, name), który oznaczył zadanie jako przesłane w imieniu kandydata; null, gdy przesłał je kandydat lub gdy zostało przesłane automatycznie po terminie
deadline_at string | null Termin wykonania zadania
candidate object Dane kandydata
job_posting object Dane ogłoszenia o pracę

Zdarzenia ocen zespołu

Zdarzenia: review.submitted

{
  "event": "review.submitted",
  "created_at": "2025-01-23T11:00:00Z",
  "data": {
    "id": 9,
    "recommendation": "strong_yes",
    "reviewer": "Alex Johnson",
    "origin": "web",
    "candidate": {
      "id": 7,
      "name": "Jane Smith",
      "email": "[email protected]"
    },
    "job_posting": {
      "id": 3,
      "title": "Senior Engineer"
    },
    "stage": "Technical Interview"
  }
}
Pole Typ Opis
id integer Identyfikator oceny
recommendation string Rekomendacja recenzenta
reviewer string Imię i nazwisko recenzenta
origin string Sposób przesłania oceny: web (w Kit) albo mcp (ocenę złożyło narzędzie AI przez hiring_submit_review w imieniu recenzenta, który wcześniej ją potwierdził)
candidate object Dane kandydata
job_posting object Dane ogłoszenia o pracę
stage string Nazwa etapu w procesie rekrutacji, na którym ocena została przesłana

Zdarzenia ogłoszeń o pracę

Zdarzenia: job_posting.published, job_posting.paused, job_posting.closed, job_posting.reopened

{
  "event": "job_posting.published",
  "created_at": "2025-01-10T08:00:00Z",
  "data": {
    "id": 3,
    "title": "Senior Engineer",
    "status": "published",
    "location": "Remote",
    "department": "Engineering",
    "employment_type": "full_time",
    "published_at": "2025-01-10T08:00:00Z",
    "closed_at": null,
    "public_url": "https://careers.example.com/senior-engineer"
  }
}
Pole Typ Opis
id integer Identyfikator ogłoszenia o pracę
title string Tytuł stanowiska
status string Bieżący status (published, paused, closed)
location string Lokalizacja pracy
department string Nazwa działu
employment_type string Forma współpracy (full_time, part_time, b2b, contract lub internship)
published_at string | null Kiedy ogłoszenie zostało opublikowane
closed_at string | null Kiedy ogłoszenie zostało zamknięte
public_url string Publiczny adres URL ogłoszenia w portalu kariery

Zdarzenia zgłoszeń CSIRT

Zdarzenia: csirt.report.submitted, csirt.report.triaged, csirt.report.validated, csirt.report.resolved, csirt.report.fix_verified, csirt.report.dismissed, csirt.report.informative, csirt.report.assessed, csirt.report.assigned, csirt.report.bounty_approved, csirt.report.paid, csirt.report.sla_breached, csirt.report.escalation_requested

Te zdarzenia wymagają dodatku CSIRT (program nagród). Zdarzenia rzeczywiście obsługiwane przez Kit są wysyłane po zmianie statusu zgłoszenia i korzystają z danych pokazanych niżej.

Warning

csirt.report.assessed, csirt.report.assigned i csirt.report.bounty_approved są widoczne w ustawieniach subskrypcji, ale pozostają zarezerwowane i obecnie nie są dostarczane. Nie twórz automatyzacji, która od nich zależy.

csirt.report.dismissed oznacza, że zgłoszenie zostało odrzucone. csirt.report.informative oznacza, że było trafne, ale nie było czego naprawiać, i że mógł zostać za nie wypłacony uznaniowy bonus. Nie łącz obu przypadków w jedną gałąź „zamknięte”.

Dwa zdarzenia nie zależą od zmiany statusu i używają tych samych danych:

  • csirt.report.sla_breached wysyłamy raz, gdy otwarte zgłoszenie przekroczy termin na potwierdzenie (domyślnie 72 godziny, ustawiany dla każdego programu). Zgłoszenie zamknięte i ponownie otwarte może je wywołać jeszcze raz. Zgłoszenia ocenione jako informacyjne go nie wywołują.
  • csirt.report.escalation_requested wysyłamy, gdy zgłaszający użyje przycisku Poproś o informację w portalu badacza. Jego notatka nigdy nie trafia do danych.
{
  "event": "csirt.report.submitted",
  "created_at": "2026-03-12T10:00:00Z",
  "data": {
    "id": "rpt_abc123",
    "vulnerability_type": "sql_injection",
    "severity_tier": "critical",
    "cvss_score": 9.8,
    "status": "submitted",
    "program_name": "Acme Security Program",
    "submitted_at": "2026-03-12T10:00:00Z"
  }
}
Pole Typ Opis
id string Identyfikator z prefiksem zgłoszenia
vulnerability_type string Kategoria zgłoszonej podatności
severity_tier string | null Oceniony poziom ważności (obecny po ocenie)
cvss_score number | null Wynik CVSS (obecny po ocenie)
status string Status zgłoszenia w momencie zdarzenia
program_name string Nazwa programu nagród
submitted_at string | null Kiedy zgłoszenie zostało przesłane

Uwaga: tytuł i opis zgłoszenia są wykluczone z danych webhooka (szyfrowane w bazie danych).

Zdarzenia Outreach

Zdarzenia: outreach.prospect.drafted, outreach.message.approved, outreach.message.sent, outreach.message.bounced, outreach.message.failed, outreach.message.deferred, outreach.message.delivery_unknown, outreach.message.confirmation_expired, outreach.message.delivery_resolved

Te zdarzenia wymagają dodatku Outreach.

outreach.prospect.drafted

Wywoływane, gdy AI zakończy zbieranie informacji o leadzie i przygotuje szkic wiadomości e-mail.

{
  "event": "outreach.prospect.drafted",
  "created_at": "2026-03-12T10:00:00Z",
  "data": {
    "id": "op_abc123",
    "campaign_id": "oc_def456",
    "company_name": "Acme Corp",
    "display_name": "Jane Smith",
    "status": "drafted"
  }
}
Pole Typ Opis
id string Identyfikator z prefiksem leada
campaign_id string Identyfikator z prefiksem kampanii
company_name string Nazwa firmy leada
display_name string Wyświetlana nazwa leada
status string Status leada w momencie zdarzenia

Uwaga: adres e-mail leada jest wykluczony z danych webhooka (szyfrowany w bazie danych).

outreach.message.approved / sent / bounced / failed / deferred / delivery_unknown / confirmation_expired

Wywoływane, gdy wiadomość przechodzi do statusu approved, sent, bounced, failed, deferred, delivery_unknown lub confirmation_expired. failed oznacza znany błąd uwierzytelniania, nadawcy, treści lub zasad i otwiera przegląd, który pozwala ponowić wysyłkę po naprawie albo ją zamknąć. deferred oznacza wyczerpanie bezpiecznych ponowień po znanym błędzie przed przekazaniem wiadomości. delivery_unknown oznacza, że nie udało się potwierdzić przyjęcia przez SMTP, dlatego Kit zatrzymuje automatyczną ponowną wysyłkę, aby uniknąć duplikatu. confirmation_expired oznacza, że odbiorca, tożsamość nadawcy, temat lub sprawdzona treść zmieniły się przed uruchomieniem SMTP. Próba dostarczenia nie została rozpoczęta; aktualną wiadomość trzeba ponownie sprawdzić i zatwierdzić.

{
  "event": "outreach.message.sent",
  "created_at": "2026-03-12T10:15:00Z",
  "data": {
    "id": "om_ghi789",
    "campaign_id": "oc_def456",
    "prospect_id": "op_abc123",
    "step_number": 1,
    "subject": "Quick question about Acme's hiring workflow",
    "status": "sent",
    "sent_at": "2026-03-12T10:15:00Z",
    "approved_at": "2026-03-12T09:30:00Z",
    "retry_count": 0,
    "last_error_code": null
  }
}
Pole Typ Opis
id string Identyfikator z prefiksem wiadomości
campaign_id string Identyfikator z prefiksem kampanii
prospect_id string Identyfikator z prefiksem leada
step_number integer Numer kroku sekwencji (1 = początkowy, 2+ = kolejne wiadomości)
subject string Temat wiadomości e-mail
status string Jedna z wartości: approved, sent, bounced, failed, deferred, delivery_unknown, confirmation_expired
sent_at string | null Kiedy wiadomość e-mail została wysłana
approved_at string | null Kiedy szkic został zatwierdzony
retry_count integer Liczba podjętych prób ponownego wysłania
last_error_code string | null Rozpoznany kod SMTP lub statusu dostarczenia, jeśli jest dostępny; null, jeśli nie rozpoczęto próby

Uwaga: treść wiadomości e-mail jest wykluczona z danych webhooka (szyfrowana w bazie danych).

outreach.message.delivery_resolved

Emitowane, gdy osoba z uprawnieniem do zarządzania kampanią zapisze niezmienną decyzję zamykającą przegląd delivery_unknown, deferred lub failed. Wynik określa, czy Kit zarejestrował niepewną wysyłkę jako wysłaną, zlecił wyraźnie zatwierdzoną próbę po sprawdzeniu danych lub naprawie, czy zamknął przegląd bez wysyłki. delivery_attempt_id wskazuje konkretną próbę, której danych dotyczy decyzja.

{
  "event": "outreach.message.delivery_resolved",
  "created_at": "2026-03-12T10:20:00Z",
  "data": {
    "id": 84,
    "message_id": "om_ghi789",
    "delivery_attempt_id": 312,
    "campaign_id": "oc_def456",
    "prospect_id": "op_abc123",
    "outcome": "confirmed_not_sent",
    "origin": "web",
    "resolved_by_id": 17,
    "resolved_at": "2026-03-12T10:20:00Z",
    "sent_at": null
  }
}
Pole Typ Opis
id integer Identyfikator rekordu audytowego rozstrzygnięcia
message_id string Identyfikator z prefiksem wiadomości
delivery_attempt_id integer Próba dostarczenia, której dotyczy decyzja
campaign_id string Identyfikator z prefiksem kampanii
prospect_id string Identyfikator z prefiksem leada
outcome string confirmed_sent, confirmed_not_sent, retry_authorized lub closed_without_delivery
origin string Źródło decyzji: web, mcp lub assistant
resolved_by_id integer | null Użytkownik, który potwierdził decyzję; null, jeśli ten użytkownik został później usunięty
resolved_at string Znacznik czasu decyzji w formacie ISO 8601
sent_at string | null Potwierdzony czas wysyłki; obecny wyłącznie dla confirmed_sent

Opcjonalna notatka operatora jest szyfrowana w spoczynku i celowo wykluczona, ponieważ może zawierać dane odbiorcy skopiowane ze skrzynki nadawcy.

Zdarzenia testowe

Zdarzenia: test.ping

Zdarzenie test.ping jest wysyłane po kliknięciu przycisku Wyślij test w ustawieniach webhooka. Służy do weryfikacji połączenia z endpointem oraz weryfikacji podpisu.

{
  "event": "test.ping",
  "created_at": "2025-01-15T14:30:00Z",
  "data": {}
}

Wpisz, aby wyszukać...