VindexDocs

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 planStarterGrowthScale
Decisions included a monthNone100k1M5M
Live keysDon't screenScreenScreenScreen
Test checks a month1,000UnlimitedUnlimitedUnlimited
Policies11UnlimitedUnlimited
Rules22UnlimitedUnlimited
Reviewer seatsNoneNone10Unlimited
Prompts kept7 days7 days30 daysOne year
Playground rows per run25252,00010,000
Requests a minute per key606001,2003,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.

Shell
curl https://api.getvindex.com/v1/plan -H "Authorization: Bearer $VINDEX_KEY"
Response
{
  "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:

stateWhat it means
noneNo plan yet: test keys only
trialingThe whole plan, free until trial_ends_at
activeThe whole plan. With cancels_at, until then
past_dueA payment failed and is being retried. Everything works until pauses_at
pausedStill unpaid 14 days on: checks answer 402 subscription_paused
inactiveThe 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:

402 plan_required
{
  "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, context and metadata;
  • 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:

GET /v1/decisions/{id}
{
  "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.