API documentation
Pull your meeting summaries, full transcripts, projects, tasks and assignments straight into your own systems. A read-only REST API, authenticated with a workspace key you can generate in one click.
Quickstart
- 1. Generate a key
In the app, go to Settings → API and press Create key. Workspace admins only. The key is shown once — copy it then.
- 2. Make a request
Send it as a bearer token on every request.
curl https://res.xovera.io/api/v1/meetings \ -H "Authorization: Bearer rsn_live_…" - 3. Follow the links
A task's
sourceMeetingIdpoints back at the meeting that produced it, and itsassigneeis resolved inline — so you can walk meeting → action items → tasks → owner without extra lookups.
Authentication
Every request needs an Authorization header. Keys are scoped to a whole workspace: a key can read every meeting and task in that workspace, regardless of who created them. Treat one like a password — anyone holding it has the same read access.
Authorization: Bearer rsn_live_…- • Only workspace admins can create or revoke keys.
- • The full key is displayed once, at creation. We store only a hash and can't show it again.
- • Revoking a key from Settings → API cuts off access immediately.
Conventions
- Base URL
https://res.xovera.io/api/v1- Responses
- JSON. Single records come back under
data; lists add apaginationobject withlimit,offsetandtotal. - Timestamps
- Unix milliseconds (e.g.
1784460762702). - Rate limit
- 120 requests per minute per key. Over that returns
429. - Read-only
- Every endpoint is
GET. Nothing in this API changes your data.
Endpoints
Meetings
List the workspace's meetings, newest first. Returns lightweight objects — no transcript body.
| limit | 1–100, default 25 |
| offset | default 0 |
| status | filter by meeting status |
{
"data": [
{
"id": "3f9c…",
"title": "Acme kickoff",
"createdAt": 1784460762702,
"durationSec": 2410,
"status": "ready",
"source": "bot",
"meetingUrl": "https://meet.google.com/abc-defg-hij",
"projectId": "p_12ab",
"hasSummary": true,
"hasTranscript": true
}
],
"pagination": { "limit": 25, "offset": 0, "total": 128 }
}A single meeting with its AI summary (tl;dr, key points, action items, topics, decisions), attendees, and any analyses.
{
"data": {
"id": "3f9c…",
"title": "Acme kickoff",
"createdAt": 1784460762702,
"durationSec": 2410,
"status": "ready",
"source": "bot",
"attendees": [{ "email": "sam@acme.com", "name": "Sam" }],
"summary": {
"tldr": "Kickoff for the Acme rollout…",
"keyPoints": ["Phase 1 starts Monday"],
"actionItems": [{ "text": "Send revised SOW", "owner": "Ryan", "status": "open" }],
"topics": ["onboarding", "timeline"],
"decisions": ["Ship phase 1 before EOM"]
},
"analyses": null
}
}The full transcript. Separate from the meeting object because it can be large. transcript is null until processing finishes.
{
"data": {
"transcript": {
"language": "en",
"segments": [
{ "start": 0.8, "end": 4.2, "speaker": "Ryan", "text": "Thanks for joining." }
]
}
}
}Projects & tasks
Non-archived project boards with open/total task counts.
{
"data": [
{
"id": "p_12ab",
"name": "Acme Rollout",
"description": "Phase 1 delivery",
"kind": null,
"archived": false,
"createdAt": 1784460762702,
"openTasks": 7,
"totalTasks": 12
}
]
}A single project board with its task counts.
{ "data": { "id": "p_12ab", "name": "Acme Rollout", "openTasks": 7, "totalTasks": 12 } }Tasks across the workspace. Each task embeds its resolved assignee and project, plus sourceMeetingId linking back to the meeting it came from.
| projectId | only tasks on this board |
| assigneeId | only tasks assigned to this member |
| status | todo · in_progress · done |
| sourceMeetingId | tasks created from this meeting |
| limit / offset | pagination (limit 1–100, default 25) |
{
"data": [
{
"id": "t_88fe",
"title": "Send revised SOW",
"description": null,
"status": "in_progress",
"assignee": {
"id": "u_4c1d",
"name": "Ryan O'Connor",
"email": "ryan@growthable.io",
"role": "admin"
},
"project": { "id": "p_12ab", "name": "Acme Rollout" },
"sourceMeetingId": "3f9c…",
"source": "meeting",
"dueAt": 1784550000000,
"createdAt": 1784460762702,
"updatedAt": 1784460762702,
"completedAt": null
}
],
"pagination": { "limit": 25, "offset": 0, "total": 12 }
}A single task with its resolved assignee and project.
{ "data": { "id": "t_88fe", "title": "Send revised SOW", "status": "in_progress" } }Members
Everyone in the workspace — use this to resolve task assignments to people.
{
"data": [
{ "id": "u_4c1d", "name": "Ryan O'Connor", "email": "ryan@growthable.io", "role": "admin" }
]
}Errors
Failures use a consistent envelope:
{ "error": { "code": "unauthorized", "message": "Invalid or missing API key." } }| Status | Code | Meaning |
|---|---|---|
| 401 | unauthorized | Missing, malformed, unknown, or revoked API key. |
| 403 | forbidden | Key management requires a workspace admin. |
| 404 | not_found | No such record in this workspace. |
| 400 | bad_request | An invalid query parameter, e.g. an unknown status. |
| 429 | rate_limited | Over 120 requests in the last minute. |
| 500 | server_error | Something went wrong on our side. |
Ready to build?
Generate a workspace key in one click and make your first request in under a minute.