curl --request GET \
--url https://functions.siro.ai/api-externalApi/v1/core/recordings/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://functions.siro.ai/api-externalApi/v1/core/recordings/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://functions.siro.ai/api-externalApi/v1/core/recordings/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://functions.siro.ai/api-externalApi/v1/core/recordings/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://functions.siro.ai/api-externalApi/v1/core/recordings/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://functions.siro.ai/api-externalApi/v1/core/recordings/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://functions.siro.ai/api-externalApi/v1/core/recordings/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"organizationId": "<string>",
"userId": "<string>",
"title": "<string>",
"durationInMilliseconds": 123,
"latitude": 123,
"longitude": 123,
"result": "OPEN",
"createdAt": "<string>",
"updatedAt": "<string>",
"deleted": true,
"links": {
"web": {
"self": "<string>"
}
},
"rootDataPurgedAt": "<string>",
"deletedAt": "<string>",
"isProcessingDone": true,
"isEntityExtractionDone": true,
"isSummaryDone": true,
"crm": {
"integrationConnectionId": "<string>",
"users": [
{
"id": "<string>",
"externalId": "<string>"
}
],
"engagement": {
"id": "<string>",
"externalId": "<string>"
},
"opportunity": {
"id": "<string>",
"externalId": "<string>"
},
"contacts": [
{
"id": "<string>",
"externalId": "<string>"
}
],
"account": {
"id": "<string>",
"externalId": "<string>"
},
"lead": {
"id": "<string>",
"externalId": "<string>"
}
},
"summary": [
{
"id": "<string>",
"name": "<string>",
"content": "<string>"
}
],
"entityExtractions": [
{
"name": "<string>",
"value": "<string>",
"mappings": [
{
"crmModelName": "<string>",
"crmFieldName": "<string>"
}
]
}
],
"evaluationScore": 123,
"followups": [
{
"recordingId": "<string>",
"recordingTitle": "<string>",
"repName": "<string>",
"repId": "<string>",
"teamName": "<string>",
"teamId": "<string>",
"followupId": "<string>",
"dateCreated": "<string>",
"followupType": "REHASH",
"score": 123,
"followupAction": "<string>",
"context": [
{
"header": "<string>",
"value": "<string>"
}
],
"updatedAt": "<string>",
"metadata": [
{}
],
"starred": true,
"status": "TO_DO",
"thinking": "<string>",
"crmCustomer": {
"id": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"organizationId": "<string>",
"name": "<string>",
"crmUrl": "<string>",
"customerType": "ACCOUNT",
"lastActivityAt": "<string>",
"closedAt": "2023-11-07T05:31:56Z",
"emailAddress": "<string>",
"phoneNumber": "<string>",
"externalId": "<string>",
"opportunityExternalId": "<string>",
"accountExternalId": "<string>",
"leadExternalId": "<string>",
"contactExternalId": "<string>",
"amount": 123,
"disposition": "<string>",
"recordingId": "<string>",
"lastRecordingDate": "2023-11-07T05:31:56Z",
"numRecordings": 123,
"matchingSource": "DIRECT",
"accountId": "<string>",
"opportunityAccountName": "<string>",
"contactId": "<string>",
"opportunityContactName": "<string>",
"opportunityId": "<string>",
"engagementId": "<string>",
"opportunity": {
"id": "<string>",
"externalId": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"organizationId": "<string>",
"name": "<string>",
"amount": 123,
"closedAt": "<string>",
"disposition": "<string>",
"stageName": "<string>",
"deletedAt": "<string>",
"recordingId": "<string>",
"accountId": "<string>",
"account": null,
"opportunityUsers": [
null
]
},
"opportunities": {
"data": [
{
"id": "<string>",
"externalId": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"organizationId": "<string>",
"name": "<string>",
"amount": 123,
"closedAt": "<string>",
"disposition": "<string>",
"stageName": "<string>",
"deletedAt": "<string>",
"recordingId": "<string>",
"accountId": "<string>",
"account": null,
"opportunityUsers": [
null
]
}
],
"cursor": "<string>"
},
"opportunityUsers": [
null
],
"contactAccount": {
"id": "<string>",
"name": "<string>",
"externalId": "<string>"
},
"address": "<string>",
"integrationConnectionId": "<string>",
"integrationPlatform": "MERGE",
"integrationName": "<string>"
},
"hasFollowupComment": true,
"note": "<string>",
"completed": true,
"completedBy": "<string>",
"completedAt": "<string>",
"history": [
{
"id": "<string>",
"updatedBy": "<string>",
"updatedByUserId": "<string>",
"createdAt": "<string>",
"note": "<string>",
"status": "TO_DO"
}
],
"crmUrl": "<string>"
}
]
}Get recording
Get a recording by id
curl --request GET \
--url https://functions.siro.ai/api-externalApi/v1/core/recordings/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://functions.siro.ai/api-externalApi/v1/core/recordings/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://functions.siro.ai/api-externalApi/v1/core/recordings/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://functions.siro.ai/api-externalApi/v1/core/recordings/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://functions.siro.ai/api-externalApi/v1/core/recordings/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://functions.siro.ai/api-externalApi/v1/core/recordings/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://functions.siro.ai/api-externalApi/v1/core/recordings/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"organizationId": "<string>",
"userId": "<string>",
"title": "<string>",
"durationInMilliseconds": 123,
"latitude": 123,
"longitude": 123,
"result": "OPEN",
"createdAt": "<string>",
"updatedAt": "<string>",
"deleted": true,
"links": {
"web": {
"self": "<string>"
}
},
"rootDataPurgedAt": "<string>",
"deletedAt": "<string>",
"isProcessingDone": true,
"isEntityExtractionDone": true,
"isSummaryDone": true,
"crm": {
"integrationConnectionId": "<string>",
"users": [
{
"id": "<string>",
"externalId": "<string>"
}
],
"engagement": {
"id": "<string>",
"externalId": "<string>"
},
"opportunity": {
"id": "<string>",
"externalId": "<string>"
},
"contacts": [
{
"id": "<string>",
"externalId": "<string>"
}
],
"account": {
"id": "<string>",
"externalId": "<string>"
},
"lead": {
"id": "<string>",
"externalId": "<string>"
}
},
"summary": [
{
"id": "<string>",
"name": "<string>",
"content": "<string>"
}
],
"entityExtractions": [
{
"name": "<string>",
"value": "<string>",
"mappings": [
{
"crmModelName": "<string>",
"crmFieldName": "<string>"
}
]
}
],
"evaluationScore": 123,
"followups": [
{
"recordingId": "<string>",
"recordingTitle": "<string>",
"repName": "<string>",
"repId": "<string>",
"teamName": "<string>",
"teamId": "<string>",
"followupId": "<string>",
"dateCreated": "<string>",
"followupType": "REHASH",
"score": 123,
"followupAction": "<string>",
"context": [
{
"header": "<string>",
"value": "<string>"
}
],
"updatedAt": "<string>",
"metadata": [
{}
],
"starred": true,
"status": "TO_DO",
"thinking": "<string>",
"crmCustomer": {
"id": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"organizationId": "<string>",
"name": "<string>",
"crmUrl": "<string>",
"customerType": "ACCOUNT",
"lastActivityAt": "<string>",
"closedAt": "2023-11-07T05:31:56Z",
"emailAddress": "<string>",
"phoneNumber": "<string>",
"externalId": "<string>",
"opportunityExternalId": "<string>",
"accountExternalId": "<string>",
"leadExternalId": "<string>",
"contactExternalId": "<string>",
"amount": 123,
"disposition": "<string>",
"recordingId": "<string>",
"lastRecordingDate": "2023-11-07T05:31:56Z",
"numRecordings": 123,
"matchingSource": "DIRECT",
"accountId": "<string>",
"opportunityAccountName": "<string>",
"contactId": "<string>",
"opportunityContactName": "<string>",
"opportunityId": "<string>",
"engagementId": "<string>",
"opportunity": {
"id": "<string>",
"externalId": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"organizationId": "<string>",
"name": "<string>",
"amount": 123,
"closedAt": "<string>",
"disposition": "<string>",
"stageName": "<string>",
"deletedAt": "<string>",
"recordingId": "<string>",
"accountId": "<string>",
"account": null,
"opportunityUsers": [
null
]
},
"opportunities": {
"data": [
{
"id": "<string>",
"externalId": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"organizationId": "<string>",
"name": "<string>",
"amount": 123,
"closedAt": "<string>",
"disposition": "<string>",
"stageName": "<string>",
"deletedAt": "<string>",
"recordingId": "<string>",
"accountId": "<string>",
"account": null,
"opportunityUsers": [
null
]
}
],
"cursor": "<string>"
},
"opportunityUsers": [
null
],
"contactAccount": {
"id": "<string>",
"name": "<string>",
"externalId": "<string>"
},
"address": "<string>",
"integrationConnectionId": "<string>",
"integrationPlatform": "MERGE",
"integrationName": "<string>"
},
"hasFollowupComment": true,
"note": "<string>",
"completed": true,
"completedBy": "<string>",
"completedAt": "<string>",
"history": [
{
"id": "<string>",
"updatedBy": "<string>",
"updatedByUserId": "<string>",
"createdAt": "<string>",
"note": "<string>",
"status": "TO_DO"
}
],
"crmUrl": "<string>"
}
]
}Deleted recordings
Every recording carries two core fields (always present, no opt-in required) that tell you whether it has been deleted in Siro:| Field | Shape | Description |
|---|---|---|
deleted | boolean | true if the recording has been deleted, false otherwise |
deletedAt | string | null | ISO 8601 timestamp of when it was deleted, or null if it has not been deleted |
deleted: true. Treat that as a signal to hide or remove the recording on your side; the Siro app already hides these from its Recordings view.
Enriching the response
The org-scoped recordings endpoints can optionally hydrate extra blocks of data, each behind an opt-in query flag:| Flag | Adds | Use it to |
|---|---|---|
showCrmLinks | crm — external IDs for the CRM records linked to the recording | Map a recording back to the appointment / account / contact in your CRM |
showSummary | summary — the recording’s AI summary sections | Pull conversation summaries into your pipeline (e.g. post-call personalization) |
showEntityExtractions | entityExtractions — extracted values and their CRM field mappings | Write extracted fields back to your CRM |
showFollowups | followups — AI-generated followups for the recording | Surface followup scores and (on the single-recording endpoint) full followup detail |
=true to enable.
crm — CRM link IDs
When showCrmLinks=true, crm contains the external IDs of the CRM records the recording is linked to. Every linked object is returned as a pair:
id— Siro’s internal ID for the objectexternalId— that object’s ID in your CRM (use this to join)
| Field | Shape | CRM object |
|---|---|---|
integrationConnectionId | string | The Siro integration connection the links came from |
users | array of {id, externalId} | CRM user(s) who own the recording (the rep) |
engagement | {id, externalId} | The CRM engagement / appointment |
opportunity | {id, externalId} | The opportunity |
contacts | array of {id, externalId} | Contact(s) |
account | {id, externalId} | Account |
lead | {id, externalId} | Lead |
integrations.recordingProcessed webhook, so pull-based polling and push-based webhooks give you identical CRM references.
crm is null when the recording has no confirmed CRM link yet. Because links can be established after a recording is created, poll the list endpoint with the updatedAt filters to pick up recordings as they become linked.engagement (the appointment) is only populated when the recording is linked to a CRM-sourced engagement. Recordings linked only to a Siro-side calendar event return engagement: null while still returning account / contact. To map on the appointment ID, ensure your appointments sync to Siro as CRM engagements. Any field with no linked record is null.summary
When showSummary=true, summary is the recording’s AI summary as an ordered array of sections:
| Field | Description |
|---|---|
id | Summary section ID |
name | Section title (the prompt header) |
content | Generated summary text |
[] if the recording has no summary yet.
entityExtractions
When showEntityExtractions=true, entityExtractions is a flat list of the values extracted from the conversation, including the CRM field each maps to:
| Field | Description |
|---|---|
name | The extracted field name |
value | The extracted value |
mappings | CRM target(s): [{ crmModelName, crmFieldName }] — which object and field to write value to |
[] if there are none. Use mappings to write each value to the corresponding field on the CRM record from the crm block.
followups
When showFollowups=true, followups is an array of AI-generated followups tied to the recording. The payload differs by endpoint:
List (GET /v1/core/recordings) returns slim summaries:
| Field | Description |
|---|---|
id | Followup ID |
score | Followup score (1–5) |
showFollowups=true when you need the full followup payload for a specific recording.
Single recording (GET /v1/core/recordings/{id}) returns the full followup payload, including:
| Field | Description |
|---|---|
followupId | Followup ID |
score | Followup score (1–5) |
status | TO_DO, IN_PROGRESS, or COMPLETE |
followupAction | Suggested action text |
context | Array of { header, value } context items |
thinking | Score breakdown / reasoning |
Example
curl --request GET \
--url 'https://functions.siro.ai/api-externalApi/v1/core/recordings/{id}?showCrmLinks=true&showSummary=true&showEntityExtractions=true&showFollowups=true' \
--header 'Authorization: Bearer <organization-api-token>'
{
"data": {
"id": "1234-1234-1234-1234-1234",
"organizationId": "000000000001234",
"title": "Appointment to Win",
"result": "WON",
"createdAt": "2026-06-23T15:42:30.992Z",
"updatedAt": "2026-06-23T15:47:05.438Z",
"deleted": false,
"deletedAt": null,
"links": { "web": { "self": "https://app.siro.ai/#/recordings/1234-..." } },
"crm": {
"integrationConnectionId": "1234-1234-12345",
"users": [{ "id": "1234-...", "externalId": "22222" }],
"engagement": { "id": "1234-...", "externalId": "1111" },
"contacts": [{ "id": "1234-...", "externalId": "123" }],
"account": { "id": "1234-...", "externalId": "1234" },
"opportunity": null,
"lead": null
},
"summary": [
{ "id": "111111-...", "name": "Meeting Booked", "content": "Yes" }
],
"entityExtractions": [
{
"name": "Tech Systems",
"value": "None",
"mappings": [{ "crmModelName": "Contact", "crmFieldName": "customer_notes" }]
}
],
"followups": [
{
"followupId": "abcd-...",
"recordingId": "1234-1234-1234-1234-1234",
"recordingTitle": "Appointment to Win",
"followupType": "REHASH",
"score": 4,
"status": "TO_DO",
"starred": false,
"followupAction": "Call back to address pricing objection",
"repId": "rep-...",
"repName": "Alex Rep",
"teamId": "team-...",
"teamName": "East Region",
"dateCreated": "2026-06-23T15:50:00.000Z",
"updatedAt": "2026-06-23T15:50:00.000Z",
"context": [
{ "header": "MAIN_OBJECTION", "value": "Price too high" }
],
"thinking": "Strong intent with a clear pricing objection."
}
]
}
}
Authorizations
Organization integration token from Siro admin (Person icon → API Tokens). Send Authorization: Bearer . This is not the OAuth access token used with api.siro.ai user-scoped endpoints.
Path Parameters
Query Parameters
Include CRM link IDs for the recording (integration connection, users, engagement, opportunity, contacts, account, lead).
true, false Include the recording summary results.
true, false Include the recording entity extractions.
true, false Include the scorecard evaluation score for the recording.
true, false Include followups for the recording. List returns id/score summaries; GET by id returns the full followup payload.
true, false Response
Get recording
OPEN, WON, LOST Whether the recording has been deleted. Deleted recordings are still returned so consumers can reconcile them; check this flag (and deletedAt) to handle them.
Show child attributes
Show child attributes
When the recording was deleted, if it has been deleted.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Scorecard evaluation score for the recording
Array of follow-up actions and communications generated from the recording
Show child attributes
Show child attributes