API de subida reforzada

Actualizado el 2026-09-18 · equipo de Suno-API

Descripción del endpoint

La subida reforzada envía un archivo de audio local; el sistema realiza el realce en segundo plano y produce una canción completa y reproducible. La llamada de envío devuelve la información de la tarea de inmediato y el cliente consulta el progreso con el endpoint de consulta.

Endpoint de envío: POST /api/music/enhanced-upload

Consulta de una tarea: GET /api/music/enhanced-upload/:id

Cancelar una tarea: POST /api/music/enhanced-upload/:id/cancel

Consulta de la lista: GET /api/music/enhanced-upload

Facturación: 10 ¥ por llamada, con cobro previo al precio fijo de suno-enhanced-upload. Si la tarea falla, o se cancela dentro de la etapa permitida, el importe cobrado por adelantado se devuelve automáticamente. El importe realmente cobrado sigue la configuración de precios actual del back-office.

Flujo de llamada

  1. Llama a POST /api/music/enhanced-upload para subir el archivo de audio.
  2. Guarda el task_id devuelto.
  3. Llama a GET /api/music/enhanced-upload/:id para consultar progreso y resultado.
  4. Cuando Suno termina el renderizado final, el servicio usa la cuenta de Suno vinculada a esa tarea para llamar al endpoint de descarga autorizada de Studio y escribe el MP3 en el servicio de medios CN2.
  5. La tarea pasa a completed solo cuando el recurso CN2 está listo; en ese momento se lee la dirección de audio de la CDN desde audio_url en la respuesta.

/api/forbidden es una dirección de relleno que puede aparecer en los metadatos de Suno Studio; no es un recurso reproducible ni descargable. Nunca se devuelve al cliente ni se usa como prueba de finalización. Si el renderizado ya terminó pero CN2 sigue preparándose, el endpoint sigue devolviendo processing y no devuelve audio_url; el cliente debe seguir consultando y no tratar la dirección vacía como un fallo.

Enviar una subida reforzada

Headers

Parámetro Tipo Obligatorio Notas
Authorization string sí Bearer YOUR_API_KEY
Content-Type string no En peticiones multipart no lo definas a mano; deja que lo genere el cliente

Parámetros de formulario

Parámetro Tipo Obligatorio Por defecto Notas
file file sí - Archivo de audio local, máximo 80 MB
title string no nombre del archivo sin extensión Título de la canción

Ejemplo de petición

El ejemplo siguiente usa la misma forma de llamada que en la validación en producción, pero la clave de API se ha sustituido por un relleno.

curl.exe --http1.1 -s -S \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@source.aac" \
  -F "title=Enhanced upload demo" \
  "https://www.suno-api.io/api/music/enhanced-upload"

Respuesta

{
  "success": true,
  "message": "",
  "data": {
    "task_id": 3209,
    "song_id": "pending:enhanced-upload:cu_20260611003241723483700xnCcQg",
    "client_request_id": "cu_20260611003241723483700xnCcQg",
    "title": "Enhanced upload demo",
    "file_name": "source.aac",
    "status": "queued",
    "created_at": 1781137961,
    "pre_consumed_quota": 5000000,
    "billing_source": "wallet"
  }
}

Consultar una tarea

Ejemplo de petición

curl.exe --http1.1 -s -S \
  -H "Authorization: Bearer YOUR_API_KEY" \
  "https://www.suno-api.io/api/music/enhanced-upload/3209"

Ejemplo de respuesta en proceso

{
  "success": true,
  "message": "",
  "data": {
    "task": {
      "task_id": 3209,
      "song_id": "pending:enhanced-upload:cu_20260611003241723483700xnCcQg",
      "client_request_id": "cu_20260611003241723483700xnCcQg",
      "title": "Enhanced upload demo",
      "file_name": "source.aac",
      "status": "processing",
      "type": "enhanced_upload",
      "progress": {
        "stage": "media_preparing",
        "percent": 98,
        "label": "正在准备播放资源",
        "updated_at": 1781138500
      },
      "pre_consumed_quota": 5000000,
      "billing_source": "wallet",
      "created_at": 1781137961,
      "updated_at": 1781138500
    }
  }
}

Ejemplo de respuesta completada

{
  "success": true,
  "message": "",
  "data": {
    "task": {
      "task_id": 3209,
      "song_id": "56cbd0bb-0e8c-4a34-8729-55d5c05d9c53",
      "client_request_id": "cu_20260611003241723483700xnCcQg",
      "title": "Enhanced upload demo",
      "file_name": "source.aac",
      "status": "completed",
      "type": "enhanced_upload",
      "audio_url": "https://media.code-go.com/assets/56cbd0bb-0e8c-4a34-8729-55d5c05d9c53-mp3.mp3",
      "duration": 217.74,
      "progress": {
        "stage": "completed",
        "percent": 100,
        "label": "已完成",
        "updated_at": 1781138943
      },
      "pre_consumed_quota": 5000000,
      "billing_source": "wallet",
      "created_at": 1781137961,
      "updated_at": 1781138943,
      "completed_at": 1781138943
    }
  }
}

