Claimable Cloud API reference
Last updated: Aug-03-2026
A Claimable Cloud is a working Cloudinary environment that an AI agent can provision on a user's behalf, with no signup and no existing credentials. The returned credentials work immediately, media delivery is restricted to the IP addresses supplied at provisioning, and the cloud expires at the end of the 24-hour claim window unless the user claims it.
For the full agent onboarding flow, see Agents: start here.
Provision a Claimable Cloud
The fastest way to provision a Claimable Cloud is the CLI that wraps the REST API. A single command, with no arguments and no authentication, provisions the cloud, saves the credentials as CLOUDINARY_URL in the project's .env file (creating the file if needed), and prints the claim URL and next steps. The claim URL and expiry time are saved to .env as well, so they survive lost terminal output:
By default, media delivery is locked to the public IP address the command runs from. Use the options to change that and more:
| Option | Description |
|---|---|
--ip <address> |
Lock media delivery to a specific viewer IP address instead of the caller's. Repeat the option to allow up to three addresses. |
--email <address> |
Pre-fill the claim page with the user's email address. The address isn't verified at creation. |
--force |
Replace an existing CLOUDINARY_URL line in .env. Without this option, the command exits without provisioning if .env already contains one, so a rate-limited Claimable Cloud isn't wasted. |
--no-env |
Print the credentials without writing to .env. |
--json |
Output the raw API response for programmatic use. |
The command never opens a browser, and it warns if .env isn't ignored by version control.
Call the API directly
To provision a Claimable Cloud without the CLI, send a POST request to the provisioning endpoint. You don't need to authenticate.
Pass the parameters as a JSON body:
Request parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
delivery_ips |
Array of strings | Yes | One to three public IP addresses (IPv4 or IPv6) that media delivery from the Claimable Cloud is allowed from. Delivery is locked to these addresses until the cloud is claimed, so choose the addresses where the media will actually be viewed. Pass the literal string requester_ip to use the calling machine's public IP address, the right choice when the agent runs on the same machine where the media will be viewed. Each entry must be a single public IP address: CIDR ranges and private, LAN, or loopback addresses aren't accepted. |
email |
String | No | Email address of the user who will claim the cloud. Pre-fills the claim page; the user confirms or corrects it when claiming, and it isn't verified until then. If omitted, the user enters their email at the claim page. |
Response
A successful request returns the Claimable Cloud's details, the new product environment's credentials, the expiry time, the claim URL, and a guidance block that tells the agent what to do next.
| Field | Type | Description |
|---|---|---|
id |
String | The unique ID of the Claimable Cloud. |
email |
String | The email address associated with the Claimable Cloud. If no email was supplied at provisioning, this is a non-routable placeholder address, replaced by the user's real address at claim. |
expires_at |
String | The time at which the Claimable Cloud expires if it isn't claimed, in ISO 8601 format. |
delivery_ips |
Array | The public IP addresses that media delivery from the Claimable Cloud is allowed from. |
product_environments |
Array | The product environments created with the Claimable Cloud. Always contains exactly one entry. |
product_environments[].external_id |
String | The external ID of the product environment. |
product_environments[].cloud_name |
String | The cloud name of the product environment. |
product_environments[].api_key |
String | The product environment's API key. |
product_environments[].api_secret |
String | The product environment's API secret. Treat this value as sensitive. |
product_environments[].api_environment_variable |
String | The CLOUDINARY_URL value to use when calling Cloudinary APIs. This value includes the API secret, so treat it as sensitive. |
claim_url |
String | The URL where the user claims the cloud. The agent shares this with the user. |
guidance |
String | A Markdown block that guides the agent through the claim step and SDK setup. |
expires_at field gives the exact expiry time.Delivery IP restriction
Until the cloud is claimed, media delivery is restricted to the IP addresses in delivery_ips: requests from any other address are blocked at the CDN edge. Uploads, transformations, and API calls aren't restricted; only delivery of the resulting media is.
Because of this, the delivery_ips values should be the public IP addresses of the machines where the media will actually be viewed, which aren't always where the agent runs. If the agent runs on the user's machine, requester_ip is the right choice. If the agent runs elsewhere, for example in a CI job or a cloud runtime, and the user views the media from their laptop or a preview deployment, the agent should pass the viewer's public IP address instead; otherwise the media won't load for the user, even though uploads and transformations succeed.
Claiming the cloud removes the restriction, and media delivery works globally from then on.
Claimable Cloud limits
The Claimable Cloud is limited by time and quota: it expires if it isn't claimed within 24 hours of provisioning (the exact time is returned as expires_at and saved to .env by the CLI), and its usage caps are lower than those of a regular free account. Claiming converts it to a free Cloudinary account with the free plan's regular limits.
Claim the cloud
The user claims the cloud at the returned claim_url: they enter their email address (pre-filled if the agent supplied one at provisioning), review the privacy policy and terms of service, optionally set a password for signing in to the Console, and confirm from the verification email. Submitting the claim form extends the claim window, so a claim in progress doesn't expire. If the address already belongs to another Cloudinary account, the claim page shows an error and the user can enter a different address.
Claiming turns the Claimable Cloud into a free Cloudinary account with the verified email as its primary address:
- The cloud name, API key, and API secret stay the same, so anything the agent built against the Claimable Cloud keeps working, and all uploaded assets are retained.
- The delivery IP restriction is removed, so media delivery works globally.
Until the claim completes, no terms are accepted and no payment method is attached. An unclaimed cloud expires at the end of the 24-hour claim window, and Cloudinary deletes it and everything in it. An expired claim URL can't be recovered: the agent provisions a new cloud instead.
Errors
Errors return an error object with a category and a message. Some errors also include a machine-readable code:
| Status | Code | Condition |
|---|---|---|
| 400 | delivery_ips_required |
The delivery_ips parameter is missing. |
| 400 | delivery_ips_too_many |
More than three IP addresses were supplied. |
| 400 | delivery_ips_invalid |
An entry isn't a valid single IP address, for example a CIDR range. |
| 400 | delivery_ips_not_public |
An entry is a private, LAN, or loopback address. |
| 403 | agent_registration_disabled |
Claimable Cloud provisioning is currently disabled. |
| 403 | geo_location_not_permitted |
The request came from a location where provisioning isn't permitted. |
| 403 | None | Cloudinary's abuse controls blocked the request. The message is intentionally generic. |
| 429 | ip_rate_limit_exceeded |
Too many provisioning requests from the same IP address. Retry later. |
| 429 | global_rate_limit_exceeded |
Cloudinary's overall provisioning limit was reached. Retry later. |
API stability
Some details of this API may change over time. It's designed as a one-off call that an agent makes to provision a Claimable Cloud, not an API to integrate against in code, so in practice any changes shouldn't affect you. Once claimed, a Claimable Cloud behaves the same as any other Cloudinary account and won't change.
- Start at the agent hub with Get started with AI agents.
- Manage users and product environments in an existing account with the Provisioning API.
- Configure the Cloudinary SDKs that an agent uses with the Claimable Cloud credentials.
- Connect agents to Cloudinary through the Cloudinary MCP servers.