Cloudinary-compatible API

2026-10-22

Cloudinary-compatible API

Manage a library with an official Cloudinary SDK. Configure these three values; the API Key is sent as a Bearer credential.

Guide →

https://api.deepraxis.ai/cloudinary/v1_1/{library_id}

SettingValue
cloud_namelibrary_id
oauth_tokenAPI Key
upload_prefixhttps://api.deepraxis.ai/cloudinary

Node.js

npm install cloudinary@2
import { 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

python -m pip install cloudinary
import 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",
)

Support matrix

OperationSupport
GET /v1_1/{library_id}/resources/visual_searchsupported
POST /v1_1/{library_id}/resources/visual_searchsupported
POST /v1_1/{library_id}/{resource_type}/uploadsupported
POST /v1_1/{library_id}/{resource_type}/destroysupported
POST /v1_1/{library_id}/{resource_type}/renamesupported
POST /v1_1/{library_id}/{resource_type}/tagssupported
POST /v1_1/{library_id}/{resource_type}/contextsupported
POST /v1_1/{library_id}/{resource_type}/explicitsupported
GET /v1_1/{library_id}/resources/searchsupported
POST /v1_1/{library_id}/resources/searchsupported
GET /v1_1/{library_id}/resourcessupported
GET /v1_1/{library_id}/resources/{resource_type}supported
GET /v1_1/{library_id}/resources/{resource_type}/uploadsupported
GET /v1_1/{library_id}/resources/{asset_id}supported
GET /v1_1/{library_id}/resources/by_asset_idssupported
GET /v1_1/{library_id}/resources/by_asset_foldersupported
GET /v1_1/{library_id}/resources/{resource_type}/tags/{tag}supported
GET /v1_1/{library_id}/resources/{resource_type}/contextsupported
GET /v1_1/{library_id}/resources/{resource_type}/upload/{public_id}supported
POST /v1_1/{library_id}/resources/by_asset_idssupported
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}/uploadsupported
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}/folderssupported
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}/pingsupported
GET /v1_1/{library_id}/usagepartial
GET /v1_1/{library_id}/usage/{date}partial

usage returns current storage bytes and asset count only; dates do not select historical totals.

Unsupported operations

EndpointHTTP
upload_presets400
metadata_fields400
transformations400
streaming_profiles400
upload_mappings400
triggers400
derived_resources400
relations400
restore400
backups400
text400
sprite400
multi400
explode400
generate_archive400
create_slideshow400
download_backup_asset400
folders/search400

These endpoint messages contain is not supported. Private and authenticated delivery types also return 400.

Upload parameters

ParameterSupport
filesupported
public_idsupported
public_id_prefixsupported
display_namesupported
asset_foldersupported
use_filenamesupported
unique_filenamesupported
use_filename_as_display_namesupported
filename_overridesupported
overwritesupported
tagssupported
contextsupported
auto_taggingpartial
resource_typesupported
eagerunsupported
eager_asyncunsupported
eager_notification_urlunsupported
asyncunsupported
notification_urlunsupported
upload_presetunsupported
moderationunsupported
detectionunsupported
ocrunsupported
raw_convertunsupported
background_removalunsupported
categorizationunsupported
transformationunsupported
responsive_breakpointsunsupported
proxyunsupported
backupunsupported
return_delete_tokenunsupported
access_controlunsupported
access_modeunsupported
metadataunsupported
face_coordinatesunsupported
custom_coordinatesunsupported
regionsunsupported
quality_analysisunsupported
accessibility_analysisunsupported
cinemagraph_analysisunsupported
media_metadataunsupported
phashunsupported
colorsunsupported
facesunsupported
image_metadataunsupported
exifunsupported
invalidateunsupported
typeunsupported

Unsupported upload parameters return 400 with Unsupported upload parameter: followed by the parameter name.

Error envelopes and codes

Upload and actions

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.

Guide →

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.

Guide →

Base URL and authentication

Upload

POST /cloudinary/v1_1/{library_id}/{resource_type}/upload

ParameterLocationTypeDescription
library_idpathstringLibrary ID
resource_typepathimage / video / raw / autoimage, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400
X-Unique-Upload-IdheaderstringStable identifier shared by every chunk of this upload.
Content-RangeheaderstringChunk byte range: bytes start-end/total; total may be -1 until the final chunk.

Request body

FieldTypeRequiredDescription
filestring / stringyesFile bytes, HTTPS URL, data URI, or same-account file_…
public_idstringnoAsset name in delivery URLs; may contain path segments
public_id_prefixstringnoPath prefix for public_id; a trailing / is optional and exactly one / separates prefix and ID
display_namestringnoDisplay name
asset_folderstringnoOrganizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root
use_filenamebooleannoUse the file name for public_id
unique_filenamebooleannoAppend a unique suffix
use_filename_as_display_namebooleannoUse the file name as display_name
filename_overridestringnoOverride the original file name
overwritebooleannoWhether to overwrite a matching public ID
tagsstring / string[]noAsset 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
contextstring / objectnoCustom text key/value pairs; PATCH replaces the whole map, {} clears it
auto_taggingnumbernoMerge tags meeting the threshold after understanding; 0–1
resource_typeResourceType / "auto"noimage, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400

