Skip to content

Skribby REST API (v1)

API-first platform for capturing, transcribing, and processing online meetings. Deploy meeting bots into Zoom, Microsoft Teams, and Google Meet to receive real-time or post-call transcription, audio, and structured data.

Quick Start

  1. Sign up for a free account
  2. Generate API key from your dashboard
  3. Create your first bot:
curl -X POST 'https://platform.skribby.io/api/v1/bot' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "transcription_model": "whisper",
    "meeting_url": "https://meet.google.com/abc-def-ghi",
    "service": "gmeet",
    "bot_name": "My First Bot"
  }'
Download OpenAPI description
Overview
Languages
Servers
Production server

https://platform.skribby.io/api/v1/

Bot Operations

Create and manage meeting bots

Operations

Create Bot

Request

Create a new meeting bot to join and record a meeting.

Security
bearerAuth
Bodyapplication/jsonrequired
transcription_modelstringrequired

The transcription model to use for transcribing the audio. Refer to your billing page for cost and availability per model.

Enum"none""whisper""assembly-ai-realtime""deepgram""assembly-ai""speechmatics""rev-ai""elevenlabs""deepgram-realtime""speechmatics-realtime"
servicestringrequired

The service the bot needs to join:

  • gmeet - Google Meet
  • teams - Microsoft Teams
  • zoom - Zoom
Enum"gmeet""teams""zoom"
meeting_urlstring(uri)required

The URL to the meeting itself which the bot will use to join

Example: "https://meet.google.com/osk-sbwe-nff"
bot_namestringrequired

The name of the bot that'll join the meeting

Example: "My Meeting Bot"
bot_avatar_filestring(binary)

Binary image file for bot avatar. Ideally should be in 16:9 aspect ratio.

bot_avatar_urlstring(uri)

URL to an image that will be used as the bot's avatar. This will be ignored if bot_avatar_file is provided.

langstring

Language of the meeting. Optional but can improve transcription accuracy. When using deepgram-realtime, this parameter is highly recommended.

Refer to the Bot Language page for more information.

Example: "en"
videoboolean

Whether video should also be recorded during the meeting.
Refer to your billing page for cost implications and availability.

Default false
webhook_urlstring(uri)

URL to receive live updates on bot status changes, participant changes, etc.

store_recording_for_1_yearboolean

Audio recordings are stored for 1 week by default. This addon extends storage to 1 year.
Refer to your billing page for cost implications and availability.

Default false
scheduled_start_timeinteger

Unix timestamp for when the bot should join the meeting. If not provided, the bot will attempt to join immediately.

profanity_filterboolean

Whether the transcription should censor profanity. Only available on select models. Refer to your billing page for availability per model.

Default false
initial_chat_messagestring

Whenever the bot joins the meeting, it'll send this message to the chat.

stop_optionsobject

Define if and when the bot should stop on certain conditions.

authenticationobject

Authentication credentials for joining private meetings.
Refer to the Bot Authentication page for more information.

time_limitinteger[ 5 .. 240 ]Deprecated

Use time_limit on stop_options.

Default 240
curl -i -X POST \
  https://platform.skribby.io/api/v1/bot \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "transcription_model": "whisper",
    "meeting_url": "https://meet.google.com/osk-sbwe-nff",
    "service": "gmeet",
    "bot_name": "My Meeting Bot"
  }'

Responses

Bot created successfully

Bodyapplication/json
idstring(uuid)

Unique bot identifier

Example: "3c09b2aa-6708-42c1-8145-aa55ee223613"
statusstring

Current status of the bot

Enum"scheduled""booting""joining""recording""processing""transcribing""leaving""finished""not_admitted""auth_required"
servicestring

Service the bot joined

Enum"gmeet""teams""zoom"
scheduled_forstring or null(date-time)

When the bot is scheduled to join (for scheduled bots)

stop_optionsobject

Defined options when the bot should stop on certain conditions.

bot_namestring

Name of the bot in the meeting

bot_avatarstring or null(uri)

URL to bot avatar image

meeting_urlstring(uri)

URL of the meeting

webhook_urlstring or null(uri)

Webhook URL for receiving updates

recording_urlstring or null(uri)

URL to download the recording

recording_available_untilstring or null(date-time)

When the recording will be automatically deleted

websocket_urlstring or null(uri)

WebSocket URL for real-time transcription (realtime models only)

websocket_read_only_urlstring or null(uri)

WebSocket URL for real-time transcription (realtime models only) - Only provides access to events, no actions.
Useful if you want to use the websocket directly in your front-end without providing access to the user.

videoboolean

Whether video is recorded for this meeting

langstring or null

Language specified when creating the bot

detected_langstring or null

