곡 조회 및 기록 API

2026-09-18 업데이트 · Suno-API 팀

이 페이지는 무료 조회 엔드포인트 세 가지를 다룹니다:

기능 메서드 엔드포인트
지정한 곡의 생성 상태와 결과 조회 POST /api/music/query
현재 계정이 생성한 곡 조회 GET /api/music/songs
지정한 곡의 생성 시 보관된 파라미터 조회 GET /api/music/songs/:song_id

생성 엔드포인트의 접수 영수증 모드(accept_mode=async)를 사용했다면, 손에 있는 것은 곡 ID가 아니라 접수 번호입니다. 진행 상황은 GET /api/music/requests/{request_id}로 조회하고, 실제 song_id를 받은 뒤 이 페이지의 엔드포인트로 돌아오세요. 자세한 내용은 영감 모드 생성 API의 "접수 영수증 모드"를 참고하세요.

인증과 데이터 범위

세 엔드포인트 모두 같은 API Key로 인증합니다:

Authorization: Bearer YOUR_API_KEY

곡 기록은 API Key가 속한 user_id 단위로 분리됩니다. 같은 메인 계정에서 만든 여러 API Key는 그 메인 계정의 곡 기록을 조회할 수 있지만, 다른 사용자나 하위 사이트 계정의 곡은 조회할 수 없습니다.

기록 계열 엔드포인트는 실제로 생성된 곡만 반환하며, 다음은 포함하지 않습니다:


1. 생성 상태 조회

하나 또는 여러 곡 ID로 현재 생성 상태와 최종 결과를 조회합니다.

엔드포인트: POST /api/music/query

과금: 무료.

Headers

파라미터 타입 필수 설명
Authorization string 예 Bearer YOUR_API_KEY
Content-Type string 예 application/json

Body 파라미터

파라미터 타입 필수 기본값 설명
model string 아니오 suno-v6 모델 버전
song_ids string 예 - 곡 ID. 여러 개는 쉼표로 구분합니다

요청 예시

curl -X POST https://www.suno-api.io/api/music/query \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "suno-v6",
    "song_ids": "clip_id_1,clip_id_2"
  }'

응답 예시

[
  {
    "song_id": "clip_id_1",
    "song_title": "곡 제목",
    "status": "completed",
    "audio_url": "https://example.com/audio.mp3",
    "video_url": "https://example.com/video.mp4",
    "cover_url": "https://example.com/cover.jpg",
    "lyrics": "가사 본문",
    "style_tags": "Mandopop, acoustic",
    "duration": 180.5,
    "model_version": "suno-v6",
    "created_at": "2026-05-21T10:00:00Z"
  }
]

호환성 안내

구버전 문서에서는 song_ids를 배열로 표기할 수 있습니다. 현재는 쉼표로 구분한 문자열을 권장하며, 실제 호출 방식과 일치합니다.

song_ids는 실재하는 곡 ID여야 합니다. pending:으로 시작하는 자리표시자 ID는 최종 song_id가 아니며 이 엔드포인트에 쓸 수 없습니다. 자리표시자 ID만 조회하면 빈 배열 []이 반환될 수 있습니다.

응답의 model, model_version, 플랫폼의 model_name은 과거 값이 남아 있을 수 있습니다. 새 작업에는 suno-v6, suno-v6-wild, suno-v6-mini를 사용하세요. suno-v2부터 suno-v5-5까지는 종료되었고, 기록에 이런 이름이 보인다고 해서 해당 모델을 계속 제출할 수 있는 것은 아닙니다.

생성 작업이 pending, submitted, processing 상태일 때는 audio_url, video_url, cover_url이 비어 있을 수 있으며, 이는 작업이 아직 끝나지 않은 정상 상태입니다. 주소가 비었다는 이유만으로 실패라고 판단하지 말고 status와 함께 판단하고, 상태가 완료된 뒤 다시 조회하세요. 상태가 완료되었는데도 주소가 계속 비어 있을 때만 song_id를 첨부해 기술 지원에 문의하세요.

⚠️ 오디오 주소 유효 기간은 7일입니다. 제때 옮겨 두세요

이 엔드포인트가 반환하는 audio_url, video_url(그리고 WAV 등 다른 미디어 주소)은 플랫폼 오브젝트 스토리지에서 제공되며 기본 7일 후 만료됩니다. 만료되면 파일이 회수되고 기존 주소는 404를 반환합니다.

  • 7일 안에 파일을 직접 보관하는 스토리지로 옮기세요. 장기 링크로 취급하지 마세요.
  • 주소 만료는 곡을 다시 생성할 필요도 없고 추가 요금도 없습니다. 이 엔드포인트(POST /api/music/query)를 다시 호출하면 해당 곡의 새로운 유효 주소를 받을 수 있습니다.

