Format Trends

Video formats creators are copying right now. Each one comes with a recipe you can follow, how fast it is spreading, and real examples. Use Format Trends to decide what to make.

At a glance
What it does
Lists the formats creators are copying on TikTok, Instagram and YouTube, with what stays the same, what each creator swaps in, and who it fits.
You send
Nothing required. Optionally filters such as stage, platform, client type or brand safety.
You get back
Within seconds, a ranked list of formats with their stage, creator counts, a 30-day history and example videos.
Cost
$0.25 for the list and $0.05 for one trend, even when nothing matches. Failed requests are free.
  • Format Trends (this page, /v1/content-trends) are formats: a structure creators repeat with their own subject, like a meme template, a sound with a set visual gag, or an AI-tool effect. Use them to decide what to make.
  • Topic Trends (/v1/trends) are topics: news and pop culture moments many people are posting about, by region. Use them to decide what to talk about.

If someone asks "what formats, memes or templates are people copying?", call Format Trends. If they ask "what is everyone talking about?", call Topic Trends.

How the data works

  • Curated. Virlo's detector finds candidate formats, and the Virlo team reviews each one before it is published. Only published trends are returned, so the catalog is small: a few dozen trends, not thousands.
  • Hourly. The data refreshes every hour at :07 UTC, and responses are cached for up to 5 minutes. meta.updated_at is the last refresh.
  • One order, same as the app. By default, live trends come first, the most creators in the last 7 days first, then by stage (new, rising, peaking, fading). Archived trends come last, most recent activity first.
  • Example videos are ranked: ones the Virlo team pinned first, then recent videos that passed the recipe check, then other videos that passed it, then recent ones, then the rest. One video per creator, up to 16. Paid posts (is_paid) are listed after organic ones.
  • Recipe check. verified_fit: true means the video really does the format, not just the sound. videos_verified counts those videos.

Lifecycle

Every trend has a lifecycle stage, re-computed at every refresh. lifecycle_since says when it entered that stage.

  • new: first spotted in the last 7 days.
  • rising: 10 or more creators this week and at least 1.3 times last week.
  • peaking: between rising and fading.
  • fading: under 0.7 times last week.
  • archived: no posts in 14 days, or fewer than 5 creators in a week once it is older than 7 days.

"This week" is creators_7d, the creators who posted it in the last 7 days. "Last week" is creators_prev_7d, the 7 days before that as they were counted a week ago, so both weeks had the same time to be found and the comparison is fair. Quote both numbers when you describe momentum.

The series and partial days

series counts the creators who posted the format on each of the last 30 days, by posting date. Videos are found a few days after they go up (the median delay is about 4 days), so the most recent days keep rising for a while after you read them.

The last 7 points carry partial: true. Never read a dip in partial days as a decline. Compare full days with full days, or use creators_7d against creators_prev_7d.


GET/v1/content-trends

The published format trends, filtered, sorted and paged. Each trend includes its series and a few example videos.

Cost per request:$0.25

Query parameters

All optional. An unknown parameter returns 400.

  • Name
    lifecycle
    Type
    string
    Description

    Comma-separated stages: new, rising, peaking, fading, archived. Default new,rising,peaking,fading (live only). Pass archived to get the archive.

  • Name
    platform
    Type
    string
    Description

    tiktok, instagram or youtube. Keeps trends with at least one linked video on that platform.

  • Name
    made_with_ai_tool
    Type
    boolean
    Description

    true for formats made with an AI tool (tool_name says which), false for the rest.

  • Name
    is_sound_meme
    Type
    boolean
    Description

    true for formats built around a sound (sound_title names it), false for the rest.

  • Name
    brand_safety
    Type
    string
    Description

    safe or caution. Trends without a rating are left out when you set it.

pagination.total is exact.

Request

GET
/v1/content-trends
curl "https://api.virlo.ai/v1/content-trends?client_fit=consumer_brand&brand_safety=safe&limit=5" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response

