UQ
UQ Cloud
Self-hosted media pipeline · v1

The media API your app already wanted.

POST a URL. Get a stable public_id. Deliver resized, compressed, format-converted variants from a single edge URL — no re-uploads, no batch jobs.

bash — upload · transform · deliver
# 1. Ingest any public URL
$ curl -X POST https://uqcloud.lovable.app/api/public/uploads \
    -H "Authorization: Bearer pfk_XXXX.YYYY" \
    -d '{"url":"https://picsum.photos/2400"}'

{ "public_id": "sunset-cliffs", "kind": "image", "bytes": 482113 }

# 2. Deliver any variant — cached at the edge, immutable for a year
<img src="https://cdn.uqcloud.lovable.app/t/w_800,q_80,f_webp/USER_ID/sunset-cliffs.webp" />
Features

Everything a modern app needs from media.

URL & direct uploads

Ingest by public URL or push a file straight to storage. SSRF-guarded, MIME-validated, capped at 50 MB.

URL transformations

Compose w_, h_, q_, f_, c_, b_, g_ right in the path. Immutable, edge-cached, unknown keys rejected.

Asset library

Search, tag, and organise every asset with instant previews and metadata.

Presets

Save named transformation pipelines and apply them in bulk across your library.

Signed webhooks

HMAC-SHA256 delivery for asset.uploaded, .deleted, .analyzed and .preset.applied events.

Scoped API keys

Create, rotate, and revoke pfk_ keys. Prefix is public, secret is hashed with constant-time comparison.

Analytics

Uploads, storage, bandwidth and transform hits — all in one dashboard.

Health + uptime endpoint

A cheap /api/public/ping keeps the backend warm and works with any monitor.

Admin-only access

Role-based access control with security-definer role checks. Nobody signs up unless you invite them.

How it works

From URL to CDN in three steps.

01

Ingest

POST a public URL. We fetch it server-side, validate, and store the original.

02

Transform

Compose variants in the URL path: /t/w_800,q_80,f_webp/<user>/<id>.webp

03

Deliver

Every variant is cached at the edge with a one-year immutable header.

For developers

A REST API you'll actually enjoy.

POST /api/public/uploads
const res = await fetch(
  "https://uqcloud.lovable.app/api/public/uploads",
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.UQCLOUD_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ url: sourceUrl }),
  },
);
const { public_id } = await res.json();
AI-ready integration

Copy one context brief. Any AI wires it up.

One click copies a complete markdown brief — endpoints, auth, transforms, webhooks, examples — that you paste into ChatGPT, Claude, or Cursor to integrate UQ Cloud instantly.

Open API docs

Ship your first asset in under five minutes.

Sign in, create a key, POST a URL. That's it.