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.
# 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" />Ingest by public URL or push a file straight to storage. SSRF-guarded, MIME-validated, capped at 50 MB.
Compose w_, h_, q_, f_, c_, b_, g_ right in the path. Immutable, edge-cached, unknown keys rejected.
Search, tag, and organise every asset with instant previews and metadata.
Save named transformation pipelines and apply them in bulk across your library.
HMAC-SHA256 delivery for asset.uploaded, .deleted, .analyzed and .preset.applied events.
Create, rotate, and revoke pfk_ keys. Prefix is public, secret is hashed with constant-time comparison.
Uploads, storage, bandwidth and transform hits — all in one dashboard.
A cheap /api/public/ping keeps the backend warm and works with any monitor.
Role-based access control with security-definer role checks. Nobody signs up unless you invite them.
POST a public URL. We fetch it server-side, validate, and store the original.
Compose variants in the URL path: /t/w_800,q_80,f_webp/<user>/<id>.webp
Every variant is cached at the edge with a one-year immutable header.
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();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 docsSign in, create a key, POST a URL. That's it.