Music API by Popnable

Доступ до глобальних чартів Popnable - пісні, виконавці, відео та тренди зі 160+ країн в одному API.

Що ви можете зробити?
Миттєве автозаповнення

Швидкі результати з пошуком, толерантним до помилок друку.

Точне геоогородження

Пошук за містом, обмежуючим прямокутником або радіусом.

Багаті метадані місцеположення

Повертає ідентифікатори OSM, населення, відображуване ім'я та інше.

99.9 % Час роботи
1239.6ms Відповідь
10 req/s
0.01 Кредити / запит

Popnable Music API

Single endpoint that proxies Popnable API and returns normalized data for songs, trends, artists, charts and YouTube videos. The behavior is controlled by the action parameter.


POST https://api.yeb.to/v1/music/popnable

Common parameters

Параметр Тип Обов'язковий Опис
api_key string так Your YEB API key.
action string так Selects which Popnable v2 method to call. Supported values:
search, get-trends, get-songs, get-songs-by-trend, get-artists, get-artist-by-trend, get-daily-chart, get-weekly-chart, get-monthly-chart, get-artist-chart, get-videos.

Parameters by action

action Parameter Type Required Description
search keyword string так Search term (song/artist). Short text (~20 chars recommended).
get-trends ids string необов'язковий Comma-separated list of trend IDs. If omitted, Popnable may return all trends (depending on provider rules).
get-songs ids string так Comma-separated list of song IDs.
stats string необов'язковий yes / no – include Popnable stats.
charts string необов'язковий Comma-separated list of chart types, e.g. daily,weekly.
get-songs-by-trend trend string так Trend ID (country/region ID in Popnable).
day string так Date in YYYY-MM-DD format.
stats string необов'язковий yes / no – include stats.
charts string необов'язковий Charts for the returned songs, e.g. daily,weekly,monthly.
get-artists ids string так Comma-separated list of artist IDs.
stats string необов'язковий yes / no – include artist stats.
charts string необов'язковий Chart type, e.g. artists.
songs string необов'язковий yes / no – include songs for each artist.
get-artist-by-trend trend string так Trend ID (country/region).
day string так Date in YYYY-MM-DD format.
stats string необов'язковий Artist stats (yes/no).
charts string необов'язковий Chart type (usually artists).
get-daily-chart trend string так Trend ID (country/region).
day string так Date for the daily chart (YYYY-MM-DD).
get-weekly-chart trend string так Trend ID (country/region).
day string так Date for the weekly chart (YYYY-MM-DD).
get-monthly-chart trend string так Trend ID (country/region).
day string так Date for the monthly chart (YYYY-MM-DD).
get-artist-chart trend string так Trend ID (country/region).
day string так Date for the artist chart (YYYY-MM-DD).
get-videos yt_codes string так Comma-separated list of YouTube video codes (e.g. AbCdE123).
charts string необов'язковий Chart types, e.g. daily,weekly.
dailyStats string необов'язковий yes / no – include daily breakdown stats.
day string необов'язковий Reference day (YYYY-MM-DD). If omitted, current date may be used.

Приклади запитів

1) Search by keyword (action=search)
{
  "api_key": "YOUR_KEY",
  "action" : "search",
  "keyword": "preslava"
}
2) Song details by ID (action=get-songs)
{
  "api_key": "YOUR_KEY",
  "action" : "get-songs",
  "ids"    : "123",
  "stats"  : "yes",
  "charts" : "daily,weekly"
}
3) Video stats by YouTube code (action=get-videos)
{
  "api_key"   : "YOUR_KEY",
  "action"    : "get-videos",
  "yt_codes"  : "AbCdE123",
  "charts"    : "daily,weekly",
  "dailyStats": "yes",
  "day"       : "2025-01-05"
}

Інтеграції API

curl -X POST https://api.yeb.to/v1/music/popnable \
  -H "Content-Type: application/json" \
  -d '{"api_key":"YOUR_KEY","action":"search","keyword":"preslava"}'
use Illuminate\Support\Facades\Http;

Route::post('/music-popnable-demo', function () {
    $response = Http::post('https://api.yeb.to/v1/music/popnable', [
        'api_key' => config('services.yeb.api_key'),
        'action'  => 'search',
        'keyword' => 'preslava',
    ]);

    return $response->json();
});
use Illuminate\Support\Facades\Http;

