{
  "@context": "https://pulseids.com/.well-known/pulseid-verify",
  "name": "PulseID",
  "description": "PulseID emite identidad fisiológica certificable (Patente P202531243): cada certificado prueba, sin exponer datos biométricos crudos, que un dispositivo registrado midió coherencia fisiológica real en un momento dado, opcionalmente anclada en Bitcoin y con soporte de prueba de conocimiento cero.",
  "website": "https://pulseids.com",
  "human_docs": "https://pulseids.com/agentes",
  "how_to_use_this_endpoint": "Llama a este mismo endpoint con ?ref=<identificador>. Detecta automáticamente el tipo de identificador por su formato y hace de proxy hacia el verificador real correspondiente — no necesitas saber de antemano cuál de los 3 tipos es.",
  "example": "https://pulseids.com/.well-known/pulseid-verify?ref=<identificador>",
  "identifier_types": [
    {
      "type": "certificate_id",
      "aka": "ZK-BP certificate id",
      "format": "16 caracteres hexadecimales",
      "example": "a1b2c3d4e5f6a7b8",
      "description": "Identifica un certificado emitido por el hub beta de PulseID. Permite verificar una prueba de conocimiento cero (ZK-BP, Pedersen + Sigma sobre secp256k1) de que la coherencia fisiológica de la sesión superó el umbral exigido, sin revelar el valor real.",
      "real_endpoint": {
        "method": "GET",
        "url": "https://pulseids.com/api/zkbp-verify?cert=<certificate_id>"
      }
    },
    {
      "type": "seal_hash",
      "aka": "sello SHA-256",
      "format": "64 caracteres hexadecimales",
      "example": "0790e50fabad2b9b6df98dedbca01234751a829ebc7b656bd66abe224bf2e68a",
      "description": "Hash SHA-256 de un sello individual del hub beta — el identificador que codifica el QR de un certificado. Confirma existencia del sello en base de datos (emisor, fecha, programa de cumplimiento).",
      "real_endpoint": {
        "method": "GET",
        "url": "https://pulseids.com/api/verify?s=<seal_hash>"
      }
    },
    {
      "type": "proof_ref",
      "aka": "referencia de evento certificado",
      "format": "cadena alfanumérica (con guiones/guiones bajos permitidos), 3-128 caracteres, sin puntos — ni 16 ni 64 hex",
      "example": "ab12cd34ef56",
      "description": "Referencia de un evento certificado completo. Revalida en cada petición el hash del payload y la firma HMAC-SHA256, y devuelve una vista pública con banderas explícitas de qué datos se exponen.",
      "real_endpoint": {
        "method": "GET",
        "url": "https://pulseids.com/api/verify-proof?proof_ref=<proof_ref>"
      }
    }
  ],
  "other_verification_surfaces": [
    {
      "name": "Bitcoin anchoring (OpenTimestamps)",
      "endpoint": "GET https://pulseids.com/api/ots-verify?seal=<certificate_id>",
      "description": "Estado de anclaje en Bitcoin de un certificate_id — si el hash de la sesión llegó a incluirse en un bloque de Bitcoin. No está cubierto por el auto-detector de ?ref= de este manifiesto porque comparte formato (16 hex) con certificate_id de ZK-BP; llámalo directamente si buscas específicamente el anclaje Bitcoin."
    }
  ],
  "mcp": {
    "endpoint": "https://pulseids.com/mcp",
    "transport": "streamable-http",
    "status": "v0 — solo lectura, gratuito, con límite de uso por IP",
    "tools": [
      "verify_presence"
    ],
    "description": "La misma superficie de verificación de este manifiesto, expuesta como herramienta MCP (JSON-RPC 2.0 por POST). Autodetecta el tipo de identificador igual que ?ref=."
  },
  "llms_txt": "https://pulseids.com/llms.txt",
  "openapi": "https://pulseids.com/agents-openapi.json",
  "agent_docs": "https://pulseids.com/agentes",
  "pricing_preview": {
    "status": "PREVISIÓN — hoy toda la verificación de este manifiesto es gratuita. Los sellos de pago (con recibo firmado verificable offline) no están activos todavía; precios orientativos y sujetos a cambio.",
    "planned_seals": [
      {
        "seal": "PRESENCIA",
        "question": "¿había presencia coherente en el momento T?",
        "anchor_eur": 0.05,
        "operator_device_required": "ninguno para consultar — se verifica evidencia ya sellada"
      },
      {
        "seal": "CONTINUIDAD",
        "question": "¿sigue presente ahora, y desde cuándo?",
        "anchor_eur": 0.15,
        "operator_device_required": "cualquier pulsómetro BLE (banda, Polar, reloj)",
        "scope_note": "La ventana es INTRASESIÓN si el operador no usa un reloj enrolado: el identificador de un dispositivo BLE genérico es efímero por conexión, así que se puede atestar \"presente desde hace N minutos\" pero no continuidad entre sesiones distintas."
      },
      {
        "seal": "AUTORIZACION",
        "question": "¿autorizó esta acción concreta con su dispositivo?",
        "anchor_eur": 0.5,
        "operator_device_required": "reloj inteligente enrolado, obligatorio",
        "scope_note": "Sin reloj enrolado no hay camino alternativo: la respuesta será operator_not_enrolled. Una banda BLE no puede producir este sello."
      }
    ],
    "audit_variant": "cada sello tendrá variante +AUDIT (evidencia ampliada: anclaje Bitcoin y rastro de accesos) a precio propio",
    "negotiation": "precio final negociable máquina-a-máquina dentro de límites publicados, vía herramienta quote (no activa aún)"
  },
  "agent_fit": {
    "how_to_use": "Cruza `necesidad` (qué quieres saber) con `operator_device` (qué lleva encima la persona) en `outcomes`. `usage_tier` depende solo de tu volumen. La versión para humanos de esta misma tabla es el formulario de https://pulseids.com/agentes",
    "questions": {
      "necesidad": {
        "presencia": "hubo alguien presente en un momento dado",
        "continuidad": "sigue habiendo alguien presente ahora",
        "autorizacion": "alguien aprobó esta acción concreta"
      },
      "operator_device": {
        "ninguno": "solo verifico evidencia que genera otra parte",
        "ble": "pulsómetro BLE (banda, Polar o similar)",
        "reloj": "reloj inteligente enrolado"
      },
      "usage_tier": {
        "evaluar": "Descubierta",
        "produccion": "Operativa",
        "plataforma": "Plataforma"
      }
    },
    "outcomes": [
      {
        "necesidad": "presencia",
        "operator_device": "ninguno",
        "seal": "PRESENCIA",
        "available_today": true,
        "blocked_by": null,
        "note": "Puedes verificar evidencia de terceros hoy mismo, gratis. Tus propios operadores no pueden generarla sin al menos un pulsómetro BLE."
      },
      {
        "necesidad": "presencia",
        "operator_device": "ble",
        "seal": "PRESENCIA",
        "available_today": true,
        "blocked_by": null,
        "note": "Operativo hoy. Tus operadores pueden además generar evidencia con el dispositivo que ya tienen."
      },
      {
        "necesidad": "presencia",
        "operator_device": "reloj",
        "seal": "PRESENCIA",
        "available_today": true,
        "blocked_by": null,
        "note": "Operativo hoy. Tus operadores pueden además generar evidencia con el dispositivo que ya tienen."
      },
      {
        "necesidad": "continuidad",
        "operator_device": "ninguno",
        "seal": "CONTINUIDAD",
        "available_today": false,
        "blocked_by": "sin_dispositivo",
        "note": "Saber si alguien sigue presente exige un sensor midiendo: hace falta al menos un pulsómetro BLE."
      },
      {
        "necesidad": "continuidad",
        "operator_device": "ble",
        "seal": "CONTINUIDAD",
        "available_today": false,
        "blocked_by": null,
        "note": "Encaja, pero la ventana es INTRASESIÓN: el identificador de un BLE genérico es efímero por conexión. Exige consentimiento del titular mediante enlace con alcance."
      },
      {
        "necesidad": "continuidad",
        "operator_device": "reloj",
        "seal": "CONTINUIDAD",
        "available_today": false,
        "blocked_by": null,
        "note": "Encaja, y con reloj enrolado la continuidad se sostiene entre sesiones. Exige consentimiento del titular mediante enlace con alcance."
      },
      {
        "necesidad": "autorizacion",
        "operator_device": "ninguno",
        "seal": "AUTORIZACION",
        "available_today": false,
        "blocked_by": "operator_not_enrolled",
        "note": "Sin reloj enrolado no hay camino alternativo. La opción honesta es PRESENCIA, que responde una pregunta más débil."
      },
      {
        "necesidad": "autorizacion",
        "operator_device": "ble",
        "seal": "AUTORIZACION",
        "available_today": false,
        "blocked_by": "operator_not_enrolled",
        "note": "Una banda BLE no puede producir este sello. La opción honesta es PRESENCIA, que responde una pregunta más débil."
      },
      {
        "necesidad": "autorizacion",
        "operator_device": "reloj",
        "seal": "AUTORIZACION",
        "available_today": false,
        "blocked_by": null,
        "note": "Encaja: es el único dispositivo con el que este sello puede emitirse. Confirmación presencial en ventana corta, recibo de un solo uso."
      }
    ],
    "today": "Lo ÚNICO operativo hoy es la verificación de evidencia ya emitida (este manifiesto, /mcp y los endpoints REST): gratuita, sin clave, con límite por origen. Ningún sello bajo demanda está activo."
  },
  "notes": [
    "Todos los endpoints son públicos, de solo lectura, sin API key, y devuelven JSON.",
    "Los identificadores son anónimos y no contienen datos personales ni fisiológicos crudos.",
    "CORS abierto (Access-Control-Allow-Origin: *) en todos los endpoints mencionados."
  ]
}