---
title: "Get videos for a keyword search"
method: GET
path: "/v1/orbit/{orbit_id}/videos"
tags: ["Orbit"]
---

# Get videos for a keyword search

`GET /v1/orbit/{orbit_id}/videos`

## Request

- Base URL: `https://api.virlo.ai`
- URL: `https://api.virlo.ai/v1/orbit/{orbit_id}/videos`
- Auth: HTTP bearer

Retrieves videos linked to a keyword search with filtering, pagination, and sorting.

## Path parameters

- `orbit_id` string, required

## Query parameters

- `limit` number
- `page` number
- `min_views` number
- `platforms` string[]
- `start_date` string
- `end_date` string
- `order_by` 'publish_date' | 'views' | 'created_at'
- `sort` 'asc' | 'desc'
- `intent_match` boolean

## Response `200`

Successfully retrieved videos

- OrbitVideosResponseDto
  - `data` OrbitVideosDataDto, required
    - `orbit_id` string, required
    - `orbit_name` string, nullable
    - `total` number, required
    - `limit` number, required
    - `offset` number, required
    - `videos` OrbitVideoItemDto[], required
      - `url` string, required
      - `description` string, nullable
      - `platform` string, required
      - `views` number, required
      - `likes` number, required
      - `shares` number, required
      - `comments` number, required
      - `bookmarks` number, nullable
      - `publish_date` string, nullable
      - `hashtags` string[], required
      - `thumbnail_url` string, nullable
      - `author` V1AuthorDto
        - `username` string, required
        - `avatar_url` string, nullable, required: Creator avatar URL. Always an absolute URL (or null). Images Virlo stores are served from https://auth.virlo.ai/storage/v1/object/public/<bucket>/; platform CDN links are passed through. Some files are HEIC, which most non-Safari browsers cannot render, so convert before display if you need to.
        - `followers` number, required
        - `verified` boolean, required
        - `country` string, nullable: Creator's country (ISO-3166-1 alpha-2), when the platform exposes it. Distinct from a video's `upload_region`.
      - `keyword_found_by` string
      - `sound` V1SoundDto
        - `id` string, required: Virlo's internal sound ID (UUID). Use this for the /v1/sounds/:sound_id family (details, videos, usage-history, resolve). For the satellite sound lookup prefer `external_id`, though passing this UUID also works — it is auto-resolved to the sound's platform + external_id.
        - `external_id` string, nullable: Platform-native sound identifier (TikTok music/clip id, or Instagram audio id). This is the `music_id` accepted by the satellite sound lookup — call GET /v1/satellite/sounds/{platform}/{external_id} for TikTok or Instagram sounds. YouTube sounds are not supported (you'll get a 400). Null for sounds without a platform id.
        - `title` string, required
        - `platform` 'tiktok' | 'youtube' | 'instagram', required
        - `duration` number, nullable: Duration in seconds. Available on TikTok only.
        - `cover_url` string, nullable: Sound cover image URL. Available on TikTok and YouTube. Always an absolute URL (or null). Images Virlo stores are served from https://auth.virlo.ai/storage/v1/object/public/<bucket>/; platform CDN links are passed through. Some files are HEIC, which most non-Safari browsers cannot render, so convert before display if you need to.
        - `owner_handle` string, nullable: Sound owner handle. Partially available on TikTok (~12%).
        - `owner_nickname` string, nullable: Sound owner display name. Available on TikTok, YouTube, Instagram.
        - `is_original` boolean, nullable: Whether the sound is an original creation. TikTok only.
        - `is_commerce_music` boolean, nullable: Whether the sound is cleared for commercial use. TikTok only.
        - `usage_count` number, nullable: Platform-wide usage count. TikTok only.
      - `intelligence` object, nullable: Per-video AI intelligence payload (themes, hook analysis, etc.). null when not ready or not requested — see `intelligence_status` for why.
      - `intelligence_status` 'ready' | 'pending' | 'disabled' | 'failed' | 'skipped': Disambiguates a null `intelligence` field: `ready` (use it), `pending` (still being generated — poll later or wait for webhook), `disabled` (parent orbit didn't enable data_intelligence_enabled, so it will never arrive), `skipped` (deliberately not analyzed, so it will never arrive; see `intelligence_skip_reason`), `failed` (reserved for future use). Optional for backwards compatibility.
      - `intelligence_skip_reason` 'intent_mismatch' | 'too_old' | 'under_followers', nullable: Set only when `intelligence_status` is `skipped`: why Data Intelligence deliberately did not analyze this item, so its `intelligence` will never arrive. `intent_mismatch` (it does not match the agent's intent), `too_old` (published more than a year ago and not among the run's top performers), `under_followers` (more than two days old with no more views than its creator has followers). null otherwise.

## Other responses

- `401`: Unauthorized - missing or invalid API key
- `404`: Keyword search not found
- `429`: Too many requests - rate limit exceeded

---

[API](https://skmtc.dev/virlo/apis/virlo-public-api.md) · [All operations](https://skmtc.dev/virlo/apis/virlo-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/virlo/apis/virlo-public-api/revisions/3b69c6145087?raw)
