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
| model | what it does | endpoint | input |
|---|---|---|---|
scaledown/extract-1 | Pulls the fields you define out of text, an image or a PDFfields set by a json_schema response format | /v1/chat/completions | text, image, PDF |
scaledown/summarize-1 | Writes an abstractive summaryinstructions in the system message | /v1/chat/completions | text, image, PDF |
scaledown/classify-1 | Answers typed questions about one input: pick one option, yes or no, or a score on a scalea calibrated probability for every option | /v1/decisions | text, 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.