$r = Http::post('https://api.yeb.to/v1/music/popnable', [
    'api_key' => 'YOUR_KEY',
    'action'  => 'get-songs',
    'ids'     => '123',
    'stats'   => 'yes',
    'charts'  => 'daily,weekly',
]);

print_r($r->json());
fetch('https://api.yeb.to/v1/music/popnable', {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: JSON.stringify({
    api_key   : 'YOUR_KEY',
    action    : 'get-videos',
    yt_codes  : 'AbCdE123',
    charts    : 'daily,weekly',
    dailyStats: 'yes',
    day       : '2025-01-05'
  })
})
  .then(r => r.json())
  .then(console.log);
import requests, json

payload = {
    "api_key": "YOUR_KEY",
    "action" : "get-songs-by-trend",
    "trend"  : "35",
    "day"    : "2025-01-05",
    "stats"  : "yes",
    "charts" : "daily,weekly"
}

r = requests.post('https://api.yeb.to/v1/music/popnable',
                  headers={'Content-Type': 'application/json'},
                  data=json.dumps(payload))

print(r.json())

Response example

{
  "data": [
    {
      "id": 123,
      "song_name": "Some Song",
      "day_released": "2025-01-05 12:34:56",
      "trend": "Bulgaria",
      "trend_flag": "https://popnable.com/images/flags/circle/bg.svg",
      "trend_id": 35,
      "singers": [
        { "singer_id": 777, "artist_name": "Preslava" }
      ],
      "videos": [
        { "yt_code": "AbCdE123" }
      ]
    }
  ],
  "meta": {
    "provider": "popnable",
    "upstream_response_code": 200,
    "upstream_error_number": null,
    "endpoint": "search"
  }
}
{
  "error": "Popnable: Access Denied.",
  "code": 403
}

Коди відповідей

КодОпис
200 SuccessЗапит оброблено успішно.
400 Bad RequestВалідація введення не пройдена.
401 UnauthorizedAPI-ключ відсутній або неправильний.
403 ForbiddenКлюч неактивний або не дозволений.
429 Rate LimitЗабагато запитів.
500 Server ErrorНепередбачена помилка.

music-popnable

music-popnable 0.0100 credits

Parameters

API Key
body · string · required
Action
body · string · required
Keyword
body · string
Trend IDs
body · string
Song IDs
body · string
Include Stats
body · string
Charts
body · string
Trend ID
body · string
Day
body · string
Artist IDs
body · string
Include Songs
body · string
YouTube Codes
body · string
Daily Stats
body · string

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

Music API by Popnable — Practical Guide

A hands-on guide to Music API by Popnable. Learn what each action does, the real-world problems it solves, which parameters actually matter, and how to read normalized responses for songs, artists, charts, trends and YouTube videos.

#What this API solves

One POST endpoint that proxies Popnable API and returns normalized JSON for search, trends, songs, artists, charts and YouTube videos. Use it when you need consistent data structures across multiple upstream calls, stable field names, predictable errors, and idempotent behavior suitable for caching.

#Endpoint & call model

#POST https://api.yeb.to/v1/music-popnable

  • Best for: Unified access to Popnable data with opinionated normalization.
  • How it works: You send an action plus its parameters; we call the corresponding Popnable v2 method and normalize the response.
  • Idempotent: Same input → same output; safe for caching and retries.
  • Billing: Each request costs a fixed amount of credits (see chip above), regardless of the action.

#Quick start

# 1) Search (songs/artists) by keyword
curl -X POST "https://api.yeb.to/v1/music-popnable" \
  -H "Content-Type: application/json" \
  -d '{ "api_key": "YOUR_KEY", "action": "search", "keyword": "preslava" }'
# 2) Songs by trend (country/region) for a specific day
curl -X POST "https://api.yeb.to/v1/music-popnable" \
  -H "Content-Type: application/json" \
  -d '{ "api_key": "YOUR_KEY", "action": "get-songs-by-trend",
        "trend": "35", "day": "2025-01-05", "stats": "yes", "charts": "daily,weekly" }'
# 3) YouTube videos (normalized + optional charts/daily breakdown)
curl -X POST "https://api.yeb.to/v1/music-popnable" \
  -H "Content-Type: application/json" \
  -d '{ "api_key": "YOUR_KEY", "action": "get-videos",
        "yt_codes": "AbCdE123,ZXCV987", "charts": "daily,weekly",
        "dailyStats": "yes", "day": "2025-01-05" }'

