Changelog

What's new on the Virlo API. New endpoints, pricing changes, performance work, deprecations, and fixes — newest first.

November 2026

  1. Changed

    Places: an empty search is free

    GET /v1/places and GET /v1/places/{id}/videos charge nothing for a call that returns no place or video. A call that returns results stays $0.05.

  2. Changed

    Place lookup: naming a place, fresh counts, and when a lookup starts

    POST /v1/satellite/place now takes the place’s TikTok link (or its numeric id) as query, which names any TikTok place exactly. A name starts a lookup only when it picks out one place: one place named exactly that and no other carrying the name. Any other match returns free candidates, which now carry source, poi_id and tiktok_video_count. In the result, each post has counts_fresh (true when its views and engagement were read from TikTok on this lookup), sources.stored_refreshed counts the stored posts that were read again, and stats.velocity.comparable says when is_accelerating compares two full four-week windows. The price stays $0.50 per lookup started.

  3. Changed

    Video outlier check: free repeats and refunds

    The same video within 6 hours now returns the saved check for free (cached: true), and a check that fails is refunded in full, shown as credits_refunded. It matches the other lookups. The price stays $0.50.

  4. Added

    MCP: a checkout link when your balance runs out

    When a paid MCP tool is refused with a 402, the reply now carries a Stripe checkout link for enough balance to continue, so your AI app can hand it to you in the chat. Nothing is charged until you pay on that page. Once you have paid, ask again.

  5. Added

    Video outlier check: what set the video apart

    A finished check now includes comparison: where the video ranks among the recent videos of its creator, its engagement and length against their typical, hashtags they rarely use, their three most viewed videos, and key_findings, plain sentences you can quote. Same price. These are differences, not proven causes. [See what you get back](/docs/satellite/video-outlier#result).

  6. Changed

    Topic Trends: checked example videos and steadier momentum

    Every example video on a Topic Trend is now checked against its topic, in all regions. top_exemplars holds videos that passed, one per creator, and exemplar_count counts them. A topic with too few gets a fresh search by its key names, and one that still has none stays out of the list until a later run finds some, so a list can be shorter than usual. momentum.views_per_hour now counts only videos measured at both of the last two checks, so a video joining or leaving the examples no longer reads as a spike or a collapse. momentum is null on a topic with fewer than 3 example videos, and /v1/topic-trends/emerging leaves out topics that dropped below 3. Example videos are now limited to those posted no more than 14 days before the topic was found. No fields were added or renamed.

  7. Added

    Place lookup (beta): one TikTok place, fresh, and what changed

    POST /v1/satellite/place looks up one TikTok place by Virlo place_id, TikTok poi_id, or a name in query. You get the posts tagged there, read fresh from TikTok plus the ones Virlo already has, newest first, TikTok's own tag count, and a change block against your team's previous lookup of the place (video_count_change, new_since_previous). A query matching more than one place answers status: candidates and costs nothing. $0.50 per lookup started; the same place within 6 hours is free when you ask for as many posts or fewer, and failed lookups are refunded. Poll GET /v1/satellite/place/status/:job_id. TikTok places only. MCP: lookup_place. Guide: dev.virlo.ai/docs/satellite/places.

  8. Added

    Lookups: JSON start routes, compare two runs, repeat a run

    POST /v1/satellite/creator, /hashtag, /sound and /video start the same lookups as the existing routes with a JSON body, at the same price. The GET routes keep working. GET /v1/satellite/runs/:run_id/compare (free) shows what changed since an earlier run of the same subject: headline numbers before and after, new and dropped posts, and the biggest view gains. POST /v1/satellite/runs/:run_id/refresh repeats a saved lookup with its stored options at today's price. GET /v1/satellite/runs/:run_id/posts is another name for /videos. Guide: dev.virlo.ai/docs/satellite#compare-runs.

  9. Changed

    Lookup trend analysis: every number computed from the videos

    Trend analysis on creator, hashtag and sound lookups now reports method: trends-v2. The AI names the patterns; the numbers are computed. New fields: key_findings (up to 4 plain sentences with their numbers), corpus (the sample behind them), and on each trend share_of_corpus, performance (median views and engagement against the sample, views_lift, engagement_lift), recency (videos_last_30d, direction) and top_examples. confidence now measures evidence: 0.35 at 3 videos up to 0.95 at 20 or more. time_windows gains videos_with_views, and total_views, avg_views and total_shares are null when no video in the window reports them. No price change. Guide: dev.virlo.ai/docs/satellite/creators#trend-numbers.

  10. Changed

    Audience snapshots say how many commenters each share rests on

    signal_breakdown.coverage gives n, share_of_sample and margin_of_error_pts for age, gender, country, city and language. Every share is a share of n, not of sample_size. A distribution resting on fewer than 25 commenters is null with hidden_for_low_n: true. confidence_level now reads the median n behind the distributions shown instead of the raw sample, so some snapshots that read high now read medium. No price change. Guide: dev.virlo.ai/docs/satellite/creators#audience-coverage.

  11. Added

    Search slideshows alongside videos

    POST /v1/search/videos takes an optional content_types (video, slideshow, or both, default video). With slideshow the response adds data.slideshows with items, total, sort_used and not_applied. Without it the response is unchanged. The price stays $0.05 for a library page with results and free when empty. Guide: dev.virlo.ai/docs/search.

  12. Added

    Places (beta): the locations creators tag on TikTok and Instagram

    Two new GET routes: /v1/places finds places by name, suburb, postcode or country, most tagged first, and /v1/places/:id/videos lists the videos tagged at one place. Each costs $0.05 a call. POST /v1/search/videos gains places and near filters, every library video now carries location (or null), and the MCP server adds find_places plus places and near on find_videos. A place is the location tag a creator chose on a post, and about 7% of TikTok and Instagram videos have one. See [Places](/docs/places).

  13. Changed

    Topic Trends: /v1/trends is now /v1/topic-trends, with categories

    Topic Trends: what people are talking about right now, by region. Content Trends: video formats creators are copying. The topic feed formerly called Pop culture & News now has one name and its own paths: GET /v1/topic-trends (date range), GET /v1/topic-trends/today (replaces /v1/trends/digest, and takes an optional limit of 1 to 100), GET /v1/topic-trends/emerging and GET /v1/topic-trends/regions. Each topic now carries a category: entertainment, memes, sports, fashion_beauty, gaming_tech, lifestyle, politics or news (null for a topic only minutes old). It replaces trend_type, which was always content. Filter with category or exclude_category (comma list or repeated); for example GET /v1/topic-trends/today?region=au&exclude_category=politics,news is pop culture without politics. An unknown value is a 400. Group titles read Topic Trends for Nov 7. Prices and rate limits are unchanged ($0.25 a call, regions free). The old /v1/trends, /v1/trends/digest, /v1/trends/emerging and /v1/trends/regions keep working with their exact old response. They are marked deprecated in the OpenAPI spec and send Deprecation: true and a Link header to the new path. The webhook events trends.daily.completed and trends.region.completed keep their names. MCP: get_trends, get_trends_digest, get_emerging_trends and get_topic_trends keep their names and inputs, read the new paths, and take optional category and exclude_category. Guide: dev.virlo.ai/docs/topic-trends#moving-from-v1-trends.

October 2026

  1. Added

    Raw Meta ads: live Meta Ad Library data for $0.01

    Five new GET routes under /v1/raw/meta return live ads and advertisers from the public Meta Ad Library in one normalized schema: ads/search (q), ads/:ad_id, advertisers/search (q), and an advertiser's ads by page ID (advertisers/:page_id/ads) or by name (advertisers/ads?name=). Ad search and advertiser ads take country (ISO code or ALL, default ALL), status (active, inactive, all; default active) and media_type (all, image, video, meme, none; default all); advertiser search takes country. reach, spend and impressions are { lower, upper } ranges (spend adds currency) and are null unless the ad was shown in the EU or UK or is a political or issue ad. Advertiser ads return { data, advertiser, pagination }, where advertiser names the advertiser a name resolved to. Advertiser search returns { data } with no pagination. Lists page with cursor like the other raw routes, and a cursor only works with the same filters (400 invalid_cursor otherwise). Media links expire after a few days. Every call costs 1 credit ($0.01), including an empty result; 4xx and 5xx responses are free. See /docs/raw/meta-ads.

  2. Changed

    Trend products named to match the app: Pop culture & News and Content Trends

    The two trend products now use the same names as the Virlo app. Pop culture & News (/v1/trends, /v1/trends/digest, /v1/trends/emerging, /v1/trends/regions; MCP get_trends, get_trends_digest, get_emerging_trends) is what people are talking about, by region. Use it to decide what to talk about. Content Trends (/v1/content-trends, /v1/content-trends/:id; MCP get_content_trends, get_content_trend) are video formats creators are copying right now. Use them to decide what to make. For a few hours on Oct 21 the docs called them Topic Trends and Format Trends. Only names and descriptions changed: routes, parameters, response fields, OpenAPI tags and schemas, MCP tool names and docs URLs are the same, so nothing needs updating on your side. See /docs/topic-trends and /docs/content-trends.

  3. Added

    Content Trends: video formats creators are copying

    Two new GET routes serve Content Trends, the repeatable video formats creators are copying right now, found by the Virlo detector and reviewed by the Virlo team before they are published. /v1/content-trends lists the published formats with filters for lifecycle (new, rising, peaking, fading, archived; live stages by default), platform, made_with_ai_tool, is_sound_meme, brand_safety, language, region and client_fit (b2b_saas, clinic_healthcare, consumer_brand, local_business), a sort (default, newest, creators_7d, views) and examples (0 to 16 videos per trend, default 3), with page and limit and an exact total. /v1/content-trends/:id returns one trend with all its examples. Each trend carries its recipe, what stays the same and what creators swap in, its lifecycle stage, creators_7d against creators_prev_7d, a 30-day series (the last 7 days are partial while videos are still being found), client fit and example videos with is_paid and verified_fit. Data refreshes hourly. The list costs 25 credits ($0.25) and one trend 5 credits ($0.05). These are formats, not the news and culture topics of /v1/trends. MCP clients get two matching tools: get_content_trends and get_content_trend (65 tools total). See /docs/content-trends.

  4. Added

    Raw data: live TikTok, YouTube Shorts and Instagram Reels data for $0.01

    Seven new GET routes under /v1/raw/:platform return live, unprocessed data from the platform in one normalized schema, the same on tiktok, youtube and instagram: keyword search (q), hashtag/:hashtag, video (url or id), video/comments, video/transcript (TikTok and YouTube; Instagram returns 400 unsupported_platform), creator/:handle and creator/:handle/videos. YouTube search, hashtag and creator videos return Shorts only, and Instagram returns Reels only. Each call is synchronous and returns one page; lists carry pagination.next_cursor and has_more, and you pass cursor for the next page (no limit; cursors are opaque and short-lived, and a bad one returns 400 invalid_cursor). Every call costs 1 credit ($0.01), including an empty page; 4xx and 5xx responses are free. MCP clients get seven matching tools: raw_search, raw_hashtag, raw_video, raw_comments, raw_transcript, raw_creator and raw_creator_videos (62 tools total). See /docs/raw.

  5. Changed

    Sound search needs a word of 3+ letters or digits

    GET /v1/sounds/search now returns 400 with code validation_error when q has no run of 3 or more letters or digits (for example dj, a b or emoji only). Such queries could not use the title index and read every sound, taking several seconds. Add a word: dj snake works. This is the same rule GET /v1/hooks/search already uses.

  6. Changed

    Creator sounds match names literally, and much faster

    GET /v1/sounds/by-creator/:platform/:handle matches display names whole and case-insensitively, and %, _ and \ are now ordinary characters instead of wildcards. A name containing them used to match other names too, and a name ending in \ returned an error. Lookups that took 5 to 35 seconds now take milliseconds. GET /v1/sounds/:sound_id and GET /v1/sounds/:sound_id/videos are also faster for sounds with many videos.

  7. Fixed

    Faster sounds, trends and digests; no charge for replies you never get

    GET /v1/sounds/trending and GET /v1/sounds/breakout could take over 30 seconds and come back as a 503 that was still billed. Both now answer in well under a second, as do GET /v1/trends, GET /v1/trends/digest and the video digests. Sound windows are now whole UTC days (today and the 6 days before for 7 days). A request that runs longer than 27 seconds is stopped and returns 504 with code request_timeout, and is not charged. Any request whose reply never reaches you (your connection closed first) is not charged either. Calls billed after a timeout before this fix were refunded to the affected teams.

September 2026

  1. Added

    Video duration and transcripts on agent videos

    Every video from GET /v1/agents/:id/videos now carries duration: the video's length in whole seconds, or null when the platform didn't report one. It is separate from sound.duration, the length of the audio track. Add include_transcript=true to get each video's transcript: text, segments (start and end in seconds, plus text) and source. source: "platform" is the transcript TikTok or YouTube published, usually as text without timestamps (segments: null). source: "transcribed" is Virlo's own speech-to-text of the audio, always with timestamps. Virlo transcribes videos the platform didn't caption, on agents with Data Intelligence, so Instagram Reels have transcripts only on those agents. transcript is null when a video has no speech or hasn't been transcribed yet. The flag is free and applies to videos only; sending it to /slideshows returns 400. MCP clients can pass include_transcript to get_keyword_search_results and get_niche_monitor_data with data_type: "videos".

  2. Changed

    Autopilot is on by default for API agents

    New recurring Content Research Agents now start with autopilot on, whether you create them through the API, over MCP, or in the Virlo app. There is no unlock step any more, so PUT /v1/agents/:id/autonomy no longer answers "Autopilot is locked". After each run, autopilot rewords the agent's searches, adds keywords (up to 15 in all), adds short-lived keywords for breaking stories in its niche, and widens collection after a thin run. It never removes a keyword or exclude term you set, and it never adds charges: the price per run is unchanged and it never starts an extra billed run. POST /v1/agents and PUT /v1/agents/:id take a new optional autopilot flag (default true), and autopilot: false keeps the configuration exactly as you send it. PUT /v1/agents/:id/autonomy accepts autopilot too. Agent responses add autopilot (true when on) and pinned_keywords (the keywords you set, which autopilot always keeps); autonomy_level and autopilot_unlocked are still returned but deprecated. Sending keywords or exclude_keywords on PUT /v1/agents/:id replaces the list and makes it the one autopilot keeps. The proposal review endpoints, GET /v1/agents/:id/proposals and POST /v1/agents/:id/proposals/:proposal_id/{apply,dismiss,revert}, are deprecated: they still work and send a Deprecation: true header. GET /v1/agents/:id/activity shows what autopilot changed and why. One-time agents are unaffected. MCP clients can pass autopilot to create_niche_monitor, update_niche_monitor, and set_niche_monitor_autonomy, and get_niche_monitor_proposals and review_niche_monitor_proposal are deprecated.

  3. Changed

    Hooks API: faster tiered search, one row per hook, effectiveness stats

    GET /v1/hooks/search now answers in well under a second (it could time out on common phrases) and returns results in tiers, each labelled with a new match_type: exact (the hook is your text, the reverse lookup), then contains (hooks using your phrase, strongest Virality Score first, so a phrase search surfaces the best-performing hooks built on it instead of short fragments), then similar (near-matches, only when needed). Phrase matching is whole-word and ignores punctuation, emoji and line breaks between words; q needs at least one word of 3+ letters or digits. Every hook row on trending, search and agent hooks now carries usage_count: identical hooks are collapsed to their strongest source, and usage_count says how many posts open with the same hook. GET /v1/agents/:id/hooks now returns each video once (videos found by several keywords used to repeat), coverage counts distinct videos, and pagination.total is exact. GET /v1/hooks/types adds median_weighted_score, strong_hit_rate (share of a hook type's videos scoring strong or better, the number to rank types by) and a sort parameter. category is now validated against the corpus vocabulary (an unknown value is a 400 listing the valid ones, instead of an empty result), trending and search serve the top 1,000 results (paging past that is a 400, not charged), and a query that runs too long returns 503 service_unavailable (not charged) instead of a 500. Prices are unchanged. See /docs/hooks.

August 2026

  1. Added

    Hooks API — 950k+ viral opening lines, verbatim, with receipts

    A new endpoint family for the highest-leverage creative decision in short-form: the hook. Virlo’s analysis pipeline extracts every hook verbatim (a contiguous substring of the first ~6 seconds of speech, or the frame-1 on-screen text — never paraphrased) and classifies it on two orthogonal vocabularies: hook_type (17 values — question, bold_claim, tutorial_promise, pov_setup, …) and visual_hook_type (12 values — text_hook, person_speaking_to_camera, …). The corpus holds 600k+ video hooks and 350k+ TikTok-slideshow hooks, growing by thousands daily, each joined to its source post’s metrics and Virality Score. Endpoints: GET /v1/hooks/types (free — taxonomy + per-value effectiveness stats from a daily snapshot), GET /v1/hooks/trending (25 credits / $0.25 — top hooks over a 7/14/30-day window, filterable by platform, category, hook type, visual type, language, min views), GET /v1/hooks/search (25 credits / $0.25 — trigram + substring search over the full corpus, multilingual; also the hook→source-video reverse lookup), GET /v1/hooks/library (10 credits / $0.10 — 4,000+ hand-curated fill-in-the-blank templates with the psychology behind each) plus a free /categories helper, and GET /v1/agents/:id/hooks (25 credits / $0.25, waived to free when the agent has Data Intelligence — ranked hook extraction from your own agent’s collected videos, with coverage counts that distinguish "no hook data yet" from "no hooks in this niche"). MCP clients get five new tools: get_trending_hooks, search_hooks, get_hook_types, get_hook_library, and get_agent_hooks (55 tools total). Everything is additive; as always the authoritative charge is the X-Cost header. See /docs/hooks.

  2. Added

    Content Research Agents now surface breaking events in their niche

    Recurring Content Research Agents now stay aware of what is happening in their topic. When an agent detects a breaking event in its niche — a death, record, launch, or controversy the space is suddenly talking about — via a burst in its own collected videos or a news scan, it surfaces the story and adds short-lived timely keywords to chase it. Read the detected events any time with the new free GET /v1/agents/:id/events: each event carries a title, summary, salience (0–10), lifecycle status (candidate / confirmed / dismissed / expired), the timely keywords, and evidence videos ([{ url, views, description }]), active events first. Subscribe to the new content_research_agent.event.detected webhook to get pushed the moment an event is confirmed — it fires between scheduled runs and carries the event plus what the agent did about it (action_taken: timely_keywords / collecting_early / breaking_ingest / none). MCP clients get a new get_niche_monitor_events tool. Everything is additive — existing agents, endpoints, and webhook payloads are unchanged, and one-shot agents are unaffected. See /docs/agents and /docs/webhooks.

  3. Added

    Satellite Hashtag Lookups — TikTok, Instagram, and YouTube Shorts

    Satellite gains a third lookup type: hashtags. GET /v1/satellite/hashtags/:platform/:hashtag (50 credits / $0.50) queues an async lookup of what is being posted under a tag on tiktok (native challenge feed), instagram (public Reels — best-effort coverage), or youtube (native hashtag page, Shorts only); poll GET /v1/satellite/hashtags/status/:job_id for free. Completed results carry the collected video corpus (max_videos 1–100, default 50; sort=top by views or recent by publish date) plus aggregate stats: view and engagement aggregates, posting velocity with an is_accelerating signal, duration_distribution, top_creators (10), related_hashtags (20 co-occurring tags), top_sounds (10), and a sample_quality corpus-health note. A depth query param scales the corpus: standard (default, the max_videos behavior), deep (~300 videos, +50 credits / $0.50 — $1.00 total; surcharge waived when combined with trend_analysis=true), or full (~500 videos, +150 credits / $1.50 — $2.00 total, $2.50 with trends) — TikTok and YouTube only; Instagram supports standard only and deeper tiers return 400 before billing. Add trend_analysis=true (+50 credits / $0.50 — $1.00 total) for LLM-detected content trends over a ~300-video deep fetch, identical in shape to sound-lookup trends. Repeating the same lookup within 6 hours returns the cached run free, and every lookup persists as a durable satellite run (type=hashtag_lookup) — re-read free forever via GET /v1/satellite/runs/:run_id. The satellite.lookup.completed webhook fires with data.type = "hashtag_lookup", and MCP clients get a new lookup_hashtag tool (49 tools total). See /docs/satellite.

July 2026

  1. Changed

    GET /v1/trends/emerging is now billed at $0.25

    GET /v1/trends/emerging now costs **$0.25** (25 credits) per call, the same as GET /v1/trends and GET /v1/trends/digest. It shipped as a free read on 2026-07-07 and became billable on 2026-07-30; several docs surfaces continued to describe it as free until 2026-08-02, and those have now been corrected. Per-plan rate limiting is unchanged, and GET /v1/trends/regions remains free. As always, the authoritative cost of any call is the X-Cost / X-Credits-Used response header. See /docs/credits.

  2. Added

    Emerging trends + momentum signal

    Trends now carry a live momentum signal, and there is a new endpoint for what is heating up right now. Every trend on GET /v1/trends and GET /v1/trends/digest gains an additive momentum object (status — new / rising / steady / fading, a 0–1 score, views_per_hour, and updated_at). Momentum is refreshed by a background loop roughly every 2 hours (configurable per region) that re-reads only exemplar view/like counts — no re-clustering. The new GET /v1/trends/emerging returns a flat, momentum-ranked list of early-stage (new/rising) trends for a region, composable with region (e.g. region=gb for "what's emerging in the UK right now"). It reads maintained state so it responds fast, is a free read, and is rate-limited per plan for user-triggered in-product use. All fields are additive; existing integrations are unaffected. See /docs/topic-trends.

  3. Added

    Regional trends — US, UK, and Australia

    Trends now support regions. GET /v1/trends and GET /v1/trends/digest accept an optional region query param — us, gb, or au for country-specific trends detected from that region's own curated sources, refreshed three times per day in the region's local timezone. Omitting region (or passing global) returns the worldwide feed, preserving the exact historical behavior — existing integrations are unaffected. The new free endpoint GET /v1/trends/regions lists available codes; more regions (including sub-regions like major city hubs) will be added over time, so discover codes at runtime instead of hard-coding. Responses gain additive fields: region and local_date on each trend group, plus detected_at, last_seen_at, origin_region_codes, and global_confidence on each trend — the latter two identify trends independently detected in multiple countries and promoted into the global feed. See /docs/topic-trends.

  4. Fixed

    Cadence shortcuts accepted on recurring agents

    Creating a recurring agent (POST /v1/agents with is_recurring: true) now accepts the "daily", "weekly", and "monthly" cadence shortcuts in addition to a raw cron expression — the shortcuts are normalized to their cron equivalents before scheduling, matching what the docs describe. Previously only a full cron expression was accepted and the shortcuts returned a 400 "Invalid cron expression". Cron expressions must still run at most once per day.

  5. Added

    Content Research Agents — the unified /v1/agents resource

    Orbit (one-shot search) and Comet (recurring monitoring) are unified into a single /v1/agents resource: POST /v1/agents with is_recurring: false for a one-shot search or is_recurring: true (+ cadence) for a recurring monitor. /v1/agents is a full superset of both legacy surfaces — every read lives at the same sub-path (/videos, /slideshows, /ads, /creators/outliers, /analysis[/latest], /trends[/latest], /hashtags, /benchmarks, /affinity, /creators/:creator_id/similar, /sounds) and legacy orbit_id/comet_id values are interchangeable with agent IDs, so reads work on either surface during migration. New capabilities on top: /runs history, an autonomy surface (/activity decision log, /proposals with apply/dismiss/revert, PUT /:id/autonomy for suggest vs autopilot), and a unified content_research_agent.run.completed webhook. Collection scope is system-managed (no min_views/time_range at creation) — filter by views/date/platform for free at read time on /videos. Discovery reads (hashtags, benchmarks, affinity, similar creators, trending sounds) now work for one-shot agents too, not just recurring monitors.

  6. Deprecated

    Orbit and Comet endpoints — removed on August 3, 2026

    The /v1/orbit and /v1/comet endpoint families are deprecated in favor of the unified /v1/agents resource and will be removed on **August 3, 2026**. Until then they keep working unchanged, and because IDs are interchangeable, migration is a same-path rename (/v1/orbit/:id/videos → /v1/agents/:id/videos, etc.). Create-time min_views / time_range / time_period are accepted but ignored (collection is system-managed); move filtering to read-time query params. Legacy orbit.run.completed / comet.run.completed webhook events keep firing until removal — subscribe to content_research_agent.run.completed going forward. See the migration guide at /docs/agents.

June 2026

  1. Added

    TikTok-genre discovery for Comet niche monitors

    Comet niche monitors gain a suite of free TikTok-genre discovery reads. GET /v1/comet/:id/hashtags returns per-hashtag analytics (volume, total/avg views, avg engagement, run-over-run growth + lifecycle, and top creators per tag; sort=volume|growth|avg_views). GET /v1/comet/:id/benchmarks returns genre norms (median engagement rate, followers, niche video count, and posting frequency) bucketed by follower tier (nano/micro/mid/macro). GET /v1/comet/:id/affinity (exploratory) returns genre adjacency — dominant creator topics plus co-occurring hashtags and sounds. GET /v1/comet/:id/creators/:creator_id/similar (exploratory) ranks niche creators by shared hashtags and sounds with a target creator. All are free reads, consistent with existing Comet sub-resources.

  2. Changed

    Trending sounds, rising creators, and hashtag-token genres for Comet

    GET /v1/comet/:id/sounds now accepts sort=rising / growth_7d to rank sounds by run-over-run growth in niche usage (the "what sound is breaking out in this genre right now" signal); every row additionally carries growth_video_count, growth_views, and a new/rising/steady/fading lifecycle label. GET /v1/comet/:id/creators/outliers now accepts order_by=rising (true run-over-run velocity from per-run snapshots, transparently falling back to the weighted-outlier ranking on a young monitor) plus follower_tier (nano/micro/mid/macro) and category (topic substring) filters. Comet keywords now normalize hashtag-style tokens — #progressivehouse and progressive house resolve to the same keyword. All additive; existing calls are unchanged.

  3. Added

    Sound → artist resolution on sound details

    GET /v1/sounds/:sound_id now always returns a track_resolution object that maps a sound to its canonical recording — status (unresolved | pending | resolved | not_found), artist_name, isrc, spotify_track_id, spotify_artist_id, release_status, resolution_source, release_date, confidence, and resolved_at. Resolution is lazy: pass resolve=true to trigger an on-demand Spotify track match. A fresh resolution adds the sound_artist_resolution feature cost ($0.10); re-reads of an already-resolved sound stay free even with resolve=true.

May 2026

  1. Changed

    Trending sounds now means recently trending

    GET /v1/sounds/trending now defaults to sort=videos_7d — sounds ranked by # videos published using each sound in the last 7 days, the recency-weighted "what is rising right now" signal. videos_30d is also available. The legacy sorts usage_count and video_count (all-time greatest hits) remain available for callers asking reach-not-momentum questions. Velocity sorts include a new videos_in_window field on each item, and the response echoes the sort mode at the top level.

  2. Added

    Breakout sounds endpoint

    New GET /v1/sounds/breakout ($0.25) surfaces sounds with the highest recent-burst ratio — rapidly rising from a small baseline. Distinct from /v1/sounds/trending: trending favours large absolute weekly volume (mature sounds still gaining lots of videos), while breakout favours sounds where almost all activity happened in the last 7 days. Score = videos_7d × (videos_7d / videos_90d). Each item carries videos_7d, videos_30d, videos_90d, burst_ratio, and breakout_score. Tunable via min_recent / min_baseline to control the noise floor.

  3. Fixed

    Owner attribution for music-label sounds

    Sound responses now expose the artist name on owner_nickname for music-label tracks (Espresso, Anti-Hero, Laxed, etc.) where TikTok does not assign an individual creator handle. Previously these fields were null because our normalizer only read TikTok's owner_handle/owner_nickname fields, which are empty for licensed music. We now also read the artist from matched_song.author (preferred) or author, populating owner_nickname for ~46K previously-unattributed TikTok sounds going forward, and via a one-time backfill for existing sounds.

April 2026

  1. Changed

    Data Intelligence pricing

    Orbit and Comet requests with data_intelligence_enabled=true now charge 150 credits ($1.50) instead of 50 credits ($0.50) to reflect the additional AI analysis cost.

    Commits:0d3160e4a95bcd
  2. Fixed

    Auto top-up cooldown raised to 5 minutes

    Reduced unnecessary top-up checks during high-volume bursts. Auto top-ups now fire at most every 5 minutes per account.

    Commits:b5c3cc2
  3. Added

    Data Intelligence layer

    Optional AI analysis layer that surfaces topics, sentiment, demographic fit, and viral potential alongside Orbit and Comet results.

    Commits:094c1d0b7034d6
  4. Added

    Sound API — 8 new endpoints

    Audio intelligence is now first-class. New endpoints: GET /v1/sounds/trending, /v1/sounds/search, /v1/sounds/{id}, /v1/sounds/{id}/videos, /v1/sounds/usage-history, /v1/sounds/by-creator/{creator_id}. Sound metadata is also enriched into Orbit, Comet, Satellite, and Tracking video responses.

    Commits:59d5b6b5b8baa0
  5. Added

    Webhooks API

    Subscribe to events with POST /v1/webhooks (also GET, PATCH, DELETE). Supports tracking cycle completion, outlier detection, paused events, creator post collection, and posting cadence analysis. Real-time integrations no longer need polling.

    Commits:7218170aaedf89dbcc71e
  6. Changed

    Endpoint convention aligned to /:entity/:id/:sub

    Analysis and trends endpoints have been normalized so that all sub-resources sit under /:entity/:id/:sub. The previous routes still resolve but new integrations should use the consistent shape.

    Commits:4654e6d
  7. Fixed

    Internal fields no longer leak into responses

    Tracking and Comet responses now strictly enforce a public field allowlist; internal scoring/debug fields have been removed.

    Commits:0673b56
  8. Added

    Unified viral insights & trends endpoints

    New endpoints: GET /v1/comet/{id}/trends, /v1/comet/{id}/trends/history, /v1/comet/{id}/analysis, /v1/comet/{id}/analysis/history (and the matching /v1/orbit/{id}/... set). Detail responses now expose analysis_data, analysis_batch_start, and analysis_batch_end.

    Commits:778c721
  9. Added

    Slack as a webhook destination

    Tracking event webhooks can now post directly to Slack with no glue code.

    Commits:a6063a2
  10. Added

    Slideshow format support

    Orbit and Comet now return TikTok slideshows (multi-image carousels) alongside individual videos, with an is_slideshow flag for filtering.

    Commits:6f7ee373ae4f46
  11. Added

    Satellite batch polling endpoint

    Poll long-running batch creator lookups with GET /v1/satellite/creators/batch/{batch_id}.

    Commits:e60f313
  12. Changed

    Tracking snapshots use a single `total_views` metric

    Per-platform view counters were collapsed into one cross-platform total_views field for cleaner analytics.

    Commits:83e889a
  13. Added

    Enterprise Phase 1 — creator posts, posting cadence, batch lookups

    New endpoints: POST/GET /v1/tracking/creators/{id}/posts (standard / deep / full collection tiers), /v1/tracking/creators/{id}/posting-cadence, and POST/GET /v1/satellite/creators/batch for bulk lookups with AI category tagging. Video responses now include is_duet and is_stitch.

    Commits:b00c7836b37228ccc0e44fc6594380827b7430a0e34fd2b65
  14. Added

    Virality Score (weighted_score)

    New optional weighted_score field returned by Satellite, Orbit, and Comet responses. Combines engagement, growth, and audience size into a single ranking signal. Available as a sortBy value on outlier endpoints. (Renamed from "Virlo Score" prior to launch.)

    Commits:a342558592f3eebca900f2bf4b7e91d7c44
  15. Fixed

    Free GET endpoints no longer charge credits

    Credit deduction is now method-aware — GET requests against credit-free endpoints are no longer charged.

    Commits:725601b
  16. Added

    Bi-weekly and monthly Tracking cadences

    Tracking and Comet now accept bi_weekly (14-day) and monthly (30-day) scrape cadences alongside the existing daily and weekly options.

    Commits:4278f16a6220df
  17. Added

    Snapshot deltas + search filtering on Tracking

    Tracking responses now include delta_* fields showing change from the previous snapshot, and Tracking list endpoints accept a search query parameter for filtering by handle or title.

    Commits:e2b8bba
  18. Added

    Account balance endpoint

    Check remaining credits programmatically with GET /v1/account/balance.

    Commits:e4f3ad9
  19. Performance

    Hashtag stats are 100× faster

    Replaced a full-table-scan RPC with a materialized view. Median hashtag stats latency dropped from ~6s to ~59ms.

    Commits:025a032
  20. Added

    Dollar-based billing headers

    Every billable response now includes X-Cost and X-Balance-Remaining headers. When credits run out, the API returns 402 Payment Required with a funding link in the error body.

    Commits:a0de5dc

March 2026

  1. Performance

    Faster, more reliable TikTok data

    TikTok data now arrives faster end to end and fails less often. TikTok transcripts are also ready sooner.

    Commits:52d674b8f0c3e7
  2. Added

    v1 Tracking API

    New endpoints: POST /v1/tracking/creators and POST /v1/tracking/videos for monitoring creators and videos over time, with snapshot history and outlier detection. Returns 402 Payment Required when account credits are insufficient before starting a job.

    Commits:882bd423e3b842666465d
  3. Removed

    On-demand `/report` endpoints removed

    AI analysis is now generated automatically on every Tracking cycle, so the standalone POST .../report routes have been retired. Pull analysis from the regular detail endpoint instead.

    Commits:0253924
  4. Added

    Full OpenAPI response schemas

    All /v1 endpoints now publish full Swagger/OpenAPI type definitions, including nullable/array shapes — making MCP and AI-agent auto-generation work cleanly.

    Commits:1d08d3b318110d
  5. Performance

    Faster, more reliable YouTube data

    YouTube data now arrives faster and fails less often.

    Commits:beea42b
  6. Deprecated

    Non-`/v1` endpoints deprecated

    Legacy unversioned endpoints are now marked deprecated. They continue to work but new integrations should use the /v1 prefix. A removal date will be announced in advance.

    Commits:b0775c8
  7. Added

    Public OpenAPI spec at `/openapi.json`

    The full Swagger/OpenAPI document is now exposed at GET /openapi.json for MCP servers and AI agents to discover the API automatically.

    Commits:2ddd647
  8. Added

    Intent classification on creators and videos

    Responses now include an AI-derived intent field that classifies content by user intent (e.g. educate, sell, entertain) so customers can segment results by motivation.

    Commits:5e775cd8536f71
  9. Added

    Auto top-up trigger on credit deduction

    Billable POST requests now trigger an account-level credit top-up check. Reduces the chance of mid-burst 402 errors for accounts with auto-recharge enabled.

    Commits:35e8204
  10. Changed

    `time_period` is now required on analytics endpoints

    Removed the implicit default to make timeframe explicit and avoid surprising aggregate windows. Pass time_period (e.g. 7d, 30d, 90d) on hashtag and video analytics calls.

    Commits:7d7848f
  11. Removed

    `creditsUsed` field removed from responses

    Per-response credit accounting has moved to the X-Cost response header (added 2026-04-01). The legacy creditsUsed body field has been removed.

    Commits:1efee9f
  12. Added

    Persistent Instagram thumbnails

    Instagram media thumbnails are now cached and rewritten to long-lived URLs, fixing the 24-hour image expiration that was breaking downstream storage.

    Commits:cfe311b57a4340

February 2026

  1. Added

    Video outlier detection on Comet

    New endpoint GET /v1/comet/{id}/video-outliers surfaces videos with anomalous engagement or growth within a Comet niche.

    Commits:2abc086
  2. Added

    Satellite batch creator lookups

    Run bulk creator profile lookups asynchronously and poll for results. Useful for ingesting large creator lists without hitting per-request rate limits.

    Commits:530896b
  3. Performance

    Video ingestion pipeline rewrite

    Full rewrite of the video ingestion pipeline with a new queue architecture. Faster processing, better data quality, and dramatically fewer ingestion failures during traffic spikes.

    Commits:d98eb8b292c2ee
  4. Added

    Teams and team-level credits

    New POST /v1/teams/* endpoints for creating teams, managing members, and inviting collaborators. Credits are now pooled at the team level so multiple API keys can share a single balance.

    Commits:623832c175ee7e
  5. Added

    Satellite — unified creator profiles

    New endpoint GET /v1/satellite/creators/{handle} returns a single cross-platform profile (TikTok, Instagram, YouTube) with normalized stats, recent posts, and category tags.

    Commits:d642ea2
  6. Added

    `/v1` API launch

    Versioned API surface launched with standardized snake_case naming, consistent envelopes, and explicit schemas. New routes: /v1/hashtags, /v1/comet, /v1/orbit, /v1/videos, /v1/trends, plus per-platform /v1/{tiktok,instagram,youtube}/* endpoints.

    Commits:fdad101
  7. Added

    Creator outlier detection

    New endpoints GET /v1/orbit/{id}/creator-outliers and GET /v1/comet/{id}/creator-outliers surface creators with abnormal growth or engagement spikes — useful for catching breakouts and flagging suspicious activity.

    Commits:1fd3eb38f0b7e2

January 2026

  1. Added

    Hashtag performance & Meta ads endpoints

    New endpoints: GET /hashtags/{id}/performance (per-hashtag time-series) and POST /comet/{id}/ads (Meta/Facebook ad creative discovery scoped to a Comet niche).

    Commits:81f48b6565b40a

December 2025

  1. Added

    Comet — custom creator-niche intelligence

    New endpoints POST /comet and GET /comet/{id} for analyzing custom creator niches and discovering opportunities. Customers can define their own niche definitions instead of being limited to preset categories — Comet then groups videos by AI-derived theme.

    Commits:d096297567cb9a6e4b87e84fe5adcbd0aade477032

November 2025

  1. Added

    Orbit AI analysis

    Orbit responses now include AI-generated keyword trend and creator insight summaries, powered by a new analysis service.

    Commits:0faaeb6eece370a997b9b
  2. Added

    `keyword` field on video search results

    Video search responses now echo back the keyword that matched, so downstream pipelines can attribute results without re-tracking the query.

    Commits:1b52b90
  3. Added

    Orbit — keyword-based social listening

    New endpoints POST /orbit/keyword-searches and GET /orbit/keyword-searches for discovering creators producing content around specific keywords across TikTok, Instagram, and YouTube.

    Commits:50e880f
  4. Added

    Per-request credit pricing

    Introduced a credit-based pricing model: each endpoint deducts a defined credit cost from the account balance. See the Pricing page for the full table.

    Commits:b53f8cf

October 2025

  1. Added

    Multi-platform support on hashtags & videos

    Hashtag and video endpoints now accept a platform query param (tiktok, instagram, youtube) to scope results to a single network.

    Commits:402bc6e
  2. Added

    Niche trends endpoint

    New endpoint GET /niches/{niche_id}/trends for niche-scoped trend discovery.

    Commits:74e61b5
  3. Added

    Virlo API v0 — initial launch

    Public API launched with three core endpoints: GET /hashtags, GET /videos, GET /trends. Covers TikTok and Instagram at launch with YouTube to follow.

    Commits:1e75d7a

Looking for a specific change? Email us.