{
  "data": [
    {
      "id": 6,
      "name": "Things I'd never buy again",
      "recipe": "Quick cuts of products the creator regrets buying, each with a one-line verdict on screen, over the same trending sound.",
      "constant_part": "The 'never again' framing, the sound and the verdict captions",
      "swapped_part": "The products and the niche",
      "lifecycle": "rising",
      "lifecycle_since": "2026-10-18T04:07:12Z",
      "spotted_on": "2026-10-09",
      "first_seen_on": "2026-10-02",
      "last_seen_on": "2026-10-20",
      "peak_on": "2026-10-17",
      "peak_creators": 41.3,
      "creators_3d_avg": 37.0,
      "creators_7d": 212,
      "creators_prev_7d": 140,
      "creators_total": 618,
      "videos_total": 744,
      "videos_verified": 301,
      "views_total": 182340000,
      "top_views": 9100000,
      "platforms": { "tiktok": 690, "instagram": 40, "youtube": 14 },
      "made_with_ai_tool": false,
      "tool_name": null,
      "is_sound_meme": true,
      "sound_title": "original sound",
      "language": "en",
      "region": "US",
      "audience_tags": ["shoppers", "gen z"],
      "brand_safety": "safe",
      "effort": "low",
      "tone": "funny",
      "people": "One person, talking to camera",
      "client_fit": {
        "consumer_brand": { "fit": "yes", "how": "Flip it: things customers would buy again." },
        "b2b_saas": { "fit": "no", "how": null }
      },
      "series": [
        { "date": "2026-10-13", "creators": 29, "partial": false },
        { "date": "2026-10-20", "creators": 31, "partial": true }
      ],
      "examples": [
        {
          "video_id": "8f0c1a52-4d7e-4b8e-9a51-2f1f6f0b3c11",
          "url": "https://www.tiktok.com/@creator/video/7561234567890123456",
          "platform": "tiktok",
          "views": 1234567,
          "likes": 89000,
          "comments": 1200,
          "thumbnail_url": "https://storage.virlo.ai/thumbnails/abc123.jpg",
          "publish_date": "2026-10-14",
          "author": {
            "username": "creator",
            "avatar_url": "https://storage.virlo.ai/avatars/def456.jpg",
            "verified": false,
            "followers": 15400
          },
          "is_paid": false,
          "verified_fit": true
        }
      ]
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 5,
    "total": 12,
    "total_pages": 3,
    "has_next_page": true,
    "has_prev_page": false
  },
  "meta": { "updated_at": "2026-10-21T03:08:00Z" }
}

The series is cut to two points here; real responses have 30.


GET/v1/content-trends/{id}

Get one format trend

One published trend with all its example videos (up to 16) and its full 30-day series. Use it to read a trend from the list without paging the list again.

Cost per request:$0.05

Path parameters

  • Name
    id
    Type
    integer
    Required
    *
    Description

    The trend's id from the list.

An unknown or unpublished id returns 404 not_found. When the Virlo team merges a trend into another one, its old id returns 404 with merged_into set to the id to read instead.

Request

GET
/v1/content-trends/{id}
curl "https://api.virlo.ai/v1/content-trends/6" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response

{
  "data": {
    "id": 6,
    "name": "Things I'd never buy again",
    "lifecycle": "rising",
    "creators_7d": 212,
    "creators_prev_7d": 140,
    "series": [
      { "date": "2026-10-20", "creators": 31, "partial": true }
    ],
    "examples": [
      {
        "video_id": "8f0c1a52-4d7e-4b8e-9a51-2f1f6f0b3c11",
        "platform": "tiktok",
        "views": 1234567,
        "is_paid": false,
        "verified_fit": true
      }
    ]
  },
  "meta": { "updated_at": "2026-10-21T03:08:00Z" }
}

Shortened: data has every field from the list.


Fields

Each format trend has:

  • Name
    id
    Type
    integer
    Description

    Stable id. Use it with one format trend.

  • Name
    name
    Type
    string
    Description

    Short name of the format.

  • Name
    recipe
    Type
    string
    Description

    How to make it.

  • Name
    constant_part
    Type
    string | null
    Description

    What stays the same in every video.

  • Name
    swapped_part
    Type
    string | null
    Description

    What each creator swaps in.

Each example video has video_id, url, platform (tiktok, instagram or youtube), views, likes, comments, thumbnail_url (a full URL), publish_date, author (username, avatar_url, verified, followers, or null), is_paid and verified_fit.

  • is_paid: true marks paid distribution: an ad, a boosted post, a paid partnership, or a caption that discloses one (such as #ad). Its views come partly from ad spend, so treat it as an ad, not proof the format spreads on its own.
  • verified_fit: true means the video passed the recipe check: it does the format, not just the sound.

Costs and errors

  • Charges. The list costs $0.25 (25 credits) and one trend $0.05 (5 credits), even when nothing matches. Errors are never charged. X-Cost shows the charge in dollars and X-Credits-Used in credits.
  • Read one, don't re-list. After a list call, read a single trend with one format trend instead of paging the list again.

Errors come back with message, error, statusCode and code (more on errors):

  • 400: a bad value or an unknown parameter. The message lists valid values.
  • 401: missing or invalid API key.
  • 402: your balance is too low. Add funds.
  • 404: the trend is unknown or not published, or it was merged (merged_into names the trend to read instead).
  • 429: too many requests. Wait retry_after seconds. The X-RateLimit-Limit header shows your limit (rate limits).

Was this page helpful?