2026-10-22
Manage a library with an official Cloudinary SDK. Configure these three values; the API Key is sent as a Bearer credential.
https://api.deepraxis.ai/cloudinary/v1_1/{library_id}
| Setting | Value |
|---|---|
| cloud_name | library_id |
| oauth_token | API Key |
| upload_prefix | https://api.deepraxis.ai/cloudinary |
npm install cloudinary@2import { v2 as cloudinary } from "cloudinary";
cloudinary.config({
cloud_name: process.env.LIBRARY_ID,
oauth_token: process.env.PRAXIS_API_KEY,
upload_prefix: "https://api.deepraxis.ai/cloudinary",
});python -m pip install cloudinaryimport os
import cloudinary
import cloudinary.uploader
import cloudinary.api
cloudinary.config(
cloud_name=os.environ["LIBRARY_ID"],
oauth_token=os.environ["PRAXIS_API_KEY"],
upload_prefix="https://api.deepraxis.ai/cloudinary",
)| Operation | Support |
|---|---|
| GET /v1_1/{library_id}/resources/visual_search | supported |
| POST /v1_1/{library_id}/resources/visual_search | supported |
| POST /v1_1/{library_id}/{resource_type}/upload | supported |
| POST /v1_1/{library_id}/{resource_type}/destroy | supported |
| POST /v1_1/{library_id}/{resource_type}/rename | supported |
| POST /v1_1/{library_id}/{resource_type}/tags | supported |
| POST /v1_1/{library_id}/{resource_type}/context | supported |
| POST /v1_1/{library_id}/{resource_type}/explicit | supported |
| GET /v1_1/{library_id}/resources/search | supported |
| POST /v1_1/{library_id}/resources/search | supported |
| GET /v1_1/{library_id}/resources | supported |
| GET /v1_1/{library_id}/resources/{resource_type} | supported |
| GET /v1_1/{library_id}/resources/{resource_type}/upload | supported |
| GET /v1_1/{library_id}/resources/{asset_id} | supported |
| GET /v1_1/{library_id}/resources/by_asset_ids | supported |
| GET /v1_1/{library_id}/resources/by_asset_folder | supported |
| GET /v1_1/{library_id}/resources/{resource_type}/tags/{tag} | supported |
| GET /v1_1/{library_id}/resources/{resource_type}/context | supported |
| GET /v1_1/{library_id}/resources/{resource_type}/upload/{public_id} | supported |
| POST /v1_1/{library_id}/resources/by_asset_ids | supported |
| POST /v1_1/{library_id}/resources/{resource_type}/upload/{public_id} | supported |
| PUT /v1_1/{library_id}/resources/{resource_type}/upload/{public_id} | supported |
| DELETE /v1_1/{library_id}/resources/{resource_type}/upload | supported |
| DELETE /v1_1/{library_id}/resources/{resource_type}/tags/{tag} | supported |
| GET /v1_1/{library_id}/tags/{resource_type} | supported |
| GET /v1_1/{library_id}/folders | supported |
| GET /v1_1/{library_id}/folders/{folder} | supported |
| POST /v1_1/{library_id}/folders/{folder} | supported |
| PUT /v1_1/{library_id}/folders/{folder} | supported |
| DELETE /v1_1/{library_id}/folders/{folder} | supported |
| GET /v1_1/{library_id}/ping | supported |
| GET /v1_1/{library_id}/usage | partial |
| GET /v1_1/{library_id}/usage/{date} | partial |
usage returns current storage bytes and asset count only; dates do not select historical totals.
| Endpoint | HTTP |
|---|---|
| upload_presets | 400 |
| metadata_fields | 400 |
| transformations | 400 |
| streaming_profiles | 400 |
| upload_mappings | 400 |
| triggers | 400 |
| derived_resources | 400 |
| relations | 400 |
| restore | 400 |
| backups | 400 |
| text | 400 |
| sprite | 400 |
| multi | 400 |
| explode | 400 |
| generate_archive | 400 |
| create_slideshow | 400 |
| download_backup_asset | 400 |
| folders/search | 400 |
These endpoint messages contain is not supported. Private and authenticated delivery types also return 400.
| Parameter | Support |
|---|---|
| file | supported |
| public_id | supported |
| public_id_prefix | supported |
| display_name | supported |
| asset_folder | supported |
| use_filename | supported |
| unique_filename | supported |
| use_filename_as_display_name | supported |
| filename_override | supported |
| overwrite | supported |
| tags | supported |
| context | supported |
| auto_tagging | partial |
| resource_type | supported |
| eager | unsupported |
| eager_async | unsupported |
| eager_notification_url | unsupported |
| async | unsupported |
| notification_url | unsupported |
| upload_preset | unsupported |
| moderation | unsupported |
| detection | unsupported |
| ocr | unsupported |
| raw_convert | unsupported |
| background_removal | unsupported |
| categorization | unsupported |
| transformation | unsupported |
| responsive_breakpoints | unsupported |
| proxy | unsupported |
| backup | unsupported |
| return_delete_token | unsupported |
| access_control | unsupported |
| access_mode | unsupported |
| metadata | unsupported |
| face_coordinates | unsupported |
| custom_coordinates | unsupported |
| regions | unsupported |
| quality_analysis | unsupported |
| accessibility_analysis | unsupported |
| cinemagraph_analysis | unsupported |
| media_metadata | unsupported |
| phash | unsupported |
| colors | unsupported |
| faces | unsupported |
| image_metadata | unsupported |
| exif | unsupported |
| invalidate | unsupported |
| type | unsupported |
Unsupported upload parameters return 400 with Unsupported upload parameter: followed by the parameter name.
The official SDK treats upload("file_…") as a local file path. To import from File Library, use the native endpoint POST /media/v1/libraries/{library_id}/assets/import; see Import file.
Upload accepts file bytes, HTTPS URLs, or data URIs. Use video for audio or auto for detection. SDK upload_large sends chunks to the same upload endpoint.
tags may be a comma-separated string, an array, or repeated tags fields (-F tags=a -F tags=b); all three are equivalent. Comma-separated items are trimmed and empty items dropped. Zero-byte files return FILE_EMPTY; images whose dimensions cannot be read return Invalid image file; any other file is accepted as raw.
await new Promise((resolve, reject) => {
cloudinary.uploader.upload_large("./video.mp4", {
resource_type: "video",
chunk_size: 20 * 1024 * 1024,
}, (error, result) => error ? reject(error) : resolve(result));
});Chunks share X-Unique-Upload-Id. Content-Range is bytes start-end/total; use -1 for unknown totals until the final chunk. Non-final chunks must be equal-sized and at least 5 MiB. Sessions expire after 24 hours. Intermediate responses contain done=false and upload_id; the final response includes the resource and done=true.
POST /cloudinary/v1_1/{library_id}/{resource_type}/upload
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| resource_type | path | image / video / raw / auto | image, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400 |
| X-Unique-Upload-Id | header | string | Stable identifier shared by every chunk of this upload. |
| Content-Range | header | string | Chunk byte range: bytes start-end/total; total may be -1 until the final chunk. |
| Field | Type | Required | Description |
|---|---|---|---|
| file | string / string | yes | File bytes, HTTPS URL, data URI, or same-account file_… |
| public_id | string | no | Asset name in delivery URLs; may contain path segments |
| public_id_prefix | string | no | Path prefix for public_id; a trailing / is optional and exactly one / separates prefix and ID |
| display_name | string | no | Display name |
| asset_folder | string | no | Organizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root |
| use_filename | boolean | no | Use the file name for public_id |
| unique_filename | boolean | no | Append a unique suffix |
| use_filename_as_display_name | boolean | no | Use the file name as display_name |
| filename_override | string | no | Override the original file name |
| overwrite | boolean | no | Whether to overwrite a matching public ID |
| tags | string / string[] | no | Asset tags. Uploads accept a comma-separated string (items trimmed, empty items dropped), an array, or repeated tags fields; PATCH accepts an array only and replaces the whole list |
| context | string / object | no | Custom text key/value pairs; PATCH replaces the whole map, {} clears it |
| auto_tagging | number | no | Merge tags meeting the threshold after understanding; 0–1 |
| resource_type | ResourceType / "auto" | no | image, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400 |
Returns: CloudinaryResource.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| asset_id | string | |
| public_id | string | |
| display_name | string | |
| asset_folder | string | |
| resource_type | string | |
| type | string | |
| format | string | |
| version | number | |
| version_id | string | |
| bytes | number | |
| etag | string | |
| width | number | |
| height | number | |
| duration | number | |
| pages | number | |
| is_audio | boolean | |
| original_filename | string | |
| tags | array<string> | |
| context | object | |
| context.custom | object | |
| created_at | string | |
| url | string | |
| secure_url | string | |
| placeholder | boolean | |
| existing | boolean | |
| processing | object | |
| processing.state | string | |
| processing.kinds | object | |
| processing.updated_at | string | |
| done | boolean | |
| upload_id | string |
curl -X POST "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/image/upload" \
-H "Authorization: Bearer $PRAXIS_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"file":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==","public_id":"walk-lib-r1-MDP-1791733789929-plain","tags":["docs"]}'HTTP 200
{
"asset_id": "85b7ef616a8b4719a41777a036ebc1d2",
"public_id": "walk-lib-r1-MDP-1791733789929-plain",
"display_name": "walk-lib-r1-MDP-1791733789929-plain",
"asset_folder": "",
"resource_type": "image",
"type": "upload",
"format": "png",
"version": 1791733810,
"version_id": "fdf3c8cd40c2424d86e8397425a69857",
"bytes": 70,
"etag": "b357a19c87624c7c4d131aeeb4ae677f",
"width": 1,
"height": 1,
"original_filename": "file",
"tags": [
"docs"
],
"created_at": "2026-10-11T15:50:10.842Z",
"url": "https://media-develop.praxisusercontent.com/lib_d3881a2f54a34cd79121b9d659e8378c/image/upload/v1791733810/walk-lib-r1-MDP-1791733789929-plain.png",
"secure_url": "https://media-develop.praxisusercontent.com/lib_d3881a2f54a34cd79121b9d659e8378c/image/upload/v1791733810/walk-lib-r1-MDP-1791733789929-plain.png",
"placeholder": false
}POST /cloudinary/v1_1/{library_id}/{resource_type}/destroy
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| resource_type | path | image / video / raw / auto | image, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400 |
| Field | Type | Required | Description |
|---|---|---|---|
| public_id | string | yes | Asset name in delivery URLs; may contain path segments |
Returns: DestroyResult.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| result | string |
curl -X POST "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/image/destroy" \
-H "Authorization: Bearer $PRAXIS_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"public_id":"docs/renamed"}'HTTP 200
{
"result": "ok"
}POST /cloudinary/v1_1/{library_id}/{resource_type}/rename
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| resource_type | path | image / video / raw / auto | image, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400 |
| Field | Type | Required | Description |
|---|---|---|---|
| from_public_id | string | yes | Original public ID |
| to_public_id | string | yes | New public ID |
| overwrite | boolean | no | Whether to overwrite a matching public ID |
Returns: CloudinaryResource.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| asset_id | string | |
| public_id | string | |
| display_name | string | |
| asset_folder | string | |
| resource_type | string | |
| type | string | |
| format | string | |
| version | number | |
| version_id | string | |
| bytes | number | |
| etag | string | |
| width | number | |
| height | number | |
| duration | number | |
| pages | number | |
| is_audio | boolean | |
| original_filename | string | |
| tags | array<string> | |
| context | object | |
| context.custom | object | |
| created_at | string | |
| url | string | |
| secure_url | string | |
| placeholder | boolean | |
| existing | boolean | |
| processing | object | |
| processing.state | string | |
| processing.kinds | object | |
| processing.updated_at | string |
curl -X POST "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/image/rename" \
-H "Authorization: Bearer $PRAXIS_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"from_public_id":"docs/pixel","to_public_id":"docs/renamed"}'HTTP 200
{
"asset_id": "9339cdae93804c0c8c65d5189ef1f646",
"public_id": "docs/renamed",
"display_name": "Sample image",
"asset_folder": "examples",
"resource_type": "image",
"type": "upload",
"format": "png",
"version": 1791538418,
"version_id": "35848c1529994e338e7aa634a1c13d9c",
"bytes": 70,
"etag": "b357a19c87624c7c4d131aeeb4ae677f",
"width": 1,
"height": 1,
"original_filename": "file",
"tags": [
"docs"
],
"context": {
"custom": {
"alt": "Sample"
}
},
"created_at": "2026-10-09T09:33:38.899Z",
"url": "https://media-develop.praxisusercontent.com/lib_77374d4ee73b4ae79c4aa430f3ba3885/image/upload/v1791538418/docs/renamed.png",
"secure_url": "https://media-develop.praxisusercontent.com/lib_77374d4ee73b4ae79c4aa430f3ba3885/image/upload/v1791538418/docs/renamed.png",
"placeholder": false
}POST /cloudinary/v1_1/{library_id}/{resource_type}/tags
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| resource_type | path | image / video / raw / auto | image, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400 |
| Field | Type | Required | Description |
|---|---|---|---|
| public_ids | string[] | yes | Asset public IDs |
| tag | string | no | Tag name |
| command | add / remove / replace / remove_all | yes | Tag or context action |
Returns: PublicIds.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| public_ids | array<string> |
curl -X POST "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/image/tags" \
-H "Authorization: Bearer $PRAXIS_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"public_ids":["docs/pixel"],"tag":"sample","command":"add"}'HTTP 200
{
"public_ids": [
"docs/pixel"
]
}POST /cloudinary/v1_1/{library_id}/{resource_type}/context
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| resource_type | path | image / video / raw / auto | image, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400 |
| Field | Type | Required | Description |
|---|---|---|---|
| public_ids | string[] | yes | Asset public IDs |
| context | string / object | no | Custom text key/value pairs; PATCH replaces the whole map, {} clears it |
| command | add / remove_all | yes | Tag or context action |
Returns: PublicIds.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| public_ids | array<string> |
curl -X POST "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/image/context" \
-H "Authorization: Bearer $PRAXIS_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"public_ids":["docs/pixel"],"context":"alt=Sample","command":"add"}'HTTP 200
{
"public_ids": [
"docs/pixel"
]
}POST /cloudinary/v1_1/{library_id}/{resource_type}/explicit
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| resource_type | path | image / video / raw / auto | image, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400 |
| Field | Type | Required | Description |
|---|---|---|---|
| public_id | string | yes | Asset name in delivery URLs; may contain path segments |
| tags | string / string[] | no | Asset tags. Uploads accept a comma-separated string (items trimmed, empty items dropped), an array, or repeated tags fields; PATCH accepts an array only and replaces the whole list |
| context | string / object | no | Custom text key/value pairs; PATCH replaces the whole map, {} clears it |
Returns: CloudinaryResource.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| asset_id | string | |
| public_id | string | |
| display_name | string | |
| asset_folder | string | |
| resource_type | string | |
| type | string | |
| format | string | |
| version | number | |
| version_id | string | |
| bytes | number | |
| etag | string | |
| width | number | |
| height | number | |
| duration | number | |
| pages | number | |
| is_audio | boolean | |
| original_filename | string | |
| tags | array<string> | |
| context | object | |
| context.custom | object | |
| created_at | string | |
| url | string | |
| secure_url | string | |
| placeholder | boolean | |
| existing | boolean | |
| processing | object | |
| processing.state | string | |
| processing.kinds | object | |
| processing.updated_at | string |
curl -X POST "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/image/explicit" \
-H "Authorization: Bearer $PRAXIS_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"public_id":"docs/pixel","tags":["docs"]}'HTTP 200
{
"asset_id": "9339cdae93804c0c8c65d5189ef1f646",
"public_id": "docs/pixel",
"display_name": "Sample image",
"asset_folder": "examples",
"resource_type": "image",
"type": "upload",
"format": "png",
"version": 1791538418,
"version_id": "35848c1529994e338e7aa634a1c13d9c",
"bytes": 70,
"etag": "b357a19c87624c7c4d131aeeb4ae677f",
"width": 1,
"height": 1,
"original_filename": "file",
"tags": [
"docs"
],
"context": {
"custom": {
"alt": "Sample"
}
},
"created_at": "2026-10-09T09:33:38.899Z",
"url": "https://media-develop.praxisusercontent.com/lib_77374d4ee73b4ae79c4aa430f3ba3885/image/upload/v1791538418/docs/pixel.png",
"secure_url": "https://media-develop.praxisusercontent.com/lib_77374d4ee73b4ae79c4aa430f3ba3885/image/upload/v1791538418/docs/pixel.png",
"placeholder": false
}| Field | Type | Required | Description |
|---|---|---|---|
| asset_id | AssetId | yes | Asset ID |
| public_id | string | yes | Asset name in delivery URLs; may contain path segments |
| display_name | string | yes | Display name |
| asset_folder | string | yes | Organizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root |
| resource_type | ResourceType | yes | image, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400 |
| type | DeliveryType | yes | Resource or event type |
| format | string | yes | File format |
| version | number | yes | Delivery version |
| version_id | string | yes | Version identifier |
| bytes | number | yes | File size in bytes |
| etag | string | yes | File checksum |
| width | number | no | Width in pixels |
| height | number | no | Height in pixels |
| duration | number | no | Duration in seconds |
| pages | number | no | Document pages |
| is_audio | boolean | no | Whether this is audio |
| original_filename | string | no | Original file name |
| tags | string[] | yes | Asset tags. Uploads accept a comma-separated string (items trimmed, empty items dropped), an array, or repeated tags fields; PATCH accepts an array only and replaces the whole list |
| context | object | no | Custom text key/value pairs; PATCH replaces the whole map, {} clears it |
| created_at | IsoTimestamp | yes | Creation time |
| url | string | yes | Original-file URL |
| secure_url | string | yes | HTTPS delivery URL |
| placeholder | false | yes | Always false |
| existing | boolean | no | Whether an existing asset was returned without overwrite |
| processing | Processing | no | Overall and per-kind processing states |
| Field | Type | Required | Description |
|---|---|---|---|
| result | ok / not found | yes | Operation result |
| Field | Type | Required | Description |
|---|---|---|---|
| public_ids | string[] | yes | Asset public IDs |
| Field | Type | Required | Description |
|---|---|---|---|
| done | false | yes | Completed count; completion flag for chunk responses |
| upload_id | string | yes | Chunk session identifier |
| Field | Type | Required | Description |
|---|---|---|---|
| asset_id | AssetId | yes | Asset ID |
| public_id | string | yes | Asset name in delivery URLs; may contain path segments |
| display_name | string | yes | Display name |
| asset_folder | string | yes | Organizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root |
| resource_type | ResourceType | yes | image, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400 |
| type | DeliveryType | yes | Resource or event type |
| format | string | yes | File format |
| version | number | yes | Delivery version |
| version_id | string | yes | Version identifier |
| bytes | number | yes | File size in bytes |
| etag | string | yes | File checksum |
| width | number | no | Width in pixels |
| height | number | no | Height in pixels |
| duration | number | no | Duration in seconds |
| pages | number | no | Document pages |
| is_audio | boolean | no | Whether this is audio |
| original_filename | string | no | Original file name |
| tags | string[] | yes | Asset tags. Uploads accept a comma-separated string (items trimmed, empty items dropped), an array, or repeated tags fields; PATCH accepts an array only and replaces the whole list |
| context | object | no | Custom text key/value pairs; PATCH replaces the whole map, {} clears it |
| created_at | IsoTimestamp | yes | Creation time |
| url | string | yes | Original-file URL |
| secure_url | string | yes | HTTPS delivery URL |
| placeholder | false | yes | Always false |
| existing | boolean | no | Whether an existing asset was returned without overwrite |
| processing | Processing | no | Overall and per-kind processing states |
| Field | Type | Required | Description |
|---|---|---|---|
| done | true | yes | Completed count; completion flag for chunk responses |
Admin manages assets in the current library. usage returns current storage and asset count only.
GET /cloudinary/v1_1/{library_id}/resources
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| prefix | query | string | prefix |
| public_ids | query | string[] | Asset public IDs |
| asset_ids | query | string[] | asset ids |
| asset_folder | query | string | Organizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root |
| key | query | string | key |
| value | query | string | value |
| tags | query | string | Asset tags. Uploads accept a comma-separated string (items trimmed, empty items dropped), an array, or repeated tags fields; PATCH accepts an array only and replaces the whole list |
| context | query | string | Custom text key/value pairs; PATCH replaces the whole map, {} clears it |
| direction | query | string | asc or desc (default); also 1 or -1. |
| max_results | query | integer | Up to 500; Search defaults to 100, Admin to 10 |
| next_cursor | query | string | Next-page cursor; null or absent at the end |
Returns: ResourcePage.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| resources | array<object> | |
| resources[].asset_id | string | |
| resources[].public_id | string | |
| resources[].display_name | string | |
| resources[].asset_folder | string | |
| resources[].resource_type | string | |
| resources[].type | string | |
| resources[].format | string | |
| resources[].version | number | |
| resources[].version_id | string | |
| resources[].bytes | number | |
| resources[].etag | string | |
| resources[].width | number | |
| resources[].height | number | |
| resources[].duration | number | |
| resources[].pages | number | |
| resources[].is_audio | boolean | |
| resources[].original_filename | string | |
| resources[].tags | array<string> | |
| resources[].context | object | |
| resources[].created_at | string | |
| resources[].url | string | |
| resources[].secure_url | string | |
| resources[].placeholder | boolean | |
| resources[].existing | boolean | |
| resources[].processing | object | |
| next_cursor | string |
curl -X GET "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/resources" \
-H "Authorization: Bearer $PRAXIS_API_KEY"HTTP 200
{
"resources": [
{
"asset_id": "9dfa312ef9bc4b00816339b598b1152c",
"public_id": "walk-lib-r1-MDP-1791733789929-tagged",
"display_name": "walk-lib-r1-MDP-1791733789929-tagged",
"asset_folder": "",
"resource_type": "image",
"type": "upload",
"format": "png",
"version": 1791733815,
"version_id": "26cb8171caa5431b8373ad417fd71e32",
"bytes": 70,
"etag": "b357a19c87624c7c4d131aeeb4ae677f",
"width": 1,
"height": 1,
"original_filename": "file",
"processing": {
"state": "processing",
"kinds": {
"embedding": "running",
"visual": "failed",
"tagging": "failed"
},
"updated_at": "2026-10-11T15:50:21.512Z"
},
"created_at": "2026-10-11T15:50:15.996Z",
"url": "https://media-develop.praxisusercontent.com/lib_d3881a2f54a34cd79121b9d659e8378c/image/upload/v1791733815/walk-lib-r1-MDP-1791733789929-tagged.png",
"secure_url": "https://media-develop.praxisusercontent.com/lib_d3881a2f54a34cd79121b9d659e8378c/image/upload/v1791733815/walk-lib-r1-MDP-1791733789929-tagged.png",
"placeholder": false
},
{
"asset_id": "85b7ef616a8b4719a41777a036ebc1d2",
"public_id": "walk-lib-r1-MDP-1791733789929-plain",
"display_name": "walk-lib-r1-MDP-1791733789929-plain",
"asset_folder": "",
"resource_type": "image",
"type": "upload",
"format": "png",
"version": 1791733810,
"version_id": "fdf3c8cd40c2424d86e8397425a69857",
"bytes": 70,
"etag": "b357a19c87624c7c4d131aeeb4ae677f",
"width": 1,
"height": 1,
"original_filename": "file",
"created_at": "2026-10-11T15:50:10.842Z",
"url": "https://media-develop.praxisusercontent.com/lib_d3881a2f54a34cd79121b9d659e8378c/image/upload/v1791733810/walk-lib-r1-MDP-1791733789929-plain.png",
"secure_url": "https://media-develop.praxisusercontent.com/lib_d3881a2f54a34cd79121b9d659e8378c/image/upload/v1791733810/walk-lib-r1-MDP-1791733789929-plain.png",
"placeholder": false
}
]
}GET /cloudinary/v1_1/{library_id}/resources/{resource_type}
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| resource_type | path | image / video / raw | image, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400 |
| prefix | query | string | prefix |
| public_ids | query | string[] | Asset public IDs |
| asset_ids | query | string[] | asset ids |
| asset_folder | query | string | Organizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root |
| key | query | string | key |
| value | query | string | value |
| tags | query | string | Asset tags. Uploads accept a comma-separated string (items trimmed, empty items dropped), an array, or repeated tags fields; PATCH accepts an array only and replaces the whole list |
| context | query | string | Custom text key/value pairs; PATCH replaces the whole map, {} clears it |
| direction | query | string | asc or desc (default); also 1 or -1. |
| max_results | query | integer | Up to 500; Search defaults to 100, Admin to 10 |
| next_cursor | query | string | Next-page cursor; null or absent at the end |
Returns: ResourcePage.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| resources | array<object> | |
| resources[].asset_id | string | |
| resources[].public_id | string | |
| resources[].display_name | string | |
| resources[].asset_folder | string | |
| resources[].resource_type | string | |
| resources[].type | string | |
| resources[].format | string | |
| resources[].version | number | |
| resources[].version_id | string | |
| resources[].bytes | number | |
| resources[].etag | string | |
| resources[].width | number | |
| resources[].height | number | |
| resources[].duration | number | |
| resources[].pages | number | |
| resources[].is_audio | boolean | |
| resources[].original_filename | string | |
| resources[].tags | array<string> | |
| resources[].context | object | |
| resources[].created_at | string | |
| resources[].url | string | |
| resources[].secure_url | string | |
| resources[].placeholder | boolean | |
| resources[].existing | boolean | |
| resources[].processing | object | |
| next_cursor | string |
curl -X GET "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/resources/image" \
-H "Authorization: Bearer $PRAXIS_API_KEY"HTTP 200
{
"resources": [
{
"asset_id": "e5f3de0d8609482d8b351894b133c8cb",
"public_id": "examples/pixel",
"display_name": "pixel",
"asset_folder": "examples",
"resource_type": "image",
"type": "upload",
"format": "png",
"version": 1791538435,
"version_id": "001fb6336c9b4a4c9e4597b69fdec3cd",
"bytes": 70,
"etag": "b357a19c87624c7c4d131aeeb4ae677f",
"width": 1,
"height": 1,
"original_filename": "file",
"created_at": "2026-10-09T09:33:55.536Z",
"url": "https://media-develop.praxisusercontent.com/lib_b762c40631bd42278a204cd0370fed36/image/upload/v1791538435/examples/pixel.png",
"secure_url": "https://media-develop.praxisusercontent.com/lib_b762c40631bd42278a204cd0370fed36/image/upload/v1791538435/examples/pixel.png",
"placeholder": false
}
]
}GET /cloudinary/v1_1/{library_id}/resources/{resource_type}/upload
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| resource_type | path | image / video / raw | image, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400 |
| prefix | query | string | prefix |
| public_ids | query | string[] | Asset public IDs |
| asset_ids | query | string[] | asset ids |
| asset_folder | query | string | Organizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root |
| key | query | string | key |
| value | query | string | value |
| tags | query | string | Asset tags. Uploads accept a comma-separated string (items trimmed, empty items dropped), an array, or repeated tags fields; PATCH accepts an array only and replaces the whole list |
| context | query | string | Custom text key/value pairs; PATCH replaces the whole map, {} clears it |
| direction | query | string | asc or desc (default); also 1 or -1. |
| max_results | query | integer | Up to 500; Search defaults to 100, Admin to 10 |
| next_cursor | query | string | Next-page cursor; null or absent at the end |
Returns: ResourcePage.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| resources | array<object> | |
| resources[].asset_id | string | |
| resources[].public_id | string | |
| resources[].display_name | string | |
| resources[].asset_folder | string | |
| resources[].resource_type | string | |
| resources[].type | string | |
| resources[].format | string | |
| resources[].version | number | |
| resources[].version_id | string | |
| resources[].bytes | number | |
| resources[].etag | string | |
| resources[].width | number | |
| resources[].height | number | |
| resources[].duration | number | |
| resources[].pages | number | |
| resources[].is_audio | boolean | |
| resources[].original_filename | string | |
| resources[].tags | array<string> | |
| resources[].context | object | |
| resources[].created_at | string | |
| resources[].url | string | |
| resources[].secure_url | string | |
| resources[].placeholder | boolean | |
| resources[].existing | boolean | |
| resources[].processing | object | |
| next_cursor | string |
curl -X GET "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/resources/image/upload" \
-H "Authorization: Bearer $PRAXIS_API_KEY"HTTP 200
{
"resources": [
{
"asset_id": "e5f3de0d8609482d8b351894b133c8cb",
"public_id": "examples/pixel",
"display_name": "pixel",
"asset_folder": "examples",
"resource_type": "image",
"type": "upload",
"format": "png",
"version": 1791538435,
"version_id": "001fb6336c9b4a4c9e4597b69fdec3cd",
"bytes": 70,
"etag": "b357a19c87624c7c4d131aeeb4ae677f",
"width": 1,
"height": 1,
"original_filename": "file",
"created_at": "2026-10-09T09:33:55.536Z",
"url": "https://media-develop.praxisusercontent.com/lib_b762c40631bd42278a204cd0370fed36/image/upload/v1791538435/examples/pixel.png",
"secure_url": "https://media-develop.praxisusercontent.com/lib_b762c40631bd42278a204cd0370fed36/image/upload/v1791538435/examples/pixel.png",
"placeholder": false
}
]
}GET /cloudinary/v1_1/{library_id}/resources/{asset_id}
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| asset_id | path | string | Asset ID |
| prefix | query | string | prefix |
| public_ids | query | string[] | Asset public IDs |
| asset_ids | query | string[] | asset ids |
| asset_folder | query | string | Organizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root |
| key | query | string | key |
| value | query | string | value |
| tags | query | string | Asset tags. Uploads accept a comma-separated string (items trimmed, empty items dropped), an array, or repeated tags fields; PATCH accepts an array only and replaces the whole list |
| context | query | string | Custom text key/value pairs; PATCH replaces the whole map, {} clears it |
| direction | query | string | asc or desc (default); also 1 or -1. |
| max_results | query | integer | Up to 500; Search defaults to 100, Admin to 10 |
| next_cursor | query | string | Next-page cursor; null or absent at the end |
Returns: CloudinaryResource.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| asset_id | string | |
| public_id | string | |
| display_name | string | |
| asset_folder | string | |
| resource_type | string | |
| type | string | |
| format | string | |
| version | number | |
| version_id | string | |
| bytes | number | |
| etag | string | |
| width | number | |
| height | number | |
| duration | number | |
| pages | number | |
| is_audio | boolean | |
| original_filename | string | |
| tags | array<string> | |
| context | object | |
| context.custom | object | |
| created_at | string | |
| url | string | |
| secure_url | string | |
| placeholder | boolean | |
| existing | boolean | |
| processing | object | |
| processing.state | string | |
| processing.kinds | object | |
| processing.updated_at | string |
curl -X GET "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/resources/9dfa312ef9bc4b00816339b598b1152c" \
-H "Authorization: Bearer $PRAXIS_API_KEY"HTTP 200
{
"asset_id": "9dfa312ef9bc4b00816339b598b1152c",
"public_id": "walk-lib-r1-MDP-1791733789929-tagged",
"display_name": "walk-lib-r1-MDP-1791733789929-tagged",
"asset_folder": "",
"resource_type": "image",
"type": "upload",
"format": "png",
"version": 1791733815,
"version_id": "26cb8171caa5431b8373ad417fd71e32",
"bytes": 70,
"etag": "b357a19c87624c7c4d131aeeb4ae677f",
"width": 1,
"height": 1,
"original_filename": "file",
"tags": [
"docs"
],
"processing": {
"state": "processing",
"kinds": {
"embedding": "running",
"visual": "failed",
"tagging": "failed"
},
"updated_at": "2026-10-11T15:50:21.512Z"
},
"created_at": "2026-10-11T15:50:15.996Z",
"url": "https://media-develop.praxisusercontent.com/lib_d3881a2f54a34cd79121b9d659e8378c/image/upload/v1791733815/walk-lib-r1-MDP-1791733789929-tagged.png",
"secure_url": "https://media-develop.praxisusercontent.com/lib_d3881a2f54a34cd79121b9d659e8378c/image/upload/v1791733815/walk-lib-r1-MDP-1791733789929-tagged.png",
"placeholder": false
}GET /cloudinary/v1_1/{library_id}/resources/by_asset_ids
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| prefix | query | string | prefix |
| public_ids | query | string[] | Asset public IDs |
| asset_ids | query | string[] | asset ids |
| asset_folder | query | string | Organizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root |
| key | query | string | key |
| value | query | string | value |
| tags | query | string | Asset tags. Uploads accept a comma-separated string (items trimmed, empty items dropped), an array, or repeated tags fields; PATCH accepts an array only and replaces the whole list |
| context | query | string | Custom text key/value pairs; PATCH replaces the whole map, {} clears it |
| direction | query | string | asc or desc (default); also 1 or -1. |
| max_results | query | integer | Up to 500; Search defaults to 100, Admin to 10 |
| next_cursor | query | string | Next-page cursor; null or absent at the end |
Returns: ResourcePage.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| resources | array<object> | |
| resources[].asset_id | string | |
| resources[].public_id | string | |
| resources[].display_name | string | |
| resources[].asset_folder | string | |
| resources[].resource_type | string | |
| resources[].type | string | |
| resources[].format | string | |
| resources[].version | number | |
| resources[].version_id | string | |
| resources[].bytes | number | |
| resources[].etag | string | |
| resources[].width | number | |
| resources[].height | number | |
| resources[].duration | number | |
| resources[].pages | number | |
| resources[].is_audio | boolean | |
| resources[].original_filename | string | |
| resources[].tags | array<string> | |
| resources[].context | object | |
| resources[].created_at | string | |
| resources[].url | string | |
| resources[].secure_url | string | |
| resources[].placeholder | boolean | |
| resources[].existing | boolean | |
| resources[].processing | object | |
| next_cursor | string |
curl -X GET "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/resources/by_asset_ids?asset_ids[]=e5f3de0d8609482d8b351894b133c8cb" \
-H "Authorization: Bearer $PRAXIS_API_KEY"HTTP 200
{
"resources": [
{
"asset_id": "e5f3de0d8609482d8b351894b133c8cb",
"public_id": "examples/pixel",
"display_name": "pixel",
"asset_folder": "examples",
"resource_type": "image",
"type": "upload",
"format": "png",
"version": 1791538435,
"version_id": "001fb6336c9b4a4c9e4597b69fdec3cd",
"bytes": 70,
"etag": "b357a19c87624c7c4d131aeeb4ae677f",
"width": 1,
"height": 1,
"original_filename": "file",
"created_at": "2026-10-09T09:33:55.536Z",
"url": "https://media-develop.praxisusercontent.com/lib_b762c40631bd42278a204cd0370fed36/image/upload/v1791538435/examples/pixel.png",
"secure_url": "https://media-develop.praxisusercontent.com/lib_b762c40631bd42278a204cd0370fed36/image/upload/v1791538435/examples/pixel.png",
"placeholder": false
}
]
}GET /cloudinary/v1_1/{library_id}/resources/by_asset_folder
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| prefix | query | string | prefix |
| public_ids | query | string[] | Asset public IDs |
| asset_ids | query | string[] | asset ids |
| asset_folder | query | string | Organizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root |
| key | query | string | key |
| value | query | string | value |
| tags | query | string | Asset tags. Uploads accept a comma-separated string (items trimmed, empty items dropped), an array, or repeated tags fields; PATCH accepts an array only and replaces the whole list |
| context | query | string | Custom text key/value pairs; PATCH replaces the whole map, {} clears it |
| direction | query | string | asc or desc (default); also 1 or -1. |
| max_results | query | integer | Up to 500; Search defaults to 100, Admin to 10 |
| next_cursor | query | string | Next-page cursor; null or absent at the end |
Returns: ResourcePage.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| resources | array<object> | |
| resources[].asset_id | string | |
| resources[].public_id | string | |
| resources[].display_name | string | |
| resources[].asset_folder | string | |
| resources[].resource_type | string | |
| resources[].type | string | |
| resources[].format | string | |
| resources[].version | number | |
| resources[].version_id | string | |
| resources[].bytes | number | |
| resources[].etag | string | |
| resources[].width | number | |
| resources[].height | number | |
| resources[].duration | number | |
| resources[].pages | number | |
| resources[].is_audio | boolean | |
| resources[].original_filename | string | |
| resources[].tags | array<string> | |
| resources[].context | object | |
| resources[].created_at | string | |
| resources[].url | string | |
| resources[].secure_url | string | |
| resources[].placeholder | boolean | |
| resources[].existing | boolean | |
| resources[].processing | object | |
| next_cursor | string |
curl -X GET "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/resources/by_asset_folder?asset_folder=examples" \
-H "Authorization: Bearer $PRAXIS_API_KEY"HTTP 200
{
"resources": [
{
"asset_id": "e5f3de0d8609482d8b351894b133c8cb",
"public_id": "examples/pixel",
"display_name": "pixel",
"asset_folder": "examples",
"resource_type": "image",
"type": "upload",
"format": "png",
"version": 1791538435,
"version_id": "001fb6336c9b4a4c9e4597b69fdec3cd",
"bytes": 70,
"etag": "b357a19c87624c7c4d131aeeb4ae677f",
"width": 1,
"height": 1,
"original_filename": "file",
"created_at": "2026-10-09T09:33:55.536Z",
"url": "https://media-develop.praxisusercontent.com/lib_b762c40631bd42278a204cd0370fed36/image/upload/v1791538435/examples/pixel.png",
"secure_url": "https://media-develop.praxisusercontent.com/lib_b762c40631bd42278a204cd0370fed36/image/upload/v1791538435/examples/pixel.png",
"placeholder": false
}
]
}GET /cloudinary/v1_1/{library_id}/resources/{resource_type}/tags/{tag}
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| resource_type | path | image / video / raw | image, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400 |
| tag | path | string | Tag name |
| prefix | query | string | prefix |
| public_ids | query | string[] | Asset public IDs |
| asset_ids | query | string[] | asset ids |
| asset_folder | query | string | Organizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root |
| key | query | string | key |
| value | query | string | value |
| tags | query | string | Asset tags. Uploads accept a comma-separated string (items trimmed, empty items dropped), an array, or repeated tags fields; PATCH accepts an array only and replaces the whole list |
| context | query | string | Custom text key/value pairs; PATCH replaces the whole map, {} clears it |
| direction | query | string | asc or desc (default); also 1 or -1. |
| max_results | query | integer | Up to 500; Search defaults to 100, Admin to 10 |
| next_cursor | query | string | Next-page cursor; null or absent at the end |
Returns: ResourcePage.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| resources | array<object> | |
| resources[].asset_id | string | |
| resources[].public_id | string | |
| resources[].display_name | string | |
| resources[].asset_folder | string | |
| resources[].resource_type | string | |
| resources[].type | string | |
| resources[].format | string | |
| resources[].version | number | |
| resources[].version_id | string | |
| resources[].bytes | number | |
| resources[].etag | string | |
| resources[].width | number | |
| resources[].height | number | |
| resources[].duration | number | |
| resources[].pages | number | |
| resources[].is_audio | boolean | |
| resources[].original_filename | string | |
| resources[].tags | array<string> | |
| resources[].context | object | |
| resources[].created_at | string | |
| resources[].url | string | |
| resources[].secure_url | string | |
| resources[].placeholder | boolean | |
| resources[].existing | boolean | |
| resources[].processing | object | |
| next_cursor | string |
curl -X GET "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/resources/image/tags/docs" \
-H "Authorization: Bearer $PRAXIS_API_KEY"HTTP 200
{
"resources": [
{
"asset_id": "e5f3de0d8609482d8b351894b133c8cb",
"public_id": "examples/pixel",
"display_name": "pixel",
"asset_folder": "examples",
"resource_type": "image",
"type": "upload",
"format": "png",
"version": 1791538435,
"version_id": "001fb6336c9b4a4c9e4597b69fdec3cd",
"bytes": 70,
"etag": "b357a19c87624c7c4d131aeeb4ae677f",
"width": 1,
"height": 1,
"original_filename": "file",
"created_at": "2026-10-09T09:33:55.536Z",
"url": "https://media-develop.praxisusercontent.com/lib_b762c40631bd42278a204cd0370fed36/image/upload/v1791538435/examples/pixel.png",
"secure_url": "https://media-develop.praxisusercontent.com/lib_b762c40631bd42278a204cd0370fed36/image/upload/v1791538435/examples/pixel.png",
"placeholder": false
}
]
}GET /cloudinary/v1_1/{library_id}/resources/{resource_type}/context
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| resource_type | path | image / video / raw | image, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400 |
| prefix | query | string | prefix |
| public_ids | query | string[] | Asset public IDs |
| asset_ids | query | string[] | asset ids |
| asset_folder | query | string | Organizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root |
| key | query | string | key |
| value | query | string | value |
| tags | query | string | Asset tags. Uploads accept a comma-separated string (items trimmed, empty items dropped), an array, or repeated tags fields; PATCH accepts an array only and replaces the whole list |
| context | query | string | Custom text key/value pairs; PATCH replaces the whole map, {} clears it |
| direction | query | string | asc or desc (default); also 1 or -1. |
| max_results | query | integer | Up to 500; Search defaults to 100, Admin to 10 |
| next_cursor | query | string | Next-page cursor; null or absent at the end |
Returns: ResourcePage.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| resources | array<object> | |
| resources[].asset_id | string | |
| resources[].public_id | string | |
| resources[].display_name | string | |
| resources[].asset_folder | string | |
| resources[].resource_type | string | |
| resources[].type | string | |
| resources[].format | string | |
| resources[].version | number | |
| resources[].version_id | string | |
| resources[].bytes | number | |
| resources[].etag | string | |
| resources[].width | number | |
| resources[].height | number | |
| resources[].duration | number | |
| resources[].pages | number | |
| resources[].is_audio | boolean | |
| resources[].original_filename | string | |
| resources[].tags | array<string> | |
| resources[].context | object | |
| resources[].created_at | string | |
| resources[].url | string | |
| resources[].secure_url | string | |
| resources[].placeholder | boolean | |
| resources[].existing | boolean | |
| resources[].processing | object | |
| next_cursor | string |
curl -X GET "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/resources/image/context?key=alt&value=sample" \
-H "Authorization: Bearer $PRAXIS_API_KEY"HTTP 200
{
"resources": [
{
"asset_id": "e5f3de0d8609482d8b351894b133c8cb",
"public_id": "examples/pixel",
"display_name": "pixel",
"asset_folder": "examples",
"resource_type": "image",
"type": "upload",
"format": "png",
"version": 1791538435,
"version_id": "001fb6336c9b4a4c9e4597b69fdec3cd",
"bytes": 70,
"etag": "b357a19c87624c7c4d131aeeb4ae677f",
"width": 1,
"height": 1,
"original_filename": "file",
"created_at": "2026-10-09T09:33:55.536Z",
"url": "https://media-develop.praxisusercontent.com/lib_b762c40631bd42278a204cd0370fed36/image/upload/v1791538435/examples/pixel.png",
"secure_url": "https://media-develop.praxisusercontent.com/lib_b762c40631bd42278a204cd0370fed36/image/upload/v1791538435/examples/pixel.png",
"placeholder": false
}
]
}GET /cloudinary/v1_1/{library_id}/resources/{resource_type}/upload/{public_id}
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| resource_type | path | image / video / raw | image, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400 |
| public_id | path | string | Asset name in delivery URLs; may contain path segments |
| prefix | query | string | prefix |
| public_ids | query | string[] | Asset public IDs |
| asset_ids | query | string[] | asset ids |
| asset_folder | query | string | Organizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root |
| key | query | string | key |
| value | query | string | value |
| tags | query | string | Asset tags. Uploads accept a comma-separated string (items trimmed, empty items dropped), an array, or repeated tags fields; PATCH accepts an array only and replaces the whole list |
| context | query | string | Custom text key/value pairs; PATCH replaces the whole map, {} clears it |
| direction | query | string | asc or desc (default); also 1 or -1. |
| max_results | query | integer | Up to 500; Search defaults to 100, Admin to 10 |
| next_cursor | query | string | Next-page cursor; null or absent at the end |
Returns: CloudinaryResource.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| asset_id | string | |
| public_id | string | |
| display_name | string | |
| asset_folder | string | |
| resource_type | string | |
| type | string | |
| format | string | |
| version | number | |
| version_id | string | |
| bytes | number | |
| etag | string | |
| width | number | |
| height | number | |
| duration | number | |
| pages | number | |
| is_audio | boolean | |
| original_filename | string | |
| tags | array<string> | |
| context | object | |
| context.custom | object | |
| created_at | string | |
| url | string | |
| secure_url | string | |
| placeholder | boolean | |
| existing | boolean | |
| processing | object | |
| processing.state | string | |
| processing.kinds | object | |
| processing.updated_at | string |
curl -X GET "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/resources/image/upload/examples/pixel" \
-H "Authorization: Bearer $PRAXIS_API_KEY"HTTP 200
{
"asset_id": "e5f3de0d8609482d8b351894b133c8cb",
"public_id": "examples/pixel",
"display_name": "pixel",
"asset_folder": "examples",
"resource_type": "image",
"type": "upload",
"format": "png",
"version": 1791538435,
"version_id": "001fb6336c9b4a4c9e4597b69fdec3cd",
"bytes": 70,
"etag": "b357a19c87624c7c4d131aeeb4ae677f",
"width": 1,
"height": 1,
"original_filename": "file",
"tags": [
"docs"
],
"context": {
"custom": {
"alt": "sample"
}
},
"created_at": "2026-10-09T09:33:55.536Z",
"url": "https://media-develop.praxisusercontent.com/lib_b762c40631bd42278a204cd0370fed36/image/upload/v1791538435/examples/pixel.png",
"secure_url": "https://media-develop.praxisusercontent.com/lib_b762c40631bd42278a204cd0370fed36/image/upload/v1791538435/examples/pixel.png",
"placeholder": false
}POST /cloudinary/v1_1/{library_id}/resources/by_asset_ids
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| Field | Type | Required | Description |
|---|---|---|---|
| asset_ids | string[] | yes | — |
| max_results | integer | no | Up to 500; Search defaults to 100, Admin to 10 |
| next_cursor | string | no | Next-page cursor; null or absent at the end |
Returns: ResourcePage.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| resources | array<object> | |
| resources[].asset_id | string | |
| resources[].public_id | string | |
| resources[].display_name | string | |
| resources[].asset_folder | string | |
| resources[].resource_type | string | |
| resources[].type | string | |
| resources[].format | string | |
| resources[].version | number | |
| resources[].version_id | string | |
| resources[].bytes | number | |
| resources[].etag | string | |
| resources[].width | number | |
| resources[].height | number | |
| resources[].duration | number | |
| resources[].pages | number | |
| resources[].is_audio | boolean | |
| resources[].original_filename | string | |
| resources[].tags | array<string> | |
| resources[].context | object | |
| resources[].created_at | string | |
| resources[].url | string | |
| resources[].secure_url | string | |
| resources[].placeholder | boolean | |
| resources[].existing | boolean | |
| resources[].processing | object | |
| next_cursor | string |
curl -X POST "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/resources/by_asset_ids" \
-H "Authorization: Bearer $PRAXIS_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"asset_ids":["e5f3de0d8609482d8b351894b133c8cb"]}'HTTP 200
{
"resources": [
{
"asset_id": "e5f3de0d8609482d8b351894b133c8cb",
"public_id": "examples/pixel",
"display_name": "pixel",
"asset_folder": "examples",
"resource_type": "image",
"type": "upload",
"format": "png",
"version": 1791538435,
"version_id": "001fb6336c9b4a4c9e4597b69fdec3cd",
"bytes": 70,
"etag": "b357a19c87624c7c4d131aeeb4ae677f",
"width": 1,
"height": 1,
"original_filename": "file",
"created_at": "2026-10-09T09:33:55.536Z",
"url": "https://media-develop.praxisusercontent.com/lib_b762c40631bd42278a204cd0370fed36/image/upload/v1791538435/examples/pixel.png",
"secure_url": "https://media-develop.praxisusercontent.com/lib_b762c40631bd42278a204cd0370fed36/image/upload/v1791538435/examples/pixel.png",
"placeholder": false
}
]
}POST /cloudinary/v1_1/{library_id}/resources/{resource_type}/upload/{public_id}
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| resource_type | path | image / video / raw | image, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400 |
| public_id | path | string | Asset name in delivery URLs; may contain path segments |
| Field | Type | Required | Description |
|---|---|---|---|
| display_name | string | no | Display name |
| asset_folder | string | no | Organizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root |
| tags | string[] | no | Asset tags. Uploads accept a comma-separated string (items trimmed, empty items dropped), an array, or repeated tags fields; PATCH accepts an array only and replaces the whole list |
| context | object | no | Custom text key/value pairs; PATCH replaces the whole map, {} clears it |
Returns: CloudinaryResource.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| asset_id | string | |
| public_id | string | |
| display_name | string | |
| asset_folder | string | |
| resource_type | string | |
| type | string | |
| format | string | |
| version | number | |
| version_id | string | |
| bytes | number | |
| etag | string | |
| width | number | |
| height | number | |
| duration | number | |
| pages | number | |
| is_audio | boolean | |
| original_filename | string | |
| tags | array<string> | |
| context | object | |
| context.custom | object | |
| created_at | string | |
| url | string | |
| secure_url | string | |
| placeholder | boolean | |
| existing | boolean | |
| processing | object | |
| processing.state | string | |
| processing.kinds | object | |
| processing.updated_at | string |
curl -X POST "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/resources/image/upload/examples/pixel" \
-H "Authorization: Bearer $PRAXIS_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"display_name":"Sample image"}'HTTP 200
{
"asset_id": "e5f3de0d8609482d8b351894b133c8cb",
"public_id": "examples/pixel",
"display_name": "Sample image",
"asset_folder": "examples",
"resource_type": "image",
"type": "upload",
"format": "png",
"version": 1791538435,
"version_id": "001fb6336c9b4a4c9e4597b69fdec3cd",
"bytes": 70,
"etag": "b357a19c87624c7c4d131aeeb4ae677f",
"width": 1,
"height": 1,
"original_filename": "file",
"tags": [
"docs"
],
"context": {
"custom": {
"alt": "sample"
}
},
"created_at": "2026-10-09T09:33:55.536Z",
"url": "https://media-develop.praxisusercontent.com/lib_b762c40631bd42278a204cd0370fed36/image/upload/v1791538435/examples/pixel.png",
"secure_url": "https://media-develop.praxisusercontent.com/lib_b762c40631bd42278a204cd0370fed36/image/upload/v1791538435/examples/pixel.png",
"placeholder": false
}PUT /cloudinary/v1_1/{library_id}/resources/{resource_type}/upload/{public_id}
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| resource_type | path | image / video / raw | image, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400 |
| public_id | path | string | Asset name in delivery URLs; may contain path segments |
| Field | Type | Required | Description |
|---|---|---|---|
| display_name | string | no | Display name |
| asset_folder | string | no | Organizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root |
| tags | string[] | no | Asset tags. Uploads accept a comma-separated string (items trimmed, empty items dropped), an array, or repeated tags fields; PATCH accepts an array only and replaces the whole list |
| context | object | no | Custom text key/value pairs; PATCH replaces the whole map, {} clears it |
Returns: CloudinaryResource.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| asset_id | string | |
| public_id | string | |
| display_name | string | |
| asset_folder | string | |
| resource_type | string | |
| type | string | |
| format | string | |
| version | number | |
| version_id | string | |
| bytes | number | |
| etag | string | |
| width | number | |
| height | number | |
| duration | number | |
| pages | number | |
| is_audio | boolean | |
| original_filename | string | |
| tags | array<string> | |
| context | object | |
| context.custom | object | |
| created_at | string | |
| url | string | |
| secure_url | string | |
| placeholder | boolean | |
| existing | boolean | |
| processing | object | |
| processing.state | string | |
| processing.kinds | object | |
| processing.updated_at | string |
curl -X PUT "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/resources/image/upload/examples/pixel" \
-H "Authorization: Bearer $PRAXIS_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"tags":["docs"]}'HTTP 200
{
"asset_id": "e5f3de0d8609482d8b351894b133c8cb",
"public_id": "examples/pixel",
"display_name": "Sample image",
"asset_folder": "examples",
"resource_type": "image",
"type": "upload",
"format": "png",
"version": 1791538435,
"version_id": "001fb6336c9b4a4c9e4597b69fdec3cd",
"bytes": 70,
"etag": "b357a19c87624c7c4d131aeeb4ae677f",
"width": 1,
"height": 1,
"original_filename": "file",
"tags": [
"docs"
],
"context": {
"custom": {
"alt": "sample"
}
},
"created_at": "2026-10-09T09:33:55.536Z",
"url": "https://media-develop.praxisusercontent.com/lib_b762c40631bd42278a204cd0370fed36/image/upload/v1791538435/examples/pixel.png",
"secure_url": "https://media-develop.praxisusercontent.com/lib_b762c40631bd42278a204cd0370fed36/image/upload/v1791538435/examples/pixel.png",
"placeholder": false
}DELETE /cloudinary/v1_1/{library_id}/resources/{resource_type}/upload
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| resource_type | path | image / video / raw | image, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400 |
| public_ids | query | string[] | Asset public IDs |
| prefix | query | string | prefix |
| all | query | boolean | all |
| next_cursor | query | string | Next-page cursor; null or absent at the end |
Returns: DeletedResources.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| deleted | object | |
| partial | boolean | |
| next_cursor | string |
curl -X DELETE "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/resources/image/upload" \
-H "Authorization: Bearer $PRAXIS_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"prefix":"imported/"}'HTTP 200
{
"deleted": {},
"partial": false
}DELETE /cloudinary/v1_1/{library_id}/resources/{resource_type}/tags/{tag}
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| resource_type | path | image / video / raw | image, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400 |
| tag | path | string | Tag name |
| public_ids | query | string[] | Asset public IDs |
| prefix | query | string | prefix |
| all | query | boolean | all |
| next_cursor | query | string | Next-page cursor; null or absent at the end |
Returns: DeletedResources.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| deleted | object | |
| partial | boolean | |
| next_cursor | string |
curl -X DELETE "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/resources/image/tags/remove-me" \
-H "Authorization: Bearer $PRAXIS_API_KEY" \
-H 'Content-Type: application/json' \
-d '{}'HTTP 200
{
"deleted": {
"tagged/pixel": "deleted"
},
"partial": false
}GET /cloudinary/v1_1/{library_id}/tags/{resource_type}
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| resource_type | path | image / video / raw | image, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400 |
| prefix | query | string | prefix |
| max_results | query | integer | Up to 500; Search defaults to 100, Admin to 10 |
| next_cursor | query | string | Next-page cursor; null or absent at the end |
Returns: Tags.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| tags | array<string> | |
| next_cursor | string |
curl -X GET "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/tags/image" \
-H "Authorization: Bearer $PRAXIS_API_KEY"HTTP 200
{
"tags": [
"docs"
]
}GET /cloudinary/v1_1/{library_id}/folders
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| max_results | query | integer | Up to 500; Search defaults to 100, Admin to 10 |
| next_cursor | query | string | Next-page cursor; null or absent at the end |
Returns: CompatFolders.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| folders | array<object> | |
| folders[].name | string | |
| folders[].path | string | |
| total_count | number | |
| next_cursor | string |
curl -X GET "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/folders" \
-H "Authorization: Bearer $PRAXIS_API_KEY"HTTP 200
{
"folders": [
{
"name": "examples",
"path": "examples"
}
],
"total_count": 1
}GET /cloudinary/v1_1/{library_id}/folders/{folder}
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| folder | path | string | Folder path; may contain slash-separated segments. |
| max_results | query | integer | Up to 500; Search defaults to 100, Admin to 10 |
| next_cursor | query | string | Next-page cursor; null or absent at the end |
Returns: CompatFolders.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| folders | array<object> | |
| folders[].name | string | |
| folders[].path | string | |
| total_count | number | |
| next_cursor | string |
curl -X GET "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/folders/examples" \
-H "Authorization: Bearer $PRAXIS_API_KEY"HTTP 200
{
"folders": [],
"total_count": 0
}POST /cloudinary/v1_1/{library_id}/folders/{folder}
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| folder | path | string | Folder path; may contain slash-separated segments. |
Returns: FolderResult.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| $ | object |
curl -X POST "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/folders/sample" \
-H "Authorization: Bearer $PRAXIS_API_KEY" \
-H 'Content-Type: application/json' \
-d '{}'HTTP 200
{
"success": true,
"path": "sample"
}PUT /cloudinary/v1_1/{library_id}/folders/{folder}
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| folder | path | string | Folder path; may contain slash-separated segments. |
| Field | Type | Required | Description |
|---|---|---|---|
| to_folder | string | yes | Destination folder path |
Returns: FolderResult.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| $ | object |
DELETE /cloudinary/v1_1/{library_id}/folders/{folder}
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| folder | path | string | Folder path; may contain slash-separated segments. |
Returns: FolderResult.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| $ | object |
curl -X DELETE "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/folders/sample" \
-H "Authorization: Bearer $PRAXIS_API_KEY" \
-H 'Content-Type: application/json' \
-d '{}'HTTP 200
{
"success": true,
"path": "sample"
}GET /cloudinary/v1_1/{library_id}/ping
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
Returns: Ping.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| status | string |
curl -X GET "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/ping" \
-H "Authorization: Bearer $PRAXIS_API_KEY"HTTP 200
{
"status": "ok"
}GET /cloudinary/v1_1/{library_id}/usage
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
Returns: Usage.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| storage | object | |
| storage.usage | number | |
| objects | object | |
| objects.usage | number |
curl -X GET "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/usage" \
-H "Authorization: Bearer $PRAXIS_API_KEY"HTTP 200
{
"storage": {
"usage": 70
},
"objects": {
"usage": 1
}
}GET /cloudinary/v1_1/{library_id}/usage/{date}
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| date | path | string | Accepted date segment; returns current library totals, not historical usage. |
Returns: Usage.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| storage | object | |
| storage.usage | number | |
| objects | object | |
| objects.usage | number |
curl -X GET "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/usage/2026-10-09" \
-H "Authorization: Bearer $PRAXIS_API_KEY"HTTP 200
{
"storage": {
"usage": 70
},
"objects": {
"usage": 1
}
}| Field | Type | Required | Description |
|---|---|---|---|
| resources | SearchResource[] | yes | Assets in this page |
| next_cursor | string | no | Next-page cursor; null or absent at the end |
| Field | Type | Required | Description |
|---|---|---|---|
| asset_id | AssetId | yes | Asset ID |
| public_id | string | yes | Asset name in delivery URLs; may contain path segments |
| display_name | string | yes | Display name |
| asset_folder | string | yes | Organizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root |
| resource_type | ResourceType | yes | image, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400 |
| type | DeliveryType | yes | Resource or event type |
| format | string | yes | File format |
| version | number | yes | Delivery version |
| version_id | string | yes | Version identifier |
| bytes | number | yes | File size in bytes |
| etag | string | yes | File checksum |
| width | number | no | Width in pixels |
| height | number | no | Height in pixels |
| duration | number | no | Duration in seconds |
| pages | number | no | Document pages |
| is_audio | boolean | no | Whether this is audio |
| original_filename | string | no | Original file name |
| tags | string[] | yes | Asset tags. Uploads accept a comma-separated string (items trimmed, empty items dropped), an array, or repeated tags fields; PATCH accepts an array only and replaces the whole list |
| context | object | no | Custom text key/value pairs; PATCH replaces the whole map, {} clears it |
| created_at | IsoTimestamp | yes | Creation time |
| url | string | yes | Original-file URL |
| secure_url | string | yes | HTTPS delivery URL |
| placeholder | false | yes | Always false |
| existing | boolean | no | Whether an existing asset was returned without overwrite |
| processing | Processing | no | Overall and per-kind processing states |
| Field | Type | Required | Description |
|---|---|---|---|
| deleted | object | yes | Deletion result |
| partial | boolean | yes | Whether another page remains |
| next_cursor | string | no | Next-page cursor; null or absent at the end |
| Field | Type | Required | Description |
|---|---|---|---|
| tags | string[] | yes | Asset tags. Uploads accept a comma-separated string (items trimmed, empty items dropped), an array, or repeated tags fields; PATCH accepts an array only and replaces the whole list |
| next_cursor | string | no | Next-page cursor; null or absent at the end |
| Field | Type | Required | Description |
|---|---|---|---|
| folders | object[] | yes | Folders |
| total_count | number | yes | Matching count |
| next_cursor | string | no | Next-page cursor; null or absent at the end |
| Field | Type | Required | Description |
|---|
| Field | Type | Required | Description |
|---|---|---|---|
| status | "ok" | yes | Resource status |
| Field | Type | Required | Description |
|---|---|---|---|
| storage | object | yes | Storage usage in bytes |
| objects | object | yes | Asset count |
Only the following expression subset is supported. Unsupported syntax or fields return HTTP 400 INVALID_EXPRESSION; compatible errors contain only the message. Tags and context are omitted by default; request them with with_field.
| Syntax | Meaning |
|---|---|
| AND / OR / NOT / - / ( ) | Boolean combinations; adjacent terms imply AND |
| field:value / field=value | Field match |
| bytes > 1000 / width >= 160 | Numeric comparisons; also height and duration |
| created_at >= 2026-01-01 / uploaded_at > 7d | Dates or relative time, d/w/m/y |
| tags:docs / context.alt:"sample image" | Tags and custom text |
| public_id:docs* | Trailing wildcard only |
| "sample image" | Phrase |
| sunset | Bare word: full-text match over public_id, display_name, tags, context, and understood captions, image text, and transcripts; case-insensitive |
| ~ / ^ / [a TO z] / prefix / ab | Unsupported; returns 400 |
Field names are case-insensitive (RESOURCE_TYPE:image equals resource_type:image). Values of resource_type, type, and format are case-insensitive; values of tags, context, and other fields are case-sensitive. An empty expression returns every asset; an expression that cannot be parsed returns 400 INVALID_EXPRESSION.
Queryable fields: asset_id, resource_type, type, format, public_id, asset_folder, display_name, tags, bytes, width, height, duration, created_at, uploaded_at, context.<key>.
Sort fields: created_at, public_id, display_name, bytes, uploaded_at.
Aggregate fields: resource_type, format, asset_folder, processing_state.
Guide →
GET /cloudinary/v1_1/{library_id}/resources/visual_search
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| image_asset_id | query | string | Asset ID in this library |
| image_url | query | string | Only delivery URLs from this library; external URLs are not fetched |
| text | query | string | Natural-language query using semantic search |
| max_results | query | integer | Up to 500; Search defaults to 100, Admin to 10 |
| filter | query | string | Expression filter |
Returns: VisualResources.
Available when library search.image is true; unsupported libraries return LIBRARY_INVALID_STATE. JPEG, PNG, WebP and GIF are accepted, with a maximum decoded size of 10 MiB. Each asset returns its highest-scoring match; videos identify the best frame. qwen3-vl-embedding uses 0.35 for image similarity. Measurements on 2026-10-10: variants of the same image scored 0.82–0.96, similar scenes 0.38–0.66, and unrelated images at most 0.34.
Provide exactly one of image_asset_id, multipart image_file, image_url, or text. Text uses semantic-only search; the response is { "resources": [...] }. image_url accepts only this library’s delivery URLs. External URLs are never fetched and return 400 with “不支持抓取外部 URL”.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| resources | array<object> | |
| resources[].asset_id | string | |
| resources[].public_id | string | |
| resources[].display_name | string | |
| resources[].asset_folder | string | |
| resources[].resource_type | string | |
| resources[].type | string | |
| resources[].format | string | |
| resources[].version | number | |
| resources[].version_id | string | |
| resources[].bytes | number | |
| resources[].etag | string | |
| resources[].width | number | |
| resources[].height | number | |
| resources[].duration | number | |
| resources[].pages | number | |
| resources[].is_audio | boolean | |
| resources[].original_filename | string | |
| resources[].tags | array<string> | |
| resources[].context | object | |
| resources[].created_at | string | |
| resources[].url | string | |
| resources[].secure_url | string | |
| resources[].placeholder | boolean | |
| resources[].existing | boolean | |
| resources[].processing | object |
POST /cloudinary/v1_1/{library_id}/resources/visual_search
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| Field | Type | Required | Description |
|---|---|---|---|
| image_asset_id | string | no | Asset ID in this library |
| image_url | string | no | Only delivery URLs from this library; external URLs are not fetched |
| image_file | string | no | JPEG, PNG, WebP or GIF file, at most 10 MiB |
| text | string | no | Natural-language query using semantic search |
| max_results | integer | no | Up to 500; Search defaults to 100, Admin to 10 |
| filter | string | no | Expression filter |
Returns: VisualResources.
Available when library search.image is true; unsupported libraries return LIBRARY_INVALID_STATE. JPEG, PNG, WebP and GIF are accepted, with a maximum decoded size of 10 MiB. Each asset returns its highest-scoring match; videos identify the best frame. qwen3-vl-embedding uses 0.35 for image similarity. Measurements on 2026-10-10: variants of the same image scored 0.82–0.96, similar scenes 0.38–0.66, and unrelated images at most 0.34.
Provide exactly one of image_asset_id, multipart image_file, image_url, or text. Text uses semantic-only search; the response is { "resources": [...] }. image_url accepts only this library’s delivery URLs. External URLs are never fetched and return 400 with “不支持抓取外部 URL”.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| resources | array<object> | |
| resources[].asset_id | string | |
| resources[].public_id | string | |
| resources[].display_name | string | |
| resources[].asset_folder | string | |
| resources[].resource_type | string | |
| resources[].type | string | |
| resources[].format | string | |
| resources[].version | number | |
| resources[].version_id | string | |
| resources[].bytes | number | |
| resources[].etag | string | |
| resources[].width | number | |
| resources[].height | number | |
| resources[].duration | number | |
| resources[].pages | number | |
| resources[].is_audio | boolean | |
| resources[].original_filename | string | |
| resources[].tags | array<string> | |
| resources[].context | object | |
| resources[].created_at | string | |
| resources[].url | string | |
| resources[].secure_url | string | |
| resources[].placeholder | boolean | |
| resources[].existing | boolean | |
| resources[].processing | object |
GET /cloudinary/v1_1/{library_id}/resources/search
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| expression | query | string | Structured query expression; an empty expression returns every asset |
| sort_by | query | string | Sort fields and directions |
| max_results | query | integer | Up to 500; Search defaults to 100, Admin to 10 |
| next_cursor | query | string | Next-page cursor; null or absent at the end |
| with_field | query | string[] | Include tags or context |
| aggregate | query | string[] | Aggregation fields |
Returns: CompatExpressionSearchResult.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| total_count | number | |
| time | number | |
| next_cursor | string | |
| resources | array<object> | |
| resources[].asset_id | string | |
| resources[].public_id | string | |
| resources[].display_name | string | |
| resources[].asset_folder | string | |
| resources[].resource_type | string | |
| resources[].type | string | |
| resources[].format | string | |
| resources[].version | number | |
| resources[].version_id | string | |
| resources[].bytes | number | |
| resources[].etag | string | |
| resources[].width | number | |
| resources[].height | number | |
| resources[].duration | number | |
| resources[].pages | number | |
| resources[].is_audio | boolean | |
| resources[].original_filename | string | |
| resources[].tags | array<string> | |
| resources[].context | object | |
| resources[].created_at | string | |
| resources[].url | string | |
| resources[].secure_url | string | |
| resources[].placeholder | boolean | |
| resources[].existing | boolean | |
| resources[].processing | object | |
| aggregations | object |
curl -X GET "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/resources/search?expression=tags%3Adocs" \
-H "Authorization: Bearer $PRAXIS_API_KEY"HTTP 200
{
"total_count": 1,
"time": 0,
"resources": [
{
"asset_id": "9339cdae93804c0c8c65d5189ef1f646",
"public_id": "docs/pixel",
"display_name": "Sample image",
"asset_folder": "examples",
"resource_type": "image",
"type": "upload",
"format": "png",
"version": 1791538418,
"version_id": "35848c1529994e338e7aa634a1c13d9c",
"bytes": 70,
"etag": "b357a19c87624c7c4d131aeeb4ae677f",
"width": 1,
"height": 1,
"original_filename": "file",
"created_at": "2026-10-09T09:33:38.899Z",
"url": "https://media-develop.praxisusercontent.com/lib_77374d4ee73b4ae79c4aa430f3ba3885/image/upload/v1791538418/docs/pixel.png",
"secure_url": "https://media-develop.praxisusercontent.com/lib_77374d4ee73b4ae79c4aa430f3ba3885/image/upload/v1791538418/docs/pixel.png",
"placeholder": false
}
]
}POST /cloudinary/v1_1/{library_id}/resources/search
| Parameter | Location | Type | Description |
|---|---|---|---|
| library_id | path | string | Library ID |
| Field | Type | Required | Description |
|---|---|---|---|
| expression | string | no | Structured query expression; an empty expression returns every asset |
| sort_by | object[] | no | Sort fields and directions |
| max_results | integer | no | Up to 500; Search defaults to 100, Admin to 10 |
| next_cursor | string | no | Next-page cursor; null or absent at the end |
| with_field | "tags" / "context"[] | no | Include tags or context |
| aggregate | AggregateField[] | no | Aggregation fields |
Returns: CompatExpressionSearchResult.
Successful response.
application/json
| Name | Type | Description |
|---|---|---|
| total_count | number | |
| time | number | |
| next_cursor | string | |
| resources | array<object> | |
| resources[].asset_id | string | |
| resources[].public_id | string | |
| resources[].display_name | string | |
| resources[].asset_folder | string | |
| resources[].resource_type | string | |
| resources[].type | string | |
| resources[].format | string | |
| resources[].version | number | |
| resources[].version_id | string | |
| resources[].bytes | number | |
| resources[].etag | string | |
| resources[].width | number | |
| resources[].height | number | |
| resources[].duration | number | |
| resources[].pages | number | |
| resources[].is_audio | boolean | |
| resources[].original_filename | string | |
| resources[].tags | array<string> | |
| resources[].context | object | |
| resources[].created_at | string | |
| resources[].url | string | |
| resources[].secure_url | string | |
| resources[].placeholder | boolean | |
| resources[].existing | boolean | |
| resources[].processing | object | |
| aggregations | object |
curl -X POST "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/resources/search" \
-H "Authorization: Bearer $PRAXIS_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"expression":"tags:docs"}'HTTP 200
{
"total_count": 2,
"time": 0,
"resources": [
{
"asset_id": "9dfa312ef9bc4b00816339b598b1152c",
"public_id": "walk-lib-r1-MDP-1791733789929-tagged",
"display_name": "walk-lib-r1-MDP-1791733789929-tagged",
"asset_folder": "",
"resource_type": "image",
"type": "upload",
"format": "png",
"version": 1791733815,
"version_id": "26cb8171caa5431b8373ad417fd71e32",
"bytes": 70,
"etag": "b357a19c87624c7c4d131aeeb4ae677f",
"width": 1,
"height": 1,
"original_filename": "file",
"processing": {
"state": "processing",
"kinds": {
"embedding": "running",
"visual": "failed",
"tagging": "failed"
},
"updated_at": "2026-10-11T15:50:21.512Z"
},
"created_at": "2026-10-11T15:50:15.996Z",
"url": "https://media-develop.praxisusercontent.com/lib_d3881a2f54a34cd79121b9d659e8378c/image/upload/v1791733815/walk-lib-r1-MDP-1791733789929-tagged.png",
"secure_url": "https://media-develop.praxisusercontent.com/lib_d3881a2f54a34cd79121b9d659e8378c/image/upload/v1791733815/walk-lib-r1-MDP-1791733789929-tagged.png",
"placeholder": false
},
{
"asset_id": "85b7ef616a8b4719a41777a036ebc1d2",
"public_id": "walk-lib-r1-MDP-1791733789929-plain",
"display_name": "walk-lib-r1-MDP-1791733789929-plain",
"asset_folder": "",
"resource_type": "image",
"type": "upload",
"format": "png",
"version": 1791733810,
"version_id": "fdf3c8cd40c2424d86e8397425a69857",
"bytes": 70,
"etag": "b357a19c87624c7c4d131aeeb4ae677f",
"width": 1,
"height": 1,
"original_filename": "file",
"created_at": "2026-10-11T15:50:10.842Z",
"url": "https://media-develop.praxisusercontent.com/lib_d3881a2f54a34cd79121b9d659e8378c/image/upload/v1791733810/walk-lib-r1-MDP-1791733789929-plain.png",
"secure_url": "https://media-develop.praxisusercontent.com/lib_d3881a2f54a34cd79121b9d659e8378c/image/upload/v1791733810/walk-lib-r1-MDP-1791733789929-plain.png",
"placeholder": false
}
]
}| Field | Type | Required | Description |
|---|---|---|---|
| resources | CloudinaryResource[] | yes | Assets in this page |
| Field | Type | Required | Description |
|---|---|---|---|
| total_count | number | yes | Matching count |
| time | number | yes | Search time in whole milliseconds, measured by the service |
| next_cursor | string | no | Next-page cursor; null or absent at the end |
| resources | SearchResource[] | yes | Assets in this page |
| aggregations | object | no | Counts by requested fields |
| Field | Type | Required | Description |
|---|---|---|---|
| asset_id | AssetId | yes | Asset ID |
| public_id | string | yes | Asset name in delivery URLs; may contain path segments |
| display_name | string | yes | Display name |
| asset_folder | string | yes | Organizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root |
| resource_type | ResourceType | yes | image, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400 |
| type | DeliveryType | yes | Resource or event type |
| format | string | yes | File format |
| version | number | yes | Delivery version |
| version_id | string | yes | Version identifier |
| bytes | number | yes | File size in bytes |
| etag | string | yes | File checksum |
| width | number | no | Width in pixels |
| height | number | no | Height in pixels |
| duration | number | no | Duration in seconds |
| pages | number | no | Document pages |
| is_audio | boolean | no | Whether this is audio |
| original_filename | string | no | Original file name |
| tags | string[] | no | Asset tags. Uploads accept a comma-separated string (items trimmed, empty items dropped), an array, or repeated tags fields; PATCH accepts an array only and replaces the whole list |
| context | object | no | Custom text key/value pairs; PATCH replaces the whole map, {} clears it |
| created_at | IsoTimestamp | yes | Creation time |
| url | string | yes | Original-file URL |
| secure_url | string | yes | HTTPS delivery URL |
| placeholder | false | yes | Always false |
| existing | boolean | no | Whether an existing asset was returned without overwrite |
| processing | Processing | no | Overall and per-kind processing states |
Use secure_url from the upload response for originals. Insert transformations between upload and the version.
https://media-develop.praxisusercontent.com/{library_id}/{resource_type}/upload/{transformation}/v{version}/{public_id}.{format}
For originals, omit transformation and its following slash. Only these transformations are accepted; others return errors.
| Parameter | Allowed values |
|---|---|
| w_ | 160, 320, 640, 1280 |
| c_ | fill, fit, limit, scale, pad |
| g_ | auto, center |
| f_ | auto, jpg, png, webp, avif |
| q_ | auto, auto:good, auto:eco |
| dpr_ | 1, 2 |
| so_ | Video time in seconds with .jpg; source at most 100 MiB |
w_160,c_fit
w_320,c_fill,g_center,f_webp,q_auto,dpr_2Delivery uses the separate registrable domain praxisusercontent.com, isolated from API and sign-in domains: media-develop.praxisusercontent.com on Develop and media.praxisusercontent.com in production. URL paths keep the same shape, and delivery carries no cookies.
X-Content-Type-Options: nosniff.Content-Security-Policy: sandbox and Content-Disposition: attachment.