Referência de API
Suno Personas
Create a reusable persona from a track's reference vocals.
01
Visão geral
Use o endpoint personas e leia o resultado na mesma resposta.
Início rápido
- Crie uma Chave de API e defina-a como RUNAPI_API_KEY.
- Envie uma requisição POST cujo corpo corresponda ao schema da requisição.
- Leia o resultado do corpo da resposta bem-sucedida.
Endpoint
- URL base
https://runapi.ai- Versão da API
v1- Autenticação
Authorization: Bearer YOUR_API_TOKEN
02
Modelos suportados
Abra uma página de modelo para ver preços atuais, limites de taxa e detalhes de uso comercial.
03
Corpo JSONEsquema de solicitação
Envie apenas os campos declarados para este endpoint.
Corpo da solicitação4 campos
descriptionstring
Obrigatório
Descrição da persona.
namestring
Obrigatório
Nome da persona.
source_audio_idstring
Obrigatório
ID do áudio dentro da Task de origem que contém os vocais de referência.
source_task_idstring
Obrigatório
ID da Task RunAPI que produziu o áudio de referência.
04
HTTP 200Resposta de sucesso
POST /api/v1/personas
Esquema de resposta
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
},
"persona": {
"properties": {
"description": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"id",
"name",
"description"
],
"type": "object",
"unevaluatedProperties": false
}
},
"required": [
"persona",
"billing"
],
"type": "object",
"unevaluatedProperties": false
}
Exemplo de resposta
JSON
{
"billing": {
"refund": null,
"reservation": null,
"settlement": null
},
"persona": {
"description": "A warm and expressive vocal character.",
"id": "persona_reference",
"name": "Studio Voice"
}
}
05
HTTP 401Erros
POST /api/v1/personas
Esquema de resposta
JSON
{
"properties": {
"error": {
"description": "Mensagem de erro legível por humanos.",
"type": "string"
}
},
"required": [
"error"
],
"type": "object",
"unevaluatedProperties": false
}
Exemplo de resposta
JSON
{
"error": "Authentication required"
}
06
HTTP 400Erros
POST /api/v1/personas
Esquema de resposta
JSON
{
"oneOf": [
{
"properties": {
"error": {
"description": "Mensagem de erro legível por humanos.",
"type": "string"
}
},
"required": [
"error"
],
"type": "object",
"unevaluatedProperties": false
},
{
"properties": {
"error": {
"description": "Resumo de validação legível por humanos.",
"type": "string"
},
"errors": {
"additionalProperties": {
"items": {
"type": "string"
},
"type": "array"
},
"description": "Mensagens de validação com chaves por campo de requisição público, com um array de strings legíveis por humanos para cada campo.",
"type": "object"
}
},
"required": [
"error",
"errors"
],
"type": "object",
"unevaluatedProperties": false
}
]
}
Exemplo de resposta
JSON
{
"error": "Validation failed",
"errors": {
"source_task_id": [
"is required"
]
}
}
07
HTTP 402Erros
POST /api/v1/personas
Esquema de resposta
JSON
{
"properties": {
"error": {
"description": "Mensagem de erro legível por humanos.",
"type": "string"
}
},
"required": [
"error"
],
"type": "object",
"unevaluatedProperties": false
}
Exemplo de resposta
JSON
{
"error": "Insufficient balance"
}
08
HTTP 429Erros
POST /api/v1/personas
Esquema de resposta
JSON
{
"properties": {
"error": {
"description": "Mensagem de erro legível por humanos.",
"type": "string"
}
},
"required": [
"error"
],
"type": "object",
"unevaluatedProperties": false
}
Exemplo de resposta
JSON
{
"error": "API key credit limit exceeded"
}
09
HTTP 409Erros
POST /api/v1/personas
Esquema de resposta
JSON
{
"properties": {
"error": {
"description": "Mensagem de erro legível por humanos.",
"type": "string"
}
},
"required": [
"error"
],
"type": "object",
"unevaluatedProperties": false
}
Exemplo de resposta
JSON
{
"error": "The request uses features that are not supported for the selected model"
}
10
HTTP 429Erros
POST /api/v1/personas
Esquema de resposta
JSON
{
"properties": {
"error": {
"description": "Mensagem de erro legível por humanos.",
"type": "string"
}
},
"required": [
"error"
],
"type": "object",
"unevaluatedProperties": false
}
Exemplo de resposta
JSON
{
"error": "Rate limit reached. Please retry later."
}
11
HTTP 503Erros
POST /api/v1/personas
Esquema de resposta
JSON
{
"properties": {
"error": {
"description": "Mensagem de erro legível por humanos.",
"type": "string"
}
},
"required": [
"error"
],
"type": "object",
"unevaluatedProperties": false
}
Exemplo de resposta
JSON
{
"error": "Service under maintenance, please try again later"
}
12
HTTP 504Erros
POST /api/v1/personas
Esquema de resposta
JSON
{
"properties": {
"error": {
"description": "Mensagem de erro legível por humanos.",
"type": "string"
}
},
"required": [
"error"
],
"type": "object",
"unevaluatedProperties": false
}
Exemplo de resposta
JSON
{
"error": "The request timed out"
}
13
Exemplos de Código Gerados
Use cURL diretamente ou instale um SDK para a sua linguagem. Cada exemplo submete a requisição validada mostrada nesta referência.
Instalar
Shell
pip install runapi-suno
PYTHON
import os
from runapi.suno import SunoClient
client = SunoClient(api_key=os.environ["RUNAPI_API_KEY"])
result = client.personas.run(
source_task_id="tsk_source_music",
source_audio_id="audio_reference",
name="Studio Voice",
description="A warm and expressive vocal character."
)