Release Notes¶
Version 1.3.0 — Backlog Items & Meeting Attachments¶
Released: August 10, 2026
The User API now exposes a workspace backlog for agenda items that are not currently attached to a meeting, and adds full Meeting Attachment management on a meeting. Backlog items can be created directly, updated, deleted, moved onto a meeting agenda, and listed with their history. Attachments are raw files that are stored exactly as uploaded and are not PII-scrubbed; use the existing Meeting Context endpoints for material the Contio AI agent should read.
What's new
- Backlog item CRUD:
GET / POST /v1/backlog-items,GET / PATCH / DELETE /v1/backlog-items/{id}. - Assign to a meeting:
POST /v1/backlog-items/{id}/assigncreates a new agenda item on the destination meeting and closes the backlog item. - Backlog history:
GET /v1/backlog-items/historyreturns items that were assigned or removed, includingassigned_at,destination_meeting_id, anddeleted_at. - Meeting Attachment management:
GET / POST /v1/meetings/{id}/attachments,GET / DELETE /v1/meetings/{id}/attachments/{attachment_id}, andGET /v1/meetings/{id}/attachments/{attachment_id}/download. - No breaking changes — the new endpoints use existing
meetings:readandmeetings:writescopes.
Version 1.2.0 — Dynamic Client Registration & Third-Party MCP OAuth¶
Released: August 3, 2026
The User API and hosted MCP gateway now support Dynamic Client Registration (RFC 7591) for third-party clients. MCP clients such as Claude Desktop, Cursor, and other third-party agents can self-register at runtime, complete an OAuth 2.1 + PKCE authorization-code flow with a browser-based consent screen, and obtain cto_at_v1_ / cto_rt_v1_ tokens without a pre-provisioned client ID or PAT.
What's new
- Dynamic Client Registration with
POST /v1/oauth/registerand management endpoints atGET / PUT / DELETE /v1/oauth/register/{client_id}using theregistration_access_token. - Third-party OAuth 2.1 + PKCE with an explicit user-consent screen; OAuth endpoint URLs are advertised in the
/.well-known/oauth-authorization-serverdiscovery document. - Custom redirect-URI support for
https://callbacks, loopbackhttp://URIs, and Contio desktop deep links such ascontio://app/auth/callback(plus environment variants). - Hosted MCP gateway discovery now advertises the
registration_endpointathttps://mcp.contio.ai/.well-known/oauth-authorization-serverso MCP clients can discover and run the DCR flow. - No breaking changes — existing first-party OAuth, PAT, SLT, and workspace API key flows continue to work unchanged.
Using DCR with the hosted MCP gateway¶
- Point your MCP client at
https://mcp.contio.ai/mcp. - Read
https://mcp.contio.ai/.well-known/oauth-authorization-serverto discoverregistration_endpoint,authorization_endpoint,token_endpoint, etc. - Register the client by POSTing to the discovered
registration_endpoint. - Open the discovered
authorization_endpointin a browser with PKCES256and have the user approve the consent screen. - Capture the returned
codefrom the redirect and exchange it at the discoveredtoken_endpoint.
See the Hosted MCP Server guide for the full DCR payload, supported scopes, and redirect-URI rules.
Version 1.1.0 — Idempotency-Key Support¶
Released: July 27, 2026
POST mutations on the /v1 User API now support safe retries with an Idempotency-Key header. If a request is interrupted or retried, sending the same key with the same request body replays the original 2xx response instead of executing the operation a second time.
What's new
- Idempotency-Key header on
POSTendpoints for meetings, action items, agenda items, meeting participants, and webhook re-enable. - Idempotent-Replayed response header (
true) present when a request is served from the idempotency cache. - Standard error codes for idempotency conflicts:
idempotency_conflict(409+Retry-After),idempotency_key_reuse(422), andidempotency_key_invalid(400). - No breaking changes — omitting the header preserves the existing behavior.
Using Idempotency-Key¶
Include a client-generated, opaque key in the Idempotency-Key header:
curl -X POST https://api.contio.ai/v1/meetings \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"title":"Weekly Sync","detail_level":"STANDARD"}'
If the connection drops before you receive the response, retry the exact same request with the same Idempotency-Key. The second call returns the original 201 response and includes Idempotent-Replayed: true.
Key requirements
- The key must be printable ASCII and no longer than 255 characters.
- Reusing a key with a different request body returns
422 idempotency_key_reuse. - Keys are scoped to your credential; a user PAT and a workspace API key can each use the same key independently.
See the Errors guide for retry and idempotency conventions.
Version 1.0.0 — /v1 General Availability¶
Released: July 2026
The Contio MeetingOS User API (/v1) is now generally available. This is the first-party REST API that lets you build on top of your own workspace — managing meetings, agenda items, action items, calendars, workspace settings, and webhooks — authenticated as yourself.
What's in GA
- First-party OAuth 2.1 + PKCE authorization-code flow with a system-browser + loopback redirect, rotating refresh tokens, RFC 7009 revocation, and an RFC 8414 OIDC discovery document (hyphenated
.well-known/openid-configuration). - Personal Access Tokens (PATs) you can self-issue for automation, scoped to a subset of your own grants, with selectable expiry.
- Meetings, agenda items, action items, calendar, and workspace resource endpoints.
- Workspace administration: members, API keys, and webhooks (including re-enable and secret rotation).
- Real-time delivery: signed workspace webhooks and a resumable Server-Sent Events stream.
- Documented API conventions: rate limits, a standard error envelope, and pagination.
- A generated OpenAPI 2.0 reference that is the source of truth for the API surface.
Authentication¶
- OAuth 2.1 + PKCE (
S256only):GET /v1/oauth/authorize,POST /v1/oauth/token(authorization_codeandrefresh_tokengrants),POST /v1/oauth/revoke.- Loopback redirect URIs (
http://127.0.0.1:PORT/http://localhost:PORT) for native apps and CLIs. No client secret (token_endpoint_auth_methods_supported: ["none"]). - Refresh tokens rotate on every use.
- Discovery:
GET /v1/oauth/.well-known/openid-configurationandGET /v1/oauth/.well-known/jwks.json.
- Loopback redirect URIs (
- Personal Access Tokens:
POST /v1/user/tokens(name, scopes ⊆ your grants,expiry_days∈{30, 60, 90, 180, 365}; plaintext returned once),GET /v1/user/tokens,DELETE /v1/user/tokens/{id}. - Tokens are opaque and versioned: access
cto_at_v1_, refreshcto_rt_v1_, PATcto_pat_v1_.
Scopes¶
Several scopes gate the API, for example: meetings:read, meetings:write, workspace:read, workspace:write. See API Scopes for a full listing.
Resource endpoints¶
| Area | Endpoints |
|---|---|
| Meetings | GET/POST /v1/meetings, GET/DELETE /v1/meetings/{id}, participants, and context |
| Agenda items | GET/POST /v1/agenda-items, PATCH/DELETE /v1/agenda-items/{id} |
| Action items | GET/POST /v1/action-items, PATCH/DELETE /v1/action-items/{id} |
| Calendar | GET /v1/calendar/events, GET /v1/calendar/events/{id} |
| Workspace | GET/PATCH /v1/workspace, members, API keys, and webhooks |
| Events | GET /v1/user/events (Server-Sent Events stream, resumable via Last-Event-ID) |
See the API Reference for the full catalog and the interactive OpenAPI reference for authoritative schemas.
Documentation¶
Getting started:
- Getting Started — pick a credential and make your first request.
- Authentication guide — the OAuth 2.1 + PKCE loopback flow, refresh rotation, and revocation, with a full Python loopback example.
- Personal Access Tokens guide — issuing, listing, and deleting PATs.
Real-time & automation:
- Workspace Webhooks — HMAC-SHA256 signed deliveries, signature verification in three languages, and replay protection.
- User Events (SSE) — consuming the resumable event stream.
- Agent Integration — machine-readable artifacts for building agents against the API.
API conventions:
- Rate Limits — per-plan request budgets and the
X-RateLimit-*headers. - Errors — the standard error envelope, retry/idempotency guidance, and timestamp conventions.
- Pagination — the
limit/offsetconvention and list-response envelope.
Generated, not hand-maintained
The OpenAPI reference on this site is generated from the /v1 controllers via task api:gen-user-openapi. A CI drift check keeps the committed spec in lockstep with the code.