Saltar al contenido
Referencia de API
Referencia de API

Suno Extender música

Usa el endpoint de extensión de música para crear una Task asíncrona.

01

Descripción general

Usa el endpoint de extensión de música con un modelo compatible. Usa el ID de Task devuelto para recuperar su estado, o proporciona callback_url para las entregas documentadas a continuación.

Inicio rápido

  1. Cree una Clave de API y establézcala como RUNAPI_API_KEY.
  2. Elija un modelo compatible y envíe una solicitud POST cuyo cuerpo coincida con el esquema de ese modelo.
  3. Almacena el ID de tarea devuelto, luego sondea hasta alcanzar un estado terminal o gestiona las devoluciones de llamada documentadas a continuación.

Endpoint

POST /api/v1/suno/extend_music
URL base
https://runapi.ai
Versión de la API
v1
Autenticación
Authorization: Bearer YOUR_API_TOKEN
02

Modelos compatibles

Abra una página de modelo para conocer los precios actuales, los límites de velocidad y los detalles de uso comercial.

03

Esquema de solicitud

Cuerpo JSON

Los campos y los valores permitidos dependen del modelo seleccionado. Cuando se proporciona, callback_url recibe las entregas de tareas documentadas a continuación.

suno-v420 campos
audio_idstring
Opcional

ID de audio fuente para extender. Proporcione uno de: task_id, audio_id, audio_url o upload_url.

audio_urlstring
Opcional

URL de audio fuente para extender. Proporcione uno de: task_id, audio_id, audio_url o upload_url.

audio_weightnumber
Opcional

Peso del audio (0-1).

Rango: 0 - 1
callback_urlstring
Opcional

URL de webhook para notificaciones asíncronas.

continue_atnumber
Opcional

Segundos dentro de la fuente desde donde continuar. Obligatorio en el modo de parámetros personalizados.

instrumentalboolean
Opcional

Cuando es verdadero, genera sin voces.

lyricsstring
Opcional

Letra exacta. Solo se permite al extender audio cargado en modo de parámetros personalizados.

Límite: 5000
modelstring
Obligatorio

Identificador del modelo.

negative_tagsstring
Opcional

Estilos a evitar.

parameter_modestring
Obligatorio

Hereda los parámetros de la pista de origen (source) o proporciona los personalizados (custom).

Valores permitidos: source, custom
persona_idstring
Opcional

ID de persona.

persona_typestring
Opcional

Tipo de persona.

Valores permitidos: style, voice
promptstring
Opcional

Resumen de extensión. No se puede combinar con lyrics.

Límite: 5000
stylestring
Opcional

Preset de estilo. Obligatorio en el modo de parámetros personalizados.

Límite: 1000
style_weightnumber
Opcional

Peso de adherencia al estilo (0-1).

Rango: 0 - 1
task_idstring
Opcional

ID de Task fuente para extender. Proporcione uno de: task_id, audio_id, audio_url o upload_url.

titlestring
Opcional

Título de la canción. Obligatorio en el modo de parámetros personalizados.

Límite: 80
upload_urlstring
Opcional

URL del audio fuente cargado desde el que extender. Proporciona uno de task_id, audio_id, audio_url o upload_url.

vocal_genderstring
Opcional

Género vocal.

Valores permitidos: male, female
weirdness_constraintnumber
Opcional

Restricción de rareza (0-1).

Rango: 0 - 1
suno-v4.520 campos
audio_idstring
Opcional

ID de audio fuente para extender. Proporcione uno de: task_id, audio_id, audio_url o upload_url.

audio_urlstring
Opcional

URL de audio fuente para extender. Proporcione uno de: task_id, audio_id, audio_url o upload_url.

audio_weightnumber
Opcional

Peso del audio (0-1).

Rango: 0 - 1
callback_urlstring
Opcional

URL de webhook para notificaciones asíncronas.

continue_atnumber
Opcional

