Grain
scalekit19 toolsBearer TokenTranscriptionCollaborationAIGrain's REST API for managing meeting recordings, transcripts, webhooks, and workspace data. Search and retrieve recordings and transcripts, upload and...
Grain connector
-
Install the SDK
Section titled “Install the SDK”Terminal window npm install @scalekit-sdk/nodeTerminal window pip install scalekit -
Set your credentials
Section titled “Set your credentials”Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret> -
Make your first call
Section titled “Make your first call”quickstart.ts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENV_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'grain'const identifier = 'user_123'// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'grain_hooks_list',toolInput: {},})console.log(result)quickstart.py import osfrom scalekit.client import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENV_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "grain"identifier = "user_123"# Make your first callresult = actions.execute_tool(tool_input={},tool_name="grain_hooks_list",connection_name=connection_name,identifier=identifier,)print(result)
What you can do
Section titled “What you can do”Connect this agent connector to let your agent:
- List users, teams, recordings — List the users in the Grain workspace, with their id, name, and email
- Create recording upload url, hook — Generate a one-time upload URL for adding a new recording to Grain
- Update recording — Update a Grain recording’s title
- User recording unshare, recording share — Revoke a workspace user’s shared access to a Grain recording
- Team recording unshare, recording share — Revoke a team’s shared access to a Grain recording
- Get recording transcript text, recording transcript, recording — Get a Grain recording’s transcript as plain text, WebVTT, or SRT — ready to display or feed into subtitle/captioning tools, instead of the structured JSON segments returned by grain_recording_transcript_get
Tool list
Section titled “Tool list”Use the exact tool names from the Tool list below when you call execute_tool. If you’re not sure which name to use, list the tools available for the current user first.
grain_hook_create#Register a webhook (hook) that Grain calls with an HTTP POST whenever the given event type occurs — new/updated/deleted recordings, highlights, or stories, or upload processing status changes.2 params
Register a webhook (hook) that Grain calls with an HTTP POST whenever the given event type occurs — new/updated/deleted recordings, highlights, or stories, or upload processing status changes.
hook_typestringrequiredThe event type this webhook subscribes to.hook_urlstringrequiredHTTPS URL that Grain will POST event payloads to.grain_hook_delete#Delete a registered Grain webhook so it stops receiving event calls.1 param
Delete a registered Grain webhook so it stops receiving event calls.
hook_idstringrequiredUUID of the webhook to delete. Use grain_hooks_list to discover hook ids.grain_hooks_list#List the webhooks (hooks) registered on the Grain workspace, optionally filtered by event type or enabled/disabled state.2 params
List the webhooks (hooks) registered on the Grain workspace, optionally filtered by event type or enabled/disabled state.
hook_typestringoptionalOnly return webhooks subscribed to this event type.statestringoptionalOnly return webhooks in this state.grain_meeting_types_list#List the meeting types configured in the Grain workspace, with their id, name, and scope (internal or external). Use this to resolve meeting type ids needed by grain_recordings_list.0 params
List the meeting types configured in the Grain workspace, with their id, name, and scope (internal or external). Use this to resolve meeting type ids needed by grain_recordings_list.
grain_recording_download#Download the underlying media file for a Grain recording (video/mp4 or audio/mp3, depending on the recording's media_type).1 param
Download the underlying media file for a Grain recording (video/mp4 or audio/mp3, depending on the recording's media_type).
recording_idstringrequiredUUID of the recording to download.grain_recording_get#Get a single Grain recording by id, with optional inclusion of highlights, participants, AI summary/action items, private notes, calendar event, HubSpot links, and screenshares.9 params
Get a single Grain recording by id, with optional inclusion of highlights, participants, AI summary/action items, private notes, calendar event, HubSpot links, and screenshares.
recording_idstringrequiredUUID of the recording to fetch. Use grain_recordings_list to discover recording ids.include_ai_action_itemsbooleanoptionalInclude AI-detected action items in the response.include_ai_summarybooleanoptionalInclude the AI-generated meeting summary in the response.include_calendar_eventbooleanoptionalInclude the linked calendar event details in the response.include_highlightsbooleanoptionalInclude the recording's highlights in the response.include_hubspotbooleanoptionalInclude linked HubSpot company and deal ids in the response.include_participantsbooleanoptionalInclude the recording's participant list in the response.include_private_notesbooleanoptionalPersonal Access Token only. Include the caller's private notes on the recording.include_screensharesbooleanoptionalInclude screenshare timing segments in the response.grain_recording_tag_add#Add a tag to a Grain recording, for later filtering and organization.2 params
Add a tag to a Grain recording, for later filtering and organization.
recording_idstringrequiredUUID of the recording to tag.tagstringrequiredTag to add. Must start with a letter or digit and contain only letters, digits, and hyphens.grain_recording_tag_remove#Remove a tag from a Grain recording.2 params
Remove a tag from a Grain recording.
recording_idstringrequiredUUID of the recording to remove the tag from.tagstringrequiredExact tag name to remove.grain_recording_transcript_get#Get the structured JSON transcript of a Grain recording: an array of segments, each with a start/end timestamp (ms), the spoken text, and the speaker's name and participant id.1 param
Get the structured JSON transcript of a Grain recording: an array of segments, each with a start/end timestamp (ms), the spoken text, and the speaker's name and participant id.
recording_idstringrequiredUUID of the recording whose transcript should be fetched.grain_recording_transcript_text_get#Get a Grain recording's transcript as plain text, WebVTT, or SRT — ready to display or feed into subtitle/captioning tools, instead of the structured JSON segments returned by grain_recording_transcript_get.2 params
Get a Grain recording's transcript as plain text, WebVTT, or SRT — ready to display or feed into subtitle/captioning tools, instead of the structured JSON segments returned by grain_recording_transcript_get.
formatstringrequiredText format to return: 'txt' (speaker name + text per line), 'vtt' (WebVTT), or 'srt' (SubRip subtitles).recording_idstringrequiredUUID of the recording whose transcript should be fetched.grain_recording_update#Update a Grain recording's title.2 params
Update a Grain recording's title.
recording_idstringrequiredUUID of the recording to update.titlestringrequiredNew title for the recording.grain_recording_upload_url_create#Generate a one-time upload URL for adding a new recording to Grain. After calling this, PUT the raw file bytes (.mov, .mp4, .mp3, or .m4a) to the returned url; Grain processes the file asynchronously and reports progress via 'upload_status' webhooks.2 params
Generate a one-time upload URL for adding a new recording to Grain. After calling this, PUT the raw file bytes (.mov, .mp4, .mp3, or .m4a) to the returned url; Grain processes the file asynchronously and reports progress via 'upload_status' webhooks.
filenamestringrequiredName of the file to upload, including its extension. Supported extensions: .mov, .mp4, .mp3, .m4a.user_idstringoptionalUUID of the workspace user who should own the uploaded recording. Required when authenticating with a Workspace Access Token; not used with a Personal Access Token. Use grain_users_list to discover user ids.grain_recordings_list#List meeting recordings in the Grain workspace (or, with a Personal Access Token, the caller's own recordings). Supports filtering by date range, title search, team, meeting type, attendance, and participant scope, plus optional inclusion of highlights, participants, AI summary/action items, and more. Returns a page of recordings and a cursor for the next page.16 params
List meeting recordings in the Grain workspace (or, with a Personal Access Token, the caller's own recordings). Supports filtering by date range, title search, team, meeting type, attendance, and participant scope, plus optional inclusion of highlights, participants, AI summary/action items, and more. Returns a page of recordings and a cursor for the next page.
after_datetimestringoptionalOnly return recordings whose start_datetime is after this ISO8601 timestamp (inclusive).attendancestringoptionalPersonal Access Token only. 'hosted' returns only recordings the caller hosted; 'attended' returns only recordings the caller attended.before_datetimestringoptionalOnly return recordings whose start_datetime is before this ISO8601 timestamp (exclusive).cursorstringoptionalPagination cursor from a previous response's cursor field, used to fetch the next page.include_ai_action_itemsbooleanoptionalInclude AI-detected action items in the response.include_ai_summarybooleanoptionalInclude the AI-generated meeting summary in the response.include_calendar_eventbooleanoptionalInclude the linked calendar event details in the response.include_highlightsbooleanoptionalInclude each recording's highlights in the response.include_hubspotbooleanoptionalInclude linked HubSpot company and deal ids in the response.include_participantsbooleanoptionalInclude each recording's participant list in the response.include_private_notesbooleanoptionalPersonal Access Token only. Include the caller's private notes on each recording.include_screensharesbooleanoptionalInclude screenshare timing segments in the response.meeting_type_idstringoptionalOnly return recordings matching this meeting type id (UUID). Use grain_meeting_types_list to discover meeting type ids.participant_scopestringoptional'internal' returns only internal/team meetings; 'external' returns only external/customer meetings.team_idstringoptionalOnly return recordings belonging to this team id (UUID). Use grain_teams_list to discover team ids.title_searchstringoptionalReturn recordings whose title matches this search string.grain_teams_list#List the teams configured in the Grain workspace, with their id and name. Use this to resolve team ids needed by other tools such as grain_recording_share_team or grain_recordings_list.0 params
List the teams configured in the Grain workspace, with their id and name. Use this to resolve team ids needed by other tools such as grain_recording_share_team or grain_recordings_list.
grain_users_list#List the users in the Grain workspace, with their id, name, and email. Use this to resolve user ids needed by other tools such as grain_recording_share_user or grain_recording_upload_url_create.0 params
List the users in the Grain workspace, with their id, name, and email. Use this to resolve user ids needed by other tools such as grain_recording_share_user or grain_recording_upload_url_create.