Media API

2026-10-22

Media API

Access libraries with an API Key as a Bearer credential.

https://api.deepraxis.ai/media/v1

Guide →

ResourceReference
LibrariesLibraries
AssetsAssets
UnderstandingsUnderstandings
SearchSearch
FoldersFolders
BatchesBatches
EventsEvents

Error codes

Libraries

Guide →

Base URL and authentication

Create library

POST /media/v1/libraries

Request body

FieldTypeRequiredDescription
modelsMediaModelsInputnoModel call IDs by role; partial updates, null restores defaults
namestringyesName, 1–64 characters; duplicates are allowed
labelsobjectnoLabels object; JSON-encode for GET. PATCH replaces the whole object; {} clears it
understandingobjectnoVisual, transcript, and semantic understanding settings

Returns: Library.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
searchobjectSearch capabilities of this library’s embedding model.
search.imagebooleanWhether this library’s embedding model supports image-based visual search.
modelsobjectResolved model call IDs used for new uploads and reprocessing.
models.visionstringModel call ID for visual descriptions; the model must support image input.
models.embeddingstringModel call ID for search embeddings; must produce compatible vectors and cannot change while assets exist.
models.transcriptionstringModel call ID for speech transcription.
idstringGenerated library identifier: lib_ followed by 32 lowercase hexadecimal characters.
namestringDisplay name of the library; duplicate names are allowed.
labelsobjectCaller-defined string labels used to organize and filter libraries.
statusstringLibrary lifecycle: provisioning initializes the library; active permits asset operations; deleting awaits purge and may be restored before purge_at; deleted has been purged; failed indicates initialization failure.
asset_countnumberNumber of assets currently stored in the library.
bytesnumberTotal source-content size of the library’s assets, in bytes.
understandingobjectSettings controlling understanding tasks for new uploads.
understanding.visualbooleanEnable captions, tags and OCR for images and video frames.
understanding.transcriptbooleanEnable speech transcription for audio and video soundtracks.
understanding.embeddingbooleanEnable generation of vectors for semantic search.
created_atstringTime the library was created, in UTC.
updated_atstringTime library settings, lifecycle or usage were last updated, in UTC.
deleted_atstring | nullTime the library entered deleting, or null when active or restored.
purge_atstring | nullScheduled purge time while the library is deleting; null for an active or restored library.
curl -X POST "https://api.deepraxis.ai/media/v1/libraries" \
  -H "Authorization: Bearer $PRAXIS_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"name":"walk-lib-r1-MDP-1791733789929","labels":{"sample":"walk-lib-r1-MDP-1791733789929"}}'

HTTP 200

{
  "id": "lib_d3881a2f54a34cd79121b9d659e8378c",
  "name": "walk-lib-r1-MDP-1791733789929",
  "labels": {
    "sample": "walk-lib-r1-MDP-1791733789929"
  },
  "status": "active",
  "asset_count": 0,
  "bytes": 0,
  "models": {
    "vision": "qwen3.8-flash",
    "embedding": "qwen3-vl-embedding",
    "transcription": "whisper-large-v3-turbo"
  },
  "search": {
    "image": true
  },
  "understanding": {
    "visual": true,
    "transcript": true,
    "embedding": true
  },
  "created_at": "2026-10-11T15:50:04.230Z",
  "updated_at": "2026-10-11T15:50:04.931Z",
  "deleted_at": null,
  "purge_at": null
}

List libraries

GET /media/v1/libraries

ParameterLocationTypeDescription
cursorquerystringPrevious next_cursor
limitqueryinteger1–200 items per page, default 50
labelsquerystringLabels object; JSON-encode for GET. PATCH replaces the whole object; {} clears it
statusqueryactive / deletingResource status

Returns: LibraryPage.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
dataarray<object>Libraries in this page, ordered by creation time descending.
data[].searchobjectSearch capabilities of this library’s embedding model.
data[].modelsobjectResolved model call IDs used for new uploads and reprocessing.
data[].idstringGenerated library identifier: lib_ followed by 32 lowercase hexadecimal characters.
data[].namestringDisplay name of the library; duplicate names are allowed.
data[].labelsobjectCaller-defined string labels used to organize and filter libraries.
data[].statusstringLibrary lifecycle: provisioning initializes the library; active permits asset operations; deleting awaits purge and may be restored before purge_at; deleted has been purged; failed indicates initialization failure.
data[].asset_countnumberNumber of assets currently stored in the library.
data[].bytesnumberTotal source-content size of the library’s assets, in bytes.
data[].understandingobjectSettings controlling understanding tasks for new uploads.
data[].created_atstringTime the library was created, in UTC.
data[].updated_atstringTime library settings, lifecycle or usage were last updated, in UTC.
data[].deleted_atstring | nullTime the library entered deleting, or null when active or restored.
data[].purge_atstring | nullScheduled purge time while the library is deleting; null for an active or restored library.
next_cursorstring | nullOpaque token to pass as cursor to listLibraries; null means no further page.
curl -X GET "https://api.deepraxis.ai/media/v1/libraries?labels=%7B%22sample%22%3A%22walk-lib-r1-MDP-1791733789929%22%7D" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

HTTP 200

{
  "data": [
    {
      "id": "lib_d3881a2f54a34cd79121b9d659e8378c",
      "name": "walk-lib-r1-MDP-1791733789929",
      "status": "active",
      "asset_count": 0,
      "bytes": 0,
      "created_at": "2026-10-11T15:50:04.230Z",
      "updated_at": "2026-10-11T15:50:04.931Z",
      "deleted_at": null,
      "purge_at": null,
      "search": {
        "image": true
      },
      "models": {
        "vision": "qwen3.8-flash",
        "embedding": "qwen3-vl-embedding",
        "transcription": "whisper-large-v3-turbo"
      },
      "labels": {
        "sample": "walk-lib-r1-MDP-1791733789929"
      },
      "understanding": {
        "visual": true,
        "transcript": true,
        "embedding": true
      }
    }
  ],
  "next_cursor": null
}

Get library

GET /media/v1/libraries/{library_id}

ParameterLocationTypeDescription
library_idpathstringLibrary ID

Returns: Library.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
searchobjectSearch capabilities of this library’s embedding model.
search.imagebooleanWhether this library’s embedding model supports image-based visual search.
modelsobjectResolved model call IDs used for new uploads and reprocessing.
models.visionstringModel call ID for visual descriptions; the model must support image input.
models.embeddingstringModel call ID for search embeddings; must produce compatible vectors and cannot change while assets exist.
models.transcriptionstringModel call ID for speech transcription.
idstringGenerated library identifier: lib_ followed by 32 lowercase hexadecimal characters.
namestringDisplay name of the library; duplicate names are allowed.
labelsobjectCaller-defined string labels used to organize and filter libraries.
statusstringLibrary lifecycle: provisioning initializes the library; active permits asset operations; deleting awaits purge and may be restored before purge_at; deleted has been purged; failed indicates initialization failure.
asset_countnumberNumber of assets currently stored in the library.
bytesnumberTotal source-content size of the library’s assets, in bytes.
understandingobjectSettings controlling understanding tasks for new uploads.
understanding.visualbooleanEnable captions, tags and OCR for images and video frames.
understanding.transcriptbooleanEnable speech transcription for audio and video soundtracks.
understanding.embeddingbooleanEnable generation of vectors for semantic search.
created_atstringTime the library was created, in UTC.
updated_atstringTime library settings, lifecycle or usage were last updated, in UTC.
deleted_atstring | nullTime the library entered deleting, or null when active or restored.
purge_atstring | nullScheduled purge time while the library is deleting; null for an active or restored library.
curl -X GET "https://api.deepraxis.ai/media/v1/libraries/${LIBRARY_ID}" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

HTTP 200

{
  "id": "lib_d3881a2f54a34cd79121b9d659e8378c",
  "name": "walk-lib-r1-MDP-1791733789929",
  "status": "active",
  "asset_count": 0,
  "bytes": 0,
  "created_at": "2026-10-11T15:50:04.230Z",
  "updated_at": "2026-10-11T15:50:04.931Z",
  "deleted_at": null,
  "purge_at": null,
  "search": {
    "image": true
  },
  "models": {
    "vision": "qwen3.8-flash",
    "embedding": "qwen3-vl-embedding",
    "transcription": "whisper-large-v3-turbo"
  },
  "labels": {
    "sample": "walk-lib-r1-MDP-1791733789929"
  },
  "understanding": {
    "visual": true,
    "transcript": true,
    "embedding": true
  }
}

Update library

PATCH /media/v1/libraries/{library_id}

ParameterLocationTypeDescription
library_idpathstringLibrary ID

Request body

FieldTypeRequiredDescription
modelsMediaModelsInputnoModel call IDs by role; partial updates, null restores defaults
namestringnoName, 1–64 characters; duplicates are allowed
labelsobjectnoLabels object; JSON-encode for GET. PATCH replaces the whole object; {} clears it
understandingobjectnoVisual, transcript, and semantic understanding settings