Returns: CloudinaryResource.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
asset_idstring
public_idstring
display_namestring
asset_folderstring
resource_typestring
typestring
formatstring
versionnumber
version_idstring
bytesnumber
etagstring
widthnumber
heightnumber
durationnumber
pagesnumber
is_audioboolean
original_filenamestring
tagsarray<string>
contextobject
context.customobject
created_atstring
urlstring
secure_urlstring
placeholderboolean
existingboolean
processingobject
processing.statestring
processing.kindsobject
processing.updated_atstring
doneboolean
upload_idstring
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
}

Destroy

POST /cloudinary/v1_1/{library_id}/{resource_type}/destroy

ParameterLocationTypeDescription
library_idpathstringLibrary ID
resource_typepathimage / video / raw / autoimage, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400

Request body

FieldTypeRequiredDescription
public_idstringyesAsset name in delivery URLs; may contain path segments

Returns: DestroyResult.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
resultstring
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"
}

Rename

POST /cloudinary/v1_1/{library_id}/{resource_type}/rename

ParameterLocationTypeDescription
library_idpathstringLibrary ID
resource_typepathimage / video / raw / autoimage, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400

Request body

FieldTypeRequiredDescription
from_public_idstringyesOriginal public ID
to_public_idstringyesNew public ID
overwritebooleannoWhether to overwrite a matching public ID

Returns: CloudinaryResource.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
asset_idstring
public_idstring
display_namestring
asset_folderstring
resource_typestring
typestring
formatstring
versionnumber
version_idstring
bytesnumber
etagstring
widthnumber
heightnumber
durationnumber
pagesnumber
is_audioboolean
original_filenamestring
tagsarray<string>
contextobject
context.customobject
created_atstring
urlstring
secure_urlstring
placeholderboolean
existingboolean
processingobject
processing.statestring
processing.kindsobject
processing.updated_atstring
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
}

Tags

POST /cloudinary/v1_1/{library_id}/{resource_type}/tags

ParameterLocationTypeDescription
library_idpathstringLibrary ID
resource_typepathimage / video / raw / autoimage, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400

Request body

FieldTypeRequiredDescription
public_idsstring[]yesAsset public IDs
tagstringnoTag name
commandadd / remove / replace / remove_allyesTag or context action

Returns: PublicIds.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
public_idsarray<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"
  ]
}

Context

POST /cloudinary/v1_1/{library_id}/{resource_type}/context

ParameterLocationTypeDescription
library_idpathstringLibrary ID
resource_typepathimage / video / raw / autoimage, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400

Request body

FieldTypeRequiredDescription
public_idsstring[]yesAsset public IDs
contextstring / objectnoCustom text key/value pairs; PATCH replaces the whole map, {} clears it
commandadd / remove_allyesTag or context action

Returns: PublicIds.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
public_idsarray<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"
  ]
}

Explicit

POST /cloudinary/v1_1/{library_id}/{resource_type}/explicit

ParameterLocationTypeDescription
library_idpathstringLibrary ID
resource_typepathimage / video / raw / autoimage, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400

Request body

FieldTypeRequiredDescription
public_idstringyesAsset name in delivery URLs; may contain path segments
tagsstring / string[]noAsset 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
contextstring / objectnoCustom text key/value pairs; PATCH replaces the whole map, {} clears it

Returns: CloudinaryResource.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
asset_idstring
public_idstring
display_namestring
asset_folderstring
resource_typestring
typestring
formatstring
versionnumber
version_idstring
bytesnumber
etagstring
widthnumber
heightnumber
durationnumber
pagesnumber
is_audioboolean
original_filenamestring
tagsarray<string>
contextobject
context.customobject
created_atstring
urlstring
secure_urlstring
placeholderboolean
existingboolean
processingobject
processing.statestring
processing.kindsobject
processing.updated_atstring
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
}

CloudinaryResource

FieldTypeRequiredDescription
asset_idAssetIdyesAsset ID
public_idstringyesAsset name in delivery URLs; may contain path segments
display_namestringyesDisplay name
asset_folderstringyesOrganizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root
resource_typeResourceTypeyesimage, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400
typeDeliveryTypeyesResource or event type
formatstringyesFile format
versionnumberyesDelivery version
version_idstringyesVersion identifier
bytesnumberyesFile size in bytes
etagstringyesFile checksum
widthnumbernoWidth in pixels
heightnumbernoHeight in pixels
durationnumbernoDuration in seconds
pagesnumbernoDocument pages
is_audiobooleannoWhether this is audio
original_filenamestringnoOriginal file name
tagsstring[]yesAsset 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
contextobjectnoCustom text key/value pairs; PATCH replaces the whole map, {} clears it
created_atIsoTimestampyesCreation time
urlstringyesOriginal-file URL
secure_urlstringyesHTTPS delivery URL
placeholderfalseyesAlways false
existingbooleannoWhether an existing asset was returned without overwrite
processingProcessingnoOverall and per-kind processing states

DestroyResult

FieldTypeRequiredDescription
resultok / not foundyesOperation result

PublicIds

FieldTypeRequiredDescription
public_idsstring[]yesAsset public IDs

ChunkPending

