Access & visibility
Allow documents.CompleteUpload on your API key.
Workspace access by default. Private member data requires approved member delegation through Brigg-Act-As; the key supplies permissions while private ownership and project boundaries remain enforced.
Request fields
Send a JSON object with the following fields. Required fields must be included; omit optional fields you do not need.
upload_idstringRequiredKeep the upload_id and the same credential and acting member throughout the upload. Completion returns a separate file_id. documents.CreateUpload.
At least 1 character.
partsarray of objectOptionalOptional receipts for uploaded parts. Completion can retrieve receipts when this list is omitted.
Item fields
part_numberintegerRequiredOne-based part number. Use 1 for a single upload; for multipart uploads, transfer every part from 1 through part_count.
Greater than 0.
etagstringRequiredOptional explicit multipart receipt. When supplying parts, preserve the complete ETag value including quotes. Otherwise omit the parts array and Brigg collects the receipts automatically.
At least 1 character.
Where this fits in an upload
The file guide includes a streaming Node.js helper and the complete HTTP sequence: create an upload, request a signed URL for each part, PUT the bytes directly to that URL, then complete the upload. Never send the Brigg API key to a transfer URL.
Keep the same credential and acting member for every step. Follow the returned part size and count rather than imposing your own split. Completing with only upload_id lets Brigg collect part receipts. A successful byte transfer is not a completed file: verification and scanning must finish before you receive a usable file_id.
Retain upload_id for recovery. Read its state before retransferring an interrupted upload; ready returns the existing file ID, while an expired upload requires a new start. Temporary transfer URLs and completed file IDs have different lifetimes.
Response
Returns 200 OK with a JSON body.
file_idstringRequiredStable file ID returned by documents.CompleteUpload, documents.ListDocuments or a document creation operation. Use the same ID for downloads, attachments and supported file-based workflows. Do not use a filename or storage path.
filenamestringRequiredOriginal filename, including its extension.
content_typestring or nullRequiredMedia type of the file, such as application/pdf. Null when no binary file exists.
size_bytesnumber or nullRequiredFile size in bytes. Null for a document without a downloadable binary file.
visibilitystringRequiredWho may read the completed file. Personal files belong to the approved acting member; workspace files use shared access.
Allowed: "personal", "workspace".
scan_statusstring or nullRequiredMalware scan state. Threats and failed scans block downloads. An unsupported file cannot be processed; only its original uploader can retrieve it as a forced download. Null is not proof of readiness.
Errors & retries
Set BRIGG_REQUEST_ID once for each logical action. The samples send it as Idempotency-Key. Reuse the same value and body on retries, including after a timeout; a missing response does not prove the action failed.
For rate limits, follow the server’s retry guidance and back off. See HTTP errors and safe retries and limits.
| HTTP status | Code | What to do |
|---|---|---|
| 400 | invalid_json |
Send a JSON object with Content-Type: application/json. |
| 400 | invalid_input |
Check the request fields and types. Supply a stable Idempotency-Key containing 1–200 characters. |
| 401 | invalid_key |
The workspace API key is missing, invalid or revoked. |
| 403 | forbidden |
Check the key’s operation and resource grants. If Brigg-Act-As is supplied, the key must be authorized to delegate to that member. |
| 404 | not_found |
The requested operation or resource is not available to this credential. |
| 429 | rate_limited |
Wait for Retry-After before retrying. Reuse the original Idempotency-Key. |
| 409 | upload_incomplete |
Transfer all parts with their exact planned byte lengths before completing the upload. |
| 409 | file_scan_pending |
Wait Retry-After seconds, then retry with the same input and idempotency key. |
| 409 | file_scan_blocked |
The file cannot be used because its malware scan was blocked. |
| 409 | upload_closed |
This upload was cancelled or is no longer open. |
| 410 | upload_expired |
Start a new upload with a new idempotency key. |
Next steps
JSON schemas
Use the complete schemas for validation or client generation.
Full request JSON schema
{
"type": "object",
"properties": {
"upload_id": {
"type": "string",
"minLength": 1,
"description": "Keep the upload_id and the same credential and acting member throughout the upload. Completion returns a separate file_id. [documents.CreateUpload](/developers/reference/documents/CreateUpload)."
},
"parts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"part_number": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "One-based part number. Use 1 for a single upload; for multipart uploads, transfer every part from 1 through part_count."
},
"etag": {
"type": "string",
"minLength": 1,
"description": "Optional explicit multipart receipt. When supplying parts, preserve the complete ETag value including quotes. Otherwise omit the parts array and Brigg collects the receipts automatically."
}
},
"required": [
"part_number",
"etag"
],
"additionalProperties": false
},
"description": "Optional receipts for uploaded parts. Completion can retrieve receipts when this list is omitted."
}
},
"required": [
"upload_id"
],
"additionalProperties": false,
"examples": [
{
"upload_id": "upl_example"
}
]
}Full response JSON schema
{
"type": "object",
"properties": {
"file_id": {
"type": "string",
"description": "Stable file ID returned by documents.CompleteUpload, documents.ListDocuments or a document creation operation. Use the same ID for downloads, attachments and supported file-based workflows. Do not use a filename or storage path."
},
"filename": {
"type": "string",
"description": "Original filename, including its extension."
},
"content_type": {
"type": [
"string",
"null"
],
"description": "Media type of the file, such as application/pdf. Null when no binary file exists."
},
"size_bytes": {
"type": [
"number",
"null"
],
"description": "File size in bytes. Null for a document without a downloadable binary file."
},
"visibility": {
"type": "string",
"enum": [
"personal",
"workspace"
],
"description": "Who may read the completed file. Personal files belong to the approved acting member; workspace files use shared access."
},
"scan_status": {
"type": [
"string",
"null"
],
"description": "Malware scan state. Threats and failed scans block downloads. An unsupported file cannot be processed; only its original uploader can retrieve it as a forced download. Null is not proof of readiness."
}
},
"required": [
"file_id",
"filename",
"content_type",
"size_bytes",
"visibility",
"scan_status"
],
"additionalProperties": false,
"examples": [
{
"file_id": "f_example",
"filename": "Agreement.pdf",
"content_type": "application/pdf",
"size_bytes": 48231,
"visibility": "workspace",
"scan_status": "clean"
}
]
}