Skip to content
DecisionNodeDecisionNdedocs
  • Guides
  • API reference
  • Examples
  • Playground

start here

  • QuickstartGet startedGet an API key, send one request with three questions, and branch your code on the typed answers. Plain HTTPS, no SDK to install.
  • POST /v1/decideAPI referenceAnswer typed questions about a state and optional images. One request, one buffered JSON response, one answer per question.
  • QuestionsConceptsQuestions say what to decide. Each one has a type that fixes the shape of its answer: a choice from your options, a score on your scale, a…
  • ConfidenceConceptsProbabilities are calibrated per question type, so a threshold means what it says.
  • ImagesConceptsSend images and text in the same request. The model reads printed and handwritten text, amounts, dates, objects and layout, and answers…
  • Batch jobsPatternsSend up to 10,000 requests in one file and collect the answers later, at half the live price.
  • Pricing and billingYou pay for input tokens only. Output is free because the model generates no text.
↑↓ moveopen7 suggestions
Get API keyGet API key
DecisionNodeDecisionNde

Get started

  • Introduction
  • Quickstart
  • Playground
  • Console and keys
  • With coding agents
  • Examples

Concepts

  • State
  • Questions
  • Choice
  • Score
  • Truth
  • Number
  • Images
  • Confidence
  • Determinism

Models

  • DecisionNode-1.0
  • DecisionNode-1.0 Flash
  • Limits
  • Versions
  • Dedicated capacity

Patterns

  • Confidence-gated routing
  • Fan-out
  • Guardrails
  • Control loops
  • Batch jobs

API reference

  • Overview
  • POST/v1/decide
  • GET/v1/models
  • Errors
  • Safety check
  • Rate limits

Sessions API

  • Sessions overview
  • POSTOpen a session
  • WSStream frames
  • DELEnd a session

Batch API

  • The batch object
  • POSTCreate a batch
  • POSTAdd requests
  • POSTFinalize a batch
  • GETRetrieve a batch
  • GETGet batch results
  • POSTCancel a batch
  • GETList batches

Pricing and billing

  • Pricing and billing

Policies

  • Responsible use
  • Data and privacy

Migrate

  • Coming from a Jev-shaped API
  • Benchmarks
  • Pricing
  • Playground
Get API key
  • Guides
  • API reference
  • Examples
  • Playground

Get started

  • Introduction
  • Quickstart
  • Playground
  • Console and keys
  • With coding agents
  • Examples

Concepts

  • State
  • Questions
  • Choice
  • Score
  • Truth
  • Number
  • Images
  • Confidence
  • Determinism

Models

  • DecisionNode-1.0
  • DecisionNode-1.0 Flash
  • Limits
  • Versions
  • Dedicated capacity

Patterns

  • Confidence-gated routing
  • Fan-out
  • Guardrails
  • Control loops
  • Batch jobs

API reference

  • Overview
  • POST/v1/decide
  • GET/v1/models
  • Errors
  • Safety check
  • Rate limits

Sessions API

  • Sessions overview
  • POSTOpen a session
  • WSStream frames
  • DELEnd a session

Batch API

  • The batch object
  • POSTCreate a batch
  • POSTAdd requests
  • POSTFinalize a batch
  • GETRetrieve a batch
  • GETGet batch results
  • POSTCancel a batch
  • GETList batches

Pricing and billing

  • Pricing and billing

Policies

  • Responsible use
  • Data and privacy

Migrate

  • Coming from a Jev-shaped API
  1. docs
  2. /
  3. Batch API

The batch object

A batch holds up to 10,000 /v1/decide requests that run when there is room, at half the live price. This page defines the object every batch endpoint returns, its states, its counters and its limits.

