Compliance & Governance

Policy engine

The deployer policy is the centrepiece of every Meridian Blue tenant. It declares which models are eligible, which purposes are allowed, what the safety-score floor is, and which signers stand behind those decisions. The router enforces the policy fail-closed and cites the version on every refusal.

Policy API

MethodPathPurpose
GET/api/v1/policiesList policies for the tenant.
GET/api/v1/policies/activeFetch the currently-active policy + its signature.
POST/api/v1/policiesPublish a new policy version (admin / owner only).
POST/api/v1/policies/:id/signAdd a signer to a draft policy.
GET/api/v1/policies/:id/historyVersion history with signer + sign-time.

Templates

Built-in templates make it cheap to start: internal_productivity, customer_support, eu_bank (DORA-aligned), healthcare (MDR-aligned), law_enforcement. Each template ships with a sensible log_level, retention window, and risk-tier defaults. Pick one, then customise.

Evaluation order

  1. Risk classification (Article 5 prohibited / Annex III high).
  2. Provider whitelist gate (model is from an allowed provider).
  3. Free-tier vs paid model access gate.
  4. Maximum chain length cap.
  5. Minimum safety score filter (S13.4).
  6. Required-fields gate (high-risk → purpose + user_consent_id).

Policy attribution

Every refusal carries policy_attribution in the error body — the signed policy version that demanded the refusal and the signer identities. This is what your legal team takes to a regulator if the refusal is ever questioned.

JSON
{
  "error": { "code": "policy_safety_filter_empty", /* ... */ },
  "policy_attribution": {
    "policy_id": "6531a9...",
    "policy_version": 42,
    "signed_by": ["[email protected]", "[email protected]"],
    "signature": "sha256:...",
    "effective_date": "2026-04-01T00:00:00.000Z"
  }
}

minimum_safety_score

Setting minimum_safety_score on the policy filters the routing pool to models whose declared safety score (from the GPAI evaluation registry) is at or above the threshold. Models without a registry entry are removed too — fail-closed. If the filter empties the chain entirely, the request is rejected with 403 policy_safety_filter_empty.