2. 계정 곡 기록 조회

현재 API Key가 속한 메인 계정이 생성한 곡을 조회합니다. 자체 곡 목록, 선택기, 기록 페이지를 만드는 데 적합합니다.

엔드포인트: GET /api/music/songs

과금: 무료.

Query 파라미터

파라미터 타입 필수 기본값 설명
p integer 아니오 1 페이지 번호. 1부터 시작
page_size integer 아니오 20 페이지당 개수. 최대 100
q string 아니오 - 제목 부분 일치 검색, 또는 전체 곡 ID로 정확히 검색
status string 아니오 - 상태 정확 일치 필터. 예: completed, playable

결과는 created_at과 내부 레코드 ID 내림차순으로 정렬되어 페이지 순서가 안정적으로 유지됩니다.

제출이 타임아웃된 건을 찾는 방법: 생성 계열 엔드포인트는 접수 전에 중간 응답을 주지 않습니다. 제출할 때 클라이언트가 타임아웃되거나 연결이 끊겼다면 그 주문은 이미 접수되어 생성 중일 수 있습니다. 이 엔드포인트를 최신순으로 한 번 확인하세요. 접수된 곡은 정상적으로 목록에 나타납니다. 정말 없는 것을 확인한 뒤 다시 제출해 이중 과금을 피하세요. 자세한 내용은 새 API 개요의 "대기 시간과 타임아웃 설정"을 참고하세요.

요청 예시

curl "https://www.suno-api.io/api/music/songs?p=1&page_size=20&status=completed" \
  -H "Authorization: Bearer YOUR_API_KEY"

응답 예시

{
  "success": true,
  "message": "",
  "data": {
    "page": 1,
    "page_size": 20,
    "total": 42,
    "items": [
      {
        "song_id": "8e31b3c0-example-song-id",
        "title": "밤의 도시",
        "status": "completed",
        "generation_type": "custom_generate",
        "model": "suno-v6",
        "duration": 187.42,
        "audio_url": "https://example.com/audio.mp3",
        "image_url": "https://example.com/cover.jpg",
        "created_at": 1784000000,
        "completed_at": 1784000120
      }
    ]
  }
}

반환 필드

필드 타입 설명
song_id string 상세 조회에 쓸 수 있는 실제 곡 ID
title string 현재 곡 제목. 사용자가 바꿨을 수 있습니다
status string 현재 상태
generation_type string 생성 유형
model string 생성 모델
duration number 오디오 길이(초)
audio_url string 오디오 주소. 미완료 시 비어 있을 수 있습니다
image_url string 커버 주소. 비어 있을 수 있습니다
created_at integer 생성 시각. Unix 초 단위 타임스탬프
completed_at integer 완료 시각. Unix 초 단위 타임스탬프. 미완료 시 없을 수 있습니다

목록 엔드포인트는 프롬프트, 과금 필드, 계정 정보, 원본 응답을 반환하지 않습니다. 프롬프트와 생성 파라미터가 필요하면 곡 상세 엔드포인트를 호출하세요.


3. 생성 파라미터 조회

곡 ID로 그 곡이 생성될 때 플랫폼이 보관한 프롬프트, 스타일, 모델, 소스 곡 등의 파라미터를 조회합니다.

엔드포인트: GET /api/music/songs/:song_id

과금: 무료.

현재 API Key가 속한 메인 계정의 곡만 조회할 수 있습니다. 다른 사용자나 하위 사이트 계정의 곡은 일괄적으로 "곡을 찾을 수 없음"으로 처리됩니다.

경로 파라미터

파라미터 타입 필수 설명
song_id string 예 실제 곡 ID

요청 예시

curl "https://www.suno-api.io/api/music/songs/8e31b3c0-example-song-id" \
  -H "Authorization: Bearer YOUR_API_KEY"

응답 예시

