API de NoTrack Chat — referencia

Un endpoint compatible con OpenAI, un modelo, una clave. Si tu código ya habla con /v1/chat/completions, cambia la URL base y la clave, y hablará con nosotros.

URL base y autenticación

Base URL:  https://api.notrackchat.com/v1
Header:    Authorization: Bearer sk-…

Las claves se crean en la página de claves. Una clave se muestra una sola vez, al crearla; nosotros guardamos un hash y sus últimos seis caracteres. Envíala solo por HTTPS y solo en la cabecera Authorization, nunca en una URL.

Todo es JSON (Content-Type: application/json). Las respuestas usan el esquema de OpenAI, así que los SDKs oficiales de openai y cualquier cliente compatible con OpenAI funcionan sin cambios.

Modelos

GET /v1/models

{ "object": "list",
  "data": [ { "id": "notrack-uncensored", "object": "model", "owned_by": "notrack" } ] }

Hay un solo modelo, notrack-uncensored: nuestro propio ajuste, alojado en nuestro propio hardware. Lo que pases como model se enruta a él; usa el id público para que tus registros coincidan con los nuestros.

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
}

Respuesta: la forma estándar, con recuentos de tokens reales en usage (es lo que se te factura):

{
  "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 }
}

Tu system prompt rige la conversación. Anteponemos exactamente una línea: la identidad del modelo (que es notrack-uncensored, hecho por NoTrack Chat) y nada más: sin reglas, sin filtro de temas. Tu mensaje de sistema la sigue y decide la persona, el estilo y todo lo demás. La única excepción está en Política de contenido.

Streaming

Activa "stream": true y lee los server-sent events, igual que con OpenAI. El fragmento final lleva usage (siempre lo incluimos, lo pidas o no con stream_options), y luego 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

CampoNotas
messagesObligatorio. Roles system, user, assistant. Solo texto por ahora: las partes de imagen se rechazan.
modelUsa notrack-uncensored.
streamtrue para SSE. stream_options.include_usage está siempre activo.
max_tokensTope de la completion. El prompt + la completion deben caber en la ventana de 64,000 tokens.
temperature, top_p, stop, presence_penalty, frequency_penalty, seed, nSe pasa al modelo igual que en OpenAI. Si no envías temperature usamos 0.85, lo mismo que en nuestro chat. n > 1 multiplica el costo de salida.
tools, tool_choiceCompatibles: auto, none, required, o una función con nombre. La respuesta lleva tool_calls y finish_reason: "tool_calls"; devuelve el resultado como un mensaje role: "tool". Con tools presentes, una respuesta en streaming llega como un fragmento por llamada, no token por token.
response_format{"type": "json_object"} es compatible (indica en el prompt qué JSON quieres). json_schema y el campo heredado functions no lo son.

Límites y cabeceras de respuesta

LímiteValorAl excederse
Solicitudes simultáneas por clave8429 concurrency
Solicitudes por minuto por clave300429 rate_limit
Ventana de contexto (prompt + completion)64,000 tokens400 context_limit — recorta el historial y reintenta
Gasto diario por clave (opcional)definido por ti en la página de claves402 key_daily_cap hasta las 00:00 UTC

Toda respuesta correcta lleva:

CabeceraSignificado
X-Request-IdCítala al escribir a soporte; es lo único que conservamos de una solicitud.
X-NoTrack-Balance-USDTu saldo antes de que se cobrara esta solicitud, en dólares.
X-RateLimit-Limit-RequestsSolicitudes por minuto permitidas para esta clave.
X-RateLimit-Limit-ConcurrencySolicitudes paralelas permitidas para esta clave.
X-NoTrack-Content-FlagSolo en un rechazo de contenido: minor_in_sexual_context o child_safety.

Errores

Los errores son JSON con un type estable; el message es para humanos y puede cambiar.

