Dokumentacja zdarzeń webhook
Struktura danych, nagłówki i definicje pól dla każdego zdarzenia webhook.
Dlaczego to ważne
Każde dostarczenie webhooka opakowuje dane specyficzne dla zdarzenia w ten sam format koperty. Niniejsza dokumentacja opisuje dokładną strukturę danych dla każdego zdarzenia, aby można było je parsować i obsługiwać z pełną pewnością.
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żywany w sygnaturze |
User-Agent |
Kit-Webhooks/1.0 |
Identyfikuje Kit jako nadawcę |
Szczegóły dotyczące weryfikacji sygnatury znajdują się w sekcji Bezpieczeństwo i dostarczanie webhooków.
Zdarzenia aplikacji
Zdarzenia: application.submitted, application.rejected, application.advanced, application.withdrawn, application.offer_extended
{
"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.candidate_accepted, offer.candidate_declined, offer.revised
offer.accepted/offer.declined— wywoływane, gdy administrator akceptuje lub odrzuca ofertęoffer.candidate_accepted/offer.candidate_declined— wywoływane, gdy kandydat odpowiada na ofertęoffer.revised— wywoływane, gdy administrator zmienia warunki oferty
{
"event": "offer.candidate_accepted",
"created_at": "2025-01-20T10:00:00Z",
"data": {
"id": 15,
"status": "candidate_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ółowy 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
{
"event": "interview.scheduled",
"created_at": "2025-01-16T09:00:00Z",
"data": {
"id": 28,
"status": "scheduled",
"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 (scheduled, 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",
"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 |
repo_url |
string | Adres URL repozytorium GitHub |
submitted_at |
string | null | Kiedy zadanie zostało przesłane |
deadline_at |
string | null | Termin wykonania zadania |
candidate |
object | Dane kandydata |
job_posting |
object | Dane ogłoszenia o pracę |
Zdarzenia ocen
Zdarzenia: review.submitted
{
"event": "review.submitted",
"created_at": "2025-01-23T11:00:00Z",
"data": {
"id": 9,
"recommendation": "strong_yes",
"reviewer": "Alex Johnson",
"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 |
candidate |
object | Dane kandydata |
job_posting |
object | Dane ogłoszenia o pracę |
stage |
string | Nazwa etapu 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 | Rodzaj zatrudnienia (Full-time, Part-time, Contract itd.) |
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 Outreach
Zdarzenia: outreach.prospect.drafted, outreach.message.approved, outreach.message.sent, outreach.message.bounced, outreach.message.failed
Te zdarzenia wymagają dodatku Outreach.
outreach.prospect.drafted
Wywoływane, gdy AI zakończy badanie prospekta i przygotowanie wersji roboczej 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 prefiksowy prospekta |
campaign_id |
string | Identyfikator prefiksowy kampanii |
company_name |
string | Nazwa firmy prospekta |
display_name |
string | Wyświetlana nazwa prospekta |
status |
string | Status prospekta w momencie zdarzenia |
Uwaga: Adres e-mail prospekta jest wykluczony z danych webhook (szyfrowany w bazie danych).
outreach.message.approved / sent / bounced / failed
Wywoływane, gdy wiadomość przechodzi do statusu approved, sent, bounced lub failed.
{
"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 prefiksowy wiadomości |
campaign_id |
string | Identyfikator prefiksowy kampanii |
prospect_id |
string | Identyfikator prefiksowy prospekta |
step_number |
integer | Numer kroku sekwencji (1 = początkowy, 2+ = kontynuacje) |
subject |
string | Temat wiadomości e-mail |
status |
string | Jedna z wartości: approved, sent, bounced, failed |
sent_at |
string | null | Kiedy wiadomość e-mail została wysłana |
approved_at |
string | null | Kiedy wersja robocza została zatwierdzona |
retry_count |
integer | Liczba podjętych prób ponownego wysłania |
last_error_code |
string | null | Kod błędu SMTP (obecny przy statusie bounced/failed) |
Uwaga: Treść wiadomości e-mail jest wykluczona z danych webhook (szyfrowana w bazie danych).
Zdarzenia testowe
Zdarzenia: test.ping
Zdarzenie test.ping jest wysyłane po kliknięciu przycisku Send Test Ping w ustawieniach webhooka. Służy do weryfikacji połączenia z endpointem oraz walidacji sygnatury.
{
"event": "test.ping",
"created_at": "2025-01-15T14:30:00Z",
"data": {}
}