FieldTypeRequiredDescription
donefalseyesCompleted count; completion flag for chunk responses
upload_idstringyesChunk session identifier

ChunkComplete

FieldTypeRequiredDescription
asset_idAssetIdyesAsset ID
public_idstringyesAsset name in delivery URLs; may contain path segments
display_namestringyesDisplay name
asset_folderstringyesOrganizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root
resource_typeResourceTypeyesimage, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400
typeDeliveryTypeyesResource or event type
formatstringyesFile format
versionnumberyesDelivery version
version_idstringyesVersion identifier
bytesnumberyesFile size in bytes
etagstringyesFile checksum
widthnumbernoWidth in pixels
heightnumbernoHeight in pixels
durationnumbernoDuration in seconds
pagesnumbernoDocument pages
is_audiobooleannoWhether this is audio
original_filenamestringnoOriginal file name
tagsstring[]yesAsset 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
contextobjectnoCustom text key/value pairs; PATCH replaces the whole map, {} clears it
created_atIsoTimestampyesCreation time
urlstringyesOriginal-file URL
secure_urlstringyesHTTPS delivery URL
placeholderfalseyesAlways false
existingbooleannoWhether an existing asset was returned without overwrite
processingProcessingnoOverall and per-kind processing states
FieldTypeRequiredDescription
donetrueyesCompleted count; completion flag for chunk responses

Admin

Admin manages assets in the current library. usage returns current storage and asset count only.

Guide →

Base URL and authentication

Get resources

GET /cloudinary/v1_1/{library_id}/resources

ParameterLocationTypeDescription
library_idpathstringLibrary ID
prefixquerystringprefix
public_idsquerystring[]Asset public IDs
asset_idsquerystring[]asset ids
asset_folderquerystringOrganizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root
keyquerystringkey
valuequerystringvalue
tagsquerystringAsset 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
contextquerystringCustom text key/value pairs; PATCH replaces the whole map, {} clears it
directionquerystringasc or desc (default); also 1 or -1.
max_resultsqueryintegerUp to 500; Search defaults to 100, Admin to 10
next_cursorquerystringNext-page cursor; null or absent at the end

Returns: ResourcePage.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
resourcesarray<object>
resources[].asset_idstring
resources[].public_idstring
resources[].display_namestring
resources[].asset_folderstring
resources[].resource_typestring
resources[].typestring
resources[].formatstring
resources[].versionnumber
resources[].version_idstring
resources[].bytesnumber
resources[].etagstring
resources[].widthnumber
resources[].heightnumber
resources[].durationnumber
resources[].pagesnumber
resources[].is_audioboolean
resources[].original_filenamestring
resources[].tagsarray<string>
resources[].contextobject
resources[].created_atstring
resources[].urlstring
resources[].secure_urlstring
resources[].placeholderboolean
resources[].existingboolean
resources[].processingobject
next_cursorstring
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 resources

GET /cloudinary/v1_1/{library_id}/resources/{resource_type}

ParameterLocationTypeDescription
library_idpathstringLibrary ID
resource_typepathimage / video / rawimage, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400
prefixquerystringprefix
public_idsquerystring[]Asset public IDs
asset_idsquerystring[]asset ids
asset_folderquerystringOrganizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root
keyquerystringkey
valuequerystringvalue
tagsquerystringAsset 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
contextquerystringCustom text key/value pairs; PATCH replaces the whole map, {} clears it
directionquerystringasc or desc (default); also 1 or -1.
max_resultsqueryintegerUp to 500; Search defaults to 100, Admin to 10
next_cursorquerystringNext-page cursor; null or absent at the end

Returns: ResourcePage.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
resourcesarray<object>
resources[].asset_idstring
resources[].public_idstring
resources[].display_namestring
resources[].asset_folderstring
resources[].resource_typestring
resources[].typestring
resources[].formatstring
resources[].versionnumber
resources[].version_idstring
resources[].bytesnumber
resources[].etagstring
resources[].widthnumber
resources[].heightnumber
resources[].durationnumber
resources[].pagesnumber
resources[].is_audioboolean
resources[].original_filenamestring
resources[].tagsarray<string>
resources[].contextobject
resources[].created_atstring
resources[].urlstring
resources[].secure_urlstring
resources[].placeholderboolean
resources[].existingboolean
resources[].processingobject
next_cursorstring
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 resources

GET /cloudinary/v1_1/{library_id}/resources/{resource_type}/upload

ParameterLocationTypeDescription
library_idpathstringLibrary ID
resource_typepathimage / video / rawimage, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400
prefixquerystringprefix
public_idsquerystring[]Asset public IDs
asset_idsquerystring[]asset ids
asset_folderquerystringOrganizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root
keyquerystringkey
valuequerystringvalue
tagsquerystringAsset 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
contextquerystringCustom text key/value pairs; PATCH replaces the whole map, {} clears it
directionquerystringasc or desc (default); also 1 or -1.
max_resultsqueryintegerUp to 500; Search defaults to 100, Admin to 10
next_cursorquerystringNext-page cursor; null or absent at the end

