List meetings
Returns your meetings, newest first by default.
/meetings- Required scope
meetings:read- Authentication
Authorization: Bearer
Archived meetings are hidden unless archived says otherwise. List items omit participants, speakers and counts; fetch one meeting to get them. Every item carries the current transcript.revision, which takes time proportional to the length of its transcript, so pages of very long meetings answer slower: use a smaller limit when you walk your whole history.
Parameters
| Name | In | Type | Required | Default | Constraints | Description |
|---|---|---|---|---|---|---|
status | query | array<string> repeatable | no | – | – | Filter by derived status. Repeat the parameter to match several (status=ready&status=failed). Allowed values: draftrecordinguploadedprocessingreadyfailed |
archived | query | string | no | false | – | Return active (false), archived (true) or all (all) items. Allowed values: falsetrueall |
created_after | query | string | no | – | ≤ 64 characters | Only meetings created after this moment (exclusive). RFC 3339 date or date-time. Compared in milliseconds, like the timestamps in responses, so passing back a returned timestamp never returns that same item again. |
created_before | query | string | no | – | ≤ 64 characters | Only meetings created before this moment (exclusive). RFC 3339 date or date-time. Compared in milliseconds, like the timestamps in responses, so passing back a returned timestamp never returns that same item again. |
updated_after | query | string | no | – | ≤ 64 characters | Only meetings changed after this moment (exclusive). RFC 3339 date or date-time. Compared in milliseconds, like the timestamps in responses, so passing back a returned timestamp never returns that same item again. |
q | query | string | no | – | ≤ 200 characters | Search in the title. |
sort | query | string | no | created_at | – | Field to sort by. Allowed values: created_atupdated_at |
order | query | string | no | desc | – | Sort direction. Allowed values: descasc |
limit | query | integer | no | 20 | 1–100 · format: int32 | Page size, from 1 to 100. Default 20. Follow has_more, not the page size. |
cursor | query | string | no | – | ≤ 1024 characters | Opaque cursor from next_cursor of the previous page. Cursors are tied to the user, route, sort order and filters. |
Response
200
A page of meetings.
RateLimitThe most restrictive policy that applied:"name";r=<requests left>;t=<seconds>, wheretis the number of seconds until one more request is allowed (0 when the quota is full). Absent when no rate limiter ran for the request.RateLimit-PolicyThe rate-limit policies that applied to the request, one"name";q=<burst>;w=<seconds>item per policy, for example"read";q=10;w=2, "account";q=20;w=2:qis the burst quota andwthe seconds in which an empty quota refills. Sent on every authenticated response; absent when no rate limiter ran for the request, for example when it was rejected before the key was checked.Request-IdID of this request (req_prefix), the same asrequest_idin an error body. It is also sent asX-Request-ID. Quote it when you contact support.X-Client-Request-IdYour ownX-Client-Request-Idrequest header, echoed back. It is sent only when the value you sent has 1-128 characters from A-Z a-z 0-9 . _ : -.X-RateLimit-LimitBurst quota of the most restrictive policy (qinRateLimit-Policy). Absent when no rate limiter ran.X-RateLimit-RemainingRequests left in the most restrictive policy (rinRateLimit). Absent when no rate limiter ran.X-RateLimit-ResetSeconds until one more request is allowed in the most restrictive policy (tinRateLimit; 0 when the quota is full). It is a number of seconds, not a timestamp. Absent when no rate limiter ran.
Content type: application/json
objectstringrequiredAlways
list.dataarray<object>requiredThe items of this page.
17 fields
idstringrequiredPublic meeting ID (
mtg_prefix).objectstringrequiredAlways
meeting.titlestringrequiredMeeting title.
languagestring | nullrequiredLanguage code of the meeting, for example
lt.statusstringrequiredDerived status. Archived meetings keep the status of their latest processing run.
archivedbooleanrequiredWhether the meeting is archived.
created_atstringrequiredWhen the meeting was created.
updated_atstringrequiredWhen the meeting was last changed.
started_atstring | nullrequiredReal start time, or null while unknown. It is not aliased to
created_at.duration_msinteger | nullrequiredDuration in milliseconds, or null.
web_urlstringrequiredLink to the meeting in the Diko app.
processingobjectrequiredLatest processing run.
3 fields
statusstring | nullrequiredProcessing status, or null when no run exists.
progressnumber | nullrequiredProgress from 0 to 1, or null.
errorobject | nullrequiredError details when processing failed.
2 fields
codestringrequiredStable error code. Unknown internal codes are reported as
internal_error.messagestringrequiredExplanation in the language of
Accept-Language. Never an internal error text.
transcriptobjectrequiredTranscript summary.
4 fields
statusstringrequiredTranscript status.
revisionstring | nullrequiredOpaque token that changes whenever any segment changes.
segment_countintegerrequiredNumber of segments.
has_pending_editsbooleanrequiredWhether grammar suggestions are waiting for approval in Diko.
minutesobjectrequiredMinutes summary.
3 fields
statusstringrequiredMinutes status.
versioninteger | nullrequiredVersion number of the latest ready minutes.
verification_statusstring | nullrequiredResult of the evidence check: verified, repaired after a second pass, or unverified.
participantsarray<object>Participants. Only in the single-meeting response.
5 fields
idstringrequiredPublic participant ID (
prt_prefix).objectstringrequiredAlways
participant.namestring | nullrequiredParticipant name.
emailstring | nullrequiredParticipant e-mail address, if known.
rolestring | nullrequiredParticipant role, if known.
speakersarray<object>Speakers. Only in the single-meeting response.
4 fields
idstringrequiredPublic speaker ID (
spk_prefix).objectstringrequiredAlways
speaker.labelstringrequiredAutomatic label such as
SPEAKER_00.namestring | nullrequiredName assigned to the speaker, if any.
countsobjectCounts. Only in the single-meeting response.
4 fields
participantsintegerrequiredNumber of participants.
speakersintegerrequiredNumber of speakers.
action_itemsintegerrequiredNumber of action items.
commentsintegerrequiredNumber of comments.
has_morebooleanrequiredWhether more items follow. Keep paging while this is true.
next_cursorstring | nullrequiredCursor for the next page, or null when
has_moreis false.
Examples
Request
curl "https://api.diko.app/api/v1/meetings?status=ready&limit=20" \
-H "Authorization: Bearer $DIKO_API_KEY"import os
import requests
response = requests.get(
"https://api.diko.app/api/v1/meetings",
headers={"Authorization": f"Bearer {os.environ['DIKO_API_KEY']}"},
params={"status": ["ready"], "limit": 20},
timeout=30,
)
response.raise_for_status()
print(response.json())const response = await fetch("https://api.diko.app/api/v1/meetings?status=ready&limit=20", {
headers: {
Authorization: `Bearer ${process.env.DIKO_API_KEY}`,
},
})
if (!response.ok) throw new Error(`${response.status} ${await response.text()}`)
console.log(await response.json())Example response · 200 · application/json
{
"object": "list",
"data": [
{
"id": "mtg_5uF4g2Xu1i0qz3yAp0CP7W",
"object": "meeting",
"title": "Pardavimų aptarimas",
"language": "lt",
"status": "ready",
"archived": false,
"created_at": "2026-10-11T08:00:00.000Z",
"updated_at": "2026-10-11T09:30:00.000Z",
"started_at": null,
"duration_ms": 3541000,
"web_url": "https://studio.diko.app/meetings/c2171dae-bbc2-53b3-92b9-ba8c37850ff6",
"processing": {
"status": "complete",
"progress": 1,
"error": null
},
"transcript": {
"status": "ready",
"revision": "r_1bedcb71b3a1fdc6bfeeb92054fc6f92",
"segment_count": 412,
"has_pending_edits": false
},
"minutes": {
"status": "ready",
"version": 2,
"verification_status": "verified"
}
}
],
"has_more": false,
"next_cursor": null
}Errors
This endpoint can return these errors. Every code is described in the error catalog.
| HTTP | Code | Meaning | Retry? |
|---|---|---|---|
| 400 | invalid_parameter | A path, query or body parameter has an invalid value, a required field is missing or a field is unknown (unknown fields are rejected). `error.param` names the parameter. | no |
| 400 | invalid_cursor | The `cursor` is corrupted or was issued for another user, route, sort order or set of filters. | no |
| 401 | missing_api_key | The request has no `Authorization` header. | no |
| 401 | invalid_api_key | The header is unusable (a scheme other than `Bearer`, an empty key or more than one `Authorization` header) or the key is unknown or malformed (wrong structure or checksum). The response is identical in all these cases. | no |
| 401 | api_key_expired | The key has expired. | no |
| 401 | api_key_revoked | The key was revoked: manually, after a rotation grace period ended, because of a leak or because the account was disabled. | no |
| 401 | api_key_disabled | The key is temporarily disabled. | no |
| 402 | subscription_required | The account has no active paid access. | no |
| 403 | ip_not_allowed | The key has an IP allowlist and the request IP is not on it, or it cannot be determined reliably. | no |
| 403 | account_disabled | The account is disabled. | no |
| 403 | email_not_verified | The account e-mail address is not verified. | no |
| 403 | api_access_suspended | A Diko administrator suspended API access for this account. | no |
| 403 | plan_required | The plan does not include the API. `error.details.required_plans` lists `verslas`. | no |
| 403 | insufficient_scope | The key lacks the scope this endpoint needs. `error.details` contains `required_scopes` and `granted_scopes`. | no |
| 429 | rate_limit_exceeded | A rate-limit policy was exceeded. `error.details.policy` names it. | yes, after Retry-After |
| 500 | internal_error | An internal server error. | conditionally |
| 503 | service_unavailable | The service is temporarily busy, for example because of database load. | yes, after Retry-After |