Skip to content
NewTry RouterPlus with free creditsTry playground →
← All posts · Launch

ScaleDown on RouterPlus from day 0

Extract, summarize and classify through one gateway

ScaleDown's constrained decoding models are on RouterPlus from day 0. They don't write free-form prose. Each one answers in a fixed shape you define: the fields you ask it to extract, a summary, or a calibrated probability for each option of a decision. That makes them a good fit for the steps of a pipeline that feed other code, such as routing, triage, moderation, tagging and document intake.

The models

modelwhat it doesendpointinput
scaledown/extract-1Pulls the fields you define out of text, an image or a PDFfields set by a json_schema response format/v1/chat/completionstext, image, PDF
scaledown/summarize-1Writes an abstractive summaryinstructions in the system message/v1/chat/completionstext, image, PDF
scaledown/classify-1Answers typed questions about one input: pick one option, yes or no, or a score on a scalea calibrated probability for every option/v1/decisionstext, image

All three take up to 1M tokens of context and cost $0.05 per million input tokens. Output is free. That is ScaleDown's own price, with no markup.

Extract fields from a document

Use any OpenAI SDK with the RouterPlus base URL. Each property of the schema is a field to find, and its description tells the model what to look for. The answer's content is a JSON string of what it found.

from openai import OpenAI

client = OpenAI(base_url="https://api.routerplus.com/v1", api_key="<your RouterPlus key>")

resp = client.chat.completions.create(
    model="scaledown/extract-1",
    messages=[{"role": "user", "content": "Alice Martin moved from Lyon to Paris last year."}],
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "people_places",
            "schema": {
                "type": "object",
                "properties": {
                    "person": {"type": "string", "description": "a person's name"},
                    "city": {"type": "string", "description": "a city"},
                },
            },
        },
    },
)
print(resp.choices[0].message.content)  # {"entities": [{"text": "Alice Martin", "type": "person", ...}, ...]}

Summarize an image or a PDF

Send the file the usual OpenAI way, as an image_url part or a file part with base64 data, next to a text part that says what you want. RouterPlus hands it to ScaleDown, which reads it with OCR.

curl https://api.routerplus.com/v1/chat/completions \
  -H "Authorization: Bearer $ROUTERPLUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "scaledown/summarize-1",
    "messages": [{"role": "user", "content": [
      {"type": "text", "text": "Summarize this invoice."},
      {"type": "file", "file": {"filename": "invoice.pdf", "file_data": "data:application/pdf;base64,JVBERi0xLjQ..."}}
    ]}]
  }'

Each request takes one image or PDF, as a base64 data URL. Set "stream": true if your client expects a stream. You get standard chat chunks, though the first one arrives when the summary is complete.

Classify with the decisions API

scaledown/classify-1 uses the decisions API. You send one state and as many questions as you need, and get one typed answer per question in a single call. The body is the same System One format that TypeSafe's Jev and the other decision models on RouterPlus use, so existing code only needs the model id changed.

curl https://api.routerplus.com/v1/decisions \
  -H "Authorization: Bearer $ROUTERPLUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "scaledown/classify-1",
    "state": "The shipping label printed upside down again and I need a new one today.",
    "questions": {
      "area": {"type": "choice", "instructions": "Which area is this about?",
               "criteria": {"logistics": "Shipping or delivery.", "product": "The item itself."}},
      "needs_reprint": {"type": "noul", "instructions": "Does the customer ask for a replacement?"},
      "urgency": {"type": "score", "instructions": "How urgent is it?",
                  "criteria": ["not urgent", "somewhat urgent", "very urgent"]}
    }
  }'
# the answer, trimmed
{"object": "decision", "model": "scaledown/classify-1",
 "answers": {
   "area":          {"type": "choice", "choice": "logistics", "confidence": 0.98, "probabilities": {...}},
   "needs_reprint": {"type": "noul", "noul": 0.9996},
   "urgency":       {"type": "score", "score": 1.1, "confidence": 0.87, "probabilities": {...}}},
 "usage": {"input_tokens": 718, "output_tokens": 3, "cost": ...}}

ScaleDown scores each question as its own call, so input tokens grow with the number of questions. A state can also carry an image or PDF, sent as base64 in state.document together with document_mime_type.

Availability

The models are listed on the RouterPlus models page. The decisions API docs cover the question formats in full, and the quickstart walks through your first call.

Prices are ScaleDown's as of October 13, 2026. Model behaviour follows ScaleDown's documentation.