API Reference

Complete reference for the MeetBot REST API. Authenticate, send bots, and retrieve transcripts.

Authentication

The API supports two authentication methods:

API Key

Pass via X-API-Key header. Recommended for server-to-server requests.

Bearer

Pass JWT token via Authorization: Bearer <token> header. Used for user-scoped dashboard requests.

Authentication

MeetBot supports two authentication methods: API Key authentication for server-to-server requests, and JWT Bearer tokens for user-scoped requests from the dashboard.

POST/auth/register

Create a new user account. Returns a JWT access token and user object.

Request

curl -X POST http://localhost:3001/auth/register \
-H "Content-Type: application/json" \
-d '{
"email": "john@example.com",
"password": "securepassword123",
"name": "John Doe"
}'

Response

{
"success": true,
"data": {
"user": {
"id": "uuid-abc-123",
"email": "john@example.com",
"name": "John Doe",
"createdAt": "2024-03-15T10:30:00.000Z",
"updatedAt": "2024-03-15T10:30:00.000Z"
},
"accessToken": "eyJhbGciOiJIUzI1NiIs..."
},
"timestamp": "2024-03-15T10:30:00.000Z"
}
POST/auth/login

Authenticate with email and password. Returns a JWT access token.

Request

curl -X POST http://localhost:3001/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "john@example.com",
"password": "securepassword123"
}'

Response

{
"success": true,
"data": {
"user": {
"id": "uuid-abc-123",
"email": "john@example.com",
"name": "John Doe",
"createdAt": "2024-03-15T10:30:00.000Z",
"updatedAt": "2024-03-15T10:30:00.000Z"
},
"accessToken": "eyJhbGciOiJIUzI1NiIs..."
},
"timestamp": "2024-03-15T10:30:00.000Z"
}

Bots

Manage transcription bots. Send bots to meetings, check their status, update configuration, and remove them.

POST/bots

Create and send a transcription bot to a meeting. The bot will join the specified meeting and begin transcribing.

Request

curl -X POST http://localhost:3001/bots \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
"platform": "google_meet",
"nativeMeetingId": "abc-defg-hij",
"botName": "MyBot",
"language": "en"
}'

Response

{
"success": true,
"data": {
"meetingId": "uuid-meeting-123",
"platform": "google_meet",
"nativeMeetingId": "abc-defg-hij",
"constructedMeetingUrl": "https://meet.google.com/abc-defg-hij",
"status": "requested",
"botContainerId": null,
"data": {},
"createdAt": "2024-03-15T10:30:00.000Z"
},
"timestamp": "2024-03-15T10:30:00.000Z"
}
GET/bots/status

Get the current status of all active bots. Returns an array of bot status objects.

Request

curl http://localhost:3001/bots/status \
-H "X-API-Key: YOUR_API_KEY"

Response

{
"success": true,
"data": [
{
"meetingId": "uuid-meeting-123",
"platform": "google_meet",
"nativeMeetingId": "abc-defg-hij",
"constructedMeetingUrl": "https://meet.google.com/abc-defg-hij",
"status": "active",
"botContainerId": "container-xyz",
"startTime": "2024-03-15T10:30:05.000Z",
"data": {},
"createdAt": "2024-03-15T10:30:00.000Z"
}
],
"timestamp": "2024-03-15T10:31:00.000Z"
}
DELETE/bots/:platform/:nativeMeetingId

Remove a bot from a meeting. The bot will leave the meeting and stop transcribing. The transcript is preserved.

Request

curl -X DELETE http://localhost:3001/bots/google_meet/abc-defg-hij \
-H "X-API-Key: YOUR_API_KEY"

Response

{
"success": true,
"data": {
"meetingId": "uuid-meeting-123",
"platform": "google_meet",
"nativeMeetingId": "abc-defg-hij",
"status": "stopping",
"endTime": "2024-03-15T11:00:00.000Z",
"message": "Bot stop requested"
},
"timestamp": "2024-03-15T11:00:00.000Z"
}
PUT/bots/:platform/:nativeMeetingId/config

