[ OPEN ] $5 FREE CREDITDECISION RUNS, V1 API

Ask a question.Get a probabilityfor every answer.

Send the thing being decided about and typed questions: yes/no, one of up to 20 options, or an ordered score. Neon 1.1 reads each answer from a closed label set and returns a probability you can threshold.

The OpenType logo drawn in ASCII characters.
FIG. 1 THE OPENTYPE MARK ON A 44 x 28 CHARACTER GRID
POST /v1/runs
export OPENTYPE_API_KEY="otsk_..."
curl https://api.opentype.dev/v1/runs \
  -H "Authorization: Bearer $OPENTYPE_API_KEY" \
  -H "Idempotency-Key: ticket-40318" \
  -H "Content-Type: application/json" \
  -d '{
    "kind": "decision",
    "state": {"subject": "Card declined twice on renewal", "invoice": "INV-40318"},
    "instructions": "You triage billing support tickets.",
    "questions": {
      "urgent": {"type": "noul", "instructions": "Does this need a reply within an hour?"},
      "queue": {
        "type": "choice",
        "instructions": "Which queue owns this ticket?",
        "criteria": {"billing": "charges, refunds", "access": null, "outage": null, "other": null}
      }
    },
    "max_output_tokens": 64
  }'
export OPENTYPE_API_KEY="otsk_..."
curl https://api.opentype.dev/v1/runs \
  -H "Authorization: Bearer $OPENTYPE_API_KEY" \
  -H "Idempotency-Key: ticket-40318" \
  -H "Content-Type: application/json" \
  -d '{
    "kind": "decision",
    "state": {
      "subject": "Card declined twice on renewal",
      "invoice": "INV-40318"
    },
    "instructions": "You triage billing support tickets.",
    "questions": {
      "urgent": {
        "type": "noul",
        "instructions": "Does this need a reply within an hour?"
      },
      "queue": {
        "type": "choice",
        "instructions": "Which queue owns this ticket?",
        "criteria": {
          "billing": "charges, refunds",
          "access": null,
          "outage": null,
          "other": null
        }
      }
    },
    "max_output_tokens": 64
  }'

01 / How a run works

One request, one routed read, one probability per answer.

Nothing is spent until the questions pass admission and your credits cover the run. The router picks a healthy, decision-capable route; if none exists you get a 503 and no charge. A decision makes one call, with no repair.

Your app posts a decision run. Admission checks the questions and your credits, else a 4xx and no charge. The router picks a healthy decision-capable route, else a 503 and no charge. Neon 1.1 by OpenType makes one read with no repair. The probabilities are range-checked, the cost is settled, and a 200 returns a probability for every answer.
FIG. 2 THE PATH OF ONE DECISION RUN: ONE CALL, NO REPAIR, SETTLED BEFORE IT IS RETURNED

02 / What comes back

The probabilities are the response. There is no prose to parse.

Every answer comes from the label set you defined. A completed run names the model that answered, what it read from, and, once settled, what it cost.

Questions / you sendsample
{
  "urgent": {
    "type": "noul",
    "instructions": "Does this need a reply within an hour?"
  },
  "queue": {
    "type": "choice",
    "instructions": "Which queue owns this ticket?",
    "criteria": {
      "billing": "charges, refunds",
      "access": null,
      "outage": null,
      "other": null
    }
  }
}

your labels are the answer set

200 / decisionsample
{
  "run_id": "run_0f3a9c2e7b1d4e8fa5c6d7e8f9a0b1c2",
  "kind": "decision",
  "state": "completed",
  "input_digest": "9f2c41d0...",
  "output_digest": "41ab77e2...",
  "decision": {
    "answers": {
      "urgent": {
        "type": "noul",
        "probability": 0.83,
        "label_mass": 0.991,
        "answered_within_labels": true
      },
      "queue": {
        "type": "choice",
        "choice": "billing",
        "probabilities": {
          "billing": 0.71,
          "access": 0.06,
          "outage": 0.14,
          "other": 0.09
        },
        "confidence": 0.71,
        "label_mass": 0.964,
        "answered_within_labels": true
      }
    },
    "draws": 1,
    "read": "slot_constrained",
    "model": "neon-1.1",
    "stages": [["queue", "urgent"]]
  },
  "usage": {
    "input_tokens": 412,
    "output_tokens": 23
  },
  "cost_micros": 19,
  "cost_basis": "provider_reported",
  "replayed": false
}

probabilities range-checked

402 / no creditsample
{
  "error": {
    "code": "insufficient_credits",
    "message": "the organization's credit balance ...",
    "request_id": "req_7c01b3e4..."
  }
}

refused before any call, free

03 / Where it runs

You never pick the model.
The router does.

See the network
FamilyProviderRun kindWhereStatus
Neon 1.1opentypedecisionOpenTypein catalog
OpenAIopen_aiverdictexternaladapter, no route
Anthropicanthropicverdictexternaladapter, no route
GLMglmverdictexternaladapter, no route
DeepSeekdeep_seekverdictexternaladapter, no route
Neon 1.1in catalog
open_aiadapter, no route
anthropicadapter, no route
glmadapter, no route
deep_seekadapter, no route
TABLE 1 ROUTES AND ADAPTERS AS OF 2026-09-24. NEON 1.1 IS THE ONLY ROUTE IN THE CATALOG AND SERVES DECISION RUNS. VERDICT ADAPTERS ARE BUILT; NO VERDICT ROUTE IS IN THE CATALOG YET.

04 / Pricing

Prepaid credits. $5 on us to start.

Every new account gets $5 of credit, once per verified email address. Top up $5 to $1,000 in the console. Each run is charged its settled cost_micros; refusals before the model call are free.

Free credit

$5on sign-up

Granted once per verified email address.

  • open sign-up for everyone
  • API keys with scopes
  • decision runs on Neon 1.1
  • usage, ledger and quota
Get $5 free

Neon 1.1

$0.042/ 1M tokens

42,000 micro-USD per million input and per million output tokens, as of 2026-09-24.

  • charged the settled cost_micros
  • cost_basis says reported or estimated
  • a replayed key is never charged twice
  • 402 insufficient_credits, never a debt
How billing works

Top-ups

$5-$1,000

Paid by card through Stripe, credited when Stripe confirms.

  • prepaid, no subscription
  • optional auto-recharge
  • invoices in the Stripe portal
  • credited exactly once per payment
Read the docs

05 / Questions

Asked before the first run.

  1. Neon 1.1 is priced at 42,000 micro-USD per million input tokens and the same per million output tokens ($0.042 per 1M), as of 2026-09-24.

    A run is charged its settled cost_micros. The sample on this page, 412 tokens in and 23 out, settles at 19 micro-USD.

  2. The run is refused with 402 insufficient_credits before any model call. Nothing is created, reserved or charged. Top up in the console, then retry with the same Idempotency-Key.

Ask a typed question.
Threshold the answer.

Sign-up is open to everyone. Every new account starts with $5 of credit, and you top up only when you need more.