Returns: ResourcePage.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
resourcesarray<object>
resources[].asset_idstring
resources[].public_idstring
resources[].display_namestring
resources[].asset_folderstring
resources[].resource_typestring
resources[].typestring
resources[].formatstring
resources[].versionnumber
resources[].version_idstring
resources[].bytesnumber
resources[].etagstring
resources[].widthnumber
resources[].heightnumber
resources[].durationnumber
resources[].pagesnumber
resources[].is_audioboolean
resources[].original_filenamestring
resources[].tagsarray<string>
resources[].contextobject
resources[].created_atstring
resources[].urlstring
resources[].secure_urlstring
resources[].placeholderboolean
resources[].existingboolean
resources[].processingobject
next_cursorstring
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 resources

GET /cloudinary/v1_1/{library_id}/resources/{asset_id}

ParameterLocationTypeDescription
library_idpathstringLibrary ID
asset_idpathstringAsset ID
prefixquerystringprefix
public_idsquerystring[]Asset public IDs
asset_idsquerystring[]asset ids
asset_folderquerystringOrganizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root
keyquerystringkey
valuequerystringvalue
tagsquerystringAsset 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
contextquerystringCustom text key/value pairs; PATCH replaces the whole map, {} clears it
directionquerystringasc or desc (default); also 1 or -1.
max_resultsqueryintegerUp to 500; Search defaults to 100, Admin to 10
next_cursorquerystringNext-page cursor; null or absent at the end

Returns: CloudinaryResource.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
asset_idstring
public_idstring
display_namestring
asset_folderstring
resource_typestring
typestring
formatstring
versionnumber
version_idstring
bytesnumber
etagstring
widthnumber
heightnumber
durationnumber
pagesnumber
is_audioboolean
original_filenamestring
tagsarray<string>
contextobject
context.customobject
created_atstring
urlstring
secure_urlstring
placeholderboolean
existingboolean
processingobject
processing.statestring
processing.kindsobject
processing.updated_atstring
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 resources

GET /cloudinary/v1_1/{library_id}/resources/by_asset_ids

ParameterLocationTypeDescription
library_idpathstringLibrary ID
prefixquerystringprefix
public_idsquerystring[]Asset public IDs
asset_idsquerystring[]asset ids
asset_folderquerystringOrganizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root
keyquerystringkey
valuequerystringvalue
tagsquerystringAsset 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
contextquerystringCustom text key/value pairs; PATCH replaces the whole map, {} clears it
directionquerystringasc or desc (default); also 1 or -1.
max_resultsqueryintegerUp to 500; Search defaults to 100, Admin to 10
next_cursorquerystringNext-page cursor; null or absent at the end

Returns: ResourcePage.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
resourcesarray<object>
resources[].asset_idstring
resources[].public_idstring
resources[].display_namestring
resources[].asset_folderstring
resources[].resource_typestring
resources[].typestring
resources[].formatstring
resources[].versionnumber
resources[].version_idstring
resources[].bytesnumber
resources[].etagstring
resources[].widthnumber
resources[].heightnumber
resources[].durationnumber
resources[].pagesnumber
resources[].is_audioboolean
resources[].original_filenamestring
resources[].tagsarray<string>
resources[].contextobject
resources[].created_atstring
resources[].urlstring
resources[].secure_urlstring
resources[].placeholderboolean
resources[].existingboolean
resources[].processingobject
next_cursorstring
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 resources

GET /cloudinary/v1_1/{library_id}/resources/by_asset_folder

ParameterLocationTypeDescription
library_idpathstringLibrary ID
prefixquerystringprefix
public_idsquerystring[]Asset public IDs
asset_idsquerystring[]asset ids
asset_folderquerystringOrganizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root
keyquerystringkey
valuequerystringvalue
tagsquerystringAsset 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
contextquerystringCustom text key/value pairs; PATCH replaces the whole map, {} clears it
directionquerystringasc or desc (default); also 1 or -1.
max_resultsqueryintegerUp to 500; Search defaults to 100, Admin to 10
next_cursorquerystringNext-page cursor; null or absent at the end

Returns: ResourcePage.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
resourcesarray<object>
resources[].asset_idstring
resources[].public_idstring
resources[].display_namestring
resources[].asset_folderstring
resources[].resource_typestring
resources[].typestring
resources[].formatstring
resources[].versionnumber
resources[].version_idstring
resources[].bytesnumber
resources[].etagstring
resources[].widthnumber
resources[].heightnumber
resources[].durationnumber
resources[].pagesnumber
resources[].is_audioboolean
resources[].original_filenamestring
resources[].tagsarray<string>
resources[].contextobject
resources[].created_atstring
resources[].urlstring
resources[].secure_urlstring
resources[].placeholderboolean
resources[].existingboolean
resources[].processingobject
next_cursorstring
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 resources

GET /cloudinary/v1_1/{library_id}/resources/{resource_type}/tags/{tag}

ParameterLocationTypeDescription
library_idpathstringLibrary ID
resource_typepathimage / video / rawimage, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400
tagpathstringTag name
prefixquerystringprefix
public_idsquerystring[]Asset public IDs
asset_idsquerystring[]asset ids
asset_folderquerystringOrganizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root
keyquerystringkey
valuequerystringvalue
tagsquerystringAsset 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
contextquerystringCustom text key/value pairs; PATCH replaces the whole map, {} clears it
directionquerystringasc or desc (default); also 1 or -1.
max_resultsqueryintegerUp to 500; Search defaults to 100, Admin to 10
next_cursorquerystringNext-page cursor; null or absent at the end

