Developer API

Integra Alhelí en tu producto.

Si construyes un backend, agente o app que necesita consultar la legislación y jurisprudencia de LATAM, autentica con una API key sobre el mismo endpoint MCP. Empiezas con 10 consultas gratis cada mes; después, $0.01 por llamada con saldo prepagado (recarga mínima $5.00, el saldo no expira).

Precio

10

llamadas gratis / mes calendario UTC

$0.01

por llamada exitosa tras el límite gratis

$5.00

recarga mínima — el saldo no expira

  • Solo se cobra status="ok". Errores del servidor y excepciones se reembolsan automáticamente al saldo.
  • Tienes Pro/Estudio? Las llamadas con API key cuentan contra tu cuota mensual del plan, no contra el saldo.
  • Cobro upfront atómico. Reservamos el costo antes de ejecutar; nunca te quedas con balance negativo.
  • Movimientos auditables. Cada top-up, debit y refund queda en tu ledger visible en el panel.

Tres pasos.

  1. 01

    Crea una API key

    En /dashboard/api. Le pones un nombre (ej. "backend prod") y copias el secreto — sólo se muestra una vez.

  2. 02

    (Opcional) Recarga saldo

    Las primeras 10 llamadas del mes son gratis. Si vas a superar, recarga desde $5.00 con Stripe Checkout.

  3. 03

    Envía requests JSON-RPC

    Mismo wire format que usan Claude / ChatGPT / Gemini. Sin SDK específico — cualquier cliente HTTP sirve.

Endpoint y autenticación

Bearer alh_live_…

https://connector.alheli.ai/api/mcp
  • Header obligatorio: Authorization: Bearer alh_live_…
  • Content-Type: application/json
  • Protocolo: MCP 2026-03-26
  • Método: POST (JSON-RPC 2.0)

Ejemplos.

1 · Listar tools disponibles

curl -X POST https://connector.alheli.ai/api/mcp \
  -H "Authorization: Bearer $ALHELI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

2 · Llamar a un tool (search_normativa)

curl -X POST https://connector.alheli.ai/api/mcp \
  -H "Authorization: Bearer $ALHELI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc":"2.0","id":2,"method":"tools/call",
    "params":{
      "name":"ec_legislacion_search_normativa",
      "arguments":{"query":"prescripción extintiva en materia civil"}
    }
  }'

3 · Python (httpx)

import os, httpx

API = "https://connector.alheli.ai/api/mcp"
headers = {"Authorization": f"Bearer {os.environ['ALHELI_API_KEY']}"}

def call_tool(name: str, arguments: dict):
    payload = {
        "jsonrpc": "2.0", "id": 1, "method": "tools/call",
        "params": {"name": name, "arguments": arguments},
    }
    r = httpx.post(API, headers=headers, json=payload, timeout=30)
    r.raise_for_status()
    return r.json()["result"]

result = call_tool(
    "ec_legislacion_search_jurisprudencia",
    {"query": "responsabilidad extracontractual del Estado"},
)
for chunk in result["structuredContent"]["chunks"]:
    print(chunk["numero"], "—", chunk["resumen"][:120])

4 · Node.js (fetch nativo)

const API = "https://connector.alheli.ai/api/mcp";

async function callTool(name, args) {
  const res = await fetch(API, {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${process.env.ALHELI_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      jsonrpc: "2.0", id: 1, method: "tools/call",
      params: { name, arguments: args },
    }),
  });
  if (!res.ok) throw new Error(`HTTP ${res.status}`);
  const { result, error } = await res.json();
  if (error) throw new Error(error.message);
  return result;
}

const out = await callTool("ec_legislacion_search_normativa", {
  query: "requisitos para divorcio por mutuo consentimiento",
});
console.log(out.structuredContent.chunks);

Forma de la respuesta

Chunks rankeados con metadata.

Cada tool devuelve un bloque content de texto (para clientes MCP genéricos) y un structuredContent con los chunks tipados — eso es lo que probablemente quieres consumir. Detalle de campos por tool en Referencia MCP.

{
  "jsonrpc": "2.0", "id": 2,
  "result": {
    "content": [{ "type": "text", "text": "3 fragmentos…" }],
    "structuredContent": {
      "count": 3,
      "chunks": [
        {
          "rank": 1, "score": 0.214,
          "legislation_title": "Código Civil",
          "article_text": "Art. 2414.- La prescripción…"
        }
      ]
    }
  }
}

Errores

Códigos y qué hacer.

HTTP / JSON-RPCSignificadoQué hacer
401 invalid_tokenBearer ausente / mal formado / revocado.Revisa el header. Si la key fue revocada, crea otra.
isError + insufficient_creditsSin saldo y sin free calls.Recarga desde $5.00 en /dashboard/api.
isError + quota_exceededSolo en tier Pro/Estudio agotado.Espera al ciclo siguiente o sube de plan.
-32601 method not foundMétodo JSON-RPC inválido.Solo usamos tools/list, tools/call, initialize, ping.
-32603 internal errorFalla del servidor / tool.Reintenta. El saldo NO se debita en error.

Buenas prácticas

Producción.

  • Una key por entorno. Separa dev / staging / prod para revocar quirúrgicamente si algo se filtra. Máximo 10 keys activas por cuenta.
  • Nunca embebas la key en el cliente. Siempre proxy desde tu backend; expón endpoints de tu propio dominio.
  • Cachea según query. Las respuestas son estables salvo cambios normativos — cachear consultas idénticas por horas baja tu costo a un fracción.
  • Monitorea el saldo. El panel /dashboard/api muestra balance y ledger. Para automatizar alertas, recarga cuando el saldo esté por debajo de un umbral cómodo.
  • Reintentos con backoff. Si recibes 5xx, reintenta con backoff exponencial. Los errores no debitan saldo, así que reintentar es seguro.