{
  "success": true,
  "message": "",
  "data": {
    "song_id": "8e31b3c0-example-song-id",
    "title": "밤의 도시",
    "status": "completed",
    "generation_type": "custom_generate",
    "model": "suno-v6",
    "duration": 187.42,
    "audio_url": "https://example.com/audio.mp3",
    "image_url": "https://example.com/cover.jpg",
    "video_url": "",
    "wav_url": "",
    "created_at": 1784000000,
    "completed_at": 1784000120,
    "client_request_id": "example-request-id",
    "client_request_index": 0,
    "parameters": {
      "prompt": "비 갠 뒤의 도시 거리, 재회에 관한 가사",
      "style_tags": "Mandopop, acoustic, warm vocal",
      "title": "밤의 도시",
      "model": "suno-v6",
      "generation_type": "custom_generate",
      "source_song_id": "",
      "source_audio_url": "",
      "custom_mode": null,
      "instrumental": null,
      "negative_tags": null,
      "vocal_gender": null,
      "lyrics_mode": null,
      "wait_audio": null,
      "style_weight": null,
      "weirdness_constraint": null
    },
    "parameter_retention": {
      "core_parameters_available": true,
      "extended_parameters_available": false,
      "sources": [
        "suno_tasks"
      ],
      "unavailable_fields": [
        "custom_mode",
        "instrumental",
        "negative_tags",
        "vocal_gender",
        "lyrics_mode",
        "wait_audio",
        "style_weight",
        "weirdness_constraint"
      ]
    }
  }
}

parameters 필드

필드 타입 설명
prompt string 생성 프롬프트 또는 가사
style_tags string 스타일 태그
title string 보관된 생성 제목. 일반 기록 작업은 현재 제목만 남았을 수 있습니다
model string 생성 모델
generation_type string 생성 유형
source_song_id string 커버, 연장 등 작업의 소스 곡 ID
source_audio_url string 소스 오디오 주소
custom_mode boolean/null 커스텀 모드 여부. 보관되지 않았으면 null
instrumental boolean/null 순수 연주곡 여부. 기존 기록 데이터는 보통 따로 보관하지 않았습니다
negative_tags string/null 제외 스타일
vocal_gender string/null 보컬 성별 설정
lyrics_mode string/null 가사 모드. 기존 기록 데이터는 보통 보관되지 않았습니다
wait_audio boolean/null 전체 오디오를 기다렸는지 여부. 기존 기록 데이터는 보통 보관되지 않았습니다
style_weight number/null 스타일 가중치
weirdness_constraint number/null 창의성/기이함 파라미터

prompt_view 필드(프롬프트 보기, 2026-09-28 추가)

prompt_view는 "프롬프트 보기" 전용 정규화 구조입니다. 생성 유형별로 데이터를 고정 구역으로 정리하므로 클라이언트가 어떤 필드를 표시할지 스스로 판단할 필요가 없습니다. 순수 추가 필드이며, 기존 필드 (parameters, parameter_retention)의 이름과 의미는 그대로이고, 새 필드를 해석하지 않는 클라이언트는 전혀 영향을 받지 않습니다.

