POST/v1/uploads/{upload_id}/complete
Yüklemeyi tamamlama
complete_upload
Tüm parçalar alındığında Sursa dosyayı birleştirir, dosyanın tamamının SHA-256 özetini gövdedeki sha256 ile karşılaştırır ve tek istekle yüklemedeki denetimlerin aynısını çalıştırır: içerik imzasına göre biçim ve virüs taraması. Sonuç ready ya da reject_reason ile birlikte rejected olur (checksum_mismatch, type_mismatch, unsupported_format, infected, scan_unavailable, unsafe_content). Biçim ya da virüs denetiminin her reddi denetim kaydına file.rejected olarak yazılır.
200 yanıtı sonucun hazır olduğunu belirtir; 202 dosyanın hâlâ denetlendiğini (processing) belirtir ve sonuç GET /v1/uploads/{upload_id} ile alınır. Durum pending değerine dönerse (bir API örneğinin yeniden başlatılması denetimi yarıda kesti) complete adımını yeniden gönderin. Sonuç alındıktan sonra complete adımını yinelemek aynı sonucu döndürür. Eksik parçalar 409 uploads.incomplete (details.missing) döndürür. Oluşturma sırasında bildirilenden farklı bir sha256 ya da alınan bir parçadan farklı bir parts[].etag 422 uploads.checksum_mismatch döndürür. Kullanılmayan hazır bir yükleme 24 saat yaşar. 1.62.0 sürümünde eklendi.
Kimlik doğrulama
API anahtarını Authorization başlığında gönderin: Authorization: Bearer <anahtar>.
Yol parametreleri
upload_idstringzorunluYükleme kimliği (
upl_ve ardından 32 onaltılık karakter).length ≤ 64
Başlık parametreleri
Idempotency-KeystringBir yazma işleminin güvenli yeniden denenmesi için idempotency anahtarı (aynı isteğin tekrarı işlemi ikinci kez çalıştırmaz): 1–255 yazdırılabilir ASCII karakteri; her mantıksal işlem için bir UUID v4 önerilir. 24 saat içinde aynı anahtarla yapılan yeniden deneme işlemi tekrar çalıştırmaz: kaydedilmiş yanıtı (durum, başlıklar ve gövde)
Idempotency-Replayed: truebaşlığıyla döndürür. Aynı anahtar farklı bir yöntem, yol,Content-Typeya da gövdeyle kullanılırsa409 api.idempotency_mismatchdöner; ilk istek hâlâ çalışırkenRetry-After: 1ile birlikte409 api.idempotency_in_progressdöner. 5xx ya da 429 yanıtından sonra anahtar serbest bırakılır ve yeniden deneme işlemi tekrar çalıştırır. Anahtar kuruluşa ve çağırana özgüdür (API anahtarı, kullanıcı ya da özel kaynak anahtarı).length ≥ 1, length ≤ 255
İstek gövdesi
application/json
sha256stringzorunluDosyanın tamamının SHA-256 değeri.
partsarray of UploadPartRefİsteğe bağlı parça denetimi: her parçanın
PUT …/parts/{n}yanıtında döndürülen ETag değeri.items ≤ 1000
Yanıtlar
200Sonuç hazır: `ready` ya da `rejected`.
Yanıt başlıkları
RateLimit-PolicyGeçerli limitler, IETF taslağı
draft-ietf-httpapi-ratelimit-headersbiçiminde: virgülle ayrılmış"<name>";q=<quota>;w=<window in seconds>öğeleri.key, API anahtarının istek hızıdır (kota ani artış payıdır, zaman penceresi bu payın tamamen dolma süresidir; oturum içinuser, kimlik bilgisi olmadanip);minute,dayvemonth, kuruluşun UTC’ye göre takvim dakikası, günü ve ayı için kotalarıdır.RateLimitRateLimit-Policyiçindeki her limitten kalan:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitRateLimit-Policyiçindeki en sıkı girdinin limiti (en az istek hakkı kalan girdi).X-RateLimit-RemainingEn sıkı limitte kalan istek sayısı.
X-RateLimit-ResetEn sıkı limitin sıfırlanmasına kalan saniye.
Idempotency-Replayedtrue: yanıt buIdempotency-Keyiçin kaydedilmiş yanıttan yeniden verildi; işlem tekrar çalışmadı.
application/json
idstringzorunluYüklemenin kimliği (
upl_ve ardından 32 onaltılık karakter).filenamestringzorunluDosya adı (klasörler olmadan).
content_typestringzorunluBildirilen içerik türü; bildirilmediyse boş.
sizeinteger (int64)zorunluBayt cinsinden dosya boyutu.
sha256string | nullzorunluOluşturmada ya da
completesırasında bildirilen, dosyanın SHA-256 değeri; henüz bilinmiyorsanull.part_sizeinteger (int64)zorunluSonuncusu dışındaki her parçanın boyutu (5 ile 100 MiB arası).
part_countintegerzorunluParça sayısı.
≥ 1, ≤ 1000
parts_receivedintegerzorunluAlınan parça sayısı.
≥ 0
Numaraya göre alınan parçalar (
POST /v1/uploadsyanıtında boş).reject_reasonstring | nullzorunluRet nedeni (
rejected):checksum_mismatch,type_mismatch,unsupported_format,infected,scan_unavailable,unsafe_content. Değer listesi genişleyebilir; reddedilmediysenull.reject_detailsobject | nullzorunluRet ayrıntıları (uzantı, bildirilen ve algılanan biçim, sağlama toplamları); reddedilmediyse
null.created_atstring (date-time)zorunluYüklemenin oluşturulma zamanı.
expires_atstring (date-time)zorunluYüklemeyi tamamlamak ve hazır olduğunda kullanmak için son tarih.
completed_atstring (date-time) | nullzorunluDenetimin bittiği zaman (
readyya darejected).consumed_atstring (date-time) | nullzorunluYüklemenin kullanıldığı zaman (bir kart, bir arşiv ya da bir içe aktarma tarafından).
202Dosya hâlâ denetleniyor (`processing`).
Yanıt başlıkları
RateLimit-PolicyGeçerli limitler, IETF taslağı
draft-ietf-httpapi-ratelimit-headersbiçiminde: virgülle ayrılmış"<name>";q=<quota>;w=<window in seconds>öğeleri.key, API anahtarının istek hızıdır (kota ani artış payıdır, zaman penceresi bu payın tamamen dolma süresidir; oturum içinuser, kimlik bilgisi olmadanip);minute,dayvemonth, kuruluşun UTC’ye göre takvim dakikası, günü ve ayı için kotalarıdır.RateLimitRateLimit-Policyiçindeki her limitten kalan:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitRateLimit-Policyiçindeki en sıkı girdinin limiti (en az istek hakkı kalan girdi).X-RateLimit-RemainingEn sıkı limitte kalan istek sayısı.
X-RateLimit-ResetEn sıkı limitin sıfırlanmasına kalan saniye.
Idempotency-Replayedtrue: yanıt buIdempotency-Keyiçin kaydedilmiş yanıttan yeniden verildi; işlem tekrar çalışmadı.
application/json
idstringzorunluYüklemenin kimliği (
upl_ve ardından 32 onaltılık karakter).filenamestringzorunluDosya adı (klasörler olmadan).
content_typestringzorunluBildirilen içerik türü; bildirilmediyse boş.
sizeinteger (int64)zorunluBayt cinsinden dosya boyutu.
sha256string | nullzorunluOluşturmada ya da
completesırasında bildirilen, dosyanın SHA-256 değeri; henüz bilinmiyorsanull.part_sizeinteger (int64)zorunluSonuncusu dışındaki her parçanın boyutu (5 ile 100 MiB arası).
part_countintegerzorunluParça sayısı.
≥ 1, ≤ 1000
parts_receivedintegerzorunluAlınan parça sayısı.
≥ 0
Numaraya göre alınan parçalar (
POST /v1/uploadsyanıtında boş).reject_reasonstring | nullzorunluRet nedeni (
rejected):checksum_mismatch,type_mismatch,unsupported_format,infected,scan_unavailable,unsafe_content. Değer listesi genişleyebilir; reddedilmediysenull.reject_detailsobject | nullzorunluRet ayrıntıları (uzantı, bildirilen ve algılanan biçim, sağlama toplamları); reddedilmediyse
null.created_atstring (date-time)zorunluYüklemenin oluşturulma zamanı.
expires_atstring (date-time)zorunluYüklemeyi tamamlamak ve hazır olduğunda kullanmak için son tarih.
completed_atstring (date-time) | nullzorunluDenetimin bittiği zaman (
readyya darejected).consumed_atstring (date-time) | nullzorunluYüklemenin kullanıldığı zaman (bir kart, bir arşiv ya da bir içe aktarma tarafından).
401Kimlik bilgisi gönderilmedi (ne oturum çerezi ne de API anahtarı) ya da anahtar bulunamadı.
Yanıt başlıkları
RateLimit-PolicyGeçerli limitler, IETF taslağı
draft-ietf-httpapi-ratelimit-headersbiçiminde: virgülle ayrılmış"<name>";q=<quota>;w=<window in seconds>öğeleri.key, API anahtarının istek hızıdır (kota ani artış payıdır, zaman penceresi bu payın tamamen dolma süresidir; oturum içinuser, kimlik bilgisi olmadanip);minute,dayvemonth, kuruluşun UTC’ye göre takvim dakikası, günü ve ayı için kotalarıdır.RateLimitRateLimit-Policyiçindeki her limitten kalan:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitRateLimit-Policyiçindeki en sıkı girdinin limiti (en az istek hakkı kalan girdi).X-RateLimit-RemainingEn sıkı limitte kalan istek sayısı.
X-RateLimit-ResetEn sıkı limitin sıfırlanmasına kalan saniye.
application/json
403İşleme izin verilmiyor: rol yetersiz, koleksiyona ya da karta erişim yok, istek “View as” modunda çalışıyor ya da kuruluş askıya alınmış veya silinmiş (`detail`, `code: org_suspended | org_deleted` içeren bir nesnedir).
Yanıt başlıkları
RateLimit-PolicyGeçerli limitler, IETF taslağı
draft-ietf-httpapi-ratelimit-headersbiçiminde: virgülle ayrılmış"<name>";q=<quota>;w=<window in seconds>öğeleri.key, API anahtarının istek hızıdır (kota ani artış payıdır, zaman penceresi bu payın tamamen dolma süresidir; oturum içinuser, kimlik bilgisi olmadanip);minute,dayvemonth, kuruluşun UTC’ye göre takvim dakikası, günü ve ayı için kotalarıdır.RateLimitRateLimit-Policyiçindeki her limitten kalan:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitRateLimit-Policyiçindeki en sıkı girdinin limiti (en az istek hakkı kalan girdi).X-RateLimit-RemainingEn sıkı limitte kalan istek sayısı.
X-RateLimit-ResetEn sıkı limitin sıfırlanmasına kalan saniye.
application/json
404Nesne yok ya da size açık değil. API, erişimi kısıtlı bir nesnenin var olduğunu belli etmez.
Yanıt başlıkları
RateLimit-PolicyGeçerli limitler, IETF taslağı
draft-ietf-httpapi-ratelimit-headersbiçiminde: virgülle ayrılmış"<name>";q=<quota>;w=<window in seconds>öğeleri.key, API anahtarının istek hızıdır (kota ani artış payıdır, zaman penceresi bu payın tamamen dolma süresidir; oturum içinuser, kimlik bilgisi olmadanip);minute,dayvemonth, kuruluşun UTC’ye göre takvim dakikası, günü ve ayı için kotalarıdır.RateLimitRateLimit-Policyiçindeki her limitten kalan:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitRateLimit-Policyiçindeki en sıkı girdinin limiti (en az istek hakkı kalan girdi).X-RateLimit-RemainingEn sıkı limitte kalan istek sayısı.
X-RateLimit-ResetEn sıkı limitin sıfırlanmasına kalan saniye.
application/json
409Nesnenin durumu işleme izin vermiyor; örneğin yinelenen bir kayıt, süren bir dizinleme ya da zaten işlenmiş bir iş.
Yanıt başlıkları
RateLimit-PolicyGeçerli limitler, IETF taslağı
draft-ietf-httpapi-ratelimit-headersbiçiminde: virgülle ayrılmış"<name>";q=<quota>;w=<window in seconds>öğeleri.key, API anahtarının istek hızıdır (kota ani artış payıdır, zaman penceresi bu payın tamamen dolma süresidir; oturum içinuser, kimlik bilgisi olmadanip);minute,dayvemonth, kuruluşun UTC’ye göre takvim dakikası, günü ve ayı için kotalarıdır.RateLimitRateLimit-Policyiçindeki her limitten kalan:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitRateLimit-Policyiçindeki en sıkı girdinin limiti (en az istek hakkı kalan girdi).X-RateLimit-RemainingEn sıkı limitte kalan istek sayısı.
X-RateLimit-ResetEn sıkı limitin sıfırlanmasına kalan saniye.
application/json
410Nesne vardı ama artık kullanılamıyor: bağlantı kullanıldı ya da süresi doldu veya dosya saklama süresinin sonunda silindi.
Yanıt başlıkları
RateLimit-PolicyGeçerli limitler, IETF taslağı
draft-ietf-httpapi-ratelimit-headersbiçiminde: virgülle ayrılmış"<name>";q=<quota>;w=<window in seconds>öğeleri.key, API anahtarının istek hızıdır (kota ani artış payıdır, zaman penceresi bu payın tamamen dolma süresidir; oturum içinuser, kimlik bilgisi olmadanip);minute,dayvemonth, kuruluşun UTC’ye göre takvim dakikası, günü ve ayı için kotalarıdır.RateLimitRateLimit-Policyiçindeki her limitten kalan:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitRateLimit-Policyiçindeki en sıkı girdinin limiti (en az istek hakkı kalan girdi).X-RateLimit-RemainingEn sıkı limitte kalan istek sayısı.
X-RateLimit-ResetEn sıkı limitin sıfırlanmasına kalan saniye.
application/json
422Geçerlilik hatası: gövde ya da parametreler şemaya uymuyor (`detail` geçerlilik hatalarının listesidir) ya da bir parametre değeri aralığın dışında (`detail` bir iletidir).
Yanıt başlıkları
RateLimit-PolicyGeçerli limitler, IETF taslağı
draft-ietf-httpapi-ratelimit-headersbiçiminde: virgülle ayrılmış"<name>";q=<quota>;w=<window in seconds>öğeleri.key, API anahtarının istek hızıdır (kota ani artış payıdır, zaman penceresi bu payın tamamen dolma süresidir; oturum içinuser, kimlik bilgisi olmadanip);minute,dayvemonth, kuruluşun UTC’ye göre takvim dakikası, günü ve ayı için kotalarıdır.RateLimitRateLimit-Policyiçindeki her limitten kalan:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitRateLimit-Policyiçindeki en sıkı girdinin limiti (en az istek hakkı kalan girdi).X-RateLimit-RemainingEn sıkı limitte kalan istek sayısı.
X-RateLimit-ResetEn sıkı limitin sıfırlanmasına kalan saniye.
application/json
429Çok fazla istek (`api.rate_limited`), kuruluşun dakika, gün ya da ay kotası doldu (`api.quota_exceeded`; `error.details` alanında `quota`, `limit` ve `reset_at` bulunur), kuruluşun limitine ulaşıldı ya da yanıt hizmeti meşgul (`answers.engine_busy`). `Retry-After` başlığındaki süre kadar bekleyin.
Yanıt başlıkları
Retry-Afterİsteği yeniden denemeden önce beklenmesi gereken saniye sayısı.
RateLimit-PolicyGeçerli limitler, IETF taslağı
draft-ietf-httpapi-ratelimit-headersbiçiminde: virgülle ayrılmış"<name>";q=<quota>;w=<window in seconds>öğeleri.key, API anahtarının istek hızıdır (kota ani artış payıdır, zaman penceresi bu payın tamamen dolma süresidir; oturum içinuser, kimlik bilgisi olmadanip);minute,dayvemonth, kuruluşun UTC’ye göre takvim dakikası, günü ve ayı için kotalarıdır.RateLimitRateLimit-Policyiçindeki her limitten kalan:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitRateLimit-Policyiçindeki en sıkı girdinin limiti (en az istek hakkı kalan girdi).X-RateLimit-RemainingEn sıkı limitte kalan istek sayısı.
X-RateLimit-ResetEn sıkı limitin sıfırlanmasına kalan saniye.
application/json
Hata kodları
Bu uç noktanın, her isteğin genel kodlarının yanı sıra error.code alanında döndürebileceği kodlar.
Güvenli yeniden denemeler
Her POST ve PATCH isteğiyle bir Idempotency-Key başlığı (örneğin bir UUID) gönderin. Aynı anahtarla 24 saat içinde yapılan yeniden deneme, isteği yeniden çalıştırmak yerine kaydedilmiş yanıtı döndürür.
Hız sınırları
Yanıtlarda RateLimit ve RateLimit-Policy başlıklarıyla birlikte daha eski X-RateLimit-Limit, X-RateLimit-Remaining ve X-RateLimit-Reset başlıkları bulunur. 429 yanıtında saniye cinsinden Retry-After başlığı vardır: bekleyin ve yeniden deneyin.