Stop Asking an LLM for JSON: The Case for a Real Decision Engine

Most teams trying to automate a judgment call end up wiring a chat model into a prompt that says “reply only in JSON” — and then spending the next quarter writing parsers, retries, and guardrails around the output. A decision engine takes the opposite approach: decisions are a first-class data type, not a side effect of text generation. This piece looks at what that means architecturally, how the API surface behaves, and where the model pays for itself in production.

What a Decision Engine Actually Is (and What It Isn’t)

A decision engine is a system that accepts state — text, structured JSON, or a batch of images and video frames — alongside questions declared in your code, and returns typed answers rather than prose. The vocabulary is deliberately narrow: a choice (one of your labels), a score (a level on an ordered scale), a truth (a calibrated probability between 0.00 and 1.00), a number (a value on a grid), and a point or box (a location inside an image). Every answer arrives with a confidence value attached. That’s the whole contract, and it’s enough to cover routing, gating, moderation, scoring, and perception tasks without ever asking the model to write a sentence.

The distinction matters because three common alternatives each break in a specific way. Rules engines are transparent and fast but collapse under combinatorial weight — a few dozen nested conditions and nobody can safely change the fraud thresholds anymore, and they have no way to look at an image or read an unstructured description. Chat LLMs prompted for JSON handle ambiguity well but introduce three operational problems: the response is generated text that happens to look like JSON, so a truncated or embellished payload becomes a parse failure; the label set can drift outside your enum; and the confidence numbers the model volunteers are not calibrated, so a 0.9 means nothing you can branch on in code. Bespoke ML models give you exactly the output shape you want, but each one is a separate training pipeline, deployment, and monitoring surface.

A decision engine sits in between: probabilistic perception and judgment, deterministic interface. The behavior you care about most is determinism — the same request returns the same answer, every time. That single property is what makes unit tests meaningful, lets you replay a production incident against the exact state that caused it, and gives you an audit trail that stands up to review. It also means you can safely put the decision in a hot path, because the system isn’t sampling from a distribution behind your back.

DecisionNode frames this as a “System One” decision model: fast, pattern-driven judgment that returns a typed verdict instead of a paragraph. Instead of asking a model to describe what it sees and then parsing that description, you ask a direct question with a defined answer space and get the answer back.

Inside the Decision API: Typed Outputs, Calibrated Confidence, and Deterministic Replay

The integration surface is intentionally small. Developers POST state and questions to a single HTTPS endpoint, /v1/decide, and receive schema-valid typed answers in one pass — no multi-turn negotiation, no tool-calling loop, no second request to reformat the result. Questions are defined in code, which means the schema your service depends on lives in your repository and is versioned with your application, not buried in a prompt string someone edited in a dashboard.

The interesting part is what calibrated confidence unlocks. Because each answer carries a probability you can trust as a probability, branching logic becomes explicit rather than heuristic: above a threshold, act instantly and log the decision; below it, route to a human, request more context, or take a conservative default. In practice this converts fuzzy automation into a tunable dial. A support triage service can auto-assign confidently labeled tickets and hold the uncertain ones; a moderation pipeline can block high-confidence violations, queue the ambiguous middle, and pass the clear cases through. You can read the full specification and output schema if you want to see how the request and response types are shaped — learn more.

Inputs are equally practical: text, JSON payloads, and up to 16 images or video frames per request, which is what makes perception-adjacent decisions possible without a separate vision stack. Two models cover different points on the cost/latency curve. DecisionNode Flash returns in roughly 5 ms server-side and 19 ms end to end at $0.035 per 1M input tokens; DecisionNode MoE runs at about 9 ms and $0.042 per 1M input tokens for heavier reasoning. Output tokens are always free — a sensible pricing choice when the output is a label rather than a paragraph — with batch discounts and a free daily tier for development.

For integration, SDKs exist for TypeScript, Python, Go, Ruby, and curl, plus MCP tools and webhooks for agent and automation workflows. When a control loop needs more than 10 decisions per second — drones, robots, simulators, machine monitoring — sessions over WebSocket replace request/response. Optional boosters extend the base model with human age estimation, AI-generated image detection, face detection and recognition, OCR, depth, and segmentation, so specialized perception doesn’t need its own vendor.

Decision Engines in Production: Triage, Trust, and Real-Time Control

The clearest wins are wherever a human currently reads something and picks from a short list. Ticket routing and triage is the canonical example: a choice output over your existing queue labels, a score for priority, and a confidence value that decides whether the ticket is auto-assigned or escalated to a duty engineer. Compare that to a chat model prompted for the same label — the failure mode is not “wrong answer” so much as “answer your parser can’t read at 3 a.m.”

Trust-and-safety work benefits from the probability output specifically. Fraud and promo-abuse checks, content moderation, and account gating all want a number they can compare against a business threshold that finance and risk can actually agree on. Because the same request always produces the same answer, a disputed decision can be reproduced exactly — an underrated requirement when compliance asks why a specific order was held.

Operations and physical systems are the other frontier. Quality control on production lines, warehouse monitoring, and traffic analysis all depend on locating things: a point for the defect, a box for the pallet that shouldn’t be in that aisle. Order and shipping decisions — split, hold, upgrade, re-route — map cleanly onto choice and score outputs with confidence-aware fallbacks. And for AI agent builders, the pattern that matters most is decide before acting: gate a tool call on a typed decision with a known confidence instead of letting the agent narrate its own permission. An agent that asks “is this action within policy — yes or no, and how sure are you?” gets a cheaper, faster, and more auditable answer than one reasoning in prose and hoping the conclusion holds.

Teams that adopt this pattern often describe the same migration: a rules file that had grown to hundreds of hand-tuned conditions, plus a prompt-and-parse layer bolted on for the cases the rules couldn’t express, replaced by a handful of declared questions and threshold constants in config. The decision logic becomes readable, the latency becomes predictable, and the confidence values give the on-call engineer something concrete to tune when behavior needs adjusting.