Segundos dentro de la fuente desde donde continuar. Obligatorio en el modo de parámetros personalizados.

instrumentalboolean
Opcional

Cuando es verdadero, genera sin voces.

lyricsstring
Opcional

Letra exacta. Solo se permite al extender audio cargado en modo de parámetros personalizados.

Límite: 5000
modelstring
Obligatorio

Identificador del modelo.

negative_tagsstring
Opcional

Estilos a evitar.

parameter_modestring
Obligatorio

Hereda los parámetros de la pista de origen (source) o proporciona los personalizados (custom).

Valores permitidos: source, custom
persona_idstring
Opcional

ID de persona.

persona_typestring
Opcional

Tipo de persona.

Valores permitidos: style, voice
promptstring
Opcional

Resumen de extensión. No se puede combinar con lyrics.

Límite: 5000
stylestring
Opcional

Preset de estilo. Obligatorio en el modo de parámetros personalizados.

Límite: 1000
style_weightnumber
Opcional

Peso de adherencia al estilo (0-1).

Rango: 0 - 1
task_idstring
Opcional

ID de Task fuente para extender. Proporcione uno de: task_id, audio_id, audio_url o upload_url.

titlestring
Opcional

Título de la canción. Obligatorio en el modo de parámetros personalizados.

Límite: 80
upload_urlstring
Opcional

URL del audio fuente cargado desde el que extender. Proporciona uno de task_id, audio_id, audio_url o upload_url.

vocal_genderstring
Opcional

Género vocal.

Valores permitidos: male, female
weirdness_constraintnumber
Opcional

Restricción de rareza (0-1).

Rango: 0 - 1
suno-v4.5-all20 campos
audio_idstring
Opcional

ID de audio fuente para extender. Proporcione uno de: task_id, audio_id, audio_url o upload_url.

audio_urlstring
Opcional

URL de audio fuente para extender. Proporcione uno de: task_id, audio_id, audio_url o upload_url.

audio_weightnumber
Opcional

Peso del audio (0-1).

Rango: 0 - 1
callback_urlstring
Opcional

URL de webhook para notificaciones asíncronas.

continue_atnumber
Opcional

Segundos dentro de la fuente desde donde continuar. Obligatorio en el modo de parámetros personalizados.

instrumentalboolean
Opcional

Cuando es verdadero, genera sin voces.

lyricsstring
Opcional

Letra exacta. Solo se permite al extender audio cargado en modo de parámetros personalizados.

Límite: 5000
modelstring
Obligatorio

Identificador del modelo.

negative_tagsstring
Opcional

Estilos a evitar.

parameter_modestring
Obligatorio

Hereda los parámetros de la pista de origen (source) o proporciona los personalizados (custom).

Valores permitidos: source, custom
persona_idstring
Opcional

ID de persona.

persona_typestring
Opcional

Tipo de persona.

Valores permitidos: style, voice
promptstring
Opcional

Resumen de extensión. No se puede combinar con lyrics.

Límite: 5000
stylestring
Opcional

Preset de estilo. Obligatorio en el modo de parámetros personalizados.

Límite: 1000
style_weightnumber
Opcional

Peso de adherencia al estilo (0-1).

Rango: 0 - 1
task_idstring
Opcional

ID de Task fuente para extender. Proporcione uno de: task_id, audio_id, audio_url o upload_url.

titlestring
Opcional

Título de la canción. Obligatorio en el modo de parámetros personalizados.

Límite: 80
upload_urlstring
Opcional

URL del audio fuente cargado desde el que extender. Proporciona uno de task_id, audio_id, audio_url o upload_url.

vocal_genderstring
Opcional

Género vocal.

Valores permitidos: male, female
weirdness_constraintnumber
Opcional

Restricción de rareza (0-1).

Rango: 0 - 1
suno-v4.5-plus20 campos
audio_idstring
Opcional

