POST/v1/uploads/{upload_id}/complete
Dovršetak učitavanja
complete_upload
Kad su svi dijelovi primljeni, Sursa sastavlja datoteku, uspoređuje SHA-256 cijele datoteke sa sha256 u tijelu i izvodi iste provjere kao za učitavanje jednim zahtjevom: format prema potpisu sadržaja i antivirusnu provjeru. Rezultat je ready ili rejected s reject_reason (checksum_mismatch, type_mismatch, unsupported_format, infected, scan_unavailable, unsafe_content). Svako odbijanje pri provjeri formata ili antivirusnoj provjeri upisuje se u revizijski zapisnik kao file.rejected.
Odgovor 200 znači da je rezultat spreman; 202 znači da se datoteka još provjerava (processing), a rezultat se dobiva iz GET /v1/uploads/{upload_id}. Ako se status vrati na pending (ponovno pokretanje instance API-ja prekinulo je provjeru), ponovno pošaljite complete. Ponavljanje complete nakon rezultata vraća isti rezultat. Dijelovi koji nedostaju vraćaju 409 uploads.incomplete (details.missing). sha256 koji se razlikuje od onog deklariranog pri stvaranju ili parts[].etag koji se razlikuje od primljenog dijela vraća 422 uploads.checksum_mismatch. Spremno učitavanje koje se ne iskoristi traje 24 sata. Dodano u verziji 1.62.0.
Autentifikacija
Pošaljite API ključ u zaglavlju Authorization: Authorization: Bearer <ključ>.
Parametri putanje
upload_idstringobaveznoID učitavanja (
upl_i zatim 32 heksadecimalna znaka).length ≤ 64
Parametri zaglavlja
Idempotency-KeystringKljuč za siguran ponovni pokušaj upisa: od 1 do 255 ispisivih ASCII znakova; preporučuje se UUID v4 po logičkoj operaciji. Ponovni pokušaj s istim ključem unutar 24 sata ne izvodi operaciju ponovno: vraća spremljeni odgovor (status, zaglavlja i tijelo) sa zaglavljem
Idempotency-Replayed: true. Isti ključ s drugom metodom, putanjom,Content-Typeili tijelom vraća409 api.idempotency_mismatch; dok se prvi zahtjev još izvodi –409 api.idempotency_in_progresssRetry-After: 1. Nakon odgovora 5xx ili 429 ključ se oslobađa i ponovni pokušaj ponovno izvodi operaciju. Ključ vrijedi u okviru organizacije i pozivatelja (API ključ, korisnik ili ključ vlastitog izvora).length ≥ 1, length ≤ 255
Tijelo zahtjeva
application/json
sha256stringobaveznoSHA-256 cijele datoteke.
partsarray of UploadPartRefNeobavezna provjera dijelova: ETag svakog dijela kako ga vraća
PUT …/parts/{n}.items ≤ 1000
Odgovori
200Rezultat je spreman: `ready` ili `rejected`.
Zaglavlja odgovora
RateLimit-PolicyOgraničenja na snazi, u formatu IETF nacrta
draft-ietf-httpapi-ratelimit-headers: stavke odvojene zarezima"<name>";q=<quota>;w=<window in seconds>.keyje učestalost zahtjeva API ključa (kvota je nalet, prozor je vrijeme do njegova potpunog obnavljanja; za sesiju je touser, bez vjerodajnicaip);minute,dayimonthsu kvote organizacije za kalendarsku minutu, dan i mjesec po UTC-u.RateLimitŠto je preostalo od svakog ograničenja u
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitOgraničenje najstrože stavke u
RateLimit-Policy(one s najmanje preostalih zahtjeva).X-RateLimit-RemainingPreostali zahtjevi u okviru najstrožeg ograničenja.
X-RateLimit-ResetBroj sekundi do obnove najstrožeg ograničenja.
Idempotency-Replayedtrueznači da je odgovor ponovljen iz spremljenog odgovora za ovajIdempotency-Key: operacija se nije ponovno izvela.
application/json
idstringobaveznoID učitavanja (
upl_i 32 heksadecimalna znaka).filenamestringobaveznoNaziv datoteke (bez mapa).
content_typestringobaveznoDeklarirana vrsta sadržaja; prazno ako nije deklarirana.
sizeinteger (int64)obaveznoVeličina datoteke u bajtovima.
sha256string | nullobaveznoSHA-256 datoteke, deklariran pri stvaranju ili pri
complete;nullako još nije poznat.part_sizeinteger (int64)obaveznoVeličina svakog dijela osim posljednjeg (od 5 do 100 MiB).
part_countintegerobaveznoBroj dijelova.
≥ 1, ≤ 1000
parts_receivedintegerobaveznoBroj primljenih dijelova.
≥ 0
Primljeni dijelovi prema broju (prazno u odgovoru na
POST /v1/uploads).reject_reasonstring | nullobaveznoRazlog odbijanja (
rejected):checksum_mismatch,type_mismatch,unsupported_format,infected,scan_unavailable,unsafe_content. Nabrajanje se može proširiti;nullako učitavanje nije odbijeno.reject_detailsobject | nullobaveznoPojedinosti odbijanja (nastavak, deklarirani i utvrđeni format, kontrolni zbrojevi);
nullako učitavanje nije odbijeno.created_atstring (date-time)obaveznoKada je učitavanje stvoreno.
expires_atstring (date-time)obaveznoRok za dovršetak učitavanja i, kad je spremno, za njegovu upotrebu.
completed_atstring (date-time) | nullobaveznoKada je provjera završila (
readyilirejected).consumed_atstring (date-time) | nullobaveznoKada je učitavanje iskorišteno (za karticu, arhivu ili uvoz).
202Datoteka se još provjerava (`processing`).
Zaglavlja odgovora
RateLimit-PolicyOgraničenja na snazi, u formatu IETF nacrta
draft-ietf-httpapi-ratelimit-headers: stavke odvojene zarezima"<name>";q=<quota>;w=<window in seconds>.keyje učestalost zahtjeva API ključa (kvota je nalet, prozor je vrijeme do njegova potpunog obnavljanja; za sesiju je touser, bez vjerodajnicaip);minute,dayimonthsu kvote organizacije za kalendarsku minutu, dan i mjesec po UTC-u.RateLimitŠto je preostalo od svakog ograničenja u
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitOgraničenje najstrože stavke u
RateLimit-Policy(one s najmanje preostalih zahtjeva).X-RateLimit-RemainingPreostali zahtjevi u okviru najstrožeg ograničenja.
X-RateLimit-ResetBroj sekundi do obnove najstrožeg ograničenja.
Idempotency-Replayedtrueznači da je odgovor ponovljen iz spremljenog odgovora za ovajIdempotency-Key: operacija se nije ponovno izvela.
application/json
idstringobaveznoID učitavanja (
upl_i 32 heksadecimalna znaka).filenamestringobaveznoNaziv datoteke (bez mapa).
content_typestringobaveznoDeklarirana vrsta sadržaja; prazno ako nije deklarirana.
sizeinteger (int64)obaveznoVeličina datoteke u bajtovima.
sha256string | nullobaveznoSHA-256 datoteke, deklariran pri stvaranju ili pri
complete;nullako još nije poznat.part_sizeinteger (int64)obaveznoVeličina svakog dijela osim posljednjeg (od 5 do 100 MiB).
part_countintegerobaveznoBroj dijelova.
≥ 1, ≤ 1000
parts_receivedintegerobaveznoBroj primljenih dijelova.
≥ 0
Primljeni dijelovi prema broju (prazno u odgovoru na
POST /v1/uploads).reject_reasonstring | nullobaveznoRazlog odbijanja (
rejected):checksum_mismatch,type_mismatch,unsupported_format,infected,scan_unavailable,unsafe_content. Nabrajanje se može proširiti;nullako učitavanje nije odbijeno.reject_detailsobject | nullobaveznoPojedinosti odbijanja (nastavak, deklarirani i utvrđeni format, kontrolni zbrojevi);
nullako učitavanje nije odbijeno.created_atstring (date-time)obaveznoKada je učitavanje stvoreno.
expires_atstring (date-time)obaveznoRok za dovršetak učitavanja i, kad je spremno, za njegovu upotrebu.
completed_atstring (date-time) | nullobaveznoKada je provjera završila (
readyilirejected).consumed_atstring (date-time) | nullobaveznoKada je učitavanje iskorišteno (za karticu, arhivu ili uvoz).
401Vjerodajnice nisu poslane (ni kolačić sesije ni API ključ) ili ključ nije pronađen.
Zaglavlja odgovora
RateLimit-PolicyOgraničenja na snazi, u formatu IETF nacrta
draft-ietf-httpapi-ratelimit-headers: stavke odvojene zarezima"<name>";q=<quota>;w=<window in seconds>.keyje učestalost zahtjeva API ključa (kvota je nalet, prozor je vrijeme do njegova potpunog obnavljanja; za sesiju je touser, bez vjerodajnicaip);minute,dayimonthsu kvote organizacije za kalendarsku minutu, dan i mjesec po UTC-u.RateLimitŠto je preostalo od svakog ograničenja u
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitOgraničenje najstrože stavke u
RateLimit-Policy(one s najmanje preostalih zahtjeva).X-RateLimit-RemainingPreostali zahtjevi u okviru najstrožeg ograničenja.
X-RateLimit-ResetBroj sekundi do obnove najstrožeg ograničenja.
application/json
403Radnja nije dopuštena: uloga nije dovoljna, nema pristupa zbirci ili kartici, zahtjev se izvodi u načinu „View as” ili je organizacija suspendirana ili izbrisana (`detail` je objekt s `code: org_suspended | org_deleted`).
Zaglavlja odgovora
RateLimit-PolicyOgraničenja na snazi, u formatu IETF nacrta
draft-ietf-httpapi-ratelimit-headers: stavke odvojene zarezima"<name>";q=<quota>;w=<window in seconds>.keyje učestalost zahtjeva API ključa (kvota je nalet, prozor je vrijeme do njegova potpunog obnavljanja; za sesiju je touser, bez vjerodajnicaip);minute,dayimonthsu kvote organizacije za kalendarsku minutu, dan i mjesec po UTC-u.RateLimitŠto je preostalo od svakog ograničenja u
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitOgraničenje najstrože stavke u
RateLimit-Policy(one s najmanje preostalih zahtjeva).X-RateLimit-RemainingPreostali zahtjevi u okviru najstrožeg ograničenja.
X-RateLimit-ResetBroj sekundi do obnove najstrožeg ograničenja.
application/json
404Objekt ne postoji ili vam nije dostupan. API ne potvrđuje postojanje ograničenog objekta.
Zaglavlja odgovora
RateLimit-PolicyOgraničenja na snazi, u formatu IETF nacrta
draft-ietf-httpapi-ratelimit-headers: stavke odvojene zarezima"<name>";q=<quota>;w=<window in seconds>.keyje učestalost zahtjeva API ključa (kvota je nalet, prozor je vrijeme do njegova potpunog obnavljanja; za sesiju je touser, bez vjerodajnicaip);minute,dayimonthsu kvote organizacije za kalendarsku minutu, dan i mjesec po UTC-u.RateLimitŠto je preostalo od svakog ograničenja u
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitOgraničenje najstrože stavke u
RateLimit-Policy(one s najmanje preostalih zahtjeva).X-RateLimit-RemainingPreostali zahtjevi u okviru najstrožeg ograničenja.
X-RateLimit-ResetBroj sekundi do obnove najstrožeg ograničenja.
application/json
409Stanje objekta ne dopušta radnju, na primjer duplikat, indeksiranje u tijeku ili posao koji je već obrađen.
Zaglavlja odgovora
RateLimit-PolicyOgraničenja na snazi, u formatu IETF nacrta
draft-ietf-httpapi-ratelimit-headers: stavke odvojene zarezima"<name>";q=<quota>;w=<window in seconds>.keyje učestalost zahtjeva API ključa (kvota je nalet, prozor je vrijeme do njegova potpunog obnavljanja; za sesiju je touser, bez vjerodajnicaip);minute,dayimonthsu kvote organizacije za kalendarsku minutu, dan i mjesec po UTC-u.RateLimitŠto je preostalo od svakog ograničenja u
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitOgraničenje najstrože stavke u
RateLimit-Policy(one s najmanje preostalih zahtjeva).X-RateLimit-RemainingPreostali zahtjevi u okviru najstrožeg ograničenja.
X-RateLimit-ResetBroj sekundi do obnove najstrožeg ograničenja.
application/json
410Objekt je postojao, ali više nije dostupan: poveznica je iskorištena ili je istekla, ili je datoteka izbrisana na kraju razdoblja čuvanja.
Zaglavlja odgovora
RateLimit-PolicyOgraničenja na snazi, u formatu IETF nacrta
draft-ietf-httpapi-ratelimit-headers: stavke odvojene zarezima"<name>";q=<quota>;w=<window in seconds>.keyje učestalost zahtjeva API ključa (kvota je nalet, prozor je vrijeme do njegova potpunog obnavljanja; za sesiju je touser, bez vjerodajnicaip);minute,dayimonthsu kvote organizacije za kalendarsku minutu, dan i mjesec po UTC-u.RateLimitŠto je preostalo od svakog ograničenja u
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitOgraničenje najstrože stavke u
RateLimit-Policy(one s najmanje preostalih zahtjeva).X-RateLimit-RemainingPreostali zahtjevi u okviru najstrožeg ograničenja.
X-RateLimit-ResetBroj sekundi do obnove najstrožeg ograničenja.
application/json
422Pogreška provjere valjanosti: tijelo ili parametri ne odgovaraju shemi (`detail` je popis pogrešaka provjere valjanosti) ili je vrijednost parametra izvan raspona (`detail` je poruka).
Zaglavlja odgovora
RateLimit-PolicyOgraničenja na snazi, u formatu IETF nacrta
draft-ietf-httpapi-ratelimit-headers: stavke odvojene zarezima"<name>";q=<quota>;w=<window in seconds>.keyje učestalost zahtjeva API ključa (kvota je nalet, prozor je vrijeme do njegova potpunog obnavljanja; za sesiju je touser, bez vjerodajnicaip);minute,dayimonthsu kvote organizacije za kalendarsku minutu, dan i mjesec po UTC-u.RateLimitŠto je preostalo od svakog ograničenja u
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitOgraničenje najstrože stavke u
RateLimit-Policy(one s najmanje preostalih zahtjeva).X-RateLimit-RemainingPreostali zahtjevi u okviru najstrožeg ograničenja.
X-RateLimit-ResetBroj sekundi do obnove najstrožeg ograničenja.
application/json
429Previše zahtjeva (`api.rate_limited`), kvota organizacije za minutu, dan ili mjesec je potrošena (`api.quota_exceeded`; `error.details` sadrži `quota`, `limit` i `reset_at`), dosegnuto je ograničenje organizacije ili je usluga odgovora zauzeta (`answers.engine_busy`). Pričekajte vrijeme navedeno u zaglavlju `Retry-After`.
Zaglavlja odgovora
Retry-AfterBroj sekundi koje treba pričekati prije ponovnog pokušaja zahtjeva.
RateLimit-PolicyOgraničenja na snazi, u formatu IETF nacrta
draft-ietf-httpapi-ratelimit-headers: stavke odvojene zarezima"<name>";q=<quota>;w=<window in seconds>.keyje učestalost zahtjeva API ključa (kvota je nalet, prozor je vrijeme do njegova potpunog obnavljanja; za sesiju je touser, bez vjerodajnicaip);minute,dayimonthsu kvote organizacije za kalendarsku minutu, dan i mjesec po UTC-u.RateLimitŠto je preostalo od svakog ograničenja u
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitOgraničenje najstrože stavke u
RateLimit-Policy(one s najmanje preostalih zahtjeva).X-RateLimit-RemainingPreostali zahtjevi u okviru najstrožeg ograničenja.
X-RateLimit-ResetBroj sekundi do obnove najstrožeg ograničenja.
application/json
Kodovi pogrešaka
Kodovi koje ova operacija može vratiti u error.code, uz opće kodove svakog zahtjeva.
Sigurni ponovni pokušaji
Uz svaki POST i PATCH pošaljite zaglavlje Idempotency-Key (na primjer UUID). Ponovni pokušaj s istim ključem unutar 24 sata vraća spremljeni odgovor umjesto da ponovno izvrši zahtjev.
Ograničenja učestalosti
Odgovori sadrže zaglavlja RateLimit i RateLimit-Policy te ranija zaglavlja X-RateLimit-Limit, X-RateLimit-Remaining i X-RateLimit-Reset. Odgovor 429 sadrži zaglavlje Retry-After u sekundama: pričekajte i pokušajte ponovno.