Ir al contenido principal

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.

Leer la documentación de la API de iajev
Solicitud
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.

Consultar modelos disponibles
curl https://iajev.com/api/v1/models -H 'Authorization: Bearer YOUR_API_KEY'
Solicitud API Clef
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?"
  }
}'
Argumentos Clef para run_decision en MCP
{
  "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.
Estructura de respuesta
{
  "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

Solicitud
{
  "state": {
    "message": "Mis pagos han fallado durante tres días. Necesito ayuda hoy."
  },
  "decision": {
    "type": "noul",
    "question": "¿Esta solicitud requiere atención urgente?"
  }
}
Estructura de respuesta
{
  "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

Solicitud
{
  "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"
    ]
  }
}
Estructura de respuesta
{
  "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.

Consultar créditos disponibles
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.