Skip to main content
POST
cURL
Choose your own question ids. Each answer uses the same id as its question.state, instructions, and individual criteria descriptions can be strings, JSON objects, or arrays. The API uses the same OpenRouter-shaped Decisions schema for both Jev and GPT-6 Luna. Gumloop translates it to OpenAI’s schema for Luna, so keep noul for yes/no questions.
Use an id from GET /models with supports_decisions: true: typesafe/jev-1.14, typesafe/jev-1.13 through OpenRouter, or gpt-6-luna directly through OpenAI. is_classifier_model: true means decisions-only. GPT-6 Luna also supports POST /chat/completions under the same id.
  • Unknown or restricted ids, models without Decisions support, and unsupported proxy configurations return model_unavailable. The endpoint does not select a fallback model.
  • Responses are not streamed.
  • provider preferences apply to OpenRouter, not OpenAI. Gumloop applies its zero-data-retention policy after OpenRouter preferences; you cannot disable it. OpenAI requests do not forward the provider field.
  • The response model identifies the exact served version. Usage records retain that version too.
  • If OpenAI refuses any question, the request returns HTTP 422 (provider_error). details.provider_message names the refused question ids, and the request does not return partial answers.
  • For OpenAI, user is sent as safety_identifier, truncated to 128 characters.
Charges follow your pricing and bring-your-own-key (BYOK) policy. Gumloop uses the provider-reported cost when positive, or the model’s Decisions catalog token rates when the cost is zero or absent. See Credits.GPT-6 Luna Decisions uses input-only pricing, with a separate long-context tier. There are no separate output or cache charges. Its Decisions rates differ from its chat rates.Approved calls from an agent script are attributed to the current task under Chat & Reasoning. See Code sandbox & secrets.

Authorizations

Authorization
string
header
required

A personal API key or an OAuth 2.0 access token. Personal API keys also require the x-auth-key header with your user ID.

Query Parameters

team_id
string

Scope the request to a team. When omitted, uses the authenticated user's default organization.

Body

application/json
model
string
required

Decision-capable model id. Use an id from GET /models whose supports_decisions is true, such as typesafe/jev-1.13 or gpt-6-luna.

Example:

"typesafe/jev-1.13"

state
required

The content to evaluate. A plain string, or a JSON object or array of related context.

questions
object
required

Questions keyed by ids you choose. Answers come back under the same ids.

provider
object

OpenRouter provider routing preferences, not forwarded to OpenAI. The server applies its zero-data-retention policy last for OpenRouter. You cannot turn it off.

session_id
string

Groups related requests in observability tooling. Not sent to the model.

Maximum string length: 256
trace
object | null

Observability metadata. Unrecognized keys are ignored, not forwarded.

user
string

A stable id for your end user. The provider uses it for abuse monitoring. OpenAI receives it as safety_identifier, truncated to 128 characters.

Response

One answer per question, under the question's id.

id
string
Example:

"gen-dec-1790835808-rFEEP39lhplllf50bn9Q"

model
string

The exact model version that answered.

Example:

"typesafe/jev-1.13-20260917"

provider
string
Example:

"TypeSafe"

answers
object

Keyed by your question ids. The fields present depend on the question type.

usage
object