---
title: Caption Search
url: https://docs.kaltura.com/docs/rich-media-cms-apis/content-management/captions-caption-search
---

## Caption Search


### eSearch with KalturaESearchCaptionItem

Search within caption text across entries:


```bash
curl -X POST "$KALTURA_SERVICE_URL/service/elasticsearch_esearch/action/searchEntry" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "searchParams[objectType]=KalturaESearchEntryParams" \
  -d "searchParams[searchOperator][objectType]=KalturaESearchEntryOperator" \
  -d "searchParams[searchOperator][operator]=1" \
  -d "searchParams[searchOperator][searchItems][0][objectType]=KalturaESearchCaptionItem" \
  -d "searchParams[searchOperator][searchItems][0][fieldName]=content" \
  -d "searchParams[searchOperator][searchItems][0][searchTerm]=Kaltura API" \
  -d "searchParams[searchOperator][searchItems][0][itemType]=2"
```


**Searchable fields:** `caption_asset_id`, `content`, `start_time`, `end_time`, `label`, `language`

**Item types:** `1` = EXACT_MATCH, `2` = PARTIAL, `3` = STARTS_WITH

### Response Data

Search results include `KalturaESearchCaptionItemData` with timestamp information:

| Field | Description |
|-------|-------------|
| `line` | Matched caption text |
| `startsAt` | Start timestamp (integer, milliseconds) |
| `endsAt` | End timestamp (integer, milliseconds) |
| `captionAssetId` | Caption asset containing the match |
| `label` | Caption track label |
| `language` | Caption language |

### Unified Search

Combine caption search with entry fields and metadata in a single eSearch query:


```bash
curl -X POST "$KALTURA_SERVICE_URL/service/elasticsearch_esearch/action/searchEntry" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "searchParams[objectType]=KalturaESearchEntryParams" \
  -d "searchParams[searchOperator][objectType]=KalturaESearchEntryOperator" \
  -d "searchParams[searchOperator][operator]=2" \
  -d "searchParams[searchOperator][searchItems][0][objectType]=KalturaESearchCaptionItem" \
  -d "searchParams[searchOperator][searchItems][0][fieldName]=content" \
  -d "searchParams[searchOperator][searchItems][0][searchTerm]=tutorial" \
  -d "searchParams[searchOperator][searchItems][0][itemType]=2" \
  -d "searchParams[searchOperator][searchItems][1][objectType]=KalturaESearchEntryItem" \
  -d "searchParams[searchOperator][searchItems][1][fieldName]=name" \
  -d "searchParams[searchOperator][searchItems][1][searchTerm]=tutorial" \
  -d "searchParams[searchOperator][searchItems][1][itemType]=2"
```


Operator `2` = OR (match entries where captions OR title contain "tutorial"). See [eSearch API](/docs/rich-media-cms-apis/content-management/esearch-overview) for full query syntax.

### Deep-Linking to Video Moments

Use `startsAt` from caption search results to deep-link to the exact video position. Since `startsAt` is in milliseconds and the player expects seconds, divide by 1000:


```
https://player.kaltura.com/p/{partnerId}/sp/{partnerId}00/embedIframeJs/uiconf_id/{playerId}/partner_id/{partnerId}?iframeembed=true&entry_id={entryId}&mediaProxy.mediaPlayFrom={startsAt/1000}
```


Or use the Player JS API: `player.currentTime = startsAt / 1000;`
