> ## Documentation Index
> Fetch the complete documentation index at: https://docs.siro.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Get recording

> Get a recording by id

Returns a single recording by its Siro internal id. By default the response contains the recording's core fields; opt into the enrichment blocks below to also pull CRM links, the AI summary, and entity extractions in the same request.

## Enriching the response

The org-scoped recordings endpoints can optionally hydrate three 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                                         |

They are **off by default** and additive — omit them and the response is unchanged. Pass `=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 object
* **`externalId`** — 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                                                |

This is the same shape emitted by the `integrations.recordingProcessed` webhook, so pull-based polling and push-based webhooks give you identical CRM references.

<Note>
  `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](/api-references/get-recordings) with the `updatedAt` filters to pick up recordings as they become linked.
</Note>

<Warning>
  `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`.
</Warning>

### `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            |

Returns `[]` 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 |

Only successfully completed extractions are included; in-progress or failed extractions are omitted. Returns `[]` if there are none. Use `mappings` to write each `value` to the corresponding field on the CRM record from the `crm` block.

### Example

```bash theme={null}
curl --request GET \
  --url 'https://functions.siro.ai/api-externalApi/v1/core/recordings/{id}?showCrmLinks=true&showSummary=true&showEntityExtractions=true' \
  --header 'Authorization: Bearer <organization-api-token>'
```

```json theme={null}
{
  "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",
    "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" }]
      }
    ]
  }
}
```


## OpenAPI

````yaml specs/openapi-externalApi.json get /v1/core/recordings/{id}
openapi: 3.0.0
info:
  version: 1.0.0
  title: Swagger API
servers:
  - url: https://functions.siro.ai/api-externalApi
    description: Siro API external API endpoint
security: []
externalDocs:
  description: View the raw OpenAPI Specification in JSON format
  url: /swagger.json
paths:
  /v1/core/recordings/{id}:
    get:
      summary: Get recording
      description: Get a recording by id
      parameters:
        - schema:
            type: string
          required: true
          name: id
          in: path
      responses:
        '200':
          description: Get recording
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                  organizationId:
                    type: string
                  userId:
                    type: string
                  title:
                    type: string
                  durationInMilliseconds:
                    type: number
                  latitude:
                    type: number
                  longitude:
                    type: number
                  result:
                    type: string
                    enum:
                      - OPEN
                      - WON
                      - LOST
                  createdAt:
                    type: string
                  updatedAt:
                    type: string
                  rootDataPurgedAt:
                    type: string
                    nullable: true
                  links:
                    type: object
                    properties:
                      web:
                        type: object
                        properties:
                          self:
                            type: string
                        required:
                          - self
                    required:
                      - web
                  isProcessingDone:
                    type: boolean
                  isEntityExtractionDone:
                    type: boolean
                  isSummaryDone:
                    type: boolean
                required:
                  - id
                  - organizationId
                  - userId
                  - title
                  - durationInMilliseconds
                  - latitude
                  - longitude
                  - result
                  - createdAt
                  - updatedAt
                  - links
      security:
        - bearerAuth: []
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: Organization API token
      description: >-
        Organization integration token from Siro admin (Person icon → API
        Tokens). Send Authorization: Bearer <organization-api-token>. This is
        not the OAuth access token used with api.siro.ai user-scoped endpoints.
      x-default: <organization-api-token>

````