System One
Ask typed questions about a piece of text or data and get one typed answer per question. System One models are decision models, not chat models. Because the request is not a chat request, this is kenari’s own contract and no OpenAI or Anthropic SDK method maps to it.
POST /v1/systemone
Only System One models are served here. Calling it with a chat model returns 400, and calling a chat endpoint with a System One id returns 400 that points here. List the current System One models with a public call that needs no key:
curl "https://kenari.id/v1/models?modality=systemone"A plain GET /v1/models does not list embedding, rerank, moderation or System One models. It does list chat, image, speech, transcription and video models. The examples below use jev-1-13-free, which is a free model. Swap in any id the call above returns. There is no streaming.
Request
Section titled “Request”| Field | Type | Required | Description |
|---|---|---|---|
model | string | yes | A System One model id. |
state | string, object or array | yes | The text or data to evaluate. |
questions | object | yes | One or more questions. Each key is a question id you choose, and the answer comes back under the same key. Up to 128 questions. |
The whole request body can be up to 512 KiB. Each question is an object:
| Field | Type | Required | Description |
|---|---|---|---|
type | string | yes | noul, choice or score. |
instructions | string, object or array | yes | The question itself. |
criteria | object or array | no | For noul, true and false descriptions. For choice, a map of the options. For score, an ordered rubric. |
Response
Section titled “Response”The response contains only model, answers and usage. model is the versioned id that answered, for example jev-1.13.0, and falls back to the id you requested. answers has one entry per question id. usage reports input_tokens and output_tokens.
{ "model": "jev-1.13.0", "answers": { "q": { "type": "noul", "noul": 0.91 } }, "usage": { "input_tokens": 12, "output_tokens": 20 }}Examples
Section titled “Examples”curl https://kenari.id/v1/systemone \ -H "Authorization: Bearer $KENARI_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "jev-1-13-free", "state": "a cat sitting on a rug", "questions": { "q": { "type": "noul", "instructions": "Is this a sentence about an animal?" } } }'Python
Section titled “Python”There is no SDK method for this endpoint, so use requests.
import osimport requests
resp = requests.post( "https://kenari.id/v1/systemone", headers={"Authorization": f"Bearer {os.environ['KENARI_API_KEY']}"}, json={ "model": "jev-1-13-free", "state": "a cat sitting on a rug", "questions": { "q": { "type": "noul", "instructions": "Is this a sentence about an animal?", } }, },)print(resp.json()["answers"])JavaScript
Section titled “JavaScript”const resp = await fetch("https://kenari.id/v1/systemone", { method: "POST", headers: { Authorization: `Bearer ${process.env.KENARI_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ model: "jev-1-13-free", state: "a cat sitting on a rug", questions: { q: { type: "noul", instructions: "Is this a sentence about an animal?", }, }, }),});const { answers } = await resp.json();Billing
Section titled “Billing”System One is billed per input token. Output tokens are reported and not billed. A free model such as jev-1-13-free charges Rp 0. See How billing works for how the estimate, the reservation and the price dimensions work.
Errors
Section titled “Errors”| Status | Code | When |
|---|---|---|
| 400 | bad_request | model is unknown or is not a System One model, state is missing or is not a string, object or array, questions is missing, empty or has more than 128 entries, a question has an unknown type or no instructions, or the body is over 512 KiB. |
| 400 | model_not_found | The model is listed but no provider serves it right now. Retry later. |
See Errors for the shared codes, such as all_providers_failed.