Felipe IA StudioAPI v1.0.0

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.

URL basehttps://felipeiastudio.online/v1
AutenticaçãoAuthorization: Bearer sk-…
FormatoJSON em UTF-8 e SSE para streaming
PlanoDesenvolvedor, R$ 209,90/mês (ou R$ 2.099,00/ano)

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

  1. Assine o plano Desenvolvedor em Planos. A área Desenvolvedores aparece no menu.
  2. 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.
  3. 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 responde 403.

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.

HTTPerror.code
400invalid_request
401invalid_api_key
402insufficient_quota
403forbidden
404not_found
413payload_too_large
415unsupported_media_type
429rate_limit_exceeded · plan_limit_reached
502upstream_error
503service_unavailable · model_unavailable
504timeout

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: 41s

Ao 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: true e mantenha a conexão aberta (o servidor envia : keep-alive a 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/health

Exemplo de resposta

{
  "status": "ok",
  "time": "2026-10-29T15:04:05.000Z",
  "chat": true,
  "image": false,
  "transcription": false,
  "speech": false
}

Campos da resposta

CampoTipoDescrição
statusstringSempre "ok" quando o serviço responde.
chatbooleanHá pelo menos um modelo de chat disponível.
image / transcription / speechbooleanSe 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.json

Exemplo 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

CampoTipoDescrição
data[].idstringValor para o campo model das requisições.
felipe.cost_level1 | 2 | 3Faixa de custo (moedas).
felipe.credits_per_answernumberEstimativa de créditos por resposta típica.
felipe.availablebooleanSe pode ser usado agora (plano permite e o modelo está de pé).
felipe.on_demandbooleanModelo 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_planboolean / stringModelo de faixa acima do seu plano.

Erros possíveis

HTTPerror.codeQuando
401invalid_api_keyChave ausente, errada ou substituída por uma nova.
403forbiddenO plano da conta não inclui a API (é preciso o plano Desenvolvedor), conta desativada ou modelo de uma faixa acima do seu plano.
429rate_limit_exceeded / plan_limit_reachedMais 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

NomeOndeTipoObrigatórioDescrição
modelpathstringsimId 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

HTTPerror.codeQuando
401invalid_api_keyChave ausente, errada ou substituída por uma nova.
403forbiddenO plano da conta não inclui a API (é preciso o plano Desenvolvedor), conta desativada ou modelo de uma faixa acima do seu plano.
404not_foundModelo ou rota inexistente.
429rate_limit_exceeded / plan_limit_reachedMais 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

NomeOndeTipoObrigatórioDescrição
modelbodystringnãoId de GET /v1/models. Padrão felipe-2.0 (o Studio escolhe o especialista). Um modelo de faixa acima do seu plano responde 403.
messagesbodyarraysimConversa. 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":"..."}.
streambodybooleannãotrue para receber por SSE. Padrão false.
stream_optionsbodyobjectnão{"include_usage": true} envia um trecho final com usage (com choices vazio), como na OpenAI.
response_formatbodyobjectnão{"type":"json_object"} ou {"type":"json_schema","json_schema":{"schema":{...}}} para respostas em JSON validado (schema até 8000 caracteres). text é o padrão.
agentbodystringnãoExtensão do Studio. Especialista (padrão felipe-2).
teambodybooleannãoExtensão do Studio. true usa a equipe de agentes (modo Work); consome mais créditos. Equivale a mode: "agent_swarm".
modebodystringnãoExtensão do Studio. chat (padrão) ou agent_swarm.
semantic_cachebodybooleannãoExtensão do Studio. Permite reaproveitar uma resposta idêntica já gerada para sua conta.
answer_stylebodystringnãoExtensã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, metadatabody—nãoAceitos 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

CampoTipoDescrição
choices[0].message.contentstringTexto da resposta.
choices[0].finish_reasonstringstop quando a resposta terminou normalmente.
usageobjectTokens reais de entrada, saída e total. O consumo inclui geração, revisão e recuperações feitas pelo especialista.
modelstringModelo que respondeu.

Erros possíveis

HTTPerror.codeQuando
400invalid_requestParâmetro ausente, inválido ou não suportado. A mensagem diz qual.
401invalid_api_keyChave ausente, errada ou substituída por uma nova.
402insufficient_quotaSaldo de tokens da assinatura esgotado, ou assinatura sem acesso ativo.
403forbiddenO plano da conta não inclui a API (é preciso o plano Desenvolvedor), conta desativada ou modelo de uma faixa acima do seu plano.
404not_foundModelo ou rota inexistente.
413payload_too_largeCorpo da requisição maior que o limite da rota.
415unsupported_media_typeEnvie Content-Type: application/json.
429rate_limit_exceeded / plan_limit_reachedMais 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).
502upstream_errorO modelo devolveu uma resposta inválida. Tente de novo.
503service_unavailable / model_unavailableModelo indisponível no momento ou serviço ainda não ativado neste servidor.
504timeoutA 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

