Skip to main content

Plans & Feature Gates

Adjudon's plans are not feature checklists. They are a single function from Organization.billing.plan to a set of permitted endpoints, enforced server-side by one middleware (requireFeature(<featureName>)) that returns 403 UPGRADE_REQUIRED with a structured payload listing the current plan, the required plans, and the feature name. The dashboard reads the same gates client-side to grey out the matching UI; the API enforces them regardless. There is no client that can bypass the gate by calling the API directly.

This page lists every gate, what plan unlocks it, why the line sits where it sits, and what happens when a gate fires. The billing-side mechanics — how plans change, how overage meters, how Sandbox is stripe-less — live at Billing API.

The five plans

   ┌─────────────────────────────────────────────────────────┐
│ Sandbox → Scale → Governance │
│ ↓ ↓ │
│ hard-block → Enterprise → Custom │
│ at 10K traces │
└─────────────────────────────────────────────────────────┘
PlanTrace limit / monthSLAPosture
Sandbox10,000 (hard block)best-effortSolo developers, prototyping
Scale100,000 + €0.003/overage99.9 %Early-stage teams
Governance500,000 + €0.001/overage99.9 %Mid-market compliance
Enterprise2,000,000 + €0.0005/overage99.99 % (roadmap)DACH banks, large deployers
Customunlimited99.99 % (roadmap)On-prem / private cloud

Sandbox is the only plan that hard-blocks at the limit. Scale, Governance, and Enterprise meter overage to Stripe and never reject a trace on usage grounds. Custom carries no published limit by contract.

The 23 feature gates

Every gate has the same shape: a constant in backend/middleware/requirePlan.js:FEATURE_GATES mapping a feature name to the array of plan keys allowed to use it. Read the gate list as the contract; the marketing tier names below are the shorthand.

Scale and above (10 features)

The Scale tier is the smallest paid plan. These features unlock at Scale and stay available on every paid plan above it.

GateWhat it covers
webhooksOutbound webhook subscriptions, signature verification, retry queue
slackAlertsThe full Alerts API and the alert.triggered webhook event
exportCSV / JSON export from any list endpoint
auditLogThe Operations Audit Log read API
orgLogoCustom logo upload for branded PDF exports and dashboard chrome
memorySearchSemantic similarity search over the customer's own trace memory
mcpServerThe MCP Servers API for agent-tool registration

Governance and above (8 features)

Governance is the inflection point: this is where the audit artefact starts becoming primary evidence rather than supplementary.

GateWhat it covers
customRetentionPer-org data-retention setting (default 90 days; up to 365)
scheduledReportsRecurring PDF / CSV report jobs
ssoOIDC + SAML 2.0 single sign-on
hashChainAuditThe Decision Hash Chain anchor and verification API
complianceMappingThe ISO 42001 / EU AI Act per-clause mapping artefact
multiClockIncidentsThe Multi-Clock Hub (5 regulator clocks per incident)
art26DeployerPackEU AI Act Art. 26 deployer-compliance evidence bundle
friaWizardThe FRIA Wizard and approval workflow
mlBomCycloneDX 1.7 ML-BOM auto-attach per trace
provOExportW3C PROV-O export format for evidence chains

Enterprise and above (8 features)

Enterprise is where the gate flips on the features that only matter at deployer scale — ML-BOM exhaustiveness, GPAI disclosures, deeper attestations.

GateWhat it covers
auditLogPdfAudit-grade PDF export of the operations log
decisionMiningPattern discovery over historical reviewer decisions
scimSCIM 2.0 user provisioning (Okta / Azure AD / OneLogin)
cpiFeedbackIngestCompliance Performance Index feedback loops
iso42001PdfAudit-grade ISO 42001 PDF export
autoApprovalEngineThe Auto-Approval Engine
c2paContentCredentialsC2PA Content Credentials sealing
gpaiPackEU AI Act General-Purpose AI obligations evidence pack
privacyBudgetDifferential-privacy budget tracking on federated learning
sigstoreEvidenceSigstore-anchored release evidence

Custom only (3 features)

A small set of features lives on Custom plans only because they require dedicated infrastructure.

