Concepts
Review queue
Some prompts shouldn't be decided by a line alone. When a decision's outcome is review, it goes to a queue for a person to rule on.
What lands in it
Every decision with outcome: "review" opens one review item, with two exceptions:
- a dry run, which never opens one;
- a check made while the workspace is in shadow mode.
Decisions made with test keys open items too, marked mode: "test", so you can try the whole flow before going live. The decision's actions.review_id names its item.
Ruling on an item
Open items are oldest first, in the dashboard under Review or through the API. Each carries the decision's input and scores, so a reviewer can rule without looking anything else up.
There are three verdicts:
allow: fine, go ahead.block: not fine.dismiss: close it without a ruling, for a duplicate or a test.
A verdict can carry a note of up to 2,000 characters, and an item takes one verdict only. A second attempt gets 409 already_decided.
# Open items, oldest first
curl "https://api.getvindex.com/v1/review?status=open&limit=20" \
-H "Authorization: Bearer $VINDEX_KEY"
# Rule on one
curl -X POST "https://api.getvindex.com/v1/review/$REVIEW_ID/verdict" \
-H "Authorization: Bearer $VINDEX_KEY" \
-H "Content-Type: application/json" \
-d '{"verdict": "allow", "note": "historical photo, fine"}'{
"id": "rev_b518334420eb45edb2508efe2f9a697d",
"status": "allowed",
"created_at": "2026-09-17T09:02:29.255Z",
"decision": {
"id": "dec_f29c8d657b7b453baf27e2fa54497b3a",
"outcome": "review",
"tags": [],
"policy": {
"id": "pol_cb805d8999bd453f8f2b0ffd04f05b59",
"version": 1
},
"mode": "test",
"input": {
"prompt": "Abraham Lincoln giving a speech, black and white photograph"
},
"prompt_redacted": false,
"checks": {
"minors_sexual": {
"score": 0.0071,
"review_score": 0.01,
"fired": []
},
"adult": {
"score": 0.01,
"review_score": 0.01,
"fired": []
},
"real_person": {
"score": 0.99,
"review_score": 0.99,
"fired": [
"rp_present"
]
},
"copyrighted_ip": {
"score": 0.03,
"review_score": 0.03,
"fired": []
}
},
"created_at": "2026-09-17T09:02:29.255Z"
},
"verdict": {
"verdict": "allow",
"note": "historical photo, fine",
"by": "key_7232efbdcd0f496b908a49740f04157c",
"at": "2026-09-17T09:07:13.073Z"
}
}What a verdict does
It records who ruled, when and why, and tells your system: every webhook of the decision's policy subscribed to review.verdict gets a delivery (Webhooks). The decision itself keeps its review outcome, so the log shows what the policy did and what the person did.
Webhooks only go out for decisions made with live keys. With a test key, list items with status=allowed or status=blocked instead.
Who can rule
Dashboard members have one of three roles:
- Owner and Admin: everything, including policies, keys and settings.
- Reviewer: reads decisions, runs checks and rules on review items. Nothing else; anything more gets
403 role_forbidden.
Any API key of the workspace can list items and record verdicts. A verdict made with a key records the key's id in by; one made in the dashboard records the person.
Once an item is blocked and its minors check had reached the review line, its prompt isn't shown again: input.prompt becomes a placeholder and prompt_redacted is true. Only an owner or admin can reveal it, and every reveal is audited (Data handling).