Documents API reference
Generated from the OpenAPI specification (version 2026-10-01). Base URL: https://app.meetingize.com/api. All requests need Authorization: Bearer <API key or OAuth token>. Try them in the API explorer.
List generated documents
Section titled “List generated documents”GET /v1/documentsDocuments generated for your meetings, most recent first. Required scope: read:documents.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
cursor | query | string | ||
limit | query | integer | ||
meeting_id | query | string | Only the documents of this meeting. |
Responses
200:400: Validation error401: Missing or invalid credential403: Insufficient scope404: Not found (also for resources of other accounts)429: Rate limit (rate_limited) or parallel processing quota (parallel_processing_limit) exceeded; seeRetry-After
Response fields (200)
| Field | Type | Required | Description |
|---|---|---|---|
data | array of object | yes | |
has_more | boolean | yes | |
next_cursor | string | null | yes |
curl -s "https://app.meetingize.com/api/v1/documents" \ -H "Authorization: Bearer $MEETINGIZE_API_KEY"Get a document
Section titled “Get a document”GET /v1/documents/{document_id}format=json (default) returns the metadata and the Markdown; md the Markdown file; pdf and docx a rendered file (generated on first request, then cached). Required scope: read:documents.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
document_id | path | string | yes | |
format | query | docx, json, md, pdf | json (default), md, pdf or docx. |
Responses
200:400: Validation error401: Missing or invalid credential403: Insufficient scope404: Not found (also for resources of other accounts)429: Rate limit (rate_limited) or parallel processing quota (parallel_processing_limit) exceeded; seeRetry-After
Response fields (200)
| Field | Type | Required | Description |
|---|---|---|---|
id | string | yes | |
object | string | yes | |
meeting_id | string (uuid) | yes | |
title | string | yes | |
template_id | string | null | ||
language | string | null | ||
model | string | null | ||
formats | array of string | yes | |
markdown | string | Only in GET /documents/{id} | |
created_at | string (date-time) | yes | |
updated_at | string (date-time) | yes |
curl -s "https://app.meetingize.com/api/v1/documents/<document_id>" \ -H "Authorization: Bearer $MEETINGIZE_API_KEY"Generate a document from a meeting
Section titled “Generate a document from a meeting”POST /v1/meetings/{meeting_id}/documentsGenerates a document (minutes, client report, proposal…) from the meeting AI report and transcript, either from a template (template_id, see GET /templates) or from your own instructions (prompt). Requires a completed meeting with a report (409 summary_not_ready otherwise, including transcribe_only meetings).
Response (202): a document_generation job. Poll GET /jobs/{id} until completed (then document_id is set; read it with GET /documents/{document_id}), or wait for the document.generated / document.failed webhook. Typical duration: 30 s to 2 min.
Parallel processing quota: same rule as the webapp. Your plan allows N simultaneous processings (meetings being processed + documents being generated, webapp and API together; Free 1 by default). Above it the request is refused with 429 parallel_processing_limit and Retry-After: 30; nothing is queued on our side, retry later.
Billing: consumption (audio minutes, LLM tokens) is measured after completion and debited from the monthly API allowance of your plan, then billed on demand if you enabled it (spend cap). If nothing can pay, the request is refused with 402 (insufficient_balance or spend_cap_reached).
Required scope: write:documents. Supports Idempotency-Key.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
Idempotency-Key | header | string | Optional unique key (max 255 characters, a UUID v4 is recommended) that makes the request safe to retry. If a network error leaves you unsure whether the request was received, send it again with the same key: if it was already processed, you get the original response again (header Idempotent-Replayed: true) and nothing is created twice (no duplicate meeting, no double billing). Keys are kept 24 hours per account. Same key with a different body: 422 idempotency_key_reused; same key while the first request is still being processed: 409 idempotency_key_in_use. Example: Idempotency-Key: 6f1c2a3e-9b7d-4c1e-8f2a-0d3b4c5e6f70. | |
meeting_id | path | string | yes |
Request body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
template_id | string | ||
prompt | string | ||
title | string | ||
instructions | string | ||
include_transcript | boolean | ||
metadata | object | null |
Responses
202:400: Validation error401: Missing or invalid credential402: Insufficient balance or spend cap reached403: Insufficient scope404: Not found (also for resources of other accounts)429: Rate limit (rate_limited) or parallel processing quota (parallel_processing_limit) exceeded; seeRetry-After
Response fields (202)
| Field | Type | Required | Description |
|---|---|---|---|
id | string | yes | |
object | string | yes | |
kind | meeting_processing, document_generation | yes | |
status | queued, processing, completed, failed, canceled | yes | queued -> processing -> completed | failed (or canceled) |
stage | queued, downloading, transcribing, summarizing, generating, done | null | Finer progress: meeting_processing = queued, downloading (audio_url), transcribing, summarizing, done; document_generation = queued, generating, done | |
progress | number | null | ||
meeting_id | string | null | ||
document_id | string | null | document_generation: doc_ | |
parent_job_id | string | null | document_generation started by a meeting creation (document_templates) | |
transcribe_only | boolean | null | ||
document_templates | array | null | ||
document_job_ids | array | null | meeting_processing: document jobs spawned after the AI report | |
error | object | null | ||
usage | object | null | ||
metadata | object | null | ||
created_at | string (date-time) | yes | |
started_at | string | null | ||
finished_at | string | null |
curl -s -X POST "https://app.meetingize.com/api/v1/meetings/<meeting_id>/documents" \ -H "Authorization: Bearer $MEETINGIZE_API_KEY" \ -H "Content-Type: application/json" \ -d '{}'