Errors
MeetStream reports problems in two places: an HTTP error when a request is rejected, and a bot status or webhook when a bot that was created successfully cannot do its job. This page covers HTTP errors. For bot-level statuses, ErrorReason codes and messages on Zoom, Google Meet and Microsoft Teams, see the Bot status and error code reference.
Most errors return a JSON body with a message field:
A few endpoints return error instead, with extra fields: in-meeting commands (send message, send image, pause, resume), the credit check on create_bot, and signed-in login management. Read both keys:
Branch on the HTTP status code first, then log the text for the specifics.
Status codes at a glance
The Authorization header is always Token YOUR_API_KEY (not Bearer). A missing header, a malformed header and an invalid or revoked key all return 403 with { "message": "Forbidden" }. See Authentication.
Authentication and access errors (403)
Treat any 401 Unauthorized you receive the same way as 403: check the key and header. Very high request rates from one IP address can also be blocked with 403.
Validation errors (400)
Returned when the request 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:
Platform-specific 400s (Zoom token URLs, Google and Teams signed-in domains, teams.live.com sign-in) are listed in HTTP errors from create_bot.
400 messages are specific and actionable. Always log them. 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)
Rate and capacity limits (429)
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 live-only providers (*_streaming), a post-call get_transcript returns 202 indefinitely; it never flips to a transcript. Live providers deliver text over your 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.
Server errors (500 / 503)
A transient MeetStream-side error. Retry with exponential backoff. If it persists, contact support@meetstream.ai with the request time and any bot_id.
Operational errors (surfaced via bot status and webhooks, not HTTP)
Some failures happen after a successful 201: the bot was created, then couldn’t join or had to leave. These arrive as a terminal webhook on your callback_url or workspace endpoints, and in the bot’s status. Every ending uses event: "bot.stopped"; the reason is in bot_event.
