# Candidate Interview API — Webhooks

The Candidate Interview API emits the following webhook events. All events share the same `candidateinterviewv2` domain and deliver a full `CandidateInterviewV2ResponseDTO` snapshot (camelCase fields).

See the [Webhooks guide](/docs/webhooks) for general information on payload structure, idempotency, and how to subscribe.

## Available Events

| Event | Description |
|  --- | --- |
| `CandidateInterviewV2CreatedEvent` | Fired when a new candidate interview feature is created |
| `CandidateInterviewV2ForwardedEvent` | Fired when the candidate interview is forwarded |
| `CandidateInterviewV2StatusTransitionedEvent` | Fired when the interview feature status transitions to a new value |
| `CandidateInterviewV2ClosedEvent` | Fired when the candidate interview feature is closed |
| `CandidateInterviewV2FinishedEvent` | Fired when the interview conversation finishes |
| `CandidateInterviewV2ContactedAlternativelyEvent` | Fired when the candidate is contacted through an alternative channel |


## Payload

All events use a camelCase envelope with a `CandidateInterviewV2ResponseDTO` in the `payload` field.

```json
{
  "webhookId": "wh_abc123",
  "idempotencyId": "a3f2c1d4-5e6f-...",
  "domain": "candidateinterviewv2",
  "event": "CandidateInterviewV2FinishedEvent",
  "version": 2,
  "timestamp": 1713384000000,
  "payload": {
    "id": "feat_abc123",
    "featureId": "ftr_xyz",
    "relationId": "rel_abc",
    "candidateId": "cand_abc",
    "vacancyId": "vac_abc",
    "companyId": "cmp_xyz",
    "isClosed": false,
    "status": {
      "code": "Started",
      "descriptionCode": null,
      "date": "2024-04-17T20:00:00.000Z",
      "notificationDelay": null
    },
    "statusHistory": [
      {
        "code": "Contacted",
        "descriptionCode": null,
        "date": "2024-04-17T19:00:00.000Z",
        "notificationDelay": null
      }
    ],
    "score": 85,
    "briefScoreExplanation": "The candidate demonstrated strong technical skills.",
    "origin": "vacancy",
    "sourceId": null,
    "answers": [
      {
        "questionId": "q_abc123",
        "order": 1,
        "questionText": "Describe your experience with Node.js",
        "questionType": "QUALIFYING",
        "extractedAnswer": "I have 3 years of experience building REST APIs with NestJS.",
        "questionScore": 90,
        "maxQuestionScore": 100,
        "complianceLevel": "COMPLIANT",
        "questionScoreExplanation": "Clear and relevant answer with concrete experience.",
        "scorerThinking": "The candidate's answer covers all required criteria.",
        "completionCriteria": null,
        "requirementScoringRubric": null,
        "needsReview": false,
        "sourceType": "MANUAL",
        "createdAt": "2024-04-17T20:00:00.000Z"
      }
    ],
    "createdAt": "2024-04-17T19:00:00.000Z",
    "updatedAt": "2024-04-17T20:00:00.000Z"
  }
}
```

For the schema definition, see the **Get Feature by ID** operation in the [API reference](/apis/candidate-interview-v2) — the `200` response shows the full interactive `CandidateInterviewV2ResponseDTO`.

## Subscribing

To subscribe to any of these events, follow the [subscription request process](/docs/webhooks#requesting-a-webhook-subscription) and specify the event name and your endpoint URL.