https://www.blogchart.co.kr/api/v1API 키는 계정의 비밀번호와 같은 취급입니다. API 키를 가진 사람은 그 계정의 한도로 조회할 수 있습니다.
로그인 후 API 키 발급 페이지에서 발급받습니다. API 키는 32자리 문자열이고 계정에 1개 부여됩니다.
대부분의 공개 API가 쓰는 표준 방식대로 Authorization: Bearer 헤더에 API 키를 넣어 보내면 됩니다.
curl "https://www.blogchart.co.kr/api/v1/account/quota" \ -H "Authorization: Bearer <발급받은 키>"
아래 명령을 실행해 잔여 쿼리가 반환되면 API 키가 정상 작동하는 것입니다.
curl "https://www.blogchart.co.kr/api/v1/account/quota" \ -H "Authorization: Bearer <발급받은 키>"
fetch("https://www.blogchart.co.kr/api/v1/account/quota", { headers: { "Authorization": "Bearer <발급받은 키>" } }) .then(function (r) { return r.json(); }) .then(function (j) { console.log(j); });
import json from urllib.request import Request, urlopen req = Request("https://www.blogchart.co.kr/api/v1/account/quota", headers={"Authorization": "Bearer <발급받은 키>"}) with urlopen(req) as resp: print(json.loads(resp.read().decode("utf-8")))
$ch = curl_init("https://www.blogchart.co.kr/api/v1/account/quota"); curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer <발급받은 키>"]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); echo curl_exec($ch);
| 엔드포인트 | 간단 설명 |
|---|---|
GET /v1/blog/rank | 블로그의 현재 전체·카테고리 순위 확인 — 순위만 주기적으로 확인할 용도 |
GET /v1/blog/analysis | 검색노출 분석 요약 — 순위, 키워드 수, 1페이지 노출률, 최고 순위, 활동지역 등 전체 항목 |
GET /v1/blog/history | 최근 52주간 주간 순위·키워드 추이 — 웹 화면 변동 추이 그래프에 해당 |
GET /v1/blog/keyword | 블로그에 유입된 키워드 목록 (최대 50개) |
GET /v1/account/quota | 남은·사용 쿼리 확인 — 이 호출 자체는 쿼리를 차감하지 않음 |
/v1/account/quota에서 확인할 수 있습니다.429 응답이 반환됩니다. 제한되면 잠시 후 다시 시도하세요.
블로그의 현재 순위만 가볍게 조회합니다. 전체 분석 항목이 아니어서 순위 주기적으로만 확인하는 용도에 알맞습니다. 한 번에 최대 20개까지 조회할 수 있습니다.
curl "https://www.blogchart.co.kr/api/v1/blog/rank?url=blog.naver.com/haechiseoul" \ -H "Authorization: Bearer <발급받은 키>"
curl "https://www.blogchart.co.kr/api/v1/blog/rank?url=blog.naver.com/haechiseoul&url=blog.naver.com/luckeyword" \ -H "Authorization: Bearer deadbeefcafebabe0123456789abcdef"
fetch("https://www.blogchart.co.kr/api/v1/blog/rank?url=blog.naver.com/haechiseoul&url=blog.naver.com/luckeyword", { headers: { "Authorization": "Bearer deadbeefcafebabe0123456789abcdef" } }) .then(function (r) { return r.json(); }) .then(function (j) { console.log(j); });
import json from urllib.request import Request, urlopen req = Request("https://www.blogchart.co.kr/api/v1/blog/rank?url=blog.naver.com/haechiseoul&url=blog.naver.com/luckeyword", headers={"Authorization": "Bearer deadbeefcafebabe0123456789abcdef"}) with urlopen(req) as resp: print(json.loads(resp.read().decode("utf-8")))
$ch = curl_init("https://www.blogchart.co.kr/api/v1/blog/rank?url=blog.naver.com/haechiseoul&url=blog.naver.com/luckeyword"); curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer deadbeefcafebabe0123456789abcdef"]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); echo curl_exec($ch);
{
"status": "success",
"data": [
{
"url": "blog.naver.com/haechiseoul",
"blog_name": "서울특별시 공식블로그",
"rank": 184,
"rank_cate": 2
},
{
"url": "blog.naver.com/luckeyword",
"blog_name": "네이버 비즈니스 스쿨 공식 블로그",
"rank": 419734,
"rank_cate": 0
}
]
}
null)0)블로그 URL로 검색노출 분석 요약을 조회합니다. 웹 화면에서 보는 순위·노출 확률·키워드 통계에 해당합니다. 한 번에 최대 20개까지 조회할 수 있습니다.
curl -G "https://www.blogchart.co.kr/api/v1/blog/analysis" \ -H "Authorization: Bearer <발급받은 키>" \ --data-urlencode "url=blog.naver.com/haechiseoul"
curl -G "https://www.blogchart.co.kr/api/v1/blog/analysis" \ -H "Authorization: Bearer deadbeefcafebabe0123456789abcdef" \ --data-urlencode "url=blog.naver.com/haechiseoul" \ --data-urlencode "url=blog.naver.com/luckeyword"
fetch("https://www.blogchart.co.kr/api/v1/blog/analysis?url=blog.naver.com/haechiseoul&url=blog.naver.com/luckeyword", { headers: { "Authorization": "Bearer deadbeefcafebabe0123456789abcdef" } }) .then(function (r) { return r.json(); }) .then(function (j) { console.log(j); });
import json from urllib.request import Request, urlopen req = Request("https://www.blogchart.co.kr/api/v1/blog/analysis?url=blog.naver.com/haechiseoul&url=blog.naver.com/luckeyword", headers={"Authorization": "Bearer deadbeefcafebabe0123456789abcdef"}) with urlopen(req) as resp: print(json.loads(resp.read().decode("utf-8")))
$ch = curl_init("https://www.blogchart.co.kr/api/v1/blog/analysis?url=blog.naver.com/haechiseoul&url=blog.naver.com/luckeyword"); curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer deadbeefcafebabe0123456789abcdef"]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); echo curl_exec($ch);
{
"status": "success",
"data": [
{
"url": "blog.naver.com/haechiseoul",
"blog_name": "서울특별시 공식블로그",
"rank": 184,
"rank_cate": 2,
"main_category": "스포츠|레저|취미",
"sub_category": "일상|생활, IT/인터넷",
"first_collect_date": "2013-02-01",
"page1_percent": 17.2,
"keyword_cnt": 838,
"total_keyword_cnt": 5646,
"page1_keyword_cnt": 240,
"avg_keyword_rank": 19,
"rise_cnt_52w": 24,
"fall_cnt_52w": 28,
"max_rank": 128,
"area_main": "경기"
},
{
"url": "blog.naver.com/luckeyword",
"blog_name": "네이버 비즈니스 스쿨 공식 블로그",
"rank": 419734,
"rank_cate": 0,
"main_category": "",
"sub_category": "",
"first_collect_date": "2013-02-01",
"page1_percent": 30,
"keyword_cnt": 2,
"total_keyword_cnt": 48,
"page1_keyword_cnt": 1,
"avg_keyword_rank": 19,
"rise_cnt_52w": 29,
"fall_cnt_52w": 23,
"max_rank": 7704,
"area_main": "전국"
}
]
}
| 블로그명 / 블로그 주소 | blog_name / url |
| 전체 순위 / 카테고리 순위 | rank / rank_cate |
| 상위 노출 확률(%) | page1_percent |
| 유효키워드 수 / 전체키워드 수 | keyword_cnt / total_keyword_cnt |
| 평균 노출 순위 / 1페이지 노출 유효키워드 수 | avg_keyword_rank / page1_keyword_cnt |
| 52주간 상승 횟수 / 하락 횟수 / 최고 랭킹 | rise_cnt_52w / fall_cnt_52w / max_rank |
| 최초 집계일 / 메인·서브 카테고리 | first_collect_date / main_category·sub_category |
| 활동지역 | area_main |
블로그의 랭킹 및 유효키워드 변동 추이를 주간 단위로 조회합니다. 웹 화면의 변동 추이 그래프에 해당합니다. 최근 52주 이내 지점을 오래된→최신 순으로 돌려줍니다.
curl "https://www.blogchart.co.kr/api/v1/blog/history?url=blog.naver.com/haechiseoul" \ -H "Authorization: Bearer <발급받은 키>"
curl "https://www.blogchart.co.kr/api/v1/blog/history?url=blog.naver.com/haechiseoul&url=blog.naver.com/luckeyword" \ -H "Authorization: Bearer deadbeefcafebabe0123456789abcdef"
fetch("https://www.blogchart.co.kr/api/v1/blog/history?url=blog.naver.com/haechiseoul&url=blog.naver.com/luckeyword", { headers: { "Authorization": "Bearer deadbeefcafebabe0123456789abcdef" } }) .then(function (r) { return r.json(); }) .then(function (j) { console.log(j); });
import json from urllib.request import Request, urlopen req = Request("https://www.blogchart.co.kr/api/v1/blog/history?url=blog.naver.com/haechiseoul&url=blog.naver.com/luckeyword", headers={"Authorization": "Bearer deadbeefcafebabe0123456789abcdef"}) with urlopen(req) as resp: print(json.loads(resp.read().decode("utf-8")))
$ch = curl_init("https://www.blogchart.co.kr/api/v1/blog/history?url=blog.naver.com/haechiseoul&url=blog.naver.com/luckeyword"); curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer deadbeefcafebabe0123456789abcdef"]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); echo curl_exec($ch);
{
"status": "success",
"data": [
{
"url": "blog.naver.com/haechiseoul",
"blog_name": "서울특별시 공식블로그",
"history": [
{ "date": "2025-10-13", "rank": 16822, "keyword_cnt": 48 },
{ "date": "2025-10-20", "rank": 15885, "keyword_cnt": 52 },
// ... 주간 데이터가 오래된 → 최신 순으로 계속 됩니다
{ "date": "2026-09-28", "rank": 128, "keyword_cnt": 865 },
{ "date": "2026-10-05", "rank": 184, "keyword_cnt": 838 }
]
},
{
"url": "blog.naver.com/luckeyword",
"blog_name": "네이버 비즈니스 스쿨 공식 블로그",
"history": [
{ "date": "2025-10-13", "rank": 123508, "keyword_cnt": 9 },
// ... 주간 데이터가 계속 됩니다
{ "date": "2026-10-05", "rank": 419734, "keyword_cnt": 2 }
]
}
]
}
null)블로그에 유입된 키워드 목록을 조회합니다. 웹 화면의 전체키워드 목록에 해당합니다. 최신 수집 순으로 블로그당 최대 50개를 돌려줍니다.
curl "https://www.blogchart.co.kr/api/v1/blog/keyword?url=blog.naver.com/haechiseoul" \ -H "Authorization: Bearer <발급받은 키>"
curl "https://www.blogchart.co.kr/api/v1/blog/keyword?url=blog.naver.com/haechiseoul&url=blog.naver.com/luckeyword" \ -H "Authorization: Bearer deadbeefcafebabe0123456789abcdef"
fetch("https://www.blogchart.co.kr/api/v1/blog/keyword?url=blog.naver.com/haechiseoul&url=blog.naver.com/luckeyword", { headers: { "Authorization": "Bearer deadbeefcafebabe0123456789abcdef" } }) .then(function (r) { return r.json(); }) .then(function (j) { console.log(j); });
import json from urllib.request import Request, urlopen req = Request("https://www.blogchart.co.kr/api/v1/blog/keyword?url=blog.naver.com/haechiseoul&url=blog.naver.com/luckeyword", headers={"Authorization": "Bearer deadbeefcafebabe0123456789abcdef"}) with urlopen(req) as resp: print(json.loads(resp.read().decode("utf-8")))
$ch = curl_init("https://www.blogchart.co.kr/api/v1/blog/keyword?url=blog.naver.com/haechiseoul&url=blog.naver.com/luckeyword"); curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer deadbeefcafebabe0123456789abcdef"]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); echo curl_exec($ch);
{
"status": "success",
"data": [
{
"url": "blog.naver.com/haechiseoul",
"blog_name": "서울특별시 공식블로그",
"keyword_cnt": 50,
"keywords": [
"서울천막",
"버스조명",
// ... 키워드가 50개까지 계속 됩니다
]
},
{
"url": "blog.naver.com/luckeyword",
"blog_name": "네이버 비즈니스 스쿨 공식 블로그",
"keyword_cnt": 50,
"keywords": [
"숏클립제작",
"숏클립",
"지역브랜드",
// ... 키워드가 50개까지 계속 됩니다
]
}
]
}
null)계정의 남은 쿼리와 사용한 쿼리를 조회합니다. 검색노출 분석 첫 화면에 뜨는 잔여/사용 쿼리와 같은 수치입니다. 이 호출 자체는 쿼리를 차감하지 않습니다.
curl "https://www.blogchart.co.kr/api/v1/account/quota" \ -H "Authorization: Bearer <발급받은 키>"
curl "https://www.blogchart.co.kr/api/v1/account/quota" \ -H "Authorization: Bearer deadbeefcafebabe0123456789abcdef"
fetch("https://www.blogchart.co.kr/api/v1/account/quota", { headers: { "Authorization": "Bearer deadbeefcafebabe0123456789abcdef" } }) .then(function (r) { return r.json(); }) .then(function (j) { console.log(j); });
import json from urllib.request import Request, urlopen req = Request("https://www.blogchart.co.kr/api/v1/account/quota", headers={"Authorization": "Bearer deadbeefcafebabe0123456789abcdef"}) with urlopen(req) as resp: print(json.loads(resp.read().decode("utf-8")))
$ch = curl_init("https://www.blogchart.co.kr/api/v1/account/quota"); curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer deadbeefcafebabe0123456789abcdef"]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); echo curl_exec($ch);
{
"status": "success",
"data": {
"limit_query_cnt": 1000,
"query_cnt": 320,
"today_query_cnt": 12,
"remain_query_cnt": 680,
"end_date": "2026-11-30"
}
}
유효한 상품이 하나도 없으면 remain_query_cnt는 0, end_date는 null로 돌려줍니다. (위의 예제 요청에 쓰는 테스트 키는 계정이 없는 키라 이 기준으로 remain_query_cnt: 0이 반환됩니다.)
API 키를 사용 중지 상태로 바꾸면 로그인 여부와 관계없이 모든 API 호출이 차단됩니다.
| 상태 코드 | 설명 |
|---|---|
200 | 조회 성공 |
400 | 필수 값 누락·잘못된 값 (URL 20개 초과, 잘못된 URL 형식 등) |
401 | API 키가 잘못됐거나 사용 중지 상태 |
403 | 조회 권한 없음 — 조회 한도 초과, 하루 한도 초과, 조회가 제한된 계정, 테스트 키로 샘플 블로그 외 URL을 요청한 경우 |
404 | 순위에 없는 블로그 (여러 URL 중 일부면 그 URL만 결과에서 빠지고 나머지는 정상 반환) |
429 | 호출 제한 도달 — 짧은 시간에 너무 많은 요청 (잠시 후 다시 시도) |
에러도 본문은 항상 아래 JSON 형식이고, error.code가 위의 상태 코드와 같습니다.
{
"status": "error",
"error": {
"code": 401,
"message": "잘못된 API 키이거나 사용 중지 상태입니다."
}
}
// 400 — url 파라미터 없음 { "status": "error", "error": { "code": 400, "message": "url 파라미터가 필요합니다 (예: ?url=blog.naver.com/계정명)." } } // 401 — API 키 없음 { "status": "error", "error": { "code": 401, "message": "요청 헤더에 Authorization: Bearer 형태로 API 키를 포함해야 합니다." } } // 403 — 조회 한도 초과 { "status": "error", "error": { "code": 403, "message": "조회 한도를 초과했습니다. 남은 한도는 /v1/account/quota에서 확인할 수 있습니다." } } // 404 — 순위에 없는 블로그 { "status": "error", "error": { "code": 404, "message": "순위권에 존재하지 않는 블로그입니다." } }
유료 서비스의 조회 한도와 계정을 잇는 인증 수단입니다. API 키가 노출되면 내 한도가 남의 프로그램에 쓰일 수 있으니 서버 쪽에만 두고, 브라우저 JavaScript·앱 소스에 직접 하드코딩 하지 말아 주세요.
유출이 의심되거나 프로그램을 그만둘 때 재발급하면 됩니다. 재발급하면 기존 API 키는 바로 막히고, 새로 받은 API 키를 프로그램에 다시 등록해야 합니다.
블로그 순위와 모든 분석 데이터는 매주 월요일 집계됩니다. 주중 조회는 최신 집계 시점 기준 데이터를 돌려줍니다. 추이(history)의 주 단위 지점도 같은 집계 기준입니다.
API 서비스에 대한 문의는 아래 게시판으로 남겨 주세요.
1:1 문의