Search Media
# Search Media
Full-text search across images, videos, and files in an app, matching title, alt_text, description, and translations. The response also includes the attribute facets available on the matching media, with distinct-item counts and active flags reflecting `attributes=` filters. Per-template exclusion: when computing facet counts, filters on the same template_key are ignored while filters on other templates still apply (OR-within-template, AND-across-template).
GET
/api/v1/{app_id}/media/search
PurposeFull-text search across images, videos, and files in an app, matching title, alt_text, description, and translations.
Required inputsapp_id path q query
Primary response200 ยท Search results with facets
Operation keydam-api:GET:/api/v1/{app_id}/media/search
## API ownership
- API family: DAM public reads
- Best for: Public asset-library folder, media, facet, and shareable-link reads. Use Management API DAM routes for authenticated administration.
- Guide route: [/media/dam/latest](/media/dam/latest)
The OpenAPI contract defines the method, path, parameters, request body, and responses for this operation.
## Operation
- Method: `GET`
- Path: `/api/v1/{app_id}/media/search`
- Summary: Search Media
- Description: Full-text search across images, videos, and files in an app, matching title, alt_text, description, and translations. The response also includes the attribute facets available on the matching media, with distinct-item counts and active flags reflecting `attributes=` filters. Per-template exclusion: when computing facet counts, filters on the same template_key are ignored while filters on other templates still apply (OR-within-template, AND-across-template).
- OpenAPI contract:
dam-api
- Operation ID: Not documented in the OpenAPI contract.
- Stable operation key: `dam-api:GET:/api/v1/{app_id}/media/search`
Operation key uses API family, method, and path because this OpenAPI contract does not publish an operation ID.
## Parameters
| Name | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| app_id | path | Yes | string | App ID |
| q | query | Yes | string | Search query |
| page | query | No | integer | Page number (default: 1) |
| per_page | query | No | integer | Items per page (default: 20, max: 100) |
| type | query | No | string | Filter by type: image, video, file, all (default: all) |
| sort_by | query | No | string | Sort field: name, created_at, updated_at, type, rank (default: created_at). 'rank' orders by full-text relevance against `q`. |
| sort_order | query | No | string | Sort order: asc, desc (default: desc) |
| attributes | query | No | string[] | Filter by attribute(s). Repeat the query parameter once per filter, each in the form template_key/attribute_key. Filters sharing the same template_key combine with OR; distinct template_keys combine with AND. Example: ?attributes=color/red&attributes=color/blue&attributes=size/large |
## Request body
Not documented in the OpenAPI contract.
## Responses
| Status | Description | Content |
| --- | --- | --- |
| 200 | Search results with facets | application/json (object) |
| 400 | Invalid request | application/json (object) |
| 500 | Internal server error | application/json (object) |
### 200 - object
#### Media Search Response
| Property | Type | Required | Details |
| --- | --- | --- | --- |
| `data` | object[] | No | - |
| `facets` | object[] | No | - |
| `pagination` | object | No | - |
| `success` | boolean | No | - |
##### Media Item
| Property | Type | Required | Details |
| --- | --- | --- | --- |
| `alt_text` | string | No | - |
| `attributes` | object[] | No | - |
| `blurhash` | string | No | - |
| `copyright` | string | No | - |
| `created_at` | string | No | - |
| `custom` | integer[] | No | - |
| `description` | string | No | - |
| `file_type` | string | No | - |
| `folder` | object | No | - |
| `id` | string | No | - |
| `status` | string | No | - |
| `title` | string | No | - |
| `translations` | object | No | - |
| `type` | string | No | - |
| `updated_at` | string | No | - |
| `url` | string | No | - |
| `variants` | object[] | No | - |
##### Attribute
| Property | Type | Required | Details |
| --- | --- | --- | --- |
| `description` | string | No | - |
| `id` | string | No | - |
| `key` | string | No | - |
| `name` | string | No | - |
| `values` | object | No | - |
##### Folder Ref
| Property | Type | Required | Details |
| --- | --- | --- | --- |
| `id` | string | No | - |
| `name` | string | No | - |
| `public` | boolean | No | - |
| `slug` | string | No | - |
##### Video Variant
| Property | Type | Required | Details |
| --- | --- | --- | --- |
| `created_at` | string | No | - |
| `format` | string | No | - |
| `height` | integer | No | - |
| `id` | string | No | - |
| `updated_at` | string | No | - |
| `url` | string | No | - |
| `width` | integer | No | - |
##### Folder Facet
| Property | Type | Required | Details |
| --- | --- | --- | --- |
| `active` | boolean | No | - |
| `count` | integer | No | - |
| `description` | string | No | - |
| `filter_key` | string | No | - |
| `key` | string | No | - |
| `name` | string | No | - |
| `template_key` | string | No | - |
| `values` | object[] | No | - |
##### Folder Facet Value
| Property | Type | Required | Details |
| --- | --- | --- | --- |
| `count` | integer | No | - |
| `type` | string | No | - |
| `value` | string | No | - |
##### Page Info
| Property | Type | Required | Details |
| --- | --- | --- | --- |
| `page` | integer | No | - |
| `per_page` | integer | No | - |
| `total_items` | integer | No | - |
| `total_pages` | integer | No | - |
Generated example (synthetic)
```json
{
"data": [
{
"alt_text": "string",
"attributes": [
{
"description": null,
"id": null,
"key": null,
"name": null,
"values": null
}
],
"blurhash": "string",
"copyright": "string",
"created_at": "string",
"custom": [
0
],
"description": "string",
"file_type": "string",
"folder": {
"id": "string",
"name": "string",
"public": false,
"slug": "string"
},
"id": "string",
"status": "string",
"title": "string",
"translations": {},
"type": "string",
"updated_at": "string",
"url": "string",
"variants": [
{
"created_at": null,
"format": null,
"height": null,
"id": null,
"updated_at": null,
"url": null,
"width": null
}
]
}
],
"facets": [
{
"active": false,
"count": 0,
"description": "string",
"filter_key": "string",
"key": "string",
"name": "string",
"template_key": "string",
"values": [
{
"count": null,
"type": null,
"value": null
}
]
}
],
"pagination": {
"page": 0,
"per_page": 0,
"total_items": 0,
"total_pages": 0
},
"success": false
}
```
### 400 - object
#### Error
| Property | Type | Required | Details |
| --- | --- | --- | --- |
| `details` | string[] | No | - |
| `error` | string | No | - |
**Generated example (synthetic):**
```json
{
"details": [
"string"
],
"error": "string"
}
```
### 500 - object
#### Error
| Property | Type | Required | Details |
| --- | --- | --- | --- |
| `details` | string[] | No | - |
| `error` | string | No | - |
**Generated example (synthetic):**
```json
{
"details": [
"string"
],
"error": "string"
}
```
## Contract identity
Use these fields to confirm you are implementing the intended endpoint contract.
- API family: DAM public reads
- Method: `GET`
- Path: `/api/v1/{app_id}/media/search`
- Operation ID: Not documented in the OpenAPI contract.
- Stable operation key: `dam-api:GET:/api/v1/{app_id}/media/search`
- OpenAPI tag: Media
- OpenAPI summary: Search Media