---
title: "OpenAI: Make a decision"
description: "Ask OpenAI a yes/no, multiple-choice or rating question about text or images in a workflow, and branch on an answer that comes with probabilities."
canonical: "https://docs.softr.io/workflows/actions/openai-make-a-decision"
updated: "2026-11-13"
---

# OpenAI: Make a decision

# OpenAI: Make a decision

> **Applies to:** Make a decision 1.0.0

Ask OpenAI one question about a text, images or both, and get a bounded answer you can branch on. The step uses the [OpenAI Decisions API](https://developers.openai.com/api/docs/guides/decisions) with the `gpt-6-luna` model, so it never writes free text. Every answer comes with probabilities, so you decide how sure the model has to be.

## Overview

**Make a decision** is an action of the [OpenAI integration](/workflows/integrations/openai). Choose the kind of answer in **Decision**:

- **Yes or no**: how likely it is that the question is true for the content, turned into yes or no with a threshold.
- **Pick one option**: which of your options fits the content best.
- **Score on a scale**: where the content falls on your levels, from lowest to highest.

> **Note**
>
> Make a decision is available on all plans. It runs on your own OpenAI API key, and OpenAI bills the requests to that key.

## Settings

| Field                      | Description                                                                                                                                                                                                                                                                                                                                                              | Default       |
| :------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ |
| **Account**                | The OpenAI connection whose API key the request uses.                                                                                                                                                                                                                                                                                                                    |               |
| **Decision**               | **Yes or no**, **Pick one option** or **Score on a scale**.                                                                                                                                                                                                                                                                                                              | **Yes or no** |
| **Question**               | What to decide about the content, for example _Is the customer asking for a refund?_ Add any guidance the model should follow, such as what each option means.                                                                                                                                                                                                           |               |
| **Text** _(optional)_      | The text to decide on. Required unless you add images.                                                                                                                                                                                                                                                                                                                   |               |
| **Images** _(optional)_    | Images to decide on, together with the text. Add a public image URL (`http://`, `https://` or `data:`), or map a file field from a previous step, one row per source. A mapped field that holds several files sends all of them. OpenAI downloads the images, so they must be reachable from the internet. A row that is empty after variables are filled in is skipped. |               |
| **Options**                | Shown for **Pick one option**. The answers to pick from, 2 to 255, each unique.                                                                                                                                                                                                                                                                                          |               |
| **Levels**                 | Shown for **Score on a scale**. The levels from lowest to highest, for example _Low_, _Medium_, _High_. 2 to 10, each unique.                                                                                                                                                                                                                                            |               |
| **Threshold** _(optional)_ | Shown for **Yes or no**. The answer is yes when the probability is at least this value, between 0 and 1.                                                                                                                                                                                                                                                                 | 0.5           |

## Output

The output depends on the **Decision**:

| Decision             | Output                                                                                                                                                                                                                                                                                                                                                        |
| :------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Yes or no**        | `result` is `true` when `probability` reaches the **Threshold**. `probability` is how likely the question is true, from 0 to 1.                                                                                                                                                                                                                               |
| **Pick one option**  | `choice` is the best option, exactly as you wrote it. `confidence` is how sure the model is, from 0 to 1. `probabilities` lists each option as `value` and `probability`.                                                                                                                                                                                     |
| **Score on a scale** | `score` is the probability-weighted position on the scale, where the lowest level is 0. It can fall between two levels, for example 1.35. `label` is the single most likely level (the lower one on a tie). `confidence` is how sure the model is, from 0 to 1. `probabilities` lists each level as `level` (its position from 0), `label` and `probability`. |

To act on a yes or no decision, add a **Branch** step on `result`. To act only when the model is very sure, raise the **Threshold**, or compare `probability` or `confidence` with your own value.

## When the step fails

The step fails, with the message in the run details, when:

- a setting is missing or out of range:
  - "An OpenAI connection is required."
  - "A question is required."
  - "Add the text or at least one image to decide on."
  - "Image URLs must start with http\://, https\:// or data:, but got "ftp\://example.com/photo.png"." The message names the first image that was rejected.
  - "The threshold must be between 0 and 1."
  - "Add between 2 and 255 options." or "Add between 2 and 10 levels."
  - "The options must not be empty." or "The levels must not be empty."
  - "The options must be unique." or "The levels must be unique."
- OpenAI declines to answer, for example because of its content policy: "OpenAI declined to answer the question. Rephrase the question or the content and try again."
- OpenAI returns no answer: "OpenAI returned no answer to the question."
- OpenAI rejects the request, for example for a wrong API key. The message shows OpenAI's error.
