REST API
Create and manage upload links from your own systems. The API is available on all plans; plan limits on active links apply.
Authentication
Create a key in Dashboard → API keys and send it as a bearer token:
Authorization: Bearer uh_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Keys are shown only once. We store a hash, so a lost key can't be recovered — just create a new one and revoke the old one.
Create a link
POST /api/v1/links
curl -X POST https://new.upload-here.com/api/v1/links \
-H "Authorization: Bearer $UPLOAD_HERE_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Monthly reports 12/2026",
"description": "Dear Mr. Doe, please upload the December reports as CSV.",
"location": "s3://my-bucket/reports/doe/2026-12",
"expiresInDays": 14,
"maxFileSizeMb": 2048
}'
| Field | Type | Required | Description |
|---|---|---|---|
title |
string | yes | Shown to the uploader (2–120 characters). |
description |
string | no | Instructions shown under the title. |
location |
string | yes* | s3://bucket/folder, gs://bucket/folder or az://container/folder. |
provider, bucket, prefix |
string | yes* | Alternative to location. provider is AWS, GCS or AZURE. |
expiresInDays |
number | no | Link stops accepting uploads after this many days. Omit or 0 for no expiry. |
maxFileSizeMb |
number | no | Maximum size of a single file. |
* Either location or provider + bucket.
Response 201 Created:
{
"id": "k7Qm2xPa9c",
"url": "https://new.upload-here.com/u/k7Qm2xPa9c",
"title": "Monthly reports 12/2026",
"description": "Dear Mr. Doe, please upload the December reports as CSV.",
"provider": "AWS",
"bucket": "my-bucket",
"prefix": "reports/doe/2026-12",
"active": true,
"maxFileSizeMb": 2048,
"expiresAt": "2026-12-21T10:00:00.000Z",
"uploadCount": 0,
"bytesUploaded": 0,
"lastUploadAt": null,
"createdAt": "2026-12-07T10:00:00.000Z"
}
Send url to your customer.
List links
GET /api/v1/links → { "links": [ ...link objects... ] } (newest first, up to 500).
Get a link
GET /api/v1/links/{id} → link object, including uploadCount and bytesUploaded.
Delete a link
DELETE /api/v1/links/{id} → 204 No Content. The URL stops working immediately; files already uploaded stay in your bucket.
Errors
Errors return JSON { "error": "message" } with a matching status code:
| Status | Meaning |
|---|---|
400 |
Invalid input (the message says which field). |
401 |
Missing or invalid API key. |
403 |
Plan limit reached — upgrade to create more active links. |
404 |
Link not found. |