Agentes de IA · API · x402

Pruebas verificables de lo que registran tus agentes de IA

Tu agente calcula el hash SHA-256 de un registro —un log de ejecución, una decisión con sus entradas, un resultado entregado— y lo envía a Sellat. Recibe una prueba anclada en Polygon y en Bitcoin que cualquiera puede verificar sin confiar en Sellat. Si la fecha tiene que valer ante un tercero, añade un sello de tiempo cualificado eIDAS.

Sellat no certifica que una acción se ejecutara ni que su resultado sea correcto. Certifica que esos bytes exactos existían en ese momento y que no han cambiado desde entonces.

Ver la llamada

Con x402 no hace falta cuenta ni clave: pagar es el alta.

Referencia de la API →
Solo el hash El registro no sale de tu sistema
Polygon en minutos Lote Merkle con transacción pública
Bitcoin Atestación OpenTimestamps, horas después
eIDAS cualificado Sello RFC 3161 en segundos, si lo pides

Qué se sella

Cualquier registro que tu agente pueda convertir en bytes

Sellat no lee el registro ni sabe qué contiene: trabaja con su huella. Eso permite sellar evidencias de ejecución de cualquier modelo, framework o plataforma con la misma llamada HTTP.

Logs de ejecución

El JSONL de una sesión, las llamadas a herramientas y sus respuestas, el diff que aplicó. Un registro de auditoría (audit trail) que nadie puede retocar después sin que se note.

Decisiones y sus entradas

La instrucción recibida, los datos consultados y la decisión tomada, en un mismo documento. Si algo sale mal, se puede demostrar qué había escrito en ese momento.

Resultados entregados

El informe, el contrato redactado, el dataset generado o el código entregado al cliente: la prueba fija la versión exacta y la fecha.

Registros encadenados

Tu sistema encadena cada entrada con el hash de la anterior y sella la cabeza de la cadena cada cierto tiempo. El registro sigue en tus manos; Sellat solo fecha su estado.

Límites claros

Qué demuestra la prueba y qué no

Demuestra

  • Que esos bytes exactos existían como muy tarde en la fecha del anclaje.
  • Que el registro no ha cambiado desde entonces: un solo byte distinto y la verificación falla.
  • El orden de los registros, cuando cada uno incluye el hash del anterior.
  • Con el sello cualificado, la fecha y la integridad con la presunción del art. 41.2 eIDAS.

No demuestra

  • Que el agente ejecutara realmente lo que dice el registro.
  • Que el registro esté completo: lo que no se registró no aparece.
  • Que el contenido sea verdadero o la decisión, correcta.
  • Quién es el autor del registro ni quién controla el agente.

La llamada

De un registro a una prueba, paso a paso

