Algrow

Docs

Thumbnail & Title Changes

Thumbnail and title changes Algrow watched happen, judged on each video's own daily views: won, lost, reverted.

Thumbnail and title changes Algrow watched happen on YouTube videos, each judged on the video's own daily views. Only changes Algrow watched happen itself are shown, dated to the second for thumbnails (the CDN's own change time) and to a ~7 hour window for titles; nothing is backfilled from archives. A change is shown only when the daily pace after it is at least 3x the pace before (a win) or at most 1/3 of it (a loss), the change bought or cost at least 10,000 views, there are at least 2 days of daily views on each side, the change is dated on or after 13 October 2026, and Algrow holds the before image or text from before the change. Reverted changes are shown too. Wins and reverts only for now: a flat before-pace reads a new video's normal launch decay as a loss, so losses stay hidden until the pace model handles decay. Everything else is logged and scored but never returned. Each change carries the before and after, the verdict (won or reverted), the multiple, the views it bought, how many days the new pace held, and whether the score is settled (day 28).

GET/api/v2/changes/video/:video_id

Every thumbnail and title change of one video, oldest first. Only changes Algrow watched happen itself are returned, dated to the second for thumbnails and to a ~7 hour window for titles, judged on the video's own daily views. A change is returned only when the daily pace after it is at least 3x the pace before or at most 1/3 of it, it bought or cost at least 10,000 views, there are at least 2 days of daily views on each side, it is dated on or after 13 October 2026, and Algrow holds the before image or text from before the change; reverted changes are returned too. Wins and reverts only for now: a flat before-pace reads a new video's normal launch decay as a loss, so losses stay hidden (rule.show_losses is false) until the pace model handles decay. Everything else is logged and scored but never returned. The thresholds come back in rule. Thumbnail before/after are image URLs; title ones are the texts.

Path Parameters

NameTypeRequiredDefaultDescription
video_idstringRequired—YouTube video id, 11 characters.

400 Bad video id

Response200
{
  "success": true,
  "rule": { "min_multiple": 3, "min_views": 10000, "floor_date": "2026-10-13", "show_losses": false, "min_days_before": 2, "min_days_after": 2 },
  "video_id": "k3VxQ9pLm2A",
  "count": 1,
  "changes": [
    {
      "change_id": 4812,
      "video_id": "k3VxQ9pLm2A",
      "title": "We Baked 100 Year Old Bread Recipes",
      "url": "https://www.youtube.com/watch?v=k3VxQ9pLm2A",
      "channel": { "id": "UC7lmZqZ9Q8-0yBZ5f4bOcKw", "name": "Oven Hour", "handle": "@ovenhour", "subs": 212000 },
      "kind": "thumbnail",
      "seq": 1,
      "changed_at": "2026-10-15T14:03:22+00:00",
      "changed_after": null,
      "before": "https://audio.algrow.online/thumbs/k3VxQ9pLm2A/1760000000.jpg",
      "after": "https://audio.algrow.online/thumbs/k3VxQ9pLm2A/1760538202.jpg",
      "verdict": "won",
      "multiple": 4.2,
      "views_bought": 38400,
      "pace_before": 1200,
      "pace_after": 5040,
      "held_days": 6,
      "days_before": 2,
      "days_after": 10,
      "settled": false,
      "reverted": false,
      "reverts_change_id": null,
      "tags": {}
    }
  ]
}
Example
curl "https://api.algrow.online/api/v2/changes/video/k3VxQ9pLm2A" \
-H "Authorization: Bearer YOUR_API_KEY"

GET/api/v2/changes/channel/:channel_id

A channel's thumbnail and title changes in the last days days, newest first, plus its nightly roll-up in stats (swaps, won, lost, reverted over 90 days). win_rate_90d is null until 50 swaps are behind it. Same certain-only rule as above; every change has the same fields as /api/v2/changes/video.

Query Parameters

NameTypeRequiredDefaultDescription
daysintegerOptional90How far back to look, in days. Max 365.

400 Bad channel id

Response200
{
  "success": true,
  "rule": { "min_multiple": 3, "min_views": 10000, "floor_date": "2026-10-13", "show_losses": false, "min_days_before": 2, "min_days_after": 2 },
  "channel_id": "UC7lmZqZ9Q8-0yBZ5f4bOcKw",
  "days": 90,
  "count": 3,
  "stats": {
    "as_of": "2026-10-19",
    "swaps_90d": 12,
    "won_90d": 5,
    "lost_90d": 2,
    "reverted_90d": 1,
    "win_rate_90d": null,
    "rate_needs_swaps": 50
  },
  "changes": [ ...same fields as /api/v2/changes/video... ]
}
Example
curl "https://api.algrow.online/api/v2/changes/channel/UC7lmZqZ9Q8-0yBZ5f4bOcKw?days=30" \
-H "Authorization: Bearer YOUR_API_KEY"