Language detected from the conversation (if supported by the model)

transcriptArray of objects(TranscriptSegment)

Array of transcript segments

transcription_modelstring

Model used for transcription

participantsArray of objects(Participant)

List of meeting participants

eventsArray of objects(Event)

List of bot lifecycle events

profanity_filterboolean

Whether profanity filter was enabled

created_atstring(date-time)

When the bot was created

finished_atstring or null(date-time)

When the bot finished

time_limitinteger or nullDeprecated

Use time_limit property in stop_options.

Response
application/json
{ "id": "3c09b2aa-6708-42c1-8145-aa55ee223613", "status": "scheduled", "service": "gmeet", "scheduled_for": "2019-08-24T14:15:22Z", "time_limit": 0, "stop_options": { "time_limit": 240, "last_person_detection": 2, "silence_detection": 15 }, "bot_name": "string", "bot_avatar": "http://example.com", "meeting_url": "http://example.com", "webhook_url": "http://example.com", "recording_url": "http://example.com", "recording_available_until": "2019-08-24T14:15:22Z", "websocket_url": "http://example.com", "websocket_read_only_url": "http://example.com", "video": true, "lang": "string", "detected_lang": "string", "transcript": [ {} ], "transcription_model": "string", "participants": [ {} ], "events": [ {} ], "profanity_filter": true, "created_at": "2019-08-24T14:15:22Z", "finished_at": "2019-08-24T14:15:22Z" }

Get Bot

Request

Retrieve information about a specific bot, including its current status, transcript (if available), participants, and lifecycle events.

Security
bearerAuth
Path
idstring(uuid)required

Bot ID

Example: 3c09b2aa-6708-42c1-8145-aa55ee223613
Query
with-speaker-eventsboolean

Include speaker events in participant data

Default false
curl -i -X GET \
  'https://platform.skribby.io/api/v1/bot/3c09b2aa-6708-42c1-8145-aa55ee223613?with-speaker-events=false' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

Bot information retrieved successfully

Bodyapplication/json
idstring(uuid)

Unique bot identifier

Example: "3c09b2aa-6708-42c1-8145-aa55ee223613"
statusstring

Current status of the bot

Enum"scheduled""booting""joining""recording""processing""transcribing""leaving""finished""not_admitted""auth_required"
servicestring

Service the bot joined

Enum"gmeet""teams""zoom"
scheduled_forstring or null(date-time)

When the bot is scheduled to join (for scheduled bots)

stop_optionsobject

Defined options when the bot should stop on certain conditions.

bot_namestring

Name of the bot in the meeting

bot_avatarstring or null(uri)

URL to bot avatar image

meeting_urlstring(uri)

URL of the meeting

webhook_urlstring or null(uri)

Webhook URL for receiving updates

recording_urlstring or null(uri)

URL to download the recording

recording_available_untilstring or null(date-time)

When the recording will be automatically deleted

websocket_urlstring or null(uri)

WebSocket URL for real-time transcription (realtime models only)

websocket_read_only_urlstring or null(uri)

WebSocket URL for real-time transcription (realtime models only) - Only provides access to events, no actions.
Useful if you want to use the websocket directly in your front-end without providing access to the user.

videoboolean

Whether video is recorded for this meeting

langstring or null

Language specified when creating the bot

detected_langstring or null

Language detected from the conversation (if supported by the model)

transcriptArray of objects(TranscriptSegment)

Array of transcript segments

transcription_modelstring

Model used for transcription

participantsArray of objects(Participant)

List of meeting participants

eventsArray of objects(Event)

List of bot lifecycle events

profanity_filterboolean

Whether profanity filter was enabled

created_atstring(date-time)

When the bot was created

finished_atstring or null(date-time)

When the bot finished

time_limitinteger or nullDeprecated

Use time_limit property in stop_options.

Response
application/json
{ "id": "3c09b2aa-6708-42c1-8145-aa55ee223613", "status": "scheduled", "service": "gmeet", "scheduled_for": "2019-08-24T14:15:22Z", "time_limit": 0, "stop_options": { "time_limit": 240, "last_person_detection": 2, "silence_detection": 15 }, "bot_name": "string", "bot_avatar": "http://example.com", "meeting_url": "http://example.com", "webhook_url": "http://example.com", "recording_url": "http://example.com", "recording_available_until": "2019-08-24T14:15:22Z", "websocket_url": "http://example.com", "websocket_read_only_url": "http://example.com", "video": true, "lang": "string", "detected_lang": "string", "transcript": [ {} ], "transcription_model": "string", "participants": [ {} ], "events": [ {} ], "profanity_filter": true, "created_at": "2019-08-24T14:15:22Z", "finished_at": "2019-08-24T14:15:22Z" }