Un agente con una cartera USDC en Base paga cada llamada con x402: sin cuenta, sin clave y sin formulario. Las respuestas de este ejemplo son las reales de la API, recortadas.

  1. 01

    Calcula la huella del registro

    El hash se calcula donde está el registro. A Sellat solo viajan 64 caracteres hexadecimales.

    shell
    sha256sum agent-run.jsonl
    # 9f2b…c41e  agent-run.jsonl
  2. 02

    Pide la prueba sin pagar: recibes la oferta

    La API responde 402 con el precio, la red, el token y la dirección. El sobre está en la cabecera PAYMENT-REQUIRED y también en el cuerpo, junto con la URL y la versión de las condiciones que se aceptan al pagar.

    shell
    curl -i https://sellat.app/api/v2/proofs \
      -H "Content-Type: application/json" \
      -d '{"hash":"<sha256 de 64 hex>","name":"agent-run.jsonl"}'
    
    HTTP/2 402
    payment-required: eyJ4NDAyVmVyc2lvbiI6Mi…
    {
      "x402Version": 2,
      "accepts": [{ "scheme": "exact", "network": "eip155:8453",
                    "amount": "10000", "asset": "0x8335…2913" }],
      "error": { "code": "payment_required",
                 "message": "This call costs 0.01 USD, paid per call with x402 (USDC)." }
    }
  3. 03

    Paga con el cliente oficial de x402

    El cliente lee el 402, firma una autorización EIP-3009 por el importe exacto y repite la llamada. El gas lo paga el facilitador. Por defecto el cliente no paga más de 1 $ por llamada, y ninguna llamada de Sellat lo supera.

    TypeScript · @x402/fetch
    import { createHash } from "node:crypto";
    import { readFileSync } from "node:fs";
    import { x402Client, wrapFetchWithPayment } from "@x402/fetch";
    import { ExactEvmScheme } from "@x402/evm/exact/client";
    import { privateKeyToAccount } from "viem/accounts";
    
    const client = new x402Client();
    client.setSpendControls({ maxAmountPerPayment: "$1" });
    client.register("eip155:8453", new ExactEvmScheme(privateKeyToAccount(process.env.AGENT_KEY)));
    const pay = wrapFetchWithPayment(fetch, client);
    
    const hash = createHash("sha256").update(readFileSync("agent-run.jsonl")).digest("hex");
    const res = await pay("https://sellat.app/api/v2/proofs", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ hash, name: "agent-run.jsonl", metadata: { run: "2026-10-31-0142" } }),
    });
    const proof = await res.json(); // 201: proof_id, urls, api_key (una sola vez)
  4. 04

    Guarda lo que devuelve

    La respuesta trae el identificador, el estado y las URL de la prueba portable, el certificado y el paquete de evidencias. La primera prueba de una cartera devuelve una sola vez una clave de solo lectura para consultar sus pruebas gratis.

    respuesta
    {
      "id": "6f2c9b1e-0d1a-4b9f-8e7c-2a4d5b6c7d8e",
      "created": true,
      "state": "queued",
      "anchoring": { "policy": "fast" },
      "urls": {
        "proof_json": "https://sellat.app/api/v2/proof/6f2c9b1e-….json",
        "certificate": "https://sellat.app/certificate/…",
        "evidence_zip": "https://sellat.app/api/v2/proofs/6f2c9b1e-…/evidence.zip"
      },
      "api_key": "sellat_…",
      "payment": { "charged": true, "amount_usd": "0.01", "transaction": "0x…" }
    }
  5. 05

    Añade el sello cualificado, si la fecha tiene que valer ante un tercero

    Sobre el mismo proof_id y sin volver a calcular nada. Un prestador cualificado de la lista de confianza de la UE emite el token RFC 3161 en segundos.

    TypeScript
    await pay(`https://sellat.app/api/v2/proofs/${proof.id}/qualified`, { method: "POST" });
    // 200: qualified.state = "issued", qualified.time, tsr_url

Mismos bytes, misma cartera: la segunda llamada devuelve la prueba existente y no se cobra. Una llamada que falla tampoco se cobra: el pago se verifica antes del trabajo y se liquida después.

¿Tu agente trabaja para una persona o una empresa con cuenta?

Con una clave de API de una cuenta gratuita, la misma llamada no pasa por x402: 1000 pruebas al día, ancladas en el lote que se cierra cada cuatro horas. La Cuenta Pro las ancla en minutos.

curl https://sellat.app/api/v2/proofs \
  -H "Authorization: Bearer sellat_…" \
  -H "Content-Type: application/json" \
  -d '{"hash":"<sha256 de 64 hex>","name":"agent-run.jsonl"}'
Cómo crear una clave →

Asistentes y MCP

Si el agente vive en un asistente o un editor

Claude Code, Gemini CLI, Cursor o ChatGPT no llevan cartera: trabajan con la cuenta de la persona que los usa. Sellat les llega como servidor MCP, como habilidad o como plugin, y el hash se calcula siempre en el dispositivo de la persona.

Servidor MCP abierto, en tu máquina

sellat-mcp corre en local, encuentra el archivo, calcula su hash y llama a la API con la clave de la cuenta. Una línea en Claude Code; Gemini CLI, Cursor y Claude Desktop en el README.

