Skip to content
kenari.

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:

Terminal window
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.

FieldTypeRequiredDescription
modelstringyesA System One model id.
statestring, object or arrayyesThe text or data to evaluate.
questionsobjectyesOne 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:

FieldTypeRequiredDescription
typestringyesnoul, choice or score.
instructionsstring, object or arrayyesThe question itself.
criteriaobject or arraynoFor noul, true and false descriptions. For choice, a map of the options. For score, an ordered rubric.

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 }
}
Terminal window
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?"
}
}
}'

There is no SDK method for this endpoint, so use requests.

import os
import 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"])
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();

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.

StatusCodeWhen
400bad_requestmodel 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.
400model_not_foundThe model is listed but no provider serves it right now. Retry later.

See Errors for the shared codes, such as all_providers_failed.