1. Create your account
Cloud is in early access, so accounts are opened manually.1
Request access
On openinary.dev, click Request Cloud access
and leave your email address.
2
Wait for the invite email
When your account is opened you receive “Your Openinary account is ready”
with a sign-in link, valid for 24 hours. Clicking it signs you in at
app.openinary.dev.
3
Sign back in later
From app.openinary.dev, enter your email to get
a 6-digit code (valid 10 minutes), or use Google. There is no
password.
Signed in, you land on the media browser for your default bucket, Main.
2. Create an API key
Your key is what lets your backend talk tohttps://cdn.openinary.dev.
1
Open the API keys tab
Click your account in the bottom-left of the dashboard → Settings →
API keys.
2
Fill in the three fields
- Name, so you can tell keys apart later, e.g.
Production. - Bucket, the one this key can read and write. It cannot be changed later, create a second key rather than re-pointing this one.
- Expires, in days, from 1 to 365 (default 365).
3
Copy the key immediately
The key (
oik_…) is displayed once, right after creation. Store it in
your secret manager or .env now, there is no way to read it back.3. Upload a file
Send the key asx-api-key, or as Authorization: Bearer, either works.
- curl
- Node.js
That
url is where your bucket ID comes from, it’s the /b/{bucketId}/
segment. You can also read it off any file’s URL in the dashboard’s asset
details panel. It’s not a secret: it’s in every public URL you serve.4. Deliver it, transformed
Prefix the returnedurl with https://cdn.openinary.dev and insert
transformation parameters right after /t/:
- Thumbnail
- WebP at quality 80
- Original, untransformed
Open that URL in a browser. If you see your resized image, everything is wired
up.
5. Use it in a real app
The pattern that holds in production: uploads and storage calls run on your server with the API key, delivery URLs are public and go straight to the CDN.app/api/products/route.ts
components/product-image.tsx
.env
Videos
Videos work the same way, with one difference: a transformation is processed asynchronously. The first request for a transformed video returns202 while it
encodes; poll the status endpoint (or listen to
/queue/events) until it’s completed.
A video URL with no parameters (
/t/clips/demo.mp4) is never transcoded,
it streams the stored file, with range requests, so seeking works. Transcoding
only happens when the URL asks for it.Next steps
Cloud API Reference
Every endpoint, authentication, errors and rate limits.
File Uploader
A ready-made React uploader wired to your Cloud bucket.
Transformations
The complete parameter reference.
Plans & limits
What’s included, and what happens past it.