Create and manage meeting bots
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.
- Sign up for a free account
- Generate API key from your dashboard
- 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"
}'Skribby can send real-time updates to your server via webhooks. When you provide a webhook_url parameter, Skribby will POST events to that URL as they occur.
Webhook Format
All webhook payloads follow a consistent format:
{
"type": "{event}",
"data": {...}
}Available Events
`status_update`
Sent when a bot's status changes. The data object contains:
old_status(string): The previous status of the botnew_status(string): The new status of the bot
Example:
{
"type": "status_update",
"data": {
"old_status": "joining",
"new_status": "recording"
}
}The transcription model to use for transcribing the audio. Refer to your billing page for cost and availability per model.
Optional credential identifier issued by the Skribby platform when bringing your own API key for the selected transcription model.
The service the bot needs to join:
gmeet- Google Meetteams- Microsoft Teamszoom- Zoom
Binary image file for bot avatar. Ideally should be in 16:9 aspect ratio.
URL to an image that will be used as the bot's avatar. This will be ignored if bot_avatar_file is provided.
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.
Whether video should also be recorded during the meeting.
Refer to your billing page for cost implications and availability.
URL to receive live updates on bot status changes, participant changes, etc. Refer to the Webhooks section for details on webhook format and available events.
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.
Unix timestamp for when the bot should join the meeting. If not provided, the bot will attempt to join immediately.
Whether the transcription should censor profanity. Only available on select models. Refer to your billing page for availability per model.
Authentication credentials for joining private meetings.
Refer to the Bot Authentication page for more information.
Provide certain words or phrases to improve transcription. Only supported on certain models, refer to your billing page to view availability per model.
Enable realtime audio streaming addon via a WebSocket connection. This is enabled by default when using a realtime model. Refer to your billing page for cost implications and availability.
- Production serverhttps://platform.skribby.io/api/v1/bot
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
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"
}'Bot created successfully
Current status of the bot
Webhook URL for receiving updates. Refer to the Webhooks section for details on webhook format and available events.
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.
WebSocket URL for receiving realtime audio data from the bot. Only available when using a realtime model or when realtime_audio: true was set when creating the bot. Audio is streamed as 16-bit PCM at 16kHz sample rate.
Words or phrases provided when creating meeting bot for transcription model
{ "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, "waiting_room_timeout": 10, "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", "websocket_audio_url": "http://example.com", "video": true, "lang": "string", "detected_lang": "string", "transcript": [ { … } ], "transcription_model": "string", "participants": [ { … } ], "events": [ { … } ], "profanity_filter": true, "custom_vocabulary": [ "string" ], "created_at": "2019-08-24T14:15:22Z", "finished_at": "2019-08-24T14:15:22Z" }
Request
Validate a meeting bot configuration without actually creating or starting the bot. This endpoint accepts the same parameters as the Create Bot endpoint and performs all validation checks including meeting URL format, authenticated account validity, and configuration parameters.
Use this endpoint to verify your bot configuration before deploying, or to validate user input in your application before scheduling a bot.
The transcription model to use for transcribing the audio. Refer to your billing page for cost and availability per model.
Optional credential identifier issued by the Skribby platform when bringing your own API key for the selected transcription model.
The service the bot needs to join:
gmeet- Google Meetteams- Microsoft Teamszoom- Zoom
Binary image file for bot avatar. Ideally should be in 16:9 aspect ratio.
URL to an image that will be used as the bot's avatar. This will be ignored if bot_avatar_file is provided.
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.
Whether video should also be recorded during the meeting.
Refer to your billing page for cost implications and availability.
URL to receive live updates on bot status changes, participant changes, etc. Refer to the Webhooks section for details on webhook format and available events.
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.
Unix timestamp for when the bot should join the meeting. If not provided, the bot will attempt to join immediately.
Whether the transcription should censor profanity. Only available on select models. Refer to your billing page for availability per model.
Authentication credentials for joining private meetings.
Refer to the Bot Authentication page for more information.
Provide certain words or phrases to improve transcription. Only supported on certain models, refer to your billing page to view availability per model.
Enable realtime audio streaming addon via a separate WebSocket connection. Refer to your billing page for cost implications and availability.
- Production serverhttps://platform.skribby.io/api/v1/bot/validate
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://platform.skribby.io/api/v1/bot/validate \
-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"
}'{ "message": "Meeting bot configuration is valid." }
- Production serverhttps://platform.skribby.io/api/v1/bot/{id}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://platform.skribby.io/api/v1/bot/{id}?with-speaker-events=false' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>'Bot information retrieved successfully
Current status of the bot
Webhook URL for receiving updates. Refer to the Webhooks section for details on webhook format and available events.
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.
WebSocket URL for receiving realtime audio data from the bot. Only available when using a realtime model or when realtime_audio: true was set when creating the bot. Audio is streamed as 16-bit PCM at 16kHz sample rate.
Words or phrases provided when creating meeting bot for transcription model
{ "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, "waiting_room_timeout": 10, "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", "websocket_audio_url": "http://example.com", "video": true, "lang": "string", "detected_lang": "string", "transcript": [ { … } ], "transcription_model": "string", "participants": [ { … } ], "events": [ { … } ], "profanity_filter": true, "custom_vocabulary": [ "string" ], "created_at": "2019-08-24T14:15:22Z", "finished_at": "2019-08-24T14:15:22Z" }
The transcription model to use for transcribing the audio. Refer to your billing page for cost and availability per model.
Optional credential identifier issued by the Skribby platform when bringing your own API key for the selected transcription model.
The service the bot needs to join:
gmeet- Google Meetteams- Microsoft Teamszoom- Zoom
Binary image file for bot avatar. Ideally should be in 16:9 aspect ratio.
URL to an image that will be used as the bot's avatar. This will be ignored if bot_avatar_file is provided.
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.
Whether video should also be recorded during the meeting.
Refer to your billing page for cost implications and availability.
URL to receive live updates on bot status changes, participant changes, etc. Refer to the Webhooks section for details on webhook format and available events.
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.
Unix timestamp for when the bot should join the meeting. If not provided, the bot will attempt to join immediately.
Whether the transcription should censor profanity. Only available on select models. Refer to your billing page for availability per model.
Authentication credentials for joining private meetings.
Refer to the Bot Authentication page for more information.
Provide certain words or phrases to improve transcription. Only supported on certain models, refer to your billing page to view availability per model.
Enable realtime audio streaming addon via a separate WebSocket connection. Refer to your billing page for cost implications and availability.
- Production serverhttps://platform.skribby.io/api/v1/bot/{id}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X PATCH \
'https://platform.skribby.io/api/v1/bot/{id}' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"bot_name": "Updated Bot Name"
}'Bot updated successfully
Current status of the bot
Webhook URL for receiving updates. Refer to the Webhooks section for details on webhook format and available events.
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.
WebSocket URL for receiving realtime audio data from the bot. Only available when using a realtime model or when realtime_audio: true was set when creating the bot. Audio is streamed as 16-bit PCM at 16kHz sample rate.
Words or phrases provided when creating meeting bot for transcription model
{ "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, "waiting_room_timeout": 10, "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", "websocket_audio_url": "http://example.com", "video": true, "lang": "string", "detected_lang": "string", "transcript": [ { … } ], "transcription_model": "string", "participants": [ { … } ], "events": [ { … } ], "profanity_filter": true, "custom_vocabulary": [ "string" ], "created_at": "2019-08-24T14:15:22Z", "finished_at": "2019-08-24T14:15:22Z" }
- Production serverhttps://platform.skribby.io/api/v1/bot/{id}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X DELETE \
'https://platform.skribby.io/api/v1/bot/{id}' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>'{ "message": "Meeting bot deleted successfully." }
- Production serverhttps://platform.skribby.io/api/v1/bot/{id}/chat-message
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
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!"
}'{ "message": "Message sent to the meeting bot." }
- Production serverhttps://platform.skribby.io/api/v1/bot/{id}/stop
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
'https://platform.skribby.io/api/v1/bot/{id}/stop' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>'{ "message": "Meeting bot is shutting down." }
- Production serverhttps://platform.skribby.io/api/v1/bot/scheduled
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
https://platform.skribby.io/api/v1/bot/scheduled \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>'Scheduled bots retrieved successfully
Current status of the bot
Webhook URL for receiving updates. Refer to the Webhooks section for details on webhook format and available events.
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.
WebSocket URL for receiving realtime audio data from the bot. Only available when using a realtime model or when realtime_audio: true was set when creating the bot. Audio is streamed as 16-bit PCM at 16kHz sample rate.
Words or phrases provided when creating meeting bot for transcription model
[ { "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", "websocket_audio_url": "http://example.com", "video": true, "lang": "string", "detected_lang": "string", "transcript": [ … ], "transcription_model": "string", "participants": [ … ], "events": [ … ], "profanity_filter": true, "custom_vocabulary": [ … ], "created_at": "2019-08-24T14:15:22Z", "finished_at": "2019-08-24T14:15:22Z" } ]