shell · Claude Code
claude mcp add sellat -e SELLAT_API_TOKEN=sellat_… -- npx -y sellat-mcp
sellat-mcp en GitHub →

Habilidad para agentes (Agent Skill)

Un archivo en el formato abierto de Agent Skills que enseña al agente cuándo sellar, qué demuestra la prueba y cómo pagar: con la clave de la cuenta o por llamada con x402. Sirve para Claude Code, Codex, Cursor, Gemini CLI y Copilot, entre otros.

shell
npx skills add skanthemore/sellat-cli --skill sellat
La habilidad en GitHub →

Sellar desde ChatGPT

El plugin de Sellat en el directorio de ChatGPT: la persona conecta su cuenta de Sellat, el archivo se calcula en el navegador y no sale de su dispositivo. Sin clave de API.

Sellar desde ChatGPT →

Un asistente sin cartera no paga por llamada: usa las pruebas de la cuenta a la que está conectado. Si el agente tiene su propia cartera, la habilidad le enseña a pagar con x402.

La respuesta

Qué recibe el agente

Todo lo que hace falta para defender el registro sin Sellat, en formatos abiertos.

proof_id
El identificador de la prueba. Sirve para consultarla, descargar sus documentos y añadirle más capas sin volver a calcular el hash.
state
queued mientras el lote está abierto; anchored cuando la raíz Merkle ya está en Polygon.
anchors
La transacción de Polygon que contiene la raíz del lote, con su bloque, su hora y el enlace al explorador.
bitcoin
La atestación OpenTimestamps de la misma raíz, que se completa cuando Bitcoin la confirma, horas después.
qualified
El sello de tiempo cualificado eIDAS: hora, número de serie, política y el .tsr descargable.
proof_json
La prueba portable (sellat-proof/2): hash, hoja, camino Merkle y anclajes. Pública, sin cuenta.
certificate
El certificado legible para personas, con su PDF.
evidence_zip
El paquete para guardar fuera de Sellat: certificado PDF, proof.json y el .ots de Bitcoin, con los comandos exactos para verificarlo todo.

Verificación independiente

Cualquiera puede comprobarla sin preguntar a Sellat

La verificación recalcula el hash, recorre el camino Merkle hasta la raíz y busca esa raíz en una transacción pública. Si Sellat desapareciera mañana, la prueba seguiría siendo verificable.

  1. 01

    La prueba portable contra el registro

    El verificador abierto recalcula todo en local y consulta un nodo público de Polygon.

    curl -o proof.json https://sellat.app/api/v2/proof/<proof_id>.json
    npx sellat-verify agent-run.jsonl proof.json
  2. 02

    El sello cualificado con OpenSSL

    El paquete de evidencias trae el .tsr y el certificado de la autoridad que lo firmó: OpenSSL lo valida sin conexión y sin Sellat.

    openssl ts -verify -in sello-cualificado-<id>.tsr -data agent-run.jsonl -CAfile autoridad-sellado.pem -partial_chain
  3. 03

    La atestación de Bitcoin

    El paquete incluye el .ots de la raíz del lote, que también va dentro de proof.json. El cliente estándar de OpenTimestamps lo comprueba contra tu nodo de Bitcoin; sin nodo, te dice qué bloque mirar en cualquier explorador.

    ots verify -d "$(jq -r .merkle.root proof.json)" anclaje-bitcoin.ots
    # sin nodo propio:
    ots --no-bitcoin verify -d "$(jq -r .merkle.root proof.json)" anclaje-bitcoin.ots
    # To verify manually, check that Bitcoin block … has merkleroot …

También en el navegador: la página de verificación comprueba un archivo contra su prueba sin subirlo. sellat.app/verify →

Registros a prueba de manipulación

Un log encadenado que sigue siendo tuyo