GET/api/v2/changes/recent

The feed of thumbnail and title changes across every watched video in the last days days, most views bought first. Filter by niche, kind and verdict. Same certain-only rule and the same change fields as /api/v2/changes/video.

Query Parameters

NameTypeRequiredDefaultDescription
nichestringOptionalallOnly videos in this niche (the niche names used by the viral feed).
kindstringOptionalboththumbnail or title.
verdictstringOptionalallwon or reverted. lost is refused (400) while losses are hidden.
min_multiplenumberOptional3Only changes where the daily pace moved at least this many times, up or down. The 3x floor always applies.
daysintegerOptional30How far back to look, in days. Max 365.
limitintegerOptional25Results to return, max 100.

400 Bad kind, verdict or min_multiple

Response200
{
  "success": true,
  "rule": { ... },
  "count": 25,
  "changes": [ ...same fields as /api/v2/changes/video... ]
}
Example
curl "https://api.algrow.online/api/v2/changes/recent?niche=Cooking&kind=thumbnail&verdict=won&days=7" \
-H "Authorization: Bearer YOUR_API_KEY"

GET/api/v2/changes/like

Thumbnail and title changes on videos like ref, each with a match score per match kind. still compares the change's before and after images with the reference thumbnail; subject compares what the videos are about; title_format compares the title's shape. A row must pass every match you ask for; rows are sorted by the mean score. Same certain-only rule and change fields as /api/v2/changes/video.

Query Parameters

NameTypeRequiredDefaultDescription
refstringRequired—A YouTube video id or URL, or a thumbnail image URL. An image URL can only match on still.
matchstringOptionalstillComma-separated, any of still, subject, title_format.
kindstringOptionalboththumbnail or title.
verdictstringOptionalallwon or reverted. lost is refused (400) while losses are hidden.
nichestringOptionalallOnly videos in this niche.
daysintegerOptional90How far back to look, in days. Max 365.
limitintegerOptional25Results to return, max 100.

400 Bad ref or match, or the video is not indexed

Response200
{
                  "success": true,
                  "rule": { ... },
                  "ref": { "kind": "video", "value": "k3VxQ9pLm2A", "subject": "sourdough bread" },
                  "match": ["still", "subject"],
                  "days": 90,
                  "count": 8,
                  "changes": [
                    { ...same fields as /api/v2/changes/video, plus:
"match": { "still": 0.81, "subject": 0.92 }
                    }
                  ]
                }
Example
curl "https://api.algrow.online/api/v2/changes/like?ref=k3VxQ9pLm2A&match=still,subject" \
-H "Authorization: Bearer YOUR_API_KEY"

GET/api/v2/changes/format-swaps

Title changes grouped by title format family before and after (plain_subject to question_hook, number_list to how_to, and so on). Each group has its swap count, won and reverted counts, the typical multiple, three real examples, and a win rate once 50 swaps are behind it. Titles without a cached format are classified on the spot, at most 100 per call; past that partial is true and unclassified counts the changes left out. Call again to classify more. families lists every family name you can pass. Same certain-only rule as /api/v2/changes/video.

Query Parameters

NameTypeRequiredDefaultDescription
from_formatstringOptionalanyTitle format family the title moved from.
to_formatstringOptionalanyTitle format family the title moved to.
nichestringOptionalallOnly videos in this niche.
daysintegerOptional90How far back to look, in days. Max 365.
limitintegerOptional100Title changes to read before grouping, max 100.

400 Unknown format family

Response200
{
  "success": true,
  "rule": { ... },
  "from_format": "plain_subject",
  "to_format": null,
  "days": 90,
  "families": ["plain_subject", "number_list", "how_to", ...],
  "partial": false,
  "unclassified": 0,
  "classify_cap": 100,
  "count": 2,
  "groups": [
    {
      "from_format": "plain_subject",
      "to_format": "question_hook",
      "swaps": 14,
      "won": 9,
      "lost": 3,
      "reverted": 2,
      "typical_multiple": 3.6,
      "win_rate": null,
      "rate_needs_swaps": 50,
      "examples": [ ...up to 3 changes, each with before_format and after_format... ]
    }
  ]
}
Example
curl "https://api.algrow.online/api/v2/changes/format-swaps?from_format=plain_subject&niche=History" \
-H "Authorization: Bearer YOUR_API_KEY"