본문으로 이동

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 중 하나"}

이 가이드로 해결이 안 됐나요?

디스코드로 문의하기

명령어, 룰렛, OBS처럼 궁금한 걸 검색해 보세요.