Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 26 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,19 +77,38 @@ The **AI-Generated Content** options let the player generate content on demand
## Authentication
### Using API key

To configure this credential, you'll need a [Cloudinary Account](https://cloudinary.com/users/register_free) and:
To configure this credential, you'll need a [Cloudinary account](https://cloudinary.com/users/register_free) and:

- A **Cloud name**
- An **API Key**
- An **API Secret**

If you're a user with a Master admin, Admin, or Technical admin role, you can find your API keys and other credentials on the API Keys page of the Cloudinary Console Settings:
#### Get your credentials from the Console

1. Navigate to the API Keys pages in the [settings page](https://console.cloudinary.com/settings/api-keys).
2. Click on **+ Generate New API Key**.
3. Copy the API Key and API Secret.
4. From the top of the page copy the **Cloud name**.
5. Enter the cloud name, api key and api secret to your n8n credential.
1. [Create a free Cloudinary account](https://cloudinary.com/users/register_free) — you can sign up with Google, GitHub, or an email address. Skip to step 2 if you already have one.
2. In the [Cloudinary Console](https://console.cloudinary.com), go to **Settings > [API Keys](https://console.cloudinary.com/settings/api-keys)**. Viewing keys requires the Master admin, Admin, or Technical admin role.
3. Copy the **API Key** and **API Secret**. A new account already ships with an active key — use **Generate New Access Key** only if you'd rather issue a dedicated key for n8n.
4. Copy the **Cloud name** from the top of the page (it's also on the Console Dashboard).
5. Enter the cloud name, API key, and API secret into your n8n credential.

Treat the API secret like a password: it authenticates every signed Upload and Admin API call this node makes, and should never leave your organization.

#### Or ask an agent to provision a cloud for you

If you're setting this up alongside a coding agent — or you just want working credentials in under a minute without signing up first — ask an agent to run this, and it will provision a [Claimable Cloud](https://cloudinary.com/documentation/claimable_cloud_provisioning) for you (you can also run it yourself):

```bash
npx @cloudinary/cloud
```

This creates a real cloud with a working cloud name, API key, and API secret, and prints a **claim URL**. Open it, confirm from the verification email, and the cloud becomes a permanent free account — same credentials, and every asset you already uploaded is kept.

Two caveats matter for n8n specifically:

- **Delivery is IP-restricted until you claim.** Requests for your media from any address outside the IPs registered at provisioning time are blocked at the CDN edge. Uploads, transformations, and API calls are unaffected, but the delivery URLs the **Transform** operations build won't load for anyone else until you claim the cloud.
- **Unclaimed clouds expire after 24 hours** and are deleted along with their assets, so claim before you build anything you want to keep.

For any workflow you intend to keep running, claim the cloud (or [sign up](https://cloudinary.com/users/register_free) the normal way) and use those credentials.

#### Private CDN / custom delivery hostname (advanced)

Expand Down
14 changes: 13 additions & 1 deletion credentials/CloudinaryApi.credentials.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,20 @@ import {
export class CloudinaryApi implements ICredentialType {
name = 'cloudinaryApi';
displayName = 'Cloudinary API';
documentationUrl = 'https://cloudinary.com/documentation/image_upload_api_reference';
documentationUrl = 'https://cloudinary.com/documentation/developer_onboarding_faq_find_credentials';
properties: INodeProperties[] = [
{
// A notice is the only credential-modal affordance for setup guidance: n8n has no
// generic click-to-call button (buttonConfig.action only supports AI code generation),
// so onboarding has to be a link out. Notice displayName is exempt from the
// title-case lint rule, which is why this reads as prose. n8n sanitizes notice
// content down to <a>/<ul>/<li>, so no other markup survives.
displayName:
'Need an account? <a href="https://cloudinary.com/users/register_free" target="_blank">Create a free Cloudinary account</a>, then copy your cloud name, API key, and API secret from the <a href="https://console.cloudinary.com/settings/api-keys" target="_blank">API Keys page</a>. Just trying things out? Ask an agent to run \'npx @cloudinary/cloud\' for instant credentials via a <a href="https://cloudinary.com/documentation/claimable_cloud_provisioning" target="_blank">Claimable Cloud</a> — until you claim it, delivery URLs only work from the IP addresses you register, and the cloud expires after 24 hours.',
name: 'setupNotice',
type: 'notice',
default: '',
},
{
displayName: 'Cloud Name',
name: 'cloudName',
Expand Down
2 changes: 1 addition & 1 deletion nodes/Cloudinary/Cloudinary.node.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"resources": {
"credentialDocumentation": [
{
"url": "https://cloudinary.com/documentation/image_upload_api_reference"
"url": "https://cloudinary.com/documentation/developer_onboarding_faq_find_credentials"
}
],
"primaryDocumentation": [
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "n8n-nodes-cloudinary",
"version": "0.2.1",
"version": "0.2.2",
"description": "The official Cloudinary n8n node - upload media, update asset tags and metadata, and more",
"keywords": [
"n8n-community-node-package",
Expand Down
Loading