Returns: ResourcePage.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
resourcesarray<object>
resources[].asset_idstring
resources[].public_idstring
resources[].display_namestring
resources[].asset_folderstring
resources[].resource_typestring
resources[].typestring
resources[].formatstring
resources[].versionnumber
resources[].version_idstring
resources[].bytesnumber
resources[].etagstring
resources[].widthnumber
resources[].heightnumber
resources[].durationnumber
resources[].pagesnumber
resources[].is_audioboolean
resources[].original_filenamestring
resources[].tagsarray<string>
resources[].contextobject
resources[].created_atstring
resources[].urlstring
resources[].secure_urlstring
resources[].placeholderboolean
resources[].existingboolean
resources[].processingobject
next_cursorstring
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 resources

GET /cloudinary/v1_1/{library_id}/resources/{resource_type}/context

ParameterLocationTypeDescription
library_idpathstringLibrary ID
resource_typepathimage / video / rawimage, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400
prefixquerystringprefix
public_idsquerystring[]Asset public IDs
asset_idsquerystring[]asset ids
asset_folderquerystringOrganizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root
keyquerystringkey
valuequerystringvalue
tagsquerystringAsset 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
contextquerystringCustom text key/value pairs; PATCH replaces the whole map, {} clears it
directionquerystringasc or desc (default); also 1 or -1.
max_resultsqueryintegerUp to 500; Search defaults to 100, Admin to 10
next_cursorquerystringNext-page cursor; null or absent at the end

Returns: ResourcePage.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
resourcesarray<object>
resources[].asset_idstring
resources[].public_idstring
resources[].display_namestring
resources[].asset_folderstring
resources[].resource_typestring
resources[].typestring
resources[].formatstring
resources[].versionnumber
resources[].version_idstring
resources[].bytesnumber
resources[].etagstring
resources[].widthnumber
resources[].heightnumber
resources[].durationnumber
resources[].pagesnumber
resources[].is_audioboolean
resources[].original_filenamestring
resources[].tagsarray<string>
resources[].contextobject
resources[].created_atstring
resources[].urlstring
resources[].secure_urlstring
resources[].placeholderboolean
resources[].existingboolean
resources[].processingobject
next_cursorstring
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 resources

GET /cloudinary/v1_1/{library_id}/resources/{resource_type}/upload/{public_id}

ParameterLocationTypeDescription
library_idpathstringLibrary ID
resource_typepathimage / video / rawimage, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400
public_idpathstringAsset name in delivery URLs; may contain path segments
prefixquerystringprefix
public_idsquerystring[]Asset public IDs
asset_idsquerystring[]asset ids
asset_folderquerystringOrganizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root
keyquerystringkey
valuequerystringvalue
tagsquerystringAsset 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
contextquerystringCustom text key/value pairs; PATCH replaces the whole map, {} clears it
directionquerystringasc or desc (default); also 1 or -1.
max_resultsqueryintegerUp to 500; Search defaults to 100, Admin to 10
next_cursorquerystringNext-page cursor; null or absent at the end

Returns: CloudinaryResource.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
asset_idstring
public_idstring
display_namestring
asset_folderstring
resource_typestring
typestring
formatstring
versionnumber
version_idstring
bytesnumber
etagstring
widthnumber
heightnumber
durationnumber
pagesnumber
is_audioboolean
original_filenamestring
tagsarray<string>
contextobject
context.customobject
created_atstring
urlstring
secure_urlstring
placeholderboolean
existingboolean
processingobject
processing.statestring
processing.kindsobject
processing.updated_atstring
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
}

Get resources by IDs

POST /cloudinary/v1_1/{library_id}/resources/by_asset_ids

ParameterLocationTypeDescription
library_idpathstringLibrary ID

Request body

FieldTypeRequiredDescription
asset_idsstring[]yes—
max_resultsintegernoUp to 500; Search defaults to 100, Admin to 10
next_cursorstringnoNext-page cursor; null or absent at the end

Returns: ResourcePage.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
resourcesarray<object>
resources[].asset_idstring
resources[].public_idstring
resources[].display_namestring
resources[].asset_folderstring
resources[].resource_typestring
resources[].typestring
resources[].formatstring
resources[].versionnumber
resources[].version_idstring
resources[].bytesnumber
resources[].etagstring
resources[].widthnumber
resources[].heightnumber
resources[].durationnumber
resources[].pagesnumber
resources[].is_audioboolean
resources[].original_filenamestring
resources[].tagsarray<string>
resources[].contextobject
resources[].created_atstring
resources[].urlstring
resources[].secure_urlstring
resources[].placeholderboolean
resources[].existingboolean
resources[].processingobject
next_cursorstring
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
    }
  ]
}

Update resource

POST /cloudinary/v1_1/{library_id}/resources/{resource_type}/upload/{public_id}

ParameterLocationTypeDescription
library_idpathstringLibrary ID
resource_typepathimage / video / rawimage, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400
public_idpathstringAsset name in delivery URLs; may contain path segments

Request body

