Errors
How the MeetStream API reports errors — every status code, what causes it, and how to fix it.
Every MeetStream API error returns a JSON body with a single message field describing what went wrong:
Branch on the HTTP status code first, then read message for the specifics. The tables below are verified against the live API.
Status codes at a glance
The Authorization header is always Token YOUR_API_KEY (not Bearer). A missing header returns 401; a present-but-invalid key returns 403. See Authentication.
Authentication errors
Validation errors (400)
Returned when the request body fails validation — before any bot is created, so a 400 never spawns a bot or consumes credits. The message names the exact problem. Common cases:
400 messages are specific and actionable — always surface message to your logs. Fix the request and retry; a 400 is never transient.
Not found (404)
The resource or route doesn’t exist. Body varies by what was missing:
Conflict (409) — deduplication
When you pass a deduplication_key (or schedule the same calendar event twice), MeetStream returns 409 with the existing bot’s ID rather than creating a duplicate:
To change a scheduled bot instead of colliding, use PATCH /calendar/scheduled_bots/{bot_id}. See Deduplication & Idempotency Keys.
Idempotent replay (507)
If you retry POST /bots/create_bot with the same Idempotency-Key, MeetStream returns 507 with the original bot’s details — no new bot, no extra charge. Treat 507 as success:
By contrast, a deduplication_key replay returns 200 (looks like a normal create). Both are documented in the Deduplication & Idempotency guide.
Still processing (202)
202 means the request was accepted but the data isn’t ready — poll again, don’t treat it as an error.
- Transcript not ready:
GET /transcript/{transcript_id}/get_transcriptreturns{ "message": "Transcript is still being processed. Current status: <state>" }. - Per-participant streams:
get_audio_streams/get_recording_streamsreturn{ "audio_status": "in_progress", "message": ... }while the bot is still in the meeting.
The 202 forever trap. For streaming-only providers (meetstream_streaming, *_streaming), a post-call get_transcript returns 202 indefinitely — it never flips to a transcript. Streaming providers deliver data over the live webhook, not the post-call fetch. A blind retry loop will hang. Cap your retries and rely on the live stream as the record.
Rate limits (429) and server errors (500 / 503)
429 Too Many Requests— you’re sending too fast. Honor theRetry-Afterresponse header and back off before retrying.500/503— a transient MeetStream-side error. Retry with exponential backoff. If it persists, contact support@meetstream.ai.
Operational errors (surfaced via webhooks, not HTTP)
Some failures happen after a successful 201 — the bot was created, then couldn’t do its job. These arrive on your callback_url, not as an HTTP error. Webhook status_code is 200 for success and 500 for failure.
See Webhooks and Events for the full lifecycle and payloads.
Handling errors well
Retry 429, 500, 503 (with backoff, honoring Retry-After). Never retry a 400 — fix the request first.
Send an Idempotency-Key on create_bot so a network retry replays the original bot (507) instead of creating duplicates.
Cap transcript polling; streaming-only providers return 202 indefinitely by design.
Every error carries a specific message — surface it so 400/404 causes are obvious.
