SR
노래 신청(SR) 재생 상태를 조회하고 재생을 제어하는 API입니다.
목차
노래 신청(SR)의 재생 상태와 대기열을 조회하고 재생을 제어합니다. 조회와 제어 모두 sr:control 권한을 씁니다.
SR 상태 조회
재생 상태, SR 설정, 신청 리스트와 스트리머 리스트 대기열을 한 번에 돌려줍니다. 대시보드와 방송 화면 플레이어가 받는 상태와 같은 형식입니다.
GET
/api/ v1/ developer/ sr권한: sr:control요청
요청 파라미터가 없습니다.
GET /api/v1/developer/sr
Authorization: Bearer ACCESS_TOKEN
응답
| 필드 | 타입 | 설명 |
|---|---|---|
type |
string | 항상 state |
settings |
object | 재생 상태와 SR 설정 |
settings.status |
string | 재생 상태. 아래 값 표를 참고하세요 |
settings.is_accepting |
boolean | 신청을 받는 중이면 true. SR 설정이 아직 만들어지지 않은 채널은 false 대신 0으로 옵니다 |
settings.max_request_per_user |
integer | 인당 최대 신청 곡 수. 0은 무제한 |
settings.max_request_per_subscriber |
integer 또는 null | 구독자 최대 신청 곡 수. null은 인당 곡 수와 같음, 0은 무제한 |
settings.max_request_per_follower |
integer 또는 null | 팔로워 최대 신청 곡 수. null은 인당 곡 수와 같음, 0은 무제한 |
settings.max_duration |
integer | 받는 영상의 최대 길이(초). 0은 제한 없음 |
settings.require_point |
integer | 신청할 때 빠지는 포인트. 0은 무료 |
settings.no_duplicate |
boolean | 중복 곡 방지를 켰으면 true |
settings.volume |
integer | 플레이어 음량, 0~100 |
settings.captions_enabled |
boolean | 유튜브 자막 자동 켜기 |
settings.auto_advance |
boolean | 곡이 끝나면 다음 곡을 자동으로 재생 |
settings.block_shorts |
boolean | 쇼츠 신청 차단 |
settings.current_video_id |
string 또는 null | 지금 곡의 유튜브 영상 ID. 곡이 없으면 null |
settings.current_video_type |
string 또는 null | 지금 곡이 나온 목록. user(신청 리스트) 또는 streamer(스트리머 리스트), 곡이 없으면 null |
settings.current_video_title |
string 또는 null | 지금 곡 제목 |
lists |
object | 대기열 |
lists.user |
array | 신청 리스트. 시청자가 신청한 곡이며 먼저 재생됩니다 |
lists.streamer |
array | 스트리머 리스트. 신청 리스트가 비었을 때 재생됩니다. 항목 필드는 lists.user[]와 같습니다 |
lists.user[].id |
integer | 대기열 항목 ID |
lists.user[].list_type |
string | user 또는 streamer |
lists.user[].user_uid |
string 또는 null | 신청자 UID. !sr로 신청한 곡은 시청자 UID, 대시보드에서 주소·검색어로 넣은 곡은 null, 재생 기록에서 다시 신청한 곡은 스트리머 UID |
lists.user[].video_id |
string | 유튜브 영상 ID |
lists.user[].video_name |
string | 영상 제목 |
lists.user[].video_duration |
integer | 영상 길이(초). 알 수 없으면 0 |
lists.user[].order_index |
integer | 목록 안의 순서 값. 작을수록 먼저 재생됩니다 |
lists.user[].created_at |
string | 목록에 들어온 시각. 타임존 표기가 없는 ISO 8601 형식입니다 |
lists.user[].user_nickname |
string 또는 null | 신청자 닉네임. 지금 잼쿠봇에 저장된 값이며 user_uid가 null이면 null |
settings.status 값입니다.
| 값 | 뜻 |
|---|---|
waiting |
재생할 곡이 없어 다음 신청을 기다리는 상태. 처음 상태이고, 대기열을 다 재생했을 때도 이 상태가 됩니다. 곡이 들어오면 바로 재생합니다 |
play_user, play_streamer |
신청 리스트 곡 또는 스트리머 리스트 곡을 재생하는 중 |
pause_user, pause_streamer |
일시정지 |
stop |
정지. 곡이 들어와도 play 전에는 재생하지 않습니다. stop 동작(대시보드 정지·!sr 종료·이 API), 자동 진행이 꺼진 채 곡이 끝났을 때, 일시정지 중 그 곡의 목록을 비웠을 때 이 상태가 됩니다 |
재생·일시정지 중인 곡은 끝나거나 건너뛸 때까지 대기열에 남아 있습니다. settings.current_video_type 목록에서 video_id가 settings.current_video_id와 같은 첫 항목이 지금 곡입니다.
{
"type": "state",
"settings": {
"status": "play_user",
"is_accepting": true,
"max_request_per_user": 5,
"max_request_per_subscriber": null,
"max_request_per_follower": null,
"max_duration": 600,
"require_point": 0,
"no_duplicate": false,
"volume": 80,
"captions_enabled": false,
"auto_advance": true,
"block_shorts": false,
"current_video_id": "a1B2c3D4e5F",
"current_video_type": "user",
"current_video_title": "아이유 - 밤편지"
},
"lists": {
"user": [
{
"id": 1532,
"list_type": "user",
"user_uid": "fedcba9876543210fedcba9876543210",
"video_id": "a1B2c3D4e5F",
"video_name": "아이유 - 밤편지",
"video_duration": 254,
"order_index": 0,
"created_at": "2026-10-05T21:02:11.204000",
"user_nickname": "시청자닉네임"
}
],
"streamer": []
}
}
오류
| 상태 | 응답 | 원인 |
|---|---|---|
| 401, 403 | 공통 오류 | 토큰이 유효하지 않거나 sr:control 권한이 없습니다 |
재생 제어
재생, 일시정지, 정지, 다음 곡, 처음부터 다시 재생을 지시합니다. 바뀐 상태는 대시보드와 방송 화면 플레이어에 바로 반영되고 응답으로도 돌아옵니다.
POST
/api/ v1/ developer/ sr/ control권한: sr:control요청
| 이름 | 위치 | 타입 | 필수 | 설명 |
|---|---|---|---|---|
action |
body | string | 예 | play, pause, stop, skip, restart 중 하나. 대소문자를 구분합니다 |
action |
동작 |
|---|---|
play |
일시정지 중이면 멈춘 곳부터 이어서 재생합니다. 재생 중이면 그대로 둡니다. 대기·정지 상태면 다음 곡을 처음부터 재생합니다 |
pause |
재생 중이면 일시정지합니다. 다른 상태에서는 바뀌는 것이 없습니다 |
stop |
재생을 끝내고 지금 곡 정보를 비웁니다. 듣던 곡은 대기열에 남아 차례가 오면 처음부터 다시 나옵니다 |
skip |
재생·일시정지 중인 곡을 대기열에서 빼고 다음 곡을 재생합니다. 대기·정지 상태면 곡을 빼지 않고 다음 곡을 재생합니다 |
restart |
지금 곡을 처음부터 다시 재생합니다. 일시정지 중이어도 재생으로 바뀝니다. 지금 곡이 없으면 다음 곡을 재생합니다 |
다음 곡은 신청 리스트 맨 위 곡이고, 신청 리스트가 비었으면 스트리머 리스트 맨 위 곡입니다. 두 목록이 모두 비었으면 waiting 상태가 되고, 그 뒤 들어오는 신청은 바로 재생됩니다. 빈 대기열에서 play·skip·restart 를 보내도 waiting 입니다. play의 이어서 재생과 restart의 처음부터 재생이 대시보드 버튼·채팅 명령과 어떻게 대응하는지는 재생 조작하기와 채팅으로 조작하기를 참고하세요.
POST /api/v1/developer/sr/control
Authorization: Bearer ACCESS_TOKEN
Content-Type: application/json
{"action": "pause"}
응답
| 필드 | 타입 | 설명 |
|---|---|---|
ok |
boolean | 항상 true |
state |
object | 제어 후 상태. SR 상태 조회 응답과 같은 형식입니다 |
{
"ok": true,
"state": {
"type": "state",
"settings": {
"status": "pause_user",
"is_accepting": true,
"max_request_per_user": 5,
"max_request_per_subscriber": null,
"max_request_per_follower": null,
"max_duration": 600,
"require_point": 0,
"no_duplicate": false,
"volume": 80,
"captions_enabled": false,
"auto_advance": true,
"block_shorts": false,
"current_video_id": "a1B2c3D4e5F",
"current_video_type": "user",
"current_video_title": "아이유 - 밤편지"
},
"lists": {
"user": [
{
"id": 1532,
"list_type": "user",
"user_uid": "fedcba9876543210fedcba9876543210",
"video_id": "a1B2c3D4e5F",
"video_name": "아이유 - 밤편지",
"video_duration": 254,
"order_index": 0,
"created_at": "2026-10-05T21:02:11.204000",
"user_nickname": "시청자닉네임"
}
],
"streamer": []
}
}
}
오류
| 상태 | 응답 | 원인 |
|---|---|---|
| 400 | 아래 본문 | action이 다섯 값 중 하나가 아닙니다 |
| 422 | {"detail": [...]} |
본문이 JSON 객체가 아니거나, action이 없거나 문자열이 아닙니다 |
| 401, 403 | 공통 오류 | 토큰이 유효하지 않거나 sr:control 권한이 없습니다 |
{"detail": "action 은 play|pause|stop|skip|restart 중 하나"}
이 가이드로 해결이 안 됐나요?
디스코드로 문의하기