Returns: Library.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
searchobjectSearch capabilities of this library’s embedding model.
search.imagebooleanWhether this library’s embedding model supports image-based visual search.
modelsobjectResolved model call IDs used for new uploads and reprocessing.
models.visionstringModel call ID for visual descriptions; the model must support image input.
models.embeddingstringModel call ID for search embeddings; must produce compatible vectors and cannot change while assets exist.
models.transcriptionstringModel call ID for speech transcription.
idstringGenerated library identifier: lib_ followed by 32 lowercase hexadecimal characters.
namestringDisplay name of the library; duplicate names are allowed.
labelsobjectCaller-defined string labels used to organize and filter libraries.
statusstringLibrary lifecycle: provisioning initializes the library; active permits asset operations; deleting awaits purge and may be restored before purge_at; deleted has been purged; failed indicates initialization failure.
asset_countnumberNumber of assets currently stored in the library.
bytesnumberTotal source-content size of the library’s assets, in bytes.
understandingobjectSettings controlling understanding tasks for new uploads.
understanding.visualbooleanEnable captions, tags and OCR for images and video frames.
understanding.transcriptbooleanEnable speech transcription for audio and video soundtracks.
understanding.embeddingbooleanEnable generation of vectors for semantic search.
created_atstringTime the library was created, in UTC.
updated_atstringTime library settings, lifecycle or usage were last updated, in UTC.
deleted_atstring | nullTime the library entered deleting, or null when active or restored.
purge_atstring | nullScheduled purge time while the library is deleting; null for an active or restored library.
curl -X PATCH "https://api.deepraxis.ai/media/v1/libraries/${LIBRARY_ID}" \
  -H "Authorization: Bearer $PRAXIS_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"name":"walk-lib-r1-MDP-1791733789929-updated"}'

HTTP 200

{
  "id": "lib_d3881a2f54a34cd79121b9d659e8378c",
  "name": "walk-lib-r1-MDP-1791733789929-updated",
  "status": "active",
  "asset_count": 0,
  "bytes": 0,
  "created_at": "2026-10-11T15:50:04.230Z",
  "updated_at": "2026-10-11T15:50:07.147Z",
  "deleted_at": null,
  "purge_at": null,
  "search": {
    "image": true
  },
  "models": {
    "vision": "qwen3.8-flash",
    "embedding": "qwen3-vl-embedding",
    "transcription": "whisper-large-v3-turbo"
  },
  "labels": {
    "sample": "walk-lib-r1-MDP-1791733789929"
  },
  "understanding": {
    "visual": true,
    "transcript": true,
    "embedding": true
  }
}

Delete library

DELETE /media/v1/libraries/{library_id}

ParameterLocationTypeDescription
library_idpathstringLibrary ID

Returns: Library.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
searchobjectSearch capabilities of this library’s embedding model.
search.imagebooleanWhether this library’s embedding model supports image-based visual search.
modelsobjectResolved model call IDs used for new uploads and reprocessing.
models.visionstringModel call ID for visual descriptions; the model must support image input.
models.embeddingstringModel call ID for search embeddings; must produce compatible vectors and cannot change while assets exist.
models.transcriptionstringModel call ID for speech transcription.
idstringGenerated library identifier: lib_ followed by 32 lowercase hexadecimal characters.
namestringDisplay name of the library; duplicate names are allowed.
labelsobjectCaller-defined string labels used to organize and filter libraries.
statusstringLibrary lifecycle: provisioning initializes the library; active permits asset operations; deleting awaits purge and may be restored before purge_at; deleted has been purged; failed indicates initialization failure.
asset_countnumberNumber of assets currently stored in the library.
bytesnumberTotal source-content size of the library’s assets, in bytes.
understandingobjectSettings controlling understanding tasks for new uploads.
understanding.visualbooleanEnable captions, tags and OCR for images and video frames.
understanding.transcriptbooleanEnable speech transcription for audio and video soundtracks.
understanding.embeddingbooleanEnable generation of vectors for semantic search.
created_atstringTime the library was created, in UTC.
updated_atstringTime library settings, lifecycle or usage were last updated, in UTC.
deleted_atstring | nullTime the library entered deleting, or null when active or restored.
purge_atstring | nullScheduled purge time while the library is deleting; null for an active or restored library.
curl -X DELETE "https://api.deepraxis.ai/media/v1/libraries/${LIBRARY_ID}" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

HTTP 200

{
  "id": "lib_d3881a2f54a34cd79121b9d659e8378c",
  "name": "walk-lib-r1-MDP-1791733789929-updated",
  "status": "deleting",
  "asset_count": 2,
  "bytes": 140,
  "created_at": "2026-10-11T15:50:04.230Z",
  "updated_at": "2026-10-11T15:50:30.664Z",
  "deleted_at": "2026-10-11T15:50:30.664Z",
  "purge_at": "2026-10-18T15:50:30.664Z",
  "search": {
    "image": true
  },
  "models": {
    "vision": "qwen3.8-flash",
    "embedding": "qwen3-vl-embedding",
    "transcription": "whisper-large-v3-turbo"
  },
  "labels": {
    "sample": "walk-lib-r1-MDP-1791733789929"
  },
  "understanding": {
    "visual": true,
    "transcript": true,
    "embedding": true
  }
}

Restore library

POST /media/v1/libraries/{library_id}/restore

ParameterLocationTypeDescription
library_idpathstringLibrary ID

Returns: Library.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
searchobjectSearch capabilities of this library’s embedding model.
search.imagebooleanWhether this library’s embedding model supports image-based visual search.
modelsobjectResolved model call IDs used for new uploads and reprocessing.
models.visionstringModel call ID for visual descriptions; the model must support image input.
models.embeddingstringModel call ID for search embeddings; must produce compatible vectors and cannot change while assets exist.
models.transcriptionstringModel call ID for speech transcription.
idstringGenerated library identifier: lib_ followed by 32 lowercase hexadecimal characters.
namestringDisplay name of the library; duplicate names are allowed.
labelsobjectCaller-defined string labels used to organize and filter libraries.
statusstringLibrary lifecycle: provisioning initializes the library; active permits asset operations; deleting awaits purge and may be restored before purge_at; deleted has been purged; failed indicates initialization failure.
asset_countnumberNumber of assets currently stored in the library.
bytesnumberTotal source-content size of the library’s assets, in bytes.
understandingobjectSettings controlling understanding tasks for new uploads.
understanding.visualbooleanEnable captions, tags and OCR for images and video frames.
understanding.transcriptbooleanEnable speech transcription for audio and video soundtracks.
understanding.embeddingbooleanEnable generation of vectors for semantic search.
created_atstringTime the library was created, in UTC.
updated_atstringTime library settings, lifecycle or usage were last updated, in UTC.
deleted_atstring | nullTime the library entered deleting, or null when active or restored.
purge_atstring | nullScheduled purge time while the library is deleting; null for an active or restored library.
curl -X POST "https://api.deepraxis.ai/media/v1/libraries/${LIBRARY_ID}/restore" \
  -H "Authorization: Bearer $PRAXIS_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{}'

HTTP 200

{
  "id": "lib_d3881a2f54a34cd79121b9d659e8378c",
  "name": "walk-lib-r1-MDP-1791733789929-updated",
  "status": "active",
  "asset_count": 2,
  "bytes": 140,
  "created_at": "2026-10-11T15:50:04.230Z",
  "updated_at": "2026-10-11T15:50:31.379Z",
  "deleted_at": null,
  "purge_at": null,
  "search": {
    "image": true
  },
  "models": {
    "vision": "qwen3.8-flash",
    "embedding": "qwen3-vl-embedding",
    "transcription": "whisper-large-v3-turbo"
  },
  "labels": {
    "sample": "walk-lib-r1-MDP-1791733789929"
  },
  "understanding": {
    "visual": true,
    "transcript": true,
    "embedding": true
  }
}

Purge library

POST /media/v1/libraries/{library_id}/purge

ParameterLocationTypeDescription
library_idpathstringLibrary ID

Returns: PurgedLibrary.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
idstringIdentifier of the library that was permanently purged.
objectstringResource discriminator identifying a library receipt.
purgedbooleanTrue when permanent library cleanup has completed.
curl -X POST "https://api.deepraxis.ai/media/v1/libraries/${LIBRARY_ID}/purge" \
  -H "Authorization: Bearer $PRAXIS_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{}'

HTTP 200

{
  "id": "lib_d3881a2f54a34cd79121b9d659e8378c",
  "object": "library",
  "purged": true
}

Library

FieldTypeRequiredDescription
searchobjectyesSearch capabilities; search.image enables visual search
modelsMediaModelsyesModel call IDs by role; partial updates, null restores defaults
idLibraryIdyesResource ID
namestringyesName, 1–64 characters; duplicates are allowed
labelsobjectyesLabels object; JSON-encode for GET. PATCH replaces the whole object; {} clears it
statusLibraryStatusyesResource status
asset_countnumberyesAsset count
bytesnumberyesFile size in bytes
understandingUnderstandingSettingsyesVisual, transcript, and semantic understanding settings
created_atIsoTimestampyesCreation time
updated_atIsoTimestampyesUpdate time
deleted_atIsoTimestamp / nullyesDeletion time; null when not deleted
purge_atIsoTimestamp / nullyesRecovery deadline

