{"openapi":"3.1.0","info":{"title":"Cloudinary (BYOK) API","version":"0.1.0","description":"Cloudinary (BYOK) lets an AI assistant read your own Cloudinary data through the Cloudinary API with a key you supply (API key). Read-only: 7 tools (list_resources, search_resources, list_resources_by_asset_folder, get_resource, list_tags, list_root_folders, get_usage). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it is only ever...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-cloudinary.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-cloudinary/docs"},"termsOfService":"https://connectorbay.com/byok-cloudinary/terms"},"servers":[{"url":"https://byok-cloudinary.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-cloudinary/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_resources":{"post":{"operationId":"list_resources","summary":"List assets of one type (image, video or raw) in the Cloudinary account, newest first, with size, dimensions, folder and","description":"List assets of one type (image, video or raw) in the Cloudinary account, newest first, with size, dimensions, folder and URL. Up to 500 per call; page with next_cursor. Use for \"What images are in my Cloudinary account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cloud_name":{"description":"Your Cloudinary cloud name (product environment name), shown on the API Keys page of the console.","maxLength":60,"title":"Cloud Name","type":"string"},"resource_type":{"description":"Asset type: image, video (also audio) or raw.","enum":["image","video","raw"],"title":"Resource Type","type":"string"},"prefix":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only assets whose public ID starts with this text.","title":"Prefix"},"direction":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by creation date: desc (default) or asc. Ignored when prefix is set.","title":"Direction"},"start_at":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only assets created since this ISO 8601 time or date, for example 2026-09-01.","title":"Start At"},"max_results":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many results to return (1 to 500, default 10).","title":"Max Results"},"next_cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: next_cursor from the previous answer. Leave out for the first page.","title":"Next Cursor"}},"required":["cloud_name","resource_type"],"title":"list_resourcesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/search_resources":{"post":{"operationId":"search_resources","summary":"Search Cloudinary assets with a Lucene-like expression, for example 'tags=hero AND resource_type=image'. Returns total c","description":"Search Cloudinary assets with a Lucene-like expression, for example 'tags=hero AND resource_type=image'. Returns total count and up to 500 assets per call. Use for \"Find Cloudinary images tagged 'hero' that are larger than 1 MB\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cloud_name":{"description":"Your Cloudinary cloud name (product environment name), shown on the API Keys page of the console.","maxLength":60,"title":"Cloud Name","type":"string"},"expression":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Search expression, for example 'cat AND tags=kitten AND uploaded_at>1d'. Leave out to list everything.","title":"Expression"},"max_results":{"anyOf":[{"maximum":500,"minimum":0,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (0 to 500, default 50). 0 returns only the count.","title":"Max Results"},"next_cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: next_cursor from the previous answer. Leave out for the first page.","title":"Next Cursor"}},"required":["cloud_name"],"title":"search_resourcesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_resources_by_asset_folder":{"post":{"operationId":"list_resources_by_asset_folder","summary":"List assets stored directly in one Cloudinary asset folder, regardless of type, with size, dimensions and URL. Use for \"","description":"List assets stored directly in one Cloudinary asset folder, regardless of type, with size, dimensions and URL. Use for \"What assets are in my Cloudinary 'products' folder\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cloud_name":{"description":"Your Cloudinary cloud name (product environment name), shown on the API Keys page of the console.","maxLength":60,"title":"Cloud Name","type":"string"},"asset_folder":{"description":"Full path of the asset folder, for example 'products/shoes'.","maxLength":300,"title":"Asset Folder","type":"string"},"direction":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by creation date: desc (default) or asc.","title":"Direction"},"max_results":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many results to return (1 to 500, default 10).","title":"Max Results"},"next_cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: next_cursor from the previous answer. Leave out for the first page.","title":"Next Cursor"}},"required":["cloud_name","asset_folder"],"title":"list_resources_by_asset_folderArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_resource":{"post":{"operationId":"get_resource","summary":"Get one Cloudinary asset by its asset id: format, size, dimensions, folder, URL, tags, contextual and structured metadat","description":"Get one Cloudinary asset by its asset id: format, size, dimensions, folder, URL, tags, contextual and structured metadata and derived assets. Use for \"Show details of a Cloudinary asset\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cloud_name":{"description":"Your Cloudinary cloud name (product environment name), shown on the API Keys page of the console.","maxLength":60,"title":"Cloud Name","type":"string"},"asset_id":{"description":"Cloudinary asset id (32 hex characters), as returned by list_resources.","maxLength":64,"title":"Asset Id","type":"string"}},"required":["cloud_name","asset_id"],"title":"get_resourceArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_tags":{"post":{"operationId":"list_tags","summary":"List the tags used by assets of one type in Cloudinary, optionally those starting with a prefix. Up to 500 per call. Use","description":"List the tags used by assets of one type in Cloudinary, optionally those starting with a prefix. Up to 500 per call. Use for \"Which tags do I use on my Cloudinary images\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cloud_name":{"description":"Your Cloudinary cloud name (product environment name), shown on the API Keys page of the console.","maxLength":60,"title":"Cloud Name","type":"string"},"resource_type":{"description":"Asset type: image, video (also audio) or raw.","enum":["image","video","raw"],"title":"Resource Type","type":"string"},"prefix":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only tags starting with this text.","title":"Prefix"},"max_results":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many results to return (1 to 500, default 10).","title":"Max Results"},"next_cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: next_cursor from the previous answer. Leave out for the first page.","title":"Next Cursor"}},"required":["cloud_name","resource_type"],"title":"list_tagsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_root_folders":{"post":{"operationId":"list_root_folders","summary":"List the root folders of the Cloudinary media library with name, path and id. Up to 500 per call. Use for \"What folders ","description":"List the root folders of the Cloudinary media library with name, path and id. Up to 500 per call. Use for \"What folders do I have in Cloudinary\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cloud_name":{"description":"Your Cloudinary cloud name (product environment name), shown on the API Keys page of the console.","maxLength":60,"title":"Cloud Name","type":"string"},"max_results":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many results to return (1 to 500, default 10).","title":"Max Results"},"next_cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: next_cursor from the previous answer. Leave out for the first page.","title":"Next Cursor"}},"required":["cloud_name"],"title":"list_root_foldersArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_usage":{"post":{"operationId":"get_usage","summary":"Get the Cloudinary account usage report: plan, storage, bandwidth, transformations, requests and number of assets, for t","description":"Get the Cloudinary account usage report: plan, storage, bandwidth, transformations, requests and number of assets, for today or a date within the last 3 months. Use for \"How much Cloudinary storage and bandwidth am I using\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cloud_name":{"description":"Your Cloudinary cloud name (product environment name), shown on the API Keys page of the console.","maxLength":60,"title":"Cloud Name","type":"string"},"date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Report date, YYYY-MM-DD, within the last 3 months. Defaults to today.","title":"Date"}},"required":["cloud_name"],"title":"get_usageArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}