FieldTypeRequiredDescription
display_namestringnoDisplay name
asset_folderstringnoOrganizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root
tagsstring[]noAsset 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
contextobjectnoCustom text key/value pairs; PATCH replaces the whole map, {} clears it

Returns: CloudinaryResource.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
asset_idstring
public_idstring
display_namestring
asset_folderstring
resource_typestring
typestring
formatstring
versionnumber
version_idstring
bytesnumber
etagstring
widthnumber
heightnumber
durationnumber
pagesnumber
is_audioboolean
original_filenamestring
tagsarray<string>
contextobject
context.customobject
created_atstring
urlstring
secure_urlstring
placeholderboolean
existingboolean
processingobject
processing.statestring
processing.kindsobject
processing.updated_atstring
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
}

Update resource

PUT /cloudinary/v1_1/{library_id}/resources/{resource_type}/upload/{public_id}

ParameterLocationTypeDescription
library_idpathstringLibrary ID
resource_typepathimage / video / rawimage, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400
public_idpathstringAsset name in delivery URLs; may contain path segments

Request body

FieldTypeRequiredDescription
display_namestringnoDisplay name
asset_folderstringnoOrganizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root
tagsstring[]noAsset 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
contextobjectnoCustom text key/value pairs; PATCH replaces the whole map, {} clears it

Returns: CloudinaryResource.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
asset_idstring
public_idstring
display_namestring
asset_folderstring
resource_typestring
typestring
formatstring
versionnumber
version_idstring
bytesnumber
etagstring
widthnumber
heightnumber
durationnumber
pagesnumber
is_audioboolean
original_filenamestring
tagsarray<string>
contextobject
context.customobject
created_atstring
urlstring
secure_urlstring
placeholderboolean
existingboolean
processingobject
processing.statestring
processing.kindsobject
processing.updated_atstring
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 resources

DELETE /cloudinary/v1_1/{library_id}/resources/{resource_type}/upload

ParameterLocationTypeDescription
library_idpathstringLibrary ID
resource_typepathimage / video / rawimage, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400
public_idsquerystring[]Asset public IDs
prefixquerystringprefix
allquerybooleanall
next_cursorquerystringNext-page cursor; null or absent at the end

Returns: DeletedResources.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
deletedobject
partialboolean
next_cursorstring
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 resources

DELETE /cloudinary/v1_1/{library_id}/resources/{resource_type}/tags/{tag}

ParameterLocationTypeDescription
library_idpathstringLibrary ID
resource_typepathimage / video / rawimage, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400
tagpathstringTag name
public_idsquerystring[]Asset public IDs
prefixquerystringprefix
allquerybooleanall
next_cursorquerystringNext-page cursor; null or absent at the end

Returns: DeletedResources.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
deletedobject
partialboolean
next_cursorstring
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
}

List tags

GET /cloudinary/v1_1/{library_id}/tags/{resource_type}

ParameterLocationTypeDescription
library_idpathstringLibrary ID
resource_typepathimage / video / rawimage, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400
prefixquerystringprefix
max_resultsqueryintegerUp to 500; Search defaults to 100, Admin to 10
next_cursorquerystringNext-page cursor; null or absent at the end

Returns: Tags.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
tagsarray<string>
next_cursorstring
curl -X GET "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/tags/image" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

HTTP 200

{
  "tags": [
    "docs"
  ]
}

List folders

GET /cloudinary/v1_1/{library_id}/folders

ParameterLocationTypeDescription
library_idpathstringLibrary ID
max_resultsqueryintegerUp to 500; Search defaults to 100, Admin to 10
next_cursorquerystringNext-page cursor; null or absent at the end

Returns: CompatFolders.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
foldersarray<object>
folders[].namestring
folders[].pathstring
total_countnumber
next_cursorstring
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
}

List folders

GET /cloudinary/v1_1/{library_id}/folders/{folder}

ParameterLocationTypeDescription
library_idpathstringLibrary ID
folderpathstringFolder path; may contain slash-separated segments.
max_resultsqueryintegerUp to 500; Search defaults to 100, Admin to 10
next_cursorquerystringNext-page cursor; null or absent at the end

Returns: CompatFolders.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
foldersarray<object>
folders[].namestring
folders[].pathstring
total_countnumber
next_cursorstring
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
}

Create folder

POST /cloudinary/v1_1/{library_id}/folders/{folder}

ParameterLocationTypeDescription
library_idpathstringLibrary ID
folderpathstringFolder path; may contain slash-separated segments.

Returns: FolderResult.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
$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"
}

Rename folder

PUT /cloudinary/v1_1/{library_id}/folders/{folder}

ParameterLocationTypeDescription
library_idpathstringLibrary ID
folderpathstringFolder path; may contain slash-separated segments.

Request body

FieldTypeRequiredDescription
to_folderstringyesDestination folder path

Returns: FolderResult.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
$object

Delete folder

DELETE /cloudinary/v1_1/{library_id}/folders/{folder}

ParameterLocationTypeDescription
library_idpathstringLibrary ID
folderpathstringFolder path; may contain slash-separated segments.

Returns: FolderResult.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
$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"
}

Ping

GET /cloudinary/v1_1/{library_id}/ping

ParameterLocationTypeDescription
library_idpathstringLibrary ID

