Documentación de la API de ChatGPT: Referencia rápida y primeros llamados
La mayoría de las APIs de chat comparten el formato de petición que popularizó la API de ChatGPT. Esta página es una referencia breve para el endpoint compatible en este sitio, con ejemplos para copiar y pegar.
Última actualización

Resumen
- URL base https://api.gptsemfiltro.com/v1, autenticación con token bearer, ID del modelo uncensored.
- Tres métodos: completados de chat, respuestas y la lista de modelos; el saldo tiene sus propios endpoints.
- Se admite streaming, llamadas a funciones y modo JSON; el contexto es de 100.000 tokens.
- Los errores 429 llevan un código: rate_limited o concurrency.
Qué cubre esta página
Si buscabas documentación de la API de chatgpt, quizás prefieras la documentación propia de OpenAI para sus propios modelos. Esta página es otra cosa: una referencia práctica para una API compatible con OpenAI alojada en este sitio. Ejecuta un único modelo de pesos abiertos, uncensored, ajustado para responder sin rechazos de contenido para uso adulto lícito. No es la API oficial de OpenAI ni de ningún otro proveedor.
Las formas de petición y respuesta siguen el formato familiar de OpenAI, por lo que los SDK oficiales y la mayoría de las herramientas funcionan después de cambiar la URL base y la clave. La referencia completa está en la documentación de la API; esta página te da la versión rápida con ejemplos que puedes ejecutar.
Conceptos básicos de conexión y una primera llamada
Conceptos básicos de conexión
| Ítem | Valor |
|---|---|
| URL base | https://api.gptsemfiltro.com/v1 |
| Autenticación | Authorization: Bearer YOUR_KEY |
| ID del modelo | uncensored |
| Endpoint de chat | POST /v1/chat/completions |
| Endpoint de respuestas | POST /v1/responses |
| Lista de modelos | GET /v1/models |
| Saldo | GET /v1/balance o GET /v1/dashboard/billing/credit_grants |
| Cuerpo de petición máximo | 8 MB |
| Ventana de contexto | 100,000 tokens, prompt más respuesta |
Obtén una clave en la página de clave de API. Los nuevos usuarios pueden reclamar un crédito de prueba de $0,50 con un solo clic; es válido por 7 días y no requiere pago. Puedes regenerar una clave en cualquier momento, y las cuentas que hayan recargado pueden tener hasta 5 claves, etiquetarlas y revocar cualquiera.
Tu primera llamada
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)
La respuesta contiene choices[0].message.content y un objeto usage con los recuentos de tokens del prompt y la completación.
Parámetros de la petición
Los parámetros que usarás más:
model: siempreuncensored.messages: una lista de objetos conrole(system,user,assistantotool) ycontent.max_tokens: opcional. Si no lo indicas, la completación puede usar el resto de la ventana de 100 000 tokens.temperature,top_p,stop,seed,frequency_penalty,presence_penalty: se pasan al modelo.stream: establece atruepara eventos enviados por el servidor, con el uso al final.toolsytool_choice: describen funciones que el modelo puede llamar.response_format:{"type": "json_object"}activa el modo JSON.
No disponible: generación de imágenes, audio o video, embeddings y ajuste fino. El servicio maneja solo texto.
Los roles funcionan como en el formato de OpenAI. Un mensaje system establece el comportamiento para toda la conversación, los mensajes user contienen la entrada del usuario, los mensajes assistant contienen respuestas anteriores y los mensajes tool devuelven resultados de funciones. La API no conserva memoria entre llamadas, por lo que cada petición debe incluir el historial que deseas que vea el modelo. El prompt y la respuesta comparten la ventana de 100 000 tokens, lo que significa que un historial largo deja menos espacio para la respuesta.
Streaming, llamadas a funciones y modo JSON
Transmisión
Establece stream a true y lee los eventos a medida que llegan. Cada fragmento tiene un pequeño delta de texto, y el uso llega al 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 ?? "");
}
Una petición en streaming mantiene su espacio de concurrencia hasta que finaliza el flujo, así que cierra los flujos que ya no necesites.
Llamadas a herramientas y modo JSON
Declara funciones con tools. Cuando el modelo quiera una, la respuesta tendrá tool_calls en lugar de texto. Ejecutas la función y envías el resultado de vuelta como un mensaje con 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)
En producción, verifica que exista tool_calls antes de leerlo, ya que el modelo puede responder en texto plano. Para salida estructurada sin herramientas, añade "response_format": {"type": "json_object"} y indica en el prompt que quieres JSON.
Límites, errores y cabeceras
| Límite | Clave completa | Clave de prueba |
|---|---|---|
| Peticiones simultáneas | 8 | 2 |
| Peticiones por minuto | 300 | 60 |
| Tamaño del cuerpo | 8 MB | 8 MB |
Al superar un límite, la API devuelve HTTP 429. El código de error rate_limited significa demasiadas peticiones por minuto; concurrency significa demasiadas a la vez. En sobrecarga temporal también obtienes 429, con una cabecera Retry-After: 5. Las peticiones fallidas o rechazadas no se cobran.
Cabeceras de respuesta útiles: X-Request-Id (cítala al contactar con soporte), X-Balance-USD, X-RateLimit-Limit-Requests y X-RateLimit-Limit-Concurrency.
Un pequeño auxiliar de reintento en Node que espera Retry-After y aumenta el retraso en cada intento:
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");
}Mover código existente y verificar tu saldo
Mover código existente a este endpoint
Si tu código ya llama a un endpoint de chat estilo OpenAI, la migración es pequeña. Cambia estos tres valores y deja el resto:
- La URL base se convierte en
https://api.gptsemfiltro.com/v1. - La clave se convierte en la de la página de claves de API.
- El modelo se convierte en
uncensored.
Luego verifica en qué depende tu código. Todo lo basado en texto y con forma de chat se traslada: prompts de sistema, historial, streaming, llamadas a funciones y modo JSON. Cualquier otra cosa no existe aquí. No hay generación de imágenes, ni audio o video, ni embeddings ni ajuste fino, por lo que el código que llama a esas rutas necesita otro proveedor.
El endpoint de respuestas también está disponible, para clientes que prefieran ese 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."}'
Pruébalo antes de lanzarlo, porque diferentes modelos se comportan de manera distinta con el mismo prompt. Los rechazos, el tono y la longitud pueden cambiar, así que vuelve a ejecutar los prompts que te interesen.
Comprobación de tu saldo desde código
El saldo está disponible de tres formas. Cada respuesta incluye el encabezado X-Balance-USD. También puedes llamar a GET /v1/balance o a la ruta estilo OpenAI GET /v1/dashboard/billing/credit_grants, que algunos paneles ya saben leer.
curl https://api.gptsemfiltro.com/v1/balance \
-H "Authorization: Bearer YOUR_KEY"
Un patrón útil es leer el encabezado después de cada llamada, guardarlo y alertar cuando cae por debajo de un umbral que tú elijas. Como el crédito es prepago y no caduca, un saldo bajo es una señal para recargar, no una fecha límite.
Resumen de precios
El coste de entrada es de $0,15 por 1M de tokens y el de salida de $0,50 por 1M de tokens, descontados del crédito prepago. Ejemplo: 3.000 tokens de entrada y 600 de salida cuestan 3.000 x $0,15 / 1M + 600 x $0,50 / 1M = $0,00045 + $0,0003 = $0,00075. Las recargas son importes enteros de $20 a $500 con bonificaciones de +5% desde $50, +10% desde $100 y +15% desde $200, pagados en USDT (TRC20) o USDC (Base). Más detalles en la página de precios. Los prompts no se usan para entrenamiento.
Lista de comprobación para solucionar problemas en una primera integración
La mayoría de los fallos en las primeras llamadas provienen de una lista corta de causas. Revísalas en orden antes de sospechar del servicio.
- Estado 401. La clave falta o está mal escrita. Imprime el encabezado que realmente envía tu cliente y compáralo con
Authorization: Bearer YOUR_KEY. Si la clave se pegó en un lugar público, regénerala en la página de clave de API; la clave antigua deja de funcionar de inmediato. - Estado 404. La ruta es incorrecta. La base URL termina en
/v1, y el SDK añade/chat/completionspor sí mismo. Si llamas a la API con HTTP plano, escribe la ruta completa. - Un error sobre el modelo. El único ID de modelo es
uncensored. Un nombre copiado de la documentación de otro proveedor no coincidirá.GET /v1/modelslista lo que la clave puede usar. - Una petición muy grande falla. El límite del cuerpo es de 8 MB. Es mejor recortar o resumir los historiales largos mucho antes de que se acerquen a ese tamaño, y la ventana de 100 000 tokens se comparte entre el prompt y la completación de todos modos.
- 429 intermitentes. Lee el código de error.
concurrencysignifica demasiadas llamadas a la vez, así que reduce tu cantidad de workers.rate_limitedsignifica demasiadas por minuto. Un encabezadoRetry-After: 5significa sobrecarga temporal, y una espera corta lo soluciona. - Respuestas cortadas. Si configuras
max_tokens, la respuesta se detiene ahí yfinish_reasonleelength. Aumenta el límite o elimínalo.
Guarda el valor X-Request-Id de cualquier llamada que no puedas explicar. Es la forma más rápida de señalar una petición exacta cuando escribes a soporte.
Más guías
Preguntas frecuentes
¿Es esta la API oficial de ChatGPT?
No. Es un modelo de pesos abiertos alojado de forma independiente con una interfaz compatible con OpenAI. No está operado por OpenAI.
¿Qué endpoints se admiten?
POST /v1/chat/completions, POST /v1/responses y GET /v1/models, más los endpoints de balance en /v1/balance y /v1/dashboard/billing/credit_grants.
¿Necesito un SDK diferente?
No. Los SDK oficiales de OpenAI para Python y Node funcionan después de cambiar la base URL, la clave y el nombre del modelo.
¿Cómo verifico mi crédito restante?
Lee la cabecera X-Balance-USD en cualquier respuesta, o llama a GET /v1/balance.
Obtén tu clave de API
Regístrate, copia la clave y actualiza tu base URL. La configuración está completa.