API de subida de audio de origen
Descripción del endpoint
Subir audio de origen convierte un archivo de audio local o remoto en un clip de origen que pueden usar las capacidades posteriores: cover, extensión, reemplazo de sección, separación, etc.
Endpoint: POST /api/music/upload-source
Facturación: Gratis. Este endpoint solo sube el audio de origen; no inicia ninguna tarea de generación.
Uso recomendado: es el paso 1 del «cover en dos pasos». Sube primero el audio con este endpoint (es gratis y puedes reintentar siempre que falle) y guarda el
clip_iddevuelto; cuando confirmes que la subida se ha completado (statusen un estado finalizado), llama a la API de cover desde un clip de origen para iniciar el cover — el cuerpo de esa petición son solo unos cientos de bytes, así que no puede truncarse en tránsito porque el audio sea demasiado grande. Frente a la API de una sola vez subir y hacer cover, esta separación es más robusta cuando el audio es grande, la red es inestable o el mismo material se va a reutilizar varias veces (extensión / reemplazo / separación).
Consejos para subir archivos grandes
| Situación | Enfoque recomendado |
|---|---|
| El audio ya es público (tiene un enlace directo https) | Usa file_url: el cuerpo de la petición son solo unos cientos de bytes, la opción más robusta |
| URL firmada temporal (ByteDance y otras) | Usa file_url solo mientras sea pública y válida; en caso contrario usa multipart o sube de inmediato |
| Archivo local (Node / Python / escritorio) | Usa una subida multipart (-F "file=@source.mp3") y no establezcas Content-Type manualmente |
| Solo es posible JSON + base64 | Ten en cuenta que Content-Length debe ser el número de bytes (Buffer.byteLength); de lo contrario el cuerpo puede truncarse |
Cuando termine la subida, confirma siempre que el status de la respuesta ya sea un estado finalizado y guarda el clip_id antes de pasar al paso 2;
una subida fallida no se cobra y no crea ninguna tarea de generación, así que basta con reintentar.
Comprueba file_url antes de subir
Nuestro servidor descarga
file_urldirectamente; no lo hace tu navegador. Que una URL funcione en tu navegador no demuestra que los servidores de producción puedan acceder a ella.
Para archivos locales, usa una carga multipart con el campo file. No uses file_url con enlaces de ByteDance u otras URL firmadas temporales salvo que sean públicas y sigan vigentes al enviar la solicitud.
Ejecuta esto desde un servidor público antes de enviar la solicitud:
curl -L --max-time 30 -D - -o /dev/null "https://example.com/source.mp3"
La solicitud GET debe terminar en HTTP 200, devolver un MIME de audio y contener datos. Las páginas de inicio de sesión, HTML y los códigos 401, 403, 404 o 410 no sirven al servidor.
file_url download failed: HTTP 404 suele indicar que la firma caducó, el archivo se eliminó o faltan parámetros en la URL.
La carga es gratuita. Si falla la descarga de file_url, no se crea clip_id, tarea de canción ni llamada de generación, y no se cobra nada; no hace falta reembolso.
Parámetros de la petición
Headers
Para peticiones JSON:
| Parámetro | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Authorization | string | sí | Bearer YOUR_API_KEY |
| Content-Type | string | sí | application/json |
No establezcas Content-Type manualmente en peticiones multipart; lo genera el cliente.
Parámetros del cuerpo
| Parámetro | Tipo | Obligatorio | Por defecto | Notas |
|---|---|---|---|---|
| model | string | no | suno-v6 | Nombre de modelo para el cliente: suno-v6, suno-v6-wild o suno-v6-mini |
| file_url | string | no | - | URL del audio remoto |
| file_base64 | string | no | - | Audio en Base64 |
| file | archivo (multipart) | no | - | Archivo de audio a subir; el campo debe llamarse file |
| file_name | string | no | - | Nombre del archivo |
| upload_type | string | no | file_upload | Tipo de subida |
Ejemplo de petición JSON
curl -X POST https://www.suno-api.io/api/music/upload-source \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "suno-v6",
"file_url": "https://example.com/source.mp3",
"file_name": "source.mp3",
"upload_type": "file_upload"
}'
Ejemplo de petición multipart
curl -X POST https://www.suno-api.io/api/music/upload-source \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@source.mp3" \
-F "file_name=source.mp3" \
-F "upload_type=file_upload" \
-F "model=suno-v6"
import requests
with open("source.mp3", "rb") as audio:
response = requests.post(
"https://www.suno-api.io/api/music/upload-source",
headers={"Authorization": "Bearer YOUR_API_KEY"},
data={
"file_name": "source.mp3",
"upload_type": "file_upload",
"model": "suno-v6",
},
files={"file": ("source.mp3", audio, "audio/mpeg")},
timeout=300,
)
response.raise_for_status()
print(response.json())
Respuesta
{
"clip_id": "uploaded_clip_id",
"status": "complete",
"title": "source.mp3",
"image_url": "https://...",
"audio_url": "https://...",
"display_tags": "pop, vocal",
"inferred_description": "uploaded source audio",
"clip_metadata": {}
}
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