Files

Get upload status

Reports which parts have landed, so a resumed upload sends only what is missing. A read, so it needs files.read rather than files.write.

GET /v1/files/uploads/:session

Permission

The key must be granted files.read

A key without it gets 403 insufficient_scope, with the missing permission named in details.

This is the point of a resumable upload: after an interruption, send only the parts that are missing. A read, so it needs files.read where the rest of the session needs files.write.

Path parameters

Field Type Description
session required string The session to inspect.

Request

curl https://api.veruapis.com/v1/files/uploads/:session \
  -H "Authorization: Bearer vak_live_..."

Response

Field Type Description
session_id string
document_id string
part_size integer
total_size integer
status string open while parts are still accepted.
uploaded_parts integer[] Which part numbers have landed. Read from object storage rather than from anything a client remembered, so a resume survives the client restarting.
uploaded_bytes integer How much of the file is stored.
{
  "data": {
  "session_id": "0192b001-0000-7a41-b8d2-5e9f0c3a7b41",
  "document_id": "0192a1c2-6f3e-7a41-b8d2-5e9f0c3a7b41",
  "part_size": 8388608,
  "total_size": 104857600,
  "status": "open",
  "uploaded_parts": [1, 2, 4],
  "uploaded_bytes": 25165824
},
  "meta": { "request_id": "req_01j8z9...", "timestamp": "2026-09-02T10:00:00Z" }
}
Worth knowing

Call it after a connection drops and send only the parts that are missing — here, 3 and everything after 4. The list comes from object storage rather than from anything the client remembered, so a resume survives a restart.

Errors

Every failure uses the same shape, with a stable string code you can branch on. See the error reference.

Related

GET /v1/files/uploads/:session

session
Runs the real request against your own workspace. The key is used once and never stored.