Docs / API reference - Stable

GET /v1/consultations/{id}

Fetch le record gelé d'une consultation passée.

Chaque /check et /resolve écrit un Consultation (cns-). Cet endpoint le lit back, exactement tel qu'il était au moment de décision.

Requête

GET /tnt-acme/v1/consultations/cns-abc123
X-API-Key: ak-live-...

Réponse

{
  "id": "cns-abc123",
  "tenant_id": "tnt-acme",
  "caller_principal_id": "agn-rm-copilot",
  "on_behalf_of": "hum-marie",
  "on_behalf_of_authenticated": false,
  "requested_at": "2026-08-14T09:12:33Z",
  "action": "refund.execute",
  "resource": "TX-456",
  "scope_used": {
    "product_type": "customer_refund",
    "channel": "in_app"
  },
  "parameters": {
    "amount_eur": 40,
    "reason": "duplicate_charge"
  },
  "context_hash": "sha256:9f2c...",
  "context_snapshot": {
    "client.id": { "value": "cli-9f2c", "source": "crm" }
  },
  "cited_entry_ids": ["rul-refund-under-100"],
  "cited_rule_version_ids": ["rv-abc"],
  "dominating_rule_id": "rul-refund-under-100",
  "precedence_trace": [...],
  "resolved_target_ids": ["tgt-agents-refund-team"],
  "verdict": "allowed",
  "signed_verdict": "eyJ...",
  "signing_kid": "tnt-acme:2026-01",
  "signing_epoch": "2026-01",
  "verdict_ttl_seconds": 60,
  "expired_at": "2026-08-14T09:13:33Z",
  "required_context_history": [],
  "normative_hash": "sha256:a3c8..."
}

Champs clés :

  • cited_rule_version_ids - les snapshots RuleVersion immuables pinnés. Fetch-les pour voir le texte de règle exact de ce jour.
  • precedence_trace - la liste candidate complète et le trail de tie-break.
  • context_snapshot - l'enveloppe de contexte entière telle que soumise (accumulation post-fetcher pour /resolve).
  • normative_hash - hash de l'état gelé ; vérifier que le record n'a pas été tampered.
  • signed_verdict - le JWS de cet appel, vérifiable contre JWKS.

Playbook régulateur

« Montrez-moi la décision sur ce cas. »

GET /v1/consultations/cns-abc123

« Montrez-moi le texte de règle qui s'appliquait. »

GET /v1/rule-versions/rv-abc

La réponse RuleVersion inclut le statement exact, les rows de condition, la severity, et la metadata de ce jour.

« Montrez-moi pourquoi cette règle a gagné et pas cette autre similaire. »

Regardez precedence_trace dans la consultation. Il enregistre chaque règle candidate considérée, la qualité du scope match, et le champ de tie-break qui a décidé.

« Prouvez que le record n'a pas été modifié. »

Recompute le normative_hash depuis les champs du record et compare. Ou vérifiez le signed_verdict contre le JWKS archivé au signing_kid.

Endpoint list

GET /tnt-acme/v1/consultations?actor=agn-rm-copilot&since=2026-08-01&verdict=blocked&limit=100

Query parameters :

  • actor - filtrer par caller principal.
  • since / until - bornes de date ISO 8601.
  • action - filtrer par nom d'action.
  • verdict - allowed, blocked, approval_required.
  • dominating_rule_id - toutes consultations où cette règle était dominante.
  • limit (défaut 50, max 1000).
  • cursor - curseur de pagination opaque.

Réponse :

{
  "items": [ ... ],
  "next_cursor": "eyJ..."
}

Erreurs

StatusCodeSignification
404consultation_not_foundID n'existe pas dans ce tenant
403cross_tenant_forbiddenLa consultation appartient à un tenant différent

Related