NomeOndeTipoObrigatórioDescrição
promptbodystringsimDescrição da imagem, de 1 a 1500 caracteres. Pedidos que violam a política de uso são recusados com 400.
nbodyintegernãoSó 1.
sizebodystringnãoSó 1024x1024.
response_formatbodystringnãoSó b64_json (padrão).
model, user, quality, stylebody—nãoAceitos 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

CampoTipoDescrição
data[0].b64_jsonstringPNG em base64. Decodifique e salve como .png.

Erros possíveis

HTTPerror.codeQuando
400invalid_requestParâmetro ausente, inválido ou não suportado. A mensagem diz qual.
401invalid_api_keyChave ausente, errada ou substituída por uma nova.
402insufficient_quotaSaldo de tokens da assinatura esgotado, ou assinatura sem acesso ativo.
403forbiddenO plano da conta não inclui a API (é preciso o plano Desenvolvedor), conta desativada ou modelo de uma faixa acima do seu plano.
429rate_limit_exceeded / plan_limit_reachedMais 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).
503service_unavailable / model_unavailableModelo 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

NomeOndeTipoObrigatórioDescrição
inputbodystringsimTexto, de 1 a 1000 caracteres.
response_formatbodystringnãoSó wav.
model, voice, speedbody—nãoAceitos 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

HTTPerror.codeQuando
400invalid_requestParâmetro ausente, inválido ou não suportado. A mensagem diz qual.
401invalid_api_keyChave ausente, errada ou substituída por uma nova.
402insufficient_quotaSaldo de tokens da assinatura esgotado, ou assinatura sem acesso ativo.
403forbiddenO plano da conta não inclui a API (é preciso o plano Desenvolvedor), conta desativada ou modelo de uma faixa acima do seu plano.
429rate_limit_exceeded / plan_limit_reachedMais 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).
503service_unavailable / model_unavailableModelo 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

NomeOndeTipoObrigatórioDescrição
filemultipartfilesimArquivo WAV (use este campo OU file_base64).
file_base64bodystringnãoWAV em base64, no corpo JSON.
model, language, response_formatbody—nãoAceitos 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

HTTPerror.codeQuando
400invalid_requestParâmetro ausente, inválido ou não suportado. A mensagem diz qual.
401invalid_api_keyChave ausente, errada ou substituída por uma nova.
402insufficient_quotaSaldo de tokens da assinatura esgotado, ou assinatura sem acesso ativo.
403forbiddenO plano da conta não inclui a API (é preciso o plano Desenvolvedor), conta desativada ou modelo de uma faixa acima do seu plano.
413payload_too_largeCorpo da requisição maior que o limite da rota.
429rate_limit_exceeded / plan_limit_reachedMais 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).
503service_unavailable / model_unavailableModelo 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

HTTPerror.codeQuando
401invalid_api_keyChave ausente, errada ou substituída por uma nova.
403forbiddenO plano da conta não inclui a API (é preciso o plano Desenvolvedor), conta desativada ou modelo de uma faixa acima do seu plano.
429rate_limit_exceeded / plan_limit_reachedMais 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

NomeOndeTipoObrigatórioDescrição
daysqueryintegernãoPerí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

CampoTipoDescrição
credits.windows.*objectPara cada janela: used, limit, remaining, percent e resetsAt (quando o limite volta).
credits.wallet_creditsnumberCréditos extras comprados. São usados só quando o limite do plano acaba e não expiram.
tokensobjectSaldo e consumo de tokens da assinatura.
period.by_endpoint[]arrayRequisições, erros, tokens, créditos e tempo médio por endpoint.
period.by_model[]arrayRequisições, tokens e créditos por modelo.

Erros possíveis

HTTPerror.codeQuando
401invalid_api_keyChave ausente, errada ou substituída por uma nova.
403forbiddenO plano da conta não inclui a API (é preciso o plano Desenvolvedor), conta desativada ou modelo de uma faixa acima do seu plano.
429rate_limit_exceeded / plan_limit_reachedMais 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

NomeOndeTipoObrigatórioDescrição
limitqueryintegernãoDe 1 a 200. Padrão 50.
beforequeryintegernãoUse 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

HTTPerror.codeQuando
401invalid_api_keyChave ausente, errada ou substituída por uma nova.
403forbiddenO plano da conta não inclui a API (é preciso o plano Desenvolvedor), conta desativada ou modelo de uma faixa acima do seu plano.
429rate_limit_exceeded / plan_limit_reachedMais 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).

JanelaCréditos do plano DesenvolvedorQuando volta
5 horas6405 horas depois do primeiro uso da janela
Semana2.5507 dias depois do primeiro uso
Mês8.00030 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.remaining em /v1/usage). Saldo zerado responde 402.
  • Acompanhe tudo em GET /v1/usage, em GET /v1/usage/requests e 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/usage e alerte quando percent passar 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.wav
curl 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), logprobs e controle de temperature/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.