OpenAI Decisions API compatible

Open Decision Models.
Free OpenAI-compatible API.

Run open weight models with OpenAI’s Decisions API shape. Send predicate, choice, and score questions to api.decider.cloud/v1/decisions.

  • No sign up
  • No credit card
  • No API key

Public preview. Best-effort availability.

POST /v1/decisions3 lines change
OpenAI Hosted APIDecider Hosted API
curl https://api.openai.com/v1/decisions \curl https://api.decider.cloud/v1/decisions \
-H "Authorization: Bearer $OPENAI_API_KEY" \-H "Authorization: Bearer NO_KEY_REQUIRED" \
-H "Content-Type: application/json" \-H "Content-Type: application/json" \
-d '{-d '{
"model": "gpt-6-luna","model": "kev-4b",
"input": "I was charged twice for my order.","input": "I was charged twice for my order.",
"questions": [{"questions": [{
"type": "predicate","type": "predicate",
"name": "refund","name": "refund",
"instructions": "Is the customer asking for a refund?""instructions": "Is the customer asking for a refund?"
}]}]
}'}'

No API key needed. Decider ignores Authorization, so any value works. answers[] come back in OpenAI’s shape.

Try the examples

Cold starts: The API scales to zero when idle. Your first request after inactivity can take about 30 seconds while models load.

predicate

Returns probability.

POST/v1/decisions
curl https://api.decider.cloud/v1/decisions \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "kev-4b",
    "input": "The package arrived with a cracked screen.",
    "questions": [
      {
        "type": "predicate",
        "name": "visible_damage",
        "instructions": "Does the product have visible damage, such as a crack, tear, or dent? Ignore shadows and damage to the packaging."
      }
    ]
  }'

input

“The package arrived with a cracked screen.”

  • True0.98
Response JSON
{
  "model": "kev-4b",
  "answers": [
    {
      "type": "predicate",
      "name": "visible_damage",
      "probability": 0.977614
    }
  ],
  "usage": {
    "input_tokens": 42,
    "output_tokens": 21
  }
}

choice

Returns choice, probabilities, and confidence.

POST/v1/decisions
curl https://api.decider.cloud/v1/decisions \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "kev-4b",
    "input": "I was charged twice for my order.",
    "questions": [
      {
        "type": "choice",
        "name": "department",
        "instructions": "Which department should handle this complaint?",
        "choices": [
          {
            "value": "billing",
            "description": "Payments, invoices, and refunds."
          },
          {
            "value": "technical",
            "description": "Problems using the product."
          },
          {
            "value": "shipping",
            "description": "Delivery and tracking."
          },
          {
            "value": "other",
            "description": "Requests outside these categories."
          }
        ]
      }
    ]
  }'

input

“I was charged twice for my order.”

confidence 0.46

  • billing0.60
  • technical0.02
  • shipping0.06
  • other0.32
Response JSON
{
  "model": "kev-4b",
  "answers": [
    {
      "type": "choice",
      "name": "department",
      "choice": "billing",
      "probabilities": [
        {
          "value": "billing",
          "probability": 0.595829
        },
        {
          "value": "technical",
          "probability": 0.024898
        },
        {
          "value": "shipping",
          "probability": 0.061882
        },
        {
          "value": "other",
          "probability": 0.317391
        }
      ],
      "confidence": 0.461105
    }
  ],
  "usage": {
    "input_tokens": 55,
    "output_tokens": 69
  }
}

score

Returns score, probabilities, and confidence.

POST/v1/decisions
curl https://api.decider.cloud/v1/decisions \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "kev-4b",
    "input": "Export fails in Safari but works in Chrome.",
    "questions": [
      {
        "type": "score",
        "name": "severity",
        "instructions": "How severe is this issue?",
        "levels": [
          {
            "label": "Cosmetic",
            "description": "Appearance only; no lost functionality."
          },
          {
            "label": "Workaround available",
            "description": "A task fails, but another way works."
          },
          {
            "label": "Fully blocked",
            "description": "A task fails with no workaround."
          }
        ]
      }
    ]
  }'

input

“Export fails in Safari but works in Chrome.”

confidence 0.24

  • 0 · Cosmetic0.15
  • 1 · Workaround available0.49
  • 2 · Fully blocked0.36
Response JSON
{
  "model": "kev-4b",
  "answers": [
    {
      "type": "score",
      "name": "severity",
      "score": 1.212709,
      "probabilities": [
        {
          "value": 0,
          "label": "Cosmetic",
          "probability": 0.1476
        },
        {
          "value": 1,
          "label": "Workaround available",
          "probability": 0.492091
        },
        {
          "value": 2,
          "label": "Fully blocked",
          "probability": 0.360309
        }
      ],
      "confidence": 0.238136
    }
  ],
  "usage": {
    "input_tokens": 57,
    "output_tokens": 105
  }
}

FAQ

Which models can I use?

Set model to kev-4b or strands-decider-2b. gpt-6-luna returns 404.

Can I send images?

Not yet. Both models are text only. Send a string, or user messages with input_text parts, which are joined with blank lines. input_image returns 422.

How do score levels reach the model?

Each level is sent as label: description, or the label alone when there’s no description.

What’s in the response?

answers in request order, in OpenAI’s shape, plus model and usage.

Will answers match gpt-6-luna?

No. Kev and Strands won’t match gpt-6-luna or each other. Set thresholds per model on your own examples.

What are the limits?

The same as /v1/systemone: 8 questions, 255 choices, 2–10 levels, and a 256 KiB body. A busy API returns 429 with Retry-After.

Try the Decisions API shape on open models.

Free during public preview. No API key needed.

Copy a request

Prefer the TypeSafe shape? See the API docs for /v1/systemone.