Get meeting minutes
Returns the latest ready version of the minutes.
/meetings/{meeting_id}/minutes- Required scope
meetings:read- Authentication
Authorization: Bearer
When no ready version exists the response is still 200 and status explains why: none, generating, failed, insufficient or unavailable.
Parameters
| Name | In | Type | Required | Default | Constraints | Description |
|---|---|---|---|---|---|---|
meeting_id | path | string | required | – | 26–26 characters · pattern: ^mtg_[0-9A-Za-z]{22}$ | Public meeting ID (mtg_ prefix). |
Response
200
The minutes.
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
minutes.meeting_idstringrequiredID of the meeting.
statusstringrequiredMinutes status.
reasonstring | nullrequiredReason when the status is
insufficient.versioninteger | nullrequiredVersion number.
generated_atstring | nullrequiredWhen this version was generated.
languagestring | nullrequiredLanguage of the minutes.
summarystring | nullrequiredSummary text.
key_pointsarray<object>requiredKey points.
2 fields
textstringrequiredThe statement.
timestamps_msarray<integer>requiredMoments in the recording that support the statement, in milliseconds.
decisionsarray<object>requiredDecisions.
2 fields
textstringrequiredThe statement.
timestamps_msarray<integer>requiredMoments in the recording that support the statement, in milliseconds.
action_itemsarray<object>requiredGenerated action items.
11 fields
objectstringrequiredAlways
action_item.idstring | nullrequiredPublic ID (
act_prefix). Null for generated items.sourcestringrequiredWhere the item comes from.
textstringrequiredTask title.
descriptionstring | nullrequiredLonger description, if any.
statusstringrequiredTask status. Generated items are always
open.assignee_namestring | nullrequiredName of the person responsible.
due_textstring | nullrequiredFree-text deadline from generated minutes.
due_atstring | nullrequiredDeadline of a manual item.
timestamps_msarray<integer>requiredMoments in the recording the item comes from, in milliseconds.
created_atstring | nullrequiredWhen a manual item was created. Null for generated items.
open_questionsarray<object>requiredOpen questions.
2 fields
textstringrequiredThe statement.
timestamps_msarray<integer>requiredMoments in the recording that support the statement, in milliseconds.
sectionsarray<object>requiredAdditional sections.
2 fields
titlestringrequiredSection title.
contentstringrequiredSection text.
verification_statusstring | nullrequiredResult of the evidence check.
Examples
Request
curl "https://api.diko.app/api/v1/meetings/mtg_0aZ1bY2cX3dW4eV5fU6gT7/minutes" \
-H "Authorization: Bearer $DIKO_API_KEY"import os
import requests
response = requests.get(
"https://api.diko.app/api/v1/meetings/mtg_0aZ1bY2cX3dW4eV5fU6gT7/minutes",
headers={"Authorization": f"Bearer {os.environ['DIKO_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())const response = await fetch("https://api.diko.app/api/v1/meetings/mtg_0aZ1bY2cX3dW4eV5fU6gT7/minutes", {
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": "minutes",
"meeting_id": "mtg_5uF4g2Xu1i0qz3yAp0CP7W",
"status": "ready",
"reason": null,
"version": 2,
"generated_at": "2026-10-11T09:30:00.000Z",
"language": "lt",
"summary": "Aptartas pasiūlymo kainodaros pakeitimas ir kiti žingsniai iki mėnesio pabaigos.",
"key_points": [
{
"text": "Nauja kainodara įsigalioja nuo lapkričio 1 d.",
"timestamps_ms": []
}
],
"decisions": [
{
"text": "Pasiūlymą klientui išsiunčiame šią savaitę.",
"timestamps_ms": [
754000
]
}
],
"action_items": [
{
"object": "action_item",
"id": null,
"source": "generated",
"text": "Išsiųsti pasiūlymą",
"description": null,
"status": "open",
"assignee_name": "Jonas",
"due_text": null,
"due_at": null,
"timestamps_ms": [],
"created_at": null
}
],
"open_questions": [
{
"text": "Ar nuolaida taikoma ir esamiems klientams?",
"timestamps_ms": []
}
],
"sections": [
{
"title": "Kainodara",
"content": "Kainos peržiūrimos kartą per ketvirtį.\nNuolaidos taikomos nuo trečios licencijos."
}
],
"verification_status": "verified"
}Errors
This endpoint can return these errors. Every code is described in the error catalog.
| HTTP | Code | Meaning | Retry? |
|---|---|---|---|
| 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 |
| 404 | not_found | The resource does not exist, does not belong to your account or its ID is encoded incorrectly. | 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 |