POST Multipart Upload
Overview
The following table contains important information about the POST method in regards to start multipart upload.
| POST Method | |
|---|---|
| Method | POST |
| URL or Endpoint | /api/projects/projectId/uploads/multipart |
| Headers | Authorization |
| Parameters | projectId |
| Body | Check request body below. |
The description of the URL parameter is as follows:
| projectId Parameter | |
|---|---|
| URL Parameter Name | projectId |
| Mandatory | Yes |
| Type | string |
| Description | Unique Id of the project. |
Request Body
{
"partsNumber": 0,
"fileName": "{fileName}",
"contentLength": "{contentLength}",
"mimeType": "{mimeType}",
"enableDuplicateCheck": false,
"fileHash": "{fileHash}",
"presignedUrlExpiryTimeHours": 0
}
The description of the parameters is as follows:
| Body Parameter Name | Mandatory | Type | Description |
|---|---|---|---|
| partsNumber | Yes | integer | The total number of parts the file is divided into. |
| fileName | Yes | string | The name of the file being uploaded. |
| contentLength | No | string | The total size of the file in bytes. |
| mimeType | No | string | The MIME type of the file (e.g., "video/mp4"). |
| enableDuplicateCheck | No | boolean | Determines whether duplicate upload should be disallowed. |
| fileHash | No | string | The hash of the file to be uploaded. Required if enableDuplicateCheck is true. |
| presignedUrlExpiryTimeHours | No | integer | Presigned URL expiry time in hours. Value must be between 1 and 168. If sent as null or omitted, it defaults to 12 hours. |
If the enableDuplicateCheck field is set to true and fileHash is provided, the system will check for existing files with the same file hash and prevent them from being uploaded again. If set to false or omitted, duplicates will be allowed.
Important: This field should be enabled for both the initial upload and any subsequent uploads. If not enabled initially, the system will not perform the duplicate check, and duplicates will be allowed, even if the file hash is the same.
Response
If the action is successful, the service sends back an HTTP 200 response.
{
"success": true,
"errors": [],
"messages": [],
"result": {
"uploadId": "{uploadId}",
"requestKey": "{requestKey}",
"presignedUrl": [
{
"partNumber": 0,
"presignedUrl": "{presignedUrl}"
}
],
"uploadFileDetailsId": 0
},
"resultInfo": null,
"statusCode": 200
}
Information about the fields that appear when you receive the response are displayed in the table below.
| Field Name | Type | Description |
|---|---|---|
| success | bool | If the response is successful it will return true. Otherwise, it will return false. |
| errors | array[string] | Indicates if there was an error. |
| messages | array[string] | Returns the response message from the back-end. |
| result | object | Returns the main response object containing upload details. |
| uploadId | string | Unique identifier for the upload session. |
| requestKey | string | A unique key associated with the request. |
| presignedUrl | array[object] | Array of objects, each containing a part number and the corresponding presigned URL for uploading. |
| partNumber | integer | The part number for each segment of the upload. |
| presignedUrl | string | The presigned URL to upload a specific part of the file. |
| uploadFileDetailsId | integer($int32) | The ID of upload file details. |
| resultInfo | string | Returns extra information about the result, if any. |
| statusCode | integer($int32) | Returns the HTTP Status Code. |
202 Accepted
The endpoint may return HTTP 202 when the request is accepted for asynchronous processing. Example response:
{
"success": true,
"errors": [],
"messages": [],
"result": {
"uploadFileDetailsId": 0,
"requestKey": "{requestKey}"
},
"resultInfo": "string",
"statusCode": 202
}
A 202 response does not indicate failure; it indicates that the upload request was accepted but the file is not yet fully processed. Common scenarios include:
- File Upload Initiation: If a filehash collision occurs and the server cannot confirm that the original file upload was completed (endpoint
POST /api/projects/{projectId}/uploads/multipart-completewas not called orPOST /api/projects/{projectId}/uploads/multipart-abortwas called), the initiation will return 202 Accepted with the existingrequestKey(indicating the upload is pending completion).
Resume Multipart Upload: The upload can be resumed only if it was not completed or aborted by calling POST /api/projects/{projectId}/uploads/multipart-resume, which returns presigned URLs only for the parts that were not uploaded yet.
Errors
For information about the errors that are common to all actions, see Common Errors:
HTTP Status Code 400: Bad Request
HTTP Status Code 401: Unauthorized
HTTP Status Code 403: Forbidden
HTTP Status Code 404: Result Not Found
HTTP Status Code 409: Conflict
{
"success": true,
"errors": [],
"messages": [],
"result": {
"uploadFileDetailsId": "{uploadFileDetailsId}",
"requestKey": "{requestKey}"
},
"resultInfo": null,
"statusCode": 409,
}
HTTP Status Code 500: Internal Server Error
HTTP Status Code 503: Backend Fetch Failed