{ "error": { "type": "no_credit", "message": "no credit left on this account — top up at notrackchat.com/api-keys" } }
HTTPtypeQué hacer
400bodyJSON inválido o sin messages.
400context_limitPrompt demasiado largo para la ventana de 64,000 tokens. Elimina turnos antiguos.
400content_policy + X-NoTrack-Content-Flag: minor_in_sexual_contextLa escena se lee como sexual y un personaje se lee como menor de edad. Haz que los personajes sean inequívocamente adultos y reenvía; no se cobra.
401auth, invalid_key, key_revoked, key_expiredCorrige o reemplaza la clave.
402no_creditEl saldo es cero. Recarga; las solicitudes se reanudan de inmediato.
402key_daily_capEsta clave alcanzó el tope diario que fijaste. Súbelo o espera a las 00:00 UTC.
403content_policy + X-NoTrack-Content-Flag: child_safetyRechazada y no cobrada. Consulta Política de contenido.
429rate_limit, concurrencyReduce el ritmo y reintenta; respeta las dos cabeceras X-RateLimit-*.
502upstreamEl modelo no respondió. Reintenta con backoff; no se cobra.
503billing, safetyUna dependencia nuestra está caída. Reintenta en unos segundos; no se cobra.

Facturación

Crédito prepago, cobrado por token según el usage real de cada respuesta: $0.25 por 1M de tokens de entrada, $1.00 por 1M de tokens de salida. La entrada es todo lo que envías (system prompt, historial, el mensaje nuevo); la salida es lo que escribe el modelo.

Persona: modelo puro o el personaje de NoTrack Chat

Cada clave tiene un estilo, elegido en la página de claves y cambiable en cualquier momento:

Una solicitud puede anular la configuración de la clave, con un campo o con un sufijo en el modelo (para clientes que solo pueden fijar un nombre 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

Nombres de persona: notrack (el personaje simple), concise, detailed, creative (las mismas variantes que ofrece el chat), bare. La cabecera de respuesta X-NoTrack-Persona indica cuál se aplicó.

Política de contenido

No añadimos ningún system prompt ni aplicamos filtro de temas. Ficción para adultos, temas oscuros, lenguaje fuerte, violencia en la ficción: el modelo responde tal como se escribió. Una regla se aplica en el código y no se puede desactivar: se rechaza cualquier contenido sexual que involucre a un menor.

Los 403 repetidos en una clave llevan a que se cierre la clave y luego la cuenta. El texto completo está en la política de uso aceptable.

Privacidad

Los prompts y las completions no se escriben en disco: ni en el gateway, ni en los servidores del modelo. Lo que conservamos por solicitud es el id de solicitud, el id de la clave, los recuentos de tokens y el precio, porque es lo que compone la factura. Los rechazos de seguridad se registran por categoría, sin el texto. Ningún proveedor de modelos externo ve jamás tu tráfico: el modelo se ejecuta en hardware que alquilamos y controlamos.

Clientes y SDKs

El sitio web de NoTrack Chat y la app de NoTrack Chat son nuestro propio chat: no tienen campo para una clave de API y nunca lo tendrán. Una clave es para programas externos: pégala en uno de los clientes de abajo, o en tu propio código.

Python

from openai import OpenAI
client = OpenAI(base_url="https://api.notrackchat.com/v1", api_key="sk-…")
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.notrackchat.com/v1", apiKey: process.env.API_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.notrackchat.com/v1 → Custom API Key → Connect → Model notrack-uncensored. Streaming activado. Mantén el tamaño de contexto en 64,000 tokens o menos.

Chatbox

Settings → Model Provider → Add → Add Custom Provider, modo OpenAI API Compatible → pega la URL base y la clave, y luego añade notrack-uncensored como modelo.

NextChat

Settings → activa Custom Endpoint (compatible con OpenAI) → URL base y clave, y luego escribe el nombre del modelo en el campo de modelo.

Cherry Studio

Settings → Model Providers → Add Provider → escribe OpenAI → URL base y clave, y luego "Add model" → notrack-uncensored.

LobeChat

Settings → AI Service Provider → OpenAI → activa custom API endpoint, pega la URL base y la clave, y añade el modelo a la lista de modelos.

Cualquier otro

LangChain, LlamaIndex, Open WebUI, Continue, la configuración de proxy de JanitorAI, curl: cualquier cliente con una opción "OpenAI-compatible" o "custom base URL".

El texto de los menús arriba cambia entre versiones de la app; si una etiqueta no coincide exactamente, busca la opción que mencione "custom", "OpenAI-compatible" o "base URL".

Si un cliente no conecta

Claves

Preguntas o un id de solicitud para revisar: soporte · notrackchat.com/support.