Update the configuration of an active bot. You can change settings like the transcription language.

Request

curl -X PUT http://localhost:3001/bots/google_meet/abc-defg-hij/config \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
"language": "es"
}'

Response

{
"success": true,
"data": {
"meetingId": "uuid-meeting-123",
"platform": "google_meet",
"nativeMeetingId": "abc-defg-hij",
"status": "active",
"data": { "language": "es" },
"message": "Bot configuration updated"
},
"timestamp": "2024-03-15T10:35:00.000Z"
}

Meetings

View and manage meeting records. Each meeting is automatically created when a bot joins.

GET/meetings

List all meetings for the authenticated user.

Request

curl http://localhost:3001/meetings \
-H "Authorization: Bearer YOUR_JWT_TOKEN"

Response

{
"success": true,
"data": [
{
"id": "uuid-meeting-123",
"userId": "uuid-user-456",
"platform": "google_meet",
"nativeMeetingId": "abc-defg-hij",
"constructedMeetingUrl": "https://meet.google.com/abc-defg-hij",
"status": "completed",
"botContainerId": "container-xyz",
"startTime": "2024-03-15T10:30:05.000Z",
"endTime": "2024-03-15T11:00:00.000Z",
"data": {},
"createdAt": "2024-03-15T10:30:00.000Z",
"updatedAt": "2024-03-15T11:00:00.000Z"
}
],
"timestamp": "2024-03-15T11:05:00.000Z"
}
GET/meetings/:platform/:nativeMeetingId

Get a single meeting by platform and native meeting ID. Includes transcript segments if available.

Request

curl http://localhost:3001/meetings/google_meet/abc-defg-hij \
-H "Authorization: Bearer YOUR_JWT_TOKEN"

Response

{
"success": true,
"data": {
"id": "uuid-meeting-123",
"platform": "google_meet",
"nativeMeetingId": "abc-defg-hij",
"constructedMeetingUrl": "https://meet.google.com/abc-defg-hij",
"status": "completed",
"botContainerId": "container-xyz",
"startTime": "2024-03-15T10:30:05.000Z",
"endTime": "2024-03-15T11:00:00.000Z",
"data": {},
"transcriptSegments": [],
"createdAt": "2024-03-15T10:30:00.000Z",
"updatedAt": "2024-03-15T11:00:00.000Z"
},
"timestamp": "2024-03-15T11:05:00.000Z"
}
PATCH/meetings/:platform/:nativeMeetingId

Update meeting metadata such as name or notes via the data field.

Request

curl -X PATCH http://localhost:3001/meetings/google_meet/abc-defg-hij \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-d '{
"data": {
"name": "Q4 Planning Meeting",
"notes": "Discussed roadmap priorities"
}
}'

Response

{
"success": true,
"data": {
"id": "uuid-meeting-123",
"platform": "google_meet",
"nativeMeetingId": "abc-defg-hij",
"status": "completed",
"data": {
"name": "Q4 Planning Meeting",
"notes": "Discussed roadmap priorities"
},
"updatedAt": "2024-03-15T11:10:00.000Z",
"message": "Meeting updated"
},
"timestamp": "2024-03-15T11:10:00.000Z"
}
DELETE/meetings/:platform/:nativeMeetingId

Delete a meeting record and its associated transcript permanently.

Request

curl -X DELETE http://localhost:3001/meetings/google_meet/abc-defg-hij \
-H "Authorization: Bearer YOUR_JWT_TOKEN"

Response

{
"success": true,
"data": {
"message": "Meeting deleted"
},
"timestamp": "2024-03-15T11:15:00.000Z"
}

Transcripts

Retrieve and share meeting transcripts. Transcripts include speaker labels and timestamps.

