---
title: Decision models
---

# Decision models

A decision model does not write text. You give it one input and a set of typed questions, and it returns a probability for every answer in a single call. That makes it a fit for classification, routing, moderation and scoring, where you want a number you can threshold rather than prose you have to parse.

## When to use one

- **Routing and triage.** Is this ticket urgent? Which team owns it?
- **Moderation and policy checks.** Does this message break rule 4?
- **Scoring.** How relevant is this document to the query, on a graded scale?
- **Many questions about one input.** All of them are answered in one request.

If you need an explanation or generated content, use a chat model instead.

## Make a request

Decision models have their own endpoints. Use whichever shape you prefer; every decision model works on both.

- [`POST /v1/decisions`](/docs/api-reference/decisions): the OpenAI decisions shape.
- [`POST /v1/systemone`](/docs/api-reference/systemone): the System One shape.

```bash
curl https://api.crossmodel.ai/v1/decisions \
  -H "Authorization: Bearer $CROSSMODEL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "typesafe/jev",
    "input": "Help! My payouts have been failing for 3 days.",
    "questions": [
      { "type": "predicate", "name": "urgent", "instructions": "Does this message convey urgency?" }
    ]
  }'
```

```json
{
  "model": "typesafe/jev",
  "answers": [{ "type": "predicate", "name": "urgent", "probability": 0.97 }],
  "usage": { "input_tokens": 41, "output_tokens": 0, "total_tokens": 41 }
}
```

## The three question types

| Type | You provide | You get |
|------|------|------|
| Yes / no (`predicate`) | Instructions | One probability |
| Single choice (`choice`) | Instructions and a list of options | The chosen option and a probability per option |
| Graded score (`score`) | Instructions and ordered levels | A score (the expected level, starting at 0) and a probability per level |

## Use the probabilities

A probability is more useful than a yes or no. Pick thresholds that match the cost of each mistake:

```python
p = answers[0]["probability"]
if p >= 0.9:
    escalate()
elif p >= 0.5:
    queue_for_review()
```

For a choice, `confidence` tells you how sure the model is of its pick. A low confidence is a good signal to fall back to a human or to a larger model.

## Find decision models

`GET /v1/models` lists chat models by default, so existing chat clients are unaffected. Ask for decision models explicitly:

```bash
curl "https://api.crossmodel.ai/v1/models?kind=decision" \
  -H "Authorization: Bearer $CROSSMODEL_API_KEY"
```

## Things to know

- **Billing is input-only.** The input, the question text and the option descriptions all count. There is no output price.
- **No streaming.** A decision is one complete response.
- **Images** work on models whose input modalities include `image`.
- **Long inputs.** Some models read long inputs less reliably than short ones. Each model's page says what we measured; keep the evidence a question depends on close to the question when you can.
- **Unknown fields are rejected** with `400 unknown_parameter`, on both endpoints.
