# Grain (/integrations/grain)





{/* MANUAL-CONTENT-START:intro */}

Use [Grain](https://grain.com/) to list, search, and retrieve meeting recordings, transcripts, highlights, AI summaries, participants, and related metadata. Filter meetings by the inputs available on the selected action.

Grain webhook triggers can start workflows when meeting data, summaries, or highlights are available. Use the returned meeting content to prepare follow-up actions or pass it to another integration.

{/* MANUAL-CONTENT-END */}

## Use the block [#usage-instructions]

Access meeting recordings, transcripts, highlights, and AI-generated summaries. Trigger workflows based on Grain webhook events.

## Actions [#actions]

### Grain List Recordings [#grain-list-recordings]

List recordings from Grain with optional filters and pagination

<ReferenceDetails>
  #### Input [#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 |
  | `includeAiActionItems` | boolean | No | Include AI-detected action items |

  #### Output [#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) |
</ReferenceDetails>

### Grain Get Recording [#grain-get-recording]

Get details of a single recording by ID

<ReferenceDetails>
  #### Input [#input-1]

  | 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 |
  | `includeAiActionItems` | boolean | No | Include AI-detected action items |
  | `includeCalendarEvent` | boolean | No | Include calendar event data |
  | `includeHubspot` | boolean | No | Include HubSpot associations |

  #### Output [#output-1]

  | 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) |
  | `ai_action_items` | array | AI-detected action items with status, text, and assignee (if included) |
  | `calendar_event` | object | Calendar event data (if included) |
  | `hubspot` | object | HubSpot associations (if included) |
</ReferenceDetails>

### Grain Get Transcript [#grain-get-transcript]

Get the full transcript of a recording

<ReferenceDetails>
  #### Input [#input-2]

  | 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 [#output-2]

  | 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 |
</ReferenceDetails>

### Grain List Teams [#grain-list-teams]

List all teams in the workspace

<ReferenceDetails>
  #### Input [#input-3]

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

  #### Output [#output-3]

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

### Grain List Meeting Types [#grain-list-meeting-types]

List all meeting types in the workspace

<ReferenceDetails>
  #### Input [#input-4]

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

  #### Output [#output-4]

  | 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 |
</ReferenceDetails>

### Grain Create Webhook [#grain-create-webhook]

Create a webhook for a specific Grain event type (v2 API)

<ReferenceDetails>
  #### Input [#input-5]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `apiKey` | string | Yes | Grain API key (Personal or Workspace Access Token) |
  | `hookUrl` | string | Yes | Webhook endpoint URL. Grain performs a reachability test on creation — the endpoint must respond 2xx. |
  | `hookType` | string | Yes | Event type the hook subscribes to. One of: recording\_added, recording\_updated, recording\_deleted, highlight\_added, highlight\_updated, highlight\_deleted, story\_added, story\_updated, story\_deleted, upload\_status |
  | `include` | json | No | Optional include object controlling payload richness. For recording hooks: \{"participants": true, "highlights": true, "ai\_summary": true}. For highlight hooks: \{"transcript": true, "speakers": true}. |

  #### Output [#output-5]

  | Parameter | Type | Description |
  | - | - | - |
  | `id` | string | Hook UUID |
  | `enabled` | boolean | Whether hook is active |
  | `hook_url` | string | The webhook URL |
  | `hook_type` | string | Event type the hook subscribes to |
  | `include` | json | Include object the hook was created with |
  | `inserted_at` | string | ISO8601 creation timestamp |
</ReferenceDetails>

### Grain List Webhooks [#grain-list-webhooks]

List webhooks for the account (v2 API)

<ReferenceDetails>
  #### Input [#input-6]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `apiKey` | string | Yes | Grain API key (Personal or Workspace Access Token) |
  | `hookType` | string | No | Only return hooks with this event type. One of: recording\_added, recording\_updated, recording\_deleted, highlight\_added, highlight\_updated, highlight\_deleted, story\_added, story\_updated, story\_deleted, upload\_status |
  | `state` | string | No | Only return hooks that are "enabled" or "disabled" |

  #### Output [#output-6]

  | Parameter | Type | Description |
  | - | - | - |
  | `hooks` | array | Array of hook objects |
  | ↳ `id` | string | Hook UUID |
  | ↳ `enabled` | boolean | Whether hook is active |
  | ↳ `hook_url` | string | Webhook URL |
  | ↳ `hook_type` | string | Event type the hook subscribes to |
  | ↳ `include` | object | Include object the hook was created with |
  | ↳ `inserted_at` | string | Creation timestamp |
</ReferenceDetails>

### Grain Delete Webhook [#grain-delete-webhook]

Delete a webhook by ID (v2 API)

<ReferenceDetails>
  #### Input [#input-7]

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

  #### Output [#output-7]

  | Parameter | Type | Description |
  | - | - | - |
  | `success` | boolean | True when webhook was successfully deleted |
</ReferenceDetails>

## Triggers [#triggers]

A trigger starts a workflow when a supported event occurs in this service.

### Grain All Events [#grain-all-events]

Trigger on every Grain event (recordings, highlights, stories, uploads)

<ReferenceDetails label="Configuration and outputs">
  #### Configuration [#configuration]

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

  #### Output [#output-8]

  | 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.) |
