Triangle pointing up
Reference

Trending formats

Search trending formats extracted from outliers: reusable YouTube title templates with placeholders (e.g. Why [X] Sucked), each one returned with the example videos that used it and its view stats.

Every formula comes in two forms: framework is the human readable template, and pattern is the wildcard form (*why*sucked*) that matches the titles using it.

Results are curated by default: positive quality English formulas with at least 18 videos, first found in the last 4 months, sorted by lastVideosCountChangePercentage so the fastest spreading formulas come first. Override any of these with the parameters below.

Passing a text query searches by topic or niche and ranks the results by relevance instead of the sort field.

GET/search/trending-formats
Authorization<token>

Use the format: Api-Key <token> as the value.

In: header

Query Parameters

query?array<string>

Search queries matched against the formulas, by topic or niche. Repeat the parameter to pass more than one. Ranks results by relevance instead of the sort field

seed?string & number | null

Randomize search results by passing a random seed

sortBy?string

Field to sort title formulas by. Defaults to lastVideosCountChangePercentage, so the fastest spreading formulas come first.

Be aware that passing a text query drops the sort entirely - matching formulas are ranked by relevance instead.

  • averageViews - sort by the average views across the videos using the formula
  • averageViewsRatio - sort by the views-to-channel-average ratio (outlier score)
  • videosCount - sort by the number of videos using the formula
  • avgDuration - sort by the average duration of those videos
  • foundAt - sort by when the formula was first found
  • lastAverageViewsChangePercentage - sort by the % change in average views, latest period vs the previous one
  • lastMedianViewsChangePercentage - sort by the % change in median views, latest period vs the previous one
  • lastAvgViewsRatioChangePercentage - sort by the % change in the views-to-channel-average ratio
  • lastVideosCountChangePercentage - sort by the % change in the number of videos using the formula
Default"lastVideosCountChangePercentage"
Value in"averageViews" | "averageViewsRatio" | "videosCount" | "avgDuration" | "foundAt" | "lastAverageViewsChangePercentage" | "lastMedianViewsChangePercentage" | "lastAvgViewsRatioChangePercentage" | "lastVideosCountChangePercentage"
sortOrder?string

Sorting order of results, where asc is ascending and desc is descending

averageViewsFrom?integer

Minimum average views across the videos using the formula

Range0 <= value <= 9007199254740991
averageViewsTo?integer

Maximum average views across the videos using the formula

Range0 < value <= 9007199254740991
medianViewsFrom?integer

Minimum median views across the videos using the formula

Range0 <= value <= 9007199254740991
medianViewsTo?integer

Maximum median views across the videos using the formula

Range0 < value <= 9007199254740991
language?string

Filter by language code (e.g. "en"). Defaults to en

Default"en"
averageViewsRatioFrom?number

Minimum views-to-channel-average ratio (outlier score)

Range0 <= value
averageViewsRatioTo?number

Maximum views-to-channel-average ratio

Range0 < value
videosCountFrom?integer

Minimum number of videos found using the formula. Defaults to 18, so one-off titles are filtered out

Default18
Range0 <= value <= 9007199254740991
videosCountTo?integer

Maximum number of videos found using the formula

Range0 < value <= 9007199254740991
avgDurationFrom?integer

Minimum average video duration in seconds

Range0 <= value <= 9007199254740991
avgDurationTo?integer

Maximum average video duration in seconds

Range0 < value <= 9007199254740991
quality?string

Filter by content quality classification. Defaults to positive

Default"positive"
Value in"positive" | "negative" | "neutral"
clickTrigger?array<string>

Filter by the psychological hooks the formula uses. Repeat the parameter to pass more than one

createdAtFrom?string

Only formulas first found after this date (ISO format). Defaults to 4 months ago

lastVideosCountChangePercentageFrom?number

Minimum % change in the number of videos using the formula, latest period vs the previous one

lastVideosCountChangePercentageTo?number

Maximum % change in the number of videos using the formula, latest period vs the previous one

lastAvgViewsRatioChangePercentageFrom?number

Minimum % change in the views-to-channel-average ratio, latest period vs the previous one

lastAvgViewsRatioChangePercentageTo?number

Maximum % change in the views-to-channel-average ratio, latest period vs the previous one

from?integer

Page to fetch

Default0
Range0 <= value <= 9007199254740991
size?integer

Number of items per page

Default12
Range0 < value <= 9007199254740991

Response Body

{
  "pagination": {
    "total": 0,
    "from": 0,
    "size": 0
  },
  "hits": [
    {
      "id": "string",
      "framework": "Why [X] Sucked",
      "pattern": "*why*sucked*",
      "time": "2025-06-14T09:12:00.000Z",
      "language": "en",
      "quality": "negative",
      "clickTrigger": [
        "curiosity",
        "controversy"
      ],
      "overall_stats": {
        "doc_count": 0,
        "overall_avg_views": 0,
        "overall_median_views": 0,
        "overall_avg_views_ratio": 0,
        "overall_avg_z_score": 0,
        "overall_avg_duration": 0
      },
      "videos": [
        {
          "id": "SVeXR66hcIg",
          "title": "string"
        }
      ]
    }
  ]
}
{
  "error": {
    "errors": [
      {
        "code": "string",
        "validation": "string",
        "message": "string",
        "path": [
          "string"
        ]
      }
    ]
  },
  "status": "string"
}
{
  "error": {
    "message": "string"
  },
  "status": "string"
}
{
  "error": {
    "message": "string"
  },
  "status": "string"
}
{
  "error": {
    "message": "string",
    "rateLimit": {
      "limit": -9007199254740991,
      "current": -9007199254740991,
      "remaining": -9007199254740991,
      "resetTime": "2019-08-24T14:15:22Z"
    }
  },
  "status": "string"
}