---
title: Grain
description: Access meeting recordings, transcripts, and AI summaries
---

import { BlockInfoCard } from "@/components/ui/block-info-card"

<BlockInfoCard 
  type="grain"
  color="#F6FAF9"
/>

{/* MANUAL-CONTENT-START:intro */}
[Grain](https://grain.com/) is a modern platform for capturing, storing, and sharing meeting recordings, transcripts, highlights, and AI-powered summaries. Grain enables teams to turn conversations into actionable insights and keep everyone aligned on key moments from meetings.

With Grain, you can:

- **Access searchable recordings and transcripts**: Find and review every meeting by keyword, participant, or topic.
- **Share highlights and clips**: Capture important moments and share short video/audio highlights across your team or workflows.
- **Get AI-generated summaries**: Automatically produce meeting summaries, action items, and key insights using Grain’s advanced AI.
- **Organize meetings by team or type**: Tag and categorize recordings for easy access and reporting.

The Sim Grain integration empowers your agents to:

- List, search, and retrieve meeting recordings and details by flexible filters (datetime, participant, team, etc).
- Access AI summaries, participants, highlights, and other metadata for meetings to power automations or analysis.
- Trigger workflows whenever new meetings are processed, summaries are generated, or highlights are created via Grain webhooks.
- Easily bridge Grain data into other tools or notify teammates the moment something important happens in a meeting.

Whether you want to automate follow-up actions, keep records of important conversations, or surface insights across your organization, Grain and Sim make it easy to connect meeting intelligence to your workflows.
{/* MANUAL-CONTENT-END */}


## Usage Instructions

Integrate Grain into your workflow. Access meeting recordings, transcripts, highlights, and AI-generated summaries. Can also trigger workflows based on Grain webhook events.



## Actions

### `grain_list_recordings`

List recordings from Grain with optional filters and pagination

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Grain API key \(Personal Access Token\) |
| `cursor` | string | No | Pagination cursor for next page \(returned from previous response\) |
| `beforeDatetime` | string | No | Only recordings before this ISO8601 timestamp \(e.g., "2024-01-15T00:00:00Z"\) |
| `afterDatetime` | string | No | Only recordings after this ISO8601 timestamp \(e.g., "2024-01-01T00:00:00Z"\) |
| `participantScope` | string | No | Filter: "internal" or "external" |
| `titleSearch` | string | No | Search term to filter by recording title \(e.g., "weekly standup"\) |
| `teamId` | string | No | Filter by team UUID \(e.g., "a1b2c3d4-e5f6-7890-abcd-ef1234567890"\) |
| `meetingTypeId` | string | No | Filter by meeting type UUID \(e.g., "a1b2c3d4-e5f6-7890-abcd-ef1234567890"\) |
| `includeHighlights` | boolean | No | Include highlights/clips in response |
| `includeParticipants` | boolean | No | Include participant list in response |
| `includeAiSummary` | boolean | No | Include AI-generated summary |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `recordings` | array | Array of recording objects |
|   ↳ `id` | string | Recording UUID |
|   ↳ `title` | string | Recording title |
|   ↳ `start_datetime` | string | ISO8601 start timestamp |
|   ↳ `end_datetime` | string | ISO8601 end timestamp |
|   ↳ `duration_ms` | number | Duration in milliseconds |
|   ↳ `media_type` | string | audio, transcript, or video |
|   ↳ `source` | string | Recording source |
|   ↳ `url` | string | URL to view in Grain |
|   ↳ `thumbnail_url` | string | Thumbnail URL |
|   ↳ `tags` | array | Array of tags |
|   ↳ `teams` | array | Teams the recording belongs to |
|   ↳ `meeting_type` | object | Meeting type info |
| `cursor` | string | Cursor for next page \(null if no more\) |

### `grain_get_recording`

Get details of a single recording by ID

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Grain API key \(Personal Access Token\) |
| `recordingId` | string | Yes | The recording UUID \(e.g., "a1b2c3d4-e5f6-7890-abcd-ef1234567890"\) |
| `includeHighlights` | boolean | No | Include highlights/clips |
| `includeParticipants` | boolean | No | Include participant list |
| `includeAiSummary` | boolean | No | Include AI summary |
| `includeCalendarEvent` | boolean | No | Include calendar event data |
| `includeHubspot` | boolean | No | Include HubSpot associations |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `id` | string | Recording UUID |
| `title` | string | Recording title |
| `start_datetime` | string | ISO8601 start timestamp |
| `end_datetime` | string | ISO8601 end timestamp |
| `duration_ms` | number | Duration in milliseconds |
| `media_type` | string | audio, transcript, or video |
| `source` | string | Recording source \(zoom, meet, teams, etc.\) |
| `url` | string | URL to view in Grain |
| `thumbnail_url` | string | Thumbnail image URL |
| `tags` | array | Array of tag strings |
| `teams` | array | Teams the recording belongs to |
| `meeting_type` | object | Meeting type info \(id, name, scope\) |
| `highlights` | array | Highlights \(if included\) |
| `participants` | array | Participants \(if included\) |
| `ai_summary` | object | AI summary text \(if included\) |
| `calendar_event` | object | Calendar event data \(if included\) |
| `hubspot` | object | HubSpot associations \(if included\) |

### `grain_get_transcript`

Get the full transcript of a recording

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Grain API key \(Personal Access Token\) |
| `recordingId` | string | Yes | The recording UUID \(e.g., "a1b2c3d4-e5f6-7890-abcd-ef1234567890"\) |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `transcript` | array | Array of transcript sections |
|   ↳ `participant_id` | string | Participant UUID \(nullable\) |
|   ↳ `speaker` | string | Speaker name |
|   ↳ `start` | number | Start timestamp in ms |
|   ↳ `end` | number | End timestamp in ms |
|   ↳ `text` | string | Transcript text |

### `grain_list_views`

List available Grain views for webhook subscriptions

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Grain API key \(Personal Access Token\) |
| `typeFilter` | string | No | Optional view type filter: recordings, highlights, or stories |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `views` | array | Array of Grain views |
|   ↳ `id` | string | View UUID |
|   ↳ `name` | string | View name |
|   ↳ `type` | string | View type: recordings, highlights, or stories |

### `grain_list_teams`

List all teams in the workspace

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Grain API key \(Personal Access Token\) |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `teams` | array | Array of team objects |
|   ↳ `id` | string | Team UUID |
|   ↳ `name` | string | Team name |

### `grain_list_meeting_types`

List all meeting types in the workspace

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Grain API key \(Personal Access Token\) |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `meeting_types` | array | Array of meeting type objects |
|   ↳ `id` | string | Meeting type UUID |
|   ↳ `name` | string | Meeting type name |
|   ↳ `scope` | string | internal or external |

### `grain_create_hook`

Create a webhook to receive recording events

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Grain API key \(Personal Access Token\) |
| `hookUrl` | string | Yes | Webhook endpoint URL \(e.g., "https://example.com/webhooks/grain"\) |
| `viewId` | string | Yes | Grain view ID from GET /_/public-api/views |
| `actions` | array | No | Optional list of actions to subscribe to: added, updated, removed |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `id` | string | Hook UUID |
| `enabled` | boolean | Whether hook is active |
| `hook_url` | string | The webhook URL |
| `view_id` | string | Grain view ID for the webhook |
| `actions` | array | Configured actions for the webhook |
| `inserted_at` | string | ISO8601 creation timestamp |

### `grain_list_hooks`

List all webhooks for the account

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Grain API key \(Personal Access Token\) |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `hooks` | array | Array of hook objects |
|   ↳ `id` | string | Hook UUID |
|   ↳ `enabled` | boolean | Whether hook is active |
|   ↳ `hook_url` | string | Webhook URL |
|   ↳ `view_id` | string | Grain view ID |
|   ↳ `actions` | array | Configured actions |
|   ↳ `inserted_at` | string | Creation timestamp |

### `grain_delete_hook`

Delete a webhook by ID

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Grain API key \(Personal Access Token\) |
| `hookId` | string | Yes | The hook UUID to delete \(e.g., "a1b2c3d4-e5f6-7890-abcd-ef1234567890"\) |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | True when webhook was successfully deleted |



## Triggers

A **Trigger** is a block that starts a workflow when an event happens in this service.

### Grain All Events

Trigger on all actions (added, updated, removed) in a Grain view

#### Configuration

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Required to create the webhook in Grain. |
| `viewId` | string | Yes | The view determines which content type fires events \(recordings, highlights, or stories\). |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `type` | string | Event type \(e.g., recording_added\) |
| `user_id` | string | User UUID who triggered the event |
| `data` | object | Event data object \(recording, highlight, etc.\) |


---

### Grain Highlight Created

Trigger workflow when a new highlight/clip is created in Grain

#### Configuration

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Required to create the webhook in Grain. |
| `viewId` | string | Yes | Required by Grain to create the webhook subscription. |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `type` | string | Event type |
| `user_id` | string | User UUID who triggered the event |
| `data` | object | data output from the tool |
|   ↳ `id` | string | Highlight UUID |
|   ↳ `recording_id` | string | Parent recording UUID |
|   ↳ `text` | string | Highlight title/description |
|   ↳ `transcript` | string | Transcript text of the clip |
|   ↳ `speakers` | array | Array of speaker names |
|   ↳ `timestamp` | number | Start timestamp in ms |
|   ↳ `duration` | number | Duration in ms |
|   ↳ `tags` | array | Array of tag strings |
|   ↳ `url` | string | URL to view in Grain |
|   ↳ `thumbnail_url` | string | Thumbnail URL |
|   ↳ `created_datetime` | string | ISO8601 creation timestamp |


---

### Grain Highlight Updated

Trigger workflow when a highlight/clip is updated in Grain

#### Configuration

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Required to create the webhook in Grain. |
| `viewId` | string | Yes | Required by Grain to create the webhook subscription. |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `type` | string | Event type |
| `user_id` | string | User UUID who triggered the event |
| `data` | object | data output from the tool |
|   ↳ `id` | string | Highlight UUID |
|   ↳ `recording_id` | string | Parent recording UUID |
|   ↳ `text` | string | Highlight title/description |
|   ↳ `transcript` | string | Transcript text of the clip |
|   ↳ `speakers` | array | Array of speaker names |
|   ↳ `timestamp` | number | Start timestamp in ms |
|   ↳ `duration` | number | Duration in ms |
|   ↳ `tags` | array | Array of tag strings |
|   ↳ `url` | string | URL to view in Grain |
|   ↳ `thumbnail_url` | string | Thumbnail URL |
|   ↳ `created_datetime` | string | ISO8601 creation timestamp |


---

### Grain Item Added

Trigger when a new item is added to a Grain view (recording, highlight, or story)

#### Configuration

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Required to create the webhook in Grain. |
| `viewId` | string | Yes | The view determines which content type fires events \(recordings, highlights, or stories\). |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `type` | string | Event type \(e.g., recording_added\) |
| `user_id` | string | User UUID who triggered the event |
| `data` | object | Event data object \(recording, highlight, etc.\) |


---

### Grain Item Updated

Trigger when an item is updated in a Grain view (recording, highlight, or story)

#### Configuration

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Required to create the webhook in Grain. |
| `viewId` | string | Yes | The view determines which content type fires events \(recordings, highlights, or stories\). |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `type` | string | Event type \(e.g., recording_added\) |
| `user_id` | string | User UUID who triggered the event |
| `data` | object | Event data object \(recording, highlight, etc.\) |


---

### Grain Recording Created

Trigger workflow when a new recording is added in Grain

#### Configuration

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Required to create the webhook in Grain. |
| `viewId` | string | Yes | Required by Grain to create the webhook subscription. |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `type` | string | Event type |
| `user_id` | string | User UUID who triggered the event |
| `data` | object | data output from the tool |
|   ↳ `id` | string | Recording UUID |
|   ↳ `title` | string | Recording title |
|   ↳ `start_datetime` | string | ISO8601 start timestamp |
|   ↳ `end_datetime` | string | ISO8601 end timestamp |
|   ↳ `duration_ms` | number | Duration in milliseconds |
|   ↳ `media_type` | string | audio, transcript, or video |
|   ↳ `source` | string | Recording source \(zoom, meet, local_capture, etc.\) |
|   ↳ `url` | string | URL to view in Grain |
|   ↳ `thumbnail_url` | string | Thumbnail URL \(nullable\) |
|   ↳ `tags` | array | Array of tag strings |
|   ↳ `teams` | array | Array of team objects |
|   ↳ `meeting_type` | object | Meeting type info with id, name, scope \(nullable\) |


---

### Grain Recording Updated

Trigger workflow when a recording is updated in Grain

#### Configuration

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Required to create the webhook in Grain. |
| `viewId` | string | Yes | Required by Grain to create the webhook subscription. |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `type` | string | Event type |
| `user_id` | string | User UUID who triggered the event |
| `data` | object | data output from the tool |
|   ↳ `id` | string | Recording UUID |
|   ↳ `title` | string | Recording title |
|   ↳ `start_datetime` | string | ISO8601 start timestamp |
|   ↳ `end_datetime` | string | ISO8601 end timestamp |
|   ↳ `duration_ms` | number | Duration in milliseconds |
|   ↳ `media_type` | string | audio, transcript, or video |
|   ↳ `source` | string | Recording source \(zoom, meet, local_capture, etc.\) |
|   ↳ `url` | string | URL to view in Grain |
|   ↳ `thumbnail_url` | string | Thumbnail URL \(nullable\) |
|   ↳ `tags` | array | Array of tag strings |
|   ↳ `teams` | array | Array of team objects |
|   ↳ `meeting_type` | object | Meeting type info with id, name, scope \(nullable\) |


---

### Grain Story Created

Trigger workflow when a new story is created in Grain

#### Configuration

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Required to create the webhook in Grain. |
| `viewId` | string | Yes | Required by Grain to create the webhook subscription. |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `type` | string | Event type |
| `user_id` | string | User UUID who triggered the event |
| `data` | object | data output from the tool |
|   ↳ `id` | string | Story UUID |
|   ↳ `title` | string | Story title |
|   ↳ `url` | string | URL to view in Grain |
|   ↳ `created_datetime` | string | ISO8601 creation timestamp |