ID de audio fuente para extender. Proporcione uno de: task_id, audio_id, audio_url o upload_url.

audio_urlstring
Opcional

URL de audio fuente para extender. Proporcione uno de: task_id, audio_id, audio_url o upload_url.

audio_weightnumber
Opcional

Peso del audio (0-1).

Rango: 0 - 1
callback_urlstring
Opcional

URL de webhook para notificaciones asíncronas.

continue_atnumber
Opcional

Segundos dentro de la fuente desde donde continuar. Obligatorio en el modo de parámetros personalizados.

instrumentalboolean
Opcional

Cuando es verdadero, genera sin voces.

lyricsstring
Opcional

Letra exacta. Solo se permite al extender audio cargado en modo de parámetros personalizados.

Límite: 5000
modelstring
Obligatorio

Identificador del modelo.

negative_tagsstring
Opcional

Estilos a evitar.

parameter_modestring
Obligatorio

Hereda los parámetros de la pista de origen (source) o proporciona los personalizados (custom).

Valores permitidos: source, custom
persona_idstring
Opcional

ID de persona.

persona_typestring
Opcional

Tipo de persona.

Valores permitidos: style, voice
promptstring
Opcional

Resumen de extensión. No se puede combinar con lyrics.

Límite: 5000
stylestring
Opcional

Preset de estilo. Obligatorio en el modo de parámetros personalizados.

Límite: 1000
style_weightnumber
Opcional

Peso de adherencia al estilo (0-1).

Rango: 0 - 1
task_idstring
Opcional

ID de Task fuente para extender. Proporcione uno de: task_id, audio_id, audio_url o upload_url.

titlestring
Opcional

Título de la canción. Obligatorio en el modo de parámetros personalizados.

Límite: 80
upload_urlstring
Opcional

URL del audio fuente cargado desde el que extender. Proporciona uno de task_id, audio_id, audio_url o upload_url.

vocal_genderstring
Opcional

Género vocal.

Valores permitidos: male, female
weirdness_constraintnumber
Opcional

Restricción de rareza (0-1).

Rango: 0 - 1
suno-v520 campos
audio_idstring
Opcional

ID de audio fuente para extender. Proporcione uno de: task_id, audio_id, audio_url o upload_url.

audio_urlstring
Opcional

URL de audio fuente para extender. Proporcione uno de: task_id, audio_id, audio_url o upload_url.

audio_weightnumber
Opcional

Peso del audio (0-1).

Rango: 0 - 1
callback_urlstring
Opcional

URL de webhook para notificaciones asíncronas.

continue_atnumber
Opcional

Segundos dentro de la fuente desde donde continuar. Obligatorio en el modo de parámetros personalizados.

instrumentalboolean
Opcional

Cuando es verdadero, genera sin voces.

lyricsstring
Opcional

Letra exacta. Solo se permite al extender audio cargado en modo de parámetros personalizados.

Límite: 5000
modelstring
Obligatorio

Identificador del modelo.

negative_tagsstring
Opcional

Estilos a evitar.

parameter_modestring
Obligatorio

Hereda los parámetros de la pista de origen (source) o proporciona los personalizados (custom).

Valores permitidos: source, custom
persona_idstring
Opcional

ID de persona.

persona_typestring
Opcional

Tipo de persona.

Valores permitidos: style, voice
promptstring
Opcional

Resumen de extensión. No se puede combinar con lyrics.

Límite: 5000
stylestring
Opcional

Preset de estilo. Obligatorio en el modo de parámetros personalizados.

Límite: 1000
style_weightnumber
Opcional

Peso de adherencia al estilo (0-1).

Rango: 0 - 1
task_idstring
Opcional

ID de Task fuente para extender. Proporcione uno de: task_id, audio_id, audio_url o upload_url.

titlestring
Opcional

Título de la canción. Obligatorio en el modo de parámetros personalizados.

Límite: 80
upload_urlstring
Opcional