#Common parameters (used by all actions)

ParamRequiredWhat to pass (practical)Why it matters
api_key Yes Send server-side or via edge; avoid exposing in browser code. Auth & rate limiting.
action Yes One of: search, get-trends, get-songs, get-songs-by-trend, get-artists, get-artist-by-trend, get-daily-chart, get-weekly-chart, get-monthly-chart, get-artist-chart, get-videos. Selects the upstream Popnable v2 method.

#Actions explained (what each one solves)

Solves: quick lookup when you have a name fragment and need likely candidates (songs/artists).

ParamTypeReqNotes (practical)
keywordstringYesShort text (~20 chars). Use user input as-is (trimmed).
{
  "api_key": "YOUR_KEY",
  "action" : "search",
  "keyword": "preslava"
}
{
  "data": [
    { "id": 123, "song_name": "Some Song", "trend_id": 35, "singers": [ { "singer_id": 777, "artist_name": "Preslava" } ] }
  ],
  "meta": { "provider": "popnable", "upstream_response_code": 200, "endpoint": "search" }
}

Solves: obtain available trend IDs (countries/regions) to drive UI pickers or scheduled fetches.

ParamTypeReqNotes
idsstringNoComma-separated list of trend IDs to filter; omit to fetch all (subject to provider rules).

#action=get-songs

Solves: fetch details for known song IDs (e.g., to refresh a small cached set, or hydrate UI cards).

ParamTypeReqNotes
idsstringYesComma-separated song IDs.
statsstringNoyes/no include Popnable stats.
chartsstringNoComma list, e.g. daily,weekly.

#action=get-songs-by-trend

Solves: build daily feeds per country/region for discovery, newsletters, or archives.

ParamTypeReqNotes
trendstringYesTrend ID (country/region).
daystringYesDate YYYY-MM-DD.
statsstringNoyes/no.
chartsstringNoe.g. daily,weekly,monthly.

#action=get-artists

Solves: hydrate artist cards and detail pages from known IDs.

ParamTypeReqNotes
idsstringYesComma-separated artist IDs.
statsstringNoyes/no include artist stats.
chartsstringNoChart type (usually artists).
songsstringNoyes/no include songs for each artist.

#action=get-artist-by-trend

Solves: discover artists by country/region for a given day; useful for editorial picks.

ParamTypeReqNotes
trendstringYesTrend ID.
daystringYesDate YYYY-MM-DD.
statsstringNoyes/no.
chartsstringNoUsually artists.
songsstringNoyes/no include songs.

#Charts — daily/weekly/monthly/artist

Solves: pull historical chart snapshots for analytics, leaderboards, or recap posts.

ActionParamsNotes
get-daily-chart trend (string, req), day (YYYY-MM-DD, req) Country/region daily chart.
get-weekly-chart trend (string, req), day (YYYY-MM-DD, req) Weekly chart snapshot.
get-monthly-chart trend (string, req), day (YYYY-MM-DD, req) Monthly chart snapshot.
get-artist-chart trend (string, req), day (YYYY-MM-DD, req) Artists chart for the given trend/day.

#action=get-videos

Solves: normalize YouTube video data and optionally enrich with chart context and daily breakdowns.

ParamTypeReqNotes
yt_codesstringYesComma-separated video codes (AbCdE123).
chartsstringNoe.g. daily,weekly.
dailyStatsstringNoyes/no include daily breakdown.
daystringNoReference day YYYY-MM-DD.

#Reading & acting on responses

{
  "data": [
    {
      "id": 123,
      "song_name": "Some Song",
      "day_released": "2025-01-05 12:34:56",
      "trend": "Bulgaria",
      "trend_flag": "https://popnable.com/images/flags/circle/bg.svg",
      "trend_id": 35,
      "singers": [ { "singer_id": 777, "artist_name": "Preslava" } ],
      "videos":   [ { "yt_code": "AbCdE123" } ]
    }
  ],
  "meta": {
    "provider": "popnable",
    "upstream_response_code": 200,
    "upstream_error_number": null,
    "endpoint": "search"
  }
}
  • data — normalized records. Use directly in UI and storage.
  • meta.providerpopnable for transparency/debug.
  • meta.upstream_response_code — HTTP-equivalent status from upstream.
  • meta.endpoint — which upstream path we called (e.g., songs/by-trend).

