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

# Grain: List Recordings

> List recordings, optionally filtered. pass the returned cursor to retrieve the next page. Includes inputs, outputs, SDK V2 examples, and Deepline cost.

List recordings, optionally filtered. pass the returned cursor to retrieve the next page.

> [!NOTE]
>
> Tool ID: `grain_list_recordings`

## Run this action

Use the TypeScript SDK for one call. Use `ctx.tools.execute(...)` inside a Play for durable calls, scheduled calls, or CSV processing.

```ts theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
import { Deepline } from 'deepline';

const deepline = await Deepline.connect();
const result = await deepline.tools.execute(
  'grain_list_recordings',
  {
    "cursor": "cursor_123",
    "filter": {
      "before_datetime": "2026-01-15T12:00:00Z",
      "after_datetime": "2026-01-15T12:00:00Z",
      "attendance": "hosted"
    },
    "include": {
      "highlights": true,
      "participants": true,
      "ai_action_items": true
    }
  },
);

console.log(result.toolResponse.raw);
```

### CLI

```bash theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
deepline tools execute grain_list_recordings --input '{
  "cursor": "cursor_123",
  "filter": {
    "before_datetime": "2026-01-15T12:00:00Z",
    "after_datetime": "2026-01-15T12:00:00Z",
    "attendance": "hosted"
  },
  "include": {
    "highlights": true,
    "participants": true,
    "ai_action_items": true
  }
}' --json
```

## Example response

The SDK returns this shape at `result.toolResponse.raw`. The example values illustrate the response.

```json theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
{
  "data": {
    "recordings": [
      {
        "id": "id_123",
        "title": "VP of Engineering",
        "start_datetime": "2026-01-15T12:00:00Z"
      }
    ],
    "cursor": "cursor_123"
  }
}
```

Use `deepline describe grain_list_recordings --json` for the latest machine-readable contract.

## Input reference

List recordings, optionally filtered. pass the returned cursor to retrieve the next page.

| Name | Type | Required | Default | Details |
| - | - | - | - | - |
| `payload.cursor` | `string` | No | — | Used to paginate through the list. |
| `payload.filter` | `object` | No | — | — |
| `payload.include` | `object` | No | — | — |

<details>
  <summary>Show raw input schema</summary>

  ### Input JSON Schema

  ```json theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
  {
    "type": "object",
    "description": "List recordings, optionally filtered; pass the returned cursor to retrieve the next page.",
    "properties": {
      "cursor": {
        "type": "string",
        "description": "Used to paginate through the list."
      },
      "filter": {
        "type": "object",
        "properties": {
          "before_datetime": {
            "type": "string",
            "description": "Only return recordings which start_datetime is after the selected date (exclusive)"
          },
          "after_datetime": {
            "type": "string",
            "description": "Only return recordings which start_datetime is before the selected date (inclusive)"
          },
          "attendance": {
            "type": "string",
            "description": "hosted Only return recordings where the user was the meeting host. attended Only return recordings where the user attended the meeting.",
            "enum": [
              "hosted",
              "attended"
            ]
          },
          "participant_scope": {
            "type": "string",
            "description": "internal Only return recordings of internal / team meetings. external Only return recordings of external / customer meetings.",
            "enum": [
              "internal",
              "external"
            ]
          },
          "title_search": {
            "type": "string",
            "description": "Only return recordings which title matches the given search string."
          },
          "team": {
            "type": "string",
            "description": "Only return recordings which team matches the given team id. Team ids can be found through the List Teams endpoint."
          },
          "meeting_type": {
            "type": "string",
            "description": "Only return recordings which meeting type matches the given meeting type id. Meeting type ids can be found through the List Meeting Types endpoint."
          }
        },
        "additionalProperties": false
      },
      "include": {
        "type": "object",
        "properties": {
          "highlights": {
            "type": "boolean",
            "description": "Include clips / highlights in the response"
          },
          "participants": {
            "type": "boolean",
            "description": "Include participants in the response"
          },
          "ai_action_items": {
            "type": "boolean",
            "description": "Include the ai_action_items in the response"
          },
          "ai_summary": {
            "type": "boolean",
            "description": "Include the ai_summary in the response"
          },
          "private_notes": {
            "type": "boolean",
            "description": "Include your private notes in the response"
          },
          "calendar_event": {
            "type": "boolean",
            "description": "Include calendar event data in the response"
          },
          "hubspot": {
            "type": "boolean",
            "description": "Include HubSpot related data in the response"
          },
          "screenshares": {
            "type": "boolean",
            "description": "Include screenshare ranges in the response"
          },
          "ai_template_sections": {
            "type": "object",
            "description": "Includes ai_template_sections in the response",
            "properties": {
              "format": {
                "type": "string",
                "description": "Controls the output of ai_template_sections Defaults to json",
                "enum": [
                  "json",
                  "markdown",
                  "text"
                ]
              },
              "allowed_sections": {
                "type": "array",
                "description": "Only include sections which title matches the given allowed_sections Case insensitive",
                "items": {
                  "type": "string"
                }
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      }
    },
    "required": [],
    "additionalProperties": false
  }
  ```
</details>

## Output reference

Standard tool result payload.

