Access your meeting data programmatically. Build integrations with Zapier, Make.com, or custom applications.
Get your first API response in under a minute.
Get your API key
API keys can only be created from the Convo desktop app, available for macOS and Windows. Open the app → Settings → API Keys → Create New Key. Copy the key — it's only shown once.
Make your first request
curl
JavaScript
See the response
That's it. Replace /user/profile with any endpoint below. Rate limit headers (X-RateLimit-Remaining) are included in every response.
All successful responses wrap results in a data key. All error responses use an error object with code and message fields.
Success
Error
The API is versioned at v1. New fields may be added to responses without a version bump — your code should tolerate unknown keys. Breaking changes will only ship in a new version with 90 days' notice.
All API requests require a Bearer token in the Authorization header. See the Quick Start above to create your key and make your first request.
Missing or malformed header returns 401 unauthorized. A valid key on the Free plan returns 403 forbidden — API access requires Starter or above.
| Capability | Starter | Professional | Enterprise |
|---|---|---|---|
| API keys | 1 | 3 | 10 |
| Read endpoints | ✓ | ✓ | ✓ |
| Write endpoints | ✓ | ✓ | ✓ |
| AI generations | 10/month | 100/month | Unlimited |
| Webhooks | — | 3 | Unlimited |
| Rate limit | 100/hr | 500/hr | 2,000/hr |
Rate limits are enforced per user on a rolling hourly window. Every successful response includes rate limit headers:
| Parameter | Type | Default | Description |
|---|---|---|---|
X-RateLimit-Limit | integer | — | Requests allowed per hour for your tier |
X-RateLimit-Remaining | integer | — | Requests remaining in the current window |
X-RateLimit-Reset | unix timestamp | — | When the rate limit window resets |
When exceeded, the API returns 429 with a Retry-After header indicating seconds until reset.
/api/v1/conversationsList conversations for the authenticated user with pagination and search.
| Parameter | Type | Default | Description |
|---|---|---|---|
limit | integer | 20 | Max results (1–100) |
offset | integer | 0 | Results to skip |
search | string | — | Search by title |
since | ISO 8601 | — | Return conversations after this date |
/api/v1/conversations/{id}/transcriptGet the full transcript with speaker labels and timestamps.
/api/v1/conversations/{id}/keypointsGet cached keypoints including sections, decisions, and action items. Returns 404 if not yet generated.
/api/v1/conversations/{id}/keypointsAIGenerate keypoints via AI. Returns cached result if available (no AI credit consumed). Use forceRefresh to regenerate.
Response is the same as GET with an additional cached boolean field.
/api/v1/conversations/{id}/feedbackGet cached communication feedback with scores, strengths, and growth areas. Returns 404 if not yet generated.
/api/v1/conversations/{id}/feedbackAIGenerate communication feedback via AI. Requires at least 10 transcript segments. Returns cached result if available.
Response is the same as GET with an additional cached boolean field.
/api/v1/conversations/{id}/queryAIAsk a natural-language question about a conversation.
Query must be 500 characters or fewer.
/api/v1/conversations/{id}/emailAIGenerate a follow-up email based on the conversation.
Tone options: professional, casual, concise. All fields are optional.
/api/v1/conversations/{id}/shareGenerate a public share URL for a conversation.
/api/v1/conversations/{id}Update a conversation title.
/api/v1/conversations/{id}Soft-delete a conversation. Data can be recovered.
/api/v1/calendar/eventsList upcoming Google Calendar events. Requires Google Calendar connected in the Convo dashboard.
| Parameter | Type | Default | Description |
|---|---|---|---|
maxResults | integer | 10 | Max events to return (1–50) |
timeMin | ISO 8601 | — | Filter events after this time |
/api/v1/user/profileGet user profile, subscription tier, and API usage statistics.
Enterprise tier returns null for limit and remaining (unlimited).
Webhooks deliver real-time event notifications to your server. Available to Professional and Enterprise tiers.
conversation.createdconversation.updatedconversation.keypoints.readyconversation.summary.readyconversation.action_items.readyconversation.feedback.readyconversation.sharedconversation.deletedtranscript.readytranscript.failedwebhook.test| Event | data fields |
|---|---|
| conversation.created | conversationId |
| conversation.updated | conversationId, title |
| conversation.keypoints.ready | conversationId, title |
| conversation.summary.ready | conversationId, title, sectionCount |
| conversation.action_items.ready | conversationId, actionItemCount |
| conversation.feedback.ready | conversationId, overallScore |
| conversation.shared | conversationId, shareUrl |
| conversation.deleted | conversationId |
| transcript.ready | conversationId, segmentCount |
| transcript.failed | conversationId, error |
| webhook.test | message |
Payloads are signed with HMAC-SHA256 using the webhook secret. Verify the X-Convo-Signature header. Event type is in X-Convo-Event.
200 quickly and process data asynchronously if needed./api/v1/webhooksList all active webhooks.
/api/v1/webhooksRegister a new webhook. HTTPS URLs only. The secret for HMAC verification is returned once on creation.
Store the secret securely. It is only shown once.
/api/v1/webhooksDelete a webhook by ID.
/api/v1/webhooks/testSend a test event to a registered webhook to verify delivery. Returns the HTTP status code from your endpoint.
Sends a webhook.test event with a signed payload. Times out after 10 seconds.
| Status | Code | Description |
|---|---|---|
400 | validation_error | Invalid request parameters or body |
401 | unauthorized | Missing or invalid API key |
403 | forbidden | Insufficient plan tier for this endpoint |
404 | not_found | Resource not found |
429 | rate_limited | Rate limit exceeded |
429 | ai_limit_exceeded | Monthly AI generation limit reached |
500 | internal_error | Unexpected server error |
Call GET /conversations/{id}/keypoints before POST. Cached results are free — POST uses an AI credit only when no cached result exists.
When you receive a 429, read the Retry-After header (seconds until reset) and wait before retrying. Avoid tight retry loops.
Instead of polling GET /conversations for new data, register a webhook for conversation.keypoints.ready and react to events in real time. This is faster and doesn't count against your rate limit.
Use environment variables — never hardcode keys in source code or commit them to version control. If a key is compromised, revoke it immediately in Settings → API Keys and create a new one.
The list conversations endpoint returns up to 100 results per page. Use offset to iterate through all results.