LibraryPage

FieldTypeRequiredDescription
dataLibrary[]yesResults in this page
next_cursorstring / nullyesNext-page cursor; null or absent at the end

PurgedLibrary

FieldTypeRequiredDescription
idLibraryIdyesResource ID
object"library"yes—
purgedtrueyes—

Page

FieldTypeRequiredDescription
dataJSON[]yesResults in this page
next_cursorstring / nullyesNext-page cursor; null or absent at the end

UnderstandingSettings

FieldTypeRequiredDescription
visualbooleanyesEnable visual understanding
transcriptbooleanyesEnable transcription
embeddingbooleanyesEnable semantic understanding

Model roles

models selects a model call ID (callModelId) for each of three roles. Creating a library without it uses the defaults below. Updates change only the supplied roles; omitted roles remain unchanged. Set a role to null to restore its default, or set models: null to restore all defaults.

RolePurposeDefault
visionVisual understanding of images and video framesqwen3.8-flash
embeddingEmbed content and search queries for semantic retrievalqwen3-vl-embedding
transcriptionAudio transcriptionwhisper-large-v3-turbo

Writes check supplied model call IDs against the model catalog. A missing model returns 400 INVALID_PARAMS with Model <id> is not available; a catalog lookup failure returns 502 UPSTREAM_FAILED. The vision model must support image input, or the request returns 400 INVALID_PARAMS. Unknown roles, blank IDs, and invalid values also return 400.

Once a library contains assets, changing embedding returns 409 LIBRARY_INVALID_STATE with “库中已有素材时不能更换嵌入模型”. A single vector space must use the same model so that existing asset vectors and query vectors remain comparable. Restoring defaults is subject to the same lock if it changes embedding.

Changes to vision or transcription apply only to newly uploaded or reprocessed assets; existing assets are not automatically processed again. Without kinds, reprocess retries only failed kinds. Explicit kinds force reruns of selected ready, failed, or unsupported kinds and replace their results. For example, pass { kinds: ["visual"] } after changing vision, or { kinds: ["transcript"] } after changing transcription.

This PATCH restores only vision to its default and preserves the other roles:

curl -X PATCH "https://api.deepraxis.ai/media/v1/libraries/${LIBRARY_ID}" \
  -H "Authorization: Bearer $PRAXIS_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"models":{"vision":null}}'

New libraries default to qwen3-vl-embedding with visual search; legacy libraries retain bge-m3. Read-only search.image indicates image-search capability. Other models are checked for 1024-dimensional output; incompatible dimensions return INVALID_PARAMS, while unavailable probes or missing caller identity return UPSTREAM_FAILED.

Assets

Guide →

Base URL and authentication

List assets

GET /media/v1/libraries/{library_id}/assets

ParameterLocationTypeDescription
library_idpathstringLibrary ID
asset_folderquerystringOrganizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root
resource_typequeryimage / video / rawimage, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400
cursorquerystringPrevious next_cursor
limitqueryinteger1–200 items per page, default 50

Returns: AssetPage.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
dataarray<object>Assets in this page, ordered by creation time descending.
data[].asset_idstringGenerated asset identifier: 32 lowercase hexadecimal characters, preserved across overwrites.
data[].public_idstringDelivery identifier unique within this library, used in asset URLs.
data[].display_namestringHuman-readable asset name, independent of its delivery identifier.
data[].asset_folderstringOrganizational folder path; the empty string denotes the root folder.
data[].resource_typestringStored media category: image for images, video for video or audio, and raw for other files. Upload also accepts auto for detection.
data[].typestringPublic asset delivery mode; upload is the only supported value.
data[].formatstringDetected file format used as the delivery URL extension.
data[].versionnumberMonotonically increasing asset version used in delivery URLs; based on upload time in Unix seconds and advanced on overwrite.
data[].version_idstringIdentifier for this asset version, regenerated on overwrite.
data[].bytesnumberSize of the original source content, in bytes.
data[].etagstringMD5 digest of the source bytes, as 32 lowercase hexadecimal characters.
data[].widthnumberSource image or video width in pixels, when known.
data[].heightnumberSource image or video height in pixels, when known.
data[].durationnumberSource audio or video duration in seconds, when known.
data[].pagesnumber
data[].is_audiobooleanTrue for audio-only media, which uses resource_type video.
data[].original_filenamestringOriginal or overridden source filename with its final extension removed.
data[].tagsarray<string>Labels attached to the asset.
data[].contextobjectCustom string metadata; omitted when empty or excluded by the search projection.
data[].created_atstringTime this asset identity was created, in UTC.
data[].urlstringURL for retrieving this version of the asset’s original content.
data[].secure_urlstringHTTPS delivery URL for this asset version; equal to url.
data[].placeholderbooleanFalse because this response represents stored source content.
data[].existingboolean
data[].processingobjectProgress of understanding and embedding tasks for the asset.
data[].library_idstringIdentifier of the library containing this asset.
data[].sha256stringSHA-256 digest of the source bytes, as 64 lowercase hexadecimal characters.
data[].statusstringResource status; active identifies an asset that has not been deleted.
data[].semanticstringSearch-vector status: pending awaits vector generation or reprocessing; ready has searchable vectors; unavailable indicates disabled, unsupported or failed embedding. Existing vectors may still serve searches while reprocessing is pending.
data[].previewobjectGenerated video previews, present once preview generation succeeds.
next_cursorstring | nullOpaque token to pass as cursor to listAssets; null means no further page.
curl -X GET "https://api.deepraxis.ai/media/v1/libraries/${LIBRARY_ID}/assets" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

HTTP 200

{
  "data": [
    {
      "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": "pending",
          "visual": "running",
          "tagging": "running"
        },
        "updated_at": "2026-10-11T15:50:17.571Z"
      },
      "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,
      "library_id": "lib_d3881a2f54a34cd79121b9d659e8378c",
      "sha256": "497790947d4666760ce38f3c00e852c71fdb66cae849bae8e9ede352719e1581",
      "status": "active",
      "semantic": "pending"
    },
    {
      "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,
      "library_id": "lib_d3881a2f54a34cd79121b9d659e8378c",
      "sha256": "497790947d4666760ce38f3c00e852c71fdb66cae849bae8e9ede352719e1581",
      "status": "active",
      "processing": {
        "state": "processing",
        "kinds": {
          "embedding": "pending",
          "visual": "running"
        },
        "updated_at": "2026-10-11T15:50:17.571Z"
      },
      "semantic": "pending"
    }
  ],
  "next_cursor": null
}

Upload asset

POST /media/v1/libraries/{library_id}/assets

ParameterLocationTypeDescription
library_idpathstringLibrary ID
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_typeimage / video / raw / autonoimage, 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_idstringGenerated asset identifier: 32 lowercase hexadecimal characters, preserved across overwrites.
public_idstringDelivery identifier unique within this library, used in asset URLs.
display_namestringHuman-readable asset name, independent of its delivery identifier.
asset_folderstringOrganizational folder path; the empty string denotes the root folder.
resource_typestringStored media category: image for images, video for video or audio, and raw for other files. Upload also accepts auto for detection.
typestringPublic asset delivery mode; upload is the only supported value.
formatstringDetected file format used as the delivery URL extension.
versionnumberMonotonically increasing asset version used in delivery URLs; based on upload time in Unix seconds and advanced on overwrite.
version_idstringIdentifier for this asset version, regenerated on overwrite.
bytesnumberSize of the original source content, in bytes.
etagstringMD5 digest of the source bytes, as 32 lowercase hexadecimal characters.
widthnumberSource image or video width in pixels, when known.
heightnumberSource image or video height in pixels, when known.
durationnumberSource audio or video duration in seconds, when known.
pagesnumber
is_audiobooleanTrue for audio-only media, which uses resource_type video.
original_filenamestringOriginal or overridden source filename with its final extension removed.
tagsarray<string>Labels attached to the asset.
contextobjectCustom string metadata; omitted when empty or excluded by the search projection.
context.customobjectCaller-supplied metadata entries with string values.
created_atstringTime this asset identity was created, in UTC.
urlstringURL for retrieving this version of the asset’s original content.
secure_urlstringHTTPS delivery URL for this asset version; equal to url.
placeholderbooleanFalse because this response represents stored source content.
existingbooleanTrue when overwrite=false returns the asset already stored under the requested public_id.
processingobjectProcessing progress, included when auto_tagging was requested.
processing.statestring
processing.kindsobjectProcessing states by kind. tagging is present when auto_tagging was requested and follows visual understanding.
processing.updated_atstringTime the processing state was last updated, in UTC.
donebooleanFalse while more chunks are needed before the asset is complete. / True when the final chunk has completed the asset upload.
upload_idstringUpload session identifier supplied in X-Unique-Upload-Id; reuse it for subsequent chunks.
curl -X POST "https://api.deepraxis.ai/media/v1/libraries/${LIBRARY_ID}/assets" \
  -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-tagged","tags":["docs"],"auto_tagging":0.6}'

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": "pending",
    "kinds": {
      "visual": "pending",
      "embedding": "pending",
      "tagging": "pending"
    },
    "updated_at": "2026-10-11T15:50:15.996Z"
  },
  "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
}

