Полное руководство по интеграции с платформой. 52+ REST-эндпоинтов + WebSocket для работы с финансовыми данными: акции, облигации, ETF, валюты, криптовалюты, сырьё, фьючерсы, индексы, макроэкономика.
https://orbita.denarius.pro/api/v1
orb_xxxxxxxxxxxxxxxxxxxxxxxxxxxxX-API-Key каждого запроса# Текущая цена Сбербанка curl -H "X-API-Key: orb_YOUR_KEY" \ "https://orbita.denarius.pro/api/v1/company/real-time?code=MOEX:SBER" # Ключевая ставка ЦБ РФ curl -H "X-API-Key: orb_YOUR_KEY" \ "https://orbita.denarius.pro/api/v1/macro/indicator?code=key_rate_rus" # Курс USD/RUB curl -H "X-API-Key: orb_YOUR_KEY" \ "https://orbita.denarius.pro/api/v1/currency/history?code=rub_usd"
Каждый запрос к /api/v1/* должен содержать заголовок:
X-API-Key: orb_ваш_ключ_здесь
curl -H "X-API-Key: orb_KEY" \ URL/api/v1/company/real-time?code=MOEX:SBER
import httpx
h = {"X-API-Key": "orb_KEY"}
r = httpx.get(
"URL/api/v1/company/real-time",
params={"code": "SBER"},
headers=h
)const r = await fetch(
"URL/api/v1/company/real-time?code=MOEX:SBER",
{ headers: {"X-API-Key": "orb_KEY"} }
);{"detail": "Missing X-API-Key header. Obtain a key at /api-docs or contact an administrator."}
{"detail": "Invalid or deactivated API key."}
Каждый API-ключ привязан к тарифному плану, определяющему лимиты запросов. Администратор может назначить план при создании ключа и при необходимости задать индивидуальные лимиты для конкретного клиента.
| Тариф | Запросов / минута | Запросов / день | Описание |
|---|---|---|---|
| Free | 10 | 100 | Для тестирования и ознакомления с API |
| Standard | 60 | 1 000 | Стандартный план для основных интеграций |
| Professional | 300 | 10 000 | Для активных приложений и дашбордов |
| Enterprise | 1 000 | 100 000 | Для высоконагруженных систем и крупных клиентов |
| Unlimited | ∞ | ∞ | Без ограничений — для стратегических партнёров и внутренних систем |
X-RateLimit-Tierallowed_endpointsHTTP/1.1 200 OK X-RateLimit-Tier: professional X-RateLimit-Limit: 300 X-RateLimit-Remaining: 287 # Для Unlimited-ключей: X-RateLimit-Tier: unlimited X-RateLimit-Limit: unlimited X-RateLimit-Remaining: unlimited
Каждый API-ключ имеет индивидуальные лимиты, определяемые тарифным планом. Администратор может задать индивидуальные значения. Ключи с тарифом Unlimited не ограничиваются.
| Заголовок | Описание | Пример |
|---|---|---|
| X-RateLimit-Tier | Тарифный план ключа | professional |
| X-RateLimit-Limit | Максимум запросов/мин для ключа | 300 |
| X-RateLimit-Remaining | Сколько ещё можно отправить | 287 |
| Retry-After | Секунды до сброса (при 429) | 60 |
1. Проверяйте X-RateLimit-Remaining после каждого ответа
2. При получении 429 — ждите время из Retry-After
3. Применяйте экспоненциальный backoff: 1с → 2с → 4с → 8с (максимум 60с)
4. Для высоконагруженных приложений рекомендуется тариф Professional или Enterprise
{"detail": "Rate limit exceeded (per minute)."}
ОРБИТА автоматически кэширует все медиа-файлы (логотипы компаний, валют, картинки новостей) на локальном сервере. В ответах API внешние URL заменяются на локальные ссылки для стабильной и быстрой загрузки.
1. API получает данные от источника (porti.ru, smart-lab.ru и др.) с внешними URL-адресами картинок
2. AssetProxy автоматически скачивает медиа-файлы на сервер ОРБИТА
3. URL в ответе заменяется на https://orbita.denarius.pro/media/{hash}.{ext}
4. Файлы кэшируются перманентно и отдаются с заголовком Cache-Control: public, max-age=86400
| Поле JSON | Где встречается | Пример |
|---|---|---|
| logo | Валюты, компании, биржи | /media/a1b2c3d4.png |
| img | Новости | /media/e5f6g7h8.webp |
| icon | Категории, индексы | /media/i9j0k1l2.svg |
| image | Документы, графики | /media/m3n4o5p6.jpg |
GET /api/v1/media/info
{
"total_files": 342,
"total_size_mb": 47.8,
"assets_dir": "/app/data/assets"
}
Все примеры ниже — реальные ответы от API, полученные в марте 2026. Значения полей time — Unix timestamp (секунды).
По умолчанию все эндпоинты возвращают JSON. Добавьте query-параметр format для получения данных в табличном формате:
format=json
По умолчанию. Стандартный JSON.
format=csv
Табличный CSV (UTF-8). Content-Type: text/csv
format=excel
Microsoft Excel (.xlsx). Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Примеры:
curl -H "X-API-Key: orb_KEY" "https://orbita.denarius.pro/api/v1/currency/list?format=csv" curl -H "X-API-Key: orb_KEY" "https://orbita.denarius.pro/api/v1/company/real-time?code=MOEX:SBER&format=excel" -o sber.xlsx
Array<{code: string, time: string, price: string}>time — Unix timestamp (сек), price — строка с числом.[
{"code": "MOEX:SBER", "time": "1772797801", "price": "314.84"},
{"code": "MOEX:SBER", "time": "1772797201", "price": "314.84"},
{"code": "MOEX:SBER", "time": "1772796901", "price": "314.84"},
{"code": "MOEX:SBER", "time": "1772796841", "price": "314.76"}
]| Поле | Тип | Описание |
|---|---|---|
| code | string | Тикер в формате EXCHANGE:SYMBOL (напр. MOEX:SBER) |
| time | string | Unix timestamp (секунды) — момент фиксации цены |
| price | string | Цена закрытия минутной свечи (в валюте торгов) |
Array<{code, time, price}> — идентична realtime[
{"code": "MOEX:SBER", "time": "1772744400", "price": "314.84"},
{"code": "MOEX:SBER", "time": "1772658000", "price": "314.68"},
{"code": "MOEX:SBER", "time": "1772571600", "price": "311.10"},
{"code": "MOEX:SBER", "time": "1772485200", "price": "311.82"}
]{dividends: Array, splits: Array}{
"dividends": [
{
"title": "2023",
"dividend": "33.3",
"dividend_yield": "10.5",
"registry_closing_time": 1720558800,
"meeting_date": ""
},
{
"title": "2024",
"dividend": 34.84,
"dividend_yield": 10.7,
"registry_closing_time": 1752699600,
"meeting_date": ""
}
],
"splits": []
}| Поле | Тип | Описание |
|---|---|---|
| title | string | Год дивиденда |
| dividend | string|number | Размер дивиденда (руб./акцию) |
| dividend_yield | string|number | Дивидендная доходность (%) |
| registry_closing_time | number | Дата закрытия реестра (Unix timestamp) |
| meeting_date | string | Дата собрания акционеров (пусто если нет) |
{common: Object, msfo: {annual: {dividends, balance, income, cashflow}}, rsbu: ...}{
"common": {
"code": "MOEX:SBER",
"title": "Сбербанк",
"description": "<p>...</p>",
"figi": "BBG004730N88",
"currency": "rub",
"report_currency": "rub",
"industry": "Banks",
"sector": "Financials",
"category": "Акции",
"ipodate": null,
"link": "https://www.sberbank.ru",
"address": {
"Street": "19 Vavilova Street",
"City": "Moscow", "Country": "Russia",
"Phone": "7 495 957 5731", "Index": 117312, "Countryiso": "RU"
},
"rating": {
"credit_rating_qualify_akra": "AAA",
"credit_rating_qualify_expert": "AAA",
"credit_rating_qualify_fitch": "CCC",
"credit_rating_qualify_moody": "C",
"credit_rating_qualify_sp": null
},
"isin": "RU0009029540",
"exchanges": ["MOEX"]
},
"msfo": {
"annual": {
"dividends": {"2023": {"div_payout_ratio": 50.09, "div_yield": 10.535, "dividend": 33.3, "dividend_payout": 752.1}},
"balance": {"2023": {"total_assets": 53827.353, "total_equity": 7362.025, ...}},
"income": {"2023": {"revenue": 3408.949, "net_income": 1502.8, ...}},
"cashflow": {"2023": {"operating_cf": 1015.2, ...}}
}
}
}common содержит ~15 полей. Объекты msfo и rsbu содержат данные по каждому году (от IPO до текущего).[
{
"time": "1765400400",
"disclosure_time": "1765486800",
"type": "2",
"price": "307.19",
"volume": "6658",
"count": "216732",
"insider": "Фамилия Имя",
"insider_role": "Контроллная ревизионная организация",
"link": "https://www.e-disclosure.ru/portal/event.aspx?EventId=...",
"shares_percentage_before": "0.11",
"shares_percentage_after": "0.11"
}
]| Поле | Тип | Описание |
|---|---|---|
| type | string | "1" = покупка, "2" = продажа |
| price | string | Цена сделки |
| volume | string | Объём в рублях |
| count | string | Количество акций |
| shares_percentage_before/after | string | Доля акций до/после сделки (%) |
[
{"name": "Moscow Exchange", "code": "MOEX", "mic": "MISX", "operatingMic": "MISX", "country": "Russia", "currency": "rub"},
{"name": "New York Stock Exchange", "code": "NYSE", "mic": "XNYS", "operatingMic": "XNYS", "country": "USA", "currency": "usd"},
{"name": "NASDAQ", "code": "NASDAQ", "mic": "XNAS", "operatingMic": "XNAS", "country": "USA", "currency": "usd"},
{"name": "London Stock Exchange", "code": "LSE", "mic": "XLON", "operatingMic": "XLON", "country": "UK", "currency": "gbp"}
]| Поле | Описание |
|---|---|
| code | Уникальный код биржи (используется в тикерах: MOEX:SBER) |
| mic | Market Identifier Code (ISO 10383) |
| currency | Валюта торгов (rub, usd, eur, ...) |
[
{"value": "78.19", "title": "Доллар", "symbol": "$", "isin": "USD000UTSTOM", "code": "usd", "logo": "https://porti.ru/.../usd.png"},
{"value": "104.501", "title": "Фунт стерлингов", "symbol": "£", "isin": null, "code": "gbp", "logo": "https://porti.ru/.../gbp.png"},
{"value": "55.1474", "title": "Австралийский доллар", "symbol": "$", "code": "aud", "logo": "..."}
]inflation_rus, inflation_usa, inflation_euro, inflation_chine, ruonia, key_rate_rus, key_rate_usa, observed_inflation_rus, expected_inflation_rus, deposit_rus[
{"code": "key_rate_rus", "time": "1772658000", "value": "15.5"},
{"code": "key_rate_rus", "time": "1772571600", "value": "15.5"},
{"code": "key_rate_rus", "time": "1770930000", "value": "16"},
{"code": "key_rate_rus", "time": "1770843600", "value": "16"}
][
{
"time": "1772797980",
"title": "Заголовок новости...",
"source": "https://smartlab.news/read/...",
"img": "https://smart-lab.ru/uploads/.../image.webp",
"lang": "ru",
"sentiment": "23.918",
"summary": "Краткое содержание новости..."
}
]| Поле | Описание |
|---|---|
| sentiment | ML-оценка сентимента (0-100, выше = позитивнее) |
| summary | Автоматическая суммаризация текста |
| lang | Язык: ru, en |
[
{
"title": "SBER: Публикация финансовых результатов за 2025 год",
"time": "1767214800",
"holders": [
{"code": "MOEX:SBER", "title": "Сбербанк", "type": "company"}
]
},
{
"title": "T: Дата ex-сплита акций в соотношении 1:10",
"time": "1767214800",
"holders": [
{"code": "MOEX:T", "title": "Т-Технологии | Т Банк | Тинькофф", "type": "company"}
]
}
]{
"common": {"code": "IMOEX", "title": "Индекс Мосбиржи"},
"holders": [
{"title": "Лукойл", "code": "MOEX:LKOH", "share": "13.85", "is_pref": 0},
{"title": "Сбербанк", "code": "MOEX:SBER", "share": "12.32", "is_pref": 0},
{"title": "Газпром", "code": "MOEX:GAZP", "share": "9.61", "is_pref": 0},
{"title": "Яндекс", "code": "MOEX:YDEX", "share": "7.28", "is_pref": 0}
]
}| Поле | Описание |
|---|---|
| share | Вес компании в индексе (%) |
| is_pref | 0 = обыкновенные акции, 1 = привилегированные |
"null" (строка) означает недостаточно данных для расчёта.// RSI(14) для SBER
[
{"time": 1741899600, "value": "null"},
{"time": 1741899600, "value": 50.889487870619945},
{"time": 1741986000, "value": 57.36549165120595},
{"time": 1741986000, "value": 50.94918504314478},
{"time": 1742072400, "value": 57.876984126984155}
]{
"company": [
{"title": "Сбербанк", "code": "SBER", "type": "company"},
{"title": "Sberbank of Russia", "code": "SBRCY", "type": "company"},
{"title": "Carlsberg A/S", "code": "CABGY", "type": "company"}
],
"futures": [
{"title": "SBERF", "code": "SBERF", "type": "futures"}
]
}| Параметр | Тип | Обяз. | По умолчанию | Описание |
|---|---|---|---|---|
wss://orbita.denarius.pro/ws/prices
WebSocket не требует API-ключ. Данные обновляются каждые 5-10 секунд.
const ws = new WebSocket("wss://orbita.denarius.pro/ws/prices");
ws.onopen = () => {
ws.send(JSON.stringify({ action: "subscribe", tickers: ["SBER", "GAZP", "LKOH"] }));
};
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
// data = { "SBER": {"price": 314.84, ...}, "GAZP": {"price": 148.75, ...} }
};{
"SBER": {"price": 314.84, "change": 0.05, "time": "2026-03-06T15:30:01"},
"GAZP": {"price": 148.75, "change": -0.32, "time": "2026-03-06T15:30:01"}
}| Код | Статус | Описание | Действие |
|---|---|---|---|
| 200 | OK | Запрос выполнен успешно | — |
| 400 | Bad Request | Некорректные параметры | Проверьте параметры |
| 401 | Unauthorized | Заголовок X-API-Key отсутствует | Добавьте заголовок |
| 403 | Forbidden | Ключ невалиден или деактивирован | Запросите новый ключ |
| 404 | Not Found | Тикер/ресурс не найден | Используйте /search |
| 429 | Too Many Requests | Лимит запросов исчерпан | Подождите Retry-After |
| 500 | Internal Error | Ошибка на сервере | Повторите позже |
| 502 | Bad Gateway | Источник данных недоступен | Повторите через 30с |
import httpx
BASE = "https://orbita.denarius.pro/api/v1"
KEY = "orb_YOUR_KEY"
H = {"X-API-Key": KEY}
# 1. Текущая цена акции
r = httpx.get(f"{BASE}/company/real-time",
params={"code": "SBER"}, headers=H)
prices = r.json() # [{code, time, price}, ...]
# 2. Дивиденды
r = httpx.get(f"{BASE}/company/dividends",
params={"code": "SBER"}, headers=H)
divs = r.json() # {dividends: [...], splits: [...]}
# 3. Фундаментальные данные
r = httpx.get(f"{BASE}/company/fundamental",
params={"code": "SBER"}, headers=H)
fund = r.json() # {common: {...}, msfo: {...}}
# 4. Поиск актива
r = httpx.get(f"{BASE}/company/search",
params={"q": "газпром"}, headers=H)
results = r.json() # {company: [...], futures: [...]}
# 5. Ключевая ставка ЦБ РФ
r = httpx.get(f"{BASE}/macro/indicator",
params={"code": "key_rate_rus"}, headers=H)
rates = r.json() # [{code, time, value}, ...]
# 6. Технический анализ (RSI-14)
r = httpx.get(f"{BASE}/market/technical",
params={"code":"SBER", "func":"rsi"},
headers=H)
# 7. Состав индекса Мосбиржи
r = httpx.get(f"{BASE}/indices/holders",
params={"code": "IMOEX"}, headers=H)
idx = r.json() # {common:{}, holders:[{share}]}const BASE = "https://orbita.denarius.pro/api/v1";
const H = { "X-API-Key": "orb_YOUR_KEY" };
// 1. REST — цена акции
const priceRes = await fetch(
`${BASE}/company/real-time?code=MOEX:SBER`, {headers: H}
);
const prices = await priceRes.json();
// [{code:"MOEX:SBER", time:"177...", price:"314.84"}]
// 2. REST — все биржи
const exRes = await fetch(
`${BASE}/exchange/list`, {headers: H}
);
const exchanges = await exRes.json();
// [{name,code,mic,country,currency}, ...]
// 3. REST — валюты
const curRes = await fetch(
`${BASE}/currency/list`, {headers: H}
);
const currencies = await curRes.json();
// [{value:"78.19",title:"Доллар",code:"usd"}]
// 4. WebSocket — реальное время
const ws = new WebSocket(
"wss://orbita.denarius.pro/ws/prices"
);
ws.onopen = () => {
ws.send(JSON.stringify({
action: "subscribe",
tickers: ["SBER", "GAZP", "LKOH"]
}));
};
ws.onmessage = (e) => {
const data = JSON.parse(e.data);
Object.entries(data).forEach(([ticker, info]) => {
console.log(`${ticker}: ${info.price}`);
});
};
// 5. Обработка лимитов
const resp = await fetch(url, {headers: H});
const remaining = resp.headers
.get("X-RateLimit-Remaining");
if (resp.status === 429) {
const wait = resp.headers.get("Retry-After");
await new Promise(r => setTimeout(r, wait*1000));
}package main
import (
"encoding/json"
"fmt"
"net/http"
"io"
)
const (
base = "https://orbita.denarius.pro/api/v1"
key = "orb_YOUR_KEY"
)
func orbGet(endpoint string) ([]byte, error) {
req, _ := http.NewRequest("GET", base+endpoint, nil)
req.Header.Set("X-API-Key", key)
resp, err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
// Check tier and rate limits
tier := resp.Header.Get("X-RateLimit-Tier")
rem := resp.Header.Get("X-RateLimit-Remaining")
fmt.Printf("Tier: %s, Remaining: %s\n", tier, rem)
return io.ReadAll(resp.Body)
}
func main() {
data, _ := orbGet("/company/real-time?code=MOEX:SBER")
fmt.Println(string(data))
}<?php
$base = "https://orbita.denarius.pro/api/v1";
$key = "orb_YOUR_KEY";
function orbGet($endpoint) {
global $base, $key;
$ch = curl_init($base . $endpoint);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-API-Key: $key",
"Accept: application/json",
],
]);
$response = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($code === 429) {
sleep(60); // backoff
return orbGet($endpoint);
}
return json_decode($response, true);
}
// Текущая цена
$price = orbGet("/company/real-time?code=MOEX:SBER");
print_r($price);
// Новости за 7 дней
$news = orbGet("/macro/news?period=7");
foreach ($news as $item) {
echo $item['title'] . "\n";
}
?>Доступно в v3.4
Webhook-система позволяет получать push-уведомления о событиях платформы ОРБИТА на ваш URL. Подписки управляются через админ-панель или API.
| Событие | Описание | Триггер |
|---|---|---|
| alert.triggered | Алерт по цене сработал | AlertEngine |
| etl.completed | ETL-коллектор завершил сбор данных | Scheduler |
| price.threshold | Цена достигла порогового значения | Price monitor |
/api/v1/webhooks
Список всех подписок. Требуется admin-сессия.
/api/v1/webhooks
Создать подписку. Возвращает secret для проверки подписи (HMAC-SHA256).
/api/v1/webhooks/{id}
Обновить подписку (url, events, is_active).
/api/v1/webhooks/{id}
Удалить подписку.
/api/v1/webhooks/{id}/test
Отправить тестовый payload на URL подписки.
/api/v1/webhooks/events
Получить список поддерживаемых событий.
{
"event": "alert.triggered",
"timestamp": "2026-03-06T12:00:00+00:00",
"data": {
"alert_id": 42,
"asset_code": "MOEX:GAZP",
"condition": "price_above",
"threshold": 200.0,
"current_price": 205.5
}
}
Каждый запрос содержит заголовок X-Orbita-Signature в формате sha256=<hex_digest>.
Для проверки: вычислите HMAC-SHA256 тела запроса с вашим secret и сравните с полученной подписью.
API использует семантическое версионирование. Текущая версия: v3.4
Все эндпоинты доступны через префикс /api/v1/. При выпуске /api/v2/ старые эндпоинты будут поддерживаться минимум 12 месяцев.
Breaking changes анонсируются через Changelog и webhook-уведомления.
limit и offset во всех эндпоинтах (0 = без лимита)/system/source-limits — реальное время использования API Porti.ru (1000/мин, 10000/день) с визуализацией в админ-панелиalert.triggered, etl.completed, price.threshold с HMAC-SHA256 подписьюallowed_endpoints)