Skip to main content
By the end of this page you’ll have an account, an API key that works from your backend, a file in storage, and a public URL that resizes it on the fly.

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 to https://cdn.openinary.dev.
1

Open the API keys tab

Click your account in the bottom-left of the dashboard → SettingsAPI 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.
Treat the key like a password. It writes to, and deletes from, your bucket. Keep it server-side only, never ship it in a browser bundle, a mobile app, or a public repo. For browser uploads use presigned signatures instead.
You can disable a key temporarily (Power icon) or delete it outright at any time, both take effect immediately.

3. Upload a file

Send the key as x-api-key, or as Authorization: Bearer, either works.
The response tells you where the file landed, and gives you your delivery path:
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 returned url with https://cdn.openinary.dev and insert transformation parameters right after /t/:
The first request runs the transformation; every later request is served from the CDN cache. The parameter list is exactly the same as the self-hosted version, see Image transformations and Video transformations.
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
Don’t let users upload straight to /upload with your API key proxied through a public route, that’s the same as leaking the key. Either upload from a server route you authenticate yourself (above), or use presigned signatures so the browser only ever holds a short-lived token.

Videos

Videos work the same way, with one difference: a transformation is processed asynchronously. The first request for a transformed video returns 202 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.