Import file

POST /media/v1/libraries/{library_id}/assets/import

ParameterLocationTypeDescription
library_idpathstringLibrary ID

Request body

FieldTypeRequiredDescription
file_idstringyesFile ID owned by the same account
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_typeimage / video / raw / autonoimage, video (including audio), or raw; auto applies to uploads only, and listing with auto or any other value returns 400

Returns: Asset.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
asset_idstringGenerated asset identifier: 32 lowercase hexadecimal characters, preserved across overwrites.
public_idstringDelivery identifier unique within this library, used in asset URLs.
display_namestringHuman-readable asset name, independent of its delivery identifier.
asset_folderstringOrganizational folder path; the empty string denotes the root folder.
resource_typestringStored media category: image for images, video for video or audio, and raw for other files. Upload also accepts auto for detection.
typestringPublic asset delivery mode; upload is the only supported value.
formatstringDetected file format used as the delivery URL extension.
versionnumberMonotonically increasing asset version used in delivery URLs; based on upload time in Unix seconds and advanced on overwrite.
version_idstringIdentifier for this asset version, regenerated on overwrite.
bytesnumberSize of the original source content, in bytes.
etagstringMD5 digest of the source bytes, as 32 lowercase hexadecimal characters.
widthnumberSource image or video width in pixels, when known.
heightnumberSource image or video height in pixels, when known.
durationnumberSource audio or video duration in seconds, when known.
pagesnumber
is_audiobooleanTrue for audio-only media, which uses resource_type video.
original_filenamestringOriginal or overridden source filename with its final extension removed.
tagsarray<string>Labels attached to the asset.
contextobjectCustom string metadata; omitted when empty or excluded by the search projection.
context.customobjectCaller-supplied metadata entries with string values.
created_atstringTime this asset identity was created, in UTC.
urlstringURL for retrieving this version of the asset’s original content.
secure_urlstringHTTPS delivery URL for this asset version; equal to url.
placeholderbooleanFalse because this response represents stored source content.
existingboolean
processingobjectProgress of understanding and embedding tasks for the asset.
processing.statestring
processing.kindsobjectProcessing states by kind. tagging is present when auto_tagging was requested and follows visual understanding.
processing.updated_atstringTime the processing state was last updated, in UTC.
library_idstringIdentifier of the library containing this asset.
sha256stringSHA-256 digest of the source bytes, as 64 lowercase hexadecimal characters.
statusstringResource status; active identifies an asset that has not been deleted.
semanticstringSearch-vector status: pending awaits vector generation or reprocessing; ready has searchable vectors; unavailable indicates disabled, unsupported or failed embedding. Existing vectors may still serve searches while reprocessing is pending.
previewobjectGenerated video previews, present once preview generation succeeds.
preview.poster_urlstringDelivery URL of the video’s first-frame poster.
preview.storyboardobjectPreview sprite sheet with tile dimensions and sample spacing.

Get asset

GET /media/v1/libraries/{library_id}/assets/{asset_id}

ParameterLocationTypeDescription
library_idpathstringLibrary ID
asset_idpathstringAsset ID

Returns: Asset.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
asset_idstringGenerated asset identifier: 32 lowercase hexadecimal characters, preserved across overwrites.
public_idstringDelivery identifier unique within this library, used in asset URLs.
display_namestringHuman-readable asset name, independent of its delivery identifier.
asset_folderstringOrganizational folder path; the empty string denotes the root folder.
resource_typestringStored media category: image for images, video for video or audio, and raw for other files. Upload also accepts auto for detection.
typestringPublic asset delivery mode; upload is the only supported value.
formatstringDetected file format used as the delivery URL extension.
versionnumberMonotonically increasing asset version used in delivery URLs; based on upload time in Unix seconds and advanced on overwrite.
version_idstringIdentifier for this asset version, regenerated on overwrite.
bytesnumberSize of the original source content, in bytes.
etagstringMD5 digest of the source bytes, as 32 lowercase hexadecimal characters.
widthnumberSource image or video width in pixels, when known.
heightnumberSource image or video height in pixels, when known.
durationnumberSource audio or video duration in seconds, when known.
pagesnumber
is_audiobooleanTrue for audio-only media, which uses resource_type video.
original_filenamestringOriginal or overridden source filename with its final extension removed.
tagsarray<string>Labels attached to the asset.
contextobjectCustom string metadata; omitted when empty or excluded by the search projection.
context.customobjectCaller-supplied metadata entries with string values.
created_atstringTime this asset identity was created, in UTC.
urlstringURL for retrieving this version of the asset’s original content.
secure_urlstringHTTPS delivery URL for this asset version; equal to url.
placeholderbooleanFalse because this response represents stored source content.
existingboolean
processingobjectProgress of understanding and embedding tasks for the asset.
processing.statestring
processing.kindsobjectProcessing states by kind. tagging is present when auto_tagging was requested and follows visual understanding.
processing.updated_atstringTime the processing state was last updated, in UTC.
library_idstringIdentifier of the library containing this asset.
sha256stringSHA-256 digest of the source bytes, as 64 lowercase hexadecimal characters.
statusstringResource status; active identifies an asset that has not been deleted.
semanticstringSearch-vector status: pending awaits vector generation or reprocessing; ready has searchable vectors; unavailable indicates disabled, unsupported or failed embedding. Existing vectors may still serve searches while reprocessing is pending.
previewobjectGenerated video previews, present once preview generation succeeds.
preview.poster_urlstringDelivery URL of the video’s first-frame poster.
preview.storyboardobjectPreview sprite sheet with tile dimensions and sample spacing.
curl -X GET "https://api.deepraxis.ai/media/v1/libraries/${LIBRARY_ID}/assets/85b7ef616a8b4719a41777a036ebc1d2" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

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,
  "library_id": "lib_d3881a2f54a34cd79121b9d659e8378c",
  "sha256": "497790947d4666760ce38f3c00e852c71fdb66cae849bae8e9ede352719e1581",
  "status": "active",
  "processing": {
    "state": "processing",
    "kinds": {
      "embedding": "pending",
      "visual": "running"
    },
    "updated_at": "2026-10-11T15:50:17.571Z"
  },
  "semantic": "pending"
}

Update asset

PATCH /media/v1/libraries/{library_id}/assets/{asset_id}

ParameterLocationTypeDescription
library_idpathstringLibrary ID
asset_idpathstringAsset ID

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: Asset.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
asset_idstringGenerated asset identifier: 32 lowercase hexadecimal characters, preserved across overwrites.
public_idstringDelivery identifier unique within this library, used in asset URLs.
display_namestringHuman-readable asset name, independent of its delivery identifier.
asset_folderstringOrganizational folder path; the empty string denotes the root folder.
resource_typestringStored media category: image for images, video for video or audio, and raw for other files. Upload also accepts auto for detection.
typestringPublic asset delivery mode; upload is the only supported value.
formatstringDetected file format used as the delivery URL extension.
versionnumberMonotonically increasing asset version used in delivery URLs; based on upload time in Unix seconds and advanced on overwrite.
version_idstringIdentifier for this asset version, regenerated on overwrite.
bytesnumberSize of the original source content, in bytes.
etagstringMD5 digest of the source bytes, as 32 lowercase hexadecimal characters.
widthnumberSource image or video width in pixels, when known.
heightnumberSource image or video height in pixels, when known.
durationnumberSource audio or video duration in seconds, when known.
pagesnumber
is_audiobooleanTrue for audio-only media, which uses resource_type video.
original_filenamestringOriginal or overridden source filename with its final extension removed.
tagsarray<string>Labels attached to the asset.
contextobjectCustom string metadata; omitted when empty or excluded by the search projection.
context.customobjectCaller-supplied metadata entries with string values.
created_atstringTime this asset identity was created, in UTC.
urlstringURL for retrieving this version of the asset’s original content.
secure_urlstringHTTPS delivery URL for this asset version; equal to url.
placeholderbooleanFalse because this response represents stored source content.
existingboolean
processingobjectProgress of understanding and embedding tasks for the asset.
processing.statestring
processing.kindsobjectProcessing states by kind. tagging is present when auto_tagging was requested and follows visual understanding.
processing.updated_atstringTime the processing state was last updated, in UTC.
library_idstringIdentifier of the library containing this asset.
sha256stringSHA-256 digest of the source bytes, as 64 lowercase hexadecimal characters.
statusstringResource status; active identifies an asset that has not been deleted.
semanticstringSearch-vector status: pending awaits vector generation or reprocessing; ready has searchable vectors; unavailable indicates disabled, unsupported or failed embedding. Existing vectors may still serve searches while reprocessing is pending.
previewobjectGenerated video previews, present once preview generation succeeds.
preview.poster_urlstringDelivery URL of the video’s first-frame poster.
preview.storyboardobjectPreview sprite sheet with tile dimensions and sample spacing.
curl -X PATCH "https://api.deepraxis.ai/media/v1/libraries/${LIBRARY_ID}/assets/85b7ef616a8b4719a41777a036ebc1d2" \
  -H "Authorization: Bearer $PRAXIS_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"display_name":"walk-lib-r1-MDP-1791733789929-plain"}'

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,
  "library_id": "lib_d3881a2f54a34cd79121b9d659e8378c",
  "sha256": "497790947d4666760ce38f3c00e852c71fdb66cae849bae8e9ede352719e1581",
  "status": "active",
  "processing": {
    "state": "processing",
    "kinds": {
      "embedding": "pending",
      "visual": "running"
    },
    "updated_at": "2026-10-11T15:50:17.571Z"
  },
  "semantic": "pending"
}

