Skip to main content

Claap Webhooks Documentation

Technical documentation covering entity schema, payload description, and event triggers for Claap webhooks

Written by Marta Connor

Claap webhooks allow a client of Claap to be automatically notified of key events relating to their workspace and recordings, thereby enabling the creation of custom workflows with automation platforms like Zapier, Make, or n8n. You can also integrate with Claap webhooks with your own endpoint.

⚠️ We are modifying how webhooks return AI insights. Please check out this article for more information on an upcoming change:
Transitioning from Insight templates to AI fields in Claap's API and Webhooks

This article covers the technical documentation of Claap webhooks and related APIs.

⚠️ In order to connect a webhook to your workspace, please complete the setup steps described in Webhook Automations with Claap > Webhook setup

💡 For a more hands-on guide about using webhooks with automation tools like Zapier, see Ways to Use Webhooks with Claap.

Webhook events

Webhooks are registered in a workspace and fired when the following events take place in the workspace:

  • recording_added: a new recording is available

  • recording_updated: a recording was updated

Event

Description

recording_added

A new recording becomes available

recording_updated

An existing recording is updated

Event : recording_added

The recording_added event is triggered when a new recording becomes available to workspace members.

A recording becomes available after it has been:

  • transcoded

  • transcribed

  • analyzed

The payload may include:

  • recording metadata

  • outline

  • insights

  • transcript links

  • meeting participants

  • company information

  • CRM deal information

When the recording is a meeting recording, the payload will also contain, if relevant, information about participants, deal, and company.

When integrating with the recording_added event, ensure that test recordings have appropriate visibility settings since private recordings will not trigger this webhook.

⚠️ Private recordings and recordings not searchable by workspace members do not trigger this event.

Event : recording_updated

The recording_updated event is triggered when specific recording properties are modified.

This includes updates to:

  • folder

  • labels

  • attached deal

  • attached company

  • insight template

The payload includes the complete Recording entity.

⚠️ Private recordings and recordings not searchable by workspace members do not trigger this event.

Webhook request behavior

Webhook payloads are sent as HTTPS POST requests in JSON format.

Endpoints must:

  • return HTTP 200

  • respond within 5 seconds

If the request fails, Claap retries:

  1. immediately

  2. after 1 minute

  3. after 5 minutes

After the final retry, the payload is discarded.

Request headers

Webhook requests include the following headers:

Header

Description

x-claap-webhook-id

Webhook identifier

x-claap-webhook-secret

Webhook secret key

The webhook secret can be used to verify that requests originate from Claap.

Event structure

Webhook payloads are structured as JSON objects like:

{
"eventId": "eeghaiCh8Chaikusa5che",
"event": {
"type": "recording_added",
"recording": {
... <Recording> payload
}
}
}

Where event.type identifies the kind of event being received and eventId identifies this particular instance of webhook invocation. eventId is shared by all retries of a same invocation.

Recording entity

A Recording represents a successfully transcoded and analyzed clip or meeting recording.

The Recording entity may contain:

  • action items

  • companies

  • CRM information

  • insights

  • key takeaways

  • participants

  • meeting information

  • transcripts

  • video URLs

  • workspace information

A recording represents a successfully transcoded and analyzed result of a video clip or meeting.

  • actionItems (array of objects, required): a sequence of action items analyzed from the recording content. Each item is made of a markdown description and an isChecked boolean telling whether the action has been marked as completed.

    • items (array of objects, required):

      • description (string, required): action description as markdown

      • isChecked (boolean, required): true if the action has been validated

    • langIso2 (string, required): language of the items group

  • channel (object, optional): the folder (aka channel) the recording belongs to if any

    • id (string, required)

    • name (string, required)

  • companies (array of objects, required): external companies involved in the meeting

    • id (string, required)

    • name (string, required)

  • createdAt (string, required): recording creating time in ISO format. Note this is when the recording was initiated, not when it became ready for consumption. Often, this coincides with the time the related meeting started.

  • crmInfo (object, optional): the CRM information concerning the meeting, if any

    • crm (string, required): the name of the CRM connected to the workspace (one of attio, hubspot, pipedrive, or salesforce )

    • deal (object, required): the deal attached to the meeting, if any

      • id (string, required): The CRM-specific identifier for the attached deal.

  • deal (object, optional): the deal attached to the meeting, if any

    • id (string, required)

    • name (string, optional)

  • durationSeconds (number, required): duration of the recording video in seconds.

  • insightTemplates (array of objects, required)

    • insights (array of objects, required)

      • langIso2 (string, required)

      • sections (array of objects, required)

        • title (string, required)

        • description (string, required): as markdown.

    • templateTitle (string, required)

  • labels (array of strings, required)

  • id (string, required): recording identifier

  • keyTakeaways (array of objects, required)

    • langIso2 (string, required)

    • text (string, required)

  • meeting (object, optional): the meeting related to the recording if any

    • endingAt (string, required): meeting scheduled end time in ISO format. Recording end time if meeting was not scheduled

    • participants (array of objects, required): a collection of persons possibly attending the meeting, participants or organizers.

      • email (string, optional)

      • id (string, optional)

      • name (string, optional)

    • type (string, required): external if there is at least one external participant, internal otherwise.

    • startingAt (string, required): meeting scheduled start time in ISO format. Recording start time if meeting was not scheduled

  • outlines (array of objects, required)

    • langIso2 (string, required)

    • text (string, required)

  • recorder (object, required): the person recording the clip or meeting

    • attended (boolean, required): true if the recorder attended the meeting

    • email (string, required)

    • id (string, required)

    • name (string, required)

  • transcripts (array, required): the list of all transcript, made of the native transcript and requested translations

    • isActive (boolean, optional): true if this transcript is the default one selected for the recording.

    • isTranscript (boolean, optional): true if this is the native transcript

    • langIso2 (string, optional): the transcript language code

    • textUrl (string, required): the URL to the transcript text representation, valid for 24 hours.

    • url (string, required): the URL to the transcript JSON file, valid for 24 hours.

  • thumbnailUrl (string, required): link to the thumbnail picture illustrating this recording

  • title (string, optional): recording title

  • url (string, required): recording page URL in claap web application.

  • video (object, required)

    • url (string, required): recording video URL, valid for 24 hours.

  • workspace (object, required): workspace where the recording is present

    • id (string, required)

    • name (string, required)

