Overview
Instant is the default user-facing model. Use it for general questions, short factual lookups, summaries, and conversational tasks. Bills usage in rungs (one rung = one byte processed), so request size and billing stay aligned.
When you ask for live evidence via web_search, retrieved sources come back on the response payload with an evidence_verdict. If retrieved sources disagree, Instant declines to take a side rather than guess.
Endpoint
POST https://evaesi.dev/api/v1/responsesPass "model": "instant" in the JSON body, or omit model entirely, Instant is the default.
Capabilities
- General-purpose chat and analysis
- Server-sent event streaming via
stream: true - Live evidence retrieval via
web_search: true - Citations returned on the response with stance and source-tier metadata
- Same-origin sources lookup via
sources_urlwhile the request stays resident
Batch and tool-calling are not yet exposed for any model. Treat both as unavailable until they land in the public release notes.
Limits
| Field | Value |
|---|---|
| Max input rungs | 100,000 |
| Max output rungs | 32,000 |
| Context window | 4,096 model bytes (billing rungs are a separate unit) |
| Streaming | Yes |
| Batch | No. The route is mounted but returns 503 EVA_UNAVAILABLE |
| Tools | No |
Prompt validation enforces a 100,000-byte hard cap on the prompt field at the API edge; over-size prompts return 400 PROMPT_TOO_LARGE. Empty prompts return 400 EMPTY_PROMPT.
Billing
Instant runs at the base rate, multiplier 1.0×. Input and output rungs are metered separately and reported on both the response body (usage object) and headers.
Headers on a successful non-stream response:
x-evaesi-input-rungs: 29
x-evaesi-output-rungs: 118
x-evaesi-total-rungs: 147
x-ratelimit-limit: 300
x-ratelimit-remaining: 287The request
| Field | Type | Required | Description |
|---|---|---|---|
prompt | string | Yes | Prompt text. Max 100,000 bytes. |
model | string? | No | Optional. Defaults to instant. |
max_output_rungs | u64? | No | Output cap, validated against the model's 32,000 limit (400 INVALID_REQUEST above it). Falls back to the model output limit. |
web_search | bool | No | Request live retrieval and citations. |
stream | bool? | No | Server-sent event streaming on the same route. |
Response
{
"request_id": "req_8f3a...",
"content": "Generated answer...",
"sources": [],
"sources_url": "/api/v1/sources/req_8f3a...",
"evidence_verdict": null,
"usage": {
"input_rungs": 29,
"output_rungs": 118,
"total_rungs": 147
},
"model": "instant"
}sources_url returns the same-origin path /api/v1/sources/{request_id} while the gateway still holds the live evidence bundle.
Examples
cURL
curl -X POST https://evaesi.dev/api/v1/responses \
-H "Authorization: Bearer esi_dev_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Summarise the news from the last 24 hours.",
"model": "instant",
"web_search": true,
"max_output_rungs": 1024
}'Python
import requests
response = requests.post(
"https://evaesi.dev/api/v1/responses",
headers={"Authorization": "Bearer esi_dev_YOUR_KEY"},
json={
"prompt": "Summarise the news from the last 24 hours.",
"model": "instant",
"web_search": True,
"max_output_rungs": 1024,
},
)
data = response.json()
print(data["content"])
print(f"sources: {len(data['sources'])}")JavaScript
const response = await fetch("https://evaesi.dev/api/v1/responses", {
method: "POST",
headers: {
"Authorization": "Bearer esi_dev_YOUR_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
prompt: "Summarise the news from the last 24 hours.",
model: "instant",
web_search: true,
}),
});
const data = await response.json();
console.log(data.content);