on this page5 sections
  1. The object
  2. States
  3. Limits
  4. Billing
  5. What stays the same
  • POST /v1/batches

    What it does
    Creates a draft from a JSON Lines file or a JSON array
  • POST /v1/batches/{id}/requests

    What it does
    Adds requests to a draft
  • POST /v1/batches/{id}/finalize

    What it does
    Locks the draft and queues it
  • GET /v1/batches/{id}

    What it does
    Returns the batch: state, counters, timestamps
  • GET /v1/batches/{id}/results

    What it does
    Returns one result line per request
  • POST /v1/batches/{id}/cancel

    What it does
    Cancels what has not started
  • GET /v1/batches

    What it does
    Lists your key's batches, newest first
Batch endpoints
EndpointWhat it does
POST /v1/batchesCreates a draft from a JSON Lines file or a JSON array
POST /v1/batches/{id}/requestsAdds requests to a draft
POST /v1/batches/{id}/finalizeLocks the draft and queues it
GET /v1/batches/{id}Returns the batch: state, counters, timestamps
GET /v1/batches/{id}/resultsReturns one result line per request
POST /v1/batches/{id}/cancelCancels what has not started
GET /v1/batchesLists your key's batches, newest first

The object#

{
  "id": "batch_01J9ZB8Q3T",
  "state": "running",
  "counters": {
    "requests": 3,
    "queued": 1,
    "in_progress": 1,
    "completed": 1,
    "failed": 0,
    "expired": 0,
    "cancelled": 0
  },
  "created_at": "2026-10-06T09:12:04Z",
  "finalized_at": "2026-10-06T09:12:31Z",
  "expires_at": "2026-10-07T09:12:31Z",
  "ended_at": null,
  "results_url": null,
  "results_expire_at": null,
  "price_factor": 0.5,
  "usage": { "input_tokens": 47, "output_tokens": 0 },
  "error": null
}
idstring
The batch id, batch_ and 10 characters.
statestring
One of draft, queued, running, completed, failed, cancelled or expired. See States.
countersobject
How many requests are where. They add up to requests.
requestsinteger
Requests in the batch.
queuedinteger
Finalized and waiting to run. 0 while the batch is a draft.
in_progressinteger
Running now.
completedinteger
Answered: their result line has status 200 and they are billed.
failedinteger
Ended with an error status: refused when uploaded, refused by a live check, or failed on our side.
expiredinteger
Unfinished 24 hours after finalize. Not billed.
cancelledinteger
Not started when you cancelled. Not billed.
created_atstring
When the batch was created, ISO 8601 in UTC.
finalized_atstring | null
When you finalized it. null while it is a draft.
expires_atstring | null
finalized_at plus 24 hours: requests still unfinished then expire. A cut-off, not an estimate of when the batch finishes. null while it is a draft.
ended_atstring | null
When the batch reached completed, failed, cancelled or expired. null until then.
results_urlstring | null
Where to download the results: the results endpoint of this batch. null until the batch has ended.
results_expire_atstring | null
ended_at plus 7 days. After it the results are deleted and the results endpoint answers 410; the counters stay.
price_factornumber
The share of the live price a completed request is billed at: 0.5.
usageobject
What the batch has billed so far: input_tokens, summed over the completed requests, and output_tokens, always 0.
errorobject | null
Set when the batch is failed: error_type (batch_failed) and a message that says what happened. null otherwise.

States#

A batch moves one way: draft to queued to running, then to one of four ends. A batch can end completed with some failed lines: each line carries its own status.

  • draft

    Meaning
    Created; takes requests. Nothing runs and nothing is billed
    What you do
    Add requests, then finalize. Cancel a draft you will not use
    Ended
    No
  • queued

    Meaning
    Finalized, waiting to run
    What you do
    Poll
    Ended
    No
  • running

    Meaning
    At least one request is in progress
    What you do
    Poll; the counters move as requests finish
    Ended
    No
  • completed

    Meaning
    Every request has a result line
    What you do
    Download the results within 7 days
    Ended
    Yes
  • failed

    Meaning
    The batch could not be run. error says why
    What you do
    Requests that finished before the failure are in the results and billed; the rest are 500 lines with the reason in x-decisionnode-error. Resubmit those
    Ended
    Yes
  • cancelled

    Meaning
    You cancelled it
    What you do
    Requests that had not started are cancelled lines and were not billed; requests already running finished and were billed
    Ended
    Yes
  • expired

    Meaning
    Requests were still unfinished 24 hours after finalize
    What you do
    Finished requests are in the results and billed; the rest are expired lines, not billed. Resubmit them
    Ended
    Yes
