POST/v1/uploads/{upload_id}/complete
Kończenie przesyłania
complete_upload
Gdy wszystkie części zostaną odebrane, Sursa składa plik, porównuje SHA-256 całego pliku z sha256 w treści i wykonuje te same kontrole co przy przesyłaniu jednym żądaniem: format według sygnatury zawartości i skanowanie antywirusowe. Wynikiem jest ready lub rejected z reject_reason (checksum_mismatch, type_mismatch, unsupported_format, infected, scan_unavailable, unsafe_content). Każde odrzucenie przez kontrolę formatu lub skanowanie antywirusowe jest zapisywane w dzienniku audytu jako file.rejected.
Odpowiedź 200 oznacza, że wynik jest gotowy; 202 – że plik jest jeszcze sprawdzany (processing), a wynik zwraca GET /v1/uploads/{upload_id}. Jeśli status wraca do pending (ponowne uruchomienie instancji API przerwało kontrolę), wyślij complete jeszcze raz. Powtórzenie complete po uzyskaniu wyniku zwraca ten sam wynik. Brakujące części zwracają 409 uploads.incomplete (details.missing). sha256 inne niż zadeklarowane przy tworzeniu lub parts[].etag inny niż w odebranej części zwraca 422 uploads.checksum_mismatch. Gotowe przesyłanie, które nie zostało użyte, jest ważne przez 24 godziny. Dodano w wersji 1.62.0.
Uwierzytelnianie
Wyślij klucz API w nagłówku Authorization: Authorization: Bearer <klucz>.
Parametry ścieżki
upload_idstringwymaganeID przesyłania (
upl_, a po nim 32 znaki szesnastkowe).length ≤ 64
Parametry nagłówka
Idempotency-KeystringKlucz bezpiecznego ponowienia zapisu: od 1 do 255 drukowalnych znaków ASCII; zalecany jest UUID v4 na każdą operację logiczną. Ponowienie z tym samym kluczem w ciągu 24 godzin nie wykonuje operacji ponownie: zwraca zapisaną odpowiedź (status, nagłówki i treść) z nagłówkiem
Idempotency-Replayed: true. Ten sam klucz z inną metodą, ścieżką,Content-Typelub treścią zwraca409 api.idempotency_mismatch; dopóki pierwsze żądanie jest jeszcze wykonywane –409 api.idempotency_in_progresszRetry-After: 1. Po odpowiedzi 5xx lub 429 klucz zostaje zwolniony, a ponowienie wykonuje operację jeszcze raz. Klucz obowiązuje w obrębie organizacji i wywołującego (klucz API, użytkownik lub klucz własnego źródła).length ≥ 1, length ≤ 255
Treść żądania
application/json
sha256stringwymaganeSHA-256 całego pliku.
partsarray of UploadPartRefOpcjonalne sprawdzenie części: ETag każdej części w postaci zwróconej przez
PUT …/parts/{n}.items ≤ 1000
Odpowiedzi
200Wynik jest gotowy: `ready` lub `rejected`.
Nagłówki odpowiedzi
RateLimit-PolicyObowiązujące limity w formacie projektu IETF
draft-ietf-httpapi-ratelimit-headers: elementy rozdzielone przecinkami"<name>";q=<quota>;w=<window in seconds>.keyto częstotliwość żądań klucza API (przydział to wielkość chwilowego szczytu (burst), okno to czas jego pełnego odnowienia; dla sesji jest touser, bez danych uwierzytelniającychip);minute,dayimonthto przydziały organizacji na minutę, dzień i miesiąc kalendarzowy w UTC.RateLimitCo pozostało z każdego limitu w
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit najbardziej restrykcyjnej pozycji w
RateLimit-Policy(tej, w której zostało najmniej żądań).X-RateLimit-RemainingLiczba żądań pozostałych w ramach najbardziej restrykcyjnego limitu.
X-RateLimit-ResetLiczba sekund do odnowienia najbardziej restrykcyjnego limitu.
Idempotency-Replayedtrueoznacza, że odpowiedź została odtworzona z odpowiedzi zapisanej dla tegoIdempotency-Key: operacja nie została wykonana ponownie.
application/json
idstringwymaganeID przesyłania (
upl_i 32 znaki szesnastkowe).filenamestringwymaganeNazwa pliku (bez folderów).
content_typestringwymaganeZadeklarowany typ zawartości; pusty, jeśli go nie zadeklarowano.
sizeinteger (int64)wymaganeRozmiar pliku w bajtach.
sha256string | nullwymaganeSHA-256 pliku zadeklarowany przy tworzeniu lub w
complete;null, jeśli jeszcze nie jest znany.part_sizeinteger (int64)wymaganeRozmiar każdej części oprócz ostatniej (od 5 do 100 MiB).
part_countintegerwymaganeLiczba części.
≥ 1, ≤ 1000
parts_receivedintegerwymaganeLiczba odebranych części.
≥ 0
Odebrane części według numeru (puste w odpowiedzi
POST /v1/uploads).reject_reasonstring | nullwymaganePrzyczyna odrzucenia (
rejected):checksum_mismatch,type_mismatch,unsupported_format,infected,scan_unavailable,unsafe_content. Wyliczenie może się rozszerzać;null, jeśli nie odrzucono.reject_detailsobject | nullwymaganeSzczegóły odrzucenia (rozszerzenie, format zadeklarowany i wykryty, sumy kontrolne);
null, jeśli nie odrzucono.created_atstring (date-time)wymaganeKiedy utworzono przesyłanie.
expires_atstring (date-time)wymaganeTermin zakończenia przesyłania, a gdy jest już gotowe – termin jego użycia.
completed_atstring (date-time) | nullwymaganeKiedy zakończyło się sprawdzanie (
readylubrejected).consumed_atstring (date-time) | nullwymaganeKiedy przesyłanie zostało użyte (przez kartę, archiwum lub import).
202Plik jest jeszcze sprawdzany (`processing`).
Nagłówki odpowiedzi
RateLimit-PolicyObowiązujące limity w formacie projektu IETF
draft-ietf-httpapi-ratelimit-headers: elementy rozdzielone przecinkami"<name>";q=<quota>;w=<window in seconds>.keyto częstotliwość żądań klucza API (przydział to wielkość chwilowego szczytu (burst), okno to czas jego pełnego odnowienia; dla sesji jest touser, bez danych uwierzytelniającychip);minute,dayimonthto przydziały organizacji na minutę, dzień i miesiąc kalendarzowy w UTC.RateLimitCo pozostało z każdego limitu w
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit najbardziej restrykcyjnej pozycji w
RateLimit-Policy(tej, w której zostało najmniej żądań).X-RateLimit-RemainingLiczba żądań pozostałych w ramach najbardziej restrykcyjnego limitu.
X-RateLimit-ResetLiczba sekund do odnowienia najbardziej restrykcyjnego limitu.
Idempotency-Replayedtrueoznacza, że odpowiedź została odtworzona z odpowiedzi zapisanej dla tegoIdempotency-Key: operacja nie została wykonana ponownie.
application/json
idstringwymaganeID przesyłania (
upl_i 32 znaki szesnastkowe).filenamestringwymaganeNazwa pliku (bez folderów).
content_typestringwymaganeZadeklarowany typ zawartości; pusty, jeśli go nie zadeklarowano.
sizeinteger (int64)wymaganeRozmiar pliku w bajtach.
sha256string | nullwymaganeSHA-256 pliku zadeklarowany przy tworzeniu lub w
complete;null, jeśli jeszcze nie jest znany.part_sizeinteger (int64)wymaganeRozmiar każdej części oprócz ostatniej (od 5 do 100 MiB).
part_countintegerwymaganeLiczba części.
≥ 1, ≤ 1000
parts_receivedintegerwymaganeLiczba odebranych części.
≥ 0
Odebrane części według numeru (puste w odpowiedzi
POST /v1/uploads).reject_reasonstring | nullwymaganePrzyczyna odrzucenia (
rejected):checksum_mismatch,type_mismatch,unsupported_format,infected,scan_unavailable,unsafe_content. Wyliczenie może się rozszerzać;null, jeśli nie odrzucono.reject_detailsobject | nullwymaganeSzczegóły odrzucenia (rozszerzenie, format zadeklarowany i wykryty, sumy kontrolne);
null, jeśli nie odrzucono.created_atstring (date-time)wymaganeKiedy utworzono przesyłanie.
expires_atstring (date-time)wymaganeTermin zakończenia przesyłania, a gdy jest już gotowe – termin jego użycia.
completed_atstring (date-time) | nullwymaganeKiedy zakończyło się sprawdzanie (
readylubrejected).consumed_atstring (date-time) | nullwymaganeKiedy przesyłanie zostało użyte (przez kartę, archiwum lub import).
401Nie przesłano danych uwierzytelniających (ani pliku cookie sesji, ani klucza API) lub nie znaleziono klucza.
Nagłówki odpowiedzi
RateLimit-PolicyObowiązujące limity w formacie projektu IETF
draft-ietf-httpapi-ratelimit-headers: elementy rozdzielone przecinkami"<name>";q=<quota>;w=<window in seconds>.keyto częstotliwość żądań klucza API (przydział to wielkość chwilowego szczytu (burst), okno to czas jego pełnego odnowienia; dla sesji jest touser, bez danych uwierzytelniającychip);minute,dayimonthto przydziały organizacji na minutę, dzień i miesiąc kalendarzowy w UTC.RateLimitCo pozostało z każdego limitu w
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit najbardziej restrykcyjnej pozycji w
RateLimit-Policy(tej, w której zostało najmniej żądań).X-RateLimit-RemainingLiczba żądań pozostałych w ramach najbardziej restrykcyjnego limitu.
X-RateLimit-ResetLiczba sekund do odnowienia najbardziej restrykcyjnego limitu.
application/json
403Działanie jest niedozwolone: rola jest niewystarczająca, brak dostępu do kolekcji lub karty, żądanie jest wykonywane w trybie „View as” albo organizacja jest zawieszona lub usunięta (`detail` to obiekt z `code: org_suspended | org_deleted`).
Nagłówki odpowiedzi
RateLimit-PolicyObowiązujące limity w formacie projektu IETF
draft-ietf-httpapi-ratelimit-headers: elementy rozdzielone przecinkami"<name>";q=<quota>;w=<window in seconds>.keyto częstotliwość żądań klucza API (przydział to wielkość chwilowego szczytu (burst), okno to czas jego pełnego odnowienia; dla sesji jest touser, bez danych uwierzytelniającychip);minute,dayimonthto przydziały organizacji na minutę, dzień i miesiąc kalendarzowy w UTC.RateLimitCo pozostało z każdego limitu w
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit najbardziej restrykcyjnej pozycji w
RateLimit-Policy(tej, w której zostało najmniej żądań).X-RateLimit-RemainingLiczba żądań pozostałych w ramach najbardziej restrykcyjnego limitu.
X-RateLimit-ResetLiczba sekund do odnowienia najbardziej restrykcyjnego limitu.
application/json
404Obiekt nie istnieje lub nie jest dla Ciebie dostępny. API nie potwierdza istnienia obiektu z ograniczonym dostępem.
Nagłówki odpowiedzi
RateLimit-PolicyObowiązujące limity w formacie projektu IETF
draft-ietf-httpapi-ratelimit-headers: elementy rozdzielone przecinkami"<name>";q=<quota>;w=<window in seconds>.keyto częstotliwość żądań klucza API (przydział to wielkość chwilowego szczytu (burst), okno to czas jego pełnego odnowienia; dla sesji jest touser, bez danych uwierzytelniającychip);minute,dayimonthto przydziały organizacji na minutę, dzień i miesiąc kalendarzowy w UTC.RateLimitCo pozostało z każdego limitu w
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit najbardziej restrykcyjnej pozycji w
RateLimit-Policy(tej, w której zostało najmniej żądań).X-RateLimit-RemainingLiczba żądań pozostałych w ramach najbardziej restrykcyjnego limitu.
X-RateLimit-ResetLiczba sekund do odnowienia najbardziej restrykcyjnego limitu.
application/json
409Stan obiektu nie pozwala na to działanie, np. duplikat, trwające indeksowanie lub zadanie, które zostało już przetworzone.
Nagłówki odpowiedzi
RateLimit-PolicyObowiązujące limity w formacie projektu IETF
draft-ietf-httpapi-ratelimit-headers: elementy rozdzielone przecinkami"<name>";q=<quota>;w=<window in seconds>.keyto częstotliwość żądań klucza API (przydział to wielkość chwilowego szczytu (burst), okno to czas jego pełnego odnowienia; dla sesji jest touser, bez danych uwierzytelniającychip);minute,dayimonthto przydziały organizacji na minutę, dzień i miesiąc kalendarzowy w UTC.RateLimitCo pozostało z każdego limitu w
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit najbardziej restrykcyjnej pozycji w
RateLimit-Policy(tej, w której zostało najmniej żądań).X-RateLimit-RemainingLiczba żądań pozostałych w ramach najbardziej restrykcyjnego limitu.
X-RateLimit-ResetLiczba sekund do odnowienia najbardziej restrykcyjnego limitu.
application/json
410Obiekt istniał, ale nie jest już dostępny: link został użyty lub wygasł albo plik usunięto po upływie okresu przechowywania.
Nagłówki odpowiedzi
RateLimit-PolicyObowiązujące limity w formacie projektu IETF
draft-ietf-httpapi-ratelimit-headers: elementy rozdzielone przecinkami"<name>";q=<quota>;w=<window in seconds>.keyto częstotliwość żądań klucza API (przydział to wielkość chwilowego szczytu (burst), okno to czas jego pełnego odnowienia; dla sesji jest touser, bez danych uwierzytelniającychip);minute,dayimonthto przydziały organizacji na minutę, dzień i miesiąc kalendarzowy w UTC.RateLimitCo pozostało z każdego limitu w
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit najbardziej restrykcyjnej pozycji w
RateLimit-Policy(tej, w której zostało najmniej żądań).X-RateLimit-RemainingLiczba żądań pozostałych w ramach najbardziej restrykcyjnego limitu.
X-RateLimit-ResetLiczba sekund do odnowienia najbardziej restrykcyjnego limitu.
application/json
422Błąd walidacji: treść lub parametry nie odpowiadają schematowi (`detail` to lista błędów walidacji) albo wartość parametru jest poza zakresem (`detail` zawiera komunikat).
Nagłówki odpowiedzi
RateLimit-PolicyObowiązujące limity w formacie projektu IETF
draft-ietf-httpapi-ratelimit-headers: elementy rozdzielone przecinkami"<name>";q=<quota>;w=<window in seconds>.keyto częstotliwość żądań klucza API (przydział to wielkość chwilowego szczytu (burst), okno to czas jego pełnego odnowienia; dla sesji jest touser, bez danych uwierzytelniającychip);minute,dayimonthto przydziały organizacji na minutę, dzień i miesiąc kalendarzowy w UTC.RateLimitCo pozostało z każdego limitu w
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit najbardziej restrykcyjnej pozycji w
RateLimit-Policy(tej, w której zostało najmniej żądań).X-RateLimit-RemainingLiczba żądań pozostałych w ramach najbardziej restrykcyjnego limitu.
X-RateLimit-ResetLiczba sekund do odnowienia najbardziej restrykcyjnego limitu.
application/json
429Zbyt wiele żądań (`api.rate_limited`), wyczerpano przydział organizacji na minutę, dzień lub miesiąc (`api.quota_exceeded`; `error.details` zawiera `quota`, `limit` i `reset_at`), osiągnięto limit organizacji albo usługa odpowiedzi jest zajęta (`answers.engine_busy`). Odczekaj czas podany w nagłówku `Retry-After`.
Nagłówki odpowiedzi
Retry-AfterLiczba sekund oczekiwania przed ponowieniem żądania.
RateLimit-PolicyObowiązujące limity w formacie projektu IETF
draft-ietf-httpapi-ratelimit-headers: elementy rozdzielone przecinkami"<name>";q=<quota>;w=<window in seconds>.keyto częstotliwość żądań klucza API (przydział to wielkość chwilowego szczytu (burst), okno to czas jego pełnego odnowienia; dla sesji jest touser, bez danych uwierzytelniającychip);minute,dayimonthto przydziały organizacji na minutę, dzień i miesiąc kalendarzowy w UTC.RateLimitCo pozostało z każdego limitu w
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit najbardziej restrykcyjnej pozycji w
RateLimit-Policy(tej, w której zostało najmniej żądań).X-RateLimit-RemainingLiczba żądań pozostałych w ramach najbardziej restrykcyjnego limitu.
X-RateLimit-ResetLiczba sekund do odnowienia najbardziej restrykcyjnego limitu.
application/json
Kody błędów
Kody, które ta operacja może zwrócić w error.code, oprócz ogólnych kodów każdego żądania.
Bezpieczne ponawianie
Wysyłaj nagłówek Idempotency-Key (na przykład UUID) z każdym żądaniem POST i PATCH. Ponowienie z tym samym kluczem w ciągu 24 godzin zwraca zapisaną odpowiedź, zamiast ponownie wykonywać żądanie.
Limity częstotliwości
Odpowiedzi zawierają nagłówki RateLimit i RateLimit-Policy oraz starsze X-RateLimit-Limit, X-RateLimit-Remaining i X-RateLimit-Reset. Odpowiedź 429 ma nagłówek Retry-After w sekundach: odczekaj i ponów żądanie.