1. Create your account
1
Open the app
Go to app.openinary.dev and enter your email address. Signing in and signing up are the same form: a new address creates the account.
2
Enter the code
You receive a 6-digit code by email (valid 10 minutes). Enter it and you’re in, on the Free plan. You can also use Google. There is no password.
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
url carries your bucket ID, the /b/{bucketId}/ segment. It is not a secret, it appears in every public URL you serve, and you can also read it off any file in the dashboard’s asset details panel.
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
202 {"status":"processing"} rather than image bytes. Request it again a moment later and you get the result, served from the CDN cache from then on. The parameter list is exactly the same as the self-hosted version, see Image transformations and Video transformations.
Open that URL in a browser: the first load may show the 202 JSON rather than the picture. Reload once and the image appears. That is the pipeline working, not a failure.
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
/upload through an unauthenticated public route with your key attached leaks the key just as surely as shipping it. Either authenticate the server route yourself, as above, or use presigned signatures so the browser only 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 returns202 while it encodes; poll the status endpoint (or listen to /queue/events) until it’s completed.
/t/clips/demo.mp4, is never transcoded. It streams the stored file with range requests, so seeking works. Transcoding happens only 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.