POST/v1/uploads/{upload_id}/complete
ทำการอัปโหลดให้เสร็จ
complete_upload
เมื่อได้รับครบทุกส่วน Sursa จะประกอบไฟล์ เปรียบเทียบ SHA-256 ของทั้งไฟล์กับ sha256 ในเนื้อหาคำขอ และตรวจแบบเดียวกับการอัปโหลดในคำขอเดียว: รูปแบบตามลายเซ็นของเนื้อหาและการสแกนไวรัส ผลลัพธ์คือ ready หรือ rejected พร้อม reject_reason (checksum_mismatch type_mismatch unsupported_format infected scan_unavailable และ unsafe_content) การปฏิเสธแต่ละครั้งจากการตรวจรูปแบบหรือการสแกนไวรัสบันทึกลงในล็อกการตรวจสอบเป็น file.rejected
การตอบกลับ 200 หมายถึงผลลัพธ์พร้อมแล้ว 202 หมายถึงไฟล์ยังอยู่ระหว่างการตรวจ (processing) และดูผลลัพธ์ได้จาก GET /v1/uploads/{upload_id} ถ้าสถานะกลับเป็น pending (การรีสตาร์ตอินสแตนซ์ของ API ขัดจังหวะการตรวจ) ให้ส่ง complete อีกครั้ง การส่ง complete ซ้ำหลังได้ผลลัพธ์แล้วจะส่งคืนผลลัพธ์เดิม ส่วนที่ขาดจะส่งคืน 409 uploads.incomplete (details.missing) sha256 ที่ต่างจากค่าที่ประกาศตอนสร้าง หรือ parts[].etag ที่ต่างจากส่วนที่ได้รับ จะส่งคืน 422 uploads.checksum_mismatch การอัปโหลดที่พร้อมแล้วแต่ไม่ถูกใช้มีอายุ 24 ชั่วโมง เพิ่มใน 1.62.0
การยืนยันตัวตน
ส่งคีย์ API ในเฮดเดอร์ Authorization: Authorization: Bearer <คีย์>
พารามิเตอร์พาธ
upload_idstringจำเป็นID ของการอัปโหลด (
upl_ตามด้วยอักขระฐานสิบหก 32 ตัว)length ≤ 64
พารามิเตอร์เฮดเดอร์
Idempotency-Keystringคีย์ป้องกันการทำซ้ำ (idempotency key) สำหรับลองคำขอเขียนข้อมูลใหม่อย่างปลอดภัย: อักขระ ASCII ที่พิมพ์ได้ 1 ถึง 255 ตัว แนะนำให้ใช้ UUID v4 หนึ่งค่าต่อการดำเนินการเชิงตรรกะหนึ่งรายการ การลองใหม่ด้วยคีย์เดิมภายใน 24 ชั่วโมงจะไม่ทำการดำเนินการซ้ำ แต่ส่งคืนการตอบกลับที่บันทึกไว้ (สถานะ เฮดเดอร์ และเนื้อหา) พร้อมเฮดเดอร์
Idempotency-Replayed: trueคีย์เดิมที่ใช้กับเมธอด พาธContent-Typeหรือเนื้อหาที่ต่างออกไปจะส่งคืน409 api.idempotency_mismatchส่วนระหว่างที่คำขอแรกยังทำงานอยู่จะส่งคืน409 api.idempotency_in_progressพร้อมRetry-After: 1หลังการตอบกลับ 5xx หรือ 429 Sursa จะปล่อยคีย์ และการลองใหม่จะทำการดำเนินการอีกครั้ง คีย์มีขอบเขตตามองค์กรและผู้เรียก (คีย์ API ผู้ใช้ หรือคีย์แหล่งข้อมูล)length ≥ 1, length ≤ 255
เนื้อหาคำขอ
application/json
sha256stringจำเป็นSHA-256 ของทั้งไฟล์
partsarray of UploadPartRefการตรวจส่วนแบบไม่บังคับ: ETag ของแต่ละส่วนตามที่
PUT …/parts/{n}ส่งคืนitems ≤ 1000
การตอบกลับ
200ผลลัพธ์พร้อมแล้ว: `ready` หรือ `rejected`
เฮดเดอร์การตอบกลับ
RateLimit-Policyขีดจำกัดที่มีผล ในรูปแบบของร่าง IETF
draft-ietf-httpapi-ratelimit-headers: รายการคั่นด้วยจุลภาค"<name>";q=<quota>;w=<window in seconds>โดยkeyคืออัตราคำขอของคีย์ API (โควตาคือช่วงพุ่งสูง (burst) กรอบเวลาคือเวลาที่ใช้เติมกลับจนเต็ม สำหรับเซสชันคือuserและเมื่อไม่มีข้อมูลรับรองคือip) ส่วนminutedayและmonthคือโควตาขององค์กรสำหรับนาที วัน และเดือนตามปฏิทินใน UTCRateLimitส่วนที่เหลือของแต่ละขีดจำกัดใน
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>X-RateLimit-Limitขีดจำกัดของรายการที่เข้มงวดที่สุดใน
RateLimit-Policy(รายการที่เหลือคำขอน้อยที่สุด)X-RateLimit-Remainingจำนวนคำขอที่เหลือภายใต้ขีดจำกัดที่เข้มงวดที่สุด
X-RateLimit-Resetจำนวนวินาทีจนกว่าขีดจำกัดที่เข้มงวดที่สุดจะรีเซ็ต
Idempotency-Replayedtrueหมายถึงการตอบกลับนี้เป็นการส่งคืนซ้ำจากการตอบกลับที่บันทึกไว้สำหรับIdempotency-Keyนี้: ไม่มีการทำการดำเนินการซ้ำ
application/json
idstringจำเป็นID ของการอัปโหลด (
upl_ตามด้วยอักขระฐานสิบหก 32 ตัว)filenamestringจำเป็นชื่อไฟล์ (ไม่มีโฟลเดอร์)
content_typestringจำเป็นประเภทเนื้อหาที่ประกาศไว้ ว่างถ้าไม่ได้ประกาศ
sizeinteger (int64)จำเป็นขนาดไฟล์เป็นไบต์
sha256string | nullจำเป็นSHA-256 ของไฟล์ที่ประกาศเมื่อสร้างหรือเมื่อ
completeเป็นnullถ้ายังไม่ทราบpart_sizeinteger (int64)จำเป็นขนาดของแต่ละส่วนยกเว้นส่วนสุดท้าย (ตั้งแต่ 5 ถึง 100 MiB)
part_countintegerจำเป็นจำนวนส่วน
≥ 1, ≤ 1000
parts_receivedintegerจำเป็นจำนวนส่วนที่ได้รับแล้ว
≥ 0
ส่วนที่ได้รับแล้วตามหมายเลข (ว่างในการตอบกลับของ
POST /v1/uploads)reject_reasonstring | nullจำเป็นเหตุผลที่ปฏิเสธ (
rejected):checksum_mismatchtype_mismatchunsupported_formatinfectedscan_unavailableหรือunsafe_contentรายการค่านี้อาจมีค่าเพิ่ม เป็นnullถ้าไม่ถูกปฏิเสธreject_detailsobject | nullจำเป็นรายละเอียดของการปฏิเสธ (นามสกุล รูปแบบที่ประกาศและที่ตรวจพบ และค่า checksum) เป็น
nullถ้าไม่ถูกปฏิเสธcreated_atstring (date-time)จำเป็นเวลาที่สร้างการอัปโหลด
expires_atstring (date-time)จำเป็นกำหนดเวลาในการทำการอัปโหลดให้เสร็จ และเมื่อพร้อมแล้ว คือกำหนดเวลาในการนำไปใช้
completed_atstring (date-time) | nullจำเป็นเวลาที่การตรวจเสร็จสิ้น (
readyหรือrejected)consumed_atstring (date-time) | nullจำเป็นเวลาที่นำการอัปโหลดไปใช้ (โดยการ์ด ไฟล์บีบอัด หรือการนำเข้า)
202ไฟล์ยังอยู่ระหว่างการตรวจ (`processing`)
เฮดเดอร์การตอบกลับ
RateLimit-Policyขีดจำกัดที่มีผล ในรูปแบบของร่าง IETF
draft-ietf-httpapi-ratelimit-headers: รายการคั่นด้วยจุลภาค"<name>";q=<quota>;w=<window in seconds>โดยkeyคืออัตราคำขอของคีย์ API (โควตาคือช่วงพุ่งสูง (burst) กรอบเวลาคือเวลาที่ใช้เติมกลับจนเต็ม สำหรับเซสชันคือuserและเมื่อไม่มีข้อมูลรับรองคือip) ส่วนminutedayและmonthคือโควตาขององค์กรสำหรับนาที วัน และเดือนตามปฏิทินใน UTCRateLimitส่วนที่เหลือของแต่ละขีดจำกัดใน
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>X-RateLimit-Limitขีดจำกัดของรายการที่เข้มงวดที่สุดใน
RateLimit-Policy(รายการที่เหลือคำขอน้อยที่สุด)X-RateLimit-Remainingจำนวนคำขอที่เหลือภายใต้ขีดจำกัดที่เข้มงวดที่สุด
X-RateLimit-Resetจำนวนวินาทีจนกว่าขีดจำกัดที่เข้มงวดที่สุดจะรีเซ็ต
Idempotency-Replayedtrueหมายถึงการตอบกลับนี้เป็นการส่งคืนซ้ำจากการตอบกลับที่บันทึกไว้สำหรับIdempotency-Keyนี้: ไม่มีการทำการดำเนินการซ้ำ
application/json
idstringจำเป็นID ของการอัปโหลด (
upl_ตามด้วยอักขระฐานสิบหก 32 ตัว)filenamestringจำเป็นชื่อไฟล์ (ไม่มีโฟลเดอร์)
content_typestringจำเป็นประเภทเนื้อหาที่ประกาศไว้ ว่างถ้าไม่ได้ประกาศ
sizeinteger (int64)จำเป็นขนาดไฟล์เป็นไบต์
sha256string | nullจำเป็นSHA-256 ของไฟล์ที่ประกาศเมื่อสร้างหรือเมื่อ
completeเป็นnullถ้ายังไม่ทราบpart_sizeinteger (int64)จำเป็นขนาดของแต่ละส่วนยกเว้นส่วนสุดท้าย (ตั้งแต่ 5 ถึง 100 MiB)
part_countintegerจำเป็นจำนวนส่วน
≥ 1, ≤ 1000
parts_receivedintegerจำเป็นจำนวนส่วนที่ได้รับแล้ว
≥ 0
ส่วนที่ได้รับแล้วตามหมายเลข (ว่างในการตอบกลับของ
POST /v1/uploads)reject_reasonstring | nullจำเป็นเหตุผลที่ปฏิเสธ (
rejected):checksum_mismatchtype_mismatchunsupported_formatinfectedscan_unavailableหรือunsafe_contentรายการค่านี้อาจมีค่าเพิ่ม เป็นnullถ้าไม่ถูกปฏิเสธreject_detailsobject | nullจำเป็นรายละเอียดของการปฏิเสธ (นามสกุล รูปแบบที่ประกาศและที่ตรวจพบ และค่า checksum) เป็น
nullถ้าไม่ถูกปฏิเสธcreated_atstring (date-time)จำเป็นเวลาที่สร้างการอัปโหลด
expires_atstring (date-time)จำเป็นกำหนดเวลาในการทำการอัปโหลดให้เสร็จ และเมื่อพร้อมแล้ว คือกำหนดเวลาในการนำไปใช้
completed_atstring (date-time) | nullจำเป็นเวลาที่การตรวจเสร็จสิ้น (
readyหรือrejected)consumed_atstring (date-time) | nullจำเป็นเวลาที่นำการอัปโหลดไปใช้ (โดยการ์ด ไฟล์บีบอัด หรือการนำเข้า)
401ไม่ได้ส่งข้อมูลรับรอง (ไม่มีทั้งคุกกี้เซสชันและคีย์ API) หรือไม่พบคีย์
เฮดเดอร์การตอบกลับ
RateLimit-Policyขีดจำกัดที่มีผล ในรูปแบบของร่าง IETF
draft-ietf-httpapi-ratelimit-headers: รายการคั่นด้วยจุลภาค"<name>";q=<quota>;w=<window in seconds>โดยkeyคืออัตราคำขอของคีย์ API (โควตาคือช่วงพุ่งสูง (burst) กรอบเวลาคือเวลาที่ใช้เติมกลับจนเต็ม สำหรับเซสชันคือuserและเมื่อไม่มีข้อมูลรับรองคือip) ส่วนminutedayและmonthคือโควตาขององค์กรสำหรับนาที วัน และเดือนตามปฏิทินใน UTCRateLimitส่วนที่เหลือของแต่ละขีดจำกัดใน
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>X-RateLimit-Limitขีดจำกัดของรายการที่เข้มงวดที่สุดใน
RateLimit-Policy(รายการที่เหลือคำขอน้อยที่สุด)X-RateLimit-Remainingจำนวนคำขอที่เหลือภายใต้ขีดจำกัดที่เข้มงวดที่สุด
X-RateLimit-Resetจำนวนวินาทีจนกว่าขีดจำกัดที่เข้มงวดที่สุดจะรีเซ็ต
application/json
403ไม่อนุญาตให้ดำเนินการ: บทบาทไม่เพียงพอ ไม่มีสิทธิ์เข้าถึงคอลเลกชันหรือการ์ด คำขอทำงานในโหมด “View as” หรือองค์กรถูกระงับหรือถูกลบ (`detail` เป็นออบเจ็กต์ที่มี `code: org_suspended | org_deleted`)
เฮดเดอร์การตอบกลับ
RateLimit-Policyขีดจำกัดที่มีผล ในรูปแบบของร่าง IETF
draft-ietf-httpapi-ratelimit-headers: รายการคั่นด้วยจุลภาค"<name>";q=<quota>;w=<window in seconds>โดยkeyคืออัตราคำขอของคีย์ API (โควตาคือช่วงพุ่งสูง (burst) กรอบเวลาคือเวลาที่ใช้เติมกลับจนเต็ม สำหรับเซสชันคือuserและเมื่อไม่มีข้อมูลรับรองคือip) ส่วนminutedayและmonthคือโควตาขององค์กรสำหรับนาที วัน และเดือนตามปฏิทินใน UTCRateLimitส่วนที่เหลือของแต่ละขีดจำกัดใน
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>X-RateLimit-Limitขีดจำกัดของรายการที่เข้มงวดที่สุดใน
RateLimit-Policy(รายการที่เหลือคำขอน้อยที่สุด)X-RateLimit-Remainingจำนวนคำขอที่เหลือภายใต้ขีดจำกัดที่เข้มงวดที่สุด
X-RateLimit-Resetจำนวนวินาทีจนกว่าขีดจำกัดที่เข้มงวดที่สุดจะรีเซ็ต
application/json
404ออบเจ็กต์ไม่มีอยู่หรือคุณเข้าถึงไม่ได้ API ไม่ยืนยันว่าออบเจ็กต์ที่จำกัดสิทธิ์มีอยู่จริง
เฮดเดอร์การตอบกลับ
RateLimit-Policyขีดจำกัดที่มีผล ในรูปแบบของร่าง IETF
draft-ietf-httpapi-ratelimit-headers: รายการคั่นด้วยจุลภาค"<name>";q=<quota>;w=<window in seconds>โดยkeyคืออัตราคำขอของคีย์ API (โควตาคือช่วงพุ่งสูง (burst) กรอบเวลาคือเวลาที่ใช้เติมกลับจนเต็ม สำหรับเซสชันคือuserและเมื่อไม่มีข้อมูลรับรองคือip) ส่วนminutedayและmonthคือโควตาขององค์กรสำหรับนาที วัน และเดือนตามปฏิทินใน UTCRateLimitส่วนที่เหลือของแต่ละขีดจำกัดใน
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>X-RateLimit-Limitขีดจำกัดของรายการที่เข้มงวดที่สุดใน
RateLimit-Policy(รายการที่เหลือคำขอน้อยที่สุด)X-RateLimit-Remainingจำนวนคำขอที่เหลือภายใต้ขีดจำกัดที่เข้มงวดที่สุด
X-RateLimit-Resetจำนวนวินาทีจนกว่าขีดจำกัดที่เข้มงวดที่สุดจะรีเซ็ต
application/json
409สถานะของออบเจ็กต์ไม่อนุญาตให้ดำเนินการ เช่น ข้อมูลซ้ำ การทำดัชนีที่กำลังดำเนินอยู่ หรืองานประมวลผลที่ประมวลผลไปแล้ว
เฮดเดอร์การตอบกลับ
RateLimit-Policyขีดจำกัดที่มีผล ในรูปแบบของร่าง IETF
draft-ietf-httpapi-ratelimit-headers: รายการคั่นด้วยจุลภาค"<name>";q=<quota>;w=<window in seconds>โดยkeyคืออัตราคำขอของคีย์ API (โควตาคือช่วงพุ่งสูง (burst) กรอบเวลาคือเวลาที่ใช้เติมกลับจนเต็ม สำหรับเซสชันคือuserและเมื่อไม่มีข้อมูลรับรองคือip) ส่วนminutedayและmonthคือโควตาขององค์กรสำหรับนาที วัน และเดือนตามปฏิทินใน UTCRateLimitส่วนที่เหลือของแต่ละขีดจำกัดใน
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>X-RateLimit-Limitขีดจำกัดของรายการที่เข้มงวดที่สุดใน
RateLimit-Policy(รายการที่เหลือคำขอน้อยที่สุด)X-RateLimit-Remainingจำนวนคำขอที่เหลือภายใต้ขีดจำกัดที่เข้มงวดที่สุด
X-RateLimit-Resetจำนวนวินาทีจนกว่าขีดจำกัดที่เข้มงวดที่สุดจะรีเซ็ต
application/json
410ออบเจ็กต์เคยมีอยู่แต่ไม่พร้อมใช้งานอีกต่อไป: ลิงก์ถูกใช้ไปแล้วหรือหมดอายุ หรือไฟล์ถูกลบเมื่อสิ้นสุดระยะเวลาเก็บรักษา
เฮดเดอร์การตอบกลับ
RateLimit-Policyขีดจำกัดที่มีผล ในรูปแบบของร่าง IETF
draft-ietf-httpapi-ratelimit-headers: รายการคั่นด้วยจุลภาค"<name>";q=<quota>;w=<window in seconds>โดยkeyคืออัตราคำขอของคีย์ API (โควตาคือช่วงพุ่งสูง (burst) กรอบเวลาคือเวลาที่ใช้เติมกลับจนเต็ม สำหรับเซสชันคือuserและเมื่อไม่มีข้อมูลรับรองคือip) ส่วนminutedayและmonthคือโควตาขององค์กรสำหรับนาที วัน และเดือนตามปฏิทินใน UTCRateLimitส่วนที่เหลือของแต่ละขีดจำกัดใน
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>X-RateLimit-Limitขีดจำกัดของรายการที่เข้มงวดที่สุดใน
RateLimit-Policy(รายการที่เหลือคำขอน้อยที่สุด)X-RateLimit-Remainingจำนวนคำขอที่เหลือภายใต้ขีดจำกัดที่เข้มงวดที่สุด
X-RateLimit-Resetจำนวนวินาทีจนกว่าขีดจำกัดที่เข้มงวดที่สุดจะรีเซ็ต
application/json
422ข้อผิดพลาดในการตรวจความถูกต้องของข้อมูล: เนื้อหาหรือพารามิเตอร์ไม่ตรงกับสคีมา (`detail` เป็นรายการข้อผิดพลาดในการตรวจความถูกต้อง) หรือค่าพารามิเตอร์อยู่นอกช่วงที่กำหนด (`detail` เป็นข้อความ)
เฮดเดอร์การตอบกลับ
RateLimit-Policyขีดจำกัดที่มีผล ในรูปแบบของร่าง IETF
draft-ietf-httpapi-ratelimit-headers: รายการคั่นด้วยจุลภาค"<name>";q=<quota>;w=<window in seconds>โดยkeyคืออัตราคำขอของคีย์ API (โควตาคือช่วงพุ่งสูง (burst) กรอบเวลาคือเวลาที่ใช้เติมกลับจนเต็ม สำหรับเซสชันคือuserและเมื่อไม่มีข้อมูลรับรองคือip) ส่วนminutedayและmonthคือโควตาขององค์กรสำหรับนาที วัน และเดือนตามปฏิทินใน UTCRateLimitส่วนที่เหลือของแต่ละขีดจำกัดใน
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>X-RateLimit-Limitขีดจำกัดของรายการที่เข้มงวดที่สุดใน
RateLimit-Policy(รายการที่เหลือคำขอน้อยที่สุด)X-RateLimit-Remainingจำนวนคำขอที่เหลือภายใต้ขีดจำกัดที่เข้มงวดที่สุด
X-RateLimit-Resetจำนวนวินาทีจนกว่าขีดจำกัดที่เข้มงวดที่สุดจะรีเซ็ต
application/json
429คำขอมากเกินไป (`api.rate_limited`) โควตาขององค์กรสำหรับนาที วัน หรือเดือนหมดแล้ว (`api.quota_exceeded` โดย `error.details` มี `quota` `limit` และ `reset_at`) องค์กรใช้ถึงขีดจำกัดแล้ว หรือบริการคำตอบไม่ว่าง (`answers.engine_busy`) รอตามเวลาในเฮดเดอร์ `Retry-After`
เฮดเดอร์การตอบกลับ
Retry-Afterจำนวนวินาทีที่ต้องรอก่อนลองส่งคำขอใหม่
RateLimit-Policyขีดจำกัดที่มีผล ในรูปแบบของร่าง IETF
draft-ietf-httpapi-ratelimit-headers: รายการคั่นด้วยจุลภาค"<name>";q=<quota>;w=<window in seconds>โดยkeyคืออัตราคำขอของคีย์ API (โควตาคือช่วงพุ่งสูง (burst) กรอบเวลาคือเวลาที่ใช้เติมกลับจนเต็ม สำหรับเซสชันคือuserและเมื่อไม่มีข้อมูลรับรองคือip) ส่วนminutedayและmonthคือโควตาขององค์กรสำหรับนาที วัน และเดือนตามปฏิทินใน UTCRateLimitส่วนที่เหลือของแต่ละขีดจำกัดใน
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>X-RateLimit-Limitขีดจำกัดของรายการที่เข้มงวดที่สุดใน
RateLimit-Policy(รายการที่เหลือคำขอน้อยที่สุด)X-RateLimit-Remainingจำนวนคำขอที่เหลือภายใต้ขีดจำกัดที่เข้มงวดที่สุด
X-RateLimit-Resetจำนวนวินาทีจนกว่าขีดจำกัดที่เข้มงวดที่สุดจะรีเซ็ต
application/json
รหัสข้อผิดพลาด
รหัสที่เอนด์พอยต์นี้อาจส่งคืนใน error.code นอกเหนือจากรหัสทั่วไปของทุกคำขอ
การลองใหม่อย่างปลอดภัย
ส่งเฮดเดอร์ Idempotency-Key (เช่น UUID) ไปกับทุกคำขอ POST และ PATCH เมื่อลองใหม่ด้วยคีย์เดียวกันภายใน 24 ชั่วโมง Sursa จะส่งคืนการตอบกลับที่บันทึกไว้แทนการดำเนินการคำขอซ้ำ
ขีดจำกัดอัตราการเรียก
การตอบกลับมีเฮดเดอร์ RateLimit และ RateLimit-Policy รวมถึงเฮดเดอร์แบบเดิม X-RateLimit-Limit X-RateLimit-Remaining และ X-RateLimit-Reset การตอบกลับ 429 มี Retry-After เป็นวินาที ให้รอตามนั้นแล้วลองใหม่