Delete asset

DELETE /media/v1/libraries/{library_id}/assets/{asset_id}

ParameterLocationTypeDescription
library_idpathstringLibrary ID
asset_idpathstringAsset ID

Returns: Deleted.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
deletedbooleanTrue once this asset has been removed from the library.
curl -X DELETE "https://api.deepraxis.ai/media/v1/libraries/${LIBRARY_ID}/assets/e5f3de0d8609482d8b351894b133c8cb" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

HTTP 200

{
  "deleted": true
}

Reprocess asset

POST /media/v1/libraries/{library_id}/assets/{asset_id}/reprocess

ParameterLocationTypeDescription
library_idpathstringLibrary ID
asset_idpathstringAsset ID

Request body

FieldTypeRequiredDescription
kindsProcessingKind[]noProcessing kinds to force rerun; omit to retry only failed kinds

Returns: Asset.

Allowed kinds are visual, frames, transcript, and embedding. Without kinds, only failed tasks for the current asset version are rerun. Explicit kinds force selected ready, failed, or unsupported tasks back to pending for a rerun. Tasks already pending or running are skipped unchanged; repeated requests do not enqueue duplicate work.

Kinds must apply to the asset type: images have visual and embedding; audio has transcript and embedding; video has frames, visual, transcript, and embedding; raw files have none. When no requested kind applies, the request returns 400 INVALID_PARAMS listing the kinds available for that asset. When some apply, only those are processed and the rest are ignored (the returned Asset has no field naming ignored kinds; check processing.kinds).

Rerunning visual, frames, or transcript immediately supersedes the old results and sets embedding and the asset’s semantic state to pending. The previous vectors keep serving semantic search until the new vectors are written, so the asset does not drop out of results while it is reprocessed; matches in that window may show the asset name instead of the old caption. Reads return only current results by default; use include_superseded=true to inspect history. The request returns the updated Asset immediately; processing completes asynchronously.

curl -X POST "https://api.deepraxis.ai/media/v1/libraries/${LIBRARY_ID}/assets/${ASSET_ID}/reprocess" \
  -H "Authorization: Bearer $PRAXIS_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{}'

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
asset_idstringGenerated asset identifier: 32 lowercase hexadecimal characters, preserved across overwrites.
public_idstringDelivery identifier unique within this library, used in asset URLs.
display_namestringHuman-readable asset name, independent of its delivery identifier.
asset_folderstringOrganizational folder path; the empty string denotes the root folder.
resource_typestringStored media category: image for images, video for video or audio, and raw for other files. Upload also accepts auto for detection.
typestringPublic asset delivery mode; upload is the only supported value.
formatstringDetected file format used as the delivery URL extension.
versionnumberMonotonically increasing asset version used in delivery URLs; based on upload time in Unix seconds and advanced on overwrite.
version_idstringIdentifier for this asset version, regenerated on overwrite.
bytesnumberSize of the original source content, in bytes.
etagstringMD5 digest of the source bytes, as 32 lowercase hexadecimal characters.
widthnumberSource image or video width in pixels, when known.
heightnumberSource image or video height in pixels, when known.
durationnumberSource audio or video duration in seconds, when known.
pagesnumber
is_audiobooleanTrue for audio-only media, which uses resource_type video.
original_filenamestringOriginal or overridden source filename with its final extension removed.
tagsarray<string>Labels attached to the asset.
contextobjectCustom string metadata; omitted when empty or excluded by the search projection.
context.customobjectCaller-supplied metadata entries with string values.
created_atstringTime this asset identity was created, in UTC.
urlstringURL for retrieving this version of the asset’s original content.
secure_urlstringHTTPS delivery URL for this asset version; equal to url.
placeholderbooleanFalse because this response represents stored source content.
existingboolean
processingobjectProgress of understanding and embedding tasks for the asset.
processing.statestring
processing.kindsobjectProcessing states by kind. tagging is present when auto_tagging was requested and follows visual understanding.
processing.updated_atstringTime the processing state was last updated, in UTC.
library_idstringIdentifier of the library containing this asset.
sha256stringSHA-256 digest of the source bytes, as 64 lowercase hexadecimal characters.
statusstringResource status; active identifies an asset that has not been deleted.
semanticstringSearch-vector status: pending awaits vector generation or reprocessing; ready has searchable vectors; unavailable indicates disabled, unsupported or failed embedding. Existing vectors may still serve searches while reprocessing is pending.
previewobjectGenerated video previews, present once preview generation succeeds.
preview.poster_urlstringDelivery URL of the video’s first-frame poster.
preview.storyboardobjectPreview sprite sheet with tile dimensions and sample spacing.

AssetPage

FieldTypeRequiredDescription
dataAsset[]yesResults in this page
next_cursorstring / nullyesNext-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

Asset

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
processingProcessingyesOverall and per-kind processing states
library_idLibraryIdyesLibrary ID
sha256stringyesContent checksum
status"active"yesResource status
semantic"pending" / "ready" / "unavailable"yesSearchable semantically when ready
previewobjectnoPreview poster and storyboard

Deleted

FieldTypeRequiredDescription
deletedtrueyesDeletion result

Processing

FieldTypeRequiredDescription
stateProcessingStateyesOverall processing state
kindsobjectyesPer-kind processing states
updated_atIsoTimestampyesUpdate time

Storyboard

FieldTypeRequiredDescription
urlstringyesOriginal-file URL
tilesnumberyesStoryboard tile count
interval_msnumberyesTile interval in milliseconds
tile_widthnumberyesTile width
tile_heightnumberyesTile height

Understandings

Reprocess existing assets

Allowed kinds are visual, frames, transcript, and embedding. Without kinds, only failed tasks for the current asset version are rerun. Explicit kinds force selected ready, failed, or unsupported tasks back to pending for a rerun. Tasks already pending or running are skipped unchanged; repeated requests do not enqueue duplicate work.

Kinds must apply to the asset type: images have visual and embedding; audio has transcript and embedding; video has frames, visual, transcript, and embedding; raw files have none. When no requested kind applies, the request returns 400 INVALID_PARAMS listing the kinds available for that asset. When some apply, only those are processed and the rest are ignored (the returned Asset has no field naming ignored kinds; check processing.kinds).

Rerunning visual, frames, or transcript immediately supersedes the old results and sets embedding and the asset’s semantic state to pending. The previous vectors keep serving semantic search until the new vectors are written, so the asset does not drop out of results while it is reprocessed; matches in that window may show the asset name instead of the old caption. Reads return only current results by default; use include_superseded=true to inspect history. The request returns the updated Asset immediately; processing completes asynchronously.

Transcript hallucination filtering

Transcript segments are normalized by converting full-width characters to half-width, lowercasing, and removing leading and trailing whitespace and punctuation. Segments that become empty or exactly match a known hallucination phrase are discarded. Matching is whole-segment only: “thank you for the report” is retained.

The phrase list includes: thank you; thanks for watching; thank you for watching; please subscribe; subscribe; you; bye; 字幕由amara.org社区提供; 请不吝点赞 订阅 转发 打赏支持明镜与点点栏目; 谢谢观看; 优优独播剧场——yoyo television series exclusive.

Discarded segments do not enter transcript text, keyword indexes, or transcript vectors. If all segments are filtered, the transcript understanding remains ready, content is an empty string, and data is { "filtered_segments": n }, where n counts the discarded segments. No transcript vectors are generated for that asset.

Guide →

Base URL and authentication

List understandings

GET /media/v1/libraries/{library_id}/assets/{asset_id}/understandings

ParameterLocationTypeDescription
library_idpathstringLibrary ID
asset_idpathstringAsset ID
include_supersededquerybooleanInclude superseded results; only true or false
kindquerycaption / tags / ocr / transcript / frameUnderstanding or processing kind; filters the understanding list
cursorquerystringPrevious next_cursor
limitqueryinteger1–200 items per page, default 200

