NoTrack API — referência
Um endpoint compatível com OpenAI, um modelo, uma chave. Se o seu código já comunica com /v1/chat/completions, mude o URL base e a chave e passa a comunicar connosco.
URL base e autenticação
Base URL: https://api.notrack.ai/v1
Header: Authorization: Bearer sk-notrack-…
As chaves são criadas em a página de chaves. Uma chave é mostrada uma única vez, na criação; guardamos um hash e os últimos seis caracteres. Envie-a apenas por HTTPS e apenas no cabeçalho Authorization — nunca num URL.
Tudo é JSON (Content-Type: application/json). As respostas usam o schema da OpenAI, pelo que os SDKs oficiais da openai e qualquer cliente compatível com OpenAI funcionam sem alterações.
Modelos
GET /v1/models
{ "object": "list",
"data": [ { "id": "notrack-uncensored", "object": "model", "owned_by": "notrack" } ] }
Há um modelo, notrack-uncensored: o nosso próprio modelo, servido nos nossos próprios servidores GPU. O que passar em model é encaminhado para ele; utilize o id público para que os seus registos correspondam aos nossos.
Chat completions
POST /v1/chat/completions
{
"model": "notrack-uncensored",
"messages": [
{ "role": "system", "content": "You are Mira, a wry bartender in 1920s Berlin." },
{ "role": "user", "content": "Evening. What's good tonight?" }
],
"max_tokens": 400,
"temperature": 0.9
}
Resposta — o formato padrão, com contagens reais de tokens em usage (é essa a base da faturação):
{
"id": "chatcmpl-…", "object": "chat.completion", "model": "notrack-uncensored",
"choices": [ { "index": 0, "finish_reason": "stop",
"message": { "role": "assistant", "content": "…" } } ],
"usage": { "prompt_tokens": 41, "completion_tokens": 118, "total_tokens": 159 }
}
O seu system prompt governa a conversa. Acrescentamos exatamente uma linha no início — a identidade do modelo (que é o notrack-uncensored, feito pela NoTrack) — e nada mais: sem regras, sem filtro de temas. A sua mensagem de sistema vem depois e decide a persona, o estilo e tudo o resto. A única excepção está em Política de conteúdo.
Streaming
Defina "stream": true e leia os server-sent events, exatamente como na OpenAI. O último fragmento traz usage (incluímo-lo sempre, quer peça stream_options ou não), depois data: [DONE].
data: {"id":"chatcmpl-…","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"Ev"}}]}
data: {"id":"chatcmpl-…","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"ening"}}]}
…
data: {"id":"chatcmpl-…","object":"chat.completion.chunk","choices":[],"usage":{"prompt_tokens":41,"completion_tokens":118,"total_tokens":159}}
data: [DONE]
Parâmetros
| Campo | Notas |
|---|---|
messages | Obrigatório. Funções system, user, assistant. Apenas texto por agora — partes de imagem são rejeitadas. |
model | Utilize notrack-uncensored. |
stream | true para SSE. stream_options.include_usage está sempre ativo. |
max_tokens | Limite da completion. Prompt + completion têm de caber na janela de 100,000 tokens. |
temperature, top_p, stop, presence_penalty, frequency_penalty, seed, n | Passado ao modelo tal como na OpenAI. Se não enviar temperature, usamos 0.85, o mesmo do nosso chat. n > 1 multiplica o custo do output. |
tools, tool_choice | Suportado: auto, none, required, ou uma função nomeada. A resposta traz tool_calls e finish_reason: "tool_calls"; envie o resultado de volta como uma mensagem role: "tool". Com ferramentas presentes, uma resposta em streaming chega como um fragmento por chamada, em vez de token a token. |
response_format | {"type": "json_object"} é suportado (indique no prompt que JSON pretende). json_schema e o campo legado functions não são. |
Limites e cabeçalhos de resposta
| Limite | Valor | Ao exceder |
|---|---|---|
| Pedidos simultâneos por chave | 8 | 429 concurrency |
| Pedidos por minuto por chave | 300 | 429 rate_limit |
| Janela de contexto (prompt + completion) | 100,000 tokens | 400 context_limit — reduza o histórico e tente novamente |
| Gasto diário por chave (opcional) | definido por si na página de chaves | 402 key_daily_cap até às 00:00 UTC |
Chaves de teste (antes do primeiro carregamento): pedidos simultâneos — 2, pedidos por minuto — 60. Após o primeiro carregamento, a chave passa aos limites completos: 8 e 300.
Todas as respostas bem-sucedidas trazem:
| Cabeçalho | Significado |
|---|---|
X-Request-Id | Cite-o ao escrever para o suporte; é a única informação que guardamos sobre um pedido. |
X-NoTrack-Balance-USD | O seu crédito antes de este pedido ser cobrado, em dólares. |
X-RateLimit-Limit-Requests | Pedidos por minuto permitidos para esta chave. |
X-RateLimit-Limit-Concurrency | Pedidos em paralelo permitidos para esta chave. |
X-NoTrack-Content-Flag | Apenas numa recusa de conteúdo: minor_in_sexual_context ou child_safety. |
Erros
Os erros são JSON com um type estável; o message destina-se a humanos e pode mudar.
{ "error": { "type": "no_credit", "message": "no credit left on this account — top up at notrack.ai/api-keys" } }
| HTTP | type | O que fazer |
|---|---|---|
| 400 | body | JSON inválido ou sem messages. |
| 400 | context_limit | Prompt demasiado longo para a janela de 100,000 tokens. Remova turnos mais antigos. |
| 400 | content_policy + X-NoTrack-Content-Flag: minor_in_sexual_context | A cena é interpretada como sexual e uma personagem como menor. Torne as personagens inequivocamente adultas e reenvie; não é cobrado. |
| 401 | auth, invalid_key, key_revoked, key_expired | Corrija ou substitua a chave. |
| 402 | no_credit | O saldo está a zero. Recarregue; os pedidos retomam de imediato. |
| 402 | key_daily_cap | Esta chave atingiu o limite diário que definiu. Aumente-o ou aguarde até às 00:00 UTC. |
| 403 | content_policy + X-NoTrack-Content-Flag: child_safety | Recusado e não cobrado. Consulte Política de conteúdo. |
| 429 | rate_limit, concurrency | Abrande e tente novamente; respeite os dois cabeçalhos X-RateLimit-*. |
| 502 | upstream | O modelo não respondeu. Tente novamente com backoff; não é cobrado. |
| 503 | billing, safety | Uma dependência nossa está em baixo. Tente novamente dentro de alguns segundos; não é cobrado. |
Faturação
Crédito pré-pago, cobrado por token com base no usage real de cada resposta: $0.15 por 1M de tokens de entrada, $0.50 por 1M de tokens de saída. O input é tudo o que envia (system prompt, histórico, a nova mensagem); o output é o que o modelo escreve.
- A sua primeira chave vem com $0.50 de crédito gratuito, válido durante 7 dias — suficiente para integrar e testar. É necessário um e-mail confirmado para obter uma chave (é para onde vai o aviso de que "o crédito está a esgotar-se"). O crédito pago nunca expira.
- O crédito não expira, não há subscrição e nada se renova automaticamente. Recarregue por cartão ou em USDT/USDC na página de chaves.
- Não é cobrado nada por pedidos recusados (
4xx) ou falhados (5xx). Um pedido é cobrado uma única vez, após a resposta, com base no seuX-Request-Id. - O saldo esgota-se →
402 no_creditaté recarregar. Defina um limite diário em cada chave para que uma chave comprometida não possa esgotar a conta. - Os créditos não são reembolsáveis, exceto quando não conseguimos prestar o nosso serviço; nunca expiram e podem ser aplicados a um plano. Consulte Créditos e reembolsos.
Persona — modelo puro ou a personagem da NoTrack
Cada chave tem um estilo, escolhido na página de chaves e alterável em qualquer momento:
- Puro (predefinido) — o seu system prompt é o prompt completo. Acrescentamos uma linha de identidade e nada mais.
- Persona NoTrack — a personagem e o estilo do chat em notrack.ai: direto, sem filtros, sem moralismo, responde na língua do utilizador. Mesmo modelo, mesmo preço, mesma política de conteúdo; só muda o prompt colocado antes das suas mensagens. A sua própria mensagem de sistema continua a vir depois dele e pode ajustá-lo.
Um pedido pode substituir a definição da chave, seja através de um campo, seja através de um sufixo no nome do modelo (para clientes que só conseguem definir um nome de modelo):
{ "model": "notrack-uncensored", "notrack": { "persona": "notrack" }, "messages": [ … ] }
{ "model": "notrack-uncensored:notrack", "messages": [ … ] } // same thing, by model name
{ "model": "notrack-uncensored:bare", "messages": [ … ] } // force the bare model on a persona key
Nomes de persona: notrack (a personagem simples), concise, detailed, creative (as mesmas variantes que o chat oferece), bare. O cabeçalho de resposta X-NoTrack-Persona indica qual foi aplicada.
Política de conteúdo
Não acrescentamos nenhum system prompt nem aplicamos qualquer filtro de temas. Ficção para adultos, temas sombrios, linguagem forte, violência na ficção — o modelo responde tal como está escrito. Uma regra é imposta no código e não pode ser desativada: qualquer conteúdo sexual envolvendo um menor é recusado.
403 child_safety— o pedido procurava conteúdo sexual envolvendo uma criança. Recusado, não cobrado, registado como evento de segurança.400 minor_in_sexual_context— a cena é sexual e uma personagem é interpretada como tendo menos de 18 anos (idade indicada, contexto escolar, enquadramento "menina/rapaz"). Não é uma proibição: torne as idades e o enquadramento inequivocamente adultos e reenvie.
403s repetidos numa chave levam ao encerramento da chave e depois da conta. O texto completo encontra-se na Política de Utilização Aceitável.
Privacidade
Prompts e completions não são gravados em disco — nem pelo gateway, nem pelos servidores do modelo. O que guardamos por pedido é o id do pedido, o id da chave, as contagens de tokens e o preço, porque é isso que compõe a fatura. As recusas de segurança são registadas por categoria, sem o texto. Nenhum fornecedor de modelo terceiro vê o seu tráfego: o modelo é executado em nos nossos próprios servidores GPU.
Clientes e SDKs
O site da NoTrack e a aplicação NoTrack são o nosso próprio chat — não têm campo para uma chave de API e nunca o terão. Uma chave destina-se a programas outros: cole-a num dos clientes abaixo, ou no seu próprio código.
Python
from openai import OpenAI
client = OpenAI(base_url="https://api.notrack.ai/v1", api_key="sk-notrack-…")
stream = client.chat.completions.create(model="notrack-uncensored",
messages=[{"role": "user", "content": "Hello"}], stream=True)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
Node.js
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.notrack.ai/v1", apiKey: process.env.NOTRACK_KEY });
const r = await client.chat.completions.create({ model: "notrack-uncensored",
messages: [{ role: "user", content: "Hello" }] });
console.log(r.choices[0].message.content);
SillyTavern
API Connections → API: Chat Completion → Source: Custom (OpenAI-compatible) → Custom Endpoint https://api.notrack.ai/v1 → Custom API Key → Connect → Model notrack-uncensored. Streaming ativado. Mantenha o tamanho do contexto em 100,000 tokens ou menos.
Chatbox
Definições → Model Provider → Add → Add Custom Provider, modo OpenAI API Compatible → cole o URL base e a chave, depois adicione notrack-uncensored como o modelo.
NextChat
Definições → ative Custom Endpoint (compatível com OpenAI) → URL base e chave, depois digite o nome do modelo no campo do modelo.
Cherry Studio
Definições → Model Providers → Add Provider → digite OpenAI → URL base e chave, depois "Add model" → notrack-uncensored.
LobeChat
Definições → AI Service Provider → OpenAI → ative custom API endpoint, cole o URL base e a chave, e adicione o modelo à lista de modelos.
Outros casos
LangChain, LlamaIndex, Open WebUI, Continue, definições de proxy do JanitorAI, curl — qualquer cliente com uma opção "OpenAI-compatible" ou "custom base URL".
Os termos de menu acima mudam entre versões da aplicação — se uma etiqueta não corresponder exatamente, procure a definição que menciona "custom", "OpenAI-compatible" ou "base URL".
Se um cliente não ligar
- 401 / "invalid API key" — a chave nunca chegou. Confirme que o cliente envia
Authorization: Bearer sk-notrack-…com a chave completa, incluindo o prefixo. - 404 / endpoint desconhecido — os clientes divergem quanto a acrescentarem
/v1por conta própria. Sehttps://api.notrack.ai/v1der 404, experimentehttps://api.notrack.aicomo URL base (ou o inverso). - "The Responses API is not supported yet" — alguns clientes mais recentes usam por defeito a Responses API da OpenAI. Servimos apenas Chat Completions; mude o cliente para esse modo.
- Lista de modelos vazia — alguns clientes só a preenchem depois de uma verificação de chave válida. Digite
notrack-uncensoredmanualmente. - Nada acontece num cliente Ollama / llama.cpp — esses falam o seu próprio protocolo, não compatível com OpenAI. Utilize antes um dos clientes acima.
Chaves
- Até 20 chaves ativas por conta. Dê a cada aplicação a sua própria chave e o seu próprio limite diário.
- Data de expiração opcional; revogar uma chave interrompe-a de imediato e não pode ser desfeito — emita antes uma nova.
- A página de chaves mostra o gasto por chave, a última utilização e os totais de 30 dias da conta.
Questões ou um id de pedido a analisar: suporte · [email protected].