---
title: "Upload a file from a URL"
method: POST
path: "/uploads"
tags: ["File Uploads"]
---

# Upload a file from a URL

`POST /uploads`

Uploads a file by downloading it from the provided URL. The file will be processed asynchronously. Poll the GET endpoint to check when it's ready, then use the returned assetId in post creation.

**Supported file types:**
- Images: JPEG, PNG, GIF, WebP
- Videos: MP4, QuickTime (MOV)

**File size limits:**
- Images: 10 MB max
- GIFs: 15 MB max
- Videos: 350 MB max

**Additional constraints:**
- Images cannot exceed 36 megapixels
- URL must be publicly accessible

## Request body

- object
  - `url` string, uri, required — URL of the file to upload. Must be publicly accessible.

## Response `200`

Upload job created successfully

- UploadJobCreated — Response when an upload job is created
  - `id` string, uuid — Upload job ID. Use this to poll the GET /uploads/{id} endpoint.
  - `status` 'pending' — Initial status of the upload
  - `createdAt` string, date-time

## Other responses

- `400` — Bad Request - Invalid input parameters
- `401` — Unauthorized - Missing or invalid API key
- `429` — Too Many Requests - Rate limit exceeded

---

[API](https://skmtc.net/tryordinal/apis/ordinal-api.md) · [All operations](https://skmtc.net/tryordinal/apis/ordinal-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/tryordinal/ordinal-api/revisions/1d0792ff454f/schema)
