API / QUICKSTART
One endpoint. Typed decisions.
Send relevant state and one or more bounded questions. The API returns probabilities and a typed assessment for each question, together with a model and execution receipt.
Connect to the gateway
Use POST https://api.verdictdecision.com/v1/decisions. Supply a vd_test_ or vd_live_ key in the Authorization header. Keys are not open to customers yet; see API access. A Verdict (vrd_) key is not a Decision key.
Set VERDICT_DECISION_KEY in your environment. The examples use HTTPS and standard libraries, without a separate Verdict SDK.
curl https://api.verdictdecision.com/v1/decisions \
-H "Authorization: Bearer $VERDICT_DECISION_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
--data '{
"model": "decider-4b-v2",
"state": {
"issue": "The checkout page displays an incorrect total after applying a coupon."
},
"questions": {
"result": {
"type": "choice",
"instructions": "Choose the team best suited to investigate this issue.",
"criteria": {
"frontend": "UI rendering and browser behavior",
"billing": "Pricing, discounts, and payment calculations",
"infrastructure": "Deployment and service availability"
}
}
}
}'Request fields
state: relevant text, an object, or an array.questions: an object keyed by your question identifiers. Each question hastype,instructions, and, for choices and scores,criteria. Choice questions may also specify an individualstrategy.model: optional. Defaults todecider-4b-v2. IDs are the upstream model names; see the list below. Each ID identifies one immutable snapshot. The floating aliasverdict-decisionpoints at the current recommended model. Earlier IDs (verdict-decision-1,laya-typed,verdict-laya-typed,verdict-laya-typed-1,verdict-laya-multilingual,verdict-laya-multilingual-1) remain permanent aliases. The response reports the canonicalmodeland therequested_modelyou sent.strategy: optional decision strategy for choice questions:single_pass(default: 1 forward pass),cyclic(Z_K cyclic permutation group averaging, algebraically cancelling slot positional bias), ortournament(pairwise round-robin tournament with Bradley-Terry Maximum Likelihood Estimation and Condorcet consistency).independent: optional boolean; defaults to true.deadline_ms: optional, 100–590,000 ms. Defaults to 180,000 ms. The website playground caps it at 50,000 ms.
Three question types
Proposition: a yes/no assessment. The answer includes a boolean decision, a probability of true, and abstained.
Choice: define 2–255 explicit criteria (2–64 on the Laya models). The answer includes the selected option, probabilities for the options, confidence, and abstention. When using cyclic or tournament strategies, choice answers include game_theory receipts reporting position bias cancellation, margin, and Condorcet consistency.
Score: define 2–10 ordered levels. The answer includes the selected numeric level, an expected score, and probabilities over the levels.
Game-theoretic decision strategies
For high-stakes choices such as patch selection, bug triage, or multi-candidate code generation, naive repeated sampling fails because errors between runs of the same model correlate heavily. The Decision API provides two mathematically rigorous social choice mechanisms:
cyclic(Cyclic Permutation Debiasing): Evaluates all K cyclic rotations under the cyclic group Z_K (K worker questions per choice). Both strategies apply to choice questions only, and option names must not be whole numbers (use a list, or names such asopt_1). Because each candidate appears exactly once in each physical slot position, a constant per-slot bias cancels exactly in the averaged scores; theposition_bias_cancelledreceipt of 0.0 states that property, it is not a per-request measurement. In our empirical pilot on 90 coding-choice tasks, cyclic scoring achieved 89/90 accuracy (+4.4 pp over single pass).tournament(Round-Robin Bradley-Terry Tournament): Evaluates all K*(K-1)/2 candidate pairs in both orders (K*(K-1) worker questions), then fits latent skill parameters using the Bradley-Terry MLE. The answer reports the Condorcet winner (an option that beats every other head-to-head, if there is one) and whether the Bradley-Terry winner is that option (is_condorcet_consistent); the two can differ when the head-to-head margins are narrow.
Read the technical benchmark study for complete local measurements, Wilson confidence intervals, and raw receipts.
Recipes
- Retry triage: classify a failure before you retry it.
- Verified retry: decide whether another test-gated attempt is worth running.
Receipts and retries
Read results from answers[question_id]. The response also identifies the resolved model, serving venue, artifact hash, runtime fingerprint, and settlement state. Early-access receipts currently report not_billed_pre_t4.
Supply an Idempotency-Key and keep the same key and body for a manual retry. Completed successful responses are cached in gateway memory; restarts clear that cache. Failed or interrupted calls can have an unknown upstream outcome. They are not automatically safe to re-execute.
Latency and limits
Each model normally runs on the GPU named above. When that GPU is scarce, the platform may serve it from a second GPU type, so latency can differ. The worker scales to zero. An idle worker can need a cold start, so a deadline can expire before a result is ready. There is no automatic retry in the playground. The direct API accepts up to 32 questions (16 on the Laya models) and 256 KiB per request. The cyclic and tournament strategies expand each choice into K or K*(K-1) worker questions, and a request that expands to more than 1,000 is refused with 422 expansion_too_large; the playground accepts up to four questions.
Errors
Failures use {"error": {"code", "message"}} and an HTTP status. Retry only where the table says so.
- 401
unauthorized: the key is missing, malformed, unknown, revoked or not a Decision key. Verdict (vrd_) keys are not Decision keys. Check the Authorization header and the key; retrying will not help. - 403
service_not_open: your key is valid, but the service is not yet open to customers. - 400, 413, 422: the request is invalid (
invalid_json,body_too_large,invalid_request,expansion_too_large). Fix the request. - 409
idempotency_conflict/idempotency_in_flight: theIdempotency-Keywas used with a different body, or the first call is still running. - 429
concurrency_limit/capacity_exceeded: too many decisions in flight; wait forRetry-Afterseconds. - 502
venue_error/venue_mismatch/venue_unreachable: the model worker failed, answered as the wrong model, or could not be reached. Its outcome is unknown; keep yourIdempotency-Keywhen you retry. - 503
identity_unavailable: we cannot verify keys right now. Your key is not at fault. Retry afterRetry-Afterseconds and check status. - 503
model_not_ready/model_unavailable: the model is starting or has no serving venue. Retry afterRetry-After, or choose another model.
Available models & authority
The Decision API serves eight open-weight models under their upstream names. GET /v1/models reports each model's provenance: author, upstream repository and revision, license, and whether Verdict modified the weights.
decider-4b-v2(aliasesverdict-decision,verdict-decision-1): 4B general-purpose adjudicator by Mapika, derived from Qwen3.5-4B (Apache-2.0), typically on an L40S. The default. Recommended for multi-candidate adjudication, code review, and synthesis gating.decider-4b-v2.1: The v2.1 update of Decider 4B by Mapika (Apache-2.0), with per-type temperature calibration, typically on an L40S.decider-2b-v11: 2B Decider by Mapika, derived from Qwen3.5-2B (Apache-2.0), typically on an L4. A lower-cost general adjudicator with lower reliability than the 4B and 35B; verify decisions that matter.decider-0.8b: 0.8B Decider by Mapika, derived from Qwen3.5-0.8B (Apache-2.0), typically on an L4. The smallest and fastest Decider, with lower reliability than the 4B and 35B; verify decisions that matter.decider-35b-a3b: 35B mixture-of-experts Decider (3B active) by Mapika, derived from Qwen3.5-35B-A3B (Apache-2.0), typically on an A100-80GB. The largest Decider; inputs up to about 4,000 tokens. A cold call takes roughly three to six minutes, so give it adeadline_msof at least 300,000; at the 180,000 default it can return 503model_not_ready, and retrying after theRetry-Afterdelay succeeds once the model is up.laya-typed-decisions(aliaseslaya-typed,verdict-laya-typed,verdict-laya-typed-1): 421M decision model by ConvAI Innovations, fine-tuned from ModernBERT-large (Apache-2.0), typically on a T4. 2,048-token context. Recommended for tool routing, prompt triage, and fast guardrails.laya-multilingual(aliasesverdict-laya-multilingual,verdict-laya-multilingual-1): 322M multilingual decision model by ConvAI Innovations, fine-tuned from mmBERT-base (Apache-2.0), typically on a T4. 2,048-token context. Supports 100+ languages.laya-base: Base Laya decision model by ConvAI Innovations (Apache-2.0), typically on a T4. 1,024-token context; longer input is truncated.
Specify the model in the request body. Initial abstention thresholds are not yet fitted. A probability is an assessment; it does not grant tool permission or establish that an execution succeeded.
View the live model registry · Check gateway status · Try the playground
Licenses and attribution
Verdict Decision serves open-weight models. Each is listed under the name its authors publish it as, with the upstream repository, pinned revision and license shown below and in GET /v1/models. Names such as Decider, Laya and Qwen belong to their respective authors and identify the upstream models only. They are not Verdict Decision product names.
- Decider 4B v2 (
decider-4b-v2): Served from Mapika/decider-4b at revision 7ab294c (Apache-2.0), itself fine-tuned from Qwen/Qwen3.5-4B-Base (Apache-2.0). Weights unmodified. - Laya Typed Decisions (
laya-typed-decisions): Served from convaiinnovations/laya-typed-decisions at revision 1a793eb (Apache-2.0), fine-tuned from answerdotai/ModernBERT-large (Apache-2.0). Weights unmodified. - Laya Multilingual (
laya-multilingual): Served from convaiinnovations/laya-multilingual at revision e4e9ddf (Apache-2.0), fine-tuned from mmBERT-base (Apache-2.0). Weights unmodified. - Decider 0.8B (
decider-0.8b): Served from Mapika/decider-0.8b at revision a0a01d6 (Apache-2.0), itself fine-tuned from Qwen/Qwen3.5-0.8B-Base (Apache-2.0). Weights unmodified. - Decider 2B v11 (
decider-2b-v11): Served from Mapika/decider-2b at revision 533964d (Apache-2.0), itself fine-tuned from Qwen/Qwen3.5-2B-Base (Apache-2.0). Weights unmodified. - Decider 4B v2.1 (
decider-4b-v2.1): Served from Mapika/decider-4b at revision eb5fbdf (Apache-2.0), itself fine-tuned from Qwen/Qwen3.5-4B-Base (Apache-2.0). Weights unmodified. - Decider 35B-A3B (
decider-35b-a3b): Served from Mapika/decider-35b-a3b at revision 91470e6 (Apache-2.0), itself fine-tuned from Qwen/Qwen3.5-35B-A3B-Base (Apache-2.0). Weights unmodified. - Laya Base (
laya-base): Served from convaiinnovations/laya at revision 55cf4c4 (Apache-2.0). Weights unmodified.
Licensed under the Apache License, Version 2.0. Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" basis, without warranties or conditions of any kind.