REST API · v1.0.0

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/v1

Authentication

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 header
Authorization: Bearer YOUR_API_KEY

Treat 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

PlanLimit
FreeNo accessAPI access requires a Pro or Enterprise plan.
Pro100 requests / hour
EnterpriseUnlimited

Rate-limited responses include X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers. Enterprise (unlimited) responses omit them.

Endpoints

GET/filesfiles:read

Returns a paginated list of the files owned by the authenticated account, newest first.

ParameterInTypeRequiredDescription
pagequeryintegerNoPage number (default 1).
limitqueryintegerNoItems per page (default 20, max 100).

Example request

cURL
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://quickupload.io/api/v1/files?page=1&limit=20"

Example response

JSON
{
  "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 }
  }
}
GET/files/{id}files:read

Returns metadata for a single file owned by the authenticated account.

ParameterInTypeRequiredDescription
idpathuuidYesThe file ID.

Example request

cURL
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://quickupload.io/api/v1/files/19a2b409-e4e2-482d-ad38-91f47bd2a8ac"

Example response

JSON
{
  "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
  }
}
DELETE/files/{id}files:delete

Permanently deletes a file and its stored content.

ParameterInTypeRequiredDescription
idpathuuidYesThe file ID.

Example request

cURL
curl -X DELETE -H "Authorization: Bearer YOUR_API_KEY" \
  "https://quickupload.io/api/v1/files/19a2b409-e4e2-482d-ad38-91f47bd2a8ac"

Example response

JSON
{
  "data": { "id": "19a2b409-e4e2-482d-ad38-91f47bd2a8ac", "deleted": true }
}
GET/files/{id}/downloadfiles:download

Streams the file content as a binary response.

ParameterInTypeRequiredDescription
idpathuuidYesThe file ID.

Example request

cURL
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://quickupload.io/api/v1/files/19a2b409-e4e2-482d-ad38-91f47bd2a8ac/download" \
  --output report.pdf

Example response

JSON
<binary file contents>
POST/files/uploadfiles:write

Uploads a single file in one multipart request. Best for files that fit comfortably in memory.

ParameterInTypeRequiredDescription
fileformbinaryYesThe file contents.
file_nameformstringNoOverrides the uploaded filename.
mime_typeformstringNoOverrides the detected MIME type.
expires_atformdatetimeNoISO 8601 expiry (within your plan limit).
passwordformstringNoOptional password protection.
max_downloadsformintegerNoOptional download cap.

Example request

cURL
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

JSON
{
  "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"
  }
}
POST/files/upload/initfiles:write

Begins a resumable, chunked upload and returns an upload session. Recommended for large files.

ParameterInTypeRequiredDescription
file_namebodystringYesOriginal filename.
mime_typebodystringYesFile MIME type.
file_sizebodyintegerYesTotal size in bytes.
total_chunksbodyintegerYesNumber of chunks you will upload.
expiration_datebodydatetimeYesISO 8601 expiry.
passwordbodystringNoOptional password protection.
max_downloadsbodyintegerNoOptional download cap.

Request body

JSON
{
  "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
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

JSON
{
  "data": { "upload_id": "upl_8f2vv1785335133599", "chunk_size": 2097152 }
}
POST/files/upload/chunkfiles:write

Uploads a single chunk for an active chunked upload session.

ParameterInTypeRequiredDescription
upload_idformstringYesSession ID from /upload/init.
chunk_indexformintegerYesZero-based chunk index.
chunkformbinaryYesThe chunk contents.

Example request

cURL
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

JSON
{
  "data": { "upload_id": "upl_8f2vv1785335133599", "chunk_index": 0, "received": true }
}
POST/files/upload/completefiles:write

Finalises a chunked upload, assembling the chunks into the stored file.

ParameterInTypeRequiredDescription
upload_idbodystringYesSession ID from /upload/init.

Request body

JSON
{ "upload_id": "upl_8f2vv1785335133599" }

Example request

cURL
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

JSON
{
  "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 shape
{
  "error": {
    "code": "rate_limit_exceeded",
    "message": "Too many requests",
    "details": {}
  }
}
StatusCodeMeaning
400validation-failedThe request body or parameters were invalid.
401unauthorizedMissing, malformed, or invalid API key.
403forbiddenThe key lacks the required scope, or the plan has no API access.
404file_not_foundThe file does not exist or is not owned by the account.
413storage-limit-exceededThe file exceeds the plan storage or size limit.
429rate_limit_exceededToo many requests — retry after the reset time.
500server_errorAn unexpected server error occurred.