System One

Typed decisions on /v1/systemone

System One models do not write text. You send a state — the situation to decide about — and a set of typed questions; the model answers every question in a single forward pass with calibrated probabilities. No prompt engineering to force a label, no free text to parse, no JSON to repair. Same API key and prepaid balance as every other QuickSilver Pro model.

When to use it

  • Routing — send a request to the right model, queue or team, and fall back when the top probability is low.
  • Classification and triage — tickets, emails, leads, documents.
  • Scoring — rate content against a scale you describe.
  • Guardrails and moderation — policy checks as probabilities you can threshold, not a yes/no you have to trust.
  • Agent next-step selection — pick the next tool or action from a fixed set.

For anything generative — answers, summaries, code, tool calls — use a chat model. A Chat Completions call to a System One model is rejected, and a System One request to a chat model is too.

Models

  • jev-1.13 Jev 1.13 by TypeSafe. 32K context. $0.042 per 1M input tokens; output tokens free.

Typical end-to-end latency is around 2–3 seconds per call. Responses are not streamed.

Request

POST https://api.quicksilverpro.io/v1/systemone with Authorization: Bearer <your QSP key> and a JSON body:

  • model — a System One model ID, e.g. jev-1.13.
  • state — the situation to decide about. Any JSON: a string or an object (arrays work too).
  • questions — an object mapping your question IDs to questions, up to 64 per call. IDs must match ^[A-Za-z0-9_-]{1,64}$. Each question has a type (choice, score or noul), an instructions string, and — depending on the type — a criteria.

No other fields are accepted: there is no stream (only false is allowed), metadata or user. The body is capped at 256 KiB.

The three question types

choice — pick one of your options

criteria is an object mapping each option to a description. The answer carries the picked choice, a probability per option and a confidence.

json
"greeting": {
  "type": "choice",
  "instructions": "Is the state a greeting?",
  "criteria": {"yes": "it is a greeting", "no": "it is not a greeting"}
}

// answer
"greeting": {"type": "choice", "choice": "yes",
             "probabilities": {"no": 0.07, "yes": 0.93}, "confidence": 0.87}

score — place the state on your scale

criteria is a list of scale anchors, in order. The answer's score is the 0-based index of the chosen anchor, with a probability per index and a legend mapping each index back to its anchor. (An object here instead of a list is rejected with Invalid request at questions.<id>.criteria.)

json
"urgency": {
  "type": "score",
  "instructions": "How urgent is this ticket?",
  "criteria": ["not urgent", "somewhat urgent", "very urgent"]
}

// answer (state: "Customer: my payment failed twice and I need this fixed today")
"urgency": {"type": "score", "score": 2,
            "probabilities": {"0": 0, "1": 0, "2": 1}, "confidence": 1,
            "legend": {"0": "not urgent", "1": "somewhat urgent", "2": "very urgent"}}

noul — a yes-leaning probability

No criteria needed. The answer is a single probability-like number between 0 and 1 in noul.

json
"urgent": {
  "type": "noul",
  "instructions": "Does this ticket need a reply within the hour?"
}

// answer
"urgent": {"type": "noul", "noul": 0.69}

Every requested question is answered, keyed by the ID you chose. Answers may also carry probabilities, confidence and legend where the model provides them.

curl

shell
curl https://api.quicksilverpro.io/v1/systemone \
  -H "Authorization: Bearer $QSP_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "jev-1.13",
    "state": "hi",
    "questions": {
      "greeting": {
        "type": "choice",
        "instructions": "Is the state a greeting?",
        "criteria": {"yes": "it is a greeting", "no": "it is not a greeting"}
      }
    }
  }'

A production response to that request. usage.costis the call's price in USD — input tokens at the published rate, output free.

json
{
  "id": "so-45a870bb532d4a72b41404cc8911c72e",
  "model": "jev-1.13",
  "answers": {
    "greeting": {
      "type": "choice",
      "choice": "yes",
      "probabilities": {"no": 0.07, "yes": 0.93},
      "confidence": 0.87
    }
  },
  "usage": {
    "input_tokens": 314,
    "output_tokens": 33,
    "cost": 0.000013188,
    "currency": "USD"
  }
}

Python

It is a plain HTTPS JSON endpoint — use requests or httpx, not the OpenAI SDK's chat client.

python
import os, requests

resp = requests.post(
    "https://api.quicksilverpro.io/v1/systemone",
    headers={"Authorization": f"Bearer {os.environ['QSP_KEY']}"},
    json={
        "model": "jev-1.13",
        "state": {
            "ticket": "I was charged twice for my subscription this month.",
            "customer_plan": "pro",
        },
        "questions": {
            "queue": {
                "type": "choice",
                "instructions": "Which team should handle this ticket?",
                "criteria": {
                    "billing": "payments, charges, refunds, invoices",
                    "technical": "bugs, errors, integrations",
                    "account": "login, email, profile changes",
                },
            },
            "severity": {
                "type": "score",
                "instructions": "How severe is the problem for the customer?",
                "criteria": ["cosmetic", "annoying", "blocks some work", "blocks all work"],
            },
            "urgent": {
                "type": "noul",
                "instructions": "Does this ticket need a reply within the hour?",
            },
        },
    },
    timeout=30,
)
resp.raise_for_status()
data = resp.json()

queue = data["answers"]["queue"]
if queue["probabilities"][queue["choice"]] < 0.6:
    queue_name = "human-review"          # low confidence: escalate
else:
    queue_name = queue["choice"]
print(queue_name, data["answers"]["severity"]["score"], data["answers"]["urgent"]["noul"])
print(data["usage"])                     # input_tokens, output_tokens, cost, currency

With httpx the call is the same shape: httpx.post(url, headers=..., json=..., timeout=30).

Billing

  • Input tokens only.The state and the questions are billed at the model's input rate; output tokens are free.
  • Every successful response carries usage.cost (USD, with usage.currency) computed from input_tokens at the published rate — the 314-token example above cost $0.000013188. Reconcile it against /pricing.json.
  • Spend comes out of the same prepaid balance as chat and image calls — one key, one bill. A call that returns an error is not billed.
  • Put several questions about the same state into one call: the state is billed once per call, not once per question.

Errors

Errors use the same shape as the rest of the API: {"error": {"message", "type", "code"}}.

StatusMeaningWhat to do
400Invalid requestThe body is not a JSON object, is missing state or questions, carries a field the endpoint does not accept (metadata, user, anything else), asks for streaming, or names a model that is not a System One model. When the model rejects a question the message names the exact path, e.g. "Invalid request at questions.greeting.criteria." — usually criteria of the wrong shape for the question type.
400too_long"Input exceeds this model's 32,000-token context." The state plus all questions did not fit the context window. Trim the state or split the questions across calls.
401Authentication failedMissing or invalid API key. Send Authorization: Bearer <your QSP key> — the same key you use for every other model.
402Insufficient balanceYour prepaid balance cannot cover the call. Top up in the dashboard; System One calls draw on the same balance as the rest of the catalog.
405Method not allowedOnly POST (and CORS preflight OPTIONS) is accepted on /v1/systemone.
413Body too largeThe request body exceeds 256 KiB. Send a smaller state or fewer questions per call.
429Rate limitedToo many requests on your key, or the model is briefly rate limited. Back off and retry; honor Retry-After when present.
503Unavailable"The model is temporarily unavailable." Nothing is billed for a call that did not return a complete answer. Retry shortly and check /status.