# FAQ

> Frequent questions: empty lists, what a key sees, the IP allowlist, imports and more.

Source: https://diko.app/en/api-docs/faq

## Why is my list empty?

An empty `data` usually means that filters or scopes exclude everything, not that the API is broken. Check:

- **Archived items are hidden.** `GET /meetings` and `GET /library/transcripts` return only non-archived items by default. Add `archived=all`.
- **Filters.** `status`, `q`, `created_after`, `source_type` and other parameters narrow the result. Try without them.
- **Another user.** A key sees only its owner's data. Call `GET /me` and check the masked `user.email` (for example `j***@example.com`; the full address is never returned to a key): is it the account that holds your meetings?
- **Scopes.** `GET /events` shows only the events of the families the key can read and returns an empty list, not 403, when it can read none. Check the key's `scopes`.
- **`cursor=latest`.** The first `GET /events` with `latest` always returns an empty page: it is only a starting point. Use the `next_cursor` it returns.
- **Events from before your first key.** Diko records events only while the account has a key that is not revoked or an enabled webhook endpoint. Meetings that finished earlier produce no events, so a first run does not back-fill them. Read them with `GET /meetings`.
- **Paging.** A page can be short while `has_more` is still `true`. See [Pagination](https://diko.app/en/api-docs/pagination.md).

## What does a key see?

A key sees only the meetings and the library (YouTube videos and uploaded files) of **its owner**. Teams do not share data, so a teammate's meetings are not visible to your key. Another account's or a non-existent ID returns 404 [`not_found`](https://diko.app/en/api-docs/errors.md#not_found), not 403. The [scopes](https://diko.app/en/api-docs/scopes.md) decide which endpoints a key can call.

## What happens to keys when someone leaves a team?

Keys belong personally to you, so they are **not removed**. But every request checks the plan again: if you no longer have a Verslas plan, you get 403 [`plan_required`](https://diko.app/en/api-docs/errors.md#plan_required). A team owner or administrator no longer sees the key metadata of a **former** member, because that person is no longer a current member. More: [Security guidelines](https://diko.app/en/api-docs/security.md#membership-and-plan-changes).

## Why do I get `ip_not_allowed`?

The key has an IP allowlist and your request IP is not on it, or Diko does not believe the IP (a key with a list is accepted only from a reliably determined IP). The usual causes:

- you call `https://studio.diko.app/api/v1`. Diko never trusts the client IP on that domain, so a key with an allowlist is always refused there. Use `https://api.diko.app/api/v1`;
- your server calls from a different outbound address (NAT, a cloud platform, another region);
- the request goes over IPv6 while the list holds only IPv4 (or the other way round);
- the address changed after a redeploy.

The fix: call `GET /me` with a key that has no IP restriction and read `request.ip` and `request.ip_trusted`. If `ip_trusted` is `false`, check the base URL. If it is `true`, update the list in the app. See [IP allowlist](https://diko.app/en/api-docs/security.md#ip-allowlist).

## Why do I get 403 `plan_required` or 402 `subscription_required`?

The API is available only on the **Verslas** plan (`required_plans` lists `verslas`). `subscription_required` means the account has no paid access at all, `plan_required` means the plan does not include the API. `GET /me` is not subject to the plan and shows `access.allowed` and `access.reason`, so it is the right call for diagnostics.

## Why does an import stay `queued` for a long time?

An import waits in the internal processing queue. When the queue is busy, the import stays `queued` and is tried again later. That is not an error. Check `queue_position` and `stage` (`GET /library/imports/{import_id}`). An import that stays `queued` for more than 24 hours, or `processing` for more than 6 hours, ends as `failed` with `transcription_timeout`. Use [webhooks](https://diko.app/en/api-docs/webhooks.md) instead of polling. All statuses, stages and failure codes are in the [quickstart](https://diko.app/en/api-docs/quickstart.md#import-statuses-and-errors).

## Does an import cost credits?

If the transcript is already in your library or in the shared cache, the import finishes at once with `reused: true` and **no credits are used**. In other cases the credit balance is checked before it starts: if it is not enough, you get 402 [`insufficient_credits`](https://diko.app/en/api-docs/errors.md#insufficient_credits). `GET /me` shows the balance (`credits.available`) to a key with the `library:write` scope; for other keys `credits` is `null`. Read requests use no credits. Credit rates are on the [pricing page](https://diko.app/kainos) (in Lithuanian).

## Can I use a key in the browser?

No. The API sends no `Access-Control-*` headers and `OPTIONS` returns 405. Besides, a key in browser code is visible to everyone. Call the API from your own server and give the client only what it needs.

## How do I get SRT or VTT?

`GET /meetings/{meeting_id}/transcript?format=srt` (or `vtt`, `text`). The same works for library transcripts: [`GET /library/transcripts/{transcript_id}/transcript`](https://diko.app/en/api-docs/reference/get-library-transcript-transcript.md). These formats return the whole transcript and use the stricter `export` limit.

## Why do I get `transcript_changed`?

The transcript changed between your page requests (for example somebody approved grammar corrections). Read again without a `cursor`, or use `format=text`. See [Pagination](https://diko.app/en/api-docs/pagination.md#transcripts-and-revision).

## Why do I get `resource_not_ready`?

The meeting transcript does not exist yet because the meeting is still being processed. Wait for the `meeting.ready` event or check `transcript.status` in the meeting object.

## Why `route_not_found` when the path looks right?

A trailing `/` counts as a different path: `/api/v1/me/` returns 404. Also check that the base URL is `https://api.diko.app/api/v1`.

## Can I create webhooks through the API?

No. You manage webhook endpoints only in the Diko app, under **Nustatymai → API → Webhooks** (`/settings/api/webhooks`). You can have at most 10 endpoints per account. This is deliberate: a leaked key cannot redirect your data to a foreign address. Webhook management through the API is planned for the future, see the [Changelog](https://diko.app/en/api-docs/changelog.md).

## Is there a sandbox?

No. `dk_test_` keys are reserved for the future, and a v1 key always works against real data. For testing you can create a key with the **Tik skaitymas** (Read only) template and a short expiry.

## What should I include when I contact support?

Include the response's `request_id` (`req_...`) or the `Request-Id` header, the time of the request and the endpoint. Never send the key itself.
