Skillflare

Webhooks

Outbound notifications for session and evaluation-set events

Webhooks send a POST to your endpoint when session or evaluation-set events occur in your organization. Create, edit, and delete them in the dashboard Webhooks page. There is no public HTTP API for managing webhooks.

Setup

  1. Open Webhooks in the dashboard.
  2. Create a webhook with an HTTPS URL and at least one event type.
  3. Edit the URL, name, or subscribed events later and delete the webhook when you no longer need it.

Prefer HTTPS. Skillflare does not currently sign webhook payloads; confirm an event by fetching the session with your organization API key.

Event types

TypeWhen it fires
SESSION.STARTEDThe candidate has started the session
SESSION.STOPPEDThe session has ended
EVALUATION_SET.STARTEDThe evaluation processes has been kickstarted
EVALUATION_SET.STOPPEDThe evaluation processes has been completed

A subscribed endpoint receives a separate POST per event type it is subscribed to. SESSION.STARTED fires when recording begins. DROPPED_OUT (no recording within 30 minutes of "I am ready") and EXPIRED (a PENDING session past expires_at) do not emit these events.

Request

Skillflare sends JSON with a 10 second timeout.

Headers

HeaderValue
Content-Typeapplication/json
User-AgentSkillflare-Webhooks/1.0
X-Webhook-EventEvent type (for example SESSION.STARTED)
X-Webhook-Delivery-IdUUID for this delivery attempt

Body

{
  "id": "delivery-uuid",
  "type": "SESSION.STARTED",
  "created_at": "2026-08-17T19:00:00.000Z",
  "data": {
    "session": {
      "id": "uuid",
      "created_at": "2026-08-17T18:00:00.000Z",
      "session_status": "RECORDING",
      "recording_started_at": "2026-08-17T19:00:00.000Z",
      "challenge_id": "uuid",
      "latest_evaluation_set_id": null,
      "candidate_id": "uuid",
      "candidate_full_name": "Alex Example",
      "candidate_email": "alex@example.com",
      "candidate_meta": { "external_id": "ats-123" }
    }
  }
}

data.session is a public subset of the session, not the Sessions API resource. candidate_full_name and candidate_email come from the linked candidate (profile when linked, otherwise invite fields; either may be null). candidate_meta is the opaque JSON object stored as meta on the organization–candidate link (set on create or update; defaults to {}). Use data.session.id with GET /v1/sessions/:id for evaluation scores. Omit x-organization-id on that request to read the organization that owns the API key. A partner key may pass a direct child.

Delivery and retries

OutcomeBehavior
HTTP 2xxSuccess
408, 429, 5xx, timeout, or network errorRetried up to 5 times with exponential backoff (2s–30s)
Other 4xxLogged and not retried

A retryable failure retries the whole dispatch. An endpoint that already returned 2xx may receive the same event again. Treat deliveries as idempotent: key on event type plus data.session.id. Do not key on X-Webhook-Delivery-Id or body id alone — retries mint a new UUID.

Receiving events

  • Return 2xx quickly; do heavy work asynchronously.
  • Prefer HTTPS.
  • Confirm the session with your org API key rather than trusting the payload alone.
curl https://api.skillflare.co/v1/sessions/SESSION_UUID \
  -H "x-api-key: sk_skillflare_YOUR_KEY"

On this page