# Leidimai

> Trys leidimai (scopes), kuriuos pasirenkate kurdami raktą, ir ką kiekvienas atveria.

Šaltinis: https://diko.app/api-docs/leidimai

## Leidimų lentelė

Leidimai (angl. *scopes*) nustato, kuriuos endpointus gali kviesti raktas. Juos pasirenkate kurdami raktą, o vėliau pakeisti negalima: reikia naujo rakto.

| Leidimas | Leidžia | Įvykiai |
|---|---|---|
| `meetings:read` | visus `GET /meetings*` endpointus | `meeting.*` |
| `library:read` | `GET /library/transcripts*` ir `GET /library/imports*` | `library.*` |
| `library:write` | `POST /library/imports` ir `POST /library/imports/{import_id}/cancel`. **Apima `library:read`** | `library.*` |

`GET /` ir `GET /me` veikia su bet kuriuo galiojančiu raktu. `GET /me` visada paslepia paskyros el. paštą, o kreditų likutį grąžina tik raktui su `library:write`. Programėlėje leidimai vadinami „Susitikimai – skaityti“, „Biblioteka – skaityti“ ir „Biblioteka – importuoti“.

## Šablonai

Kurdami raktą galite pasirinkti šabloną arba pažymėti leidimus patys:

| Šablonas | Leidimai |
|---|---|
| Tik skaitymas | `meetings:read`, `library:read` |
| Skaitymas ir importas | `meetings:read`, `library:write` |

## Kuris endpointas ko reikalauja

| Endpointas | Leidimas |
|---|---|
| [`GET /`](https://diko.app/api-docs/zinynas/get-api-index.md) | rakto nereikia |
| [`GET /me`](https://diko.app/api-docs/zinynas/get-me.md) | bet kuris galiojantis raktas (`credits` tik su `library:write`) |
| [`GET /meetings`](https://diko.app/api-docs/zinynas/list-meetings.md), [`/meetings/{meeting_id}`](https://diko.app/api-docs/zinynas/get-meeting.md), [`/transcript`](https://diko.app/api-docs/zinynas/get-meeting-transcript.md), [`/minutes`](https://diko.app/api-docs/zinynas/get-meeting-minutes.md), [`/action-items`](https://diko.app/api-docs/zinynas/list-meeting-action-items.md) | `meetings:read` |
| [`GET /library/transcripts`](https://diko.app/api-docs/zinynas/list-library-transcripts.md), [`/library/transcripts/{transcript_id}`](https://diko.app/api-docs/zinynas/get-library-transcript.md), [`/transcript`](https://diko.app/api-docs/zinynas/get-library-transcript-transcript.md) | `library:read` |
| [`GET /library/imports`](https://diko.app/api-docs/zinynas/list-library-imports.md), [`/library/imports/{import_id}`](https://diko.app/api-docs/zinynas/get-library-import.md) | `library:read` |
| [`POST /library/imports`](https://diko.app/api-docs/zinynas/create-library-import.md), [`POST /library/imports/{import_id}/cancel`](https://diko.app/api-docs/zinynas/cancel-library-import.md) | `library:write` |
| [`GET /events`](https://diko.app/api-docs/zinynas/list-events.md), [`GET /events/{event_id}`](https://diko.app/api-docs/zinynas/get-event.md) | bet kuris raktas; rezultatai filtruojami pagal leidimus |

## Kaip pasirinkti

- **Duokite mažiausią reikalingą leidimą.** Ataskaitų ar CRM sinchronizavimo integracijai pakanka „Tik skaitymas“.
- **Importams reikia `library:write`.** Jis jau apima bibliotekos skaitymą, todėl importuotojas gali pats patikrinti importo būseną ir perskaityti rezultatą.
- **Vienas raktas vienai integracijai.** Taip lengviau atšaukti tik tą raktą, kurio paslaptis nutekėjo, ir matyti, kuri sistema ką naudoja.

## Trūkstamas leidimas

Jei raktas neturi endpointui reikalingo leidimo, API grąžina 403 [`insufficient_scope`](https://diko.app/api-docs/klaidos.md#insufficient_scope). Atsakyme nurodyta, ko reikia ir ką raktas turi (pavyzdys su `Accept-Language: lt`):

```http
HTTP/1.1 403 Forbidden
WWW-Authenticate: Bearer realm="diko", error="insufficient_scope", scope="meetings:read"
```

```json
{
  "type": "error",
  "error": {
    "type": "permission_error",
    "code": "insufficient_scope",
    "message": "API raktas neturi šiam endpointui reikalingo leidimo.",
    "doc_url": "https://diko.app/api-docs/klaidos#insufficient_scope",
    "details": {
      "required_scopes": ["meetings:read"],
      "granted_scopes": ["library:read"]
    }
  },
  "request_id": "req_QBPIQ5QTIWAUYTMDNCLD7CMKBE"
}
```

Sprendimas: sukurkite naują raktą su reikiamu leidimu ir atnaujinkite savo sistemą. Seną raktą, jei jis nebereikalingas, atšaukite.

## Leidimai ir įvykių srautas

`GET /events` rodo tik tų šeimų įvykius, kurias raktas gali skaityti: `meeting.*` su `meetings:read`, `library.*` su `library:read` arba `library:write`. Jei raktas neskaito nė vienos šeimos, sąrašas tuščias, o ne 403.

## Svetimi resursai

Raktas mato tik savo savininko duomenis. Svetimas, neegzistuojantis ar neteisingai užkoduotas ID visada grąžina 404 [`not_found`](https://diko.app/api-docs/klaidos.md#not_found), o ne 403, kad API neatskleistų, ar toks resursas egzistuoja.