| Name | Type | Required | Default | Details |
| - | - | - | - | - |
| `result.data` | `object` | Yes | — | Provider response payload. |
| `result.data.recordings` | `array` | No | — | — |
| `result.data.recordings[].id` | `string` | No | — | Id of the recording |
| `result.data.recordings[].title` | `string` | No | — | Title of the recording |
| `result.data.recordings[].start_datetime` | `string` | No | — | UTC datetime at which grain started the recording |
| `result.data.recordings[].end_datetime` | `string` | No | — | UTC datetime at which the recording ended |
| `result.data.recordings[].duration_ms` | `integer` | No | — | Duration of the recording in ms |
| `result.data.recordings[].media_type` | `"audio" \| "transcript" \| "video"` | No | — | Media type of the recording Allowed: `audio`, `transcript`, `video`. |
| `result.data.recordings[].source` | `"aircall" \| "local_capture" \| "meet" \| "teams" \| "upload" \| "webex" \| "zoom" \| "other"` | No | — | From what source did Grain get the recording Allowed: `aircall`, `local_capture`, `meet`, `teams`, `upload`, `webex`, `zoom`, `other`. |
| `result.data.recordings[].share_state` | `"public" \| "workspace" \| "restricted"` | No | — | public Anyone with the link workspace All workspace members restricted Only people with access Allowed: `public`, `workspace`, `restricted`. |
| `result.data.recordings[].url` | `string` | No | — | URL to the recording in Grain |
| `result.data.recordings[].thumbnail_url` | `string \| null` | No | — | URL to the recording's thumbnail |
| `result.data.recordings[].highlights` | `array` | No | — | List of Highlights |
| `result.data.recordings[].highlights[].id` | `string` | No | — | id of the highlight |
| `result.data.recordings[].highlights[].recording_id` | `string` | No | — | id of the recording it was clipped from |
| `result.data.recordings[].highlights[].text` | `string` | No | — | Small description of the clip, equivalent to a title |
| `result.data.recordings[].highlights[].transcript` | `string` | No | — | Transcript of the clip formatted as text |
| `result.data.recordings[].highlights[].speakers` | `array` | No | — | Names of the speakers of the clip |
| `result.data.recordings[].highlights[].timestamp` | `integer` | No | — | Timestamp in ms from the recording of when the clip starts |
| `result.data.recordings[].highlights[].duration` | `integer` | No | — | Duration of the clip in ms |
| `result.data.recordings[].highlights[].tags` | `array` | No | — | Tags of the clip |
| `result.data.recordings[].highlights[].url` | `string` | No | — | URL to the highlight in Grain |
| `result.data.recordings[].highlights[].thumbnail_url` | `string` | No | — | URL to the highlight's thumbnail |
| `result.data.recordings[].highlights[].created_datetime` | `string` | No | — | UTC datetime of when the clip was created |
| `result.data.recordings[].tags` | `array` | No | — | Tags of the recording |
| `result.data.recordings[].teams` | `array` | No | — | List of Teams the recording belongs to. |
| `result.data.recordings[].teams[].id` | `string` | No | — | id of the team |
| `result.data.recordings[].teams[].name` | `string` | No | — | Name of the team |
| `result.data.recordings[].recorders` | `array` | No | — | List of users that recorded the meeting |
| `result.data.recordings[].recorders[].id` | `string` | No | — | User id of the recorder |
| `result.data.recordings[].recorders[].name` | `string` | No | — | Name of the recorder |
| `result.data.recordings[].recorders[].email` | `string` | No | — | Email of the recorder |
| `result.data.recordings[].recorders[].participant_id` | `string \| null` | No | — | Participant id of the recorder |
| `result.data.recordings[].meeting_type` | `object \| null` | No | — | — |
| `result.data.recordings[].meeting_type.id` | `string` | No | — | id of the meeting type |
| `result.data.recordings[].meeting_type.name` | `string` | No | — | Name of the meeting type |
| `result.data.recordings[].meeting_type.scope` | `"internal" \| "external"` | No | — | Scope of the meeting type Allowed: `internal`, `external`. |
| `result.data.recordings[].ai_template_sections` | `array` | No | — | List of AI Template Sections |
| `result.data.recordings[].ai_template_sections[].title` | `string` | No | — | Title of the section |
| `result.data.recordings[].ai_template_sections[].data` | `unknown` | No | — | Section data. fields depend on the section type and requested format. |
| `result.data.recordings[].ai_action_items` | `array` | No | — | List of Action Items |
| `result.data.recordings[].ai_action_items[].status` | `"pending" \| "completed"` | No | — | Status of the action item Allowed: `pending`, `completed`. |
| `result.data.recordings[].ai_action_items[].timestamp` | `integer` | No | — | Observed timestamp in ms at which the action item was mentioned |
| `result.data.recordings[].ai_action_items[].text` | `string` | No | — | Content of the action item |
| `result.data.recordings[].ai_action_items[].assignee` | `object \| null` | No | — | Assignee of the action item |
| `result.data.recordings[].ai_action_items[].assignee.id` | `string` | No | — | Id of the assignee |
| `result.data.recordings[].ai_action_items[].assignee.name` | `string` | No | — | Name of the assignee |
| `result.data.recordings[].ai_action_items[].assignee.user_id` | `string \| null` | No | — | User id of the assignee |
| `result.data.recordings[].ai_summary` | `object` | No | — | — |
| `result.data.recordings[].ai_summary.text` | `string` | No | — | Markdown text of the ai summary |

The table shows the first 50 fields. Expand the raw schema below for every field.

> [!NOTE]
>
> This output schema is too large for an inline display. Read the complete live contract with `deepline describe grain_list_recordings --json`.

## Deepline cost

* Pricing model: `fixed` (per call).
* Estimated Deepline credits: `0` per pricing unit.
* Provider-native pricing may still exist outside Deepline credit billing.

## Related documentation

* [Grain provider guide](https://deepline.com/docs/providers/grain/guide.md)
* [SDK V2 quickstart](https://deepline.com/docs/sdk-v2/quickstart.md)
* [SDK reference](https://deepline.com/docs/sdk-v2/sdk-reference.md)
* [Run tools across a CSV](https://deepline.com/docs/sdk-v2/batch-csv.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.