Documentação da API ChatGPT: Referência rápida e primeiros chamados
A maioria das APIs de chat compartilha o formato de requisição popularizado pela API ChatGPT. Esta página é uma referência rápida para o endpoint compatível neste site, com exemplos prontos para copiar e colar.
Última atualização

Resumo
- URL base https://api.gptsemfiltro.com/v1, autenticação com token bearer, ID do modelo uncensored.
- Três métodos: completions de chat, respostas e a lista de modelos; o saldo tem seus próprios endpoints.
- Streaming, chamada de funções e modo JSON são suportados; contexto de 100.000 tokens.
- Erros 429 carregam um código: rate_limited ou concurrency.
O que esta página cobre
Se você pesquisou por documentação da api chatgpt, talvez queira a documentação oficial da OpenAI para os modelos da própria OpenAI. Esta página é outra coisa: uma referência funcional para uma API compatível com OpenAI hospedada neste site. Ela executa um modelo de pesos abertos, uncensored, ajustado para responder sem recusas de conteúdo para uso adulto legal. Não é a API oficial da OpenAI ou de qualquer outro fornecedor.
As formas de requisição e resposta seguem o formato familiar da OpenAI, então os SDKs oficiais e a maioria das ferramentas funcionam após você alterar a URL base e a chave. A referência completa está na documentação da API; esta página oferece a versão rápida com exemplos que você pode executar.
Noções básicas de conexão e uma primeira requisição
Noções básicas de conexão
| Item | Valor |
|---|---|
| URL base | https://api.gptsemfiltro.com/v1 |
| Autenticação | Authorization: Bearer YOUR_KEY |
| ID do modelo | uncensored |
| Endpoint de chat | POST /v1/chat/completions |
| Endpoint de respostas | POST /v1/responses |
| Lista de modelos | GET /v1/models |
| Saldo | GET /v1/balance ou GET /v1/dashboard/billing/credit_grants |
| Corpo da requisição máximo | 8 MB |
| Janela de contexto | 100.000 tokens, prompt mais conclusão |
Obtenha uma chave na página da chave de API. Novos usuários podem resgatar um crédito de teste de $0,50 com um clique; é válida por 7 dias e não requer pagamento. Você pode regenerar uma chave a qualquer momento, e contas que fizeram recarga podem ter até 5 chaves, rotulá-las e revogar qualquer uma.
Sua primeira chamada
curl https://api.gptsemfiltro.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [
{"role": "system", "content": "You answer in plain language."},
{"role": "user", "content": "What is a context window?"}
],
"temperature": 0.7
}'
from openai import OpenAI
client = OpenAI(base_url="https://api.gptsemfiltro.com/v1", api_key="YOUR_KEY")
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "You answer in plain language."},
{"role": "user", "content": "What is a context window?"},
],
)
print(resp.choices[0].message.content)
print(resp.usage)
A resposta contém choices[0].message.content e um objeto usage com contagens de tokens de prompt e conclusão.
Parâmetros da requisição
Os parâmetros que você usará mais:
model: sempreuncensored.messages: uma lista de objetos comrole(system,user,assistantoutool) econtent.max_tokens: opcional. Se você não o definir, a conclusão pode usar o restante da janela de 100.000 tokens.temperature,top_p,stop,seed,frequency_penalty,presence_penalty: passados diretamente para o modelo.stream: defina comotruepara eventos enviados pelo servidor, com o uso no final.toolsetool_choice: descrevem funções que o modelo pode chamar.response_format:{"type": "json_object"}ativa o modo JSON.
Não disponível: geração de imagem, áudio ou vídeo, embeddings e fine-tuning. O serviço lida apenas com texto.
Os papéis funcionam como no formato da OpenAI. Uma mensagem system define o comportamento para toda a conversa, mensagens user carregam a entrada da pessoa, mensagens assistant contêm respostas anteriores e mensagens tool retornam resultados de funções. A API não mantém memória entre chamadas, então cada requisição deve incluir o histórico que você quer que o modelo veja. O prompt e a conclusão compartilham a janela de 100.000 tokens, o que significa que um histórico longo deixa menos espaço para a resposta.
Streaming, chamada de funções e modo JSON
Streaming
Defina stream como true e leia os eventos conforme eles chegam. Cada chunk tem um pequeno delta de texto, e o uso chega no final.
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.gptsemfiltro.com/v1",
apiKey: process.env.API_KEY,
});
const stream = await client.chat.completions.create({
model: "uncensored",
messages: [{ role: "user", content: "List five uses of a context window." }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
Uma requisição em streaming mantém seu slot de concorrência até o fim do stream, então feche streams que você não precisa mais.
Chamada de ferramentas e modo JSON
Declare funções com tools. Quando o modelo quiser usar uma, a resposta terá tool_calls em vez de texto. Você executa a função e envia o resultado de volta como uma mensagem com role: "tool".
import json
from openai import OpenAI
client = OpenAI(base_url="https://api.gptsemfiltro.com/v1", api_key="YOUR_KEY")
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the weather for a city",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]
messages = [{"role": "user", "content": "What is the weather in Lisbon?"}]
first = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
call = first.choices[0].message.tool_calls[0]
messages.append(first.choices[0].message)
messages.append({
"role": "tool",
"tool_call_id": call.id,
"content": json.dumps({"city": "Lisbon", "temp_c": 21}),
})
final = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
print(final.choices[0].message.content)
Em produção, verifique se tool_calls existe antes de lê-lo, pois o modelo pode responder em texto puro. Para saída estruturada sem ferramentas, adicione "response_format": {"type": "json_object"} e diga no prompt que você quer JSON.
Limites, erros e cabeçalhos
| Limite | Chave completa | Chave de teste |
|---|---|---|
| Requisições simultâneas | 8 | 2 |
| Requisições por minuto | 300 | 60 |
| Tamanho do corpo | 8 MB | 8 MB |
Acima do limite, a API retorna HTTP 429. O código de erro rate_limited significa muitas requisições por minuto; concurrency significa muitas ao mesmo tempo. Em sobrecarga temporária, você também recebe 429, com um cabeçalho Retry-After: 5. Requisições falhas ou recusadas não são cobradas.
Cabeçalhos de resposta úteis: X-Request-Id (cite-o ao entrar em contato com suporte), X-Balance-USD, X-RateLimit-Limit-Requests e X-RateLimit-Limit-Concurrency.
Um pequeno auxiliar de retry em Node, que espera o tempo em Retry-After e aumenta o backoff um pouco mais em cada tentativa:
async function chat(messages, tries = 4) {
for (let n = 0; n < tries; n++) {
const res = await fetch("https://api.gptsemfiltro.com/v1/chat/completions", {
method: "POST",
headers: {
"Authorization": "Bearer " + process.env.API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({ model: "uncensored", messages: messages }),
});
if (res.status === 429) {
const wait = Number(res.headers.get("Retry-After") || 5);
await new Promise(function (r) { setTimeout(r, wait * 1000 * (n + 1)); });
continue;
}
return res.json();
}
throw new Error("still rate limited");
}Movendo código existente e verificando seu saldo
Movendo código existente para este endpoint
Se seu código já chama um endpoint de chat estilo OpenAI, a migração é pequena. Altere estes três valores e deixe o resto:
- A URL base torna-se
https://api.gptsemfiltro.com/v1. - A chave torna-se a da página da chave de API.
- O modelo torna-se
uncensored.
Então verifique em que seu código depende. Tudo baseado em texto e com formato de conversa é transferível: prompts de sistema, histórico, streaming, chamadas de ferramentas e modo JSON. Qualquer outra coisa não existe aqui. Não há geração de imagem, nem áudio ou vídeo, nem embeddings nem fine-tuning, então código que chama essas rotas precisa de outro provedor.
O endpoint Responses também está disponível, para clientes que preferem esse formato:
curl https://api.gptsemfiltro.com/v1/responses \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "uncensored", "input": "Summarise what a context window is in one sentence."}'
Teste antes de enviar, porque modelos diferentes se comportam de maneira diferente no mesmo prompt. Recusas, tom e comprimento podem mudar, então reexecute os prompts que importam.
Verificando seu saldo do código
O saldo está disponível de três formas. Cada resposta inclui o cabeçalho X-Balance-USD. Você também pode chamar GET /v1/balance ou o endpoint no estilo OpenAI GET /v1/dashboard/billing/credit_grants, que alguns painéis já sabem ler.
curl https://api.gptsemfiltro.com/v1/balance \
-H "Authorization: Bearer YOUR_KEY"
Um padrão útil é ler o cabeçalho após cada chamada, armazená-lo e gerar um alerta quando ele cair abaixo de um limite que você definir. Como o crédito é pré-pago e nunca expira, um saldo baixo é um sinal para recarregar, não um prazo final.
Preços em visão geral
O custo de entrada é de $0,15 por 1M de tokens e o de saída é de $0,50 por 1M de tokens, descontados do crédito pré-pago. Exemplo: 3.000 tokens de entrada e 600 de saída custam 3.000 x $0,15 / 1M + 600 x $0,50 / 1M = $0,00045 + $0,0003 = $0,00075. Recargas são valores inteiros de $20 a $500, com bônus de +5% a partir de $50, +10% a partir de $100 e +15% a partir de $200, pagos em USDT (TRC20) ou USDC (Base). Mais detalhes estão na página de preços. Os prompts não são usados para treinamento.
Lista de verificação para solução de problemas na primeira integração
A maioria das primeiras chamadas com falha vem de uma lista curta de causas. Verifique-as em ordem antes de suspeitar do serviço.
- Status 401. A chave está ausente ou digitada incorretamente. Imprima o cabeçalho que seu cliente realmente envia e compare com
Authorization: Bearer YOUR_KEY. Se a chave foi colada em um local público, gere uma nova na página da chave de API; a chave antiga deixa de funcionar imediatamente. - Status 404. O caminho está errado. O Base URL termina em
/v1, e o SDK adiciona/chat/completionsautomaticamente. Se você chamar a API com HTTP puro, escreva o caminho completo. - Um erro sobre o modelo. O único ID de modelo é
uncensored. Um nome copiado da documentação de outro provedor não corresponderá.GET /v1/modelslista o que a chave pode usar. - Uma requisição muito grande falha. O limite do corpo é 8 MB. Históricos longos devem ser cortados ou resumidos muito antes de se aproximarem desse tamanho, e a janela de 100.000 tokens é compartilhada pelo prompt e pela conclusão de qualquer forma.
- 429 intermitente. Leia o código de erro.
concurrencysignifica muitas chamadas ao mesmo tempo, então reduza o número de workers.rate_limitedsignifica muitas chamadas por minuto. Um cabeçalhoRetry-After: 5significa sobrecarga temporária, e uma breve espera resolve o problema. - Respostas cortadas. Se você definir
max_tokens, a resposta para ali efinish_reasonlêlength. Aumente o limite ou remova-o.
Mantenha o valor X-Request-Id de qualquer chamada que você não consiga explicar. É a maneira mais rápida de apontar para uma requisição exata quando você escreve para o suporte.
Mais guias
Perguntas frequentes
Esta é a API oficial do ChatGPT?
Não. É um modelo de pesos abertos hospedado de forma independente com uma interface compatível com OpenAI. Não é operado pela OpenAI.
Quais endpoints são suportados?
POST /v1/chat/completions, POST /v1/responses e GET /v1/models, além de endpoints de saldo em /v1/balance e /v1/dashboard/billing/credit_grants.
Preciso de um SDK diferente?
Não. Os SDKs oficiais da OpenAI para Python e Node funcionam após você alterar a URL base, a chave e o nome do modelo.
Como verifico meu crédito restante?
Leia o cabeçalho X-Balance-USD em qualquer resposta ou chame GET /v1/balance.
Obtenha sua chave de API
Registre-se, copie a chave e atualize seu Base URL. A configuração está completa.