API reference
Models
GET /v1/agents/models
Lists the models a session can run on, with an allowed flag for the caller's plan. Ids from this list go in model on POST /message.
Request
List models
curl -s "$SAI_API_URL/v1/agents/models" \
-H "Authorization: Bearer $SAI_API_KEY"Response
200 OK · ModelsJSON
{
"models": [
{
"id": "auto",
"name": "Sai Agent",
"provider": "anthropic",
"tier": "balanced",
"costTier": "$",
"allowed": true
},
{
"id": "anthropic/claude-sonnet-5",
"name": "Claude 5 Sonnet",
"provider": "anthropic",
"tier": "balanced",
"costTier": "$$",
"allowed": true
},
{
"id": "anthropic/claude-opus-5-5",
"name": "Claude 5.5 Opus",
"provider": "anthropic",
"tier": "reasoning",
"costTier": "$$$",
"allowed": true
},
{
"id": "google/gemini-3.8-flash",
"name": "Gemini 3.8 Flash",
"provider": "google",
"tier": "fast",
"costTier": "$",
"allowed": true
}
],
"default": "auto"
}The list is longer than shown; the ids above are real.
Free plan
The free plan runs on the Sai agent model only: omit model or pass auto. Upgrade to a paid plan to choose a model.
/models lists every other model with allowed: false, and sending one returns 403 from POST /message:
403 Forbidden · model_not_allowed_for_planJSON
{
"error": "model_not_allowed_for_plan",
"message": "The model \"anthropic/claude-opus-5-5\" is not available on the free plan. The free plan only supports the Sai agent model (\"auto\"); upgrade to a paid plan to choose a model.",
"allowedModels": ["auto"]
}Gotchas
- The model is per session and sticks until you pass a different one. You do not need to send
modelon every message. costTieris relative. Credit charged for a task is shown in the portal.- Call this once when you need a specific model, not before every task.