Console coming soon
Browse documentation

Developer docs

Start from a live reference page.

Phone layout stays search-first: pick a page here, then read it in a full single-column view.

Getting Started

Models

API Reference

Operations

Enterprise

Console

Policies

EvaEsi Instant

Fast general chat with live, cited evidence. The default model.

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/responses

Pass "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_url while 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

FieldValue
Max input rungs100,000
Max output rungs32,000
Context window4,096 model bytes (billing rungs are a separate unit)
StreamingYes
BatchNo. The route is mounted but returns 503 EVA_UNAVAILABLE
ToolsNo

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: 287

The request

FieldTypeRequiredDescription
promptstringYesPrompt text. Max 100,000 bytes.
modelstring?NoOptional. Defaults to instant.
max_output_rungsu64?NoOutput cap, validated against the model's 32,000 limit (400 INVALID_REQUEST above it). Falls back to the model output limit.
web_searchboolNoRequest live retrieval and citations.
streambool?NoServer-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);