Skip to content

Changelog

Unreleased

  • GET /v1/latest (and the latest tool) returns data.missing: the requested ids that are not registered series. It is left out when no ids are requested.
  • GET /v1/sources/freshness (and source_freshness): the raw last_error text is removed; the new last_error_kind is one of blocked, unavailable, format, partial, other, or null when the source never failed. last_error_at is kept and now also covers partial runs.
  • A company INN that is not 10 or 12 digits returns 400 bad_request (GET /v1/companies/{inn}, get_company, and a non-empty inn in company search); a well-formed unknown INN is still 404.
  • Company search: a query that normalises to nothing gets a message explaining that, instead of "give at least one filter".
  • GET /v1/restrictions/{hs} states the 4-digit minimum in its 400 message.
  • Notes and error texts no longer name internal tables (for example the buyers note of the product dossier).

1.0.0 (2026-11-13)

First release of the TRRU API and the remote MCP server.

REST API (/v1)

  • Macro series: GET /v1/series (discover), GET /v1/series/{id} (observations with start, end, resample), GET /v1/latest (newest value of one or many series). 693 series across rates, FX, inflation, reserves, markets, Russian fiscal and payments data, Turkish and Russian trade, energy, tourism, transport, real estate and company formation.
  • Product check: GET /v1/products/{hs6}, a one-call dossier on an HS6 product (suppliers to Russia, prices, seasonality, restrictions, buyer base).
  • Companies: GET /v1/companies/search and GET /v1/companies/{inn} over about 3.5 million Russian legal entities, with sanctions flags.
  • Sanctions and restrictions: GET /v1/sanctions/check (EU, OFAC, UK, UN, US CSL) and GET /v1/restrictions/{hs} (EU Regulation 833/2014 annexes, US CHP list, Russia's parallel-import list).
  • Tourism and border: GET /v1/border/arrivals.
  • Calendar, documents and news: GET /v1/calendar, GET /v1/docs/search, GET /v1/news/search, GET /v1/news/latest.
  • Data operations: GET /v1/sources, GET /v1/sources/freshness, GET /v1/changes.
  • GET /v1/health without a key.

MCP server

  • POST /mcp, streamable HTTP, stateless JSON, 17 tools over the same data (18 for keys with the admin scope, which also get the raw read-only SQL tool query_sql and company contact details).

Platform

  • Bearer-key authentication with scopes data and admin; keys are stored hashed and shown once.
  • Per-key token-bucket rate limit, default 120 requests per minute, shared by REST and MCP.
  • One response envelope (data, meta.sources, meta.request_id, meta.truncated) with provenance for every number: source_id, fetched_at and as_of.
  • One error shape for every failure, including unknown routes and wrong methods.
  • X-Request-Id on every response.
  • Read-only: the API never writes data. No CORS headers: server-to-server use only.

Known limits at release (details in Coverage and freshness)

  • Rosstat history other than CPI starts in 2025-01.
  • EU Regulation 269/2014 is not loaded; EU restrictions cover Regulation 833/2014.
  • China monthly trade after 2024-12 is at HS-chapter level only.
  • Mirror data are incomplete for some reporters and months; Belarus monthly mirror data ends in 2022-03.
  • Some Russian news feeds are unreachable at times, and the Bank of Russia calendar refresh is sometimes blocked.
  • No pagination: result size is controlled by limit, date windows and filters.

Planned

No dates are committed.

  • An email bulletin built on the API. It is a separate project that will consume this API like any other client.
  • An iOS app on the API. Also a separate project.

Changes to the API itself will be listed here under a new version heading. Clients should ignore response fields they do not know.