Ask for the URL of one part
const url = 'https://api.sloose.com/orgs/org_9f3c/imports/imp_4d1a/files/fil_7c2e/parts';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"part":1,"md5":"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/parts \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "part": 1, "md5": "example" }'For a multipart upload: the signed URL one part is PUT to, once the browser has the part’s Content-MD5, which is signed in so storage verifies the part’s bytes and refuses a part that does not match. Parts are numbered from 1 to parts. The URL lives minutes and is for this part of this upload only.
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 Bodyrequired
Section titled “Request Bodyrequired”object
The part’s MD5, base64.
Examplegenerated
{ "part": 1, "md5": "example"}Responses
Section titled “Responses”Where to PUT the part.
object
Headers to send on the PUT exactly as given: they are part of the signature, and storage refuses a request without them.
object
Examplegenerated
{ "url": "example", "headers": { "additionalProperty": "example" }, "expiresInSeconds": 1}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"}The file is not an upload in progress (FILE_NOT_RESERVED), or has no multipart upload (NOT_MULTIPART).
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"}A part number outside the file’s parts (PART_OUT_OF_RANGE).
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).