Returns: Ping.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
statusstring
curl -X GET "https://api.deepraxis.ai/cloudinary/v1_1/${LIBRARY_ID}/ping" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

HTTP 200

{
  "status": "ok"
}

Usage

GET /cloudinary/v1_1/{library_id}/usage

ParameterLocationTypeDescription
library_idpathstringLibrary ID

Returns: Usage.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
storageobject
storage.usagenumber
objectsobject
objects.usagenumber
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
  }
}

Usage

GET /cloudinary/v1_1/{library_id}/usage/{date}

ParameterLocationTypeDescription
library_idpathstringLibrary ID
datepathstringAccepted date segment; returns current library totals, not historical usage.

Returns: Usage.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
storageobject
storage.usagenumber
objectsobject
objects.usagenumber
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
  }
}

ResourcePage

FieldTypeRequiredDescription
resourcesSearchResource[]yesAssets in this page
next_cursorstringnoNext-page cursor; null or absent at the end

CloudinaryResource

FieldTypeRequiredDescription
asset_idAssetIdyesAsset ID
public_idstringyesAsset name in delivery URLs; may contain path segments
display_namestringyesDisplay name
asset_folderstringyesOrganizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root
resource_typeResourceTypeyesimage, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400
typeDeliveryTypeyesResource or event type
formatstringyesFile format
versionnumberyesDelivery version
version_idstringyesVersion identifier
bytesnumberyesFile size in bytes
etagstringyesFile checksum
widthnumbernoWidth in pixels
heightnumbernoHeight in pixels
durationnumbernoDuration in seconds
pagesnumbernoDocument pages
is_audiobooleannoWhether this is audio
original_filenamestringnoOriginal file name
tagsstring[]yesAsset 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
contextobjectnoCustom text key/value pairs; PATCH replaces the whole map, {} clears it
created_atIsoTimestampyesCreation time
urlstringyesOriginal-file URL
secure_urlstringyesHTTPS delivery URL
placeholderfalseyesAlways false
existingbooleannoWhether an existing asset was returned without overwrite
processingProcessingnoOverall and per-kind processing states

DeletedResources

FieldTypeRequiredDescription
deletedobjectyesDeletion result
partialbooleanyesWhether another page remains
next_cursorstringnoNext-page cursor; null or absent at the end

Tags

FieldTypeRequiredDescription
tagsstring[]yesAsset 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_cursorstringnoNext-page cursor; null or absent at the end

CompatFolders

FieldTypeRequiredDescription
foldersobject[]yesFolders
total_countnumberyesMatching count
next_cursorstringnoNext-page cursor; null or absent at the end

FolderResult

FieldTypeRequiredDescription

Ping

FieldTypeRequiredDescription
status"ok"yesResource status

Usage

FieldTypeRequiredDescription
storageobjectyesStorage usage in bytes
objectsobjectyesAsset count

Search

Guide →

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.

SyntaxMeaning
AND / OR / NOT / - / ( )Boolean combinations; adjacent terms imply AND
field:value / field=valueField match
bytes > 1000 / width >= 160Numeric comparisons; also height and duration
created_at >= 2026-01-01 / uploaded_at > 7dDates 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
sunsetBare word: full-text match over public_id, display_name, tags, context, and understood captions, image text, and transcripts; case-insensitive
~ / ^ / [a TO z] / prefix / abUnsupported; 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 →

Base URL and authentication

GET /cloudinary/v1_1/{library_id}/resources/visual_search

ParameterLocationTypeDescription
library_idpathstringLibrary ID
image_asset_idquerystringAsset ID in this library
image_urlquerystringOnly delivery URLs from this library; external URLs are not fetched
textquerystringNatural-language query using semantic search
max_resultsqueryintegerUp to 500; Search defaults to 100, Admin to 10
filterquerystringExpression 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”.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
resourcesarray<object>
resources[].asset_idstring
resources[].public_idstring
resources[].display_namestring
resources[].asset_folderstring
resources[].resource_typestring
resources[].typestring
resources[].formatstring
resources[].versionnumber
resources[].version_idstring
resources[].bytesnumber
resources[].etagstring
resources[].widthnumber
resources[].heightnumber
resources[].durationnumber
resources[].pagesnumber
resources[].is_audioboolean
resources[].original_filenamestring
resources[].tagsarray<string>
resources[].contextobject
resources[].created_atstring
resources[].urlstring
resources[].secure_urlstring
resources[].placeholderboolean
resources[].existingboolean
resources[].processingobject

Visual search

POST /cloudinary/v1_1/{library_id}/resources/visual_search

ParameterLocationTypeDescription
library_idpathstringLibrary ID

Request body

FieldTypeRequiredDescription
image_asset_idstringnoAsset ID in this library
image_urlstringnoOnly delivery URLs from this library; external URLs are not fetched
image_filestringnoJPEG, PNG, WebP or GIF file, at most 10 MiB
textstringnoNatural-language query using semantic search
max_resultsintegernoUp to 500; Search defaults to 100, Admin to 10
filterstringnoExpression 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”.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
resourcesarray<object>
resources[].asset_idstring
resources[].public_idstring
resources[].display_namestring
resources[].asset_folderstring
resources[].resource_typestring
resources[].typestring
resources[].formatstring
resources[].versionnumber
resources[].version_idstring
resources[].bytesnumber
resources[].etagstring
resources[].widthnumber
resources[].heightnumber
resources[].durationnumber
resources[].pagesnumber
resources[].is_audioboolean
resources[].original_filenamestring
resources[].tagsarray<string>
resources[].contextobject
resources[].created_atstring
resources[].urlstring
resources[].secure_urlstring
resources[].placeholderboolean
resources[].existingboolean
resources[].processingobject

