Sentinel model API · v1 · private beta
One call, agents inside.
Send a task to the Sentinel model and get the finished work back. Inside the call, agents plan, write and run code in a sandbox, read public web pages and check their own work. The API speaks the OpenAI chat format, so existing clients work by changing the base URL. Sentinel is built on open-weight base models; every response names the one it ran on.
https://getsentinel.ai/v1Bearer sk_sig_…AuthAuthenticate
Use the API key from your account page; it is the same key as the Signal API. Send it on every request:
Authorization: Bearer sk_sig_xxxxxxxxxxxxxxxxxxxxxxxx
CallSend a task
POST/v1/chat/completionsOne request is one job. Describe the result you want; Sentinel decides the steps. Model id sentinel runs the default base; GET /v1/models lists the others you can pick.
curl https://getsentinel.ai/v1/chat/completions \
-H "Authorization: Bearer $SENTINEL_API_KEY" \
-H "content-type: application/json" \
-d '{"model": "sentinel", "messages": [{"role": "user",
"content": "Write fib.py that prints the 30th Fibonacci number, run it, and reply with the number."}]}'from openai import OpenAI
client = OpenAI(base_url="https://getsentinel.ai/v1", api_key=SENTINEL_API_KEY)
r = client.chat.completions.create(model="sentinel", messages=[{"role": "user", "content": "..."}])
print(r.choices[0].message.content)The response is a standard chat.completion with one extra object describing the run:
{
"choices": [{ "message": { "role": "assistant", "content": "832040" }, "finish_reason": "stop" }],
"usage": { "prompt_tokens": 9120, "completion_tokens": 58, "total_tokens": 9178 },
"sentinel": { "call_id": "call_…", "base_model": "…", "steps": 3, "tools_used": ["write_file", "run"], "stopped": "done" }
}StreamWatch the work
With "stream": true the agents' progress (tool calls, notices) arrives as reasoning_content deltas while they work, and the answer arrives as content at the end. Add "stream_options": {"include_usage": true} for a final usage chunk. Closing the stream stops the work.
InsideWhat the agents can use
- A private scratch folder for the call: create, read and edit files in it.
run: shell commands in that folder, in a sandbox with Python and the standard command-line tools, and no network.web_fetch: public web pages over http and https.- Planning and parallel helpers for larger jobs.
They cannot reach the internet from run, any private service, or anything outside the folder. The folder is deleted within 24 hours, so return what you need in the answer. Tools you define in the request are not executed; Sentinel uses its own.
LimitsLimits and errors
Free accounts get 25 calls a calendar month (UTC). One call at a time per key. Each call runs at most 15 steps and 15 minutes, with up to 4,096 tokens per step; requests are capped at 256 KB. A call counts toward your month only if Sentinel accepted it.
GET/v1/usageYour plan, calls this month, what is left and the tokens used.
401 missing or unknown key · 400 no messages · 413 body too large · 429 with quota_exceeded (month used up) or rate_limit (a call is already running, or Sentinel is busy; honour Retry-After) · 502/503 the model is unreachable; try again shortly.
How we test it: One Call, a Whole Job →