Finish an upload
const url = 'https://api.sloose.com/orgs/org_9f3c/imports/imp_4d1a/files/fil_7c2e/commit';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"parts":[{"part":1,"etag":"example"}]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.sloose.com/orgs/org_9f3c/imports/imp_4d1a/files/fil_7c2e/commit \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "parts": [ { "part": 1, "etag": "example" } ] }'Joins a multipart upload (the parts and the ETag each PUT answered), then checks what is in storage: its size must be the size reserved, and its first 4 KiB decide its type (a ranged read, never the file). A size that differs, a part missing, or a program (a Windows, ELF or Mach-O binary, a Java program, a package the detector names, a #! script or a registry script) is deleted and refused. A zip is a container whose contents are not inspected: a zip-based package is refused only when it is recognisable from the first 4 KiB. Only then is the file stored, kept the plan’s days after its last use. The server never reads the whole file.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The organisation id the session was issued for. A token for one organisation can never read another.
Example
org_9f3cThe organisation id the session was issued for. A token for one organisation can never read another.
The import id.
Example
imp_4d1aThe import id.
The file id.
Example
fil_7c2eThe file id.
Request Body
Section titled “Request Body”object
object
The ETag the part’s PUT answered.
Examplegenerated
{ "parts": [ { "part": 1, "etag": "example" } ]}Responses
Section titled “Responses”The file is stored.
object
The stored size in bytes, read from storage at commit; null until then.
Read from the file’s first bytes by the server, never from its name or the browser’s claim.
The content’s SHA-256 (base64), as the browser said it. See sha256Verified.
True where storage checked it (a single signed PUT); false where it is the browser’s claim (a multipart file, whose parts are each verified by their MD5).
Example
{ "state": "reserved"}No bearer, or one that no longer resolves: a session that is unknown or expired (code: AUTH_REQUIRED), or an API token that was revoked or expired (TOKEN_REVOKED, TOKEN_EXPIRED), whose organisation is gone (ORG_NOT_FOUND) or whose member or user row is (MEMBERSHIP_GONE).
The error envelope every non-2xx answer uses.
object
Human-readable explanation.
Machine-readable reason. Absent on a few legacy 400s.
Examplegenerated
{ "error": "example", "code": "example"}The role or session. Like every route behind a session: a session signed in but in no organisation is refused code: NO_ORG, a banned person code: BANNED, and a closed organisation code: ORG_CLOSED.
The error envelope every non-2xx answer uses.
object
Human-readable explanation.
Machine-readable reason. Absent on a few legacy 400s.
Examplegenerated
{ "error": "example", "code": "example"}No such import or file.
The error envelope every non-2xx answer uses.
object
Human-readable explanation.
Machine-readable reason. Absent on a few legacy 400s.
Examplegenerated
{ "error": "example", "code": "example"}Not an upload in progress (FILE_NOT_RESERVED), or the parts do not join (UPLOAD_INCOMPLETE).
The error envelope every non-2xx answer uses.
object
Human-readable explanation.
Machine-readable reason. Absent on a few legacy 400s.
Examplegenerated
{ "error": "example", "code": "example"}The stored size is not the size reserved (FILE_SIZE_MISMATCH), nothing arrived (FILE_NOT_UPLOADED), or it is a program (FILE_TYPE_REFUSED). The object is deleted and the reservation retired (nothing arrived keeps the reservation).
The error envelope every non-2xx answer uses.
object
Human-readable explanation.
Machine-readable reason. Absent on a few legacy 400s.
Examplegenerated
{ "error": "example", "code": "example"}The restore switch is on (code: MAINTENANCE): every route but /health and /robots.txt is refused before anything is read, except the operator’s own POST /staff/people/{id}/delete with the ADMIN_TOKEN. Sloose is down for maintenance. Please try again in a few minutes.
object
Example
{ "code": "MAINTENANCE"}Headers
Section titled “Headers”Seconds until asking again is worth it (300 while the switch is on).