# List Recordings — Grain

> Lists Grain recordings, optionally filtered by start datetime range (ISO8601), title search, participant scope, team, or meeting type. Automatically paginates and returns up to Max Results recordings. Use this to find recording IDs for Get…

- Key: `grain-list-recordings`
- Type: Action (Read-only)
- Version: 0.1.0
- App: Grain (`grain`) — https://pipedream.com/apps/grain.md
- This page (HTML): https://pipedream.com/apps/grain/actions/list-recordings
- Hints: read-only · open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/grain/actions/list-recordings/list-recordings.mjs

## Description

Lists Grain recordings, optionally filtered by start datetime range (ISO8601), title search, participant scope, team, or meeting type. Automatically paginates and returns up to Max Results recordings. Use this to find recording IDs for **Get Recording** and **Get Transcript**. Example: `titleSearch: "Acme"` returns recordings like `[{"id": "pppp6666-qq77-rr88-ss99-tttt00000000", "title": "Acme Renewal Call", "start_datetime": "2026-01-05T15:00:00Z", "media_type": "video", ...}]`. Pass `fields` to return only the fields you need instead of the full object. [See the documentation](https://developers.grain.com/#list-recordings)

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `beforeDatetime` | `string` | No | Only return recordings that started before this ISO8601 datetime. E.g. 2025-01-01T00:00:00Z. Verified against the live API to filter at day granularity — a cutoff earlier or later than a recording's calendar day works reliably, but a same-day cutoff may not exclude recordings from later that same day. |
| `afterDatetime` | `string` | No | Only return recordings that started after this ISO8601 datetime. E.g. 2025-01-01T00:00:00Z. Verified against the live API to filter at day granularity — a cutoff earlier or later than a recording's calendar day works reliably, but a same-day cutoff may not exclude recordings from earlier that same day. |
| `titleSearch` | `string` | No | Only return recordings whose title matches this search string |
| `participantScope` | `string` | No | Only return recordings whose participants are all internal, or that include external participants |
| `team` | `string` | No | Only return recordings belonging to this team. Use List Teams to find team IDs. E.g. a414c333-c9fe-4fdc-9131-fb31796699b2. |
| `meetingType` | `string` | No | Only return recordings with this meeting type. Use List Meeting Types to find meeting type IDs. E.g. a97a9e83-c45e-4a46-9b1e-216ce1e69252. |
| `maxResults` | `integer` | No | Maximum number of recordings to return. Must be a positive integer. |
| `fields` | `string[]` | No | Only include these fields in each returned recording (e.g. ["id", "title", "start_datetime"]). Omit fields to return the full recording object for each result. |

## Run it

**MCP**

```ts
import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const accessToken = await pd.rawAccessToken

const transport = new StreamableHTTPClientTransport(
  new URL("https://remote.mcp.pipedream.net/v3"),
  {
    requestInit: {
      headers: {
        Authorization: `Bearer ${accessToken}`,
        "x-pd-project-id": process.env.PIPEDREAM_PROJECT_ID!,
        "x-pd-environment": "production",
        "x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
        "x-pd-app-slug": "grain",
      },
    },
  },
)

const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)

const { tools } = await mcp.listTools()

// listTools() hands your model this tool's input schema, so it can
// fill the arguments itself:
const result = await mcp.callTool({
  name: "grain-list-recordings",
  arguments: {
    beforeDatetime: "Before Datetime",
    afterDatetime: "After Datetime",
  },
})
```

**TypeScript**

```ts
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const result = await pd.actions.run({
  id: "grain-list-recordings",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    grain: { authProvisionId: "apn_xxxxxxx" },
    beforeDatetime: "Before Datetime",
    afterDatetime: "After Datetime",
  },
})

console.log(result)
```

**cURL**

```bash
curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
  -H "Content-Type: application/json" \
  -H "X-PD-Environment: production" \
  -H "Authorization: Bearer {access_token}" \
  -d '{
    "external_user_id": "{external_user_id}",
    "id": "grain-list-recordings",
    "configured_props": {
      "grain": { "authProvisionId": "apn_xxxxxxx" },
      "beforeDatetime": "Before Datetime",
      "afterDatetime": "After Datetime"
    }
  }'
```

---

- App: https://pipedream.com/apps/grain.md · All apps: https://pipedream.com/apps