Returns: UnderstandingPage.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
dataarray<object>Understanding results in this page, ordered by creation time ascending.
data[].idstringGenerated identifier of this understanding result.
data[].asset_idstringIdentifier of the asset from which this result was produced.
data[].asset_versionnumberAsset version processed to produce this result; compare with the asset’s current version.
data[].kindstringResult kind: caption is a visual description, tags are recognized labels, ocr is text recognized in the image, transcript is speech text, and frame is a description of a video segment.
data[].producerstringProducer model identifier; a failure may use the configured model when no model response is available.
data[].producer_versionstring
data[].segmentobject | nullSource-media time range for a frame or transcript segment; null for results without a segment.
data[].statusstringResult status: ready contains completed output; failed records an error.
data[].contentstring | nullText output, such as a caption, recognized text or transcript; null for structured-only or failed results.
data[].dataany | nullStructured producer output, such as recognized labels or frame details; null when absent.
data[].confidencenumber | null
data[].errorobject | nullFailure code and message, or null for a successful result.
data[].supersededbooleanWhether a newer result or asset version has replaced this result. Excluded from listing unless include_superseded is true.
data[].created_atstringTime this immutable result was recorded, in UTC.
next_cursorstring | nullOpaque token to pass as cursor to listUnderstandings; null means no further page.
curl -X GET "https://api.deepraxis.ai/media/v1/libraries/${LIBRARY_ID}/assets/9339cdae93804c0c8c65d5189ef1f646/understandings" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

HTTP 200

{
  "data": [],
  "next_cursor": null
}

UnderstandingPage

FieldTypeRequiredDescription
dataUnderstanding[]yesResults in this page
next_cursorstring / nullyesNext-page cursor; null or absent at the end

Understanding

FieldTypeRequiredDescription
idUnderstandingIdyesResource ID
asset_idAssetIdyesAsset ID
asset_versionnumberyesAsset version understood
kindUnderstandingKindyesUnderstanding or processing kind; filters the understanding list
producerstringyesUnderstanding producer
producer_versionstringyesProducer version
segmentSegment / nullyesStart/end milliseconds; null for whole assets
status"ready" / "failed"yesResource status
contentstring / nullyesText content
dataJSON / nullyesResults in this page
confidencenumber / nullyesConfidence; may be null
errorobject / nullyesError code and message; null on success
supersededbooleanyesWhether superseded by a newer version
created_atIsoTimestampyesCreation time

Segment

FieldTypeRequiredDescription
start_msnumberyesSegment start in milliseconds
end_msnumberyesSegment end in milliseconds

Search

expression accepts expressions; semantic and search accept natural language. Semantic search returns ready assets only.

Expression syntax

Guide →

Base URL and authentication

POST /media/v1/libraries/{library_id}/search/expression

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_fieldtags / context[]noInclude tags or context
aggregateAggregateField[]noAggregation fields

Returns: ExpressionSearchResult.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
total_countnumberNumber of matching assets across pages; a lower bound when total_count_exact is false.
timenumberElapsed search time in whole milliseconds.
next_cursorstringContinuation token for the next page; omitted when no further page is available.
resourcesarray<object>Assets in this page, ordered by sort_by; tags and context follow with_field.
resources[].asset_idstringGenerated asset identifier: 32 lowercase hexadecimal characters, preserved across overwrites.
resources[].public_idstringDelivery identifier unique within this library, used in asset URLs.
resources[].display_namestringHuman-readable asset name, independent of its delivery identifier.
resources[].asset_folderstringOrganizational folder path; the empty string denotes the root folder.
resources[].resource_typestringStored media category: image for images, video for video or audio, and raw for other files. Upload also accepts auto for detection.
resources[].typestringPublic asset delivery mode; upload is the only supported value.
resources[].formatstringDetected file format used as the delivery URL extension.
resources[].versionnumberMonotonically increasing asset version used in delivery URLs; based on upload time in Unix seconds and advanced on overwrite.
resources[].version_idstringIdentifier for this asset version, regenerated on overwrite.
resources[].bytesnumberSize of the original source content, in bytes.
resources[].etagstringMD5 digest of the source bytes, as 32 lowercase hexadecimal characters.
resources[].widthnumberSource image or video width in pixels, when known.
resources[].heightnumberSource image or video height in pixels, when known.
resources[].durationnumberSource audio or video duration in seconds, when known.
resources[].pagesnumber
resources[].is_audiobooleanTrue for audio-only media, which uses resource_type video.
resources[].original_filenamestringOriginal or overridden source filename with its final extension removed.
resources[].tagsarray<string>Labels attached to the asset.
resources[].contextobjectCustom string metadata; omitted when empty or excluded by the search projection.
resources[].created_atstringTime this asset identity was created, in UTC.
resources[].urlstringURL for retrieving this version of the asset’s original content.
resources[].secure_urlstringHTTPS delivery URL for this asset version; equal to url.
resources[].placeholderbooleanFalse because this response represents stored source content.
resources[].existingboolean
resources[].processingobjectProgress of understanding and embedding tasks for the asset.
resources[].library_idstringIdentifier of the library containing this asset.
resources[].sha256stringSHA-256 digest of the source bytes, as 64 lowercase hexadecimal characters.
resources[].statusstringResource status; active identifies an asset that has not been deleted.
resources[].semanticstringSearch-vector status: pending awaits vector generation or reprocessing; ready has searchable vectors; unavailable indicates disabled, unsupported or failed embedding. Existing vectors may still serve searches while reprocessing is pending.
resources[].previewobjectGenerated video previews, present once preview generation succeeds.
aggregationsobjectRequested facet counts, keyed by facet name and then by field value.
total_count_exactbooleanWhether total_count covers all matches; false indicates a bounded partial count.
aggregations_exactbooleanWhether the returned facet counts cover all matching assets.
curl -X POST "https://api.deepraxis.ai/media/v1/libraries/${LIBRARY_ID}/search/expression" \
  -H "Authorization: Bearer $PRAXIS_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"expression":"tags:docs"}'

HTTP 200

{
  "total_count": 2,
  "total_count_exact": true,
  "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": "pending",
          "visual": "running",
          "tagging": "running"
        },
        "updated_at": "2026-10-11T15:50:17.571Z"
      },
      "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,
      "library_id": "lib_d3881a2f54a34cd79121b9d659e8378c",
      "sha256": "497790947d4666760ce38f3c00e852c71fdb66cae849bae8e9ede352719e1581",
      "status": "active",
      "semantic": "pending"
    },
    {
      "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,
      "library_id": "lib_d3881a2f54a34cd79121b9d659e8378c",
      "sha256": "497790947d4666760ce38f3c00e852c71fdb66cae849bae8e9ede352719e1581",
      "status": "active",
      "processing": {
        "state": "processing",
        "kinds": {
          "embedding": "pending",
          "visual": "running"
        },
        "updated_at": "2026-10-11T15:50:17.571Z"
      },
      "semantic": "pending"
    }
  ]
}

POST /media/v1/libraries/{library_id}/search/visual

ParameterLocationTypeDescription
library_idpathstringLibrary ID

Request body

FieldTypeRequiredDescription
asset_idAssetIdnoAsset ID
imageobjectnoQuery image object: base64 data and image MIME type
top_kintegernoMaximum hits, 1–50
filterstringnoExpression filter

Returns: SemanticSearchResult.

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 asset_id or image: { data, mime }. Asset queries reuse existing image understanding and exclude the source asset; videos use the first frame. Incomplete understanding returns LIBRARY_INVALID_STATE. Uploaded image data is base64. top_k defaults to 20 and accepts 1–50; filter uses the semantic-search expression syntax. Only image similarity is searched. The response shares semantic search’s hits, embedding_producer and not_ready_excluded fields. matches.kind is image; snippet uses the latest caption or asset name. Deleted assets, old versions and replaced understanding are excluded.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
hitsarray<object>Ranked assets up to top_k; an empty array means no eligible matches were found.
hits[].assetobjectAsset matched by the query.
hits[].scorenumberRanking score: cosine similarity for semantic or visual search; normalized rank-fusion score for hybrid search. Higher values rank first.
hits[].semantic_scorenumber | nullCosine similarity for hybrid hits with a semantic match; null for keyword-only hybrid hits. Omitted outside hybrid mode.
hits[].matchesarray<object>Supporting content or metadata matches contributing to this asset’s hit.
embedding_producerstringEmbedding model identifier used for the query, or for the source asset embedding in an asset-based visual query.
not_ready_excludednumberNumber of distinct candidate asset identifiers, or unresolved vector identifiers, excluded because their vectors or assets were missing, deleted or stale; not a count of all pending assets in the library.

POST /media/v1/libraries/{library_id}/search/semantic

ParameterLocationTypeDescription
library_idpathstringLibrary ID

Request body

FieldTypeRequiredDescription
querystringyesDescribe what you want to find
filterstringnoExpression filter
top_kintegernoMaximum hits, 1–50
modehybrid / semanticnohybrid combines keywords and semantics; semantic uses semantics only

Returns: SemanticSearchResult.

With bge-m3, vector candidates must have cosine similarity ≥ 0.55 before keyword fusion, including newly understood content. Calibration on seven demo assets on 2026-10-09 found relevant results at approximately 0.58 or higher (0.581–0.729), irrelevant results at most 0.523, and wholly unrelated queries at most 0.478. qwen3-vl-embedding text queries use 0.40 against text content (captions, transcripts) and 0.25 against image content. Other models remain uncalibrated and unfiltered. Keyword matches are unaffected. Queries unrelated to the library return an empty list; mode=semantic returns only results meeting the vector threshold.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
hitsarray<object>Ranked assets up to top_k; an empty array means no eligible matches were found.
hits[].assetobjectAsset matched by the query.
hits[].scorenumberRanking score: cosine similarity for semantic or visual search; normalized rank-fusion score for hybrid search. Higher values rank first.
hits[].semantic_scorenumber | nullCosine similarity for hybrid hits with a semantic match; null for keyword-only hybrid hits. Omitted outside hybrid mode.
hits[].matchesarray<object>Supporting content or metadata matches contributing to this asset’s hit.
embedding_producerstringEmbedding model identifier used for the query, or for the source asset embedding in an asset-based visual query.
not_ready_excludednumberNumber of distinct candidate asset identifiers, or unresolved vector identifiers, excluded because their vectors or assets were missing, deleted or stale; not a count of all pending assets in the library.

