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 availablerecording_updated: a recording was updated
Event | Description |
| A new recording becomes available |
| 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:
immediately
after 1 minute
after 5 minutes
After the final retry, the payload is discarded.
Request headers
Webhook requests include the following headers:
Header | Description |
| Webhook identifier |
| 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 markdownisChecked(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 anyid(string, required)name(string, required)
companies(array of objects, required): external companies involved in the meetingid(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 anycrm(string, required): the name of the CRM connected to the workspace (one ofattio,hubspot,pipedrive, orsalesforce)deal(object, required): the deal attached to the meeting, if anyid(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 identifierkeyTakeaways(array of objects, required)langIso2(string, required)text(string, required)
meeting(object, optional): the meeting related to the recording if anyendingAt(string, required): meeting scheduled end time in ISO format. Recording end time if meeting was not scheduledparticipants(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):externalif there is at least one external participant,internalotherwise.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 meetingattended(boolean, required): true if the recorder attended the meetingemail(string, required)id(string, required)name(string, required)
transcripts(array, required): the list of all transcript, made of the native transcript and requested translationsisActive(boolean, optional): true if this transcript is the default one selected for the recording.isTranscript(boolean, optional): true if this is the native transcriptlangIso2(string, optional): the transcript language codetextUrl(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 recordingtitle(string, optional): recording titleurl(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 presentid(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 transcriptsegments(array, required): the array of speaking segments, each attached to a single speakerendedAt(number, required): segment end timecode.languageCode(string, optional): iso-2 code of the “main” language of the segmentspeaker(string, optional): arbitrary speaker identifierstartedAt(number, required): segment start timecodetext(string, required): segment transcriptionwords(array, optional): sequence of words composing the segmentendedAt(number, required): word end timecodestartedAt(number, required): word start timecodeword(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[].urltranscripts[].textUrlvideo.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 |
Below is a JSON file containing an example of the payload received for a recording_added event:
Sample payload
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"
},
}
}
}