Transcript schema

A JSON transcript is available at the URL available in transcripts[].url

Timecode are relative to the transcribed audio timeline, in seconds, starting at zero.

  • language (string, optional): iso-2 code of the “main” language of the transcript

  • segments (array, required): the array of speaking segments, each attached to a single speaker

    • endedAt (number, required): segment end timecode.

    • languageCode (string, optional): iso-2 code of the “main” language of the segment

    • speaker (string, optional): arbitrary speaker identifier

    • startedAt (number, required): segment start timecode

    • text (string, required): segment transcription

    • words (array, optional): sequence of words composing the segment

      • endedAt (number, required): word end timecode

      • startedAt (number, required): word start timecode

      • word (string, required): word transcription

Example transcript structure:

{   "language":"en",   "segments": [     {       "speaker":"Speaker 1",       "startedAt":0,       "endedAt":12,       "text":"Welcome everyone"     }   ] }

Transcript URLs

Transcript URLs are temporary.

The following URLs remain valid for 24 hours:

  • transcripts[].url

  • transcripts[].textUrl

  • video.url

CRM information

Webhook payloads may include CRM information if connected to the workspace.

Supported CRMs include:

  • HubSpot

  • Salesforce

  • Pipedrive

  • Attio

CRM payloads may contain:

  • CRM provider

  • attached deal ID

  • attached deal name

Example payload

A sample recording_added payload is available in the API documentation.

Below is a JSON file containing an example of the payload received for a recording_added event:

Sample payload

{
"eventId": "vM23twV2fdlGE3WgMVOgy",
"event": {
"type": "recording_added",
"recording": {
"actionItems": [
{
"items": [
{
"description": "**Paul**: share slide deck with John",
"isChecked": false
},
{
"description": "**Patrick**: review the deal specification",
"isChecked": true
}
],
"langIso2": "en"
}
],
"channel": {
"id": "QbjbnJW4D0",
"name": "Team Daily Meetings"
},
"companies": [
{
"id": "ICLHjGDmvZOJQO5j",
"name": "ACME Corp"
}
],
"createdAt": "2025-01-09T10:49:40.439Z",
"deal": {
"id": "n9jGT12wyyLECaSx",
"name": "ACME Corp -- Annual renewal 2025"
},
"durationSeconds": 157.061,
"id": "N7pLMMIjatb3",
"insightTemplates": [
{
"insights": [
{
"langIso2": "en",
"sections": [
{
"description": "The meeting addressed several points regarding...",
"title": "📄 Meeting summary"
},
{
"description": "* %[00:16]() Decison 1.....\n* %[01:06]() Decision 2...",
"title": "💡 Decisions"
}
]
}
],
"templateTitle": "Team Update #2"
}
],
"keyTakeaways": [
{
"langIso2": "en",
"text": "* **Paul** reported...\n* **Patrick** suggested... \n* A problem was raised by **John** regarding..."
},
{
"langIso2": "fr",
"text": "* **Paul** a signalé\n* **Patrick** a proposé...\n* Un problème a été soulevé par **John** concernant..."
}
],
"labels": [
"Blue Team"
],
"meeting": {
"endingAt": "2025-01-09T11:00:00Z",
"participants": [
{
"attended": true,
"email": "<email>",
"id": "vVHh4RGVYJO1",
"name": "Patrick M"
},
{
"attended": true,
"email": "<email>",
"id": "IVdaRoMqRa4Z",
"name": "Paul"
},
{
"attended": true,
"email": "<email>",
"id": "KckfeYteFKuB",
"name": "John F"
}
],
"startingAt": "2025-01-09T10:00:00Z",
"type": "external"
},
"outlines": [
{
"langIso2": "en",
"text": "### Introduction\n* ..."
},
{
"langIso2": "fr",
"text": "### Introduction\n* ..."
}
],
"recorder": {
"attended": false,
"email": "<email>",
"id": "w5ZEqqIXEcwG",
"name": "Thomas H"
},
"thumbnailUrl": "<url>",
"title": "Daily Blue 09/01/2024",
"transcripts": [
{
"isTranscript": true,
"langIso2": "fr",
"textUrl": "<url>",
"url": "<url>"
},
{
"isActive": true,
"langIso2": "en",
"textUrl": "<url>",
"url": "<url>"
}
],
"url": "<url>",
"video": {
"url": "<url>"
}
"workspace": {
"id": "ABCD1234",
"name": "ACME Corp"
},
}
}
}

Did this answer your question?