eve contracts

API reference

Read-only JSON access to every public EVE contract we ingest, plus the analytics derived from them. No key, no sign-in, no registration — just GET requests.

Getting started

curl 'https://contracts.tovdc.com/api/v1/contracts?region_id=10000002&category=ship&sort=price&dir=asc'

Rate limits

120 requests per 60 seconds per IP. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset. Exceeding the limit returns 429 with a Retry-After header — please honour it rather than retrying immediately.

What's in scope

Only contracts ingested from CCP's public per-region endpoints are served. Contracts polled with a signed-in user's ESI token are private to that user and never appear in the API. Regions are polled on a staggered 30-minute cycle, so first_seen_at can lag CCP's date_issued by up to half an hour — use first_seen_at when you want “what's new”.

Contracts

Search and read public contracts.

GET/api/v1/contractscached 30s

Paginated search over every public contract we have ingested, across all EVE regions. Filters combine with AND. `q` matches the contract title OR the name of any included item, which is usually what you want — EVE contract titles are frequently blank or generic.

ParameterTypeDescription
region_idinteger[]Region id. Repeat or comma-separate for multiple. Also accepted as `region`.
typestring[]Contract type. Repeatable.One of: unknown, item_exchange, auction, courier, loan
statusstring[]Contract status. Repeatable. Omitted means everything except deleted/cancelled/reversed.One of: outstanding, in_progress, finished_issuer, finished_contractor, finished, cancelled, rejected, failed, deleted, reversed
availabilitystring[]Contract availability. Repeatable.One of: public, personal, corporation, alliance
categorystringMatch contracts containing at least one included item in this item category. Full list at /api/v1/categories.One of: ship, blueprint_original, blueprint_copy, blueprint, module, charge, drone, implant, skill, commodity, structure, structure_module, deployable, subsystem, fighter, skin, planetary, special_edition
qstringCase-insensitive substring match on contract title or included item names.
price_minnumberMinimum price in ISK.
price_maxnumberMaximum price in ISK.
issuer_corporation_idintegerOnly contracts issued by this corporation. Also accepted as `issuer_corp`.
sortstringSort column.One of: date_issued, date_expired, price, volume, collateralDefault: date_issued
dirstringSort direction.One of: asc, descDefault: desc
pageinteger1-based page number.Default: 1
page_sizeintegerResults per page, 10–200. Also accepted as `limit`.Default: 50
Response

{ data: ContractSummary[], meta: { page, page_size, total, total_pages } }

curl 'https://contracts.tovdc.com/api/v1/contracts?region_id=10000002&type=item_exchange&category=ship&sort=price&dir=asc'
GET/api/v1/contracts/{contract_id}cached 60s

Full contract record including the item list with blueprint metadata (runs, ME, TE, BPC/BPO) and resolved location names. 404s for contracts that are not public.

ParameterTypeDescription
contract_id*integerEVE contract id.
Response

{ data: ContractDetail }

curl 'https://contracts.tovdc.com/api/v1/contracts/234567890'

Analytics

Derived price, volume, and activity series.

GET/api/v1/analytics/pricescached 300s

Min/median/max unit price per hour, derived from outstanding single-item item_exchange contracts. Multi-item bundles are excluded — their total price says nothing about the unit value of any one item in them.

ParameterTypeDescription
type*stringItem type id or name.
region*stringRegion id or name.
daysintegerLookback window, 1–30.Default: 7
Response

{ data: [{ captured_at, min_price, median_price, max_price, sample_count, volume }], meta: {…} }

curl 'https://contracts.tovdc.com/api/v1/analytics/prices?type=PLEX&region=10000002&days=7'
GET/api/v1/analytics/volumecached 900s

Long-form daily counts of newly seen public contracts for the busiest regions. One row per (day, region).

ParameterTypeDescription
daysintegerLookback window, 1–30.Default: 30
top_regionsintegerHow many regions to include, ranked by activity. 1–50.Default: 8
Response

{ data: [{ day, region_id, region_name, contracts }], meta: {…} }

curl 'https://contracts.tovdc.com/api/v1/analytics/volume?days=14&top_regions=5'
GET/api/v1/analytics/issuerscached 900s

Leaderboard of public-contract issuers over a rolling window.

ParameterTypeDescription
daysintegerLookback window, 1–30.Default: 7
bystringGroup by corporation or by character.One of: corp, characterDefault: corp
limitintegerMax rows, 1–200.Default: 100
Response

{ data: [{ corporation_id | character_id, name, contracts, total_value }] }

curl 'https://contracts.tovdc.com/api/v1/analytics/issuers?days=7&by=corp&limit=25'
GET/api/v1/analytics/depthcached 60s

Currently outstanding single-item item_exchange contracts for one type, cheapest unit price first. This is the live view; /analytics/prices is the historical rollup.

ParameterTypeDescription
type*stringItem type id or name.
regionstringOptional region id or name filter.
limitintegerMax rows, 1–200.Default: 100
Response

{ data: [{ contract_id, region_id, region_name, quantity, price, unit_price, url }], meta: {…} }

curl 'https://contracts.tovdc.com/api/v1/analytics/depth?type=PLEX&limit=20'

Reference

Static lookups: regions, item types, filter codes.

GET/api/v1/regionscached 3600s

Every region id and name. Use `q` to search by name.

ParameterTypeDescription
qstringName substring filter.
Response

{ data: [{ region_id, name }] }

curl 'https://contracts.tovdc.com/api/v1/regions?q=Forge'
GET/api/v1/typescached 3600s

Resolve an item name to a `type_id` (or a `type_id` back to a name). Backed by the EVE Static Data Export, so it covers every published type.

ParameterTypeDescription
qstringName search, minimum 2 characters. Required unless `id` is given.
idintegerExact type id lookup.
limitintegerMax results, 1–100.Default: 25
Response

{ data: [{ type_id, name }] }

curl 'https://contracts.tovdc.com/api/v1/types?q=Skill%20Extractor'
GET/api/v1/categoriescached 86400s

Accepted values for the `category` parameter on /api/v1/contracts.

Response

{ data: [{ code, label, category_ids, is_blueprint_copy }] }

curl 'https://contracts.tovdc.com/api/v1/categories'

Meta

Service index and dataset health.

GET/api/v1cached 3600s

Lists every endpoint, the current rate limit, and links to the OpenAPI document and docs.

Response

{ data: { name, version, endpoints: {…}, rate_limit: {…} } }

curl 'https://contracts.tovdc.com/api/v1'
GET/api/v1/statscached 300s

Total and outstanding contract counts, contracts seen in the last 24h, and the timestamp of the most recent ingest. Check this before trusting a query built on the dataset.

Response

{ data: { contracts_total, contracts_outstanding, contracts_last_24h, regions_with_contracts, latest_contract_seen_at } }

curl 'https://contracts.tovdc.com/api/v1/stats'