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.