Para documentar una secuencia de pasos no hace falta sellar cada uno. Tu agente escribe su registro como siempre y añade a cada entrada el hash de la anterior. Cada cierto tiempo, o al terminar la tarea, sella solo el hash de la última entrada.

Esa prueba fija toda la cadena hasta ese punto: cambiar, quitar o reordenar una entrada anterior rompe los hashes que la siguen. Cuanto más a menudo se sella la cabeza, más corta es la ventana en la que alguien podría reescribir el registro antes de que quede fechado.

El registro, su formato y su contenido se quedan en tu sistema. Sellat no ve los pasos, no los monitoriza y no guarda nada más que la huella.

{"seq": 41, "prev": "3a7f…e2", "at": "2026-10-31T09:14:02Z", "tool": "crm.update", "input_sha256": "…", "output_sha256": "…"}
{"seq": 42, "prev": "sha256(línea 41)", "at": "2026-10-31T09:14:05Z", "decision": "close_deal", "evidence_sha256": "…"}
# al cerrar la tarea: POST /api/v2/proofs con el hash de la línea 42

El formato es el que tú elijas. Si sigues un estándar de registros de auditoría para agentes, la prueba lo fecha igual.

Precio por llamada

Sin cuenta, sin suscripción, en USDC

Precios con IVA incluido. Pagar acepta las condiciones de Sellat, cuya versión se guarda con cada pago.

Prueba
0.01 $ · Polygon en minutos y Bitcoin, con certificado, prueba portable y paquete de evidencias
Sello cualificado eIDAS
0.90 $ · token RFC 3161 sobre una prueba de tu cartera, en segundos
Leer, descargar y verificar
Gratis con la clave de solo lectura de la cartera; la verificación nunca necesita a Sellat

Red: Base. Token: USDC. La lista de precios en JSON está en GET /api/v2/x402.

Preguntas frecuentes

Antes de que lo preguntes.

¿Sellat certifica que mi agente hizo lo que dice el registro?

No. Sellat certifica la integridad y la existencia en el tiempo del registro: que esos bytes exactos existían en una fecha y no han cambiado. Que el agente ejecutara la acción, que el registro esté completo o que la decisión fuera correcta depende de quién y cómo lo escribió.

¿Tengo que enviar el log o los datos del agente?

No. Solo viaja el hash SHA-256. El registro, sus datos personales y sus secretos se quedan en tu sistema. Sellat no puede reconstruir el contenido a partir de la huella.

¿Hace falta cuenta o clave de API?

Con x402, no: la cartera que paga es la cuenta, y la primera prueba devuelve una clave de solo lectura. Si el agente trabaja para una cuenta de Sellat, puede usar su clave de API y no pagar por llamada.

¿Qué necesita el agente para pagar solo?

Un cliente x402 y una cartera con USDC en Base con un límite de gasto: los SDK oficiales de x402, Coinbase Agentic Wallets o AWS Bedrock AgentCore Payments, por ejemplo. Los asistentes de chat sin cartera no pueden pagar por su cuenta: para ellos está la clave de API o el conector de Sellat.

¿Cuánto tarda la prueba?

Una prueba pagada con x402 entra en el lote rápido y queda anclada en Polygon en minutos; la atestación de Bitcoin llega horas después. El sello cualificado se emite en segundos.

¿Cómo sello miles de pasos sin miles de llamadas?

Encadena las entradas en tu propio registro y sella la cabeza de la cadena cada cierto tiempo o al terminar la tarea. Una prueba fija todo lo anterior.

¿Funciona con cualquier modelo o framework?

Sí. Es una llamada HTTP con un hash: no depende del modelo, del framework ni de la plataforma donde corre el agente.

¿Qué pasa con la prueba si Sellat desaparece?

La prueba portable, el paquete de evidencias, la transacción de Polygon, la atestación de Bitcoin y el token cualificado se verifican con herramientas abiertas, sin Sellat.

Que el registro de tu agente no dependa solo de su palabra

Un hash, una llamada y una prueba que cualquiera puede comprobar.

Ver la llamada Referencia de la API →