URL del audio fuente cargado desde el que extender. Proporciona uno de task_id, audio_id, audio_url o upload_url.

vocal_genderstring
Opcional

Género vocal.

Valores permitidos: male, female
weirdness_constraintnumber
Opcional

Restricción de rareza (0-1).

Rango: 0 - 1
suno-v5.520 campos
audio_idstring
Opcional

ID de audio fuente para extender. Proporcione uno de: task_id, audio_id, audio_url o upload_url.

audio_urlstring
Opcional

URL de audio fuente para extender. Proporcione uno de: task_id, audio_id, audio_url o upload_url.

audio_weightnumber
Opcional

Peso del audio (0-1).

Rango: 0 - 1
callback_urlstring
Opcional

URL de webhook para notificaciones asíncronas.

continue_atnumber
Opcional

Segundos dentro de la fuente desde donde continuar. Obligatorio en el modo de parámetros personalizados.

instrumentalboolean
Opcional

Cuando es verdadero, genera sin voces.

lyricsstring
Opcional

Letra exacta. Solo se permite al extender audio cargado en modo de parámetros personalizados.

Límite: 5000
modelstring
Obligatorio

Identificador del modelo.

negative_tagsstring
Opcional

Estilos a evitar.

parameter_modestring
Obligatorio

Hereda los parámetros de la pista de origen (source) o proporciona los personalizados (custom).

Valores permitidos: source, custom
persona_idstring
Opcional

ID de persona.

persona_typestring
Opcional

Tipo de persona.

Valores permitidos: style, voice
promptstring
Opcional

Resumen de extensión. No se puede combinar con lyrics.

Límite: 5000
stylestring
Opcional

Preset de estilo. Obligatorio en el modo de parámetros personalizados.

Límite: 1000
style_weightnumber
Opcional

Peso de adherencia al estilo (0-1).

Rango: 0 - 1
task_idstring
Opcional

ID de Task fuente para extender. Proporcione uno de: task_id, audio_id, audio_url o upload_url.

titlestring
Opcional

Título de la canción. Obligatorio en el modo de parámetros personalizados.

Límite: 80
upload_urlstring
Opcional

URL del audio fuente cargado desde el que extender. Proporciona uno de task_id, audio_id, audio_url o upload_url.

vocal_genderstring
Opcional

Género vocal.

Valores permitidos: male, female
weirdness_constraintnumber
Opcional

Restricción de rareza (0-1).

Rango: 0 - 1
04

Crear aceptación

HTTP 202

POST /api/v1/suno/extend_music

