API Documentation | EVE Ref by thenug

Overview

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

Requests

curl https://eveindextools.com/types/587-rifter
curl https://eveindextools.com/types/587-rifter.md
curl https://eveindextools.com/types/587-rifter.json
curl -H 'Accept: text/markdown' https://eveindextools.com/types/587-rifter
curl https://eveindextools.com/api/v1/types/587
curl 'https://eveindextools.com/api/v1/types/34/prices?region=10000002'
curl 'https://eveindextools.com/api/v1/types/34/history?days=30'
curl -X POST https://eveindextools.com/api/v1/appraise -H 'content-type: application/json' -d '{"text":"Tritanium 1000"}'
curl -X POST https://eveindextools.com/api/v1/appraise -H 'content-type: application/json' -d '{"text":"Veldspar 100","reprocess":{"ore":5}}'
curl 'https://eveindextools.com/api/v1/industry?blueprint=691&runs=10&me=10&structure=raitaru'
curl 'https://eveindextools.com/api/v1/search?q=rifter'

MCP

Connect an MCP client to https://eveindextools.com/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.

{
  "mcpServers": {
    "evesite": {
      "type": "http",
      "url": "https://eveindextools.com/mcp"
    }
  }
}

Node client calls

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

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

const client = new Client({ name: "evesite-example", version: "1.0.0" });
await client.connect(new StreamableHTTPClientTransport(new URL("https://eveindextools.com/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.callTool({ name: "appraise", arguments: { text: "Veldspar 100", reprocess: { ore: 5 } } });
await client.callTool({ name: "industry_cost", arguments: { blueprint: "691", runs: 10, me: 10, structure: "raitaru" } });

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.

Send an optional reprocess object to value the same list as minerals, and the response gains a reprocess section with aggregated materials, per-line verdicts, and both totals. Omit it and the response is byte for byte what it was before reprocessing existed. Settings default to a plain 50% NPC station with no skills.

Error bodies

{"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.