{
  "openapi": "3.0.1",
  "info": {
    "title": "NAVER VIBE Chart API – Korean Music & K-pop Charts, Past Charts",
    "description": "Get NAVER VIBE (바이브) Korean music chart data as an API, no login: K-pop Top 100 down to rank 300, rising, age×gender, karaoke and 26 genre charts, past charts back to 1961, song search, credits, ISRC, album and artist likes. JSON/CSV. $0.25/1K songs, first 500 songs a month free.",
    "version": "0.3",
    "x-build-id": "xNO9g57OXc11ldk2u"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/k-data-lab~vibe-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-k-data-lab-vibe-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/k-data-lab~vibe-scraper/runs": {
      "post": {
        "operationId": "runs-sync-k-data-lab-vibe-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/k-data-lab~vibe-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-k-data-lab-vibe-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "charts": {
            "title": "차트",
            "type": "array",
            "description": "Which NAVER VIBE charts to get (chart IDs, pick any number). \"total\" = Today Top 100, down to rank 300; every other chart goes to rank 100. Also: \"domestic-rising\"/\"oversea-rising\", \"karaoke\", \"search\", 10 age×gender charts (\"gen-f20\" = women in their 20s, \"gen-m40\" = men in their 40s) and 26 genres (\"kpop\", \"kr-ballad\", \"trot\", \"pop\", \"ost\"…). Each song comes with rank, rank change, new-entry flag and ISRC. Example: [\"total\"] or [\"kpop\", \"karaoke\"]. Leave empty to skip charts and use only the past-chart/search/song/album/artist inputs below.\n\n차트 ID 목록. 예: [\"total\"] = 오늘 Top 100, [\"kpop\", \"karaoke\"] = K-Pop 장르 + 노래방 TOP100. 가져올 VIBE 차트 (여러 개 선택 가능). 오늘 Top 100은 300위까지, 나머지는 100위까지입니다. 성·연령별 차트 10개(10~50대 여성·남성), 노래방 TOP100, 음악검색 TOP100, 장르 차트 26개도 있습니다. 곡마다 순위 변동, 신규 진입, ISRC가 함께 나옵니다. 비워 두면 차트는 건너뛰고 아래 지난 차트·검색어·곡·앨범·아티스트만 가져옵니다.",
            "items": {
              "type": "string",
              "enum": [
                "total",
                "domestic-rising",
                "oversea-rising",
                "karaoke",
                "search",
                "kpop",
                "kr-ballad",
                "kr-dance",
                "kr-electronic",
                "kr-hiphop",
                "kr-rnb",
                "kr-rock",
                "kr-jazz",
                "kr-indie",
                "kr-folk",
                "trot",
                "pop",
                "dance",
                "electronic",
                "hiphop",
                "rnb",
                "rock",
                "jazz",
                "indie",
                "folk",
                "ost",
                "classic",
                "newage",
                "jpop",
                "ccm",
                "world",
                "gen-f10",
                "gen-f20",
                "gen-f30",
                "gen-f40",
                "gen-f50",
                "gen-m10",
                "gen-m20",
                "gen-m30",
                "gen-m40",
                "gen-m50"
              ],
              "enumTitles": [
                "오늘 Top 100 – 종합 300위까지, 매일 갱신 (전일 24시간 1인 1회 스트리밍)",
                "국내 급상승 TOP100 – 1개월 이내 발매 국내곡, 매시 갱신",
                "해외 급상승 TOP100 – 1개월 이내 발매 해외곡, 매시 갱신",
                "VIBE 노래방 TOP100 – 노래방 기능 사용 횟수",
                "음악검색 TOP100 – VIBE·네이버 앱 음악 검색 횟수",
                "장르: K-Pop TOP100",
                "장르: 국내 발라드 TOP100",
                "장르: 국내 댄스 TOP100",
                "장르: 국내 일렉트로닉 TOP100",
                "장르: 국내 랩·힙합 TOP100",
                "장르: 국내 알앤비·소울 TOP100",
                "장르: 국내 락·메탈 TOP100",
                "장르: 국내 재즈 TOP100",
                "장르: 국내 인디 TOP100",
                "장르: 국내 포크·어쿠스틱 TOP100",
                "장르: 트로트 TOP100",
                "장르: Pop TOP100",
                "장르: 해외 댄스 TOP100",
                "장르: 해외 일렉트로닉 TOP100",
                "장르: 해외 랩·힙합 TOP100",
                "장르: 해외 알앤비·소울 TOP100",
                "장르: 해외 락·메탈 TOP100",
                "장르: 해외 재즈 TOP100",
                "장르: 해외 인디 TOP100",
                "장르: 해외 포크·어쿠스틱 TOP100",
                "장르: OST TOP100",
                "장르: 클래식 TOP100",
                "장르: 뉴에이지·인스트루먼탈 TOP100",
                "장르: J-Pop TOP100",
                "장르: CCM TOP100",
                "장르: 월드뮤직 TOP100",
                "성·연령별: 10대 여성 인기곡 TOP100",
                "성·연령별: 20대 여성 인기곡 TOP100",
                "성·연령별: 30대 여성 인기곡 TOP100",
                "성·연령별: 40대 여성 인기곡 TOP100",
                "성·연령별: 50대 여성 인기곡 TOP100",
                "성·연령별: 10대 남성 인기곡 TOP100",
                "성·연령별: 20대 남성 인기곡 TOP100",
                "성·연령별: 30대 남성 인기곡 TOP100",
                "성·연령별: 40대 남성 인기곡 TOP100",
                "성·연령별: 50대 남성 인기곡 TOP100"
              ]
            },
            "default": []
          },
          "maxResults": {
            "title": "최대 결과 수 (차트·검색어마다)",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Max songs per chart or per search keyword. Today Top 100 goes to 300, other charts and past charts to 100, search to 2,000. Example: 100 = full TOP100, 300 = Today Top 100 to rank 300, 10 = top 10 only.\n\n차트 하나 또는 검색어 하나당 최대 곡 수. 오늘 Top 100은 300위, 다른 차트와 지난 차트는 100위까지, 검색은 최대 2,000곡까지입니다. 예: 100 = TOP100 전체, 300 = 오늘 Top 100의 300위까지, 10 = 상위 10곡만.",
            "default": 100
          },
          "includeSongDetails": {
            "title": "곡 상세 포함 (작사·작곡·편곡 크레딧·재생시간)",
            "type": "boolean",
            "description": "Add duration, MP3 price, synced-lyrics flag, overseas flag and full credits (lyricists, composers, arrangers with VIBE artist IDs and like counts) to every chart/search/artist song. Adds the 'song details' event per song. Lyrics text is never included. Example: true if you need songwriter credits, false (default) for ranks only.\n\n차트·검색·아티스트 곡마다 곡 정보를 한 번 더 불러 재생시간, 다운로드 가격, 싱크 가사 유무, 해외곡 여부, 작사·작곡·편곡자와 전체 크레딧(참여자 VIBE ID·좋아요 수 포함)을 추가합니다. 곡당 '곡 상세' 이벤트 요금이 추가됩니다. 가사 본문은 저작권 때문에 넣지 않습니다. 예: 작사·작곡 크레딧이 필요하면 true, 순위만 필요하면 false(기본값).",
            "default": false
          },
          "pastChartDates": {
            "title": "지난 차트 날짜",
            "type": "array",
            "description": "Past chart dates as YYYY-MM-DD, from 2008-01-01 to yesterday (e.g. \"2025-10-31\", \"2020-12-25\"). From 2011 you get that day's daily TOP100; for 2008–2010 the TOP100 of the week containing the date. For 1961–2007 enter just the year (e.g. \"1999\") for that year's chart. Leave empty to skip.\n\nYYYY-MM-DD 형식의 날짜 (2008-01-01 ~ 어제, 예: 2025-10-31, 2020-12-25). 2011년부터는 그날의 일간 TOP100, 2008~2010년은 그 날짜가 속한 주의 주간 TOP100입니다 (VIBE가 그 시기는 주간 차트만 보관). 1961~2007년은 연도만(예: 1999) 넣으면 그해의 연도 차트를 가져옵니다. 비워 두면 지난 차트는 가져오지 않습니다.",
            "items": {
              "type": "string"
            }
          },
          "pastChartRegion": {
            "title": "지난 차트 지역",
            "enum": [
              "domestic",
              "oversea",
              "both"
            ],
            "type": "string",
            "description": "Region for past charts: \"domestic\" = Korean songs (default), \"oversea\" = international songs, \"both\". Only used with pastChartDates. Example: \"both\".\n\n지난 차트를 국내·해외 중 어느 쪽으로 가져올지. \"domestic\" = 국내(기본값), \"oversea\" = 해외, \"both\" = 둘 다. pastChartDates를 넣었을 때만 쓰입니다. 예: \"both\".",
            "default": "domestic"
          },
          "searchKeywords": {
            "title": "곡 검색어",
            "type": "array",
            "description": "VIBE song search keywords: artist or song names in Korean or English (e.g. \"아이유\", \"aespa\", \"밤양갱\"). Up to maxResults songs per keyword. Leave empty to skip.\n\nVIBE 곡 검색어 (예: 아이유, 에스파, 밤양갱). 검색어마다 최대 결과 수만큼 가져옵니다. 비워 두면 검색하지 않습니다.",
            "items": {
              "type": "string"
            }
          },
          "searchSort": {
            "title": "검색 정렬",
            "enum": [
              "relevance",
              "popular",
              "latest"
            ],
            "type": "string",
            "description": "Sort order for song search: \"relevance\" (default), \"popular\" or \"latest\". Example: \"popular\" for the biggest hits first.\n\n곡 검색 결과 정렬 순서. \"relevance\" = 정확도순(기본값), \"popular\" = 인기순, \"latest\" = 최신순. 예: 인기곡부터 보려면 \"popular\".",
            "default": "relevance"
          },
          "songs": {
            "title": "곡 (ID 또는 링크)",
            "type": "array",
            "description": "VIBE song IDs or links (e.g. \"108385046\" or \"https://vibe.naver.com/track/108385046\"). Song details (credits) are always included (song + song details events). Leave empty to skip.\n\nVIBE 곡 ID 또는 링크 (예: 108385046 또는 https://vibe.naver.com/track/108385046). 곡 상세(크레딧)가 항상 포함됩니다 (곡 + 곡 상세 이벤트). 비워 두면 건너뜁니다.",
            "items": {
              "type": "string"
            }
          },
          "albums": {
            "title": "앨범 (ID 또는 링크)",
            "type": "array",
            "description": "VIBE album IDs or links (e.g. \"38847773\" or \"https://vibe.naver.com/album/38847773\"). One row per album: release date, genre, agency, distributor, like count and full tracklist. Leave empty to skip.\n\nVIBE 앨범 ID 또는 링크 (예: 38847773 또는 https://vibe.naver.com/album/38847773). 앨범 정보(발매일·장르·기획사·유통사·좋아요 수)와 전체 수록곡 목록을 한 행으로 가져옵니다. 비워 두면 건너뜁니다.",
            "items": {
              "type": "string"
            }
          },
          "artists": {
            "title": "아티스트 (ID 또는 링크)",
            "type": "array",
            "description": "VIBE artist IDs or links (e.g. \"112579\" = IU, \"143179\" = BTS, or \"https://vibe.naver.com/artist/112579\"). Returns like count (fans), debut date, agency, members and the artist's songs. Leave empty to skip.\n\nVIBE 아티스트 ID 또는 링크 (예: 112579 = 아이유, 143179 = 방탄소년단, 또는 https://vibe.naver.com/artist/112579). 아티스트 정보(좋아요 수·데뷔일·소속사·멤버)와 곡 목록을 가져옵니다. 비워 두면 건너뜁니다.",
            "items": {
              "type": "string"
            }
          },
          "maxSongsPerArtist": {
            "title": "아티스트당 곡 수",
            "minimum": 0,
            "maximum": 2000,
            "type": "integer",
            "description": "Songs to fetch per artist (0 = artist info only). Example: 50. Only used with artists.\n\n아티스트마다 가져올 곡 수 (0 = 아티스트 정보만). 예: 50 = 곡 50개, 0 = 아티스트 정보만. artists를 넣었을 때만 쓰입니다.",
            "default": 50
          },
          "artistSongOrder": {
            "title": "아티스트 곡 정렬",
            "enum": [
              "popular",
              "latest"
            ],
            "type": "string",
            "description": "Order of each artist's song list: \"popular\" (default) or \"latest\". Example: \"latest\" for newest releases first.\n\n아티스트 곡 목록의 정렬 순서. \"popular\" = 인기순(기본값), \"latest\" = 최신순. 예: 최신 발매곡부터 보려면 \"latest\".",
            "default": "popular"
          },
          "proxyConfiguration": {
            "title": "프록시",
            "type": "object",
            "description": "Usually not needed: if VIBE refuses a direct request, the actor retries through Apify Proxy automatically. Example: {\"useApifyProxy\": false} (keep the default).\n\n보통은 필요 없습니다. VIBE가 직접 요청을 거부하면 자동으로 Apify 프록시로 다시 시도합니다. 예: {\"useApifyProxy\": false} (기본값 그대로 두면 됩니다).",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}