DecimalAI plan tiers — Free, Core, Pro, Enterprise — with quotas, rate limits, and Skills Registry features.
DecimalAI is free to start. You pay only when you exceed the Free tier’s monthly quotas or need a higher-tier feature.For the customer-facing version with current dollar amounts, see decimal.ai/pricing. This page is the source of truth for what each plan technically allows — quotas, rate limits, gated features, and enforcement behavior.
The skills layer — registry browse, install, smart routing, and observability — is the wedge feature; Free is generous on purpose. Capabilities gated to paid tiers focus on publishing, analytics, and team workflow.
Capability
Free
Core
Pro
Enterprise
Browse public registry (no signup)
✓
✓
✓
✓
decimalai skills pull <slug> — read a skill, no auth
Gating behavior — part soft, part hard. Three capabilities already enforce hard: Skill audit log (Pro+), per-agent skill bundle assignment (Pro+ — scope=agent; workspace-wide Use stays on every tier) and call replay in mode=real (Core+, on POST /api/v1/regression-check/{id}/call-replay). Below the required plan those return 402 Payment Required with error: "feature_not_available". The rest — publishing to the public registry, analytics/compare and analytics/leaderboard — are still soft-warn: the call succeeds and the response carries an X-Plan-Upgrade-Required: core header so you can see what your team needs before upgrading. Further cutovers to hard 402 enforcement will be announced in the changelog.
When you hit a limit, responses return 429 Too Many Requests with a Retry-After header. The SDK respects this automatically; see Errors for direct-API behavior.
Quotas are enforced per resource, not as a single bucket:
Resource
Checked at
On-limit response
Special rules
Traces ingested
Every POST /api/v1/traces (and POST /traces/batch)
429 with detail: "limit_exceeded"
Imported traces count the same as live ingest (see Quota for backfills below)
SFT rows built
POST /api/v1/datasets/{id}/build
Build rejected pre-flight
Rejected before any work runs if the build would exceed your quota
LLM-judge calls
Every LLM-judge evaluator run
LLM-judge checks silently skipped
Deterministic checks still run after the budget hits zero
Regression checks
POST /api/v1/regression-check
429 with detail: "limit_exceeded"
Checked pre-flight, before any analysis runs; the counter only increments on a check that succeeds. dry_run=true is free
Skills in org
Create/install time — POST /api/v1/skills and POST /api/v1/registry/skills/{id}/fork
402 Payment Required with an upgrade link
Existing over-cap orgs are grandfathered; the cap blocks new creates only
Benchmark cases
When you trigger a hosted run (pre-authorized)
Run blocked unless enough cases are available
Errored cases are refunded; granularity-neutral.
What counts (and what doesn't)
One metered case = one eval case executed on the hosted runner (both A/B arms + judge included). It is pre-authorized when you trigger a run — a 50-case suite needs 50 available cases — and errored cases are refunded (an LLM outage mid-run doesn’t consume quota). Granularity-neutral by design: one 50-case run costs the same as ten 5-case runs. Three things never touch this meter: local runs (the open-source runner executes on your own API key), pushing local results (a JSON upload), and the verification run triggered by publishing (free by design — publishing never competes with your quota).
Monthly quotas reset on the first of each calendar month (UTC).
Quota for backfills. Imported traces (via POST /api/v1/traces/import-bulk) count against traces_ingested at the same rate as live ingest — a backfill of 10k traces costs 10k. Plan for that before a large migration, and contact support first for one-time backfills; we routinely grant temporary bumps.