Interview Webhooks

Get notified about interviews

Written By Get Reveal

Last updated 2 days ago

RevealAI can automatically POST interview data to a configured webhook URL when interviews reach certain statuses. This enables real-time integration with external systems like Salesforce, Zapier, or custom applications.

Configuration

Webhooks are configured per chatbot in the chatbot settings

When Webhooks Are Sent

Webhooks are triggered automatically during interview post-processing for three event types:

1. interview.complete

Triggered when: A respondent successfully completes the full interview.

2. interview.incomplete

Triggered when: An interview expires due to inactivity and is automatically marked incomplete. Interviews are marked incomplete after 24 hours of inactivity

3. interview.screened

Triggered when: A respondent is screened out by the AI screener feature.

Webhook HTTP Request

The request is sent via an HTTP POST with the following format

Headers

  • Content-Type: application/json

  • User-Agent: RevealAI-Webhooks/1.0

Timeout

Requests timeout after 10 seconds if no response is received.

Payload Structure

Test Payload Example

{
  "event": "interview.complete",
  "timestamp": "2026-05-21T17:59:11.492Z",
  "interviewId": "test_interview_id",
  "rtid": "test_rtid",
  "status": "COMPLETE",
  "startedAt": "2026-05-21T17:54:11.492Z",
  "chatbotId": "test_chatbot_id",
  "chatbotName": "Test Chatbot",
  "attributes": [
    {
      "key": "name",
      "value": "Test User",
      "valueTitle": "Test User",
      "keyTitle": "Full Name"
    },
    {
      "key": "email",
      "value": "test@example.com",
      "valueTitle": "test@example.com",
      "keyTitle": "Email Address"
    },
    {
      "key": "8skfg7d",
      "value": "ij12kg",
      "keyTitle": "Job Role",
      "valueTitle": "Software Developer"
    }
  ],
  "transcript": [
    {
      "sender": "BOT",
      "message": "Hello World! How are you?",
      "timestamp": "2026-05-21T17:59:11.492Z"
    },
    {
      "sender": "USER",
      "message": "I'm fine thank you",
      "timestamp": "2026-05-21T17:59:11.492Z"
    }
  ]
}

Root Level

Field

Type

Required

Description

event

string

Yes

Event type: interview.complete, interview.incomplete, or interview.screened

timestamp

string

Yes

ISO 8601 timestamp when the event occurred

interview

object

Yes

Interview details (see below)

chatbot

object

Yes

Chatbot details (see below)

attributes

object

Yes

Parsed Attributes from URL and/or quantitative questions (may be empty)

transcript

array

Yes

Full interview transcript (see below)

Interview Object

Field Type Required Description

id

string

Yes

ID of the interview

rtid

string

No

Tracking ID supplied (if present)

status

string

Yes

Interview status: COMPLETE, INCOMPLETE, SCREENED-REDIRECT, or SCREENED-TERMINATED

startedAt

string

Yes

ISO 8601 timestamp when interview started

Chatbot Object

Field Type Required Description

id

string

Yes

ID of the chatbot

name

string

Yes

Chatbot display name

Attributes Array

An array containing attribute objects

  • key: unique identifier of the attribute

  • keyTitle: Readable version of the key (may be the same as key)

  • value: unique identifier of the attribute value

  • valueTitle: Readable version of the value (may be the same as value)

Transcript Array

Array of message objects in chronological order:

Field Type Required Description

sender

string

Yes

Either "BOT" or "USER"

message

string

No

message content

timestamp

string

Yes

ISO 8601 timestamp when message was sent

stepId

string

No

ID of the question step (if applicable)

Retry Logic

Our system will automatically attempt to deliver it’s payload to your configured URL 3 times with exponential backoff (1 second, 2 seconds, 4 seconds) between failed attempts.

Retries are triggered for:

  • HTTP 5xx errors (500-599 status codes)

  • Timeouts (no response within 10 seconds)

  • Connection errors (DNS failure, connection refused, network errors)

When Retries Do NOT Occur:

  • HTTP 4xx errors (400-499 status codes) - These indicate client/configuration errors and are permanent failures

Expected Response

Success Response

Your webhook endpoint should respond with any 2xx status code (200-299) to indicate success.

The response body is optional and not parsed by RevealAI.

Example:

HTTP/1.1 200 OK Content-Type: application/json { "received": true } 

Testing Webhooks

Use the "Test Webhook" button in the RevealAI dashboard to send a sample payload to your endpoint. Webhook.site is a great resource for this, it provides a URL you can copy and use as your webhook target, then lets you inspect all webhook traffic to that URL