GateWhat it covers
federatedLearningThe Federated Learning split-architecture
teeAttestationTrusted-Execution-Environment attestation chain

The teeAttestation gate, in particular, requires deployment on a TEE-capable host; Custom is what the contract negotiates the hardware around.

What a gate fires when it triggers

Every requireFeature middleware fires the same response on a plan mismatch:

{
"success": false,
"error": "The feature 'autoApprovalEngine' is not available on your current plan (scale). Please upgrade to access this feature.",
"code": "UPGRADE_REQUIRED",
"data": {
"currentPlan": "scale",
"requiredPlans": ["enterprise", "custom"],
"feature": "autoApprovalEngine"
}
}

The code is always UPGRADE_REQUIRED. The data envelope is machine-readable; dashboards drive their upgrade-prompt UI off requiredPlans and the dashboard's Billing page handles the upgrade flow itself. Hand-rolled clients should treat the code as the contract and the message as log-only.

Where gates live in the request lifecycle

   ┌─────────────────────────────────────────────────────────┐
│ Request │
│ ↓ │
│ apiLimiter (IP) │
│ ↓ │
│ requireApiKey / protect (auth) │
│ ↓ │
│ requireFeature('hashChainAudit') ← plan gate │
│ ↓ │
│ userApiLimiter / agentRateLimit │
│ ↓ │
│ controller │
└─────────────────────────────────────────────────────────┘

The plan gate runs after auth so that an unauthenticated request returns 401 UNAUTHORIZED, not 403 UPGRADE_REQUIRED. The asymmetry is deliberate: returning a plan-gate error to an anonymous caller would leak the org's plan tier through the exception path. The same logic applies to feature names that do not exist — an unknown featureName returns 403 UNKNOWN_FEATURE rather than silently falling through, so a typo in a requireFeature('autoaprovalEngine') (sic) call is caught loudly rather than letting the request through on every plan.

Rate limiters run after the plan gate, not before it. This is also deliberate: a Sandbox plan that hammers a Governance-only endpoint should burn its rate-limit budget exactly once and then receive a clear 403 UPGRADE_REQUIRED, not be silently throttled into exhaustion before learning the actual reason. Each layer answers its own question.

What this is NOT

  • Not a per-feature pricing matrix. Plans bundle features by what the deployer profile asks for, not à la carte. The marketing tier names are stable; the gate list above is the contract. If you need a single Enterprise feature on a Governance plan, the conversation is a Custom plan, not a feature-pack.
  • Not editable client-side. The dashboard reads the gates to decide what to render, but the source of truth is server-side. An attacker bypassing the dashboard hits the same 403 UPGRADE_REQUIRED on the API.
  • Not a permission system. Feature gates are about plan tier; per-user permissions are the role system (owner, admin, member, reviewer). A Sandbox owner cannot access webhooks; a Scale member with reviewer role can resolve the Review Queue on a tier where webhooks are also unlocked. The two layers stack.
  • Not a dynamic catalogue. New features land in a deploy with a FEATURE_GATES entry; there is no runtime config that flip-toggles them per-org. Beta features are mounted on the same gate as their launch tier; cancellations are explicit deprecations on the Versioning page.

Regulator mapping

Regulator surfaceWhat this concept satisfies
EU AI Act Art. 26Deployer obligations — the art26DeployerPack gate is what unlocks the deployer-compliance evidence bundle
EU AI Act Art. 27FRIA — gated by friaWizard (Governance+)
EU AI Act Art. 13Transparency — the underlying Decision Hash Chain is gated by hashChainAudit (Governance+)
ISO 42001Per-clause mapping gated by complianceMapping (Governance+); audit-grade PDF gated by iso42001Pdf (Enterprise+)
BaFin MaRiskDACH-bank deployers map to Enterprise + Custom; the SCIM, autoApprovalEngine, and gpaiPack gates correspond to the controls auditors expect at this tier

See also

  • Billing API — the Stripe facade that drives plan changes
  • Usage API — the trace-count meter that interacts with the per-plan trace limits
  • Performance & SLOs — the uptime SLA differences between plans
  • Versioning — the deprecation policy that protects feature gates across releases
  • Error Codes — the UPGRADE_REQUIRED code in the broader taxonomy