Concepts
Plans & limits
Every workspace is on a plan. A plan decides what you can set up, how many requests a minute each key gets and how long prompts are kept. It never limits how many prompts you screen: past the decisions a plan includes, you pay a little per thousand, and no check is refused for volume.
What each plan includes
| No plan | Starter | Growth | Scale | |
|---|---|---|---|---|
| Decisions included a month | None | 100k | 1M | 5M |
| Live keys | Don't screen | Screen | Screen | Screen |
| Test checks a month | 1,000 | Unlimited | Unlimited | Unlimited |
| Policies | 1 | 1 | Unlimited | Unlimited |
| Rules | 2 | 2 | Unlimited | Unlimited |
| Reviewer seats | None | None | 10 | Unlimited |
| Prompts kept | 7 days | 7 days | 30 days | One year |
| Playground rows per run | 25 | 25 | 2,000 | 10,000 |
| Requests a minute per key | 60 | 600 | 1,200 | 3,000 |
Every plan starts with a 14-day free trial: card required, no charge until day 15. A trial has everything its plan has. Enterprise plans are set up with you directly; email hello@getvindex.com.
Without a plan
A new workspace has no plan until you start a trial. Its test keys screen, up to 1,000 checks a calendar month, dry runs included. Its live keys don't: a live check gets 402 plan_required, and nothing is screened or logged.
Start the trial in the dashboard under Settings, Plan & billing. Live keys screen from then on, within about two minutes.
Your plan, from the API
GET /v1/plan says which plan the workspace is on, its state, what the plan allows and how much of each count is used. Any key can read it.
curl https://api.getvindex.com/v1/plan -H "Authorization: Bearer $VINDEX_KEY"{
"plan": "starter",
"name": "Starter",
"state": "active",
"trial_ends_at": null,
"pauses_at": null,
"ended_at": null,
"cancels_at": null,
"limits": {
"included_decisions": 100000,
"policies": 1,
"rules": 2,
"reviewer_seats": 0,
"retention_days": 7,
"playground_bulk_rows": 25,
"rate_limit_per_minute": 600,
"live_checks": true,
"test_checks_per_month": null
},
"usage": { "policies": 1, "rules": 2, "reviewer_seats": 0, "test_checks_this_month": 140 },
"upgrade_url": "https://app.getvindex.com/settings#billing"
}null means unlimited. state is one of:
state | What it means |
|---|---|
none | No plan yet: test keys only |
trialing | The whole plan, free until trial_ends_at |
active | The whole plan. With cancels_at, until then |
past_due | A payment failed and is being retried. Everything works until pauses_at |
paused | Still unpaid 14 days on: checks answer 402 subscription_paused |
inactive | The plan has ended: read-only |
The last three are on When a payment fails.
When something isn't on your plan
Adding one more than the plan allows gets 402 plan_required, and nothing is created. The problem says which limit, how many are allowed and used, and where to change plans:
{
"type": "https://api.getvindex.com/problems/plan_required",
"title": "Plan required",
"status": 402,
"detail": "Starter includes one policy, and this workspace already has one. Growth has unlimited policies.",
"code": "plan_required",
"upgrade_url": "https://app.getvindex.com/settings#billing",
"plan": "starter",
"state": "active",
"limit": "policies",
"allowed": 1,
"used": 1
}What counts:
- Policies: every policy in the workspace. New versions of a policy don't count.
- Rules: every rule, on or off.
- Reviewer seats: members with the reviewer role, plus reviewer invites not yet accepted. Owners and admins don't take a seat, and on a plan without seats they work the review queue themselves.
Moving to a smaller plan keeps what you already have: your policies, rules and reviewers keep working. You just can't add more until you're under the new plan's count. The dashboard says so where you'd add one, instead of offering a button that would fail.
Rate limits
Each API key gets its plan's requests a minute, over a sliding window. X-RateLimit-Limit on every /v1 response shows the number, and Rate limits & errors says what to do on a 429. The dashboard's own requests have a separate limit, so a busy key doesn't slow the dashboard down.
How long prompts are kept
Once a day, at 03:30 UTC, Vindex deletes the text of every decision older than your plan keeps:
- the
prompt,negative_prompt,contextandmetadata; - a reviewer's note on its review item, and any note on a false-positive report.
The decision itself stays: its outcome, scores, signals, tags, policy version, user id and time. Your usage, charts, replays and rules that count blocks per user don't change. A deleted prompt reads as a placeholder with prompt_purged: true:
{
"id": "dec_3f2a0c9e8b7d4c6a9f1e2d3c4b5a6978",
"outcome": "review",
"input": { "prompt": "[prompt deleted: older than the plan keeps]" },
"prompt_purged": true,
"metadata": null
}A workspace whose plan has ended keeps that plan's retention. Data handling covers what a decision stores.
Test and live data
Test and live are apart. A key reads its own mode's data only: a test key never sees a live decision, review item or usage, and a live key never sees a test one. Asking for the other mode (?mode=live with a test key) gets 403 mode_forbidden, and the other mode's decision id is a 404. In the dashboard, the Live/Test switch decides which you see. API keys & modes has the rest.