Sounds
See which songs and audio clips (sounds) are catching on across TikTok, YouTube, and Instagram, then dig into one.
- What it does
- Lists trending and breakout sounds, and looks up one sound or an artist's catalog.
- You send
- A search word, a sound's
id, an artist's name, or nothing for the trending lists. - You get back
- Sounds with usage numbers, or one sound's videos, daily history, and real song.
- Cost
- $0.05 to $0.25 per request, even when nothing matches. Real-song matching adds $0.10 once per sound. Errors and Agent sounds are free.
- Sounds used most this week: Trending sounds
- Sounds suddenly taking off: Breakout sounds
- A sound, found by its title: Search sounds
- One sound's stats and real song: Sound details
- Top videos using a sound: Sound videos
- How a sound grew day by day: Usage history
- Every sound credited to an artist: Creator sounds
- Sounds in your agent's videos: Agent sounds
These use Virlo's stored data. For fresh videos on one TikTok or Instagram sound, use Sound lookup: $0.50, or $1.00 with trend analysis.
Sound basics
Sound IDs. id is Virlo's ID for a sound. Copy it from any list below or from a video's sound field. external_id is the platform's own ID and returns 404 where id is expected.
Which count to trust. usage_count is TikTok's all-time count of videos using the sound. Other counts only cover Virlo's data. To compare sounds, use videos_in_window (Trending) or videos_7d (Breakout). On Trending and Creator sounds, video_count and avg_views read too low, often 0.
Platforms. TikTok has the fullest data. YouTube and Instagram sounds never have usage_count and are never marked commerce music. YouTube has no duration. Any field can be null, and owner_handle often is.
Images. cover_url, thumbnail_url, and avatar_url usually hold a file name. Put it after https://auth.virlo.ai/storage/v1/object/public/ and the matching folder: sound-covers/, thumbnails/, or avatars/. Values starting with https:// are already links. "" or null means no image.
Pages. On Trending's 7-day and 30-day sorts, Breakout, and Agent sounds, pagination.total is not a real count. Keep paging while has_next_page is true (Pagination).
Errors. Most bad options return a free 400, and an unknown sound a free 404 (Errors). Some typos are ignored and still charged: a commerce_only other than true, a misspelled Creator sounds platform, and unknown options on Sound details.
Fields on every sound
Every sound has id, external_id, title, platform, duration (seconds), cover_url, owner_handle, owner_nickname (who the platform credits, not always the artist), is_original, is_commerce_music (true when TikTok clears it for ads and branded posts), and usage_count.
Trending sounds
The sounds used in the most new videos, over the last 7 days by default. Set platform, or YouTube sounds often fill the top.
Query parameters
- Name
platform- Type
- string
- Description
tiktok,youtube, orinstagram. Default: all three.
- Name
sort- Type
- string
- Description
videos_7d(default) orvideos_30d: most new videos in that window.usage_count: most used all time (TikTok first).video_count: avoid. It only reorders each page of theusage_countlist.
- Name
commerce_only- Type
- boolean
- Description
Exactly
truekeeps only TikTok sounds cleared for ads. Other values, likeyes, are ignored and you pay for the full list.
- Name
limit- Type
- number
- Description
1 to 100. Default 20.
- Name
page- Type
- number
- Description
Default 1.
Full field reference
Each result has the fields on every sound, plus video_count, avg_views, and videos_in_window (the ranking number, on the 7-day and 30-day sorts only).
Request
curl -G https://api.virlo.ai/v1/sounds/trending \
-H "Authorization: Bearer YOUR_API_KEY" \
-d platform=tiktok \
-d sort=videos_7d \
-d limit=20
Response
{
"data": [
{
"id": "53927570-5593-4bfe-b604-496d5aabd328",
"external_id": "7668271352941742081",
"title": "Vibin",
"platform": "tiktok",
"duration": 60,
"cover_url": "13cb83d12e080a4b9e2609f79bebf1619b7700e6c2988b4a2c2ea8fe53819b61.jpg",
"owner_handle": null,
"owner_nickname": "Wxoda",
"is_original": false,
"is_commerce_music": false,
"usage_count": 245774,
"video_count": 0,
"avg_views": 0,
"videos_in_window": 51
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 21,
"total_pages": 2,
"has_next_page": true,
"has_prev_page": false
},
"sort": "videos_7d"
}
Breakout sounds
Sounds suddenly taking off from a quiet start, like 20 videos this week after about 1 a week before.
Results rank by acceleration: (videos_7d + 1) / (prior_weekly + 1), where prior_weekly is the weekly average over days 8 to 35 ago. A sound needs at least min_recent videos this week, between min_baseline and 200 in the 4 weeks before, and an acceleration of 2+. Sounds above 200 show only in Trending.
Query parameters
- Name
platform- Type
- string
- Description
tiktok,youtube, orinstagram. Default: all three.
- Name
commerce_only- Type
- boolean
- Description
Exactly
truekeeps only TikTok sounds cleared for ads, as in Trending.
- Name
min_recent- Type
- number
- Description
Minimum videos in the last 7 days. Default 3.
- Name
min_baseline- Type
- number
- Description
Minimum videos in days 8 to 35 ago. Default 3.
- Name
limit- Type
- number
- Description
1 to 100. Default 20.
- Name
page- Type
- number
- Description
Default 1.
Full field reference
Each result has the fields on every sound, plus videos_7d, videos_30d, videos_90d, prior_weekly, and acceleration (ties go to more videos_7d). Two older scores always come back too: burst_ratio (videos_7d / videos_90d) and breakout_score (videos_7d * burst_ratio).
Request
curl -G https://api.virlo.ai/v1/sounds/breakout \
-H "Authorization: Bearer YOUR_API_KEY" \
-d platform=tiktok \
-d limit=20
Response
{
"data": [
{
"id": "f3c375de-0cac-4a4f-a23e-7fdfc13874d1",
"external_id": "7678293159960676415",
"title": "Courtly Elegance Boccherini",
"platform": "tiktok",
"duration": 45,
"cover_url": "5a2e780f5bd991284fac706d04d0c0a3edc3787c057e21b8db823df33c9beb07.jpg",
"owner_handle": null,
"owner_nickname": "Lucien Marceau",
"is_original": false,
"is_commerce_music": false,
"usage_count": 207622,
"videos_7d": 10,
"videos_30d": 13,
"videos_90d": 13,
"burst_ratio": 0.7692,
"breakout_score": 7.6923,
"prior_weekly": 0.75,
"acceleration": 6.286
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 21,
"total_pages": 2,
"has_next_page": true,
"has_prev_page": false
}
}
Search sounds
Find sounds whose title contains your text exactly as typed. Case doesn't matter, but spelling and word order do: lofi beats finds "chill stylish lofi beats", while lofi beets finds nothing but is still charged. When unsure, search one distinctive word.
Results sort by usage_count, so TikTok comes first.
Query parameters
- Name
q- Type
- string
- Required
- *
- Description
At least 2 characters. Commas and parentheses count as spaces.
- Name
platform- Type
- string
- Description
tiktok,youtube, orinstagram. Default: all three.
- Name
limit- Type
- number
- Description
1 to 100. Default 20.
- Name
page- Type
- number
- Description
Default 1.
Request
curl -G https://api.virlo.ai/v1/sounds/search \
-H "Authorization: Bearer YOUR_API_KEY" \
-d q=lofi+beats \
-d platform=tiktok \
-d limit=20
Response
{
"data": [
{
"id": "81a0c517-fbb2-45ca-b2f5-d6d62d3e1a14",
"external_id": "7358901665129662465",
"title": "chill stylish lofi beats(1535963)",
"platform": "tiktok",
"duration": 190,
"cover_url": "a6c30ceb5263d65db6be1b7161e24c7438ac7a97554f4ed436efe455bef948f5.jpg",
"owner_handle": null,
"owner_nickname": "Enokido",
"is_original": false,
"is_commerce_music": true,
"usage_count": 50960
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 9,
"total_pages": 1,
"has_next_page": false,
"has_prev_page": false
}
}
Sound details
One sound's stats (video count, average views, top video), plus the real song behind it if you ask.
Find the real song
Add resolve=true to get the artist, the ISRC (a recording's standard code), and a Spotify ID when Spotify made the match. The answer is in track_resolution (always present).
- Cost. The first match adds $0.10 ($0.15 total), found or not, once per sound. Later reads cost $0.05.
- Time. A first match can take 15 seconds or more. If the match isn't done yet,
statussaysunresolvedorpendingand you pay $0.05. Call again in about a minute. - Already matched. Virlo matches some sounds in the background. If
statusisresolvedornot_found,resolve=truewon't look again, so leave it off.
Path parameters
- Name
sound_id- Type
- string
- Required
- *
- Description
Virlo's sound
id, notexternal_id.
Query parameters
- Name
resolve- Type
- boolean
- Description
trueor1. Other values are ignored.
Full field reference
The fields on every sound, plus:
- Name
total_videos- Type
- integer
- Description
Videos in Virlo's data using the sound. Stops counting at 1,000.
- Name
avg_views- Type
- integer
- Description
Their average views (over at most 1,000).
- Name
top_video_url- Type
- string | null
- Description
The most-viewed one.
- Name
track_resolution.status- Type
- string
- Description
unresolved(not matched yet),pending(matching now),resolved, ornot_found(no confident match).
- Name
track_resolution.artist_name- Type
- string | null
- Description
The artist. Can differ from
owner_nickname.
Request
curl -G https://api.virlo.ai/v1/sounds/8f6e5c50-1451-4007-a120-92744e632dad \
-H "Authorization: Bearer YOUR_API_KEY" \
-d resolve=true
Response
{
"data": {
"id": "8f6e5c50-1451-4007-a120-92744e632dad",
"external_id": "7171140178143266818",
"title": "I'll Never Let You Go",
"platform": "tiktok",
"duration": 62,
"cover_url": "8bef57e2f1987f109f345a7b603ab2635277e7cb4f37a26ada16c11d07252572.jpg",
"owner_handle": null,
"owner_nickname": "BCD Studio",
"is_original": false,
"is_commerce_music": true,
"usage_count": 86631999,
"total_videos": 633,
"avg_views": 1596202,
"top_video_url": "https://www.tiktok.com/@cristineni34/video/7177832058478234885",
"track_resolution": {
"status": "resolved",
"artist_name": "BCD Studio",
"isrc": "SGB502290414",
"spotify_track_id": "4fDHlmlEWbJnHa7dO5MZwW",
"spotify_artist_id": "6ENUuaqy7QqbKD4M1X3siN",
"apple_music_id": null,
"release_status": "released",
"resolution_source": "spotify",
"release_date": null,
"confidence": 1,
"resolved_at": "2026-07-02T01:07:01.982+00:00"
}
}
}
Sound videos
Videos in Virlo's data that use a sound, most-viewed first, to see how creators use it.
Path parameters
- Name
sound_id- Type
- string
- Required
- *
- Description
Virlo's sound
id, notexternal_id.
Query parameters
- Name
sort- Type
- string
- Description
views_desc(default): most views first.publish_date_desc: newest first.
- Name
platform- Type
- string
- Description
tiktok,youtube, orinstagram. Rarely needed.
- Name
limit- Type
- number
- Description
1 to 100. Default 20.
- Name
page- Type
- number
- Description
Default 1.
Full field reference
Each video has id, url, description (can be ""), platform, views, likes, shares, comments, bookmarks (saves), hashtags, is_duet, is_stitch, and:
- Name
publish_date- Type
- string
- Description
No time zone marker. Read it as UTC.
- Name
thumbnail_url- Type
- string | null
- Description
A file name, often
""(see Images).
- Name
author- Type
- object | null
- Description
username,verified,followers(can benull),avatar_url.
Request
curl -G https://api.virlo.ai/v1/sounds/8f6e5c50-1451-4007-a120-92744e632dad/videos \
-H "Authorization: Bearer YOUR_API_KEY" \
-d sort=views_desc \
-d limit=20
Response
{
"data": [
{
"id": "43721b48-f4f0-4ae4-8677-3f187aac28a4",
"url": "https://www.tiktok.com/@cristineni34/video/7177832058478234885",
"description": "",
"platform": "tiktok",
"views": 23135811,
"likes": 600093,
"shares": 228445,
"comments": 15982,
"bookmarks": 32971,
"publish_date": "2022-12-16T19:34:22",
"hashtags": [],
"thumbnail_url": "",
"is_duet": false,
"is_stitch": false,
"author": {
"username": "cristineni34",
"verified": false,
"followers": 764158,
"avatar_url": "8ed0b0d3-b8af-478a-b20f-d27e65bd1d0c.webp"
}
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 633,
"total_pages": 32,
"has_next_page": true,
"has_prev_page": false
}
}
Usage history
A day-by-day record of one sound, from about one snapshot a day: TikTok's count, Virlo's count, and the change since the snapshot before.
Always set start_date. Snapshots come oldest first, and limit keeps the oldest. With no dates you get the first 90 ever recorded, which can be months old.
No pagination.
Path parameters
- Name
sound_id- Type
- string
- Required
- *
- Description
Virlo's sound
id, notexternal_id.
Query parameters
- Name
start_date- Type
- string
- Description
First day to include (YYYY-MM-DD).
- Name
end_date- Type
- string
- Description
Last day to include (YYYY-MM-DD).
- Name
limit- Type
- number
- Description
1 to 365. Default 90.
Full field reference
Each snapshot has usage_count (TikTok only), video_count_local, delta_usage_count, delta_video_count_local, and snapshot_at (UTC). Deltas compare with the previous row in this response, so the first row's are always null. A stray 0 snapshot shows as a fake drop and jump back. Ignore it.
Request
curl -G https://api.virlo.ai/v1/sounds/8f6e5c50-1451-4007-a120-92744e632dad/usage-history \
-H "Authorization: Bearer YOUR_API_KEY" \
-d start_date=2026-09-22 \
-d end_date=2026-09-24
Response
{
"data": [
{
"usage_count": 83700000,
"video_count_local": 628,
"delta_usage_count": null,
"delta_video_count_local": null,
"snapshot_at": "2026-09-22T05:00:00.015+00:00"
},
{
"usage_count": 84981718,
"video_count_local": 628,
"delta_usage_count": 1281718,
"delta_video_count_local": 0,
"snapshot_at": "2026-09-23T05:00:00.027+00:00"
},
{
"usage_count": 86353566,
"video_count_local": 630,
"delta_usage_count": 1371848,
"delta_video_count_local": 2,
"snapshot_at": "2026-09-24T05:00:00.019+00:00"
}
]
}
Creator sounds
Every sound credited to one artist or creator (their catalog), not the sounds they use in their videos. Your text is checked against each sound's credited handle, display name, and matched artist.
Start with the display name: tiktok/Kygo finds 6 sounds, while the handle tiktok/kygomusic finds none. Every try is charged, even an empty one or a misspelled platform.
Path parameters
- Name
platform- Type
- string
- Required
- *
- Description
tiktok,youtube, orinstagram.
- Name
handle- Type
- string
- Required
- *
- Description
Display name or handle,
@optional. Spaces become%20:Atomica%20Music.
Query parameters
- Name
sort- Type
- string
- Description
usage_count(default).video_count: avoid, as in Trending.
- Name
limit- Type
- number
- Description
1 to 100. Default 20.
- Name
page- Type
- number
- Description
Default 1.
Full field reference
Each sound has the fields on every sound, plus video_count and avg_views. The response also has aggregates:
- Name
aggregates.total_sounds- Type
- integer
- Description
Sounds in the whole catalog.
- Name
aggregates.total_ugc_videos- Type
- integer
- Description
Sum of
video_counton this page only, including the artist's own videos.
- Name
aggregates.total_usage_count- Type
- integer
- Description
Sum of
usage_counton this page only.
Request
curl -G https://api.virlo.ai/v1/sounds/by-creator/tiktok/Kygo \
-H "Authorization: Bearer YOUR_API_KEY" \
-d sort=usage_count \
-d limit=20
Response
{
"data": [
{
"id": "ede0f487-8998-45b5-aef0-802a83c1e821",
"external_id": "7094381072426747905",
"title": "Freeze",
"platform": "tiktok",
"duration": 60,
"cover_url": "fab1fb05c9863b5df89f8d81f22c109fa0e9d9b22c81bd36f0d5863d0a3318ef.jpg",
"owner_handle": null,
"owner_nickname": "Kygo",
"is_original": false,
"is_commerce_music": true,
"usage_count": 8492,
"video_count": 1,
"avg_views": 433216
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 6,
"total_pages": 1,
"has_next_page": false,
"has_prev_page": false
},
"aggregates": {
"total_sounds": 6,
"total_ugc_videos": 278,
"total_usage_count": 28183
}
}
Agent sounds
The sounds used most in the videos your Content Research Agent collected. Free. Here, video_count counts videos in the agent's results.
Path parameters
- Name
agent_id- Type
- string
- Required
- *
- Description
Your agent's ID. A malformed ID returns
400, and an agent you don't own returns404.
Query parameters
- Name
sort- Type
- string
- Description
video_count(default),usage_count, orrising(most new videos since the previous run; old namegrowth_7d). Unknown values fall back to the default.
- Name
limit- Type
- number
- Description
1 to 100. Default 20.
- Name
page- Type
- number
- Description
Default 1.
Full field reference
The fields on every sound, plus video_count, avg_views, and:
- Name
growth_video_count- Type
- integer | null
- Description
Change in
video_countsince the previous run, ornullwith no earlier run.
- Name
growth_views- Type
- integer | null
- Description
Change in their total views, also
nullwith no earlier run.
- Name
lifecycle- Type
- string
- Description
Total views against the previous run:
rising(up 25% or more),fading(down 25% or more),steady, ornew(no earlier run).
Request
curl -G https://api.virlo.ai/v1/agents/2b1f9c3d-7c4e-4d8a-9f12-6e8b4a2c1d05/sounds \
-H "Authorization: Bearer YOUR_API_KEY" \
-d sort=rising \
-d limit=20
Response
{
"data": [
{
"id": "9479ec9f-2150-40a9-8088-23b4b7979a76",
"external_id": "7274023553422772278",
"title": "Million Dolla Hip Hop",
"platform": "tiktok",
"duration": 188,
"cover_url": "acc0a71eb81d1cbb7bc487047488722a2671dfc2f448d1c8b844ec6900ca3156.jpg",
"owner_handle": null,
"owner_nickname": "Brentin Davis",
"is_original": false,
"is_commerce_music": false,
"usage_count": 86590,
"video_count": 2,
"avg_views": 53877,
"growth_video_count": 1,
"growth_views": 31792,
"lifecycle": "rising"
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 21,
"total_pages": 2,
"has_next_page": true,
"has_prev_page": false
}
}