Batch states
StateMeaningWhat you doEnded
draftCreated; takes requests. Nothing runs and nothing is billedAdd requests, then finalize. Cancel a draft you will not useNo
queuedFinalized, waiting to runPollNo
runningAt least one request is in progressPoll; the counters move as requests finishNo
completedEvery request has a result lineDownload the results within 7 daysYes
failedThe batch could not be run. error says whyRequests that finished before the failure are in the results and billed; the rest are 500 lines with the reason in x-decisionnode-error. Resubmit thoseYes
cancelledYou cancelled itRequests that had not started are cancelled lines and were not billed; requests already running finished and were billedYes
expiredRequests were still unfinished 24 hours after finalizeFinished requests are in the results and billed; the rest are expired lines, not billed. Resubmit themYes

Timing

Results come with a multi-hour delay. There is no set time at which a batch runs or finishes, so poll for it. Requests still unfinished 24 hours after a batch is finalized expire: they are not billed, and you can resubmit them.

Limits#

Every model's entry at GET /v1/models publishes these in its batch object, so code can read them instead of hard-coding them.

  • Requests per batch

    Value
    10,000
    Over the limit
    400 api_usage_error; nothing is added
  • Upload per batch

    Value
    256 MB, images included
    Over the limit
    413 request_too_large_error
  • One add call

    Value
    10 MiB
    Over the limit
    413 request_too_large_error
  • custom_id

    Value
    1 to 512 characters, unique in the batch
    Over the limit
    400 api_usage_error; nothing is added
  • Active batches per key

    Value
    10 (draft, queued or running)
    Over the limit
    429 batch_limit_exceeded
  • Requests in active batches per key

    Value
    100,000 across your drafts, queued and running batches
    Over the limit
    429 batch_limit_exceeded when you create, add or finalize; nothing from the call is applied
  • Each request

    Value
    The live limits of /v1/decide: tokens, images, options, levels
    Over the limit
    That line gets the live 400; the rest run
  • Unfinished requests

    Value
    Expire 24 hours after finalize
    Over the limit
    expired lines, not billed
  • Results

    Value
    Kept 7 days after the batch ends
    Over the limit
    410 results_expired; the counters stay
Batch limits
LimitValueOver the limit
Requests per batch10,000400 api_usage_error; nothing is added
Upload per batch256 MB, images included413 request_too_large_error
One add call10 MiB413 request_too_large_error
custom_id1 to 512 characters, unique in the batch400 api_usage_error; nothing is added
Active batches per key10 (draft, queued or running)429 batch_limit_exceeded
Requests in active batches per key100,000 across your drafts, queued and running batches429 batch_limit_exceeded when you create, add or finalize; nothing from the call is applied
Each requestThe live limits of /v1/decide: tokens, images, options, levelsThat line gets the live 400; the rest run
Unfinished requestsExpire 24 hours after finalizeexpired lines, not billed
ResultsKept 7 days after the batch ends410 results_expired; the counters stay

Billing#

A completed request is billed its usage.input_tokens at half the live price of its model; output is free. Failed, expired and cancelled requests cost nothing. The batch's usage sums what it has billed. The three-ticket batch above billed 138 input tokens. See Pricing and billing.

What stays the same#

Every line is a live /v1/decide request: the same answers for the same body on the same model version, the same calibration, the same errors, the same safety check. Images work per line as on the live call. Batch jobs take every question type, number questions included.

previousEnd a sessionnextCreate a batch

DecisionNode is built and run by Bynn Intelligence, Inc.

  • Home
  • Playground
  • Examples
  • Console
  • Responsible use
  • Terms
  • Acceptable use
  • Privacy
  • Data processing
  • Defence addendum
  • Cookies

on this page

  1. The object
  2. States
  3. Limits
  4. Billing
  5. What stays the same