Documentação da API
A API do Felipe IA Studio dá acesso por código aos mesmos modelos do Studio, no formato OpenAI Chat Completions. Se você já usa o SDK da OpenAI, basta trocar a base_url e a chave.
https://felipeiastudio.online/v1Authorization: Bearer sk-…A API faz parte do plano Desenvolvedor: tudo do plano Profissional (modelos de custo baixo e médio, interface do Studio) mais a API, a chave própria, o painel de consumo e esta documentação. Outros planos não têm acesso à API e recebem 403.
Começando em 3 passos
- Assine o plano Desenvolvedor em Planos. A área Desenvolvedores aparece no menu.
- Gere sua chave em Desenvolvedores → Chave de API. Ela aparece uma vez; gerar outra substitui a anterior. Guarde no servidor (variável de ambiente), nunca no navegador ou em app distribuído.
- Faça o primeiro pedido:
curl
curl https://felipeiastudio.online/v1/chat/completions \
-H "Authorization: Bearer $FELIPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"qwen-3-5-9b","messages":[{"role":"user","content":"O que é uma função?"}]}'Python (SDK da OpenAI)
from openai import OpenAI
client = OpenAI(base_url="https://felipeiastudio.online/v1", api_key="SUA_CHAVE")
resp = client.chat.completions.create(
model="qwen-3-5-9b",
messages=[
{"role": "system", "content": "Responda em português, em até duas frases."},
{"role": "user", "content": "O que é uma função?"},
],
)
print(resp.choices[0].message.content)
print(resp.usage)JavaScript / Node (SDK da OpenAI)
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://felipeiastudio.online/v1", apiKey: process.env.FELIPE_API_KEY });
const resp = await client.chat.completions.create({
model: "qwen-3-5-9b",
messages: [{ role: "user", content: "O que é uma função?" }],
});
console.log(resp.choices[0].message.content);Streaming em Python
stream = client.chat.completions.create(
model="qwen-3-5-9b",
messages=[{"role": "user", "content": "Explique recursão em 3 passos."}],
stream=True,
stream_options={"include_usage": True},
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)Autenticação
Envie a chave em todas as chamadas (exceto /v1/health e /v1/openapi.json):
Authorization: Bearer sk-SUA_CHAVE- A chave identifica a sua conta, o seu plano e o seu consumo. Quem tem a chave gasta o seu saldo.
- Se vazar, gere outra em Desenvolvedores: a anterior deixa de funcionar na hora.
- Chamadas sem chave, com chave errada ou substituída respondem
401. Plano sem API responde403.
Convenções, erros e limites
Formato dos erros
Todo erro de /v1 tem o mesmo formato (compatível com os SDKs da OpenAI):
{
"error": {
"message": "O modelo \"gpt-9\" não existe. Veja GET /v1/models.",
"type": "not_found_error",
"code": "not_found",
"param": null,
"request_id": "a3f1c2d4-…"
}
}Guarde o request_id (também vem no cabeçalho X-Request-ID de toda resposta) ao falar com o suporte.
| HTTP | error.code |
|---|---|
| 400 | invalid_request |
| 401 | invalid_api_key |
| 402 | insufficient_quota |
| 403 | forbidden |
| 404 | not_found |
| 413 | payload_too_large |
| 415 | unsupported_media_type |
| 429 | rate_limit_exceeded · plan_limit_reached |
| 502 | upstream_error |
| 503 | service_unavailable · model_unavailable |
| 504 | timeout |
Limite de requisições
O plano Desenvolvedor permite 120 requisições por minuto e 3000 mensagens de chat por dia (dia de São Paulo). Toda resposta autenticada traz:
x-ratelimit-limit-requests: 120
x-ratelimit-remaining-requests: 117
x-ratelimit-reset-requests: 41sAo estourar, a resposta é 429 com Retry-After (segundos). Durante os 7 dias de teste grátis (quando disponíveis) os créditos e o limite diário valem pela metade.
Tamanhos e tempo
- Chat: até 20 mensagens user/assistant, 10.000 caracteres por mensagem, 25.000 no total; instruções de sistema até 8.000.
- Imagem: prompt até 1500. Voz: texto até 1000. Transcrição: WAV 16 kHz mono 16-bit até 30 s.
- Uma requisição pode levar até 10 minutos. Para respostas longas use
stream: truee mantenha a conexão aberta (o servidor envia: keep-alivea cada 15 s).
Privacidade
O registro de consumo guarda só metadados (data, rota, modelo, status, tokens, créditos). O conteúdo das mensagens não é gravado nele. Se você ativou Aprimoramento do meu ambiente em Minha conta, conversas também podem ser separadas para revisão e treinamento privado do seu ambiente; vem desativado por padrão.
Status e especificação
GET /v1/health
Estado do serviço sem chave
Verifica se o serviço está de pé e quais recursos estão ativos. Não exige chave e não consome créditos. Use para monitoramento.
Exemplo de requisição
curl https://felipeiastudio.online/v1/healthExemplo de resposta
{
"status": "ok",
"time": "2026-10-29T15:04:05.000Z",
"chat": true,
"image": false,
"transcription": false,
"speech": false
}Campos da resposta
| Campo | Tipo | Descrição |
|---|---|---|
status | string | Sempre "ok" quando o serviço responde. |
chat | boolean | Há pelo menos um modelo de chat disponível. |
image / transcription / speech | boolean | Se a geração de imagem, a transcrição e a voz estão ativas neste servidor. |
GET /v1/openapi.json
Especificação OpenAPI sem chave
A especificação OpenAPI 3.1 desta API, para gerar clientes e importar no Postman, Insomnia ou Swagger UI. Não exige chave.
Exemplo de requisição
curl https://felipeiastudio.online/v1/openapi.jsonExemplo de resposta
{
"openapi": "3.1.0",
"info": {
"title": "Felipe IA Studio API",
"version": "1.0.0"
}
}Modelos
GET /v1/models
Listar modelos
Lista os modelos que você pode usar, com custo, faixa e disponibilidade. O campo felipe traz os dados do Studio. cost_level vale 1 (moeda azul, custo baixo), 2 (amarela, médio) ou 3 (vermelha, alto). Seu plano usa os níveis 1 e 2; modelos acima aparecem com locked: true e o plano exigido. Os serviços de imagem, transcrição e voz aparecem com available indicando se estão ativos.
Exemplo de requisição
curl https://felipeiastudio.online/v1/models \
-H "Authorization: Bearer $FELIPE_API_KEY"Exemplo de resposta
{
"object": "list",
"data": [
{
"id": "felipe-2.0",
"object": "model",
"created": 0,
"owned_by": "felipe",
"ready": true,
"felipe": {
"kind": "chat",
"label": "Felipe 2.0 (automático)",
"available": true,
"description": "O Studio escolhe o especialista adequado ao pedido."
}
},
{
"id": "qwen-3-5-9b",
"object": "model",
"created": 0,
"owned_by": "felipe",
"ready": true,
"felipe": {
"kind": "chat",
"label": "Qwen 3.5 9B",
"tier": "rapido",
"cost_level": 1,
"credits_per_answer": 3.1,
"max_output_tokens": 4096,
"available": true,
"locked": false,
"required_plan": null,
"description": ""
}
},
{
"id": "felipe-image",
"object": "model",
"created": 0,
"owned_by": "felipe",
"felipe": {
"kind": "image",
"label": "Geração de imagem",
"available": false,
"description": "POST /v1/images/generations"
}
}
]
}Campos da resposta
| Campo | Tipo | Descrição |
|---|---|---|
data[].id | string | Valor para o campo model das requisições. |
felipe.cost_level | 1 | 2 | 3 | Faixa de custo (moedas). |
felipe.credits_per_answer | number | Estimativa de créditos por resposta típica. |
felipe.available | boolean | Se pode ser usado agora (plano permite e o modelo está de pé). |
felipe.on_demand | boolean | Modelo grande que liga sob demanda: a primeira chamada depois de um período parado pode levar alguns minutos. Use stream: true e um tempo limite longo. |
felipe.locked / required_plan | boolean / string | Modelo de faixa acima do seu plano. |
Erros possíveis
| HTTP | error.code | Quando |
|---|---|---|
| 401 | invalid_api_key | Chave ausente, errada ou substituída por uma nova. |
| 403 | forbidden | O plano da conta não inclui a API (é preciso o plano Desenvolvedor), conta desativada ou modelo de uma faixa acima do seu plano. |
| 429 | rate_limit_exceeded / plan_limit_reached | Mais de 120 requisições por minuto (veja Retry-After), ou limite de créditos do plano esgotado (5 horas, semana ou mês; a mensagem informa quando volta). |
GET /v1/models/{model}
Consultar um modelo
Devolve os dados de um único modelo, no mesmo formato de cada item de GET /v1/models.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
model | path | string | sim | Id do modelo, por exemplo qwen-3-5-9b. |
Exemplo de requisição
curl https://felipeiastudio.online/v1/models/qwen-3-5-9b \
-H "Authorization: Bearer $FELIPE_API_KEY"Exemplo de resposta
{
"id": "qwen-3-5-9b",
"object": "model",
"created": 0,
"owned_by": "felipe",
"ready": true,
"felipe": {
"kind": "chat",
"label": "Qwen 3.5 9B",
"cost_level": 1,
"credits_per_answer": 3.1,
"available": true,
"locked": false
}
}Erros possíveis
| HTTP | error.code | Quando |
|---|---|---|
| 401 | invalid_api_key | Chave ausente, errada ou substituída por uma nova. |
| 403 | forbidden | O plano da conta não inclui a API (é preciso o plano Desenvolvedor), conta desativada ou modelo de uma faixa acima do seu plano. |
| 404 | not_found | Modelo ou rota inexistente. |
| 429 | rate_limit_exceeded / plan_limit_reached | Mais de 120 requisições por minuto (veja Retry-After), ou limite de créditos do plano esgotado (5 horas, semana ou mês; a mensagem informa quando volta). |
Chat
POST /v1/chat/completions
Criar resposta de chat
Gera a resposta de um modelo para uma conversa. É compatível com o formato Chat Completions da OpenAI: dá para usar os SDKs oficiais trocando só a base_url e a chave. Com stream: true a resposta chega por Server-Sent Events, trecho a trecho, e termina com data: [DONE]. Mensagens system/developer são aceitas: entram como instruções na primeira mensagem do usuário. Conversa social curta e inteira ("oi", "bom dia", "tudo bem?", "obrigado", "tchau", "quem é você?") é respondida na hora, sem consultar IA: o usage vem zerado, não gasta créditos e não conta no limite diário de mensagens. Se a mensagem trouxer qualquer pedido junto ("oi, preciso de..."), ela vai para o modelo normalmente.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
model | body | string | não | Id de GET /v1/models. Padrão felipe-2.0 (o Studio escolhe o especialista). Um modelo de faixa acima do seu plano responde 403. |
messages | body | array | sim | Conversa. De 1 a 20 mensagens user/assistant (mais as system/developer), terminando em user. Cada mensagem até 10000 caracteres; total até 25000; instruções de sistema até 8000. content é texto ou lista de partes {"type":"text","text":"..."}. |
stream | body | boolean | não | true para receber por SSE. Padrão false. |
stream_options | body | object | não | {"include_usage": true} envia um trecho final com usage (com choices vazio), como na OpenAI. |
response_format | body | object | não | {"type":"json_object"} ou {"type":"json_schema","json_schema":{"schema":{...}}} para respostas em JSON validado (schema até 8000 caracteres). text é o padrão. |
agent | body | string | não | Extensão do Studio. Especialista (padrão felipe-2). |
team | body | boolean | não | Extensão do Studio. true usa a equipe de agentes (modo Work); consome mais créditos. Equivale a mode: "agent_swarm". |
mode | body | string | não | Extensão do Studio. chat (padrão) ou agent_swarm. |
semantic_cache | body | boolean | não | Extensão do Studio. Permite reaproveitar uma resposta idêntica já gerada para sua conta. |
answer_style | body | string | não | Extensão do Studio. short, detailed, formal ou web. |
temperature, top_p, stop, max_tokens, max_completion_tokens, presence_penalty, frequency_penalty, seed, logit_bias, user, n=1, store, metadata | body | — | não | Aceitos para não quebrar SDKs e ferramentas, mas ainda NÃO alteram a geração. n só pode ser 1. |
Não suportado: tools, tool_choice, functions, function_call, logprobs, top_logprobs, audio, prediction, imagens dentro de mensagens e mensagens com role tool: respondem 400 com a explicação.
Exemplo de requisição
curl https://felipeiastudio.online/v1/chat/completions \
-H "Authorization: Bearer $FELIPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"qwen-3-5-9b","messages":[{"role":"system","content":"Responda em português, em até duas frases."},{"role":"user","content":"O que é uma função?"}]}'Corpo:
{
"model": "qwen-3-5-9b",
"messages": [
{
"role": "system",
"content": "Responda em português, em até duas frases."
},
{
"role": "user",
"content": "O que é uma função?"
}
]
}Exemplo de resposta
{
"id": "chatcmpl-5f1c2b9e-0d0a-4d58-9f0a-9a7a6f1b7c11",
"object": "chat.completion",
"created": 1793300000,
"model": "qwen-3-5-9b",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Uma função é um bloco de código nomeado que recebe entradas, faz um trabalho e devolve um resultado.",
"refusal": null
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 38,
"completion_tokens": 29,
"total_tokens": 67
}
}Resposta com stream: true (SSE)
data: {"id":"chatcmpl-5f1c…","object":"chat.completion.chunk","created":1793300000,"model":"qwen-3-5-9b","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}
data: {"id":"chatcmpl-5f1c…","object":"chat.completion.chunk","created":1793300000,"model":"qwen-3-5-9b","choices":[{"index":0,"delta":{"content":"Uma função é"},"finish_reason":null}]}
data: {"id":"chatcmpl-5f1c…","object":"chat.completion.chunk","created":1793300000,"model":"qwen-3-5-9b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: {"id":"chatcmpl-5f1c…","object":"chat.completion.chunk","created":1793300000,"model":"qwen-3-5-9b","choices":[],"usage":{"prompt_tokens":38,"completion_tokens":29,"total_tokens":67}}
data: [DONE]
Campos da resposta
| Campo | Tipo | Descrição |
|---|---|---|
choices[0].message.content | string | Texto da resposta. |
choices[0].finish_reason | string | stop quando a resposta terminou normalmente. |
usage | object | Tokens reais de entrada, saída e total. O consumo inclui geração, revisão e recuperações feitas pelo especialista. |
model | string | Modelo que respondeu. |
Erros possíveis
| HTTP | error.code | Quando |
|---|---|---|
| 400 | invalid_request | Parâmetro ausente, inválido ou não suportado. A mensagem diz qual. |
| 401 | invalid_api_key | Chave ausente, errada ou substituída por uma nova. |
| 402 | insufficient_quota | Saldo de tokens da assinatura esgotado, ou assinatura sem acesso ativo. |
| 403 | forbidden | O plano da conta não inclui a API (é preciso o plano Desenvolvedor), conta desativada ou modelo de uma faixa acima do seu plano. |
| 404 | not_found | Modelo ou rota inexistente. |
| 413 | payload_too_large | Corpo da requisição maior que o limite da rota. |
| 415 | unsupported_media_type | Envie Content-Type: application/json. |
| 429 | rate_limit_exceeded / plan_limit_reached | Mais de 120 requisições por minuto (veja Retry-After), ou limite de créditos do plano esgotado (5 horas, semana ou mês; a mensagem informa quando volta). |
| 502 | upstream_error | O modelo devolveu uma resposta inválida. Tente de novo. |
| 503 | service_unavailable / model_unavailable | Modelo indisponível no momento ou serviço ainda não ativado neste servidor. |
| 504 | timeout | A etapa passou do tempo máximo (10 minutos). Use stream=true e divida o pedido. |
Imagem
POST /v1/images/generations
Gerar imagem
Gera uma imagem PNG a partir de um texto (uso comercial permitido). A imagem volta em base64. Só está disponível quando o serviço de imagem está ativo no servidor (veja GET /v1/health e GET /v1/models); caso contrário responde 503.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
prompt | body | string | sim | Descrição da imagem, de 1 a 1500 caracteres. Pedidos que violam a política de uso são recusados com 400. |
n | body | integer | não | Só 1. |
size | body | string | não | Só 1024x1024. |
response_format | body | string | não | Só b64_json (padrão). |
model, user, quality, style | body | — | não | Aceitos e ignorados. |
Exemplo de requisição
curl https://felipeiastudio.online/v1/images/generations \
-H "Authorization: Bearer $FELIPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt":"Um gato astronauta aquarela, fundo estrelado"}'Corpo:
{
"prompt": "Um gato astronauta aquarela, fundo estrelado"
}Exemplo de resposta
{
"created": 1793300000,
"model": "felipe-image",
"data": [
{
"b64_json": "iVBORw0KGgoAAAANSUhEUg…",
"revised_prompt": null
}
],
"size": "1024x1024"
}Campos da resposta
| Campo | Tipo | Descrição |
|---|---|---|
data[0].b64_json | string | PNG em base64. Decodifique e salve como .png. |
Erros possíveis
| HTTP | error.code | Quando |
|---|---|---|
| 400 | invalid_request | Parâmetro ausente, inválido ou não suportado. A mensagem diz qual. |
| 401 | invalid_api_key | Chave ausente, errada ou substituída por uma nova. |
| 402 | insufficient_quota | Saldo de tokens da assinatura esgotado, ou assinatura sem acesso ativo. |
| 403 | forbidden | O plano da conta não inclui a API (é preciso o plano Desenvolvedor), conta desativada ou modelo de uma faixa acima do seu plano. |
| 429 | rate_limit_exceeded / plan_limit_reached | Mais de 120 requisições por minuto (veja Retry-After), ou limite de créditos do plano esgotado (5 horas, semana ou mês; a mensagem informa quando volta). |
| 503 | service_unavailable / model_unavailable | Modelo indisponível no momento ou serviço ainda não ativado neste servidor. |
Voz
POST /v1/audio/speech
Gerar voz (texto para fala)
Converte texto em voz neural em português do Brasil (voz feminina natural). A resposta é o arquivo de áudio WAV (Content-Type: audio/wav, 16 kHz, mono), não JSON. **Custo:** cada 1.000 caracteres gastam cerca de 16 créditos (US$ 0,016), descontados do seu limite como qualquer outro uso e visíveis em GET /v1/usage (endpoint Voz). Disponível quando há uma voz ativa neste servidor; senão responde 503.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
input | body | string | sim | Texto, de 1 a 1000 caracteres. |
response_format | body | string | não | Só wav. |
model, voice, speed | body | — | não | Aceitos e ignorados (há uma voz em português). |
Exemplo de requisição
curl https://felipeiastudio.online/v1/audio/speech \
-H "Authorization: Bearer $FELIPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"input":"Olá! Seu pedido foi enviado com sucesso.","response_format":"wav"}'Exemplo de resposta
Corpo binário: arquivo WAV.
Erros possíveis
| HTTP | error.code | Quando |
|---|---|---|
| 400 | invalid_request | Parâmetro ausente, inválido ou não suportado. A mensagem diz qual. |
| 401 | invalid_api_key | Chave ausente, errada ou substituída por uma nova. |
| 402 | insufficient_quota | Saldo de tokens da assinatura esgotado, ou assinatura sem acesso ativo. |
| 403 | forbidden | O plano da conta não inclui a API (é preciso o plano Desenvolvedor), conta desativada ou modelo de uma faixa acima do seu plano. |
| 429 | rate_limit_exceeded / plan_limit_reached | Mais de 120 requisições por minuto (veja Retry-After), ou limite de créditos do plano esgotado (5 horas, semana ou mês; a mensagem informa quando volta). |
| 503 | service_unavailable / model_unavailable | Modelo indisponível no momento ou serviço ainda não ativado neste servidor. |
POST /v1/audio/transcriptions
Transcrever áudio
Transcreve fala em português . O áudio deve ser WAV PCM 16-bit, mono, 16 kHz, de até 30 segundos. Envie como multipart/form-data (campo file, igual ao OpenAI) ou como JSON com file_base64. Disponível quando o serviço de transcrição está ativo; senão responde 503.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
file | multipart | file | sim | Arquivo WAV (use este campo OU file_base64). |
file_base64 | body | string | não | WAV em base64, no corpo JSON. |
model, language, response_format | body | — | não | Aceitos e ignorados (a transcrição é sempre em português e a resposta é JSON). |
Exemplo de requisição
curl https://felipeiastudio.online/v1/audio/transcriptions \
-H "Authorization: Bearer $FELIPE_API_KEY" \
-F [email protected]Corpo:
{
"file_base64": "UklGRiQAAABXQVZFZm10IBAAAAABAAEAgD4AAAB9AAACABAAZGF0YQAAAAA="
}Exemplo de resposta
{
"text": "Olá, tudo bem?",
"language": "pt"
}Erros possíveis
| HTTP | error.code | Quando |
|---|---|---|
| 400 | invalid_request | Parâmetro ausente, inválido ou não suportado. A mensagem diz qual. |
| 401 | invalid_api_key | Chave ausente, errada ou substituída por uma nova. |
| 402 | insufficient_quota | Saldo de tokens da assinatura esgotado, ou assinatura sem acesso ativo. |
| 403 | forbidden | O plano da conta não inclui a API (é preciso o plano Desenvolvedor), conta desativada ou modelo de uma faixa acima do seu plano. |
| 413 | payload_too_large | Corpo da requisição maior que o limite da rota. |
| 429 | rate_limit_exceeded / plan_limit_reached | Mais de 120 requisições por minuto (veja Retry-After), ou limite de créditos do plano esgotado (5 horas, semana ou mês; a mensagem informa quando volta). |
| 503 | service_unavailable / model_unavailable | Modelo indisponível no momento ou serviço ainda não ativado neste servidor. |
Conta e consumo
GET /v1/account
Dados da conta e do plano
Mostra o plano, os limites de requisição e o estado da assinatura. Não consome créditos.
Exemplo de requisição
curl https://felipeiastudio.online/v1/account \
-H "Authorization: Bearer $FELIPE_API_KEY"Exemplo de resposta
{
"object": "account",
"id": "acc_01",
"email": "[email protected]",
"plan": {
"id": "desenvolvedor",
"name": "Desenvolvedor",
"api": true,
"requests_per_minute": 120,
"daily_requests": 3000
},
"subscription": {
"status": "active",
"trial": false,
"access_until": "2026-11-29T00:00:00.000Z",
"cancel_at_period_end": false
},
"admin": false
}Erros possíveis
| HTTP | error.code | Quando |
|---|---|---|
| 401 | invalid_api_key | Chave ausente, errada ou substituída por uma nova. |
| 403 | forbidden | O plano da conta não inclui a API (é preciso o plano Desenvolvedor), conta desativada ou modelo de uma faixa acima do seu plano. |
| 429 | rate_limit_exceeded / plan_limit_reached | Mais de 120 requisições por minuto (veja Retry-After), ou limite de créditos do plano esgotado (5 horas, semana ou mês; a mensagem informa quando volta). |
GET /v1/usage
Consumo, saldo e limites
Transparência total do uso: créditos usados e disponíveis em cada janela (5 horas, semana e mês), créditos extras comprados, saldo de tokens, requisições do dia e, para o período pedido, totais por endpoint e por modelo mais a série diária. Não consome créditos.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
days | query | integer | não | Período do resumo, de 1 a 90 dias. Padrão 30. |
Exemplo de requisição
curl https://felipeiastudio.online/v1/usage \
-H "Authorization: Bearer $FELIPE_API_KEY"Exemplo de resposta
{
"object": "usage",
"plan": {
"id": "desenvolvedor",
"name": "Desenvolvedor"
},
"admin": false,
"credits": {
"unit": "1 crédito = US$ 0,001 de computação atribuída",
"windows": {
"fiveHour": {
"used": 12.4,
"limit": 640,
"remaining": 627.6,
"percent": 2,
"resetsAt": "2026-10-29T18:00:00.000Z",
"windowMs": 18000000
},
"weekly": {
"used": 140,
"limit": 2550,
"remaining": 2410,
"percent": 5,
"resetsAt": "2026-11-05T12:00:00.000Z",
"windowMs": 604800000
},
"monthly": {
"used": 610,
"limit": 8000,
"remaining": 7390,
"percent": 8,
"resetsAt": "2026-11-28T12:00:00.000Z",
"windowMs": 2592000000
}
},
"wallet_credits": 0,
"plan_limits": {
"fiveHour": 640,
"weekly": 2550,
"monthly": 8000
}
},
"tokens": {
"remaining": 11480000,
"used": 520000
},
"requests": {
"per_minute_limit": 120,
"today": {
"count": 42,
"limit": 3000,
"day": "2026-10-29",
"time_zone": "America/Sao_Paulo"
}
},
"trial": false,
"period": {
"days": 30,
"requests": 420,
"successful": 415,
"errors": 5,
"prompt_tokens": 210000,
"completion_tokens": 310000,
"total_tokens": 520000,
"credits": 610,
"by_endpoint": [
{
"endpoint": "chat.completions",
"label": "Chat (POST /v1/chat/completions)",
"requests": 400,
"errors": 4,
"prompt_tokens": 210000,
"completion_tokens": 310000,
"total_tokens": 520000,
"credits": 610,
"avg_ms": 2300
}
],
"by_model": [
{
"model": "qwen-3-5-9b",
"requests": 400,
"total_tokens": 520000,
"credits": 610
}
]
},
"daily": [
{
"day": "2026-10-29",
"requests": 42,
"tokens": 51000,
"credits": 60.5
}
]
}Campos da resposta
| Campo | Tipo | Descrição |
|---|---|---|
credits.windows.* | object | Para cada janela: used, limit, remaining, percent e resetsAt (quando o limite volta). |
credits.wallet_credits | number | Créditos extras comprados. São usados só quando o limite do plano acaba e não expiram. |
tokens | object | Saldo e consumo de tokens da assinatura. |
period.by_endpoint[] | array | Requisições, erros, tokens, créditos e tempo médio por endpoint. |
period.by_model[] | array | Requisições, tokens e créditos por modelo. |
Erros possíveis
| HTTP | error.code | Quando |
|---|---|---|
| 401 | invalid_api_key | Chave ausente, errada ou substituída por uma nova. |
| 403 | forbidden | O plano da conta não inclui a API (é preciso o plano Desenvolvedor), conta desativada ou modelo de uma faixa acima do seu plano. |
| 429 | rate_limit_exceeded / plan_limit_reached | Mais de 120 requisições por minuto (veja Retry-After), ou limite de créditos do plano esgotado (5 horas, semana ou mês; a mensagem informa quando volta). |
GET /v1/usage/requests
Histórico de requisições
Lista as suas requisições mais recentes (mais novas primeiro): data, endpoint, modelo, status HTTP, tokens, créditos e duração. Guarda só metadados; o conteúdo das mensagens nunca é registrado. Os créditos por linha são calculados pelo consumo do período da requisição e podem ser aproximados quando você faz chamadas simultâneas; os totais de GET /v1/usage vêm do registro oficial.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
limit | query | integer | não | De 1 a 200. Padrão 50. |
before | query | integer | não | Use o next_before da página anterior para continuar. |
Exemplo de requisição
curl https://felipeiastudio.online/v1/usage/requests \
-H "Authorization: Bearer $FELIPE_API_KEY"Exemplo de resposta
{
"object": "list",
"data": [
{
"id": 1042,
"created": "2026-10-29T15:04:05.000Z",
"endpoint": "chat.completions",
"model": "qwen-3-5-9b",
"status": 200,
"prompt_tokens": 38,
"completion_tokens": 29,
"total_tokens": 67,
"credits": 1.4,
"duration_ms": 2310,
"stream": false,
"request_id": "a3f1…"
}
],
"has_more": false,
"next_before": null
}Erros possíveis
| HTTP | error.code | Quando |
|---|---|---|
| 401 | invalid_api_key | Chave ausente, errada ou substituída por uma nova. |
| 403 | forbidden | O plano da conta não inclui a API (é preciso o plano Desenvolvedor), conta desativada ou modelo de uma faixa acima do seu plano. |
| 429 | rate_limit_exceeded / plan_limit_reached | Mais de 120 requisições por minuto (veja Retry-After), ou limite de créditos do plano esgotado (5 horas, semana ou mês; a mensagem informa quando volta). |
Créditos, tokens e saldo
O consumo é medido em créditos: 1 crédito = US$ 0,001 de computação atribuída à sua requisição. Cada modelo mostra o custo estimado por resposta (credits_per_answer) e a faixa em moedas (azul, amarela, vermelha).
| Janela | Créditos do plano Desenvolvedor | Quando volta |
|---|---|---|
| 5 horas | 640 | 5 horas depois do primeiro uso da janela |
| Semana | 2.550 | 7 dias depois do primeiro uso |
| Mês | 8.000 | 30 dias depois do primeiro uso |
- Chegou ao fim de uma janela? As chamadas passam a responder
429(plan_limit_reached) com o horário em que o limite volta. - Quer continuar na hora? Compre créditos extras (pagamento único, não expiram) em Minha conta → Comprar créditos. Eles só são usados quando o limite do plano acaba.
- Além dos créditos, a assinatura tem um saldo de tokens (
tokens.remainingem/v1/usage). Saldo zerado responde402. - Acompanhe tudo em
GET /v1/usage, emGET /v1/usage/requestse no painel de Desenvolvedores do Studio (consumo por endpoint e por modelo, saldo e histórico).
curl https://felipeiastudio.online/v1/usage?days=7 -H "Authorization: Bearer $FELIPE_API_KEY"Boas práticas
- Guarde a chave no servidor, em variável de ambiente. Nunca em código de navegador, app mobile ou repositório público.
- Repita com recuo exponencial em 429, 502, 503 e 504, respeitando
Retry-After. - Use streaming em respostas longas e para mostrar texto ao usuário enquanto chega.
- Escolha o modelo pelo custo: modelos de moeda azul para tarefas simples; amarela para código e raciocínio.
- Mande só o contexto necessário. Menos mensagens, menos tokens, menos créditos.
- Monitore
GET /v1/usagee alerte quandopercentpassar de 80.
import time, requests
def chat(payload, tries=5):
for i in range(tries):
r = requests.post("https://felipeiastudio.online/v1/chat/completions", json=payload,
headers={"Authorization": "Bearer SUA_CHAVE"}, timeout=600)
if r.status_code in (429, 502, 503, 504):
time.sleep(float(r.headers.get("Retry-After", 2 ** i)))
continue
r.raise_for_status()
return r.json()
raise RuntimeError("sem resposta após várias tentativas")Imagem, voz e transcrição
curl https://felipeiastudio.online/v1/images/generations \
-H "Authorization: Bearer $FELIPE_API_KEY" -H "Content-Type: application/json" \
-d '{"prompt":"Um gato astronauta aquarela"}' \
| python3 -c "import sys,json,base64;d=json.load(sys.stdin);open('gato.png','wb').write(base64.b64decode(d['data'][0]['b64_json']))"curl https://felipeiastudio.online/v1/audio/speech \
-H "Authorization: Bearer $FELIPE_API_KEY" -H "Content-Type: application/json" \
-d '{"input":"Olá! Seu pedido foi enviado."}' --output fala.wavcurl https://felipeiastudio.online/v1/audio/transcriptions \
-H "Authorization: Bearer $FELIPE_API_KEY" \
-F [email protected]O que ainda não existe
Para você não perder tempo: estes recursos não estão na API hoje.
- Chamada de ferramentas / funções (
tools,function_call): responde 400. - Embeddings (
/v1/embeddings) e envio de imagens ou áudio dentro das mensagens de chat. - Mais de uma resposta por pedido (
n>1),logprobse controle detemperature/top_p/max_tokens(aceitos, sem efeito). - Imagem em outros tamanhos além de 1024×1024; voz em formatos além de WAV; transcrição em outros idiomas além do português.
- Imagem e transcrição dependem de serviços de GPU que são ativados por servidor; a voz usa um serviço de voz neural (ou GPU, quando ativa). Confira
GET /v1/health.
Histórico de versões
- 1.0.0 (29/10/2026): lançamento da API para desenvolvedores. Chat compatível com OpenAI com streaming, modelos por faixa de custo, imagens, voz, transcrição, conta, consumo e histórico, erros no formato OpenAI e limites por minuto.
Suporte
Dúvidas, erros inesperados ou pedidos de recurso: [email protected]. Informe o request_id da resposta.