Delete Bot Data

Request

Delete all data related to the bot, including transcription and recording.
Bots can only be deleted if they are scheduled or not in an active state (booting, joining, recording, processing or transcribing).
Be aware, this action is not reversible!

Security
bearerAuth
Path
idstring(uuid)required

Bot ID

curl -i -X DELETE \
  'https://platform.skribby.io/api/v1/bot/{id}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

Bot deleted successfully

Bodyapplication/json
messagestring
Example: "Meeting bot deleted successfully."
Response
application/json
{ "message": "Meeting bot deleted successfully." }

Send Chat Message

Request

Send a chat message as the meeting bot

Security
bearerAuth
Path
idstring(uuid)required

Bot ID

Bodyapplication/jsonrequired
messagestringrequired

The URL to the meeting itself which the bot will use to join

Example: "Welcome to the meeting!"
curl -i -X POST \
  'https://platform.skribby.io/api/v1/bot/{id}/chat-message' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "message": "Welcome to the meeting!"
  }'

Responses

Message sent to the meeting bot

Bodyapplication/json
messagestring
Example: "Message sent to the meeting bot."
Response
application/json
{ "message": "Message sent to the meeting bot." }

Stop Bot

Request

Stop a running meeting bot. This will cause the bot to leave the meeting and begin processing the recording.

Security
bearerAuth
Path
idstring(uuid)required

Bot ID

curl -i -X POST \
  'https://platform.skribby.io/api/v1/bot/{id}/stop' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

Bot stopped successfully

Bodyapplication/json
messagestring
Example: "Meeting bot is shutting down."
Response
application/json
{ "message": "Meeting bot is shutting down." }

Get Scheduled Bots

Request

Retrieve all scheduled bots that haven't started yet. Returns an array of bot objects with status "scheduled".

Security
bearerAuth
curl -i -X GET \
  https://platform.skribby.io/api/v1/bot/scheduled \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

Scheduled bots retrieved successfully

Bodyapplication/jsonArray [
idstring(uuid)

Unique bot identifier

Example: "3c09b2aa-6708-42c1-8145-aa55ee223613"
statusstring

Current status of the bot

Enum"scheduled""booting""joining""recording""processing""transcribing""leaving""finished""not_admitted""auth_required"
servicestring

Service the bot joined

Enum"gmeet""teams""zoom"
scheduled_forstring or null(date-time)

When the bot is scheduled to join (for scheduled bots)

stop_optionsobject

Defined options when the bot should stop on certain conditions.

bot_namestring

Name of the bot in the meeting

bot_avatarstring or null(uri)

URL to bot avatar image

meeting_urlstring(uri)

URL of the meeting

webhook_urlstring or null(uri)

Webhook URL for receiving updates

recording_urlstring or null(uri)

URL to download the recording

recording_available_untilstring or null(date-time)

When the recording will be automatically deleted

websocket_urlstring or null(uri)

WebSocket URL for real-time transcription (realtime models only)

websocket_read_only_urlstring or null(uri)

WebSocket URL for real-time transcription (realtime models only) - Only provides access to events, no actions.
Useful if you want to use the websocket directly in your front-end without providing access to the user.

videoboolean

Whether video is recorded for this meeting

langstring or null

Language specified when creating the bot

detected_langstring or null

Language detected from the conversation (if supported by the model)

transcriptArray of objects(TranscriptSegment)

Array of transcript segments

transcription_modelstring

Model used for transcription

participantsArray of objects(Participant)

List of meeting participants

eventsArray of objects(Event)

List of bot lifecycle events

profanity_filterboolean

Whether profanity filter was enabled

created_atstring(date-time)

When the bot was created

finished_atstring or null(date-time)

When the bot finished

time_limitinteger or nullDeprecated

Use time_limit property in stop_options.

]
Response
application/json
[ { "id": "3c09b2aa-6708-42c1-8145-aa55ee223613", "status": "scheduled", "service": "gmeet", "scheduled_for": "2019-08-24T14:15:22Z", "time_limit": 0, "stop_options": {}, "bot_name": "string", "bot_avatar": "http://example.com", "meeting_url": "http://example.com", "webhook_url": "http://example.com", "recording_url": "http://example.com", "recording_available_until": "2019-08-24T14:15:22Z", "websocket_url": "http://example.com", "websocket_read_only_url": "http://example.com", "video": true, "lang": "string", "detected_lang": "string", "transcript": [], "transcription_model": "string", "participants": [], "events": [], "profanity_filter": true, "created_at": "2019-08-24T14:15:22Z", "finished_at": "2019-08-24T14:15:22Z" } ]

Recording Operations

Upload and transcribe recordings

Operations