[Home](/) / API documentation

# API documentation

Every page supports HTML, Markdown, and JSON. JSON twins match `/api/v1`.

## Requests

```bash
curl http://127.0.0.1:8086/types/587-rifter
curl http://127.0.0.1:8086/types/587-rifter.md
curl http://127.0.0.1:8086/types/587-rifter.json
curl -H 'Accept: text/markdown' http://127.0.0.1:8086/types/587-rifter
curl http://127.0.0.1:8086/api/v1/types/587
curl 'http://127.0.0.1:8086/api/v1/types/34/prices?region=10000002'
curl 'http://127.0.0.1:8086/api/v1/types/34/history?days=30'
curl -X POST http://127.0.0.1:8086/api/v1/appraise -H 'content-type: application/json' -d '{"text":"Tritanium 1000"}'
curl 'http://127.0.0.1:8086/api/v1/search?q=rifter'
```

## MCP

Connect an MCP client to `http://127.0.0.1:8086/mcp`. It uses stateless Streamable HTTP, needs no key or login, and exposes the same JSON as the site.

### Claude Code configuration

Save this as `.mcp.json` in a Claude Code project.

```json
{
  "mcpServers": {
    "evesite": {
      "type": "http",
      "url": "http://127.0.0.1:8086/mcp"
    }
  }
}
```

### Node client calls

This runnable Node example uses the pinned `@modelcontextprotocol/client` package.

```javascript
import { Client, StreamableHTTPClientTransport } from "@modelcontextprotocol/client";

const client = new Client({ name: "evesite-example", version: "1.0.0" });
await client.connect(new StreamableHTTPClientTransport(new URL("http://127.0.0.1:8086/mcp")));

await client.callTool({ name: "search", arguments: { q: "rifter" } });
await client.callTool({ name: "get_type", arguments: { type_id: 587 } });
await client.callTool({ name: "get_blueprint", arguments: { blueprint_id: 691 } });
await client.callTool({ name: "get_prices", arguments: { type_id: 34, region_id: 10000002 } });
await client.callTool({ name: "get_history", arguments: { type_id: 34, region_id: 10000002, days: 30 } });
await client.callTool({ name: "list_regions", arguments: {} });
await client.callTool({ name: "appraise", arguments: { text: "Tritanium 1000", region_id: 10000002, station_id: 60003760 } });

await client.close();
```

## Appraisal response

The response contains `region`, `station`, `snapshot`, `lines`, and `totals`. Each line contains `input`, `type`, `quantity`, `sell`, `buy`, `sell_total`, `buy_total`, `volume_m3`, and `source`.

## Error bodies

```json
{"error":"Not Found","status":404}
{"error":"Too Many Requests","status":429,"detail":"Rate limit exceeded"}
```

Limits: 600 requests per minute per IP. A 429 response includes `Retry-After`.

SDE build 3494416, released 2026-09-04.
