> ## Documentation Index
> Fetch the complete documentation index at: https://docs.openinary.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Openinary Cloud

> Managed Openinary, hosted for you. Same transformation API, same upload API, no server to run. Currently in public alpha.

Openinary Cloud is the hosted version. Same transformation syntax and same upload API as [self-hosted](https://docs.openinary.dev/quickstart.md), with nothing to run.

```
https://cdn.openinary.dev/b/{bucketId}/t/{transformations}/{path}
```

Storage, the transform pipeline, the video queue, the CDN and the dashboard are already running. No environment variables, no `API_SECRET`, no `CORS_ORIGIN`, no Docker resources to size. Create an account, create an API key, upload.

Cloud is in public alpha, and sign-up is open to everyone. It is early, so tell us what breaks.

## Two hostnames

| Host | What it is |
| - | - |
| `https://app.openinary.dev` | Dashboard: sign-in, media browser, API keys, buckets, usage, billing |
| `https://cdn.openinary.dev` | The API you call, and the CDN your assets come from |

## Create your account

**1. Open the app**

Go to [app.openinary.dev](https://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](#plans-and-limits). You can also sign in
with **Google**.

There are no passwords. Every sign-in is a fresh emailed code, or Google. If you joined during the invite-only phase and your link expired, request a code from the sign-in page, your account already exists.

## Buckets

A **bucket** is an isolated space for your media. Files, folders, and cached
transforms never cross between buckets, and each bucket has its own `bucketId`
in your delivery URLs, so a staging bucket can't serve a production asset.

* One bucket is **active** at a time in the dashboard, that's the one the media
  browser shows.
* **API keys are pinned to a single bucket** when you create them, and can't be
  re-scoped afterwards. What an integration writes to therefore never depends on
  what's selected in the dashboard.
* Deleting a bucket deletes its files and every API key pinned to it.

Manage them in the dashboard under **Settings → Buckets**.

## Plans and limits

Every account starts on **Free**. **Alpha** doubles the allowances, costs
nothing per month, and adds pay-as-you-go past them (a card is collected at
checkout so overage can be billed). Upgrade from **Settings → Plan**.

| Included per month | Free | Alpha | Past the allowance |
| - | - | - | - |
| Storage | 1 GB | 2 GB | \$0.03 / extra GB |
| Image transformations | 500 | 1,000 | \$0.40 / 1,000 |
| Video processing | 15 min | 30 min | \$0.01 / min |
| CDN requests | 25,000 | 50,000 | \$0.50 / 100,000 |
| Buckets | 1 | 2 | n/a |

Hitting a limit on Free returns [`402`](https://docs.openinary.dev/cloud/api#errors) until the monthly allowance resets. Storage is cumulative and does not reset. Video is metered on how long the transform ran, not on the video's length, and cached deliveries never count as transformations.

Live usage, the deliveries behind each number, and your video jobs are in
**Settings → Usage** and **Settings → Plan**.

## What's different from self-hosted

Almost nothing, at the level you write code, the transformation syntax is
identical. The differences worth knowing:

| Topic | Self-hosted | Cloud |
| - | - | - |
| Delivery URL | `/t/{transformations}/{path}` | `/b/{bucketId}/t/{transformations}/{path}` |
| API keys | Created via the dashboard or the API | Dashboard only, and each key is pinned to one bucket |
| Multi-tenancy | One storage root | Buckets, isolated per account |
| Limits | Your hardware | Plan allowances, `402` past them |
| Signed delivery URLs | `/authenticated/s--{sig}/…` | Not available yet |
| Prewarm on upload | `transformations` field on `/upload` | Not available yet |
| Queue admin API | `/queue/stats`, `/queue/jobs`, … | Only `/queue/events` and `/video-status/{path}` |

## Next steps

> [card] [Cloud Quickstart](https://docs.openinary.dev/cloud/quickstart.md)
>
> Create an API key, upload a file, and deliver your first transformed URL.

> [card] [Cloud API Reference](https://docs.openinary.dev/cloud/api.md)
>
> Base URL, authentication, every endpoint, errors and rate limits.

> [card] [File Uploader on Cloud](https://docs.openinary.dev/cloud/file-uploader.md)
>
> Drop the React uploader into your app, no API key in the browser.

> [card] [Transformations](https://docs.openinary.dev/media-transformations/overview.md)
>
> The full parameter list, shared with the self-hosted version.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.