Быстрый тест
Запросы выполняются на текущий origin (рекомендуется отдавать этот файл с https://marketdata.fin-plan.org).
POST /v1/dynamics/batch
Диапазон: (1) from/till, (2) period(+asof), (3) если ничего не передали — всё время жизни актива.
ver: ""|latest (default) или число. ver=all не поддерживается.
Assets

Если задано хотя бы одно из from/till — period/asof игнорируются.
GET /v1/{typeCode}/{assetCode}/last
GET /v1/{typeCode}/{assetCode}/prices
POST /v1/prices/batch
Ограничение тела: 2 MiB. assets: 1..200. limit/offset — per-asset.

Ответ
HTTP:
Краткая документация
Формат дат: YYYY-MM-DD · Диапазоны включительные (>=from, <=till)

GET /healthz
GET /v1/types
GET /v1/{typeCode}/{assetCode}/last
GET /v1/{typeCode}/{assetCode}/prices
GET /v1/{typeCode}/{assetCode}/prices/{date}
POST /v1/prices/batch
POST /v1/dynamics/batch

Назначение: старт/финиш, abs/pct, min/max, points по каждому активу.
Request
{
  "assets": [{"type":"share_usa","code":"aapl"}],
  "from": "YYYY-MM-DD",
  "till": "YYYY-MM-DD",
  "period": "day|week|month|quarter|year",
  "asof": "YYYY-MM-DD",
  "ver": "latest|<number>|"
}
Диапазон
  • from/till задано хотя бы одно → явный диапазон (period/asof игнорируются).
  • Иначе используется period (+ asof, default: today UTC).
  • Если нет ни from/till, ни period → весь срок жизни актива.
Response
{
  "meta": {"from":"...","till":"...","period":"...","asof":"...","ver":"..."},
  "data": [{
    "type": {"id":2,"name":"...","code":"share_usa"},
    "asset_code": "AAPL",
    "data": {
      "start": {"date":"YYYY-MM-DD","price": 123.45},
      "end":   {"date":"YYYY-MM-DD","price": 130.00},
      "change": {"abs": 6.55, "pct": 5.305},
      "range": {"min": 120.10, "max": 131.20},
      "points": 31
    }
  }]
}

{
  "error": "code",
  "details": {"k":"v"}
}
Типовые коды
  • bad_json, bad_assets, bad_date, bad_period, bad_range
  • unknown_type, not_found
  • db_error
  • bad_ver (для /v1/dynamics/batch)

Примечание: сервер нормализует asset_code в UPPER. typeCode — как в /v1/types (обычно lower).