</ReferenceDetails>

### Grain Highlight Added [#grain-highlight-added]

Trigger when a new highlight/clip is created in Grain

<ReferenceDetails label="Configuration and outputs">
  #### Configuration [#configuration-1]

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

  #### Output [#output-9]

  | Parameter | Type | Description |
  | - | - | - |
  | `type` | string | Event type |
  | `user_id` | string | User UUID who triggered the event |
  | `data` | object | |
  | ↳ `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 |
</ReferenceDetails>

### Grain Highlight Deleted [#grain-highlight-deleted]

Trigger when a highlight/clip is deleted in Grain

<ReferenceDetails label="Configuration and outputs">
  #### Configuration [#configuration-2]

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

  #### Output [#output-10]

  | 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.) |
</ReferenceDetails>

### Grain Highlight Updated [#grain-highlight-updated]

Trigger when a highlight/clip is updated in Grain

<ReferenceDetails label="Configuration and outputs">
  #### Configuration [#configuration-3]

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

  #### Output [#output-11]

  | Parameter | Type | Description |
  | - | - | - |
  | `type` | string | Event type |
  | `user_id` | string | User UUID who triggered the event |
  | `data` | object | |
  | ↳ `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 |
</ReferenceDetails>

### Grain Recording Added [#grain-recording-added]

Trigger when a new recording is added in Grain

<ReferenceDetails label="Configuration and outputs">
  #### Configuration [#configuration-4]

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

  #### Output [#output-12]

  | Parameter | Type | Description |
  | - | - | - |
  | `type` | string | Event type |
  | `user_id` | string | User UUID who triggered the event |
  | `data` | object | |
  | ↳ `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) |
</ReferenceDetails>

### Grain Recording Deleted [#grain-recording-deleted]

Trigger when a recording is deleted in Grain

<ReferenceDetails label="Configuration and outputs">
  #### Configuration [#configuration-5]

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

  #### Output [#output-13]

  | 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.) |
</ReferenceDetails>

### Grain Recording Updated [#grain-recording-updated]

Trigger when a recording is updated in Grain

<ReferenceDetails label="Configuration and outputs">
  #### Configuration [#configuration-6]

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

  #### Output [#output-14]

  | Parameter | Type | Description |
  | - | - | - |
  | `type` | string | Event type |
  | `user_id` | string | User UUID who triggered the event |
  | `data` | object | |
  | ↳ `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) |
</ReferenceDetails>

### Grain Story Added [#grain-story-added]

Trigger when a new story is created in Grain

<ReferenceDetails label="Configuration and outputs">
  #### Configuration [#configuration-7]

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

  #### Output [#output-15]

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

### Grain Story Deleted [#grain-story-deleted]

Trigger when a story is deleted in Grain

<ReferenceDetails label="Configuration and outputs">
  #### Configuration [#configuration-8]

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

  #### Output [#output-16]

  | 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.) |
</ReferenceDetails>

### Grain Story Updated [#grain-story-updated]

Trigger when a story is updated in Grain

<ReferenceDetails label="Configuration and outputs">
  #### Configuration [#configuration-9]

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

  #### Output [#output-17]

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

### Grain Upload Status [#grain-upload-status]

Trigger on progress updates for recordings uploaded to Grain

<ReferenceDetails label="Configuration and outputs">
  #### Configuration [#configuration-10]

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

  #### Output [#output-18]

  | 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.) |
</ReferenceDetails>
