API 키 발급
설정 페이지로 이동
좌측 메뉴에서 '설정' 을 클릭하고, 페이지 아래쪽의 'API 키 관리' 를 찾아요.
채널 주인(스트리머) 계정으로 로그인해야 보여요. 매니저 권한으로는 스트리머만 확인 및 변경이 가능합니다. 만 뜹니다.

API 키 생성하기
'API 키 생성하기' 버튼을 누르고 아래 세 가지를 정해요.
| 항목 | 선택지 |
|---|---|
| API 키 이름 | 어디에 쓸 키인지 알아볼 이름 |
| 만료일 | 3 · 7 · 14 · 30 · 60 · 90 · 180 · 365일 또는 영구. 기본 선택이 3일이라 오래 쓸 키면 꼭 바꿔주세요 |
| 스코프 | 필요한 읽기 권한만 (전체 목록). 최소 1개는 골라야 합니다 — 하나도 안 고르면 잘못된 값이 입력되었습니다. 가 나요 |
만든 뒤에는 고칠 수 없어요
이름 · 만료일 · 스코프 모두 생성 이후 수정이 불가능해요. 바꾸려면 삭제하고 다시 만들어야 해요.
키 복사해서 저장
생성된 API 키를 안전한 곳에 저장해요.
이 창을 닫으면 다시 볼 수 없어요
새로고침하거나 창을 닫으면 키를 다시 확인할 수 없어요. 분실하면 삭제 후 새로 발급받아야 해요.
키는 한글 256자로 되어 있어요. 이상해 보여도 정상이에요.
키는 채널당 5개까지
목록 위의 n 개 / 5 개 가 현재 사용량이에요. 가득 차면 생성 버튼이 비활성화되니 안 쓰는 키를 지워주세요.
만료된 키는 빨간 취소선으로 표시돼요.
키를 남에게 주지 마세요
키가 있으면 채널의 룰렛 · 신청곡 · 노래방 · 출석 · 시청자 정보를 읽을 수 있어요. 지금은 읽기 전용이라 설정을 바꾸지는 못하지만, 시청자 개인정보가 들어 있어요. 신뢰할 수 없는 사람에게는 절대 전달하지 마세요.
인증 방법
Authorization 헤더
모든 API 요청에 Authorization 헤더를 포함해요.
Authorization: DDUBOT_API <URL 인코딩한 api_key>
키를 그대로 넣으면 안 돼요
API 키는 한글 256자입니다. HTTP 헤더 값에는 한글을 그대로 실을 수 없어서, 퍼센트 인코딩(URL 인코딩) 해서 넣어야 해요. 서버가 받은 뒤 디코딩해서 검증해요.
그대로 넣으면 JavaScript·Python 라이브러리는 요청이 서버에 닿기도 전에 죽고, cURL 은 전송은 되지만 400 을 받아요.
| 언어 | 그대로 넣었을 때 |
|---|---|
JavaScript fetch | TypeError: Cannot convert argument to a ByteString |
Python requests | UnicodeEncodeError: 'latin-1' codec can't encode... |
| cURL | 전송은 되지만 서버에서 글자가 깨져 400 잘못된 접근입니다. |
예시
cURL: — 미리 인코딩한 키를 붙여넣으세요.
curl -X GET "https://chzzk-bot.ddutto.com/api/v1/roulette" \
-H "Authorization: DDUBOT_API %EA%B0%80%EB%82%98%EB%8B%A4..."
JavaScript (fetch):
const API_KEY = 'YOUR_API_KEY'; // 대시보드에서 복사한 한글 키
const response = await fetch('https://chzzk-bot.ddutto.com/api/v1/roulette', {
method: 'GET',
headers: {
'Authorization': 'DDUBOT_API ' + encodeURIComponent(API_KEY)
}
});
const data = await response.json();
Python (requests):
import requests
from urllib.parse import quote
API_KEY = 'YOUR_API_KEY' # 대시보드에서 복사한 한글 키
headers = {
'Authorization': 'DDUBOT_API ' + quote(API_KEY)
}
response = requests.get(
'https://chzzk-bot.ddutto.com/api/v1/roulette',
headers=headers
)
data = response.json()
권한 (Scope)
API 키를 만들 때 필요한 권한을 골라야 해요. 지금은 읽기 권한만 제공하고, 쓰기 · 특수 권한은 선택할 수 있는 항목이 없어요.
지금 조회 엔드포인트가 있는 스코프
| Scope | 대시보드 체크박스 | 읽는 것 |
|---|---|---|
read.song-request | 신청곡 | 신청곡 대기열 |
read.karaoke | 노래방 | 노래방 대기열/완료 목록 |
read.roulette | 룰렛 | 룰렛 목록 및 로그 |
read.attendance | 출석 | 출석 명단 |
read.viewer_info | 시청자 정보 | 시청자 정보 |
예약 스코프 — 발급 화면에서 고를 수는 있지만, 아직 이 스코프를 쓰는 API가 없어요.
| Scope | 예정 |
|---|---|
read.chat | 채팅 |
read.donation | 후원 |
read.command | 명령어 |
read.macro | 매크로 |
read.banword | 금칙어 |
read.marker | 마커 |
read.rps | 가위바위보 |
필요한 권한이 목록에 없다면
디스코드로 문의해주세요. 검토 후 추가하고 있어요.
Rate Limit
모든 API는 분당 15회의 요청 제한이 있어요. 이 15회는 키 하나가 아니라 계정 하나 기준이라, 키를 여러 개 발급해도 나눠 쓰게 돼요.
응답 헤더에서 Rate Limit 정보를 확인할 수 있어요. 단 200 · 403 · 429 에만 붙어요. 400(인증 실패·파라미터 오류)과 500 에는 이 헤더가 없어요.
| 헤더 | 설명 |
|---|---|
X-RateLimit-Limit | 분당 최대 요청 수. 보통 15(계정 기준). IP 제한(60회/분)에 걸린 429 에서는 60 이 와요 |
X-RateLimit-Remaining | 남은 요청 수 |
X-RateLimit-Reset | 제한 초기화 시각 (밀리초 단위 Unix 타임스탬프) |
계정 제한(15회/분)과 별개로 IP 주소 기준 60회/분 제한도 함께 적용돼요. Rate Limiting 자세히 보기 →
오류 응답
인증 실패 시 다음과 같은 오류가 반환돼요.
{
"success": false,
"data": {
"error": "잘못된 접근입니다."
}
}
인증 실패는 401이 아니라 400입니다
그리고 오류 메시지는 최상위가 아니라 data.error 안에 들어 있어요.
response.error 를 읽으면 undefined 가 나와요.
일반적인 오류 원인
| 원인 | 상태 | data.error |
|---|---|---|
Authorization 헤더가 없거나 DDUBOT_API 로 시작하지 않음 | 400 | 잘못된 접근입니다. |
| API 키가 유효하지 않음 (오타·공백·삭제된 키·만료된 키) | 400 | 잘못된 접근입니다. |
| 필요한 Scope 권한이 없음 | 403 | 권한이 없습니다. '...' scope가 필요합니다. |
| Rate Limit 초과 | 429 | 요청 횟수 제한을 초과했습니다. N초 후에 다시 시도해주세요. |
400이 계속 나온다면
헤더가 없는 경우와 키가 틀린 경우를 일부러 구분해서 알려주지 않아요.(키 추측 방지)
- 키를 URL 인코딩했는지 (한글 키를 그대로 넣으면 반드시 실패해요)
- 헤더 이름이
Authorization이 맞는지 - 값이
DDUBOT_API+ 공백 한 칸 + 키 형태인지 - 키를 복사할 때 앞뒤 공백이나 줄바꿈이 섞이지 않았는지
이 네 가지를 순서대로 확인해보세요.
API 키 관리
키 재발급
대시보드에서 언제든지 새 API 키를 발급받을 수 있어요.
새로 만들어도 기존 키는 그대로 살아 있어요
키는 서로 독립적이에요. 새 키를 만든다고 예전 키가 자동으로 무효화되지 않아요. 쓰지 않는 키는 직접 삭제해주세요. (5개 제한도 차지해요.)
봇을 내보내면 키도 멈춰요
!퇴장 으로 봇을 채널에서 내보내면 발급해둔 API 키도 함께 동작을 멈춰요. 다시 초대하면 그대로 다시 씁니다.
키 삭제
API 키가 유출된 경우 즉시 대시보드에서 삭제하고 새로 발급받아요. 목록의 삭제 버튼을 누르면 그 키만 즉시 무효화돼요.
API 키를 공개 저장소나 클라이언트 코드에 노출하지 마세요.
다음 단계
| 하고 싶은 것 | 문서 |
|---|---|
| 룰렛 목록·기록 가져오기 | 룰렛 API → |
| 신청곡 대기열 가져오기 | 신청곡 API → |
| 시청자 정보 조회 | 시청자 정보 API → |
| 출석 명단 가져오기 | 출석 명단 API → |
| 노래방 목록 가져오기 | 노래방 API → |