GET /cloudinary/v1_1/{library_id}/resources/search

ParameterLocationTypeDescription
library_idpathstringLibrary ID
expressionquerystringStructured query expression; an empty expression returns every asset
sort_byquerystringSort fields and directions
max_resultsqueryintegerUp to 500; Search defaults to 100, Admin to 10
next_cursorquerystringNext-page cursor; null or absent at the end
with_fieldquerystring[]Include tags or context
aggregatequerystring[]Aggregation fields

Returns: CompatExpressionSearchResult.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
total_countnumber
timenumber
next_cursorstring
resourcesarray<object>
resources[].asset_idstring
resources[].public_idstring
resources[].display_namestring
resources[].asset_folderstring
resources[].resource_typestring
resources[].typestring
resources[].formatstring
resources[].versionnumber
resources[].version_idstring
resources[].bytesnumber
resources[].etagstring
resources[].widthnumber
resources[].heightnumber
resources[].durationnumber
resources[].pagesnumber
resources[].is_audioboolean
resources[].original_filenamestring
resources[].tagsarray<string>
resources[].contextobject
resources[].created_atstring
resources[].urlstring
resources[].secure_urlstring
resources[].placeholderboolean
resources[].existingboolean
resources[].processingobject
aggregationsobject
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
    }
  ]
}

Search

POST /cloudinary/v1_1/{library_id}/resources/search

ParameterLocationTypeDescription
library_idpathstringLibrary ID

Request body

FieldTypeRequiredDescription
expressionstringnoStructured query expression; an empty expression returns every asset
sort_byobject[]noSort fields and directions
max_resultsintegernoUp to 500; Search defaults to 100, Admin to 10
next_cursorstringnoNext-page cursor; null or absent at the end
with_field"tags" / "context"[]noInclude tags or context
aggregateAggregateField[]noAggregation fields

Returns: CompatExpressionSearchResult.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
total_countnumber
timenumber
next_cursorstring
resourcesarray<object>
resources[].asset_idstring
resources[].public_idstring
resources[].display_namestring
resources[].asset_folderstring
resources[].resource_typestring
resources[].typestring
resources[].formatstring
resources[].versionnumber
resources[].version_idstring
resources[].bytesnumber
resources[].etagstring
resources[].widthnumber
resources[].heightnumber
resources[].durationnumber
resources[].pagesnumber
resources[].is_audioboolean
resources[].original_filenamestring
resources[].tagsarray<string>
resources[].contextobject
resources[].created_atstring
resources[].urlstring
resources[].secure_urlstring
resources[].placeholderboolean
resources[].existingboolean
resources[].processingobject
aggregationsobject
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
    }
  ]
}

VisualResources

FieldTypeRequiredDescription
resourcesCloudinaryResource[]yesAssets in this page

CompatExpressionSearchResult

FieldTypeRequiredDescription
total_countnumberyesMatching count
timenumberyesSearch time in whole milliseconds, measured by the service
next_cursorstringnoNext-page cursor; null or absent at the end
resourcesSearchResource[]yesAssets in this page
aggregationsobjectnoCounts by requested fields

SearchResource

FieldTypeRequiredDescription
asset_idAssetIdyesAsset ID
public_idstringyesAsset name in delivery URLs; may contain path segments
display_namestringyesDisplay name
asset_folderstringyesOrganizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root
resource_typeResourceTypeyesimage, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400
typeDeliveryTypeyesResource or event type
formatstringyesFile format
versionnumberyesDelivery version
version_idstringyesVersion identifier
bytesnumberyesFile size in bytes
etagstringyesFile checksum
widthnumbernoWidth in pixels
heightnumbernoHeight in pixels
durationnumbernoDuration in seconds
pagesnumbernoDocument pages
is_audiobooleannoWhether this is audio
original_filenamestringnoOriginal file name
tagsstring[]noAsset 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
contextobjectnoCustom text key/value pairs; PATCH replaces the whole map, {} clears it
created_atIsoTimestampyesCreation time
urlstringyesOriginal-file URL
secure_urlstringyesHTTPS delivery URL
placeholderfalseyesAlways false
existingbooleannoWhether an existing asset was returned without overwrite
processingProcessingnoOverall and per-kind processing states

Delivery and transformations

Guide →

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.

ParameterAllowed 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_2

User-content safety

Delivery 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.

  • Only GET and HEAD are allowed; other methods return 405.
  • Cookies and credentials are not forwarded upstream, and Set-Cookie is removed from responses.
  • Every response includes X-Content-Type-Options: nosniff.
  • HTML, SVG, XML, and JavaScript content includes Content-Security-Policy: sandbox and Content-Disposition: attachment.
  • Range requests are supported, with 206 for partial content.