Skip to main content
GET
/
v1
/
core
/
followups
Get followups
curl --request GET \
  --url https://api.siro.ai/v1/core/followups \
  --header 'x-siro-auth-token: <api-key>'
import requests

url = "https://api.siro.ai/v1/core/followups"

headers = {"x-siro-auth-token": "<api-key>"}

response = requests.get(url, headers=headers)

print(response.text)
const options = {method: 'GET', headers: {'x-siro-auth-token': '<api-key>'}};

fetch('https://api.siro.ai/v1/core/followups', 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://api.siro.ai/v1/core/followups",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-siro-auth-token: <api-key>"
],
]);

$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://api.siro.ai/v1/core/followups"

req, _ := http.NewRequest("GET", url, nil)

req.Header.Add("x-siro-auth-token", "<api-key>")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.get("https://api.siro.ai/v1/core/followups")
.header("x-siro-auth-token", "<api-key>")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.siro.ai/v1/core/followups")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["x-siro-auth-token"] = '<api-key>'

response = http.request(request)
puts response.read_body
{
  "data": {
    "totalCount": 123,
    "followups": [
      {
        "recordingId": "<string>",
        "recordingTitle": "<string>",
        "repName": "<string>",
        "repId": "<string>",
        "teamName": "<string>",
        "teamId": "<string>",
        "followupId": "<string>",
        "dateCreated": "<string>",
        "score": 123,
        "followupAction": "<string>",
        "context": [
          {
            "header": "<string>",
            "value": "<string>"
          }
        ],
        "updatedAt": "<string>",
        "metadata": [
          {}
        ],
        "starred": true,
        "thinking": "<string>",
        "crmCustomer": {
          "id": "<string>",
          "createdAt": "2023-11-07T05:31:56Z",
          "updatedAt": "2023-11-07T05:31:56Z",
          "organizationId": "<string>",
          "name": "<string>",
          "crmUrl": "<string>",
          "lastActivityAt": "<string>",
          "closedAt": "2023-11-07T05:31:56Z",
          "emailAddress": "<string>",
          "phoneNumber": "<string>",
          "externalId": "<string>",
          "amount": 123,
          "disposition": "<string>",
          "recordingId": "<string>",
          "lastRecordingDate": "2023-11-07T05:31:56Z",
          "numRecordings": 123,
          "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>",
            "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>",
                "recordingId": "<string>",
                "accountId": "<string>",
                "account": null,
                "opportunityUsers": [
                  null
                ]
              }
            ],
            "cursor": "<string>"
          },
          "opportunityUsers": [
            null
          ],
          "contactAccount": {
            "id": "<string>",
            "name": "<string>",
            "externalId": "<string>"
          },
          "address": "<string>",
          "integrationConnectionId": "<string>",
          "integrationName": "<string>"
        },
        "hasFollowupComment": true,
        "note": "<string>",
        "completed": true,
        "completedBy": "<string>",
        "completedAt": "<string>",
        "history": [
          {
            "id": "<string>",
            "updatedBy": "<string>",
            "updatedByUserId": "<string>",
            "createdAt": "<string>",
            "note": "<string>"
          }
        ],
        "crmUrl": "<string>"
      }
    ],
    "totalRevenue": 123
  },
  "cursor": "<string>",
  "pageSize": 123,
  "limit": 123,
  "total": 123,
  "hasNextPage": true
}
{
"error": "<string>"
}
{
"error": "<string>"
}
{
"error": "<string>"
}
{
"error": "<string>"
}
{
"issues": [
{
"code": "<string>",
"path": [
"<string>"
],
"message": "<string>",
"expected": "<string>",
"received": "<string>"
}
],
"name": "ZodError"
}
{
"error": "<string>"
}
Returns a paginated list of AI-generated followups tied to recordings. Each followup includes the source recording, rep/team context, score, status, and optional CRM customer data.

Access

Admins and coaches can list followups for their organization and teams. Regular users only see their own followups.

Pagination

Use limit (default 25, max 100) and the cursor from the previous response to walk pages. The cursor is opaque — pass it back unchanged.

Common filters

ParameterUse
statusesTO_DO, IN_PROGRESS, or COMPLETE
minimumScoreScore floor (1–5, default 3)
starredStarred followups only
createdAfter / createdBeforeISO 8601 UTC window
includeHistoryInclude status changes and notes
excludeCrmCustomerOmit CRM customer block
Followups can also be embedded on a single recording via showFollowups=true on Get recording details.

Authorizations

x-siro-auth-token
string
header
default:<oauth-access-token>
required

OAuth access token for user-scoped requests (Authorization Code or machine-to-machine). Send header x-siro-auth-token: <oauth-access-token>. Not an organization API key.

Query Parameters

organizationId
string

Organization id

cursor
string

Pagination cursor returned by the previous page. Opaque base64-encoded token; do not parse or modify.

limit
integer

Maximum number of followups to return per page (1-100). Default is 25.

Required range: 1 <= x <= 100
Example:

25

minimumScore
integer | null
default:3

Filter by followup score equal to or greater than the minimum score. Can be between 1 and 5. Default is 3.

starred
boolean | null

Filter by followup starred state. A followup can be starred via the PATCH /followups/{followupId} endpoint. Default is false.

statuses
enum<string>[]
Available options:
TO_DO,
IN_PROGRESS,
COMPLETE
scores
(integer | null)[]
userIds
string[]
teamIds
string[]
createdAfter
string | null

Only include followups created after this timestamp (ISO 8601, UTC).

Example:

"2024-01-01T00:00:00Z"

createdBefore
string | null

Only include followups created before this timestamp (ISO 8601, UTC).

Example:

"2024-01-31T23:59:59Z"

conversationTypes
string[]
Maximum array length: 10
includeHistory
boolean | null

Whether to include followuphistory with the followup. Followup history returns all status changes and notes for the followup. Default is false.

excludeCrmCustomer
boolean | null

Whether to exclude the CRM customer for the followup. Default is false (CRM customer is included).

Response

Get followups

data
object
required
cursor
pageSize
number
limit
number
total
number | null
hasNextPage
boolean