# Videos

> Get the most-viewed short videos posted in the last 48 hours across TikTok, YouTube Shorts, and Instagram Reels.

Source: https://dev.virlo.ai/docs/videos
Markdown: https://dev.virlo.ai/docs/videos.md
Section: Explore data

## About the Virlo API (applies to every page)

- Base URL: `https://api.virlo.ai/v1`. Every request needs the header `Authorization: Bearer YOUR_API_KEY` (keys start with `virlo_tkn_`).
- Responses are JSON inside a `data` field, except the `/v1/webhooks` endpoints, which return the object or array directly. Field names are snake_case.
- Prices are in US dollars from a prepaid balance. 1 credit = $0.01. The `X-Cost` response header on each successful response is the exact charge. Errors are free.
- Slow jobs return an ID. Check its status every 15 seconds (or whatever `retry_after_seconds` says) until `finalized` is `true`.
- All docs pages: https://dev.virlo.ai/llms.txt. Every page in one file: https://dev.virlo.ai/llms-full.txt. MCP server for AI assistants: https://dev.virlo.ai/api/mcp/mcp.

---

See which short videos posted in the last two days have the most views so far, across TikTok, YouTube Shorts, and Instagram Reels.

**At a glance**

- **What it does:** Lists short videos posted in the last 48 hours, ranked by total views so far. It covers the videos Virlo collects, not every video posted.
- **You send:** Nothing required. Optionally, how many videos (1 to 100).
- **You get back:** In about a second: each video's link, caption, transcript, views, likes, comments, hashtags, sound, and thumbnail. No creator name or follower count.
- **Cost:** $0.25 each time you call, for 1 video or 100. Failed calls are free.

## Get top videos

**Endpoint:** `GET https://api.virlo.ai/v1/videos/digest`

