curl --request GET \
--url https://api.meetingkit.com/api/v1/bots \
--header 'Authorization: <api-key>'import requests
url = "https://api.meetingkit.com/api/v1/bots"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.meetingkit.com/api/v1/bots', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.meetingkit.com/api/v1/bots",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.meetingkit.com/api/v1/bots"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.meetingkit.com/api/v1/bots")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.meetingkit.com/api/v1/bots")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"object": "<string>",
"data": [
{
"id": "bot_01k0h4r9s8x7c2dvq3m5n6p4ab",
"object": "bot",
"meeting_id": "mtg_01k0h4r9s8x7c2dvq3m5n6p4ab",
"meeting_url": "https://zoom.us/j/123456789",
"join_at": "2026-07-20T14:00:00Z",
"status": "queued",
"bot_name": "Acme Notetaker",
"welcome_message": "Recording this meeting for Acme",
"language": "en",
"recording_start": "on_join",
"recording_mode": "audio_only",
"silence_alert": true,
"summary_language": "en",
"summary_template": "discovery_call",
"participants": [
{
"email": "carmen@example.com",
"name": "Carmen"
}
],
"metadata": {
"partner_meeting_id": "meeting-123"
},
"created_at": "2026-07-20T13:58:12Z",
"ended_at": null
}
],
"has_more": true,
"_links": {
"next": {
"url": "<string>"
}
}
}{
"errors": [
{
"code": "invalid",
"field": "recording.methods.bot.mode",
"message": "must be one of: audio_and_video, audio_only, inherit"
}
]
}{
"errors": [
{
"code": "invalid",
"field": "recording.methods.bot.mode",
"message": "must be one of: audio_and_video, audio_only, inherit"
}
]
}{
"errors": [
{
"code": "invalid",
"field": "recording.methods.bot.mode",
"message": "must be one of: audio_and_video, audio_only, inherit"
}
]
}{
"errors": [
{
"code": "invalid",
"field": "recording.methods.bot.mode",
"message": "must be one of: audio_and_video, audio_only, inherit"
}
]
}List bots
The bots of one workspace, newest first, whatever sent them: POST /bots, the
HappyScribe app, or a connected calendar. An owner or admin key lists every bot; a
member’s key lists only the bots sent by or for that member. Bots and errors come in
their current shape on every API version.
curl --request GET \
--url https://api.meetingkit.com/api/v1/bots \
--header 'Authorization: <api-key>'import requests
url = "https://api.meetingkit.com/api/v1/bots"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.meetingkit.com/api/v1/bots', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.meetingkit.com/api/v1/bots",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.meetingkit.com/api/v1/bots"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.meetingkit.com/api/v1/bots")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.meetingkit.com/api/v1/bots")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"object": "<string>",
"data": [
{
"id": "bot_01k0h4r9s8x7c2dvq3m5n6p4ab",
"object": "bot",
"meeting_id": "mtg_01k0h4r9s8x7c2dvq3m5n6p4ab",
"meeting_url": "https://zoom.us/j/123456789",
"join_at": "2026-07-20T14:00:00Z",
"status": "queued",
"bot_name": "Acme Notetaker",
"welcome_message": "Recording this meeting for Acme",
"language": "en",
"recording_start": "on_join",
"recording_mode": "audio_only",
"silence_alert": true,
"summary_language": "en",
"summary_template": "discovery_call",
"participants": [
{
"email": "carmen@example.com",
"name": "Carmen"
}
],
"metadata": {
"partner_meeting_id": "meeting-123"
},
"created_at": "2026-07-20T13:58:12Z",
"ended_at": null
}
],
"has_more": true,
"_links": {
"next": {
"url": "<string>"
}
}
}{
"errors": [
{
"code": "invalid",
"field": "recording.methods.bot.mode",
"message": "must be one of: audio_and_video, audio_only, inherit"
}
]
}{
"errors": [
{
"code": "invalid",
"field": "recording.methods.bot.mode",
"message": "must be one of: audio_and_video, audio_only, inherit"
}
]
}{
"errors": [
{
"code": "invalid",
"field": "recording.methods.bot.mode",
"message": "must be one of: audio_and_video, audio_only, inherit"
}
]
}{
"errors": [
{
"code": "invalid",
"field": "recording.methods.bot.mode",
"message": "must be one of: audio_and_video, audio_only, inherit"
}
]
}Authorizations
Your API key, sent bare. See Authentication.
Query Parameters
Workspace ID, beginning with wks_. Treat it as an opaque string. Integer workspace ids are still accepted.
"wks_01k6a2r9s8x7c2dvq3m5n6p4ab"
Only the bots sent by or for this member, including the bots their connected calendar sent. A member's key may name only itself.
"mem_01k0h4r9s8x7c2dvq3m5n6p4ab"
Only the bots recording this meeting.
"mtg_01k6q2r9s8x7c2dvq3m5n6p4ab"
Only bots created at or after this time.
Only bots created before this time.
Page size, 1 to 100.
1 <= x <= 100Opaque. Follow _links.next.url rather than building it.