Cancelar una tarea

Solo se puede cancelar mientras la tarea y el flujo del backend siguen en la etapa queued. Una vez que la tarea entra en leasing, running, processing o ya ha finalizado, no se puede cancelar.

Ejemplo de petición

curl.exe --http1.1 -s -S -X POST \
  -H "Authorization: Bearer YOUR_API_KEY" \
  "https://www.suno-api.io/api/music/enhanced-upload/3209/cancel"

Respuesta

{
  "success": true,
  "message": "",
  "data": {
    "task_id": 3209,
    "song_id": "pending:enhanced-upload:cu_20260611003241723483700xnCcQg",
    "client_request_id": "cu_20260611003241723483700xnCcQg",
    "status": "cancelled"
  }
}

Si la tarea ya ha empezado a procesarse, el endpoint devuelve:

{
  "success": false,
  "message": "强化上传已开始处理,无法取消"
}

Consultar la lista de tareas

El endpoint de lista devuelve solo las tareas de subida reforzada del usuario al que pertenece la clave de API actual; no mezcla tareas de generación normal, cover ni extend.

Parámetros de query

Parámetro Tipo Obligatorio Por defecto Notas
p number no 1 Número de página
page_size number no valor por defecto del sistema Elementos por página, máximo 100

Ejemplo de petición

curl.exe --http1.1 -s -S \
  -H "Authorization: Bearer YOUR_API_KEY" \
  "https://www.suno-api.io/api/music/enhanced-upload?p=1&page_size=3"

Respuesta

{
  "success": true,
  "message": "",
  "data": {
    "page": 1,
    "page_size": 3,
    "total": 1,
    "items": [
      {
        "task_id": 3209,
        "song_id": "56cbd0bb-0e8c-4a34-8729-55d5c05d9c53",
        "client_request_id": "cu_20260611003241723483700xnCcQg",
        "title": "Enhanced upload demo",
        "file_name": "source.aac",
        "status": "completed",
        "type": "enhanced_upload",
        "audio_url": "https://media.code-go.com/assets/56cbd0bb-0e8c-4a34-8729-55d5c05d9c53-mp3.mp3",
        "duration": 217.74,
        "progress": {
          "stage": "completed",
          "percent": 100,
          "label": "已完成",
          "updated_at": 1781138943
        },
        "pre_consumed_quota": 5000000,
        "billing_source": "wallet",
        "created_at": 1781137961,
        "updated_at": 1781138943,
        "completed_at": 1781138943
      }
    ]
  }
}

Referencia de campos de la respuesta

Campo Tipo Notas
task_id number ID de la tarea de subida reforzada; úsalo para las consultas y la cancelación posteriores
song_id string pending:enhanced-upload:* durante el proceso; el ID real de la canción al completarse
client_request_id string ID de seguimiento de la petición del cliente
status string Estado de la tarea, como queued, processing, completed, failed, cancelled
type string Siempre enhanced_upload
audio_url string Dirección del audio una vez completada
duration number Duración del audio en segundos
progress.stage string Etapa de procesamiento actual
progress.percent number Porcentaje de progreso
progress.label string Texto de progreso que se muestra al usuario
pre_consumed_quota number Cuota cobrada por adelantado en esta llamada
billing_source string Origen del cobro, por ejemplo wallet
error_message string Motivo del fallo

Notas

Iniciar un cover cuando la subida reforzada termine

Cuando la subida reforzada haya terminado, puedes usar el resultado como clip de origen y llamar a POST /api/music/generate-from-source para iniciar un cover.

Nota: el cover es un endpoint síncrono — el pedido solo se acepta cuando llega la respuesta, y en casos medidos puede tardar hasta unos 230 segundos. Configura el timeout del cliente en 300 segundos o más y no reintentes justo después de un timeout. Consulta «Tiempos de espera y configuración de timeout» en el Resumen de la nueva API.

Primero consulta GET /api/music/enhanced-upload/:id hasta que task.status sea completed. En ese punto:

Al iniciar el cover, usa la misma clave de API que en la subida reforzada y monta la petición según esta correspondencia de campos:

Campo de la petición de cover De dónde viene el valor
sourceClipId task.song_id del resultado completado de la subida reforzada
sourceAudioUrl task.audio_url del resultado completado de la subida reforzada
sourceTitle task.title del resultado completado de la subida reforzada

Rellena el resto de parámetros (letra, estilo, título, modelo) según la API de cover desde un clip de origen. Cuando el endpoint de cover devuelva el nuevo clips[].song_id, usa POST /api/music/query para consultar el estado de generación y el audio final.

SiguienteAPI de subida y cover en un paso

Obtener una clave de API

Crea una clave de API en la consola después de registrarte. Cada generación cuesta 0,6 ¥ y devuelve 2 pistas, las descargas son ilimitadas y no hace falta número de teléfono.

Obtener clave de API Volver al resumen