Semantic search alias

POST /media/v1/libraries/{library_id}/search

ParameterLocationTypeDescription
library_idpathstringLibrary ID

Request body

FieldTypeRequiredDescription
querystringyesDescribe what you want to find
filterstringnoExpression filter
top_kintegernoMaximum hits, 1–50
modehybrid / semanticnohybrid combines keywords and semantics; semantic uses semantics only

Returns: SemanticSearchResult.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
hitsarray<object>Ranked assets up to top_k; an empty array means no eligible matches were found.
hits[].assetobjectAsset matched by the query.
hits[].scorenumberRanking score: cosine similarity for semantic or visual search; normalized rank-fusion score for hybrid search. Higher values rank first.
hits[].semantic_scorenumber | nullCosine similarity for hybrid hits with a semantic match; null for keyword-only hybrid hits. Omitted outside hybrid mode.
hits[].matchesarray<object>Supporting content or metadata matches contributing to this asset’s hit.
embedding_producerstringEmbedding model identifier used for the query, or for the source asset embedding in an asset-based visual query.
not_ready_excludednumberNumber of distinct candidate asset identifiers, or unresolved vector identifiers, excluded because their vectors or assets were missing, deleted or stale; not a count of all pending assets in the library.

ExpressionSearchResult

FieldTypeRequiredDescription
total_countnumberyesMatching count
timenumberyesSearch time in whole milliseconds, measured by the service
next_cursorstringnoNext-page cursor; null or absent at the end
resourcesSearchAsset[]yesAssets in this page
aggregationsobjectnoCounts by requested fields
total_count_exactbooleannoWhether the count is exact
aggregations_exactbooleannoWhether aggregations are exact

SemanticSearchResult

FieldTypeRequiredDescription
hitsSemanticHit[]yesSearch hits
embedding_producerstringyesSemantic understanding producer
not_ready_excludednumberyesAssets excluded because they are not ready

SearchAsset

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
processingProcessingyesOverall and per-kind processing states
library_idLibraryIdyesLibrary ID
sha256stringyesContent checksum
status"active"yesResource status
semantic"pending" / "ready" / "unavailable"yesSearchable semantically when ready
previewobjectnoPreview poster and storyboard

SemanticHit

FieldTypeRequiredDescription
assetAssetyesMatching asset
scorenumberyesRelevance score
semantic_scorenumber / nullno—
matchesSemanticMatch[]yesMatched content and segment times

SemanticMatch

FieldTypeRequiredDescription
kindUnderstandingKind / "metadata" / "image"yesUnderstanding or processing kind; filters the understanding list
understanding_idUnderstandingId / nullyesUnderstanding ID; null for metadata matches
segmentSegment / nullyesStart/end milliseconds; null for whole assets
snippetstringyesMatching text snippet

Folders

Guide →

Base URL and authentication

List folders

GET /media/v1/libraries/{library_id}/folders

ParameterLocationTypeDescription
library_idpathstringLibrary ID
parentquerystringParent folder path; omit or use an empty string for the root. Returns every child folder of that level at once without paging; limit or cursor returns 400

Returns: Folders.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
foldersarray<object>All immediate child folders of parent, sorted by path.
folders[].namestringFinal path segment naming the child folder.
folders[].pathstringFull folder path relative to the library root.
folders[].asset_countnumberNumber of assets in this folder and all descendant folders.
curl -X GET "https://api.deepraxis.ai/media/v1/libraries/${LIBRARY_ID}/folders" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

HTTP 200

{
  "folders": [
    {
      "name": "examples",
      "path": "examples",
      "asset_count": 1
    }
  ]
}

Folders

FieldTypeRequiredDescription
foldersobject[]yesFolders

Batches

Guide →

Base URL and authentication

Create batch

POST /media/v1/libraries/{library_id}/batches

ParameterLocationTypeDescription
library_idpathstringLibrary ID

Request body

FieldTypeRequiredDescription
action"tag" / "untag"yesBatch action
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
FieldTypeRequiredDescription
action"set_context"yesBatch action
contextobjectyesCustom text key/value pairs; PATCH replaces the whole map, {} clears it
FieldTypeRequiredDescription
action"move"yesBatch action
asset_folderstringyesOrganizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root
FieldTypeRequiredDescription
action"delete"yesBatch action
FieldTypeRequiredDescription
selectorBatchSelectoryesSelect by IDs or expression

Returns: Job.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
idstringGenerated batch identifier: job_ followed by 32 lowercase hexadecimal characters.
library_idstringIdentifier of the library in which the batch operates.
actionstringBatch operation: tag adds labels, untag removes labels, set_context replaces custom metadata, move changes asset_folder, and delete removes selected assets.
statusstringJob status: queued awaits execution; running is processing items; completed means all items succeeded; completed_with_errors means some succeeded and some failed; failed means all selected items failed. An empty job completes successfully.
totalnumberNumber of distinct assets selected when the job was created.
donenumberNumber of items successfully processed; failed items are counted separately.
failednumberNumber of items that could not be processed successfully.
failuresarray<object>Always present, including an empty array before any item failure or when all items succeed. At most 20 item failures are returned.
failures[].asset_idstringIdentifier supplied for the failed item; it may identify a missing asset.
failures[].codestringDomain error code explaining the individual item failure.
created_atstringTime the batch job was created, in UTC.
finished_atstring | nullTime the job reached a terminal status, or null while queued or running.
curl -X POST "https://api.deepraxis.ai/media/v1/libraries/${LIBRARY_ID}/batches" \
  -H "Authorization: Bearer $PRAXIS_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"action":"tag","tags":["sample"],"selector":{"ids":["85b7ef616a8b4719a41777a036ebc1d2","00000000000000000000000000000000"]}}'

HTTP 200

{
  "id": "job_b562f087623c4756b43813e3dce670ba",
  "library_id": "lib_d3881a2f54a34cd79121b9d659e8378c",
  "action": "tag",
  "status": "queued",
  "total": 2,
  "done": 0,
  "failed": 0,
  "created_at": "2026-10-11T15:50:24.942Z",
  "failures": [],
  "finished_at": null
}

Get batch

GET /media/v1/libraries/{library_id}/batches/{job_id}

ParameterLocationTypeDescription
library_idpathstringLibrary ID
job_idpathstringJob ID

Returns: Job.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
idstringGenerated batch identifier: job_ followed by 32 lowercase hexadecimal characters.
library_idstringIdentifier of the library in which the batch operates.
actionstringBatch operation: tag adds labels, untag removes labels, set_context replaces custom metadata, move changes asset_folder, and delete removes selected assets.
statusstringJob status: queued awaits execution; running is processing items; completed means all items succeeded; completed_with_errors means some succeeded and some failed; failed means all selected items failed. An empty job completes successfully.
totalnumberNumber of distinct assets selected when the job was created.
donenumberNumber of items successfully processed; failed items are counted separately.
failednumberNumber of items that could not be processed successfully.
failuresarray<object>Always present, including an empty array before any item failure or when all items succeed. At most 20 item failures are returned.
failures[].asset_idstringIdentifier supplied for the failed item; it may identify a missing asset.
failures[].codestringDomain error code explaining the individual item failure.
created_atstringTime the batch job was created, in UTC.
finished_atstring | nullTime the job reached a terminal status, or null while queued or running.
curl -X GET "https://api.deepraxis.ai/media/v1/libraries/${LIBRARY_ID}/batches/job_b562f087623c4756b43813e3dce670ba" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

HTTP 200

{
  "id": "job_b562f087623c4756b43813e3dce670ba",
  "library_id": "lib_d3881a2f54a34cd79121b9d659e8378c",
  "action": "tag",
  "status": "completed_with_errors",
  "total": 2,
  "done": 1,
  "failed": 1,
  "created_at": "2026-10-11T15:50:24.942Z",
  "failures": [
    {
      "asset_id": "00000000000000000000000000000000",
      "code": "ASSET_NOT_FOUND"
    }
  ],
  "finished_at": "2026-10-11T15:50:27.555Z"
}

Batch assets alias

POST /media/v1/libraries/{library_id}/assets:batch

ParameterLocationTypeDescription
library_idpathstringLibrary ID

Request body

FieldTypeRequiredDescription
action"tag" / "untag"yesBatch action
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
FieldTypeRequiredDescription
action"set_context"yesBatch action
contextobjectyesCustom text key/value pairs; PATCH replaces the whole map, {} clears it
FieldTypeRequiredDescription
action"move"yesBatch action
asset_folderstringyesOrganizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root
FieldTypeRequiredDescription
action"delete"yesBatch action
FieldTypeRequiredDescription
selectorBatchSelectoryesSelect by IDs or expression

