MeetCapture API Reference
Access your meeting sessions, transcripts, and recordings programmatically. The MeetCapture API is built on Supabase and supports both REST and Edge Function endpoints.
Authentication
API key and JWT auth
REST API
CRUD for sessions, transcripts
Edge Functions
Server-side logic endpoints
Webhooks
Real-time event notifications
Base URL
https://xrhwfuquudleamotznzx.supabase.coAuthentication
MeetCapture supports API keys for server-side Edge Function calls and Supabase Auth JWTs for direct PostgREST table access.
Option 1: API Key (recommended for server-to-server)
Generate an API key from your dashboard. Include it in the x-api-key header when calling MeetCapture Edge Functions.
curl -H "x-api-key: mc_live_your_key_here" \
"https://xrhwfuquudleamotznzx.supabase.co/functions/v1/mc-api-sessions?limit=10"Option 2: JWT Bearer Token (for browser/user context)
Use the Supabase Auth JWT in the Authorization header for direct table reads through Supabase PostgREST.
curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "apikey: YOUR_SUPABASE_ANON_KEY" \
https://xrhwfuquudleamotznzx.supabase.co/rest/v1/mc_sessionsREST API
MeetCapture exposes standard REST endpoints via Supabase PostgREST for authenticated Supabase users. For API-key access, use the Edge Function endpoints below.
| Endpoint | Description |
|---|---|
GET /rest/v1/mc_sessions | List all meeting sessions |
GET /rest/v1/mc_sessions?id=eq.{id} | Get a single session by ID |
GET /rest/v1/mc_transcripts | List all transcripts |
GET /rest/v1/mc_transcripts?session_id=eq.{id} | Get transcript for a session |
GET /rest/v1/mc_transcript_segments | List transcript segments with timestamps |
GET /rest/v1/mc_recordings | List all recordings (audio/video) |
Sessions
A session represents a single meeting capture. It contains metadata about the platform, timing, and status.
List all sessions
curl -X GET \
"https://xrhwfuquudleamotznzx.supabase.co/functions/v1/mc-api-sessions?limit=10" \
-H "x-api-key: mc_live_your_key"Response Schema
| Field | Type | Description |
|---|---|---|
id | uuid | Unique session identifier |
user_id | uuid | Owner user ID |
title | text | Meeting title (e.g. 'Weekly Standup') |
platform | text | Meeting platform (zoom, teams, google_meet, slack) |
status | text | Session status (active, completed, error) |
started_at | timestamptz | When capture started |
ended_at | timestamptz | When capture ended |
duration_secs | integer | Duration in seconds |
created_at | timestamptz | Record creation time |
Transcripts
Transcripts contain the full text and individual segments (with timestamps and speakers) for each session.
Get transcript with segments
# SESSION_UUID is the mc_sessions.id value.
curl -X GET \
"https://xrhwfuquudleamotznzx.supabase.co/functions/v1/mc-api-sessions?id=SESSION_UUID" \
-H "x-api-key: mc_live_your_key"Segment Schema
| Field | Type | Description |
|---|---|---|
text | text | Transcribed text content |
speaker | text | Speaker name or identifier |
start_time_ms | integer | Start timestamp in milliseconds |
end_time_ms | integer | End timestamp in milliseconds |
confidence | float | Transcription confidence (0.0 - 1.0) |
segment_index | integer | Ordering index within transcript |
Recordings
Access audio and video recording metadata. Files are stored in Supabase Storage and can be downloaded via signed URLs.
# The detail response includes recordings, transcript, and segments.
curl -X GET \
"https://xrhwfuquudleamotznzx.supabase.co/functions/v1/mc-api-sessions?id=SESSION_UUID" \
-H "x-api-key: mc_live_your_key"Edge Functions
Server-side edge functions handle complex operations like upload token generation and webhook delivery. These run on Supabase Edge (Deno Deploy).
/functions/v1/mc-api-sessionsList sessions with pagination and filters. Add an id query parameter to retrieve one session with its recordings, transcript, and segments.
# List sessions with an API key
curl "https://xrhwfuquudleamotznzx.supabase.co/functions/v1/mc-api-sessions?limit=10&platform=zoom" \
-H "x-api-key: mc_live_your_key"
# Get one session with transcript segments
curl "https://xrhwfuquudleamotznzx.supabase.co/functions/v1/mc-api-sessions?id=SESSION_UUID" \
-H "Authorization: Bearer USER_SUPABASE_JWT"/functions/v1/mc-api-upload-tokenGenerate a scoped signed upload URL for the desktop app to upload a recording directly to the private mc-recordings bucket.
curl -X POST \
"https://xrhwfuquudleamotznzx.supabase.co/functions/v1/mc-api-upload-token" \
-H "x-api-key: mc_live_your_key" \
-H "Content-Type: application/json" \
-d '{"session_id": "SESSION_UUID", "file_name": "recording.wav", "content_type": "audio/wav"}'/functions/v1/mc-webhook-deliverInternal function that delivers webhook payloads to registered endpoints. Called automatically by database triggers when events occur.
{
"event": "session.completed",
"session_id": "abc123",
"timestamp": "2026-04-04T12:00:00Z"
}Webhooks
Register webhook endpoints from your dashboard to receive real-time notifications when events occur. All payloads are signed with HMAC-SHA256 using your endpoint secret.
Available Events
| Event | Description |
|---|---|
session.completed | Meeting session ended and all processing is complete |
recording.saved | Audio or video recording file has been saved to storage |
transcript.completed | Transcription has finished for a session |
* | Wildcard - receive all event types |
Example Payload
{
"event": "session.completed",
"timestamp": "2026-04-04T12:30:00Z",
"data": {
"session_id": "550e8400-e29b-41d4-a716-446655440000",
"platform": "zoom",
"title": "Weekly Team Standup",
"duration_seconds": 1800,
"transcript_segment_count": 42,
"recording_count": 1
}
}Verifying Signatures
Each webhook request includes a X-MeetCapture-Signature header. Verify it with HMAC-SHA256 using your endpoint secret.
import crypto from "crypto";
function verifyWebhook(payload, signature, secret) {
const expected = crypto
.createHmac("sha256", secret)
.update(payload)
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}
// In your Express handler:
app.post("/webhooks/meetcapture", (req, res) => {
const sig = req.headers["x-meetcapture-signature"];
const valid = verifyWebhook(JSON.stringify(req.body), sig, WEBHOOK_SECRET);
if (!valid) return res.status(401).send("Invalid signature");
// Process the event...
res.sendStatus(200);
});Error Handling
The API uses standard HTTP status codes. Error responses include a message explaining what went wrong.
| Status | Meaning |
|---|---|
200 | Success |
201 | Created (resource created successfully) |
400 | Bad Request (invalid parameters) |
401 | Unauthorized (missing or invalid auth) |
403 | Forbidden (valid auth but insufficient permissions) |
404 | Not Found (resource does not exist) |
429 | Rate Limited (too many requests) |
500 | Internal Server Error |
{
"message": "Invalid API key",
"code": "INVALID_API_KEY",
"hint": "Check that your API key is active and correctly formatted"
}Need help?
Reach out to our team for integration support.