Grain 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 Zoen 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 Zoen make it easy to connect meeting intelligence to your workflows.
Integrate Grain into your workflow. Access meeting recordings, transcripts, highlights, and AI-generated summaries. Can also trigger workflows based on Grain webhook events.
List recordings from Grain with optional filters and pagination
| 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 |
| 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) |
Get details of a single recording by ID
| 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 |
| 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) |
Get the full transcript of a recording
| 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") |
| 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 |
List all teams in the workspace
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Grain API key (Personal Access Token) |
| Parameter | Type | Description |
|---|
teams | array | Array of team objects |
↳ id | string | Team UUID |
↳ name | string | Team name |
List all meeting types in the workspace
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Grain API key (Personal Access Token) |
| 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 |
Create a webhook for a specific Grain event type (v2 API)
| 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}. |
| 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 |
List webhooks for the account (v2 API)
| 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" |
| 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 |
Delete a webhook by ID (v2 API)
| 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") |
| Parameter | Type | Description |
|---|
success | boolean | True when webhook was successfully deleted |
A Trigger is a block that starts a workflow when an event happens in this service.
Trigger on every Grain event (recordings, highlights, stories, uploads)
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Required to create the webhook in Grain. |
| 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.) |
Trigger when a new highlight/clip is created in Grain
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Required to create the webhook in Grain. |
| 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 |
Trigger when a highlight/clip is deleted in Grain
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Required to create the webhook in Grain. |
| 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.) |
Trigger when a highlight/clip is updated in Grain
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Required to create the webhook in Grain. |
| 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 |
Trigger when a new recording is added in Grain
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Required to create the webhook in Grain. |
| 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) |
Trigger when a recording is deleted in Grain
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Required to create the webhook in Grain. |
| 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.) |
Trigger when a recording is updated in Grain
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Required to create the webhook in Grain. |
| 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) |
Trigger when a new story is created in Grain
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Required to create the webhook in Grain. |
| 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 |
Trigger when a story is deleted in Grain
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Required to create the webhook in Grain. |
| 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.) |
Trigger when a story is updated in Grain
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Required to create the webhook in Grain. |
| 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 |
Trigger on progress updates for recordings uploaded to Grain
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Required to create the webhook in Grain. |
| 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.) |