---
title: "Create a decision"
method: POST
path: "/decisions"
tags: ["Decisions"]
---

# Create a decision

`POST /decisions`

## Request

- Base URL: `https://api.openai.com/v1`
- URL: `https://api.openai.com/v1/decisions`
- Auth: HTTP bearer

Use this endpoint to quickly answer classification or scoring questions about some input. You can ask multiple questions in one request.

## Request body

- DecisionRequest
  - `model` string, required: The model to use. Only `gpt-6-luna` is supported.
  - `input` union, required: The input to evaluate for every question. Provide a text string or an ordered array of messages, function calls and outputs, or custom tool calls and outputs. Each tool output must identify a matching call by call ID.
    - string
    - union[]
      - union
        - DecisionInputUserMessage: A user message containing input text, images, or JSON.
          - `role` 'user', required
          - `content` union, required: A text string or an ordered list of text, image, and JSON parts.
            - string
            - union[]
              - …
          - `type` 'message'
        - DecisionInputDeveloperMessage: A developer message containing input text.
          - `role` 'developer', required
          - `content` union, required: A text string or an ordered list of input text parts.
            - string
            - DecisionInputText[]
              - …
          - `type` 'message'
        - DecisionInputSystemMessage: A system message containing input text.
          - `role` 'system', required
          - `content` union, required: A text string or an ordered list of input text parts.
            - string
            - DecisionInputText[]
              - …
          - `type` 'message'
        - DecisionInputAssistantMessage: An assistant message containing output text or refusals.
          - `role` 'assistant', required
          - `content` union, required: A text string or an ordered list of output text and refusal parts.
            - string
            - union[]
              - …
          - `phase` 'commentary' | 'final_answer'
          - `type` 'message'
        - object
          - `id` string, nullable
          - `call_id` string, required
          - `namespace` string, nullable
          - `name` string, required
          - `arguments` string, required
          - `status` 'in_progress' | 'completed' | 'incomplete'
          - `type` 'function_call', required
        - object
          - `id` string, nullable
          - `call_id` string, required
          - `output` union, required: Text evidence or an ordered list of text and image parts.
            - string
            - union[]
              - …
          - `status` 'in_progress' | 'completed' | 'incomplete'
          - `type` 'function_call_output', required
        - object
          - `id` string, nullable
          - `call_id` string, required
          - `namespace` string, nullable
          - `name` string, required
          - `input` string, required
          - `status` 'in_progress' | 'completed' | 'incomplete'
          - `type` 'custom_tool_call', required
        - object
          - `id` string, nullable
          - `call_id` string, required
          - `output` union, required: Text evidence or an ordered list of text and image parts.
            - string
            - union[]
              - …
          - `status` 'in_progress' | 'completed' | 'incomplete'
          - `type` 'custom_tool_call_output', required
  - `questions` QuestionParam[], required: Ask 1–400 questions about the input. Each question can be a predicate, choice, or score. Answers come back in the same order.
    - union: A question about the request's input, with an optional correlation name.
      - object: Estimate how likely it is that a statement about the input is true.
        - `type` 'predicate', required: The type of the object. Always `predicate`.
        - `name` string
        - `instructions` union, required
          - string
          - DecisionQuestionInputPart[]
            - union: A text, image, or JSON content part in a question instruction.
              - …
      - object: Choose from the supplied options based on the input.
        - `type` 'choice', required: The type of the object. Always `choice`.
        - `name` string
        - `instructions` union, required
          - string
          - DecisionQuestionInputPart[]
            - union: A text, image, or JSON content part in a question instruction.
              - …
        - `choices` ChoiceOptionParam[], required: Provide between 2 and 255 choices. Each choice must be unique.
          - `value` union, required: Choice values are typed: a string and a boolean with the same text are distinct.
            - string
            - boolean
          - `description` string
      - object: Rate the input against the supplied ordered levels.
        - `type` 'score', required: The type of the object. Always `score`.
        - `name` string
        - `instructions` union, required
          - string
          - DecisionQuestionInputPart[]
            - union: A text, image, or JSON content part in a question instruction.
              - …
        - `levels` ScoreLevelParam[], required
          - `label` string, required
          - `description` string
  - `safety_identifier` string, nullable: Opaque caller-provided end-user identifier, scoped by the verified org. Match Responses' limit; this is never the authenticated user identity.
  - `prompt_cache_key` string, nullable: Partition prompt cache reuse by caller-provided key.
  - `prompt_cache_options` object, nullable: Options for prompt caching. Supported for `gpt-5.6` and later models. By default, OpenAI automatically chooses one implicit cache breakpoint. You can add explicit breakpoints to content blocks with `prompt_cache_breakpoint`. Each request can write up to four breakpoints. For cache matching, OpenAI considers up to the latest 80 breakpoints in the conversation, without a content-block lookback limit. Set `mode` to `explicit` to disable the implicit breakpoint. The `ttl` defaults to `30m`, which is currently the only supported value. See the [prompt caching guide](https://developers.openai.com/api/docs/guides/prompt-caching) for current details.
    - `ttl` '30m': The minimum lifetime applied to every implicit and explicit cache breakpoint written by the request. Defaults to `30m`, which is currently the only supported value. The backend may retain cache entries for longer.
    - `mode` 'implicit' | 'explicit' | 'null', nullable: Controls whether OpenAI automatically creates an implicit cache breakpoint. Defaults to `implicit`. With `implicit`, OpenAI creates one implicit breakpoint and writes up to the latest three explicit breakpoints in the request. With `explicit`, OpenAI does not create an implicit breakpoint and writes up to the latest four explicit breakpoints. If there are no explicit breakpoints, the request does not use prompt caching.

## Response `200`

The answers and token usage.

- DecisionResponse
  - `model` string, required: The model used.
  - `answers` AnswerResource[], required: Answers in question order. Any question can return a refusal instead of an answer; other questions can still receive answers. A refusal has `type: "refusal"` and the question's `name`, or `null` if it was unnamed.
    - union: A completed question always includes its name, including null when unnamed.
      - object
        - `type` 'predicate', required: The type of the object. Always `predicate`.
        - `name` string, nullable, required
        - `probability` number, required
      - object
        - `type` 'choice', required: The type of the object. Always `choice`.
        - `name` string, nullable, required
        - `choice` union, required: Choice values are typed: a string and a boolean with the same text are distinct.
          - string
          - boolean
        - `probabilities` ChoiceProbabilityResource[], required
          - `value` union, required: Choice values are typed: a string and a boolean with the same text are distinct.
            - string
            - boolean
          - `probability` number, required
        - `confidence` number, required
      - object
        - `type` 'score', required: The type of the object. Always `score`.
        - `name` string, nullable, required
        - `score` number, required
        - `probabilities` ScoreProbabilityResource[], required
          - `value` integer, required
          - `label` string, required
          - `probability` number, required
        - `confidence` number, required
      - object: The model declined to answer this question. Other questions in the same request can still receive answers.
        - `type` 'refusal', required: The type of the object. Always `refusal`.
        - `name` string, nullable, required
  - `usage` ResponseUsageResource, required
    - `input_tokens` integer, required
    - `input_tokens_details` InputTokensDetailsResource, required
      - `cached_tokens` integer, required
      - `cache_write_tokens` integer, required
    - `output_tokens` integer, required
    - `output_tokens_details` OutputTokensDetailsResource, required
      - `reasoning_tokens` integer, required
    - `total_tokens` integer, required

## Changes

- **2026-10-22** `5d916f45a719`: 4 warning, 5 info
  - removed the request property `input/oneOf[subschema #2]/items/oneOf[#/components/schemas/DecisionInputMessage]/content`
  - removed the request property `input/oneOf[subschema #2]/items/oneOf[#/components/schemas/DecisionInputMessage]/phase`
  - removed the request property `input/oneOf[subschema #2]/items/oneOf[#/components/schemas/DecisionInputMessage]/role`
  - removed the request property `input/oneOf[subschema #2]/items/oneOf[#/components/schemas/DecisionInputMessage]/type`
  - …5 more
- **2026-10-15** `a8f5f3900b77`: 9 info
  - added the new optional request property `input/oneOf[subschema #2]/items/oneOf[#/components/schemas/DecisionInputMessage]/phase`
  - the `role` request property default value `user` was removed
  - added `function_call, function_call_output, custom_tool_call, custom_tool_call_output` discriminator mapping keys to the `input/oneOf[subschema #2]/items/` request property
  - added `output_text, refusal` discriminator mapping keys to the `input/oneOf[subschema #2]/items/oneOf[#/components/schemas/DecisionInputMessage]/content/oneOf[subschema #2: Parts]/items/` request property
  - …5 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/omnistack-sh/apis/openai-api/changes/decisions/post.md)

---

[API](https://skmtc.dev/omnistack-sh/apis/openai-api.md) - [All operations](https://skmtc.dev/omnistack-sh/apis/openai-api/llms.txt) - [OpenAPI document](https://skmtc.dev/omnistack-sh/apis/openai-api/revisions/0a26f104d35f?raw)