"prompt_view": {
  "type": "custom_generate",
  "type_label": "프로 모드",
  "generation": {
    "model": "suno-v6", "max_mode": false, "duration": 182.4,
    "title": "새벽 네 시#701f37", "title_base": "새벽 네 시", "title_suffix": "701f37",
    "created_at": 1790421721
  },
  "inputs": {
    "user_text": "……", "user_text_kind": "lyrics",
    "user_style": "궈차오 일렉트로닉, 딥 서브 베이스, 레트로 신스",
    "style_tags": "궈차오 일렉트로닉, 딥 서브 베이스, 레트로 신스",
    "style_source": "user", "lyrics": "……",
    "negative_tags": "", "is_instrumental": false
  },
  "extended": {
    "vocal_gender": "m", "style_weight": 0.5, "audio_weight": 0.85,
    "weirdness_constraint": 0.5, "variety": 2, "lyrics_mode": "manual",
    "custom_mode": true
  },
  "reference": { "voice_name": "sv_40_34", "source_song_id": "", "source_title": "" },
  "retention": {
    "recorded_since": "2026-09-28", "missing_reason": "",
    "not_applicable_fields": ["audio_weight"]
  }
}
필드 타입 설명
type / type_label string 생성 유형 원값 / 표시 라벨(간단 생성, 프로 모드, 사운드 이펙트 모드, 음색 클론 생성…)
generation.model string 사용한 모델
generation.max_mode bool Max Mode 사용 여부
generation.duration number 오디오 길이(초)
generation.title string 저장된 그대로의 제목(접미사가 붙어 있을 수 있음)
generation.title_base string 끝의 #xxxxxx 접미사를 뺀 표시용 제목
generation.title_suffix string 접미사 자체(# 제외). 없으면 빈 값
inputs.user_text string 사용자 입력(유형에 따라 설명 또는 가사)
inputs.user_text_kind string lyrics / description / cover_requirements
inputs.user_style string 사용자가 직접 입력한 스타일(프로 모드, 음색, 사운드 이펙트)
inputs.style_tags string 최종 적용된 스타일
inputs.style_source string user = 사용자 입력; suno_derived = Suno가 설명에서 정리한 것
inputs.lyrics string 가사 본문. 없으면 빈 값, 순수 연주곡은 [Instrumental]
inputs.negative_tags string 제외 스타일
inputs.is_instrumental bool 순수 연주곡 여부
extended.* — 확장 파라미터(아래 참조). 보관되지 않은 필드는 나타나지 않습니다
reference.voice_name string 음색 이름(음색 계열만. 내부 persona id는 반환하지 않음)
reference.source_song_id / source_title string 커버, 연장 등 작업의 소스 곡
retention.recorded_since string 확장 파라미터 보관 시작일(2026-09-28)
retention.missing_reason string 확장 파라미터가 없는 이유. 기록 데이터는 not_recorded_before_20260928
retention.not_applicable_fields string[] 해당 생성 유형에 원래 필요 없는 파라미터("파라미터 누락"으로 표시하지 마세요)

extended에 나타날 수 있는 필드: vocal_gender, style_weight, audio_weight, weirdness_constraint, variety, lyrics_mode, custom_mode, 그리고 사운드 이펙트 계열의 sound_type / sound_bpm / sound_key / sound_loop. 빈 값은 일괄적으로 반환하지 않습니다.

표시 규칙 세 가지(추측하지 말고 이대로 구현하세요):

  1. 스타일 출처를 구분하세요: style_source=suno_derived이면 "스타일(Suno가 설명에서 정리함)"으로 표시하고 "내가 입력한 스타일"로 쓰지 마세요;
  2. 내부 프롬프트는 나타나지 않습니다: 음색 커버 계열은 사용자가 입력한 【스타일 요구 사항】/【커버 요구 사항】만 반환하며, 모델에 넣기 위해 조립한 고정 구조는 어떤 필드에도 나타나지 않습니다(기록 데이터도 동일하게 마스킹됨);
  3. 보관되지 않은 파라미터를 추측하지 마세요: extended에 없으면 당시 기록되지 않은 것이므로 retention으로 이유를 설명하세요.

파라미터 보관 설명

parameter_retention은 "명시적으로 빈 값을 전달한 경우"와 "역사적으로 그 필드를 저장하지 않은 경우"를 구분하기 위한 것입니다:

일반 기록 곡은 보통 프롬프트, 스타일, 현재 제목, 모델, 생성 유형, 소스 곡을 저장했지만, 모든 고급 파라미터를 따로 저장하지는 않았습니다. 플랫폼은 generation_type으로 빠진 값을 추측하지 않습니다.

일부 확장 음악 작업은 원래 프롬프트, 스타일, 제목, 모델과 함께 custom_mode, negative_tags, vocal_gender, style_weight, weirdness_constraint도 저장했습니다. 확장 레코드가 있어도 instrumental, lyrics_mode, wait_audio는 복원되지 않을 수 있습니다.

곡 제목은 나중에 사용자가 바꿀 수 있습니다. 일반 기록 작업이 원래 제목을 따로 저장하지 않았다면 parameters.title이 현재 제목일 수 있습니다. 확장 작업 기록이 있으면 거기에 저장된 원래 생성 제목을 우선 반환합니다.

존재하지 않거나 권한이 없는 경우

비즈니스 오류는 통일된 응답 봉투를 사용합니다. 곡이 존재하지 않거나 현재 계정에 속하지 않으면 다음을 반환합니다:

{
  "success": false,
  "message": "song not found"
}

이 비즈니스 오류는 현재 HTTP 200으로 반환되므로 결과는 success 필드로 판단하세요. API Key가 없거나, 유효하지 않거나, 만료되었거나, 사용 중지된 경우에는 HTTP 401을 반환합니다.

보안 안내

곡 기록과 상세 엔드포인트는 다음을 반환하지 않습니다:

다음타임라인 가사 API

API 키 발급

가입 후 콘솔에서 API 키를 만들 수 있습니다. 1회 0.6위안으로 2곡이 생성되고, 다운로드는 횟수 제한이 없으며 휴대폰 번호는 필요하지 않습니다.

API 키 받기 개요로 돌아가기