---
canonical_url: "https://docs.composio.dev/toolkits/grain"
markdown_url: "https://docs.composio.dev/toolkits/grain.md"
product: "platform"
version: null
last_updated: null
---

# Grain

Grain records, transcribes, and organizes meetings so teams can review conversations, share insights, and manage meeting content.

- **Category:** ai meeting assistants
- **Auth:** API_KEY
- **Composio-managed OAuth available?** N/A
- **Tools:** 17
- **Triggers:** 0
- **Slug:** `GRAIN`
- **Version:** 00000000_00

## Tools

### Create Hook

**Slug:** `GRAIN_CREATE_HOOK`

Create a Grain webhook subscription after Grain verifies that the public HTTPS callback returns a 2xx response.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `include` | object | No | Payload expansions supported by the selected hook type. Recording, highlight, and upload hooks each accept only their documented fields. |
| `hook_url` | string | Yes | Public HTTPS callback URL. Grain sends a POST reachability test during creation, and the callback must return a 2xx response. |
| `hook_type` | string ("recording_added" | "recording_updated" | "recording_deleted" | "highlight_added" | "highlight_updated" | "highlight_deleted" | "story_added" | "story_updated" | "story_deleted" | "upload_added" | "upload_updated") | Yes | Event type to subscribe to. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Create Upload

**Slug:** `GRAIN_CREATE_UPLOAD`

Create a Grain transcript upload or an audio/video upload slot. Transcript content is submitted in this call. By default, Grain automatically promotes the completed upload into a recording; set auto_promote=false to stage it instead. Automatic promotion creates a recording that cannot be undone through Grain's documented API. Audio/video responses provide signed PUT instructions, but this action does not transfer media bytes.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `include` | object | No | Optional data to include in the returned upload. |
| `attributes` | object | No | Metadata for the upload. Required with a transcript when media_type is transcript. |
| `media_type` | string ("video" | "audio" | "transcript") | Yes | Type of upload to create. |
| `auto_promote` | boolean | No | Whether Grain should automatically promote the completed upload into a recording. Set false to review it while staged and promote it later. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Delete Hook

**Slug:** `GRAIN_DELETE_HOOK`

Permanently delete one Grain webhook subscription.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `hook_id` | string | Yes | Hook ID returned by GRAIN_CREATE_HOOK or GRAIN_LIST_HOOKS. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Download Recording

**Slug:** `GRAIN_DOWNLOAD_RECORDING`

Download a recording's original audio or video media through Composio file storage. Use the transcript action instead when transcript text is needed.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `recording_id` | string | Yes | Recording ID whose original audio or video media file to download. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Connection Info

**Slug:** `GRAIN_GET_CONNECTION_INFO`

Identify the connected Grain user or workspace and report the connection's authentication type, scope, and expiry without exposing credentials.

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Recording

**Slug:** `GRAIN_GET_RECORDING`

Get one Grain recording by ID, optionally including participants, summaries, notes, and other expanded meeting data.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `include` | object | No | Expanded recording data to include in the response. |
| `recording_id` | string | Yes | Recording ID returned by GRAIN_LIST_RECORDINGS. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Recording Transcript

**Slug:** `GRAIN_GET_RECORDING_TRANSCRIPT`

Get a Grain recording transcript as structured speaker segments, plain text, WebVTT, or SRT.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `format` | string ("json" | "text" | "vtt" | "srt") | No | Transcript representation: json for timed speaker segments, text for readable prose, vtt for WebVTT captions, or srt for SubRip captions. |
| `recording_id` | string | Yes | Recording ID whose transcript to retrieve. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Upload

**Slug:** `GRAIN_GET_UPLOAD`

Get one Grain upload by ID, including its processing status and optional attributes or transcript data.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `upload_id` | string | Yes | Upload ID returned by GRAIN_CREATE_UPLOAD or GRAIN_LIST_UPLOADS. |
| `include_attributes` | boolean | No | Whether to include the upload attributes, excluding transcript data. |
| `include_transcript` | boolean | No | Whether to include transcript data in the upload attributes. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Hooks

