spicyapiDocumentação
Desenvolver com a API
Conteúdo principal

Autenticação

Formato da chave, restrições por chave, tarefas visíveis para cada chave e o que fazer assim que uma chave vazar.

Toda chamada de API que cria, consulta ou cobra algo envia sua chave de API no cabeçalho Authorization. A única exceção é o catálogo público de modelos usado para avaliação, que não exige chave.

Authorization: Bearer sk-spicy-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

A API nativa (/api/v1/*) aceita somente chaves Bearer, sem cookies nem parâmetros de consulta.

Os endpoints de compatibilidade de texto e vídeo (/v1, /v1beta) usam a mesma chave e também aceitam o cabeçalho x-api-key usado pelos SDKs da Anthropic e o x-goog-api-key usado pelos SDKs Google GenAI. Assim, os SDKs oficiais funcionam alterando apenas a URL base; veja Texto e streaming. Esses dois cabeçalhos não têm efeito em /api/v1, e nenhum endpoint aceita uma chave nos parâmetros de consulta da URL.

Chaves de API e console são separados

Somente /api/v1, /v1 e /v1beta aceitam chaves de API. O console web usa sua própria sessão de navegador. Portanto, o login do console não pode ser usado como chave de API, e uma chave de API vazada não permite entrar no console. Enviar o tipo errado de credencial sempre retorna 401, nunca um erro de permissão.

Formato de uma chave

Um prefixo fixo sk-spicy-, seguido de 48 caracteres hexadecimais minúsculos.

ParteFinalidade
sk-spicy-Prefixo fixo para reconhecer a chave em logs, repositórios e na verificação de segredos do GitHub
Próximos 8 caracteresSegmento de busca: permite localizar rapidamente o registro da chave. A chave inteira continua sendo verificada
40 restantesO restante do segredo. Armazenamos apenas um hash SHA-256 da chave inteira com um segredo adicional, chamado pepper; nós também não conseguimos recuperar a chave

O prefixo é intencional: é melhor que um sistema encontre a chave e avise você do que descobrir o vazamento quando outra pessoa já estiver gastando seu saldo.

A chave é exibida apenas uma vez

Copie-a ou clique em Salvar como arquivo antes de fechar a janela. Se perdê-la, crie outra. Não podemos recuperá-la, e essa é a intenção: para ser recuperável, ela teria de ser armazenada em texto puro.

Criar uma chave

  1. Abra Console → Chaves de API e clique em Criar chave.
  2. Dê um nome que identifique o serviço que usará a chave, como production backend ou staging worker. Você precisará reconhecê-la ao revogá-la.
  3. Se desejar, abra Avançado para definir limites de gastos, uma lista de modelos permitidos, uma lista de IPs permitidos e uma data de expiração. Todos esses ajustes podem ser alterados depois.
  4. Copie a chave ou clique em Salvar como arquivo e confirme que a guardou. Depois que a janela fechar, a chave não poderá ser exibida novamente.

Para criar chaves, é necessário ter o papel de proprietário, administrador ou desenvolvedor na equipe. A chave pertence à equipe selecionada no canto superior esquerdo do console: seu uso e seus limites contam para essa equipe. Cada equipe pode ter até 50 chaves ativas. Sua conta também precisa de e-mail verificado e saldo para a chave executar operações pagas; veja Configuração da conta.

Onde guardar a chave

  • No seu computador, para testes: use export SPICY_API_KEY="…" no terminal, válido até fechar a janela, ou um arquivo .env carregado pelo seu código. Adicione .env a .gitignore antes do primeiro commit.
  • Em um servidor ou plataforma de hospedagem: use as configurações de segredos ou variáveis de ambiente e leia SPICY_API_KEY do ambiente no seu código.
  • Nunca cole a chave em código-fonte, conversas, capturas de tela, chamados de suporte ou prompts de assistentes de IA.

Nunca distribua uma chave no cliente

Tudo que está em um navegador ou aplicativo pode ser extraído

Empacotar, ofuscar ou dividir a string entre arquivos não protege a chave. Qualquer pessoa com ferramentas de desenvolvimento ou um descompilador pode obtê-la, e uma chave vazada continua funcionando até esgotar seu saldo ou seus limites.

Quando um frontend precisar de geração, encaminhe a chamada pelo seu próprio backend: o navegador chama seu serviço, e seu serviço chama o nosso. Nessa camada, você também pode aplicar suas próprias cotas por usuário.

A mesma regra vale para binários de aplicativos móveis, clientes desktop, notebooks públicos, logs de CI e qualquer conteúdo que acabe em uma saída de curl -v colada em um chamado de suporte.

Suas próprias ferramentas no seu próprio navegador são um caso diferente. A API aceita chamadas de navegadores; por isso, ferramentas de uso pessoal nas quais você informa sua própria chave, como a extensão do SillyTavern ou um aplicativo de roleplay, podem chamá-la diretamente. A regra acima trata de incluir uma chave em algo que outras pessoas carregam. Dê a cada ferramenta uma chave própria com limite diário, para acompanhar seus gastos e revogá-la separadamente.

Restrições por chave

Configure-as no console ao criar a chave ou depois. Elas são aplicadas no servidor.

RestriçãoBenefícioCódigo de negócio ao atingir a restrição
Limite diário de gastosNovas chaves não têm limite, a menos que você configure um. Defina um valor para limitar os prejuízos de uma configuração incorreta ou de um vazamento. Reinicia a cada dia UTC40202
Orçamento mensalQuanto a chave pode gastar no mês corrente, contabilizado em UTC40202
Limite total de gastosValor total que a chave pode gastar durante toda sua existência. Útil para chaves entregues a parceiros40202
ExpiraçãoA chave deixa de funcionar ao fim do dia escolhido, em UTC401
Lista de IPs permitidosSomente os endereços ou intervalos CIDR listados podem fazer chamadas. Recomendada para integrações no servidor40302
Lista de modelos permitidosPor exemplo, limitar chaves de testes a modelos baratos. Sem restrição, a chave também pode chamar modelos adicionados depois40301

O cartão de cada chave mostra os limites atuais, que você pode alterar ali a qualquer momento.

Os limites incluem tanto o dinheiro reservado para tarefas em execução quanto o já gasto; uma chave pode atingir o limite enquanto há tarefas em andamento. O msg informa qual limite foi atingido. Um 40202 cujo msg menciona a cota da plataforma não se refere à sua chave: criar outra não resolve; tente mais tarde.

A lista de IPs permitidos é comparada com seu endereço público real, conforme visto pela nossa rede de borda, não com o endereço do último proxy. Seu endereço de saída é o IP público de onde partem as solicitações do servidor: a maioria das plataformas de hospedagem o informa nas configurações de rede; no seu computador, curl https://ifconfig.me o mostra.

Tarefas pertencem à chave que as criou

Uma tarefa só fica visível pela API para a chave de API que a criou. Com qualquer outra chave, mesmo da mesma equipe:

Ação com outra chaveResultado
Consultar a tarefa (recordInfo), repeti-la, destruir seu conteúdo ou solicitar um link de download404, igual à resposta de uma tarefa inexistente
Listar tarefas (GET /api/v1/jobs) ou consultar uso (GET /api/v1/usage)Apenas as tarefas e os gastos da própria chave
Reenviar uma solicitação com o mesmo Idempotency-Key409, sem o ID da tarefa original

Um 409 após trocar de chave não significa que a tarefa não foi criada

Se uma solicitação exceder o tempo limite usando uma chave e você a reenviar com outra, o 409 oculta uma tarefa que pode já estar em execução e será cobrada. Não interprete isso como “não criada” e reenvie com uma nova chave de idempotência: você pagará por uma segunda geração. Reenvie com a chave usada na primeira tentativa ou procure a tarefa no console.

Duas coisas não ficam vinculadas à chave. Os webhooks de uma tarefa são entregues mesmo após a revogação da chave que a criou. Além disso, todas as tarefas da equipe, independentemente da chave usada, aparecem em Console → Logs, e os detalhes de cada tarefa mostram a Chave usada.

Rotação

  • Uma chave por ambiente, produção, testes e local, para revogar uma sem afetar as outras.
  • Rotação planejada: crie a nova chave e envie somente tarefas novas com ela. Mantenha a antiga ativa até que todas as tarefas criadas por ela atinjam um estado final, no máximo até o deadlineAt de cada tarefa, e você tenha coletado os resultados; depois, revogue-a. Use essa sequência somente se a chave antiga ainda for confiável.
  • A revogação é imediata e irreversível. Não há cache para esperar expirar nem possibilidade de reativar a chave; você precisa criar outra.

Depois de um vazamento

Revogue a chave agora

Em Console → Chaves de API, abra as ações da chave e escolha Revogar. O efeito é imediato.

Não espere suas próprias tarefas em andamento: a partir desse momento, elas não poderão mais ser consultadas pela API com essa chave. Tarefas já aceitas continuam em execução e são cobradas. Colete os resultados pelos seus webhooks ou em Console → Logs. Um vazamento não é hora de esperar.

Crie uma substituta

Crie outra chave e atualize a configuração do servidor. Não deixe uma chave vazada ativa enquanto prepara a substituição.

Confira como ela foi usada

Abra Console → Logs no intervalo do vazamento e procure tarefas que você não criou: modelos desconhecidos, volume incomum ou gastos sem explicação. Os detalhes de cada tarefa mostram a Chave usada, e Exportar CSV inclui o ID da chave em cada tarefa. A página de chaves de API também informa quando cada chave foi usada pela última vez.

Reforce a proteção da substituta

Defina uma lista de IPs permitidos e um limite diário adequados para a nova chave e elimine a exposição original do código, dos logs ou da configuração de implantação.

Se houver gastos inesperados, entre em contato em Console → Suporte, informando os IDs das tarefas ou os valores de request_id.

Como é uma falha de autenticação

{
  "code": 401,
  "msg": "Credentials are invalid or expired",
  "request_id": "req_01k3m8x9q2z4v7n5p6r8s0t1w2"
}

O status HTTP também é 401. Toda falha de autenticação retorna code: 401, e msg informa o tipo:

Início de msgO que aconteceuO que fazer
Missing credentialsNenhuma chave chegou ao serviçoConfira se o cabeçalho está escrito como Authorization: Bearer … e se SPICY_API_KEY está definido no processo que envia a solicitação; uma variável definida em uma janela do terminal não existe em outra
API key format is not recognizedAlgo foi enviado, mas não é uma chave da SpicyAPIChaves começam com sk-spicy-. Procure um prefixo Bearer ausente, caracteres a mais ou a menos, aspas ou uma quebra de linha copiada junto com a chave
Credentials are invalid or expiredA chave tem o formato correto, mas não existe, foi revogada ou expirouEsses casos são intencionalmente indistinguíveis para impedir que alguém investigue quais chaves existem. Confira o status em Console → Chaves de API ou crie outra

Baseie a lógica em code, não no texto: a redação pode mudar e segue seu idioma de erros. Veja mais sobre essas diferenças em Erros.

Quando a própria conta não pode chamar a API, por e-mail não verificado ou conta suspensa, você recebe 403. Trocar a chave não resolve esse caso.

Nesta página