API de decisiones
Envía contexto y una pregunta. Recibe una decisión estructurada.
Crea una clave API en la configuración de tu cuenta y compra créditos. Envía Authorization: Bearer YOUR_API_KEY y un Idempotency-Key único por decisión. El uso se cobra al propietario de la clave; nunca la expongas en el navegador.
Un ejemplo de API Jev para tu próxima integración
Llama a la API REST de iajev con cURL. Recibe una opción, probabilidades y confianza en JSON.
curl https://iajev.com/api/v1/decisions/run \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Idempotency-Key: YOUR_UNIQUE_REQUEST_ID' \
-H 'Content-Type: application/json' \
--data '{
"state": {
"message": "Me cobraron dos veces la suscripción del mes pasado y todavía no recibo mi reembolso.",
"plan": "pro",
"country": "MX"
},
"decision": {
"type": "choice",
"question": "¿Qué equipo debe atender esta solicitud?",
"choices": [
"Facturación",
"Soporte técnico",
"Ventas",
"Fraude"
]
}
}'Elige un modelo de decisión
Las solicitudes existentes siguen usando Jev. La URL, clave API, tipos y respuestas Jev no cambian. Agrega model: "clef" para usar Clef; omite model o usa "jev" para Jev.
Jev: 1 crédito por cada 1,000 tokens de entrada iniciados. Clef: 1 por cada 100. Mínimo: 1 crédito. La pregunta y los criterios también cuentan como tokens de entrada.
Jev reserva hasta 32 créditos disponibles y requiere al menos 1. Clef estima la reserva según el texto completo y las dimensiones de las imágenes; el saldo debe cubrirla. El cobro usa los tokens reales sin superar la reserva. Se libera el sobrante e iajev cubre cualquier subestimación. Los fallos no se cobran.
Texto: JSON de state y preguntas mapeadas al modelo, con etiquetas y descripciones; max(caracteres Unicode × 2, bytes UTF-8) + 200 tokens. Imágenes: cuadrícula de 32 píxeles tras ampliar a un mínimo de 65,536 píxeles, margen del 25 % y 16 tokens por imagen. Total limitado a 65,536 tokens; créditos redondeados hacia arriba por cada 100. Es una estimación, no un tokenizer. GET /api/v1/models indica versión, parámetros y reserva máxima, con reservationMode, maxReservationCredits, estimation y chargeCappedAtReservation en lugar de los campos fijos reservationCredits/minimumAvailableCredits.
Jev conserva 8,000 caracteres y 16,000 bytes. Clef acepta hasta 1 MiB de texto JSON con una ventana de 65,536 tokens compartida entre texto, imágenes y pregunta; el estado demasiado largo puede truncarse. Una pregunta, hasta 8 opciones o niveles. Solicitud Clef: hasta 13 MiB, sin video.
Imágenes Clef: images opcional con URL data:image/png;base64,... (también JPEG/WebP) u objetos {content_type, base64}. Hasta 4 imágenes, 4 MiB / 16 MP cada una, 8 MiB decodificados en total. No se aceptan URL remotas. No se guardan imágenes en el historial ni en configuraciones; reenvíalas en cada reintento con la misma clave. Tiempo límite: Clef 90 segundos, Jev 15. El formulario carga tres ejemplos fijos del CDN de iajev mediante un servicio interno y los reduce a 512 px. API/MCP siguen requiriendo imágenes integradas; no aceptan URL remotas.
GET /api/v1/models usa tu clave API sin consumir créditos. Revisa available. En MCP, usa list_models gratis y pasa model a run_decision. La autenticación y los permisos no cambian.
Reutiliza la clave de idempotencia si el resultado es incierto. Cambiar de modelo con la misma clave devuelve IDEMPOTENCY_CONFLICT. Las llamadas completadas conservan su resultado y cobro aunque se desactive Clef. No hay sustitución automática de modelos.
Solo Clef agrega meta.model y billing.pricingVersion, estimationVersion, estimatedInputTokens, reservedCredits y waivedCredits. waivedCredits indica la diferencia asumida por iajev; billing.credits es el cargo real. Jev no cambia. MODEL_UNAVAILABLE (503) indica que Clef está deshabilitado.
curl https://iajev.com/api/v1/models -H 'Authorization: Bearer YOUR_API_KEY'curl https://iajev.com/api/v1/decisions/run \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Idempotency-Key: clef-example-001' \
-H 'Content-Type: application/json' \
--data '{
"model": "clef",
"state": {
"message": "Mis pagos han fallado durante tres días. Necesito ayuda hoy."
},
"images": [
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+jRZkAAAAASUVORK5CYII="
],
"decision": {
"type": "noul",
"question": "¿Esta solicitud requiere atención urgente?"
}
}'{
"model": "clef",
"state": {
"message": "Mis pagos han fallado durante tres días. Necesito ayuda hoy."
},
"images": [
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+jRZkAAAAASUVORK5CYII="
],
"decision": {
"type": "noul",
"question": "¿Esta solicitud requiere atención urgente?"
},
"idempotency_key": "clef-example-001"
}Campos de la solicitud
- model
- Las solicitudes existentes siguen usando Jev. La URL, clave API, tipos y respuestas Jev no cambian. Agrega model: "clef" para usar Clef; omite model o usa "jev" para Jev.
- images
- Imágenes Clef: images opcional con URL data:image/png;base64,... (también JPEG/WebP) u objetos {content_type, base64}. Hasta 4 imágenes, 4 MiB / 16 MP cada una, 8 MiB decodificados en total. No se aceptan URL remotas. No se guardan imágenes en el historial ni en configuraciones; reenvíalas en cada reintento con la misma clave. Tiempo límite: Clef 90 segundos, Jev 15. El formulario carga tres ejemplos fijos del CDN de iajev mediante un servicio interno y los reduce a 512 px. API/MCP siguen requiriendo imágenes integradas; no aceptan URL remotas.
- state.message
- Jev conserva 8,000 caracteres y 16,000 bytes. Clef acepta hasta 1 MiB de texto JSON con una ventana de 65,536 tokens compartida entre texto, imágenes y pregunta; el estado demasiado largo puede truncarse. Una pregunta, hasta 8 opciones o niveles. Solicitud Clef: hasta 13 MiB, sin video.
- state.<field>
- Hasta 5 campos opcionales además de message. Nombres: de 1 a 40 caracteres. Valores: texto de hasta 300 caracteres, un número finito o un booleano. No se admiten objetos anidados.
- decision.type
- Usa "choice", "noul" o "score". Cada solicitud evalúa una pregunta para un solo state.
- decision.question
- Texto obligatorio; de 1 a 300 caracteres.
- decision.choices
- Obligatorio solo para choice: de 2 a 8 cadenas únicas y no vacías, de hasta 80 caracteres cada una.
- decision.criteria
- noul: objeto opcional con las descripciones true y false (1–300 caracteres cada una). score: arreglo ordenado obligatorio de 2 a 8 etiquetas únicas (1–80 caracteres cada una), de menor a mayor. No envíes choices para estos tipos.
Campos de la respuesta
- decision
- choice: cadena seleccionada. noul: probabilidad de verdadero (0–1), no un booleano. score: valor numérico de 0 a criteria.length − 1; puede ser fraccionario.
- confidence
- Estimación independiente de confianza (0–1) para choice y score. null para noul porque el modelo no la proporciona.
- results
- choice: etiquetas y probabilidades de mayor a menor. noul: true y luego false, con p y 1 − p. score: etiquetas y probabilidades en el orden original de criteria; el índice es el nivel.
- meta
- Latencia en milisegundos e ID de solicitud para diagnóstico.
- billing
- Créditos cobrados, inputTokens y outputTokens de esta solicitud.
Errores y límites
- 400
- Datos inválidos o falta Idempotency-Key.
- 401
- Clave API ausente, inválida, vencida o revocada.
- 402
- Créditos disponibles insuficientes.
- 409
- Solicitud en proceso, fallida o clave de idempotencia reutilizada con otros datos.
- 403
- Cuenta sin verificar o deshabilitada.
- 413
- La solicitud supera 16,000 bytes UTF-8, incluidos todos los campos.
- 415
- Content-Type debe ser application/json.
- 429
- Se alcanzó el límite de la clave API. Respeta el encabezado Retry-After.
- 502 / 503 / 504
- Decisión no disponible o tiempo agotado. Evita reintentos inmediatos repetidos.
{
"decision": "Billing",
"confidence": 0.8,
"results": [
{ "value": "Billing", "probability": 0.87 },
{ "value": "Technical", "probability": 0.10 },
{ "value": "Sales", "probability": 0.02 },
{ "value": "Fraud", "probability": 0.01 }
],
"meta": { "latencyMs": 218, "requestId": "…" },
"billing": { "credits": 1, "inputTokens": 380, "outputTokens": 0 }
}Ejemplos de probabilidad y puntuación
noul
{
"state": {
"message": "Mis pagos han fallado durante tres días. Necesito ayuda hoy."
},
"decision": {
"type": "noul",
"question": "¿Esta solicitud requiere atención urgente?"
}
}{
"decision": 0.95,
"confidence": null,
"results": [
{
"value": "true",
"probability": 0.95
},
{
"value": "false",
"probability": 0.05
}
],
"meta": {
"latencyMs": 218,
"requestId": "…"
},
"billing": {
"credits": 1,
"inputTokens": 380,
"outputTokens": 45
}
}score
{
"state": {
"message": "Mis pagos han fallado durante tres días. Necesito ayuda hoy."
},
"decision": {
"type": "score",
"question": "¿Qué tan urgente es esta solicitud?",
"criteria": [
"Urgencia baja",
"Urgencia moderada",
"Urgencia alta"
]
}
}{
"decision": 1.8,
"confidence": 0.9,
"results": [
{
"value": "Urgencia baja",
"probability": 0.05
},
{
"value": "Urgencia moderada",
"probability": 0.1
},
{
"value": "Urgencia alta",
"probability": 0.85
}
],
"meta": {
"latencyMs": 218,
"requestId": "…"
},
"billing": {
"credits": 1,
"inputTokens": 380,
"outputTokens": 45
}
}Historial de la API
2026-10-04: reservas dinámicas y cobro limitado para Clef, imágenes y contexto 64K, model opcional, cobro de Clef, GET /api/v1/models y MCP list_models. Jev sigue siendo el modelo predeterminado con su cobro, formato e idempotencia histórica.
Se agregaron noul y score a POST /api/v1/decisions/run. Se conservan la estructura state + decision, las solicitudes y respuestas choice existentes, la autenticación, la facturación y la idempotencia.
curl https://iajev.com/api/v1/credits -H 'Authorization: Bearer YOUR_API_KEY'Jev: Cada solicitud de pago reserva temporalmente hasta 32 créditos disponibles (se requiere al menos 1) y después cobra 1 crédito por cada bloque iniciado de 1,000 tokens de entrada (mínimo 1). Los créditos no usados se liberan y los fallos no se cobran. Conserva el mismo Idempotency-Key al reintentar después de un error de conexión. HTTP 409 REQUEST_PENDING indica que debes esperar y reintentar con la misma clave; REQUEST_FAILED requiere una nueva. Reutilizar una clave con datos distintos devuelve 409.
No incluyas secretos ni datos personales innecesarios. El contexto se envía para inferencia. Las solicitudes con sesión y por API guardan datos, resultados y facturación en tu historial privado. Las decisiones guardadas también conservan el contexto. La prueba anónima solo registra contadores de límites, sin historial de decisiones.