Skip to content

Quick start

Five minutes from sign-up to the first result.

1. Sign in and create a project

Open console.gapi.uz, sign in with Google and create a project. A project is the settings, tokens and recordings of one customer or one integration.

2. Upload the first recording in the cabinet

On the project's front page drop an mp3, wav, ogg/opus, m4a, flac or webm file. Recognition starts at once, there is no button to press. While it works you see two steps: "Upload", with the percentage of the file that has left your machine, and "Recognition", with the seconds of audio already read. The result opens on the same page: text by utterance, speakers, and a player that plays exactly the utterance you click.

Options are set before the upload: open "Transcription options" and switch something on or off for the recordings you send next. The same block asks whether this is a call and whether it is inbound or outbound: that helps tell the client from the manager.

3. Create a token

The shortest way is the "Connect over the API" block on the project page: with no token in the project one is created for you and the examples come with it already in place. Save the token; if you need it again, you can copy it in full from the "API tokens" tab at any time. Every token of the project lives on the "API tokens" tab, where you can issue more. Every API request carries the header:

Authorization: Bearer <token>

4. Send a recording through the API

bash
curl -X POST https://console.gapi.uz/v1/jobs \
  -H "Authorization: Bearer $TOKEN" \
  -F file=@call.mp3

Response:

json
{"id": "41f79b78-…", "state": "queued", "class": "batch", "estimated_seconds": 283,
 "created_at": "2026-09-10T08:14:03Z", "result_url": "https://console.gapi.uz/v1/jobs/41f79b78-…/result"}

5. Fetch the result

Poll the job every couple of seconds until state is done, then take the result:

bash
curl https://console.gapi.uz/v1/jobs/41f79b78-… -H "Authorization: Bearer $TOKEN"
# {"id": "…", "state": "done", …}

curl https://console.gapi.uz/v1/jobs/41f79b78-…/result -H "Authorization: Bearer $TOKEN"

The result has text (everything) and segments (utterances with time and speaker). What else is there: Result format.

Polling is the simplest way, not the best one. GET /v1/jobs/{id}/events sends utterances as they are finished, so the text is there while the conversation is still going rather than only at the end. And if nothing is waiting on it, give a webhook_url and we knock instead. Both: API.

Vocabulary: the names that have to be recognised

The company name, products, brands, the names of your staff do not occur in ordinary speech, so the model hears a similar-sounding word in their place. The project vocabulary fixes that: the terms on the list start being recognised in recordings more often. It does not change the tariff and applies to every later recording in the project.

In the cabinet the list is on the "Vocabulary" tab. Through the API:

bash
curl -X PUT https://console.gapi.uz/v1/vocabulary \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{"terms": ["MetaSell", "Bitrix24", "amoCRM", "Toshkent"]}'

From 1 to 20 terms, at most 4 words each. The list is deliberately short: the shorter it is, the more often the model lands on the word you meant, so put in what is actually spoken in the calls rather than your whole catalogue.

The vocabulary belongs to the project: a job takes a copy of the active version when it is created, so an edit never rewrites work already sent. Every save is a new version and the history is visible in the cabinet, so a bad edit is a step back rather than a loss.

When the terms are wanted for one recording only, send them with the file in the upload's vocabulary field. Such a list works on that job and on nothing else: the project vocabulary does not change. In detail: API.

Short recordings in one request

Recordings up to 5 minutes can be recognised synchronously, without a job:

bash
curl -X POST https://console.gapi.uz/v1/transcribe \
  -H "Authorization: Bearer $TOKEN" \
  -F file=@short.mp3

The response comes back at once with the result inside.

Settings for one request

Project settings apply to every recording. For one recording you can change them with the settings field:

bash
curl -X POST https://console.gapi.uz/v1/jobs \
  -H "Authorization: Bearer $TOKEN" \
  -F file=@call.mp3 \
  -F 'settings={"speaker_roles":true,"call_direction":"inbound","emotion":false,"pii":false}'

Every key is described under Options, and ready-made sets for calls, meetings and interviews are in Use cases.