Returns: Job.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
idstringGenerated batch identifier: job_ followed by 32 lowercase hexadecimal characters.
library_idstringIdentifier of the library in which the batch operates.
actionstringBatch operation: tag adds labels, untag removes labels, set_context replaces custom metadata, move changes asset_folder, and delete removes selected assets.
statusstringJob status: queued awaits execution; running is processing items; completed means all items succeeded; completed_with_errors means some succeeded and some failed; failed means all selected items failed. An empty job completes successfully.
totalnumberNumber of distinct assets selected when the job was created.
donenumberNumber of items successfully processed; failed items are counted separately.
failednumberNumber of items that could not be processed successfully.
failuresarray<object>Always present, including an empty array before any item failure or when all items succeed. At most 20 item failures are returned.
failures[].asset_idstringIdentifier supplied for the failed item; it may identify a missing asset.
failures[].codestringDomain error code explaining the individual item failure.
created_atstringTime the batch job was created, in UTC.
finished_atstring | nullTime the job reached a terminal status, or null while queued or running.
curl -X POST "https://api.deepraxis.ai/media/v1/libraries/${LIBRARY_ID}/assets:batch" \
  -H "Authorization: Bearer $PRAXIS_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"action":"tag","tags":["sample"],"selector":{"ids":["85b7ef616a8b4719a41777a036ebc1d2"]}}'

HTTP 200

{
  "id": "job_3c2fe728de054c7396058c7438b289d2",
  "library_id": "lib_d3881a2f54a34cd79121b9d659e8378c",
  "action": "tag",
  "status": "queued",
  "total": 1,
  "done": 0,
  "failed": 0,
  "created_at": "2026-10-11T15:50:29.266Z",
  "failures": [],
  "finished_at": null
}

Get job alias

GET /media/v1/libraries/{library_id}/jobs/{job_id}

ParameterLocationTypeDescription
library_idpathstringLibrary ID
job_idpathstringJob ID

Returns: Job.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
idstringGenerated batch identifier: job_ followed by 32 lowercase hexadecimal characters.
library_idstringIdentifier of the library in which the batch operates.
actionstringBatch operation: tag adds labels, untag removes labels, set_context replaces custom metadata, move changes asset_folder, and delete removes selected assets.
statusstringJob status: queued awaits execution; running is processing items; completed means all items succeeded; completed_with_errors means some succeeded and some failed; failed means all selected items failed. An empty job completes successfully.
totalnumberNumber of distinct assets selected when the job was created.
donenumberNumber of items successfully processed; failed items are counted separately.
failednumberNumber of items that could not be processed successfully.
failuresarray<object>Always present, including an empty array before any item failure or when all items succeed. At most 20 item failures are returned.
failures[].asset_idstringIdentifier supplied for the failed item; it may identify a missing asset.
failures[].codestringDomain error code explaining the individual item failure.
created_atstringTime the batch job was created, in UTC.
finished_atstring | nullTime the job reached a terminal status, or null while queued or running.
curl -X GET "https://api.deepraxis.ai/media/v1/libraries/${LIBRARY_ID}/jobs/job_3c2fe728de054c7396058c7438b289d2" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

HTTP 200

{
  "id": "job_3c2fe728de054c7396058c7438b289d2",
  "library_id": "lib_d3881a2f54a34cd79121b9d659e8378c",
  "action": "tag",
  "status": "completed",
  "total": 1,
  "done": 1,
  "failed": 0,
  "created_at": "2026-10-11T15:50:29.266Z",
  "failures": [],
  "finished_at": "2026-10-11T15:50:29.494Z"
}

Job

FieldTypeRequiredDescription
idJobIdyesResource ID
library_idLibraryIdyesLibrary ID
actiontag / untag / set_context / move / deleteyesBatch action
status"queued" / "running" / "completed" / "completed_with_errors" / "failed"yesResource status
totalnumberyesTotal assets in this job
donenumberyesCompleted count; completion flag for chunk responses
failednumberyesFailure count
failuresobject[]yes—
created_atIsoTimestampyesCreation time
finished_atIsoTimestamp / nullyesCompletion time; null while unfinished

BatchSelector

FieldTypeRequiredDescription
idsAssetId[]yesAsset IDs
FieldTypeRequiredDescription
expressionstringyesStructured query expression; an empty expression returns every asset
exclusionsAssetId[]noAsset IDs excluded from selection

BatchAction

FieldTypeRequiredDescription
action"tag" / "untag"yesBatch action
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
FieldTypeRequiredDescription
action"set_context"yesBatch action
contextobjectyesCustom text key/value pairs; PATCH replaces the whole map, {} clears it
FieldTypeRequiredDescription
action"move"yesBatch action
asset_folderstringyesOrganizational folder; does not change public_id. Listing by it matches that level only, not subfolders; an empty string is the root
FieldTypeRequiredDescription
action"delete"yesBatch action

Events

Page by seq: asc with after_seq, desc with before_seq. Never combine both cursors.

Guide →

Base URL and authentication

List events

GET /media/v1/libraries/{library_id}/events

ParameterLocationTypeDescription
library_idpathstringLibrary ID
after_seqqueryintegerAscending cursor; cannot combine with before_seq
before_seqqueryintegerDescending cursor; cannot combine with after_seq
orderqueryasc / descasc (default) or desc
limitqueryinteger1–200 items per page, default 50

Returns: MediaEventPage.

Response

HTTP 200

Successful response.

application/json

NameTypeDescription
dataarray<object>Events in this page, ordered by sequence in the requested direction.
data[].seqnumberIncreasing sequence number within this library; use it with after_seq or before_seq to page through events.
data[].idstringUnique identifier of this recorded event.
data[].typestringType of lifecycle, asset, processing, search or batch change recorded.
data[].processed_atstringTime this event was recorded, in UTC.
data[].library_idstringIdentifier of the library whose event was recorded.
data[].asset_idstringRelated asset identifier, when the event concerns an asset.
data[].job_idstringRelated batch job identifier, when present.
data[].kindstringRelated processing task: visual, frames, transcript or embedding.
data[].detailobjectEvent-specific details, such as changed values, reprocessing kinds or failed-item counts.
next_cursorstring | nullLast returned sequence as a string when more events exist; convert to a number and pass as after_seq for asc or before_seq for desc. Null means no further page.
curl -X GET "https://api.deepraxis.ai/media/v1/libraries/${LIBRARY_ID}/events?limit=1" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

HTTP 200

{
  "data": [
    {
      "seq": 1,
      "id": "2cd2cd71-1fc5-41fc-aeb0-29583af9b900",
      "type": "library.status_provisioning",
      "processed_at": "2026-10-09T09:34:09.858Z",
      "library_id": "lib_fff73e25733449b1bf6f880d91f5c045"
    }
  ],
  "next_cursor": "1"
}

MediaEventPage

FieldTypeRequiredDescription
dataMediaEvent[]yesResults in this page
next_cursorstring / nullyesNext-page cursor; null or absent at the end

MediaEvent

FieldTypeRequiredDescription
seqnumberyesIncreasing event sequence within the library
idstringyesResource ID
typeMediaEventTypeyesResource or event type
processed_atIsoTimestampyesEvent timestamp
library_idLibraryIdyesLibrary ID
asset_idAssetIdnoAsset ID
job_idJobIdnoJob ID
kindProcessingKindnoUnderstanding or processing kind; filters the understanding list
detailobjectnoEvent details

Error codes

Guide →

Native APIs return error.code, error.message, and error.details. Compatible APIs return error.message and repeat it in X-Cld-Error; non-ASCII header messages are percent-encoded.

CodeNative HTTPCompatible HTTPRetryable
LIBRARY_NOT_FOUND404404no
ASSET_NOT_FOUND404404no
JOB_NOT_FOUND404404no
UNDERSTANDING_NOT_FOUND404404no
LIBRARY_INVALID_STATE409400no
INVALID_PARAMS400400no
INVALID_EXPRESSION400400no
UNSUPPORTED400400no
NOT_IMPLEMENTED501400no
FILE_TOO_LARGE413400no
FILE_EMPTY400400no
UNSUPPORTED_MEDIA415400no
FETCH_FAILED400400no
LIMIT_EXCEEDED400400no
CHUNK_INVALID400400no
RATE_LIMITED429420yes
CAPACITY503500yes
UPSTREAM_FAILED502500yes

Use backoff for retryable errors. For other errors, correct the request or resource state first.

Model configuration errors

  • 400 INVALID_PARAMS: a model call ID is unavailable (Model <id> is not available), the vision model does not support image input, or models contains unknown roles, blank IDs, or invalid values.
  • 409 LIBRARY_INVALID_STATE: changing embedding when the library contains assets, including a reset that changes the model. The message is “库中已有素材时不能更换嵌入模型”.
  • 502 UPSTREAM_FAILED: the model catalog cannot be queried while writing model configuration; retry with backoff.