Esquema de respuesta
JSON
{
  "properties": {
    "billing": {
      "properties": {
        "refund": {
          "oneOf": [
            {
              "properties": {
                "refunded_at": {
                  "type": "string"
                }
              },
              "required": [
                "refunded_at"
              ],
              "type": "object",
              "unevaluatedProperties": false
            },
            {
              "enum": [
                null
              ]
            }
          ]
        },
        "reservation": {
          "oneOf": [
            {
              "properties": {
                "amount_cents": {
                  "type": "integer"
                }
              },
              "required": [
                "amount_cents"
              ],
              "type": "object",
              "unevaluatedProperties": false
            },
            {
              "enum": [
                null
              ]
            }
          ]
        },
        "settlement": {
          "oneOf": [
            {
              "properties": {
                "amount_micro_cents": {
                  "type": "integer"
                },
                "charged_amount_cents": {
                  "type": "integer"
                }
              },
              "required": [
                "charged_amount_cents",
                "amount_micro_cents"
              ],
              "type": "object",
              "unevaluatedProperties": false
            },
            {
              "enum": [
                null
              ]
            }
          ]
        }
      },
      "required": [
        "reservation",
        "settlement",
        "refund"
      ],
      "type": "object",
      "unevaluatedProperties": false
    },
    "id": {
      "type": "string"
    },
    "status": {
      "enum": [
        "processing"
      ],
      "type": "string"
    },
    "task_replayed": {
      "type": "boolean"
    }
  },
  "required": [
    "id",
    "status",
    "billing"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Ejemplo de respuesta

JSON
{
  "billing": {
    "refund": null,
    "reservation": null,
    "settlement": null
  },
  "id": "tsk_reference_demo",
  "status": "processing"
}
05

Consulta en proceso

HTTP 200

GET /api/v1/suno/extend_music/:id

Esquema de respuesta
JSON
{
  "properties": {
    "audios": {
      "items": {
        "properties": {
          "audio_url": {
            "type": "string",
            "x-runapi-generated-media": true
          },
          "duration": {
            "type": "number"
          },
          "id": {
            "type": "string"
          },
          "image_url": {
            "type": "string",
            "x-runapi-generated-media": true
          },
          "lyrics": {
            "type": "string"
          },
          "model_name": {
            "type": "string"
          },
          "stream_audio_url": {
            "type": "string",
            "x-runapi-generated-media": true
          },
          "tags": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object",
        "unevaluatedProperties": false
      },
      "type": "array"
    },
    "billing": {
      "properties": {
        "refund": {
          "oneOf": [
            {
              "properties": {
                "refunded_at": {
                  "type": "string"
                }
              },
              "required": [
                "refunded_at"
              ],
              "type": "object",
              "unevaluatedProperties": false
            },
            {
              "enum": [
                null
              ]
            }
          ]
        },
        "reservation": {
          "oneOf": [
            {
              "properties": {
                "amount_cents": {
                  "type": "integer"
                }
              },
              "required": [
                "amount_cents"
              ],
              "type": "object",
              "unevaluatedProperties": false
            },
            {
              "enum": [
                null
              ]
            }
          ]
        },
        "settlement": {
          "oneOf": [
            {
              "properties": {
                "amount_micro_cents": {
                  "type": "integer"
                },
                "charged_amount_cents": {
                  "type": "integer"
                }
              },
              "required": [
                "charged_amount_cents",
                "amount_micro_cents"
              ],
              "type": "object",
              "unevaluatedProperties": false
            },
            {
              "enum": [
                null
              ]
            }
          ]
        }
      },
      "required": [
        "reservation",
        "settlement",
        "refund"
      ],
      "type": "object",
      "unevaluatedProperties": false
    },
    "generation_stage": {
      "enum": [
        "text_generated",
        "first_audio_ready"
      ],
      "type": "string"
    },
    "id": {
      "type": "string"
    },
    "status": {
      "enum": [
        "processing"
      ],
      "type": "string"
    }
  },
  "required": [
    "id",
    "status",
    "billing"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Ejemplo de respuesta

JSON
{
  "billing": {
    "refund": null,
    "reservation": null,
    "settlement": null
  },
  "generation_stage": "text_generated",
  "id": "tsk_reference_demo",
  "status": "processing"
}
06

Consulta completada

HTTP 200

GET /api/v1/suno/extend_music/:id

Esquema de respuesta
JSON
{
  "properties": {
    "audios": {
      "items": {
        "properties": {
          "audio_url": {
            "type": "string",
            "x-runapi-generated-media": true
          },
          "duration": {
            "type": "number"
          },
          "id": {
            "type": "string"
          },
          "image_url": {
            "type": "string",
            "x-runapi-generated-media": true
          },
          "lyrics": {
            "type": "string"
          },
          "model_name": {
            "type": "string"
          },
          "stream_audio_url": {
            "type": "string",
            "x-runapi-generated-media": true
          },
          "tags": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object",
        "unevaluatedProperties": false
      },
      "type": "array"
    },
    "billing": {
      "properties": {
        "refund": {
          "oneOf": [
            {
              "properties": {
                "refunded_at": {
                  "type": "string"
                }
              },
              "required": [
                "refunded_at"
              ],
              "type": "object",
              "unevaluatedProperties": false
            },
            {
              "enum": [
                null
              ]
            }
          ]
        },
        "reservation": {
          "oneOf": [
            {
              "properties": {
                "amount_cents": {
                  "type": "integer"
                }
              },
              "required": [
                "amount_cents"
              ],
              "type": "object",
              "unevaluatedProperties": false
            },
            {
              "enum": [
                null
              ]
            }
          ]
        },
        "settlement": {
          "oneOf": [
            {
              "properties": {
                "amount_micro_cents": {
                  "type": "integer"
                },
                "charged_amount_cents": {
                  "type": "integer"
                }
              },
              "required": [
                "charged_amount_cents",
                "amount_micro_cents"
              ],
              "type": "object",
              "unevaluatedProperties": false
            },
            {
              "enum": [
                null
              ]
            }
          ]
        }
      },
      "required": [
        "reservation",
        "settlement",
        "refund"
      ],
      "type": "object",
      "unevaluatedProperties": false
    },
    "generation_stage": {
      "enum": [
        "text_generated",
        "first_audio_ready",
        "all_audios_ready",
        "failed"
      ],
      "type": "string"
    },
    "id": {
      "type": "string"
    },
    "status": {
      "enum": [
        "completed"
      ],
      "type": "string"
    }
  },
  "required": [
    "id",
    "status",
    "audios",
    "billing"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Ejemplo de respuesta

JSON
{
  "audios": [
    {
      "audio_url": "https://file.runapi.ai/reference-audio.mp3",
      "id": "audio_reference"
    }
  ],
  "billing": {
    "refund": null,
    "reservation": null,
    "settlement": null
  },
  "id": "tsk_reference_demo",
  "status": "completed"
}
07

Consulta fallida

HTTP 200

GET /api/v1/suno/extend_music/:id

Esquema de respuesta
JSON
{
  "properties": {
    "billing": {
      "properties": {
        "refund": {
          "oneOf": [
            {
              "properties": {
                "refunded_at": {
                  "type": "string"
                }
              },
              "required": [
                "refunded_at"
              ],
              "type": "object",
              "unevaluatedProperties": false
            },
            {
              "enum": [
                null
              ]
            }
          ]
        },
        "reservation": {
          "oneOf": [
            {
              "properties": {
                "amount_cents": {
                  "type": "integer"
                }
              },
              "required": [
                "amount_cents"
              ],
              "type": "object",
              "unevaluatedProperties": false
            },
            {
              "enum": [
                null
              ]
            }
          ]
        },
        "settlement": {
          "oneOf": [
            {
              "properties": {
                "amount_micro_cents": {
                  "type": "integer"
                },
                "charged_amount_cents": {
                  "type": "integer"
                }
              },
              "required": [
                "charged_amount_cents",
                "amount_micro_cents"
              ],
              "type": "object",
              "unevaluatedProperties": false
            },
            {
              "enum": [
                null
              ]
            }
          ]
        }
      },
      "required": [
        "reservation",
        "settlement",
        "refund"
      ],
      "type": "object",
      "unevaluatedProperties": false
    },
    "error": {
      "type": "string"
    },
    "id": {
      "type": "string"
    },
    "status": {
      "enum": [
        "failed"
      ],
      "type": "string"
    }
  },
  "required": [
    "id",
    "status",
    "error",
    "billing"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Ejemplo de respuesta

JSON
{
  "billing": {
    "refund": null,
    "reservation": null,
    "settlement": null
  },
  "error": "Task processing failed.",
  "id": "tsk_reference_demo",
  "status": "failed"
}
08

Devolución de llamada del cliente: procesando

HTTP 200

POST callback_url

Esquema de respuesta
JSON
{
  "properties": {
    "audios": {
      "items": {
        "properties": {
          "audio_url": {
            "type": "string",
            "x-runapi-generated-media": true
          },
          "duration": {
            "type": "number"
          },
          "id": {
            "type": "string"
          },
          "image_url": {
            "type": "string",
            "x-runapi-generated-media": true
          },
          "lyrics": {
            "type": "string"
          },
          "model_name": {
            "type": "string"
          },
          "stream_audio_url": {
            "type": "string",
            "x-runapi-generated-media": true
          },
          "tags": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object",
        "unevaluatedProperties": false
      },
      "type": "array"
    },
    "generation_stage": {
      "enum": [
        "text_generated",
        "first_audio_ready"
      ],
      "type": "string"
    },
    "id": {
      "type": "string"
    },
    "status": {
      "enum": [
        "processing"
      ],
      "type": "string"
    }
  },
  "required": [
    "id",
    "status"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Ejemplo de respuesta

JSON
{
  "generation_stage": "text_generated",
  "id": "tsk_reference_demo",
  "status": "processing"
}
09

Devolución de llamada del cliente: completado

HTTP 200

POST callback_url

Esquema de respuesta
JSON
{
  "properties": {
    "audios": {
      "items": {
        "properties": {
          "audio_url": {
            "type": "string",
            "x-runapi-generated-media": true
          },
          "duration": {
            "type": "number"
          },
          "id": {
            "type": "string"
          },
          "image_url": {
            "type": "string",
            "x-runapi-generated-media": true
          },
          "lyrics": {
            "type": "string"
          },
          "model_name": {
            "type": "string"
          },
          "stream_audio_url": {
            "type": "string",
            "x-runapi-generated-media": true
          },
          "tags": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object",
        "unevaluatedProperties": false
      },
      "type": "array"
    },
    "generation_stage": {
      "enum": [
        "text_generated",
        "first_audio_ready",
        "all_audios_ready",
        "failed"
      ],
      "type": "string"
    },
    "id": {
      "type": "string"
    },
    "status": {
      "enum": [
        "completed"
      ],
      "type": "string"
    }
  },
  "required": [
    "id",
    "status",
    "audios"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Ejemplo de respuesta

JSON
{
  "audios": [
    {
      "audio_url": "https://file.runapi.ai/reference-audio.mp3",
      "id": "audio_reference"
    }
  ],
  "id": "tsk_reference_demo",
  "status": "completed"
}
10

Devolución de llamada del cliente: fallido

HTTP 200

POST callback_url

Esquema de respuesta
JSON
{
  "properties": {
    "error": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "properties": {
            "code": {
              "type": "string"
            },
            "limit_cents": {
              "type": "integer"
            },
            "message": {
              "type": "string"
            },
            "reset_at": {
              "format": "date-time",
              "type": [
                "string",
                "null"
              ]
            },
            "used_cents": {
              "type": "integer"
            },
            "window": {
              "enum": [
                "1h",
                "1d",
                "7d",
                "daily",
                "weekly",
                "monthly",
                "lifetime"
              ],
              "type": "string"
            }
          },
          "required": [
            "code",
            "message"
          ],
          "type": "object",
          "unevaluatedProperties": false
        }
      ]
    },
    "id": {
      "type": "string"
    },
    "status": {
      "enum": [
        "failed"
      ],
      "type": "string"
    }
  },
  "required": [
    "id",
    "status",
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Ejemplo de respuesta

JSON
{
  "error": {
    "code": "generation_failed",
    "message": "Task processing failed."
  },
  "id": "tsk_reference_demo",
  "status": "failed"
}
11

Errores

HTTP 401

POST /api/v1/suno/extend_music

Esquema de respuesta
JSON
{
  "properties": {
    "error": {
      "description": "Mensaje de error legible por personas.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Ejemplo de respuesta

JSON
{
  "error": "Authentication required"
}
12

Errores

HTTP 401

GET /api/v1/suno/extend_music/:id

Esquema de respuesta
JSON
{
  "properties": {
    "error": {
      "description": "Mensaje de error legible por personas.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Ejemplo de respuesta

JSON
{
  "error": "Authentication required"
}
13

Errores

HTTP 400

POST /api/v1/suno/extend_music

Esquema de respuesta
JSON
{
  "oneOf": [
    {
      "properties": {
        "error": {
          "description": "Mensaje de error legible por personas.",
          "type": "string"
        }
      },
      "required": [
        "error"
      ],
      "type": "object",
      "unevaluatedProperties": false
    },
    {
      "properties": {
        "error": {
          "description": "Resumen de validación legible por personas.",
          "type": "string"
        },
        "errors": {
          "additionalProperties": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "description": "Mensajes de validación con clave por campo de solicitud público, con un array de cadenas legibles por personas para cada campo.",
          "type": "object"
        }
      },
      "required": [
        "error",
        "errors"
      ],
      "type": "object",
      "unevaluatedProperties": false
    }
  ]
}

Ejemplo de respuesta

JSON
{
  "error": "model must be one of: suno-v4, suno-v4.5, suno-v4.5-all, suno-v4.5-plus, suno-v5, suno-v5.5"
}
14

Errores

HTTP 402

POST /api/v1/suno/extend_music

Esquema de respuesta
JSON
{
  "properties": {
    "error": {
      "description": "Mensaje de error legible por personas.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Ejemplo de respuesta

JSON
{
  "error": "Insufficient balance"
}
15

Errores

HTTP 429

POST /api/v1/suno/extend_music

Esquema de respuesta
JSON
{
  "properties": {
    "error": {
      "description": "Mensaje de error legible por personas.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Ejemplo de respuesta

JSON
{
  "error": "API key credit limit exceeded"
}
16

Errores

HTTP 409

POST /api/v1/suno/extend_music

Esquema de respuesta
JSON
{
  "properties": {
    "error": {
      "description": "Mensaje de error legible por personas.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Ejemplo de respuesta

JSON
{
  "error": "The request uses features that are not supported for the selected model"
}
17

Errores

HTTP 429

POST /api/v1/suno/extend_music

Esquema de respuesta
JSON
{
  "properties": {
    "error": {
      "description": "Mensaje de error legible por personas.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Ejemplo de respuesta

JSON
{
  "error": "Rate limit reached. Please retry later."
}
18

Errores

HTTP 503

POST /api/v1/suno/extend_music

Esquema de respuesta
JSON
{
  "properties": {
    "error": {
      "description": "Mensaje de error legible por personas.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Ejemplo de respuesta

JSON
{
  "error": "Service under maintenance, please try again later"
}
19

Errores

HTTP 504

POST /api/v1/suno/extend_music

Esquema de respuesta
JSON
{
  "properties": {
    "error": {
      "description": "Mensaje de error legible por personas.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Ejemplo de respuesta

JSON
{
  "error": "The request timed out"
}
20

Errores

HTTP 404

GET /api/v1/suno/extend_music/:id

Esquema de respuesta
JSON
{
  "properties": {
    "error": {
      "description": "Mensaje de error legible por personas.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Ejemplo de respuesta

JSON
{
  "error": "Task with id 'tsk_reference_demo' not found"
}
21

Ejemplos de código generados

Usa cURL directamente o instala un SDK para tu lenguaje. Cada muestra envía la solicitud validada que se muestra en esta referencia.

Instalar

Shell
pip install runapi-suno
PYTHON
import os
from runapi.suno import SunoClient

client = SunoClient(api_key=os.environ["RUNAPI_API_KEY"])
task = client.extend_music.create(
  model="suno-v5",
  upload_url="https://cdn.runapi.ai/public/samples/music.mp3",
  parameter_mode="custom",
  instrumental=False,
  prompt="Continue the arrangement with a brighter chorus.",
  style="Acoustic pop with warm piano.",
  title="Brighter Chorus",
  continue_at=60,
  persona_id="persona_reference",
  persona_type="style"
)