#Typical errors & how to fix

{ "error": "Missing \"action\" parameter", "code": 422 }
{ "error": "Missing or empty \"ids\"", "code": 422 }
{ "error": "Popnable: Access Denied.", "code": 403 }
  • 422 missing/invalid: Ensure required params for the chosen action are present and non-empty.
  • 401 invalid key: Rotate your YEB key; call only from server/edge.
  • 502 availability: Upstream temporarily unavailable; retry with backoff.
  • 403 upstream denial: Access rules on provider side; validate your upstream configuration and inputs.

#Troubleshooting & field notes

  1. Dates: All day params are YYYY-MM-DD. Keep a single timezone (prefer UTC) in your app.
  2. Batching: For bulk imports, cap at ≤100 rps and reuse connections. Cache idempotent requests by full payload hash.
  3. Partial enrichment: Use stats/charts/dailyStats only when needed to keep latency and cost predictable.
  4. Stability: Field names are normalized; upstream changes are absorbed where possible and reflected in the Changelog below.

#API Changelog (latest changes)

2025-11-25
Improved error passthrough for upstream logical errors (meta.upstream_response_code now always set). Hardened input validation messages for all actions.
2025-11-10
Added optional dailyStats to get-videos. Unified day format across actions (YYYY-MM-DD).
2025-10-20
Normalized lists for singers and videos in song payloads. Deduplicated repeated fields.
2025-10-01
Public v1 release: search, get-trends, get-songs, get-songs-by-trend, get-artists, get-artist-by-trend, get-daily-chart, get-weekly-chart, get-monthly-chart, get-artist-chart, get-videos.

Часті запитання

Ви можете запитувати пісні, виконавців, тренди країн/регіонів, щоденні/щотижневі/щомісячні чарти та статистику відео YouTube через єдину уніфіковану кінцеву точку.

API використовує Popnable v2 - той самий набір даних, що живить публічні музичні чарти та статистику Popnable.

Чарти слідують власному циклу оновлення Popnable. Щоденні чарти оновлюються приблизно кожні 24 години.

Так. Кожен запит, навіть з помилкою, витрачає кредити. Ваші кредити прив'язані до кількості запитів, незалежно від успіху чи невдачі. Якщо помилка явно спричинена проблемою платформи з нашого боку, ми відновимо постраждалі кредити (без грошового повернення).

Зв'яжіться з нами за адресою [email protected]. Ми серйозно ставимося до зворотного зв'язку—якщо ваш звіт про помилку або запит на функцію є обґрунтованим, ми можемо швидко виправити або покращити API та надати вам 50 безкоштовних кредитів на подяку.

Залежить від API і іноді навіть від ендпоінту. Деякі ендпоінти використовують дані із зовнішніх джерел, які можуть мати суворіші обмеження. Ми також застосовуємо ліміти для запобігання зловживанням та підтримання стабільності платформи. Перевірте документацію щодо конкретного ліміту для кожного ендпоінту.

Ми працюємо на кредитній системі. Кредити — це передоплачені, неповоротні одиниці, які ви витрачаєте на API-виклики та інструменти. Кредити витрачаються за принципом FIFO (найстаріші першими) і дійсні протягом 12 місяців з дати покупки. Панель управління показує дату кожної покупки та її закінчення.

Так. Усі придбані кредити (включаючи дробові залишки) дійсні 12 місяців з моменту покупки. Невикористані кредити автоматично закінчуються і назавжди видаляються наприкінці терміну дії. Прострочені кредити не можна відновити або конвертувати в готівку чи іншу цінність. Перехідне правило: кредити, придбані до 22 вер. 2025, вважаються придбаними 22 вер. 2025 і закінчуються 22 вер. 2026 (якщо при покупці не було вказано ранішого терміну).

Так—у межах терміну дії. Невикористані кредити залишаються доступними і переносяться з місяця в місяць, поки не закінчаться через 12 місяців після покупки.

Кредити є неповоротними. Купуйте лише те, що потрібно—ви завжди можете поповнити пізніше. Якщо помилка платформи спричинить невдале списання, ми можемо відновити постраждалі кредити після розслідування. Без грошового повернення.

Ціни встановлені в кредитах, а не в доларах. Кожен ендпоінт має свою вартість—дивіться значок «Кредити / запит» вище. Ви завжди точно знатимете, скільки витрачаєте.
← Назад до API