Status: Free Public Beta
This document outlines how to interact with the Vexa API to manage meeting bots and retrieve transcripts during our free public beta phase.
All API requests described here require an API key for authentication.
- Obtain your API Key: Request your unique
X-API-Key. - Include the Key in Requests: Add the API key to the header of every request:
X-API-Key: YOUR_API_KEY_HERE
The default limit is one (1) concurrently running bot per user account. If you require a higher limit during the beta, please contact the Vexa team on our Discord channel to request an increase.
- Endpoint:
POST /bots - Description: Asks the Vexa platform to add a transcription bot to a meeting.
- Headers:
Content-Type: application/jsonX-API-Key: YOUR_API_KEY_HERE
- Request Body: A JSON object specifying the meeting details. Common fields include:
platform: (string, required) The meeting platform. Supported values:"google_meet"- Google Meet meetings"teams"- Microsoft Teams meetings
native_meeting_id: (string, required) The unique identifier for the meeting. Format depends on platform:- Google Meet: Meeting code in format
xxx-xxxx-xxx(e.g., "abc-defg-hij") - Teams: Only the numeric meeting ID (10-15 digits). Extract this from your Teams URL. For example, from
https://teams.live.com/meet/9366473044740?p=xxx, use"9366473044740".
- Google Meet: Meeting code in format
passcode: (string, required for Teams) Meeting passcode. Required for Microsoft Teams meetings. Extract this from the?p=parameter in your Teams URL. For example, fromhttps://teams.live.com/meet/9366473044740?p=waw4q9dPAvdIG3aknh, use"waw4q9dPAvdIG3aknh". Not used for Google Meet.language: (string, optional) The desired transcription language code (e.g., "en", "es"). If omitted, the language spoken at the beginning of the meeting will be automatically detected once, and transcription will continue in that language (translating if necessary). To change the language mid-meeting, use the 'Update Bot Configuration' endpoint.bot_name: (string, optional) A custom name for the bot. This is the name the bot will use when appearing in the meeting.
- Response: Returns details about the requested bot instance and meeting record.
- Note: After a successful API response, it typically takes about 10 seconds for the bot to request entry into the meeting.
- Python Example (Google Meet):
import requests import json BASE_URL = "https://api.cloud.vexa.ai" API_KEY = "YOUR_API_KEY_HERE" # Replace with your actual API key HEADERS = { "X-API-Key": API_KEY, "Content-Type": "application/json" } # Google Meet example meeting_platform = "google_meet" meeting_id = "abc-defg-hij" # Replace with your meeting code from URL https://meet.google.com/abc-defg-hij request_bot_url = f"{BASE_URL}/bots" request_bot_payload = { "platform": meeting_platform, "native_meeting_id": meeting_id, "language": "en", # Optional: specify language "bot_name": "MyMeetingBot" # Optional: custom name } response = requests.post(request_bot_url, headers=HEADERS, json=request_bot_payload) print(response.json())
- Python Example (Microsoft Teams):
# Microsoft Teams example # From URL: https://teams.live.com/meet/9387167464734?p=qxJanYOcdjN4d6UlGa # Extract: meeting_id = "9387167464734" and passcode = "qxJanYOcdjN4d6UlGa" request_bot_payload = { "platform": "teams", "native_meeting_id": "9387167464734", # Numeric meeting ID only "passcode": "qxJanYOcdjN4d6UlGa", # Required passcode parameter "language": "en", "bot_name": "MyMeetingBot" } response = requests.post(request_bot_url, headers=HEADERS, json=request_bot_payload) print(response.json())
- cURL Example (Google Meet):
curl -X POST \ https://api.cloud.vexa.ai/bots \ -H 'Content-Type: application/json' \ -H 'X-API-Key: YOUR_API_KEY_HERE' \ -d '{ "platform": "google_meet", "native_meeting_id": "abc-defg-hij", "language": "en", "bot_name": "MyMeetingBot" }'
- cURL Example (Microsoft Teams):
# From URL: https://teams.live.com/meet/9387167464734?p=qxJanYOcdjN4d6UlGa # Extract meeting ID and passcode separately curl -X POST \ https://api.cloud.vexa.ai/bots \ -H 'Content-Type: application/json' \ -H 'X-API-Key: YOUR_API_KEY_HERE' \ -d '{ "platform": "teams", "native_meeting_id": "9387167464734", "passcode": "qxJanYOcdjN4d6UlGa", "language": "en", "bot_name": "MyMeetingBot" }'
- Endpoint:
GET /transcripts/{platform}/{native_meeting_id} - Description: Retrieves the meeting transcript. This provides real-time transcription data and can be called during or after the meeting has concluded.
- Note: For live meetings, consider using WebSocket connections instead of frequent polling for better efficiency and lower latency. WebSocket connections provide efficient, low-latency transcript updates compared to polling REST endpoints, and avoid the overhead of repeated HTTP requests. See the WebSocket documentation for real-time transcript updates.
- Path Parameters:
platform: (string) The platform of the meeting (google_meetorteams).native_meeting_id: (string) The unique identifier of the meeting. Use the exact same value you provided when requesting the bot:- Google Meet: The meeting code (e.g., "abc-defg-hij")
- Teams: The numeric meeting ID only (e.g., "9387167464734"), not the full URL
- Headers:
X-API-Key: YOUR_API_KEY_HERE
- Response: Returns the transcript data, typically including segments with speaker, timestamp, and text.
- Python Example:
# imports, HEADERS, meeting_id, meeting_platform as ABOVE get_transcript_url = f"{BASE_URL}/transcripts/{meeting_platform}/{meeting_id}" response = requests.get(get_transcript_url, headers=HEADERS) print(response.json())
- cURL Examples:
# Google Meet curl -X GET \ https://api.cloud.vexa.ai/transcripts/google_meet/abc-defg-hij \ -H 'X-API-Key: YOUR_API_KEY_HERE' # Microsoft Teams (use the numeric meeting ID, not the full URL) curl -X GET \ https://api.cloud.vexa.ai/transcripts/teams/9387167464734 \ -H 'X-API-Key: YOUR_API_KEY_HERE'
- Endpoint:
GET /bots/status - Description: Lists the bots currently running under your API key.
- Headers:
X-API-Key: YOUR_API_KEY_HERE
- Response: Returns a list detailing the status of active bots.
- Python Example:
# imports, HEADERS, meeting_id, meeting_platform as ABOVE get_status_url = f"{BASE_URL}/bots/status" response = requests.get(get_status_url, headers=HEADERS) print(response.json())
- cURL Example:
curl -X GET \ https://api.cloud.vexa.ai/bots/status \ -H 'X-API-Key: YOUR_API_KEY_HERE'
- Endpoint:
PUT /bots/{platform}/{native_meeting_id}/config - Description: Updates the configuration of an active bot (e.g., changing the language).
- Path Parameters:
platform: (string) The platform of the meeting (google_meetorteams).native_meeting_id: (string) The identifier of the meeting with the active bot. Use the exact same value you provided when requesting the bot:- Google Meet: The meeting code (e.g., "abc-defg-hij")
- Teams: The numeric meeting ID only (e.g., "9387167464734"), not the full URL
- Headers:
Content-Type: application/jsonX-API-Key: YOUR_API_KEY_HERE
- Request Body: A JSON object containing the configuration parameters to update (e.g.,
{"language": "new_language_code"}). The specific parameters accepted depend on the API implementation. - Response: Indicates whether the update request was accepted.
- Python Example:
# imports, HEADERS, meeting_id, meeting_platform as ABOVE update_config_url = f"{BASE_URL}/bots/{meeting_platform}/{meeting_id}/config" update_payload = { "language": "es" # Example: change language to Spanish } response = requests.put(update_config_url, headers=HEADERS, json=update_payload) print(response.json())
- cURL Examples:
# Google Meet curl -X PUT \ https://api.cloud.vexa.ai/bots/google_meet/abc-defg-hij/config \ -H 'Content-Type: application/json' \ -H 'X-API-Key: YOUR_API_KEY_HERE' \ -d '{ "language": "es" }' # Microsoft Teams (use numeric meeting ID only) curl -X PUT \ https://api.cloud.vexa.ai/bots/teams/9387167464734/config \ -H 'Content-Type: application/json' \ -H 'X-API-Key: YOUR_API_KEY_HERE' \ -d '{ "language": "es" }'
- Endpoint:
DELETE /bots/{platform}/{native_meeting_id} - Description: Removes an active bot from a meeting.
- Path Parameters:
platform: (string) The platform of the meeting (google_meetorteams).native_meeting_id: (string) The identifier of the meeting. Use the exact same value you provided when requesting the bot:- Google Meet: The meeting code (e.g., "abc-defg-hij")
- Teams: The numeric meeting ID only (e.g., "9387167464734"), not the full URL
- Headers:
X-API-Key: YOUR_API_KEY_HERE
- Response: Confirms the bot removal, potentially returning the final meeting record details.
- Python Example:
# imports, HEADERS, meeting_id, meeting_platform as ABOVE stop_bot_url = f"{BASE_URL}/bots/{meeting_platform}/{meeting_id}" response = requests.delete(stop_bot_url, headers=HEADERS) print(response.json())
- cURL Examples:
# Google Meet curl -X DELETE \ https://api.cloud.vexa.ai/bots/google_meet/abc-defg-hij \ -H 'X-API-Key: YOUR_API_KEY_HERE' # Microsoft Teams (use numeric meeting ID only) curl -X DELETE \ https://api.cloud.vexa.ai/bots/teams/9387167464734 \ -H 'X-API-Key: YOUR_API_KEY_HERE'
- Endpoint:
GET /meetings - Description: Retrieves a history of meetings associated with your API key.
- Headers:
X-API-Key: YOUR_API_KEY_HERE
- Response: Returns a list of meeting records.
- Python Example:
import requests import json BASE_URL = "https://api.cloud.vexa.ai" API_KEY = "YOUR_API_KEY_HERE" # Replace with your actual API key HEADERS = { "X-API-Key": API_KEY, "Content-Type": "application/json" # Include for POST/PUT, harmless for GET/DELETE } list_meetings_url = f"{BASE_URL}/meetings" response = requests.get(list_meetings_url, headers=HEADERS) # print(f"Status Code: {response.status_code}") print(response.json())
- cURL Example:
curl -X GET \ https://api.cloud.vexa.ai/meetings \ -H 'X-API-Key: YOUR_API_KEY_HERE'
- Endpoint:
PATCH /meetings/{platform}/{native_meeting_id} - Description: Updates meeting metadata such as name, participants, languages, and notes. Only these specific fields can be updated.
- Path Parameters:
platform: (string) The platform of the meeting (google_meetorteams).native_meeting_id: (string) The unique identifier of the meeting. Use the exact same value you provided when requesting the bot:- Google Meet: The meeting code (e.g., "abc-defg-hij")
- Teams: The numeric meeting ID only (e.g., "9387167464734"), not the full URL
- Headers:
Content-Type: application/jsonX-API-Key: YOUR_API_KEY_HERE
- Request Body: A JSON object containing the meeting data to update:
data: (object, required) Container for meeting metadataname: (string, optional) Meeting name/titleparticipants: (array, optional) List of participant nameslanguages: (array, optional) List of language codes detected/used in the meetingnotes: (string, optional) Meeting notes or description
- Response: Returns the updated meeting record.
- Python Example:
# imports, HEADERS, meeting_id, meeting_platform as ABOVE update_meeting_url = f"{BASE_URL}/meetings/{meeting_platform}/{meeting_id}" update_payload = { "data": { "name": "Weekly Team Standup", "participants": ["Alice", "Bob", "Charlie"], "languages": ["en"], "notes": "Discussed Q4 roadmap and sprint planning" } } response = requests.patch(update_meeting_url, headers=HEADERS, json=update_payload) print(response.json())
- cURL Examples:
# Google Meet curl -X PATCH \ https://api.cloud.vexa.ai/meetings/google_meet/abc-defg-hij \ -H 'Content-Type: application/json' \ -H 'X-API-Key: YOUR_API_KEY_HERE' \ -d '{ "data": { "name": "Weekly Team Standup", "participants": ["Alice", "Bob", "Charlie"], "languages": ["en"], "notes": "Discussed Q4 roadmap and sprint planning" } }' # Microsoft Teams (use numeric meeting ID only) curl -X PATCH \ https://api.cloud.vexa.ai/meetings/teams/9387167464734 \ -H 'Content-Type: application/json' \ -H 'X-API-Key: YOUR_API_KEY_HERE' \ -d '{ "data": { "name": "Weekly Team Standup", "participants": ["Alice", "Bob", "Charlie"], "languages": ["en"], "notes": "Discussed Q4 roadmap and sprint planning" } }'
- Endpoint:
DELETE /meetings/{platform}/{native_meeting_id} - Description: Purges transcripts and anonymizes meeting data for finalized meetings. Only works for meetings in
completedorfailedstates. Deletes all transcripts but preserves meeting and session records for telemetry purposes. Scrubs PII while keeping status transitions and completion reasons. - Path Parameters:
platform: (string) The platform of the meeting (google_meetorteams).native_meeting_id: (string) The unique identifier of the meeting. Use the exact same value you provided when requesting the bot:- Google Meet: The meeting code (e.g., "abc-defg-hij")
- Teams: The numeric meeting ID only (e.g., "9387167464734"), not the full URL
- Headers:
X-API-Key: YOUR_API_KEY_HERE
- Response: Returns a confirmation message.
- Error Responses:
404 Not Found: Meeting not found.409 Conflict: Meeting not finalized (not in completed or failed state).
- Python Example:
# imports, HEADERS, meeting_id, meeting_platform as ABOVE delete_meeting_url = f"{BASE_URL}/meetings/{meeting_platform}/{meeting_id}" response = requests.delete(delete_meeting_url, headers=HEADERS) print(response.json())
- cURL Examples:
# Google Meet curl -X DELETE \ https://api.cloud.vexa.ai/meetings/google_meet/abc-defg-hij \ -H 'X-API-Key: YOUR_API_KEY_HERE' # Microsoft Teams (use numeric meeting ID only) curl -X DELETE \ https://api.cloud.vexa.ai/meetings/teams/9387167464734 \ -H 'X-API-Key: YOUR_API_KEY_HERE'
- Endpoint:
PUT /user/webhook - Description: Sets a webhook URL for the authenticated user. When events occur (e.g., a meeting finishes processing), a POST request with the meeting data will be sent to this URL.
- Headers:
Content-Type: application/jsonX-API-Key: YOUR_API_KEY_HERE
- Request Body: A JSON object containing the webhook URL:
webhook_url: (string, required) The full URL to which Vexa should send webhook notifications.
- Response: Returns the updated user record.
- Python Example:
# imports, HEADERS from previous examples set_webhook_url = f"{BASE_URL}/user/webhook" webhook_payload = { "webhook_url": "https://your-service.com/webhook-receiver" } response = requests.put(set_webhook_url, headers=HEADERS, json=webhook_payload) print(response.json())
- cURL Example:
curl -X PUT \ https://api.cloud.vexa.ai/user/webhook \ -H 'Content-Type: application/json' \ -H 'X-API-Key: YOUR_API_KEY_HERE' \ -d '{ "webhook_url": "https://your-service.com/webhook-receiver" }'
Contact Vexa support via the designated channels if you encounter issues or have questions regarding API usage or API key provisioning.