REST API
Records
Read accessible meetings, dialogs, insights, and original media URLs.
/v2/workspaces/{slug}/recordsRecord list search
Filter accessible records and sort them by recording time.
Parameters
slugRequiredstringpathWorkspace slugquerystring | nullqueryText to search for in record titles or transcripts.search_mode"all_fields" | "title_terms" | "transcript""all_fields"Set the search scope to one of all_fields, title_terms, or transcript.user_idinteger | nullqueryReturn only records accessible to the specified user.label_idsinteger[] | nullqueryLabel IDs to filter by.label_filter_condition"and" | "or""and"Combine label_ids using and or or.order"id" | "rec_date""id"Set the sort field to id or rec_date.team_idinteger | nullqueryReturn only records linked to the specified team.team_idsinteger[] | nullqueryReturn only records linked to one of the specified teams.next_tokenstring | nullqueryToken for retrieving the next page, or null when no page remains.owner_user_idinteger | nullqueryReturn only records owned by the specified user.owner_user_idsinteger[] | nullqueryReturn only records owned by one of the specified users.record_sourcesRecordSource[] | nullqueryRecord source values to filter by.start_datestring (date) | nullqueryStart date of the record query period.end_datestring (date) | nullqueryEnd date of the record query period.limitintegerqueryDefault100Maximum number of items returned.
Request example
curl --request GET \
--url "https://api.callabo.ai/v2/workspaces/your-workspace/records" \
--header "Accept: application/json" \
--header "Authorization: Bearer $CALLABO_PAT"Success responses
Response body
itemsRequiredV2RecordListItem[]Retrieved records.idRequiredintegerRecord identifier.uuidstring | nullRecord UUID specified by the client.titlestring | nullRecord title.sourceRequiredRecordSourceRecord acquisition source.statusRequiredRecordStatusRecord processing status.recorded_atRequiredstring (date-time)Date and time when the recording ended.started_atRequiredstring (date-time)Date and time when recording started.duration_msinteger | nullRecord duration in milliseconds.scopeRequiredRecordScopeRecord access scope.ownerRequiredV2RecordMemberSummary | nullMember who owns the record.teamsRequiredV2TeamSummary[]Teams associated with the record.labelsRequiredV2Label[]Labels applied to the record.filesizeRequiredintegerOriginal media file size in bytes.created_atRequiredstring (date-time)Date and time when the record was created.is_readyRequiredbooleanWhether the record is ready to be retrieved.is_title_generatingRequiredbooleanWhether record title generation is in progress.is_auto_label_generatingRequiredbooleanWhether automatic label recommendation generation is in progress.permissionsRequiredobjectRecord permissions granted to the requester.eventV2RecordEvent | nullCalendar event associated with the record.accessRequiredV2RecordAccessTeams and members that can access the record.availabilityV2RecordAvailability | nullRecord data retention status.shared_recordV2SharedRecordSummary | nullExternal share information.export_historiesRequiredV2RecordExportHistory[]Record export history entries.recommended_labelsRequiredV2RecommendedLabel[]Recommended labels for the record.next_tokenstring | nullToken for retrieving the next page, or null on the last page.
Response example
{
"items": [
{
"id": 1,
"source": "zoom",
"status": "created",
"recorded_at": "2026-08-27T03:00:00Z",
"started_at": "2026-08-27T03:00:00Z",
"scope": "workspace",
"owner": {
"id": 1,
"name": "Example",
"email": "developer@example.com"
},
"teams": [
{
"id": 1,
"name": "Example"
}
],
"labels": [
{
"id": 1,
"name": "Example",
"color": "string"
}
],
"filesize": 1,
"created_at": "2026-08-27T03:00:00Z",
"is_ready": true,
"is_title_generating": true,
"is_auto_label_generating": true,
"permissions": {},
"access": {
"teams": [
{
"id": 1,
"name": "Example"
}
],
"members": [
{
"id": 1,
"name": "Example",
"email": "developer@example.com"
}
]
},
"export_histories": [
{
"id": 1,
"workspace_id": 1,
"record_id": 1,
"member_id": 1,
"platform_unique_id": "string",
"ref_url": "https://api.callabo.ai/example",
"platform": "salesforce",
"export_type": "case",
"created_at": "2026-08-27T03:00:00Z",
"updated_at": "2026-08-27T03:00:00Z"
}
],
"recommended_labels": [
{
"label_id": 1,
"label_name": "string"
}
]
}
]
}Errors
| Status | Error code | Description |
|---|---|---|
| 401 | UNAUTHORIZED | Unauthenticated request |
| 403 | FORBIDDEN | Insufficient requester permissions |
| 404 | WORKSPACE_NOT_FOUND | Not found |
| 422 | VALIDATION_ERROR | Unprocessable content |
| 429 | RATE_LIMIT_EXCEEDED | Request limit exceededLearn more |
Dialogs & Insights
Dialogs and insights are not separate GET endpoints. Pass the required values as a comma-separated include query on record detail.
/v2/workspaces/{slug}/records/{record_id}Record single search
Retrieve a record and optionally include dialogs and insights in the same request.
Parameters
record_idRequiredintegerpathRecord identifier.slugRequiredstringpathWorkspace slugincludestring | nullquerySpecify subresources to include indialogs,insightsformat.querystring | nullqueryText to search for in transcripts. Matching transcripts are returned when specified.
Request example
curl --request GET \
--url "https://api.callabo.ai/v2/workspaces/your-workspace/records/1" \
--header "Accept: application/json" \
--header "Authorization: Bearer $CALLABO_PAT"Success responses
Response body
recordRequiredV2RecordRetrieved record.idRequiredintegerRecord identifier.uuidstring | nullRecord UUID specified by the client.titlestring | nullRecord title.sourceRequiredRecordSourceRecord acquisition source.statusRequiredRecordStatusRecord processing status.recorded_atRequiredstring (date-time)Date and time when the recording ended.started_atRequiredstring (date-time)Date and time when recording started.duration_msinteger | nullRecord duration in milliseconds.scopeRequiredRecordScopeRecord access scope.ownerRequiredV2RecordMemberSummary | nullMember who owns the record.teamsRequiredV2TeamSummary[]Teams associated with the record.labelsRequiredV2Label[]Labels applied to the record.filesizeRequiredintegerOriginal media file size in bytes.protected_from_deletionRequiredbooleanWhether the record is protected from deletion.permissionsRequiredobjectRecord permissions granted to the requester.created_atRequiredstring (date-time)Date and time when the record was created.updated_atRequiredstring (date-time)Date and time when the record was last updated.is_readyboolean | nullWhether the record is ready to be retrieved.is_title_generatingboolean | nullWhether record title generation is in progress.is_auto_label_generatingboolean | nullWhether automatic label recommendation generation is in progress.eventV2RecordEvent | nullCalendar event associated with the record.accessV2RecordAccess | nullTeams and members that can access the record.availabilityV2RecordAvailability | nullRecord data retention status.extraV2RecordExtra | nullAdditional record processing and transcription information.related_call_recordsV2RelatedCallRecord[] | nullCall records associated with the same phone number.pii_redaction_activeboolean | nullWhether the personal information masking policy is enabled.shared_recordV2SharedRecordSummary | nullExternal share information.export_historiesV2RecordExportHistory[] | nullRecord export history entries.recommended_labelsV2RecommendedLabel[] | nullRecommended labels for the record.dialogsV2Dialog[] | nullDialogs requested withinclude.idRequiredintegerTranscript utterance identifier.start_msRequiredintegerUtterance start time in milliseconds.duration_msRequiredintegerUtterance duration in milliseconds.speaker_idRequiredintegerSpeaker identifier.textRequiredstringUtterance content.bookmarkRequiredbooleanWhether the utterance is bookmarked.original_textstring | nullOriginal unmasked text, or null without permission to view it.pii_spansobject[] | nullPersonal information spans masked in the utterance.insightsV2Insight[] | nullInsights requested withinclude.record_idRequiredintegerIdentifier of the record to which the insight belongs.typeRequiredInsightTypeInsight type.statusRequired"created" | "processed" | "failed" | "not_supported"Insight processing status.valueRequiredInsightValue | nullGenerated insight content.languageRequiredRecordInsightLanguageInsight result language.custom_insight_template_idinteger | nullIdentifier of the custom template used to generate the insight.is_editedRequiredbooleanWhether the value was edited by a user.edited_by_member_idinteger | nullIdentifier of the member who edited the insight.edited_atstring (date-time) | nullDate and time when the insight was edited.
Response example
{
"record": {
"id": 1,
"source": "zoom",
"status": "created",
"recorded_at": "2026-08-27T03:00:00Z",
"started_at": "2026-08-27T03:00:00Z",
"scope": "workspace",
"owner": {
"id": 1,
"name": "Example",
"email": "developer@example.com"
},
"teams": [
{
"id": 1,
"name": "Example"
}
],
"labels": [
{
"id": 1,
"name": "Example",
"color": "string"
}
],
"filesize": 1,
"protected_from_deletion": true,
"permissions": {},
"created_at": "2026-08-27T03:00:00Z",
"updated_at": "2026-08-27T03:00:00Z"
}
}Errors
| Status | Error code | Description |
|---|---|---|
| 401 | UNAUTHORIZED | Unauthenticated request |
| 403 | FORBIDDEN | Insufficient requester permissions |
| 404 | RECORD_NOT_FOUND, WORKSPACE_NOT_FOUND | Not found |
| 422 | INVALID_INCLUDE, VALIDATION_ERROR | Unprocessable content |
| 429 | RATE_LIMIT_EXCEEDED | Request limit exceededLearn more |
Original media
The response contains a short-lived URL, not the file body. SRT and VTT subtitle downloads are outside the initial scope.
/v2/workspaces/{slug}/records/{record_id}/mediaRecord media URL query
Issue a download URL for the original record media that is valid for at least one hour.
Parameters
record_idRequiredintegerpathRecord identifier.slugRequiredstringpathWorkspace slug
Request example
curl --request GET \
--url "https://api.callabo.ai/v2/workspaces/your-workspace/records/1/media" \
--header "Accept: application/json" \
--header "Authorization: Bearer $CALLABO_PAT"Success responses
Response body
urlRequiredstringTemporary URL for downloading the original media.expires_atRequiredstringDate and time when the temporary URL expires.filenamestring | nullOriginal media filename.content_typestring | nullMIME type of the original media.
Response example
{
"url": "https://api.callabo.ai/example",
"expires_at": "2026-08-27T03:00:00Z"
}Errors
| Status | Error code | Description |
|---|---|---|
| 401 | UNAUTHORIZED | Unauthenticated request |
| 403 | FORBIDDEN | Insufficient requester permissions |
| 404 | RECORD_NOT_FOUND, MEDIA_NOT_FOUND, WORKSPACE_NOT_FOUND | Not found |
| 409 | RECORD_NOT_READY | Conflict |
| 422 | VALIDATION_ERROR | Unprocessable content |
| 429 | RATE_LIMIT_EXCEEDED | Request limit exceededLearn more |
/v2/workspaces/{slug}/records/{record_id}/shareRecord external sharing view
Retrieve the record's external sharing settings and share-link information.
Parameters
slugRequiredstringpathWorkspace slugrecord_idRequiredintegerpathRecord identifier.
Request example
curl --request GET \
--url "https://api.callabo.ai/v2/workspaces/your-workspace/records/1/share" \
--header "Accept: application/json" \
--header "Authorization: Bearer $CALLABO_PAT"Success responses
Response body
record_idRequiredintegerIdentifier of the shared record.share_idRequiredstringExternal share identifier.titleRequiredstring | nullShared page title.durationRequiredSharedRecordDurationPeriod during which the shared record can be played.urlRequiredstringPath for retrieving shared record details.created_atRequiredstring (date-time)Date and time when the external share was created.expires_atstring (date-time) | nullDate and time when the external share expires.
Response example
{
"record_id": 1,
"share_id": "string",
"title": "Weekly sync",
"duration": "7d",
"url": "https://api.callabo.ai/example",
"created_at": "2026-08-27T03:00:00Z"
}Errors
| Status | Error code | Description |
|---|---|---|
| 401 | UNAUTHORIZED | Unauthenticated request |
| 403 | FORBIDDEN | Insufficient requester permissions |
| 404 | RECORD_NOT_FOUND, SHARE_NOT_FOUND, WORKSPACE_NOT_FOUND | Not found |
| 422 | VALIDATION_ERROR | Unprocessable content |
| 429 | RATE_LIMIT_EXCEEDED | Request limit exceededLearn more |
/v2/workspaces/{slug}/records/{record_id}/shareCreate or update external record share
Create the record's external sharing settings or update the existing settings.
Parameters
slugRequiredstringpathWorkspace slugrecord_idRequiredintegerpathRecord identifier.
Request body
External sharing settings to create or update.
titleRequiredstringTitle displayed on the shared page.expires_in_daysRequired7 | 30 | 60 | 90 | nullShare link validity period; null means it does not expire.
Request example
curl --request PUT \
--url "https://api.callabo.ai/v2/workspaces/your-workspace/records/1/share" \
--header "Accept: application/json" \
--header "Authorization: Bearer $CALLABO_PAT" \
--header "Content-Type: application/json" \
--data '{
"title": "Weekly sync",
"expires_in_days": 7
}'Success responses
Response body
shared_recordRequiredV2SharedRecordCreated or updated external sharing information.record_idRequiredintegerIdentifier of the shared record.share_idRequiredstringExternal share identifier.titleRequiredstring | nullShared page title.durationRequiredSharedRecordDurationPeriod during which the shared record can be played.urlRequiredstringPath for retrieving shared record details.created_atRequiredstring (date-time)Date and time when the external share was created.expires_atstring (date-time) | nullDate and time when the external share expires.passwordRequiredstringPassword used to access the shared record.
Response example
{
"shared_record": {
"record_id": 1,
"share_id": "string",
"title": "Weekly sync",
"duration": "7d",
"url": "https://api.callabo.ai/example",
"created_at": "2026-08-27T03:00:00Z"
},
"password": "string"
}Errors
| Status | Error code | Description |
|---|---|---|
| 401 | UNAUTHORIZED | Unauthenticated request |
| 403 | FORBIDDEN | Insufficient requester permissions |
| 404 | RECORD_NOT_FOUND, SHARE_NOT_FOUND, WORKSPACE_NOT_FOUND | Not found |
| 409 | RECORD_NOT_READY | Conflict |
| 422 | VALIDATION_ERROR | Unprocessable content |
| 429 | RATE_LIMIT_EXCEEDED | Request limit exceededLearn more |
/v2/workspaces/{slug}/records/{record_id}/shareDelete external record share
Delete the record's external sharing settings and share link.
Parameters
record_idRequiredintegerpathRecord identifier.slugRequiredstringpathWorkspace slug
Request example
curl --request DELETE \
--url "https://api.callabo.ai/v2/workspaces/your-workspace/records/1/share" \
--header "Accept: application/json" \
--header "Authorization: Bearer $CALLABO_PAT"Success responses
Errors
| Status | Error code | Description |
|---|---|---|
| 401 | UNAUTHORIZED | Unauthenticated request |
| 403 | FORBIDDEN | Insufficient requester permissions |
| 404 | RECORD_NOT_FOUND, SHARE_NOT_FOUND, WORKSPACE_NOT_FOUND | Not found |
| 422 | VALIDATION_ERROR | Unprocessable content |
| 429 | RATE_LIMIT_EXCEEDED | Request limit exceededLearn more |
/v2/workspaces/{slug}/records/{record_id}/export-historiesRecord export history inquiry
List the record's external export history with pagination.
Parameters
record_idRequiredintegerpathRecord identifier.slugRequiredstringpathWorkspace slugoffsetintegerqueryDefault0Zero-based offset of the first returned item.limitintegerqueryDefault20Maximum number of items returned.
Request example
curl --request GET \
--url "https://api.callabo.ai/v2/workspaces/your-workspace/records/1/export-histories" \
--header "Accept: application/json" \
--header "Authorization: Bearer $CALLABO_PAT"Success responses
Response body
itemsRequiredV2RecordExportHistory[]Record export history entries.idRequiredintegerExport history entry identifier.workspace_idRequiredintegerWorkspace identifier.record_idRequiredintegerExported record identifier.member_idRequiredintegerIdentifier of the member who performed the export.platform_unique_idRequiredstringIdentifier of the item created on the external platform.ref_urlRequiredstringURL of the exported item on the external platform.platformRequiredRecordExportPlatformTypeExternal platform to which the record was exported.export_typeRequiredRecordExportTypeExport content type.titlestring | nullTitle of the exported item.metadataobject | nullAdditional export result information.created_atRequiredstring (date-time)Date and time when the export history entry was created.updated_atRequiredstring (date-time)Date and time when the export history entry was last updated.pageRequiredV2PaginationExport history pagination information.offsetRequiredintegerZero-based offset of the first returned item.limitRequiredintegerRequested maximum number of items.totalRequiredintegerTotal number of matching items.
Response example
{
"items": [
{
"id": 1,
"workspace_id": 1,
"record_id": 1,
"member_id": 1,
"platform_unique_id": "string",
"ref_url": "https://api.callabo.ai/example",
"platform": "salesforce",
"export_type": "case",
"created_at": "2026-08-27T03:00:00Z",
"updated_at": "2026-08-27T03:00:00Z"
}
],
"page": {
"offset": 1,
"limit": 1,
"total": 1
}
}Errors
| Status | Error code | Description |
|---|---|---|
| 401 | UNAUTHORIZED | Unauthenticated request |
| 403 | FORBIDDEN | Insufficient requester permissions |
| 404 | RECORD_NOT_FOUND | Not found |
| 422 | VALIDATION_ERROR | Unprocessable content |
| 429 | RATE_LIMIT_EXCEEDED | Request limit exceededLearn more |
/v2/workspaces/{slug}/shared-recordsView shared record list
List records currently shared externally from the workspace.
Parameters
slugRequiredstringpathWorkspace slugnext_tokenstring | nullqueryToken for retrieving the next page, or null when no page remains.limitintegerqueryDefault100Maximum number of items returned.
Request example
curl --request GET \
--url "https://api.callabo.ai/v2/workspaces/your-workspace/shared-records" \
--header "Accept: application/json" \
--header "Authorization: Bearer $CALLABO_PAT"Success responses
Response body
itemsRequiredV2RecordListItem[]Retrieved records.idRequiredintegerRecord identifier.uuidstring | nullRecord UUID specified by the client.titlestring | nullRecord title.sourceRequiredRecordSourceRecord acquisition source.statusRequiredRecordStatusRecord processing status.recorded_atRequiredstring (date-time)Date and time when the recording ended.started_atRequiredstring (date-time)Date and time when recording started.duration_msinteger | nullRecord duration in milliseconds.scopeRequiredRecordScopeRecord access scope.ownerRequiredV2RecordMemberSummary | nullMember who owns the record.teamsRequiredV2TeamSummary[]Teams associated with the record.labelsRequiredV2Label[]Labels applied to the record.filesizeRequiredintegerOriginal media file size in bytes.created_atRequiredstring (date-time)Date and time when the record was created.is_readyRequiredbooleanWhether the record is ready to be retrieved.is_title_generatingRequiredbooleanWhether record title generation is in progress.is_auto_label_generatingRequiredbooleanWhether automatic label recommendation generation is in progress.permissionsRequiredobjectRecord permissions granted to the requester.eventV2RecordEvent | nullCalendar event associated with the record.accessRequiredV2RecordAccessTeams and members that can access the record.availabilityV2RecordAvailability | nullRecord data retention status.shared_recordV2SharedRecordSummary | nullExternal share information.export_historiesRequiredV2RecordExportHistory[]Record export history entries.recommended_labelsRequiredV2RecommendedLabel[]Recommended labels for the record.next_tokenstring | nullToken for retrieving the next page, or null on the last page.
Response example
{
"items": [
{
"id": 1,
"source": "zoom",
"status": "created",
"recorded_at": "2026-08-27T03:00:00Z",
"started_at": "2026-08-27T03:00:00Z",
"scope": "workspace",
"owner": {
"id": 1,
"name": "Example",
"email": "developer@example.com"
},
"teams": [
{
"id": 1,
"name": "Example"
}
],
"labels": [
{
"id": 1,
"name": "Example",
"color": "string"
}
],
"filesize": 1,
"created_at": "2026-08-27T03:00:00Z",
"is_ready": true,
"is_title_generating": true,
"is_auto_label_generating": true,
"permissions": {},
"access": {
"teams": [
{
"id": 1,
"name": "Example"
}
],
"members": [
{
"id": 1,
"name": "Example",
"email": "developer@example.com"
}
]
},
"export_histories": [
{
"id": 1,
"workspace_id": 1,
"record_id": 1,
"member_id": 1,
"platform_unique_id": "string",
"ref_url": "https://api.callabo.ai/example",
"platform": "salesforce",
"export_type": "case",
"created_at": "2026-08-27T03:00:00Z",
"updated_at": "2026-08-27T03:00:00Z"
}
],
"recommended_labels": [
{
"label_id": 1,
"label_name": "string"
}
]
}
]
}Errors
| Status | Error code | Description |
|---|---|---|
| 401 | UNAUTHORIZED | Unauthenticated request |
| 403 | FORBIDDEN | Insufficient requester permissions |
| 404 | WORKSPACE_NOT_FOUND | Not found |
| 422 | VALIDATION_ERROR | Unprocessable content |
| 429 | RATE_LIMIT_EXCEEDED | Request limit exceededLearn more |