Drex

Evaluate questions (OpenAI Decisions format)

- Billing: only a 200 is billed, at the per-input-token price, exactly as /v1/systemone bills the same request. - Accepted and ignored: safety_identifier, prompt_cache_key, prompt_cache_options, prompt_cache_breakpoint and an image's detail are checked against OpenAI's schema and then dropped. Any other key Drex doesn't know is ignored. - Errors: Drex's error.type and status, plus OpenAI's error.code and error.param.

POST
/v1/decisions
  • Billing: only a 200 is billed, at the per-input-token price, exactly as /v1/systemone bills the same request.
  • Accepted and ignored: safety_identifier, prompt_cache_key, prompt_cache_options, prompt_cache_breakpoint and an image's detail are checked against OpenAI's schema and then dropped. Any other key Drex doesn't know is ignored.
  • Errors: Drex's error.type and status, plus OpenAI's error.code and error.param.

Checks run in the same order as /v1/systemone and stop at the first failure.

Authorization

bearerAuth
AuthorizationBearer <token>

Your API key, sent as Authorization: Bearer nace_sk_...

  • Where: the dashboard's API Keys page. It is shown once, when you create it.
  • Format: nace_sk_ followed by 43 URL-safe characters (A-Z, a-z, 0-9, _ and -).
  • Limit: an account can hold at most 3 active keys.
  • Wrong or missing key: returns 401 authentication_error.

In: header

Request Body

application/json

modelstring

As on POST /v1/systemone. A registered id or alias is served as named, and no model is served like drex-latest. Any other name (gpt-6-luna, jev-latest, a mistyped drex- name) or a registered id that isn't available yet returns 422 with code: model_not_found and param: model.

inputstring | array<Decision message>required

What the questions are about: a string, or user messages whose text parts are joined with a blank line into the state. See State.

Show variants
questionsarray<Predicate | Choice | Score>required

1 to 512 questions, answered in order.

Items1 <= items <= 512
Show child attributes
safety_identifierstring | null

OpenAI's opaque end-user identifier. Accepted for compatibility, up to 128 characters; Drex neither forwards nor stores it.

Lengthlength <= 128
Show variants
prompt_cache_keystring | null

Accepted for OpenAI compatibility, up to 64 characters, and ignored: Drex has no prompt cache.

Lengthlength <= 64
Show variants
prompt_cache_optionsobject | null

Accepted for OpenAI compatibility and ignored: Drex has no prompt cache.

Show variants

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/decisions" \  -H "Content-Type: application/json" \  -d '{    "model": "drex-v2.0",    "input": "I was charged twice for my March invoice. Please refund one of the charges.",    "questions": [      {        "type": "choice",        "name": "category",        "instructions": "What is this support ticket about?",        "choices": [          {            "value": "billing",            "description": "Payments, invoices, refunds, or charges"          },          {            "value": "technical",            "description": "Bugs, errors, or outages"          },          {            "value": "account",            "description": "Login, profile, or permissions"          },          {            "value": "other"          }        ]      },      {        "type": "score",        "name": "sentiment",        "instructions": "How upset is the customer?",        "levels": [          {            "label": "Calm"          },          {            "label": "Mildly annoyed"          },          {            "label": "Frustrated"          },          {            "label": "Angry"          }        ]      },      {        "type": "predicate",        "name": "wants_refund",        "instructions": "Is the customer asking for a refund?"      }    ]  }'
{  "model": "drex-v2.0",  "answers": [    {      "type": "choice",      "name": "category",      "choice": "billing",      "confidence": 0.986,      "probabilities": [        {          "value": "billing",          "probability": 0.9895        },        {          "value": "technical",          "probability": 0.005        },        {          "value": "account",          "probability": 0.0006        },        {          "value": "other",          "probability": 0.0049        }      ]    },    {      "type": "score",      "name": "sentiment",      "score": 1.5306,      "confidence": 0.7183,      "probabilities": [        {          "value": 0,          "label": "Calm",          "probability": 0.1572        },        {          "value": 1,          "label": "Mildly annoyed",          "probability": 0.3516        },        {          "value": 2,          "label": "Frustrated",          "probability": 0.2946        },        {          "value": 3,          "label": "Angry",          "probability": 0.1966        }      ]    },    {      "type": "predicate",      "name": "wants_refund",      "probability": 0.9868    }  ],  "usage": {    "input_tokens": 106,    "output_tokens": 212,    "total_tokens": 318,    "input_tokens_details": {      "cached_tokens": 0,      "cache_write_tokens": 0    },    "output_tokens_details": {      "reasoning_tokens": 0    }  },  "request_id": "req_0123456789abcdef0123456789abcdef"}