API de Character AI: Cambia tu cliente en tres líneas
Conecta tu chatbot a un LLM sin censura en minutos con nuestra API compatible con OpenAI. Esta guía te muestra cómo configurar, realizar peticiones básicas y usar streaming sin complicaciones de configuración.
https://api.characteraiapi.com/v1
Requisitos previos
Antes de escribir código, necesitas una cuenta activa en characteraiapi.com. Visita la página Obtener clave de API y regístrate solo con un correo electrónico y contraseña. No se requiere tarjeta de crédito para comenzar, y las cuentas nuevas reciben $0,50 en crédito de prueba válido por 7 días. Una vez registrado, tu clave de API se muestra inmediatamente. Mantén esta clave segura, ya que autentica todas las peticiones al endpoint. También necesitarás un SDK de un lenguaje compatible instalado en tu entorno de desarrollo. El endpoint character ai api acepta parámetros estándar de OpenAI, por lo que cualquier cliente compatible con OpenAI puede funcionar con cambios mínimos.
Instalar el SDK
Para proyectos en Python, instala el paquete oficial de OpenAI usando pip. Esta biblioteca maneja automáticamente la serialización JSON y las peticiones HTTP. Para aplicaciones en Node.js, usa npm para agregar el paquete openai. Ambas bibliotecas admiten las funciones de streaming y llamadas a herramientas descritas más adelante en esta guía. Asegúrate de que la versión de tu SDK sea lo suficientemente reciente para admitir Server-Sent Events (SSE) para streaming de tokens en tiempo real. Si usas un cliente HTTP personalizado en lugar de un SDK, debes manejar manualmente la carga útil JSON y el análisis del flujo SSE según la especificación de la API de OpenAI.
Autenticación
Toda petición a la API debe incluir tu clave de API en el encabezado Authorization. Usa el formato Bearer YOUR_API_KEY. La URL base para todas las peticiones es https://api.characteraiapi.com/v1. Al usar un SDK, configura la configuración base_url con este valor y proporciona tu clave mediante el parámetro api_key. Si pierdes tu clave o sospechas una filtración, puedes regenerarla desde el panel; la clave antigua se revocará inmediatamente. Solo se permite una clave activa por cuenta. Asegúrate de usar la URL base correcta, ya que las peticiones al endpoint estándar de OpenAI fallarán con un error 404 o 401.
Completado de chat básico
La funcionalidad principal se sirve a través del endpoint /v1/chat/completions. Envía una petición POST con un nombre de modelo de uncensored y tu historial de mensajes. El modelo responde con salida de texto sin aplicar filtros de contenido estándar para contenido adulto legal. A continuación se muestra un ejemplo de curl que demuestra una petición simple de completado de texto.
curl https://api.characteraiapi.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "Write a blunt product review of a cheap VPN."}]
}'
Esta petición devuelve un objeto de completado que contiene el texto generado. Puedes ajustar parámetros como temperature para controlar la aleatoriedad o max_tokens para limitar la longitud de la salida. El modelo admite una ventana de contexto de 100.000 tokens, lo que permite procesar un historial de conversación sustancial o documentos largos en una sola petición.
Respuestas en streaming
Para una mejor experiencia de usuario, habilita el streaming estableciendo stream: true en tu petición. La API devuelve Server-Sent Events (SSE) que contienen fragmentos de tokens parciales a medida que se generan. Esto reduce la latencia percibida para aplicaciones de chatbot. Usa el parámetro stream_options si deseas recibir las estadísticas de uso finales en el último evento. El streaming es particularmente útil para el roleplay de personajes en tiempo real, donde mostrar texto palabra por palabra mejora la inmersión. Asegúrate de que el código de tu cliente maneje correctamente el formato SSE para analizar cada fragmento secuencialmente.
stream = client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "Tell the story in second person."}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
Límites de peticiones y errores
La API impone un límite de 300 peticiones por minuto por clave. Si lo excedes, recibirás un error 429 Too Many Requests. Los cuerpos de las peticiones tienen un límite de 8 MB. Los errores comunes incluyen 401 para una clave inválida o ausente, y 402 si tu crédito prepago se agota. Puedes recargar desde $10 usando criptomonedas (USDT o USDC), con créditos adicionales disponibles para depósitos más grandes. A diferencia de algunos proveedores, no hay tarifas ocultas ni bloqueos de suscripción; pagas solo por los tokens que consumes. Los precios son transparentes: $0.25 por cada 1M de tokens de entrada y $1.00 por cada 1M de tokens de salida. Asegúrate de que tu lógica de manejo de errores reintente en caso de 429 con retroceso exponencial.
from openai import OpenAI
client = OpenAI(base_url="https://api.characteraiapi.com/v1", api_key="YOUR_KEY")
resp = client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "Summarise this thread without softening it."}],
)
print(resp.choices[0].message.content)Node.js
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.characteraiapi.com/v1", apiKey: process.env.API_KEY });
const resp = await client.chat.completions.create({
model: "uncensored",
messages: [{ role: "user", content: "Draft a villain monologue for my game." }],
});
console.log(resp.choices[0].message.content);Ficha técnica de la API
Una tabla con cada límite, función y precio.
| Elemento | Valor |
|---|---|
| Formato | compatible con OpenAI: cualquier SDK de OpenAI funciona cambiando la base URL y la clave |
| Endpoints | POST /v1/chat/completions · GET /v1/models |
| Autenticación | Authorization: Bearer YOUR_KEY |
| Base URL | https://api.characteraiapi.com/v1 |
| ID del modelo | uncensored |
| Modo JSON | response_format: {"type": "json_object"} |
| Salida máxima | hasta el resto de la ventana de 100.000 tokens; max_tokens opcional (sin límite aparte) |
| Parámetros | temperature, top_p, stop, seed, presence_penalty, frequency_penalty |
| Ventana de contexto | 100.000 tokens (entrada + salida) |
| Streaming | sí: server-sent events; el último fragmento incluye el uso de tokens |
| Llamadas a funciones | sí: tools, tool_choice; la respuesta trae tool_calls, también en streaming; resultados como role: tool |
| Tamaño de petición | hasta 8 MB |
| Cabeceras | X-Request-Id, X-Balance-USD, X-RateLimit-Limit-Requests, X-RateLimit-Limit-Concurrency |
| Concurrencia | 8 peticiones a la vez por clave |
| Límite de peticiones | 300 por minuto por clave |
| Caducidad | el crédito pagado no caduca, sin suscripción |
| Bono | +5 % desde $50, +10 % desde $100 |
| Recarga | USDT (TRC20) o USDC (Base), cualquier importe entero de $10 a $500 |
| Precio | $0,25 por 1M tokens de entrada · $1,00 por 1M de salida |
| Facturación | crédito prepago por uso real; errores y rechazos no se cobran |
| Prueba gratis | $0,50 durante 7 días, sin tarjeta · Clave de prueba: 2 solicitudes paralelas, 60 por minuto; límites completos (8 y 300) tras la primera recarga |
| Claves | una clave activa por cuenta; una nueva reemplaza a la anterior |
| Acceso | Google o correo y contraseña |
| Contenido | contenido adulto permitido; se rechaza el contenido sexual con menores |
Códigos de error
Los errores llegan como JSON con un type fijo; las peticiones fallidas o rechazadas no se cobran.
| Código | Tipo | Significado |
|---|---|---|
400 | bad_request | JSON inválido, mensajes vacíos, parámetro incorrecto o contexto demasiado largo |
401 | missing_key · invalid_key · key_revoked | falta la clave, es incorrecta o fue reemplazada |
402 | no_credit | sin crédito: recarga y sigue al instante |
403 | content_blocked | contenido sexual con menores: rechazado, no se cobra |
404 | not_found | endpoint desconocido |
413 | request_too_large | cuerpo mayor de 8 MB |
429 | rate_limited · concurrency | más de 300/min o 8 en paralelo: espera y reintenta |
503 | upstream_busy | modelo ocupado: reintenta en unos segundos |
Preguntas y respuestas
¿Es esta la API oficial de Character.ai?
No, este es un servicio independiente alojado en characteraiapi.com. Sirve su propio modelo sin censura y no está afiliado con Character.AI ni con ningún otro proveedor importante de LLM.
¿El modelo admite generación de imágenes o audio?
No. La API es solo de texto. Acepta entrada de texto y devuelve salida de texto. No admite embeddings, ajuste fino ni entradas/salidas multimodales.
¿Cómo se define 'sin censura'?
El modelo no rechaza temas adultos, ficticios o controversos legales. Solo bloquea contenido sexual que involucre menores, lo cual es un límite estricto aplicado a todas las peticiones.
Tu clave está a un formulario de distancia
Crea una cuenta, copia la clave, cambia la URL base. Eso es toda la configuración.