Importuoti YouTube vaizdo įrašą
Įtraukia YouTube vaizdo įrašą į transkribavimo eilę ir prideda jį į jūsų biblioteką.
/library/imports- Reikalingas leidimas
library:write- Autentifikacija
Authorization: Bearer
Užklausa niekada nelaukia transkribavimo pabaigos. Tikrinkite GET /library/imports/{import_id} (arba prenumeruokite įvykius library.import.*), kol status taps succeeded, failed arba canceled.
* Jei vaizdo įrašas jau yra jūsų bibliotekoje arba Diko jį jau transkribavo, atsakymas yra 201 su reused: true, o kreditai nenaudojami. Tai vis tiek importas: jis įskaitomas į paros ribą.
* Jei to paties vaizdo įrašo importas dar vyksta, atsakymas yra 200 su tuo importu.
* Kitu atveju atsakymas yra 201 su antrašte Location. Kreditai tikrinami dabar ir dar kartą prieš mokamą darbą. Jei eilėje per daug importų arba pasiekta paros riba, atsakymas yra 429 queue_limit_exceeded (error.details.limit nurodo, kuri riba).
* Vaizdo įrašas be subtitrų transkribuojamas kalbos atpažinimu bendroje Diko eilėje. Tie darbai naudoja tas pačias naudotojo transkribavimo vietas kaip jūsų įkėlimai programėlėje, bet niekada nepaima paskutinės laisvos vietos. Ji lieka jūsų įkėlimams ir įrašams. Darbas gali laukti laisvos vietos; tuo metu importas lieka queued arba processing.
* Atšaukus, išjungus ar ištrynus API raktą, kuris sukūrė importą, rotavus jį be persidengimo arba atšaukus raktą dėl nutekėjimo, to rakto importai, kurie dar eilėje ar vykdomi, atšaukiami. Sustabdžius API prieigą, taip pat atšaukiami visos paskyros importai. Importas eilėje iškart tampa canceled, vykdomas tampa canceling ir sustojus darbui baigiasi kaip canceled (įvykis library.import.canceled). Rotacija su persidengimu importų nesustabdo. Jau atliktas darbas apmokestinamas kaip įprasta.
Siųskite antraštę Idempotency-Key, kad pakartojimas būtų saugus.
Parametrai
| Pavadinimas | Vieta | Tipas | Privalomas | Numatytoji reikšmė | Apribojimai | Aprašas |
|---|---|---|---|---|---|---|
Idempotency-Key | header | string | ne | – | 8–255 simbolių · pattern: ^[A-Za-z0-9_\-:.]{8,255}$ | Padaro pakartojimą saugų: tas pats raktas su ta pačia užklausa grąžina pirmąjį atsakymą (Idempotent-Replayed: true); kita užklausa su tuo pačiu raktu atmetama su 422 idempotency_key_reused. 8–255 simboliai iš A-Z a-z 0-9 _ - : . Saugomas 24 val. |
Užklausos turinys
Importuotinas vaizdo įrašas.
Turinio tipas: application/json
urlstringprivalomasYouTube vaizdo įrašo nuoroda (youtube.com, www.youtube.com, m.youtube.com, music.youtube.com arba youtu.be).
languagestring | nullUžuomina subtitrų kalbai ir kalbos atpažinimui. Praleiskite, kad būtų naudojama jūsų numatytoji Diko kalba.
Atsakymas
201
Importas sukurtas (queued) arba transkripcija jau egzistavo (succeeded su reused: true).
Idempotent-Replayedtrue, kai atsakymas yra ankstesnės užklausos su tuo pačiuIdempotency-Keypakartojimas.LocationSukurto importo URL.RateLimitLabiausiai ribojanti taikyta politika:"pavadinimas";r=<liko užklausų>;t=<sekundės>.t– sekundės iki kitos leidžiamos užklausos (0, kai talpa pilna). Nesiunčiama, kai užklausai ribotuvas netaikytas.RateLimit-PolicyUžklausai taikytos ribų politikos, po vieną elementą"pavadinimas";q=<pradinė talpa>;w=<sekundės>kiekvienai, pavyzdžiui,"read";q=10;w=2, "account";q=20;w=2:q– pradinė talpa,w– sekundės, per kurias tuščia talpa vėl prisipildo. Siunčiama su kiekvienu autentifikuotu atsakymu; nesiunčiama, kai užklausai ribotuvas netaikytas, pavyzdžiui, kai ji atmesta dar nepatikrinus rakto.Request-IdŠios užklausos ID (priešdėlisreq_), toks pat kaiprequest_idklaidos atsakyme. Siunčiamas ir kaipX-Request-ID. Kreipdamiesi pagalbos nurodykite jį.X-Client-Request-IdJūsų siųsta užklausos antraštėX-Client-Request-Id, grąžinta atgal. Grąžinama tik tada, kai jūsų reikšmė turi 1–128 simbolius iš A-Z a-z 0-9 . _ : -.X-RateLimit-LimitLabiausiai ribojančios politikos pradinė talpa (qantraštėjeRateLimit-Policy). Nesiunčiama, kai užklausai ribotuvas netaikytas.X-RateLimit-RemainingLabiausiai ribojančioje politikoje likusios užklausos (rantraštėjeRateLimit). Nesiunčiama, kai užklausai ribotuvas netaikytas.X-RateLimit-ResetSekundės iki kitos leidžiamos užklausos labiausiai ribojančioje politikoje (tantraštėjeRateLimit; 0, kai talpa pilna). Tai sekundžių skaičius, o ne laiko žyma. Nesiunčiama, kai užklausai ribotuvas netaikytas.
Turinio tipas: application/json
idstringprivalomasViešas importo ID (priešdėlis
imp_).objectstringprivalomasVisada
library_import.statusstringprivalomasImporto būsena.
stagestring | nullprivalomasDabartinis etapas; tik kai
processing.queue_positioninteger | nullprivalomasVieta tarp jūsų eilėje esančių importų (1 = kitas);
null, kai importas nėraqueued.urlstringprivalomasKanoninis YouTube URL.
youtube_video_idstringprivalomasYouTube vaizdo įrašo ID.
languagestring | nullprivalomasIšsiųsta kalbos užuomina arba
null.reusedbooleanprivalomastrue, kai vaizdo įrašas jau buvo jūsų bibliotekoje arba bendroje Diko talpykloje, todėl kreditai nenaudoti.transcript_idstring | nullprivalomasBibliotekos transkripcijos ID (priešdėlis
trn_), kai importassucceeded; kitaipnull.errorobject | nullprivalomasKlaidos duomenys, kai importas
failed; kitaipnull.2 laukai
codestringprivalomasStabilus klaidos kodas. Nežinomi vidiniai kodai pateikiami kaip
internal_error.messagestringprivalomasPaaiškinimas
Accept-Languagekalba.
created_atstringprivalomasKada importas sukurtas.
updated_atstringprivalomasKada importas paskutinį kartą pasikeitė.
completed_atstring | nullprivalomasKada importas pasiekė galutinę būseną; kitaip
null.
200
To paties vaizdo įrašo importas jau vyksta; grąžinamas esamas importas.
Content-LocationEsamo importo, kurį aprašo šis atsakymas, URL.Idempotent-Replayedtrue, kai atsakymas yra ankstesnės užklausos su tuo pačiuIdempotency-Keypakartojimas.RateLimitLabiausiai ribojanti taikyta politika:"pavadinimas";r=<liko užklausų>;t=<sekundės>.t– sekundės iki kitos leidžiamos užklausos (0, kai talpa pilna). Nesiunčiama, kai užklausai ribotuvas netaikytas.RateLimit-PolicyUžklausai taikytos ribų politikos, po vieną elementą"pavadinimas";q=<pradinė talpa>;w=<sekundės>kiekvienai, pavyzdžiui,"read";q=10;w=2, "account";q=20;w=2:q– pradinė talpa,w– sekundės, per kurias tuščia talpa vėl prisipildo. Siunčiama su kiekvienu autentifikuotu atsakymu; nesiunčiama, kai užklausai ribotuvas netaikytas, pavyzdžiui, kai ji atmesta dar nepatikrinus rakto.Request-IdŠios užklausos ID (priešdėlisreq_), toks pat kaiprequest_idklaidos atsakyme. Siunčiamas ir kaipX-Request-ID. Kreipdamiesi pagalbos nurodykite jį.X-Client-Request-IdJūsų siųsta užklausos antraštėX-Client-Request-Id, grąžinta atgal. Grąžinama tik tada, kai jūsų reikšmė turi 1–128 simbolius iš A-Z a-z 0-9 . _ : -.X-RateLimit-LimitLabiausiai ribojančios politikos pradinė talpa (qantraštėjeRateLimit-Policy). Nesiunčiama, kai užklausai ribotuvas netaikytas.X-RateLimit-RemainingLabiausiai ribojančioje politikoje likusios užklausos (rantraštėjeRateLimit). Nesiunčiama, kai užklausai ribotuvas netaikytas.X-RateLimit-ResetSekundės iki kitos leidžiamos užklausos labiausiai ribojančioje politikoje (tantraštėjeRateLimit; 0, kai talpa pilna). Tai sekundžių skaičius, o ne laiko žyma. Nesiunčiama, kai užklausai ribotuvas netaikytas.
Turinio tipas: application/json
idstringprivalomasViešas importo ID (priešdėlis
imp_).objectstringprivalomasVisada
library_import.statusstringprivalomasImporto būsena.
stagestring | nullprivalomasDabartinis etapas; tik kai
processing.queue_positioninteger | nullprivalomasVieta tarp jūsų eilėje esančių importų (1 = kitas);
null, kai importas nėraqueued.urlstringprivalomasKanoninis YouTube URL.
youtube_video_idstringprivalomasYouTube vaizdo įrašo ID.
languagestring | nullprivalomasIšsiųsta kalbos užuomina arba
null.reusedbooleanprivalomastrue, kai vaizdo įrašas jau buvo jūsų bibliotekoje arba bendroje Diko talpykloje, todėl kreditai nenaudoti.transcript_idstring | nullprivalomasBibliotekos transkripcijos ID (priešdėlis
trn_), kai importassucceeded; kitaipnull.errorobject | nullprivalomasKlaidos duomenys, kai importas
failed; kitaipnull.2 laukai
codestringprivalomasStabilus klaidos kodas. Nežinomi vidiniai kodai pateikiami kaip
internal_error.messagestringprivalomasPaaiškinimas
Accept-Languagekalba.
created_atstringprivalomasKada importas sukurtas.
updated_atstringprivalomasKada importas paskutinį kartą pasikeitė.
completed_atstring | nullprivalomasKada importas pasiekė galutinę būseną; kitaip
null.
Pavyzdžiai
Užklausa
curl -X POST "https://api.diko.app/api/v1/library/imports" \
-H "Authorization: Bearer $DIKO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"url":"https://www.youtube.com/watch?v=dQw4w9WgXcQ","language":"lt"}'import os
import uuid
import requests
response = requests.post(
"https://api.diko.app/api/v1/library/imports",
headers={
"Authorization": f"Bearer {os.environ['DIKO_API_KEY']}",
"Idempotency-Key": str(uuid.uuid4()), # create once per operation, reuse on retries
},
json={
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"language": "lt",
},
timeout=30,
)
response.raise_for_status()
print(response.json())const response = await fetch("https://api.diko.app/api/v1/library/imports", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.DIKO_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(), // create once per operation, reuse on retries
},
body: JSON.stringify({
url: "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
language: "lt",
}),
})
if (!response.ok) throw new Error(`${response.status} ${await response.text()}`)
console.log(await response.json())Atsakymo pavyzdys · 201 · application/json
{
"id": "imp_6Mfj7Oxm4MfxGGmZRhiUQf",
"object": "library_import",
"status": "queued",
"stage": null,
"queue_position": 1,
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"youtube_video_id": "dQw4w9WgXcQ",
"language": "lt",
"reused": false,
"transcript_id": null,
"error": null,
"created_at": "2026-10-11T09:30:00.000Z",
"updated_at": "2026-10-11T09:30:00.100Z",
"completed_at": null
}Atsakymo pavyzdys · 200 · application/json
{
"id": "imp_6Mfj7Oxm4MfxGGmZRhiUQf",
"object": "library_import",
"status": "queued",
"stage": null,
"queue_position": 1,
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"youtube_video_id": "dQw4w9WgXcQ",
"language": "lt",
"reused": false,
"transcript_id": null,
"error": null,
"created_at": "2026-10-11T09:30:00.000Z",
"updated_at": "2026-10-11T09:30:00.100Z",
"completed_at": null
}Klaidos
Šis endpointas gali grąžinti šias klaidas. Visų kodų aprašai yra klaidų kataloge.
| HTTP | Kodas | Reikšmė | Kartoti? |
|---|---|---|---|
| 400 | invalid_request | Užklausa neatitinka formato: užklausos turinys nėra tinkamas JSON, jo nėra, jis nėra JSON objektas arba `Content-Length` nėra skaičius. Trūkstamas privalomas laukas ar nežinomas laukas yra `invalid_parameter`. | ne |
| 400 | invalid_parameter | Kelio, užklausos ar turinio parametro reikšmė netinkama, privalomo lauko trūksta arba laukas nežinomas (nežinomi laukai atmetami). Lauke `error.param` nurodytas parametras. | ne |
| 400 | invalid_youtube_url | URL nėra palaikomas vieno YouTube vaizdo įrašo adresas. | ne |
| 400 | idempotency_key_invalid | `Idempotency-Key` netinkamas: reikia 8–255 simbolių iš aibės `A-Z a-z 0-9 _ - : .`. | ne |
| 401 | missing_api_key | Užklausoje nėra antraštės `Authorization`. | ne |
| 401 | invalid_api_key | Antraštė netinkama (ne `Bearer` schema, tuščias raktas arba kelios antraštės `Authorization`) arba raktas nežinomas ar blogo formato (neatitinka struktūros ar kontrolinės sumos). Atsakymas visais šiais atvejais vienodas. | ne |
| 401 | api_key_expired | Rakto galiojimas pasibaigė. | ne |
| 401 | api_key_revoked | Raktas atšauktas: rankiniu būdu, pasibaigus rotacijos persidengimui, dėl nutekėjimo arba išjungus paskyrą. | ne |
| 401 | api_key_disabled | Raktas laikinai išjungtas. | ne |
| 402 | subscription_required | Paskyra neturi aktyvios apmokėtos prieigos. | ne |
| 402 | insufficient_credits | Importui nepakanka kreditų. | ne |
| 402 | team_member_limit_reached | Pasiekta jūsų kreditų riba komandoje. | ne |
| 403 | ip_not_allowed | Raktas turi IP apribojimą, o užklausos IP nėra sąraše arba jo nepavyksta nustatyti patikimai. | ne |
| 403 | account_disabled | Paskyra išjungta. | ne |
| 403 | email_not_verified | Paskyros el. paštas nepatvirtintas. | ne |
| 403 | api_access_suspended | Diko administratorius sustabdė šios paskyros API prieigą. | ne |
| 403 | plan_required | Planas neapima API. `error.details.required_plans` yra `verslas`. | ne |
| 403 | insufficient_scope | Raktas neturi endpointui reikalingo leidimo. `error.details` turi `required_scopes` ir `granted_scopes`. | ne |
| 403 | team_member_disabled | Jūsų narystė komandoje išjungta. | ne |
| 408 | request_timeout | Užklausos turinys nebuvo gautas per ribotą laiką (numatyta 10 s). Taip nutinka, kai klientas siunčia turinį per lėtai arba sustoja per siuntimą. Nieko nesukurta. | taip |
| 409 | idempotency_in_progress | Ta pati užklausa su tuo pačiu `Idempotency-Key` dar vykdoma. | taip, po Retry-After |
| 413 | request_too_large | Užklausos turinys didesnis nei 64 KB. | ne |
| 415 | unsupported_media_type | POST užklausos turinys turi būti `application/json`. | ne |
| 422 | idempotency_key_reused | Tas pats `Idempotency-Key` panaudotas su kitu metodu, keliu ar turiniu. | ne |
| 429 | queue_limit_exceeded | Pasiekta importų talpa: iki 10 aktyvių vienam naudotojui, 200 iš viso arba 500 per parą. | taip, po Retry-After |
| 429 | rate_limit_exceeded | Viršyta ribų politika. `error.details.policy` nurodo, kuri. | taip, po Retry-After |
| 500 | internal_error | Vidinė serverio klaida. | sąlygiškai |
| 503 | credit_balance_unavailable | Kreditų likučio dabar nepavyko nustatyti, todėl importas nepradėtas. | taip, po Retry-After |
| 503 | writes_disabled | Rašymo operacijos laikinai išjungtos platformos pusėje. Skaitymas veikia. | taip, po Retry-After |
| 503 | service_unavailable | Paslauga laikinai užimta, pavyzdžiui, dėl duomenų bazės apkrovos. | taip, po Retry-After |