One list covers all three platforms, sorted by views alone, so TikTok often takes the most spots. Older videos have had more time to build views, so a video posted an hour ago rarely makes it. To filter by topic, use a [Content Research Agent](https://dev.virlo.ai/docs/agents).

Cost per request: $0.25

- `limit` (integer, optional): How many videos to return, from 1 to 100 (default 50). Numbers above 100 count as 100. The only setting: adding `platform` or anything else gets a `400` error. For one platform, see [below](https://dev.virlo.ai/docs/videos#platform-paths).

The example shortens the transcripts and the YouTube hashtag list.

**cURL request:**

```bash
curl -G https://api.virlo.ai/v1/videos/digest \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d limit=50
```

**JavaScript request:**

```js
const res = await fetch('https://api.virlo.ai/v1/videos/digest?limit=50', {
  headers: { Authorization: 'Bearer YOUR_API_KEY' },
})
const { data } = await res.json()
```

**Python request:**

```python
import requests

res = requests.get(
    'https://api.virlo.ai/v1/videos/digest',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
    params={'limit': 50},
)
data = res.json()['data']
```

**Response 200 OK:**

```json
{
  "data": [
    {
      "id": "367da5d1-5510-4e73-b9a5-fd6207e9915e",
      "url": "https://www.tiktok.com/@thesun/video/7688710703854767392",
      "type": "tiktok",
      "description": "This is the bizarre moment Rory Stewart suddenly turns and stares at fellow Newsnight guest, as viewers say ‘I can’t stop laughing’. Click on the link for more. #NewsNight #RoryStewart #tv ",
      "publish_date": "2026-09-23T12:44:27",
      "views": 5050311,
      "number_of_likes": 381807,
      "number_of_comments": 4803,
      "number_of_shares": 105189,
      "bookmarks": 23851,
      "hashtags": ["newsnight"],
      "thumbnail_url": "https://auth.virlo.ai/storage/v1/object/public/thumbnails/5f78a37402cb781959c245240f08b7ea1672b0867346cf35771adb32f177e612.jpg",
      "duration": 15,
      "external_id": "7688710703854767392",
      "author_id": "d9c40165-62e0-493c-8b34-7d60f7f13559",
      "niche": "unknown",
      "region": "GB",
      "upload_region": "GB",
      "upload_region_source": "tiktok_region",
      "transcript_raw": "All the value goes to them. It's terrifying. What's your sense of what's going on in government?",
      "is_eligible_for_commission": false,
      "is_duet": false,
      "is_stitch": false,
      "sound": {
        "id": "05b90659-49c5-4f94-ba15-da80d6ef8c11",
        "title": "original sound - thesun",
        "duration": 14,
        "platform": "tiktok",
        "cover_url": "7a926491c16af666224735afecb62c829a4e11f774fd221b2514238a4ef6a231.webp",
        "is_original": true,
        "usage_count": 51,
        "owner_handle": "thesun",
        "owner_nickname": "The Sun",
        "is_commerce_music": true
      }
    },
    {
      "id": "72a237ab-30d8-4e8a-8579-b2e746a43d04",
      "url": "https://www.youtube.com/shorts/z3Ao0FH-0fU",
      "type": "youtube",
      "description": "I could NOT see that coming #relatablestories #comedy #funnymemes",
      "publish_date": "2026-09-23T08:25:27",
      "views": 1841170,
      "number_of_likes": 42179,
      "number_of_comments": 634,
      "number_of_shares": null,
      "bookmarks": 0,
      "hashtags": ["#storytelling", "#shorts", "#relatablestories", "#comedy", "#funnymemes"],
      "thumbnail_url": "https://auth.virlo.ai/storage/v1/object/public/thumbnails/99306a7d461bd83fab98a3154f19faab1145f0b385e69210af6f33567af38ee7.jpg",
      "duration": 13,
      "external_id": "z3Ao0FH-0fU",
      "author_id": "d28e53d4-9ff1-482f-9dfa-0544ea34e7ad",
      "niche": "unknown",
      "region": null,
      "upload_region": "US",
      "upload_region_source": "youtube_channel_country",
      "transcript_raw": "There's a clip in the Cars movie where Sally splashes mud on Lightning McQueen.",
      "is_eligible_for_commission": null,
      "is_duet": null,
      "is_stitch": null,
      "sound": {
        "id": "36d69972-708a-4e5e-893f-c1143757abf2",
        "title": "Original Sound",
        "duration": null,
        "platform": "youtube",
        "cover_url": "c01121a411aca7f631d30acf872b53ebf262e9ff7524eb6bac1e535693fa68db.jpg",
        "is_original": true,
        "usage_count": null,
        "owner_handle": "tyler.vitelli",
        "owner_nickname": "@tyler.vitelli",
        "is_commerce_music": null
      }
    }
  ]
}
```

**Response 400:**

```json
{
  "message": ["limit must not be less than 1"],
  "error": "Bad Request",
  "statusCode": 400,
  "code": "validation_error"
}
```

**Response 429:**

```json
{
  "statusCode": 429,
  "code": "rate_limit_exceeded",
  "message": "Rate limit exceeded",
  "error": "Too Many Requests",
  "limit": 50,
  "remaining": 0,
  "reset_at": 1790270940,
  "reset_at_formatted": "September 24th, 2026, 5:29 PM UTC",
  "retry_after": 54
}
```

**Errors and limits.** Errors are free. `402`: your balance is under $0.25. `429`: too many calls (50 a minute, 500 an hour, 5,000 a day per list, bad requests included); wait `retry_after` seconds. See [Rate limits](https://dev.virlo.ai/docs/rate-limits).

**Full field reference**

Every video has these 24 fields. `null` (an empty value) means not reported, and so does `0` where noted.

- `id, external_id` (string, optional): Virlo's ID and the platform's ID. On Instagram, `external_id` is the numeric media ID, not the code in the Reel link.
- `url, type` (string, optional): Link to the video, and its platform: `tiktok`, `youtube`, or `instagram`.
- `description` (string | null, optional): The caption. On Instagram and some TikToks, the text often appears twice.
- `publish_date` (string, optional): Posting time in UTC, like `2026-09-23T12:44:27`. It has no UTC marker (`Z`), so add one or your code may read it as local time.
- `views` (integer, optional): Total views at Virlo's last check. The list is sorted by it.
- `number_of_likes, number_of_comments` (integer, optional): On YouTube, `0` often means not reported.
- `number_of_shares, bookmarks` (integer | null, optional): Real counts on TikTok only (shares are sometimes `null`). On YouTube and Instagram, `null` or `0` means not reported.
- `hashtags` (string[] | null, optional): YouTube tags usually start with `#` and others don't, so remove it before comparing. TikTok often lists one tag; the caption (`description`) has them all. No tags: `[]` or `null`.
- `thumbnail_url` (string | null, optional): Link to the thumbnail image.
- `duration` (integer | null, optional): Length in seconds. Usually `null` on Instagram.
- `transcript_raw` (string | null, optional): The spoken words as text.
- `sound` (object | null, optional): The audio. Usually `null` on Instagram. When present, it always has 10 fields. On YouTube, `duration` and `usage_count` are `null`. `cover_url` is a file name, not a link. For full stats, pass `sound.id` to [Sound details](https://dev.virlo.ai/docs/sounds#sound-details) (from $0.05).
- `upload_region, upload_region_source` (string | null, optional): The creator's country code, like `US` (usually `null` on Instagram). A source starting with `inferred` is Virlo's estimate. Others come from the platform.
- `is_duet, is_stitch, is_eligible_for_commission` (boolean | null, optional): TikTok only. `true` marks a duet, a stitch, or a video that can earn a commission, such as through TikTok Shop. Elsewhere, `null` or `false` both mean no.
- `author_id` (string | null, optional): Virlo's creator ID. For the handle, open `url`.
- `region, niche` (string | null, optional): Old fields. `region` is often `null` (always on YouTube), so use `upload_region`. `niche` is always `"unknown"`.

## Top videos for one platform

Each platform has its own top list from the same 48 hours, with the same `limit`, fields, and price. It is that platform's own top 100, not a slice of the mixed list, so Reels aren't pushed out by TikTok.

- [YouTube Shorts](https://dev.virlo.ai/docs/youtube-videos): `GET /v1/youtube/videos/digest`
- [TikTok](https://dev.virlo.ai/docs/tiktok-videos): `GET /v1/tiktok/videos/digest`
- [Instagram Reels](https://dev.virlo.ai/docs/instagram-videos): `GET /v1/instagram/videos/digest`

Only these three exist. Others, such as Facebook, return `404` (not found).

---

More in Explore data:

- [Trends](https://dev.virlo.ai/docs/trends.md)
- [Sounds](https://dev.virlo.ai/docs/sounds.md)
- [Hooks](https://dev.virlo.ai/docs/hooks.md)
- [Hashtags](https://dev.virlo.ai/docs/hashtags.md)
