Skip to content

Finish an upload

POST
/orgs/{org}/imports/{id}/files/{fid}/commit
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.

org
required

The organisation id the session was issued for. A token for one organisation can never read another.

string
Example
org_9f3c

The organisation id the session was issued for. A token for one organisation can never read another.

id
required

The import id.

string
Example
imp_4d1a

The import id.

fid
required

The file id.

string
Example
fil_7c2e

The file id.

Media typeapplication/json
object
parts
Array<object>
<= 10000 items
object
part
required
integer
>= 1 <= 10000
etag
required

The ETag the part’s PUT answered.

string
/^[A-Za-z0-9"_-]{1,512}$/
Examplegenerated
{
"parts": [
{
"part": 1,
"etag": "example"
}
]
}

The file is stored.

Media typeapplication/json
object
id
required
string
state
required
string
Allowed values: reserved committed attached removed deleting
size
required

The stored size in bytes, read from storage at commit; null until then.

integer | null
declaredSize
required
integer
contentType
required

Read from the file’s first bytes by the server, never from its name or the browser’s claim.

string | null
sha256
required

The content’s SHA-256 (base64), as the browser said it. See sha256Verified.

string | null
sha256Verified
required

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).

boolean
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).

Media typeapplication/json

The error envelope every non-2xx answer uses.

object
error
required

Human-readable explanation.

string
code

Machine-readable reason. Absent on a few legacy 400s.

string
key
additional properties
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.

Media typeapplication/json

The error envelope every non-2xx answer uses.

object
error
required

Human-readable explanation.

string
code

Machine-readable reason. Absent on a few legacy 400s.

string
key
additional properties
Examplegenerated
{
"error": "example",
"code": "example"
}

No such import or file.

Media typeapplication/json

The error envelope every non-2xx answer uses.

object
error
required

Human-readable explanation.

string
code

Machine-readable reason. Absent on a few legacy 400s.

string
key
additional properties
Examplegenerated
{
"error": "example",
"code": "example"
}

Not an upload in progress (FILE_NOT_RESERVED), or the parts do not join (UPLOAD_INCOMPLETE).

Media typeapplication/json

The error envelope every non-2xx answer uses.

object
error
required

Human-readable explanation.

string
code

Machine-readable reason. Absent on a few legacy 400s.

string
key
additional properties
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).

Media typeapplication/json

The error envelope every non-2xx answer uses.

object
error
required

Human-readable explanation.

string
code

Machine-readable reason. Absent on a few legacy 400s.

string
key
additional properties
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.

Media typeapplication/json
object
error
required
string
code
required
string
Allowed value: MAINTENANCE
Example
{
"code": "MAINTENANCE"
}
Retry-After
integer

Seconds until asking again is worth it (300 while the switch is on).

Report a problem with this page

sloose.com