Quickupload API
A REST API for uploading, managing, and analysing shared files programmatically. All requests are authenticated with an API key and are rate-limited per subscription plan.
https://quickupload.io/api/v1Authentication
Every request requires an API key as a Bearer token. Keys use a {prefix}.{secret} format and are scoped to specific permissions. Generate them from Settings → Developer → API Keys.
Authorization: Bearer YOUR_API_KEYTreat keys as secrets — the full key is shown only once at creation.
Scopes
files:readList files and read file metadata.files:writeUpload new files.files:deleteDelete files.files:downloadDownload file contents.user:readRead account information.analytics:readRead analytics data.Rate Limits
| Plan | Limit |
|---|---|
| Free | No accessAPI access requires a Pro or Enterprise plan. |
| Pro | 100 requests / hour |
| Enterprise | Unlimited |
Rate-limited responses include X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers. Enterprise (unlimited) responses omit them.
Endpoints
/filesfiles:readReturns a paginated list of the files owned by the authenticated account, newest first.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| page | query | integer | No | Page number (default 1). |
| limit | query | integer | No | Items per page (default 20, max 100). |
Example request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://quickupload.io/api/v1/files?page=1&limit=20"Example response
{
"data": [
{
"id": "19a2b409-e4e2-482d-ad38-91f47bd2a8ac",
"file_name": "report.pdf",
"file_size": 1048576,
"mime_type": "application/pdf",
"upload_date": "2026-07-29T15:17:03.427+00:00",
"expiration_date": "2026-08-05T15:16:59+00:00",
"download_count": 3,
"is_public": true
}
],
"meta": {
"pagination": { "page": 1, "limit": 20, "total": 42, "totalPages": 3 }
}
}/files/{id}files:readReturns metadata for a single file owned by the authenticated account.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | uuid | Yes | The file ID. |
Example request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://quickupload.io/api/v1/files/19a2b409-e4e2-482d-ad38-91f47bd2a8ac"Example response
{
"data": {
"id": "19a2b409-e4e2-482d-ad38-91f47bd2a8ac",
"file_name": "report.pdf",
"file_size": 1048576,
"mime_type": "application/pdf",
"upload_date": "2026-07-29T15:17:03.427+00:00",
"expiration_date": "2026-08-05T15:16:59+00:00",
"download_count": 3,
"is_public": true
}
}/files/{id}files:deletePermanently deletes a file and its stored content.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | uuid | Yes | The file ID. |
Example request
curl -X DELETE -H "Authorization: Bearer YOUR_API_KEY" \
"https://quickupload.io/api/v1/files/19a2b409-e4e2-482d-ad38-91f47bd2a8ac"Example response
{
"data": { "id": "19a2b409-e4e2-482d-ad38-91f47bd2a8ac", "deleted": true }
}/files/{id}/downloadfiles:downloadStreams the file content as a binary response.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | uuid | Yes | The file ID. |
Example request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://quickupload.io/api/v1/files/19a2b409-e4e2-482d-ad38-91f47bd2a8ac/download" \
--output report.pdfExample response
<binary file contents>/files/uploadfiles:writeUploads a single file in one multipart request. Best for files that fit comfortably in memory.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| file | form | binary | Yes | The file contents. |
| file_name | form | string | No | Overrides the uploaded filename. |
| mime_type | form | string | No | Overrides the detected MIME type. |
| expires_at | form | datetime | No | ISO 8601 expiry (within your plan limit). |
| password | form | string | No | Optional password protection. |
| max_downloads | form | integer | No | Optional download cap. |
Example request
curl -X POST -H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@report.pdf" \
-F "expires_at=2026-08-05T15:16:59Z" \
"https://quickupload.io/api/v1/files/upload"Example response
{
"data": {
"id": "19a2b409-e4e2-482d-ad38-91f47bd2a8ac",
"slug": "asCWRYJgRAK4rbqk_6FnM",
"file_name": "report.pdf",
"file_size": 1048576,
"mime_type": "application/pdf",
"upload_date": "2026-07-29T15:17:03.427+00:00",
"expiration_date": "2026-08-05T15:16:59+00:00",
"status": "active"
}
}/files/upload/initfiles:writeBegins a resumable, chunked upload and returns an upload session. Recommended for large files.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| file_name | body | string | Yes | Original filename. |
| mime_type | body | string | Yes | File MIME type. |
| file_size | body | integer | Yes | Total size in bytes. |
| total_chunks | body | integer | Yes | Number of chunks you will upload. |
| expiration_date | body | datetime | Yes | ISO 8601 expiry. |
| password | body | string | No | Optional password protection. |
| max_downloads | body | integer | No | Optional download cap. |
Request body
{
"file_name": "large-video.mp4",
"mime_type": "video/mp4",
"file_size": 524288000,
"total_chunks": 250,
"expiration_date": "2026-08-05T15:16:59Z"
}Example request
curl -X POST -H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"file_name":"large-video.mp4","mime_type":"video/mp4","file_size":524288000,"total_chunks":250,"expiration_date":"2026-08-05T15:16:59Z"}' \
"https://quickupload.io/api/v1/files/upload/init"Example response
{
"data": { "upload_id": "upl_8f2vv1785335133599", "chunk_size": 2097152 }
}/files/upload/chunkfiles:writeUploads a single chunk for an active chunked upload session.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| upload_id | form | string | Yes | Session ID from /upload/init. |
| chunk_index | form | integer | Yes | Zero-based chunk index. |
| chunk | form | binary | Yes | The chunk contents. |
Example request
curl -X POST -H "Authorization: Bearer YOUR_API_KEY" \
-F "upload_id=upl_8f2vv1785335133599" \
-F "chunk_index=0" \
-F "chunk=@chunk_0.bin" \
"https://quickupload.io/api/v1/files/upload/chunk"Example response
{
"data": { "upload_id": "upl_8f2vv1785335133599", "chunk_index": 0, "received": true }
}/files/upload/completefiles:writeFinalises a chunked upload, assembling the chunks into the stored file.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| upload_id | body | string | Yes | Session ID from /upload/init. |
Request body
{ "upload_id": "upl_8f2vv1785335133599" }Example request
curl -X POST -H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"upload_id":"upl_8f2vv1785335133599"}' \
"https://quickupload.io/api/v1/files/upload/complete"Example response
{
"data": {
"id": "19a2b409-e4e2-482d-ad38-91f47bd2a8ac",
"slug": "asCWRYJgRAK4rbqk_6FnM",
"file_name": "large-video.mp4",
"file_size": 524288000,
"status": "active"
}
}Errors
All errors return a consistent JSON shape with an appropriate HTTP status code.
{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests",
"details": {}
}
}| Status | Code | Meaning |
|---|---|---|
| 400 | validation-failed | The request body or parameters were invalid. |
| 401 | unauthorized | Missing, malformed, or invalid API key. |
| 403 | forbidden | The key lacks the required scope, or the plan has no API access. |
| 404 | file_not_found | The file does not exist or is not owned by the account. |
| 413 | storage-limit-exceeded | The file exceeds the plan storage or size limit. |
| 429 | rate_limit_exceeded | Too many requests — retry after the reset time. |
| 500 | server_error | An unexpected server error occurred. |