Documentation

API quick start

Everything you need to upload your first file and share it. The API is versioned and lives under /api/v1.

Authentication

Every request needs an API token in the Authorization header. Tokens are created in the dashboard and can be limited to a single project, a folder, or read-only access.

Authorization: Bearer $NORTHFILES_TOKEN

Keep tokens out of client-side code and public repositories. Store them in environment variables and rotate them if they leak.

Upload a file

Send the file as multipart/form-data. The folder field is optional; folders are created automatically.

curl -X POST https://files.northfiles.tech/api/v1/files \
  -H "Authorization: Bearer $NORTHFILES_TOKEN" \
  -F "file=@./launch-video.mp4" \
  -F "folder=marketing/2026"

A successful upload returns the file record:

{
  "id": "fl_8k2m4q7x",
  "name": "launch-video.mp4",
  "folder": "marketing/2026",
  "size": 48213377,
  "content_type": "video/mp4",
  "visibility": "private",
  "created_at": "2026-10-30T09:15:00Z"
}

Large files

For files above the single-request limit, start a multipart upload with POST /api/v1/uploads, send parts to the URLs in the response, then call POST /api/v1/uploads/{id}/complete. Parts can be retried individually.

List and delete files

# List files in a folder
curl "https://files.northfiles.tech/api/v1/files?folder=marketing/2026" \
  -H "Authorization: Bearer $NORTHFILES_TOKEN"

# Delete a file
curl -X DELETE https://files.northfiles.tech/api/v1/files/fl_8k2m4q7x \
  -H "Authorization: Bearer $NORTHFILES_TOKEN"

List responses are paginated. Pass the next_cursor value from a response as ?cursor= to get the next page.

Formats

You can store any file type. Some formats get extra handling:

TypeExtensionsExtra handling
Imagesjpg, png, gif, webp, avif, svgThumbnails and previews
Videomp4, webm, movStreaming playback, poster frame
Audiomp3, m4a, ogg, wav, flacStreaming playback
Documentspdf, txt, md, csv, jsonInline preview, compression for text
Archives & otherzip, tar.gz, and anything elseServed as downloads

Limits

Limits depend on your plan. See pricing for storage and transfer.

LimitStarterTeamBusiness
Single-request upload100 MB100 MB100 MB
Max file size (multipart)2 GB10 GB50 GB
API requests per minute603001,000
Longest link expiry7 days30 daysNo limit

When you exceed the request rate, the API responds with 429 Too Many Requests and a Retry-After header.

Errors

Errors use standard HTTP status codes and a JSON body with a machine-readable code:

{
  "error": {
    "code": "file_too_large",
    "message": "This file exceeds the single-request limit. Use a multipart upload."
  }
}

Questions about the API? Email our team — real people read every message.