**Slug:** `GRAIN_LIST_HOOKS`

List Grain webhook subscriptions, optionally filtering by event type or enabled state.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `state` | string ("enabled" | "disabled") | No | Restrict results to enabled or disabled hooks. |
| `hook_type` | string ("recording_added" | "recording_updated" | "recording_deleted" | "highlight_added" | "highlight_updated" | "highlight_deleted" | "story_added" | "story_updated" | "story_deleted" | "upload_added" | "upload_updated") | No | Restrict results to one webhook event type. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Recordings

**Slug:** `GRAIN_LIST_RECORDINGS`

Return one page of recordings visible to the connected Grain user, with optional search filters and expanded meeting data.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `cursor` | string | No | Opaque cursor from a previous response; omit for the first page. |
| `filter` | object | No | Optional filters applied to the recording list. |
| `include` | object | No | Expanded fields to include on each recording. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Reference Data

**Slug:** `GRAIN_LIST_REFERENCE_DATA`

List visible Grain users, teams, or meeting types and return their IDs for recording filters, sharing, and upload metadata.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `resource_type` | string ("users" | "teams" | "meeting_types") | Yes | Reference collection to return: users for user IDs, teams for team IDs, or meeting_types for meeting classification IDs. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Uploads

**Slug:** `GRAIN_LIST_UPLOADS`

Return one page of Grain uploads, optionally filtered by media type and expanded with attributes or transcript data.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `cursor` | string | No | Opaque cursor from a previous response; omit for the first page. |
| `media_type` | string ("video" | "audio" | "transcript") | No | Restrict results to one media type. |
| `include_attributes` | boolean | No | Include upload attributes other than transcript data. |
| `include_transcript` | boolean | No | Include transcript data in each upload's attributes. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Promote Upload

**Slug:** `GRAIN_PROMOTE_UPLOAD`

Start promotion of a manually staged Grain upload into a recording. This creates a recording and cannot be undone through Grain's documented API.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `upload_id` | string | Yes | Staged upload ID created with auto_promote=false. |
| `include_attributes` | boolean | No | Whether to include upload attributes in the response. |
| `include_transcript` | boolean | No | Whether to include transcript data in the response. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update Recording Access

**Slug:** `GRAIN_UPDATE_RECORDING_ACCESS`

Share a recording with one Grain user or team, or remove that user or team's access.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `operation` | string ("share" | "unshare") | Yes | Whether to grant or remove the principal's access. |
| `principal_id` | string | Yes | User or team ID returned by GRAIN_LIST_REFERENCE_DATA. |
| `recording_id` | string | Yes | Recording ID whose access to change. |
| `principal_type` | string ("user" | "team") | Yes | Whether principal_id identifies a Grain user or team. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update Recording Tag

**Slug:** `GRAIN_UPDATE_RECORDING_TAG`

Add or remove one tag on a Grain recording.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `tag` | string | Yes | Tag made of letters or numbers separated by hyphens. |
| `operation` | string ("add" | "remove") | Yes | Whether to add the tag or remove it. |
| `recording_id` | string | Yes | Recording ID whose tags to change. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update Recording Title

**Slug:** `GRAIN_UPDATE_RECORDING_TITLE`

Replace the title of an existing Grain recording.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `title` | string | Yes | New recording title. |
| `recording_id` | string | Yes | Recording ID to rename. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update Upload

**Slug:** `GRAIN_UPDATE_UPLOAD`

Replace attributes on an awaiting or manually staged Grain upload before it is promoted.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `upload_id` | string | Yes | Awaiting or manually staged upload ID to update. |
| `attributes` | object | Yes | Replacement upload attributes. Omitted attributes are removed or reset by Grain. |
| `include_attributes` | boolean | No | Include the updated upload attributes in the response. |
| `include_transcript` | boolean | No | Include transcript data in the response. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |
