StructureClerk

API REST v1

Ejecute evaluaciones de cumplimiento de nivel CISO y análisis pasivos de sitios desde sus propias herramientas, canalizaciones de integración o productos. Todos los puntos de entrada responden en JSON.

Autenticación

Cree una clave en Panel, claves de API (se requiere cuenta gratuita, 10 claves activas como máximo) y envíela como token Bearer. Una clave se muestra una sola vez al crearla y se almacena como hash. Cada clave tiene un límite por minuto; superarlo devuelve 429.

Authorization: Bearer sk_sc_...

POST /api/v1/assess

Alcance: assess. Sin answers, devuelve el banco de preguntas de los dominios solicitados. Con answers, devuelve puntuaciones, calificaciones, desglose por categoría, recomendaciones de experto y leyes aplicables.

curl -X POST https://structureclerk.ca/api/v1/assess \
  -H "Authorization: Bearer sk_sc_..." \
  -H "Content-Type: application/json" \
  -d '{
    "domains": ["data_protection", "cybersecurity"],
    "jurisdictions": ["CA_QC", "EU"],
    "answers": {
      "data_protection": { "dp_1": true, "dp_2": "partial" }
    }
  }'
{
  "overallScore": 62,
  "grade": "B-",
  "domains": {
    "data_protection": {
      "score": 62,
      "answeredQuestions": 2,
      "categoryScores": { "...": { "percentage": 50 } },
      "topRecommendations": [
        {
          "questionId": "dp_2",
          "title": "…",
          "advice": "…",
          "quickWin": "…",
          "effort": "medium",
          "impact": "high",
          "timeline": "30 jours"
        }
      ]
    }
  },
  "applicableLaws": [
    { "jurisdiction": "Québec", "law": "Loi 25", "domain": "data_protection" }
  ]
}

POST /api/v1/scan

Alcance: scan. Análisis pasivo de cumplimiento de un sitio: HTTPS, detección de política de privacidad, aviso de cookies, cabeceras de seguridad HTTP, datos de contacto. Solo páginas públicas, sin intrusión, sin pruebas activas.

curl -X POST https://structureclerk.ca/api/v1/scan \
  -H "Authorization: Bearer sk_sc_..." \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://www.example.com" }'
{
  "url": "https://www.example.com",
  "overallScore": 75,
  "checks": {
    "https": { "passed": true, "details": "…" },
    "privacyPolicy": { "found": true, "url": "…", "details": "…" },
    "cookieBanner": { "detected": false, "details": "…" },
    "securityHeaders": { "score": 57, "headers": { "…": {} }, "details": "…" },
    "contactInfo": { "found": true, "details": "…" }
  },
  "recommendations": ["…"]
}

Gestión de claves

Puntos de entrada autenticados por sesión (navegador), detrás de la interfaz del panel:

  • GET /api/v1/keys · listar sus claves (solo prefijos)
  • POST /api/v1/keys · crear una clave ({ "name": "...", "scopes": ["assess","scan","authority"] })
  • DELETE /api/v1/keys/:id · desactivar una clave

Puntos de entrada gratuitos

Públicos, sin clave, sin crédito. Se publicaron sin documentarse aquí, lo que equivale a no haberlos publicado.

  • GET /api/v1/pricing · la tarifa en vivo: coste en créditos por punto de entrada, recargas, franquicia diaria. Legible por máquina, y la fuente que lee esta documentación.
  • GET /api/v1/authority/verify/:evidence_id · verificar la firma Ed25519 de una decisión. Gratuito y sin cuenta, de forma permanente.
  • GET /api/v1/authority/verify/anchors · los anclajes publicados del registro encadenado de decisiones, para comprobación por terceros.
  • GET /api/v1/authority/stats · recuentos agregados de decisiones. Sin contenido de decisión, sin identificadores.

Créditos y franquicia gratuita

Los puntos de entrada de pago se miden en créditos prepagados, consumiendo primero la franquicia diaria. Los rechazos siguientes son los que recibirá realmente; el orden completo de resolución, los precios y las cabeceras de respuesta están en la página de Facturación.

Errores

EstadoCódigoSignificado
401unauthorized / invalid_api_keyClave ausente, inválida o caducada
403forbiddenLa clave carece del alcance requerido
429rate_limitedLímite por clave y por minuto superado
403insufficient_scopeClave válida, alcance incorrecto. El cuerpo nombra el alcance requerido y los alcances concedidos.
429free_tier_exhaustedLlamante anónimo más allá de la franquicia diaria. Use una clave o recargue.
402insufficient_creditsSaldo demasiado bajo. El cuerpo lleva el saldo, el importe requerido y una URL de recarga.
503metering_unavailableContador de uso inalcanzable. Las llamadas anónimas se rechazan; los titulares de clave se atienden y se cobran directamente.
413Request too largeCuerpo por encima del límite del punto de entrada, medido y no declarado.
400invalid_inputCuerpo mal formado: consulte el campo message