OpenAPI e índice de endpoints
Contrato OpenAPI 3.1 para download, todos os endpoints públicos com seus guias, cabeçalhos compartilhados e endereço de produção.
O contrato público legível por máquina está disponível em OpenAPI 3.1 YAML. Use-o para gerar um cliente ou validar sua integração com os endpoints públicos atuais.
Endereço da API de produção
https://api.spicyapi.ai é o único endereço de produção declarado em servers[0].url no OpenAPI. As APIs de tarefas usam /api/v1; os endpoints de compatibilidade de protocolos usam /v1 e /v1beta.
Essas APIs da plataforma permitem selecionar modelos, obter estimativas e acompanhar gastos sem abrir o Console. O catálogo de modelos inclui os preços da conta; quando o preço depende dos parâmetros, solicite um orçamento com as entradas exatas. O histórico de tarefas e o uso ficam restritos à chave de API usada na chamada. A criação e a rotação de chaves e as configurações de orçamento continuam no Console. Cada tabela tem links para o guia que explica o endpoint por completo.
Descoberta de modelos, preços e APIs da conta
| Método | Caminho | Finalidade | Guia |
|---|---|---|---|
GET | /console/v1/catalog/models | Catálogo público para avaliação: sem chave de API, preços padrão e limite de solicitações por endereço de origem | Primeiros passos |
GET | /api/v1/models | Consultar modelos disponíveis para chamadas, preços da conta e schemas opcionais | Catálogo de modelos |
GET | /api/v1/models/{model} | Consultar um modelo e seu JSON Schema completo | Catálogo de modelos |
POST | /api/v1/jobs/quote | Obter um orçamento válido por cinco minutos para a solicitação exata, sem criar tarefa nem reservar saldo | Orçamentos |
GET | /api/v1/chat/credit | Consultar os saldos disponível, reservado e total | Faturamento |
GET | /api/v1/usage | Consultar chamadas da chave atual e gastos liquidados em USD por data e modelo | Faturamento |
APIs de geração e tarefas
| Método | Caminho | Finalidade | Guia |
|---|---|---|---|
GET | /api/v1/jobs | Listar o histórico de tarefas da chave de API atual com paginação por cursor | Tarefas |
POST | /api/v1/jobs/createTask | Criar uma tarefa de geração assíncrona | Tarefas |
GET | /api/v1/jobs/recordInfo | Consultar uma tarefa criada com a chave de API usada na chamada | Tarefas |
POST | /api/v1/jobs/retry | Criar uma nova tarefa a partir de uma tarefa que falhou ou expirou; registros históricos de cancelamento continuam compatíveis | Ações de tarefas |
POST | /api/v1/jobs/purge | Destruir os arquivos e o prompt de uma tarefa em estado final; o registro de faturamento não é alterado | Retenção |
POST | /api/v1/jobs/stream | Executar um modelo de texto e transmitir a resposta por SSE | Texto e streaming |
APIs de mídia
| Método | Caminho | Finalidade | Guia |
|---|---|---|---|
POST | /api/v1/common/upload-url | Emitir uma autorização para upload direto de mídia | Mídia |
POST | /api/v1/files/{fileId}/commit | Verificar e confirmar um upload direto, retornando o URI spicy:// pronto para uso em tarefas | Mídia |
POST | /api/v1/files/import | Importar um arquivo de pesos LoRA a partir de um link, com um token de acesso opcional usado uma única vez e nunca armazenado; retorna o URI spicy:// pronto para uso em tarefas | Pesos de adaptador |
POST | /api/v1/common/download-url | Emitir uma URL de curta duração para baixar a saída de uma tarefa (opcional: tarefas concluídas já incluem uma) | Mídia |
POST | /api/v1/assets | Salvar um arquivo na biblioteca de ativos (Idempotency-Key obrigatório) | Mídia |
GET | /api/v1/assets | Listar seus ativos salvos (filtros favorite, collectionId, q; ordenação com sort) | Mídia |
GET | /api/v1/assets/usage | Consultar o plano, o uso e os limites da biblioteca de ativos | Mídia |
GET | /api/v1/assets/{assetId} | Obter um ativo com um novo link de prévia privado | Mídia |
PATCH | /api/v1/assets/{assetId} | Renomear um ativo ou alterar o indicador favorite | Mídia |
DELETE | /api/v1/assets/{assetId} | Excluir um ativo | Mídia |
GET | /api/v1/assets/entities | Listar os personagens da sua biblioteca de ativos (somente leitura) | Mídia |
GET | /api/v1/assets/entities/{entityId} | Obter um personagem com as imagens em ordem (somente leitura) | Mídia |
Autenticação e formato das respostas
Todos os endpoints, exceto o catálogo público, exigem sua chave de API como Authorization: Bearer sk-spicy-…; os endpoints de compatibilidade (/v1, /v1beta) também aceitam x-api-key, enviado pelos SDKs da Anthropic, e x-goog-api-key, enviado pelos SDKs Google GenAI. Nunca é aceita uma chave nos parâmetros de consulta da URL. Tarefas, novas tentativas, exclusões de conteúdo e links de download só ficam visíveis para a chave de API que criou a tarefa; veja Autenticação.
As respostas JSON da API de tarefas compartilham o envelope {code,msg,data,request_id}; os endpoints de compatibilidade usam o formato dos respectivos protocolos. O resultado de uma tarefa é indicado por data.state, não pelo code do envelope. Veja Erros.
Cabeçalhos de solicitação compartilhados entre endpoints
| Cabeçalho | Destino | Finalidade |
|---|---|---|
Authorization: Bearer … | Todos, exceto o catálogo público | Sua chave de API |
Idempotency-Key | jobs/createTask, jobs/retry, jobs/stream, POST /v1/videos e endpoints de texto em /v1 e /v1beta | Permite reenviar com segurança após um erro de rede. Nos endpoints de tarefas, retorna a tarefa original; nos de texto, evita uma segunda cobrança, mas não recupera uma resposta perdida. Veja Idempotência |
X-Spicy-Retention | jobs/createTask, jobs/stream | Reduz o prazo de armazenamento das saídas e do prompt desta tarefa, em segundos. Veja Retenção |
Accept-Language | Qualquer endpoint | Idioma das mensagens de erro; os códigos nunca mudam. Veja Erros |
Como usar o arquivo OpenAPI
- Experimentar solicitações sem escrever código: importe o arquivo OpenAPI indicado no início desta página em um cliente de API, como Postman, Insomnia ou Bruno, e configure sua chave de API como token Bearer. Lembre-se de que criar tarefas custa dinheiro.
- Gerar um cliente: forneça o mesmo arquivo a um gerador de código OpenAPI 3.1 para sua linguagem.
Mudanças no contrato
- Não mantenha uma cópia fixa dos parâmetros dos modelos no código como referência permanente; consulte
inputSchemaem/models/{model}. - Aceite campos desconhecidos nas respostas, mas nunca invente campos desconhecidos nas solicitações.
- Use o OpenAPI YAML na geração de código ou em testes de contrato antes de publicar.
Endpoints de compatibilidade
| Método | Caminho | Protocolo |
|---|---|---|
GET | /v1/models | Models |
POST | /v1/chat/completions | Chat Completions |
POST | /v1/responses | Responses |
POST | /v1/messages | Messages |
POST | /v1beta/models/{model}:generateContent | Gemini generateContent |
POST | /v1beta/models/{model}:streamGenerateContent | Gemini streamGenerateContent |
POST | /v1/videos | Videos |
GET | /v1/videos/{videoId} | Status do vídeo |
GET | /v1/videos/{videoId}/content | Conteúdo do vídeo |
Os endpoints de texto são explicados em Texto e streaming; sua cobrança está em Orçamentos e compatibilidade.
O pacote oficial de TypeScript é @spicyapi/sdk. Para Python e Go, ou quando você não pode adicionar uma dependência, os clientes de referência abaixo podem ser copiados e chamam esses endpoints usando apenas o ambiente de execução da linguagem. O de Python realiza todo o fluxo de uma tarefa de mídia: enviar e confirmar um arquivo de referência, confirmar o preço com um orçamento, criar a tarefa e consultá-la até um estado final, ler o resultado em arquivos ou texto, renovar um link de saída expirado, destruir o conteúdo armazenado depois e verificar uma assinatura de webhook. O de Go cobre o mesmo fluxo, com contexto em todas as chamadas e um erro tipado recuperável por errors.As. O de TypeScript cobre criação de tarefas, novas tentativas, consulta de status e espera com limite; para uploads e os demais recursos em Node.js, use o SDK.
Clientes de referência copiáveis
Exemplos sem dependências para descobrir modelos, criar tarefas, repetir tarefas com falha, consultar todos os estados finais, limitar a espera e tratar idempotência e erros. Uma tarefa aceita não pode ser cancelada.
São exemplos da documentação, não pacotes npm ou PyPI nem módulos Go publicados. Dez minutos é um limite local, não um SLA.