GET/transcripts/:platform/:nativeMeetingId

Get the full transcript for a meeting. Includes speaker labels, timestamps, and a concatenated full text.

Request

curl http://localhost:3001/transcripts/google_meet/abc-defg-hij \
-H "X-API-Key: YOUR_API_KEY"

Response

{
"success": true,
"data": {
"meeting": {
"id": "uuid-meeting-123",
"platform": "google_meet",
"nativeMeetingId": "abc-defg-hij",
"constructedMeetingUrl": "https://meet.google.com/abc-defg-hij",
"status": "completed",
"startTime": "2024-03-15T10:30:05.000Z",
"endTime": "2024-03-15T11:00:00.000Z",
"data": {}
},
"segments": [
{
"id": "uuid-seg-1",
"speaker": "John Doe",
"text": "Let's start with the Q4 roadmap discussion",
"language": "en",
"startTime": 0,
"endTime": 3.2,
"absoluteStartTime": "2024-03-15T10:30:05.000Z",
"absoluteEndTime": "2024-03-15T10:30:08.200Z",
"completed": true,
"createdAt": "2024-03-15T10:30:08.200Z"
},
{
"id": "uuid-seg-2",
"speaker": "Sarah Chen",
"text": "I have the metrics dashboard ready to share",
"language": "en",
"startTime": 3.5,
"endTime": 6.1,
"absoluteStartTime": "2024-03-15T10:30:08.500Z",
"absoluteEndTime": "2024-03-15T10:30:11.100Z",
"completed": true,
"createdAt": "2024-03-15T10:30:11.100Z"
}
],
"totalSegments": 2,
"fullText": "Let's start with the Q4 roadmap discussion\nI have the metrics dashboard ready to share"
},
"timestamp": "2024-03-15T11:05:00.000Z"
}
POST/transcripts/:platform/:nativeMeetingId/share

Generate a shareable link for a transcript.

Request

curl -X POST http://localhost:3001/transcripts/google_meet/abc-defg-hij/share \
-H "X-API-Key: YOUR_API_KEY"

Response

{
"success": true,
"data": {
"shareToken": "sh_abc123xyz",
"shareUrl": "http://localhost:3000/share/sh_abc123xyz",
"message": "Share link created"
},
"timestamp": "2024-03-15T11:05:00.000Z"
}

API Keys

Create and manage API keys for authenticating with the MeetBot API.

POST/api-keys

Create a new API key. The full key is only returned once upon creation - store it securely.

Request

curl -X POST http://localhost:3001/api-keys \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "My Key"
}'

Response

{
"success": true,
"data": {
"id": "uuid-key-123",
"name": "My Key",
"key": "mk_live_a1b2c3d4e5f6...",
"isActive": true,
"createdAt": "2024-03-15T10:30:00.000Z",
"message": "API key created. Store it securely — it will not be shown again."
},
"timestamp": "2024-03-15T10:30:00.000Z"
}
GET/api-keys

List all API keys for the authenticated user. Keys are masked for security.

Request

curl http://localhost:3001/api-keys \
-H "Authorization: Bearer YOUR_JWT_TOKEN"

Response

{
"success": true,
"data": [
{
"id": "uuid-key-123",
"name": "My Key",
"keyPrefix": "mk_live_a1b2",
"isActive": true,
"lastUsedAt": "2024-03-15T09:00:00.000Z",
"createdAt": "2024-03-10T10:30:00.000Z"
}
],
"timestamp": "2024-03-15T10:35:00.000Z"
}
DELETE/api-keys/:id

Revoke an API key permanently. Any requests using this key will immediately fail.

Request

curl -X DELETE http://localhost:3001/api-keys/uuid-key-123 \
-H "Authorization: Bearer YOUR_JWT_TOKEN"

Response

{
"success": true,
"data": {
"message": "API key revoked"
},
"timestamp": "2024-03-15T10:40:00.000Z"
}