Skip to main content
Experimental. Decision model support is new and the questions response format is not yet stable. The request and response shapes documented here may change in a future release without a deprecation period.
Decision models evaluate content against questions instead of generating free-form text. Requesty supports Jev, built by Typesafe, Clef, built by Cloudflare, and the Perplexity decision model. A decision model evaluates a piece of content against a set of questions you define and returns a typed answer for each one, together with a probability distribution over the possible outcomes. That makes it a good fit for classification, moderation, sentiment analysis, grading and any other place where you want a calibrated score rather than prose. Call decision models through the Decisions endpoint, POST https://router.requesty.ai/v1/systemone. It is built for decisions: you send the content and your questions, and you get typed answers back as plain JSON. No messages to build, no answer string to parse.
Use the Decisions endpoint for new integrations. It is the only API that supports every decision model (openai/gpt-6-luna and azure/decision-1 only answer there), it accepts images on every model that can see them, and it returns refusals as a typed answer. Chat Completions, Messages and Responses still work for a few models, for tools that can only speak those APIs. See Other APIs.
Get your API key in the Requesty Console.
Want a decision model to pick which LLM answers each conversation? See Auto Routing.

Models

GET /v1/models/decision returns the full, current list of models the Decisions endpoint serves.

How it works

A decision request has three fields:
  1. model: a decision model id, with its provider prefix.
  2. state: the content to evaluate, as a string.
  3. questions: a map of question id to question definition.
The response has an answers object with one entry per question id. Every answer carries a type field matching the question type, or "refusal" when the model declines to answer that question, so check type before reading the value. Responses are not streamed.

Question types

Decision models support three question types. You can mix them freely in one request; each question is answered independently.

noul: yes / no

A noul question asks whether a statement about the content is true. The answer is a probability between 0.0 and 1.0.
Answer:

choice: pick one option

A choice question picks one of several labelled options. criteria maps each option key to a description of when it applies. The answer contains the winning key in choice, plus probabilities for every option and the overall confidence.
Answer:

score: position on an ordered scale

A score question places the content on an ordered scale. criteria is a list of labels from lowest to highest. The answer is the zero-based index of the chosen label in score, with probabilities keyed by index, a legend mapping indices back to labels, and the overall confidence.
Answer:

Examples

The examples below ask all three question types about the same book review using typesafe/jev-1.14.0. Set model to any id from the Models table to use another decision model. Swap in your own content and questions. Send state and questions to /v1/systemone and read answers from the response.
The answers come back as plain JSON, no string to parse:
To send images to cloudflare/clef or openai/gpt-6-luna, add them in assets, as JSON or as a multipart upload. See Create System One Decision for the full reference.

Other APIs

If your tool can only call Chat Completions, Messages or Responses, you can still reach typesafe/jev-latest, cloudflare/clef and perplexity/pplx-decider-v1-27b through them. Prefer the Decisions endpoint whenever you can: these APIs were built for text generation, so the answers come back as a JSON string inside the assistant message that you have to parse, and openai/gpt-6-luna and azure/decision-1 are not available here. On these APIs, the content to evaluate goes in one or more user messages (several are joined with blank lines) and the questions go in the response format field as {"type": "questions", "questions": {...}}.
Only the following are supported when calling a decision model through these APIs:
  • user messages with text content. system, assistant and tool messages, files and tool definitions are rejected.
  • Images only on cloudflare/clef: up to 4 per request, sent as base64 data URLs. Remote image URLs are rejected. typesafe/jev-latest accepts text only.
  • Non-streaming requests. stream: true returns a 400.
  • A questions response format. json_object, json_schema and plain text are not supported by this model.

Chat Completions API

Pass the questions in response_format.
The answers come back as the JSON content of the assistant message:

Messages API

Pass the questions in output_config.format.

Responses API

Pass the questions in text.format.

Approved models

If your organization uses Approved Models or access lists, approval is checked per API:
  • Decisions endpoint: the model must be approved under Decisions in the Model Library.
  • Chat Completions, Messages and Responses: the model must be approved as a chat model. Approving it under Decisions is not enough.
A decision model that is approved for one API but not the other returns a 403 on the other one. If you call the same model through both, approve it in both places.

Usage and billing

Decision model responses report input and output tokens in the usual usage block, and requests are priced and logged like any other model. See Cost Tracking and Logs.

Errors

Last modified on October 27, 2026