From b396dde523dbeb50e2ff2b5c76d49b245da0c688 Mon Sep 17 00:00:00 2001 From: Dmitry Yakushev Date: Wed, 18 Dec 2024 08:31:43 +0300 Subject: [PATCH 1/3] change proto url and update files --- .gitignore | 1 + investAPI-main/README.md | 42 +- .../src/docs/accredited_investor.md | 26 +- .../src/docs/algorithmic_trading.md | 299 +- investAPI-main/src/docs/api_protocols.md | 15 +- investAPI-main/src/docs/async.md | 52 + investAPI-main/src/docs/cases.md | 82 +- investAPI-main/src/docs/common.md | 22 - .../src/docs/contracts/common.proto | 109 +- .../contracts/google/api/field_behavior.proto | 90 + .../src/docs/contracts/instruments.proto | 898 +- .../src/docs/contracts/marketdata.proto | 388 +- .../src/docs/contracts/operations.proto | 280 +- .../src/docs/contracts/orders.proto | 243 +- .../src/docs/contracts/sandbox.proto | 42 +- .../src/docs/contracts/signals.proto | 109 + .../src/docs/contracts/stoporders.proto | 128 +- investAPI-main/src/docs/contracts/users.proto | 41 +- investAPI-main/src/docs/deadlines.md | 22 +- investAPI-main/src/docs/eol_v1.md | 32 +- investAPI-main/src/docs/errors.md | 265 +- .../src/docs/errors/api_errors.json | 527 +- investAPI-main/src/docs/example.md | 89 +- investAPI-main/src/docs/extended.md | 14 + investAPI-main/src/docs/faq.md | 76 +- investAPI-main/src/docs/faq_corp_action.md | 91 +- investAPI-main/src/docs/faq_csharp.md | 14 +- investAPI-main/src/docs/faq_custom_types.md | 66 +- investAPI-main/src/docs/faq_golang.md | 15 +- investAPI-main/src/docs/faq_identification.md | 82 +- investAPI-main/src/docs/faq_instruments.md | 339 +- investAPI-main/src/docs/faq_java.md | 63 +- investAPI-main/src/docs/faq_marketdata.md | 216 +- investAPI-main/src/docs/faq_multiaccounts.md | 6 +- investAPI-main/src/docs/faq_operations.md | 82 +- investAPI-main/src/docs/faq_orders.md | 136 +- investAPI-main/src/docs/faq_python.md | 16 +- investAPI-main/src/docs/faq_rules.md | 6 +- investAPI-main/src/docs/faq_sandbox.md | 78 +- investAPI-main/src/docs/faq_stoporders.md | 11 +- investAPI-main/src/docs/faq_trading_status.md | 138 +- investAPI-main/src/docs/faq_users.md | 34 +- investAPI-main/src/docs/get_history.md | 76 +- .../src/docs/get_tech_indicators.md | 101 + investAPI-main/src/docs/glossary.md | 115 +- investAPI-main/src/docs/grpc.md | 164 +- investAPI-main/src/docs/head-instruments.md | 322 +- investAPI-main/src/docs/head-marketdata.md | 223 +- investAPI-main/src/docs/head-operations.md | 156 +- investAPI-main/src/docs/head-orders.md | 160 +- investAPI-main/src/docs/head-sandbox.md | 246 +- investAPI-main/src/docs/head-signals.md | 64 + investAPI-main/src/docs/head-stoporders.md | 29 +- investAPI-main/src/docs/head-users.md | 57 +- investAPI-main/src/docs/held_instruments.md | 62 + investAPI-main/src/docs/http_errors.md | 18 + .../src/docs/img/Kreya-update_contracts.png | Bin 0 -> 114299 bytes investAPI-main/src/docs/img/cert.png | Bin 0 -> 110958 bytes investAPI-main/src/docs/img/icon-chrom.png | Bin 0 -> 5217 bytes investAPI-main/src/docs/index.md | 74 +- investAPI-main/src/docs/instruments.md | 1119 +- investAPI-main/src/docs/limits.md | 135 +- investAPI-main/src/docs/load_history.md | 45 +- investAPI-main/src/docs/marketdata.md | 472 +- investAPI-main/src/docs/markets.md | 87 +- investAPI-main/src/docs/more-instrument.md | 82 +- investAPI-main/src/docs/operations.md | 282 +- .../src/docs/operations_problems.md | 36 +- investAPI-main/src/docs/orders.md | 417 +- investAPI-main/src/docs/orders_details.md | 105 +- .../src/docs/orders_state_stream.md | 44 + investAPI-main/src/docs/points.md | 61 +- investAPI-main/src/docs/robot_contest.md | 27 +- investAPI-main/src/docs/sandbox.md | 43 +- investAPI-main/src/docs/signals.md | 196 + investAPI-main/src/docs/sla.md | 14 +- investAPI-main/src/docs/speedup.md | 46 +- investAPI-main/src/docs/stoporders.md | 172 +- investAPI-main/src/docs/stream.md | 27 + investAPI-main/src/docs/swagger-ui/index.css | 16 + investAPI-main/src/docs/swagger-ui/index.html | 2 +- .../src/docs/swagger-ui/oauth2-redirect.html | 79 + .../src/docs/swagger-ui/openapi.yaml | 13718 ++++++++++++- .../src/docs/swagger-ui/swagger-ui-bundle.js | 2 +- .../docs/swagger-ui/swagger-ui-bundle.js.map | 2 +- .../swagger-ui/swagger-ui-es-bundle-core.js | 3 + .../swagger-ui-es-bundle-core.js.map | 1 + .../docs/swagger-ui/swagger-ui-es-bundle.js | 3 + .../swagger-ui/swagger-ui-es-bundle.js.map | 1 + .../swagger-ui-standalone-preset.js | 2 +- .../swagger-ui-standalone-preset.js.map | 2 +- .../src/docs/swagger-ui/swagger-ui.css | 3 +- .../src/docs/swagger-ui/swagger-ui.css.map | 2 +- .../src/docs/swagger-ui/swagger-ui.js | 2 + .../src/docs/swagger-ui/swagger-ui.js.map | 1 + investAPI-main/src/docs/swagger.md | 54 +- .../src/docs/table_order_currency.md | 90 +- investAPI-main/src/docs/tbank_fund.md | 59 + investAPI-main/src/docs/tech_indicators.md | 156 +- investAPI-main/src/docs/tinkoff_fund.md | 59 + investAPI-main/src/docs/token.md | 97 +- investAPI-main/src/docs/url_difference.md | 38 +- investAPI-main/src/docs/users.md | 61 +- investAPI-main/src/docs/weekend.md | 77 + investAPI-main/src/docs/weekend_trading.md | 14 + investAPI-main/src/docs/ws/README.md | 220 +- investAPI-main/src/docs/ws/asyncapi.yaml | 1260 +- investAPI-main/src/docs/ws/errors.md | 12 + investAPI-main/src/docs/ws/index.html | 76 +- .../websock-docs/output/css/asyncapi.min.css | 2 +- .../src/docs/ws/websock-docs/output/errors.md | 12 + .../docs/ws/websock-docs/output/index.html | 7632 +++++++- .../websock-docs/output/js/asyncapi-ui.min.js | 55 +- .../src/docs/ws/websock/draft-asyncapi.yaml | 1260 +- investAPI-main/src/docs/ws/websock/index.html | 22 +- investAPI-main/src/docs/ws/websock/store.js | 338 +- .../src/docs/ws/websock/wsockview.js | 270 +- investAPI-main/src/marketdata/download_md.sh | 0 investAPI-main/src/mkdocs.yml | 112 +- investAPI-main/src/overrides/main.html | 2 +- .../src/overrides/partials/main.html | 2 +- scripts/pull-proto.sh | 4 +- src/account/real.ts | 6 +- src/account/sandbox.ts | 6 +- src/candles-loader/req.ts | 2 +- src/generated/common.ts | 725 +- src/generated/google/api/field_behavior.ts | 119 + src/generated/google/protobuf/descriptor.ts | 5817 ++++++ src/generated/google/protobuf/timestamp.ts | 2 +- src/generated/instruments.ts | 16283 ++++++++++------ src/generated/marketdata.ts | 2129 +- src/generated/operations.ts | 784 +- src/generated/orders.ts | 2709 ++- src/generated/sandbox.ts | 126 +- src/generated/signals.ts | 1187 ++ src/generated/stoporders.ts | 849 +- src/generated/users.ts | 87 +- 137 files changed, 55094 insertions(+), 12122 deletions(-) create mode 100644 investAPI-main/src/docs/async.md create mode 100644 investAPI-main/src/docs/contracts/google/api/field_behavior.proto create mode 100644 investAPI-main/src/docs/contracts/signals.proto create mode 100644 investAPI-main/src/docs/extended.md create mode 100644 investAPI-main/src/docs/get_tech_indicators.md create mode 100644 investAPI-main/src/docs/head-signals.md create mode 100644 investAPI-main/src/docs/held_instruments.md create mode 100644 investAPI-main/src/docs/http_errors.md create mode 100644 investAPI-main/src/docs/img/Kreya-update_contracts.png create mode 100644 investAPI-main/src/docs/img/cert.png create mode 100644 investAPI-main/src/docs/img/icon-chrom.png create mode 100644 investAPI-main/src/docs/orders_state_stream.md create mode 100644 investAPI-main/src/docs/signals.md create mode 100644 investAPI-main/src/docs/stream.md create mode 100644 investAPI-main/src/docs/swagger-ui/index.css create mode 100644 investAPI-main/src/docs/swagger-ui/oauth2-redirect.html create mode 100644 investAPI-main/src/docs/swagger-ui/swagger-ui-es-bundle-core.js create mode 100644 investAPI-main/src/docs/swagger-ui/swagger-ui-es-bundle-core.js.map create mode 100644 investAPI-main/src/docs/swagger-ui/swagger-ui-es-bundle.js create mode 100644 investAPI-main/src/docs/swagger-ui/swagger-ui-es-bundle.js.map create mode 100644 investAPI-main/src/docs/swagger-ui/swagger-ui.js create mode 100644 investAPI-main/src/docs/swagger-ui/swagger-ui.js.map create mode 100644 investAPI-main/src/docs/tbank_fund.md create mode 100644 investAPI-main/src/docs/tinkoff_fund.md create mode 100644 investAPI-main/src/docs/weekend.md create mode 100644 investAPI-main/src/docs/weekend_trading.md create mode 100644 investAPI-main/src/docs/ws/errors.md create mode 100644 investAPI-main/src/docs/ws/websock-docs/output/errors.md mode change 100755 => 100644 investAPI-main/src/marketdata/download_md.sh create mode 100644 src/generated/google/api/field_behavior.ts create mode 100644 src/generated/google/protobuf/descriptor.ts create mode 100644 src/generated/signals.ts diff --git a/.gitignore b/.gitignore index e28c1a8..fc2455c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .DS_Store .vscode +.idea # npm node_modules diff --git a/investAPI-main/README.md b/investAPI-main/README.md index e0588dd..66f2f11 100644 --- a/investAPI-main/README.md +++ b/investAPI-main/README.md @@ -1,12 +1,12 @@ -# API Тинькофф Инвестиций +# T-Invest API -Tinkoff Invest API — это интерфейс для взаимодействия с торговой платформой [Тинькофф Инвестиции](https://www.tinkoff.ru/invest/). +T-Invest API — это интерфейс для взаимодействия с торговой платформой [Т-Инвестиции](https://www.tbank.ru/invest/). -[Документация для разработчиков](https://tinkoff.github.io/investAPI/) +[Документация для разработчиков](https://russianInvestments.github.io/investAPI/) # Акции -С 25 июля 2022 действует акция с кэшбэком в размере 10% от комиссии по всем торговым поручениям, выставляемым через [API](https://www.tinkoff.ru/invest/open-api/). +С 25 июля 2022 действует акция с кэшбэком в размере 10% от комиссии по всем торговым поручениям, выставляемым через [API](https://www.tbank.ru/invest/open-api/). # Примеры решаемых задач @@ -14,7 +14,7 @@ Tinkoff Invest API — это интерфейс для взаимодейств Через API можно загрузить как исторические котировки, так и котировки в режиме реального времени по всем бумагам -Для загрузки всех исторических котировок (по всем годам и бумагам) рекомендуем использовать [скрипт](https://github.com/Tinkoff/investAPI/blob/main/src/marketdata/download_md.sh) +Для загрузки всех исторических котировок (по всем годам и бумагам) рекомендуем использовать [скрипт](https://github.com/russianInvestments/investAPI/blob/main/src/marketdata/download_md.sh) ### Сигналы на покупку или продажу @@ -27,11 +27,11 @@ Tinkoff Invest API — это интерфейс для взаимодейств ### Тестирование стратегий на истории -Tinkoff Invest API позволит протестировать торговую гипотезу на основе исторических данных +T-Invest API позволит протестировать торговую гипотезу на основе исторических данных ### Создание торговых роботов -При помощи Tinkoff Invest API можно создать своего торгового робота, осуществляющего полностью автоматическую торговлю по стратегии +При помощи T-Invest API можно создать своего торгового робота, осуществляющего полностью автоматическую торговлю по стратегии # Функциональные возможности @@ -51,21 +51,22 @@ API реализован на быстром, удобном и функцион Для поддержки web-клиентов, например браузерных JS скриптов, внедрена поддержка [gRPC-web](https://grpc.io/docs/platforms/web/basics/). -А для клиентов, привыкших работать с REST API, реализован прокси [Swagger](https://tinkoff.github.io/investAPI/swagger-ui/) +Для клиентов, привыкших работать с REST API, реализован прокси [Swagger](https://russianInvestments.github.io/investAPI/swagger-ui/). +Есть поддержка WebSocket стриминга. [Спецификация](https://github.com/RussianInvestments/investAPI/blob/main/src/docs/ws/asyncapi.yaml) -[Документация для разработчиков](https://tinkoff.github.io/investAPI/) +[Документация для разработчиков](https://RussianInvestments.github.io/investAPI/) # SDK -Вы можете как самостоятельно создать обертку по [proto-контрактам](https://github.com/Tinkoff/investAPI/tree/main/src/docs/contracts) так воспользоваться одним из SDK: +Вы можете как самостоятельно создать обертку по [proto-контрактам](https://github.com/RussianInvestments/investAPI/tree/main/src/docs/contracts) так воспользоваться одним из SDK: -## Официальные -* [go](https://github.com/Tinkoff/invest-api-go-sdk) -* [python](https://github.com/Tinkoff/invest-python) -* [java](https://github.com/Tinkoff/invest-api-java-sdk) -* [csharp](https://github.com/Tinkoff/invest-api-csharp-sdk) +## SDK от RussianInvestments +* [go](https://github.com/RussianInvestments/invest-api-go-sdk) +* [python](https://github.com/RussianInvestments/invest-python) +* [java](https://github.com/RussianInvestments/invest-api-java-sdk) +* [csharp](https://github.com/RussianInvestments/invest-api-csharp-sdk) -## Неофициальные +## Неофициальные SDK * [golang](https://github.com/ssummers02/invest-api-go-sdk) * nodejs - [betslus1/unofficial-tinkoff-invest-api_v2-lazy-sdk-NODEJS](https://github.com/betslus1/unofficial-tinkoff-invest-api_v2-lazy-sdk-NODEJS) @@ -74,7 +75,9 @@ API реализован на быстром, удобном и функцион * [haskell](https://github.com/nickmi11er/tinkoff-invest-haskell) * [php](https://github.com/metaseller/tinkoff-invest-api-v2-php) * [php YII2](https://packagist.org/packages/metaseller/tinkoff-invest-api-v2-yii2) -* [swift](https://github.com/JohnReeze/TinkoffInvestSwiftSDK) +* swift + - [JohnReeze/TinkoffInvestSwiftSDK](https://github.com/JohnReeze/TinkoffInvestSwiftSDK) + - [egorbos/invest-api-swift-sdk](https://github.com/egorbos/invest-api-swift-sdk) * [ruby](https://github.com/blackchestnut/invest_tinkoff) * [rust](https://github.com/ovr/tinkoff-invest-rust) * [c++](https://github.com/samoilovv/TinkoffInvestSDK) @@ -83,7 +86,7 @@ SDK на других языках в процессе разработки. # Как работать с этим репозитарием -В [Issues](https://github.com/Tinkoff/investAPI/issues) вы можете задать вопрос или найти ответ, если вопрос уже был задан другими пользователями. +В [Issues](https://github.com/RussianInvestments/investAPI/issues) вы можете задать вопрос или найти ответ, если вопрос уже был задан другими пользователями. Если вы встретили неточность или хотели бы что-то дополнить, то мы будем рады принять от вас pull request. @@ -91,8 +94,7 @@ SDK на других языках в процессе разработки. * [Telegram-канал](https://t.me/tinkoffinvestopenapi) * [Telegram-чат по общим вопросам](https://t.me/joinchat/VaW05CDzcSdsPULM) -* [Telegram-чат для заказчиков и разработчиков торговых роботов](https://t.me/tinkoff_invest_robot_development) # Разработчикам ПО для широкого круга пользователей -Если Вы разрабатываете публичное ПО, использующее Tinkoff Invest API, то необходимо написать на al.a.volkov@tinkoff.ru краткую информацию о проекте для регистрации выделенного appname и получения дополнительной техподдержки. +Если Вы разрабатываете публичное ПО, использующее T-Invest API, то необходимо написать в поддержку Т-Инвестиций по адресу invest-public-api@tbank.ru краткую информацию о проекте для регистрации выделенного appname и получения дополнительной техподдержки. diff --git a/investAPI-main/src/docs/accredited_investor.md b/investAPI-main/src/docs/accredited_investor.md index ea56b66..72fd3e2 100644 --- a/investAPI-main/src/docs/accredited_investor.md +++ b/investAPI-main/src/docs/accredited_investor.md @@ -1,24 +1,22 @@ # Квалифицированный инвестор -Согласно законодательству Российской Федерации, для доступа физического лица к операциям -с определённым перечнем ценных бумаг требуется получить статус квалифицированного инвестора. -Речь идёт, например, о доступе к торгам ценными бумагами на иностранных биржах и -активами на внебиржевом рынке: сплитированными и целыми лотами евробондов -российских и зарубежных компаний, структурными нотами и многим другим. - -Неквалифицированным инвесторам недоступна торговля ценными бумагами, отсутствующими на Бирже СПБ и ММВБ. +Согласно законодательству Российской Федерации, физическое лицо должно иметь статус квалифицированного инвестора для доступа к операциям с определённым перечнем ценных бумаг. Например, для торгов ценными бумагами на иностранных биржах и активами на внебиржевом рынке — сплитированными и целыми лотами евробондов российских и зарубежных компаний, структурными нотами и многим другим. +Неквалифицированные инвесторы не могут торгововать ценными бумагами, которых нет на Бирже СПБ и ММВБ. ## Требования к квалифицированным инвесторам -Для получения статуса квалифицированного инвестора нужно выполнить одно из условий: +Чтобы получить статус квалифицированного инвестора, нужно выполнить одно из условий: * владеть активами на сумму от 6 млн рублей; * иметь опыт работы на финансовом рынке; -* профильное образование; -* оборот по сделкам от 6 млн рублей. +* иметь профильное образование; +* иметь оборот по сделкам от 6 млн рублей. + +## Смотрите также + +* [Подробнее про статус квалифицированного инвестора](https://help.tbank.ru/invest-premium/invest-premium-qualification/) + +* [Как получить статус квалифицированного инвестора](https://help.tbank.ru/invest-premium/invest-premium-qualification/how-to-get-qualification/) -См. также: -* [Статус квалифицированного инвестора](https://help.tinkoff.ru/invest-premium/invest-premium-qualification/); -* [Как получить статус квалифицированного инвестора](https://help.tinkoff.ru/invest-premium/invest-premium-qualification/how-to-get-qualification/); -* [Как получить статус квалифицированного инвестора по опыту работы](https://help.tinkoff.ru/invest-premium/invest-premium-qualification/invest-premium-requirement/). +* [Как получить статус квалифицированного инвестора по опыту работы](https://help.tbank.ru/invest-premium/invest-premium-qualification/invest-premium-requirement/) \ No newline at end of file diff --git a/investAPI-main/src/docs/algorithmic_trading.md b/investAPI-main/src/docs/algorithmic_trading.md index dccca0f..18d09cb 100644 --- a/investAPI-main/src/docs/algorithmic_trading.md +++ b/investAPI-main/src/docs/algorithmic_trading.md @@ -1,162 +1,169 @@ # Алгоритмическая торговля -**Алгоритмическая торговля** (алготрейдинг) – это автоматическая система торговли на бирже, основанная -на определённых алгоритмах. Алгоритмы также называют "Торговыми роботами". Существует большое количество -стратегий и алгоритмов, реализуемых на базе торговых роботов. - -## Этапы алгоритмической торговли -Вне зависимости от выбранной стратегии выделяется несколько этапов разработки торгового робота: - -1. **Сбор и анализ исторических данных**. На данном этапе перед разработчиком торгового робота стоит задача -сбора максимального количество исторических данных с биржи, а именно котировки, свечи. Требуется это в -первую очередь для анализа и подготовки гипотез, которые будут в последующем проверяться и дорабатываться. - -2. **Выдвижение гипотезы**. Используя исторические данные разработчик должен сформировать гипотезу, т.е. -некую идею, которая будет реализовываться торговым роботом. Гипотеза необязательно должна быть -"человекочитаемой" — это вполне может быть результат обучения алгоритма, основанного на интеллектуальных -технологиях (нейросети, машинное обучение и т.п.). - -3. **Проверка гипотезы на исторических данных**. На данном этапе производится проверка выдвинутой на -предыдущем шаге теории. Производится эмуляция торговли робота "в прошлом". Оценивается уровень доходности -и прибыльность стратегии. Если результаты неудовлетворительные, то следует вернуться назад и доработать -гипотезу или выдвинуть новую. - -4. **Проверка гипотезы в реальном времени**. Не всегда историческая доходность гарантирует доходность в -будущем, поэтому кроме проверки на исторических данных требуется провести тестирование алгоритма и на -реальных данных. Для этой задачи отлично подходит песочница Public Invest API. Хотя песочница и имеет ряд -ограничений (например, отсутствует влияние на рынок самого алгоритма), для предварительной проверки -гипотезы она вполне может подойти. - -5. **Реальная торговля на бирже**. На данном этапе запускается полноценная торговля на бирже — с последующим -мониторингом доходности и корректировкой алгоритма, если того требует ситуация. - -## Классификация алгоритмической торговли - -Виды алгоритмической торговли: - -* **по степени автономности алгоритмов:** - - * **сигнальные** – тип алгоритмов, которые, исходя из внутренней логики, формируют сигналы трейдеру о покупке -или продаже инструментов. Решение же о непосредственном выставлении заявки на биржу принимает человек -(разработчик алгоритма); - - * **автоматические** – тип торгового робота, который самостоятельно торгует на бирже, т.е. -выставление/отмена торговых поручений происходит в полностью автоматическом режиме без участия человека. - -* **по частоте торгов**: - - * **высокочастотная торговля (англ. high-frequency trading, HFT)** – основная форма алгоритмической +**Алгоритмическая торговля** (алготрейдинг) — это автоматическая система торговли на бирже, основанная +на определённых алгоритмах. Алгоритмы также называют «торговыми роботами». Существует большое количество +стратегий и алгоритмов, которые реализуются на базе торговых роботов. + +## Этапы + +Вне зависимости от выбранной стратегии, выделяется несколько этапов разработки торгового робота: + +
    +
  1. Сбор и анализ исторических данных. На этом этапе перед разработчиком торгового робота стоит задача +сбора максимального количества исторических данных с биржи — котировки, свечи. Это нужно для анализа и подготовки гипотез, которые будут проверяться и дорабатываться после.

    +
  2. +
  3. Выдвижение гипотезы. Используя исторические данные, разработчик должен сформировать гипотезу — +некую идею, которая будет реализовываться торговым роботом.

    +

    Гипотеза необязательно должна быть «человекочитаемой» — это вполне может быть результат обучения алгоритма, основанного на интеллектуальных технологиях: нейросети, машинное обучение и так далее.

    +
  4. +
  5. Проверка гипотезы на исторических данных. На этом этапе проверяется теория, выдвинутая на +предыдущем шаге, производится эмуляция торговли робота «в прошлом», оценивается уровень доходности +и прибыльность стратегии.

    +

    Если результаты неудовлетворительные, нужно вернуться назад и доработать +гипотезу или выдвинуть новую.

    +
  6. +
  7. Проверка гипотезы в реальном времени. Не всегда историческая доходность гарантирует доходность в +будущем. Поэтому кроме проверки на исторических данных нужно провести тестирование алгоритма на +реальных данных.

    +

    Для этой задачи можно воспользоваться песочницей Public Invest API. Несмотря на то, что песочница имеет ряд ограничений — например, отсутствует влияние на рынок самого алгоритма, — для предварительной проверки гипотезы её может быть достаточно.

    +
  8. +
  9. Реальная торговля на бирже. На этом этапе запускается полноценная торговля на бирже с последующим +мониторингом доходности и корректировкой алгоритма, если это нужно.

    +
  10. +
+ +## Классификация + +

Виды алгоритмической торговли:

+ + +> **Важно**
+> Приведённая классификация является общей — нужно понимать, что реально работающий торговый робот может объединять в себе алгоритмы нескольких видов. -## Риски алгоритмической торговли +## Риски -При торговле на бирже необходимо учесть: - -1. **Требуется определённый уровень компетентности в вопросах биржевой торговли**. Мы настоятельно -рекомендуем изучить теорию биржевой торговли и особенностей работы Тинькофф Инвестиций перед началом +

При торговле на бирже нужно учитывать:

+
    +
  1. Уровень компетентности в вопросах биржевой торговли. Мы настоятельно +рекомендуем изучить теорию биржевой торговли и особенности работы Т-Инвестиций перед началом разработки своего торгового робота, чтобы исключить риски, связанные с неправильным пониманием -функционирования торговых площадок и вашего брокера. - -2. **Требуется определённый уровень компетентности в программировании**. Несмотря на наличие подробной +функционирования торговых площадок и вашего брокера.

    +
  2. +
  3. Уровень компетентности в программировании. Несмотря на наличие подробной документации и ряда готовых решений, снижающих порог входа, от разработчика будет требоваться некоторый -набор знаний и навыков для написания своего алгоритма. - -3. **Убытки от работы торгового робота**. На бирже никто не застрахован от неудач, алгоритмическая же +набор знаний и навыков для написания своего алгоритма.

    +
  4. +
  5. Убытки от работы торгового робота. На бирже никто не застрахован от неудач — алгоритмическая же торговля накладывает дополнительный риск, связанный со скоростью принятий решений и большим количеством -сделок. Неправильно работающий робот может довольно быстро опустошить счёт (даже не используя -маржинальную торговлю). Мы рекомендуем внимательно относиться к этапам бэктестинга алгоритмов, проверять -работу робота не только на исторических данных, но и тестировать выбранную стратегию на реальных данных -(например, используя песочницу). Также следует разумно подходить к объёму средств, которые "доверяются" -роботу при старте его работы, когда алгоритм ещё не проверен "в бою". - -4. **Различные ошибки в работе систем**. Как и любая информационная система, вся инфраструктура -TINKOFF INVEST API и инфраструктура пользователя подвержены рискам нештатных ситуаций, ошибок, перерывов -в работе. Это же справедливо для самой биржи, там тоже порой возникают различные сбои. Поэтому -рекомендуется предусмотреть в работе вашего алгоритма максимальное количество таких ситуаций и корректное -реагирование на них. Это могут быть уведомления, которые робот присылает вам в случае возникновения -ошибок, механизм аварийного прекращения торговли или перерыва в ней. Описание возможных ошибок TINKOFF -INVEST API и рекомендации по их устранению представлены на [странице](/src/docs/errors.md). - -## Стратегии алгоритмической торговли - -Различают следующие виды стратегий: - -* **TWAP** (с англ. Time Weighted Average Price — «взвешенная по времени средняя цена») — такой алгоритм -открывает заявки через равные промежутки времени по ценам с лучшим спросом или предложением; - -* **VWAP** (с англ. Volume Weighted Average Price – «взвешенная по объёму средняя цена») — данный алгоритм нужен для +сделок.

    +

    Неправильно работающий робот может довольно быстро опустошить счёт — даже если не использовать маржинальную торговлю. Мы рекомендуем внимательно относиться к этапам бэктестинга алгоритмов, проверять работу робота не только на исторических данных, но и на реальных — например, используя песочницу. Также следует разумно подходить к объёму средств, которые «доверяются» роботу при старте его работы, когда алгоритм ещё не проверен «в бою».

    +
  6. +
  7. Различные ошибки в работе систем. Как и любая информационная система, вся инфраструктура +T-Invest API и инфраструктура пользователя подвержены рискам нештатных ситуаций, ошибок, перерывов +в работе.

    +

    Это также относится к работе самой биржи — там тоже возникают различные сбои. Поэтому рекомендуем предусмотреть в работе вашего алгоритма максимальное количество таких ситуаций и корректное реагирование на них. Например, это могут быть уведомления, которые робот присылает вам при возникновении ошибок, механизм аварийного прекращения торговли или перерыва в ней.

    +

    Описание возможных ошибок T-Invest API и рекомендации по их устранению

    +
  8. +
+ +## Стратегии + +

Различают следующие виды стратегий:

+ \ No newline at end of file diff --git a/investAPI-main/src/docs/api_protocols.md b/investAPI-main/src/docs/api_protocols.md index 4d9ccae..2a32f33 100644 --- a/investAPI-main/src/docs/api_protocols.md +++ b/investAPI-main/src/docs/api_protocols.md @@ -1,11 +1,12 @@ # Доступные протоколы взаимодействия -TINKOFF INVEST API поддерживает возможность использования различных протоколов. -О том, как начать работать с gRPC, описано на [странице](/investAPI/grpc/). +T-Invest API поддерживает возможность использования различных протоколов. -| Протокол | Подробнее| Endpoint | +[Как начать работать с gRPC](/investAPI/grpc/) + +| Протокол | Детали| Endpoint | |----------|----------|----------| -| gRPC | API реализован на быстром, удобном и функциональном протоколе [gRPC](https://grpc.io/docs/) | invest-public-api.tinkoff.ru:443 — продовый сервис,
sandbox-invest-public-api.tinkoff.ru:443 — сервис песочницы | -| gRPC-web | Для поддержки web-клиентов, например браузерных JS скриптов, внедрена поддержка [gRPC-web](https://grpc.io/docs/platforms/web/basics/) | invest-public-api.tinkoff.ru:443 — продовый сервис,
sandbox-invest-public-api.tinkoff.ru:443 — сервис песочницы | -| REST API | Для клиентов, привыкших работать с REST API, реализован прокси [Swagger](https://tinkoff.github.io/investAPI/swagger-ui/). Инструкция по использованию Swagger описана на [странице](/investAPI/swagger/)| https://invest-public-api.tinkoff.ru/rest/ — продовый сервис,
https://sandbox-invest-public-api.tinkoff.ru/rest/ — сервис песочницы -| WebSocket |Внедрена поддержка Websocket протокола | wss://invest-public-api.tinkoff.ru/ws/ | +| gRPC | API реализован на быстром, удобном и функциональном протоколе [gRPC](https://grpc.io/docs/). | | +| gRPC-web | Для поддержки web-клиентов, например, браузерных JS скриптов, внедрена поддержка [gRPC-web](https://grpc.io/docs/platforms/web/basics/). | | +| REST API | Для клиентов, привыкших работать с REST API, реализован прокси [Swagger](https://russianinvestments.github.io/investAPI/swagger-ui/).

[Инструкция по работе со Swagger](/investAPI/swagger/)| +| WebSocket |Внедрена поддержка WebSocket-протокола. | `wss://invest-public-api.tinkoff.ru/ws/` | diff --git a/investAPI-main/src/docs/async.md b/investAPI-main/src/docs/async.md new file mode 100644 index 0000000..d2005c8 --- /dev/null +++ b/investAPI-main/src/docs/async.md @@ -0,0 +1,52 @@ +# Асинхронный метод выставления заявок + + +С целью уменьшить latency доставки торговых поручений до биржи в T-Invest API реализован асинхронный метод выставления заявок. +При подачи поручений асинхронным методом брокер не дожидается подтверждения от биржи об успешном статусе выставления заявки и +присвоении ей биржевого номера. При работе с асинхронным методом есть ряд особенностей. + +Метод позволяет выставлять поручения параллельно, не создавая очереди заявок, что возможно при работе с PostOrder. +Это позволяет ускорить работа алгоритма распараллелив процессы. + + + +## PostOrderAsync запрос + +Входные параметры асинхронного метода идентичны [PostOrder](/investAPI/orders/#postorder). +При этом есть особенности: + +[Идентификатор ключа идемпотентности](/investAPI/head-orders/#_5) `order_id` является обязательным +и должен быть передан в UUID формате любой версии. + + +## PostOrderAsync ответ + +###В случае ошибки + +При выставлении асинхронного поручения на стороне брокера проводятся предварительные проверки, идентичные синхронному взаимодействию. +В случае ошибок валидации ответ будет идентичен [PostOrder](/investAPI/orders/#postorder). + +###Успешное выставление заявки + +Если проверки пройдены и заявка передана на биржу, то вернется [ответ](/investAPI/orders/#postorderasyncresponse), где +`order_request_id` - ключ идемпотентности, переданный в запросе в виде `order_id`. + +
+

Важно
+В ответе метода нет биржевого идентификатора. trade_intent_id — внутренний идентификатор брокера.

+
+ +
+

Важно
+Успешный ответ не гарантирует, что заявка будет выставлена на бирже. Биржа на своей стороне может отклонить заявку.

+
+ + +## Получить статус торгового поручения. + +Изменение статуса торгового поручения можно подписавшись на [Стрим заявок](/investAPI/orders_state_stream/). +`order_request_id` в сообщениях стрима соответствует `order_request_id` в ответе PostOrderAsync, `order_id` — биржевому номеру заявки. +Получив из стрима биржевой номер, дальнейшие статусы можно отслеживать методами [GetOrderState](/investAPI/orders/#getorderstate) +и [GetOrder](/investAPI/orders/#getorders), а отменить методом [CancelOrder](/investAPI/orders/#cancelorder). + +Дополнительно в методы GetOrderState и CancelOrder добавлена поддержка работы по ключу идемпотентности `order_request_id`. \ No newline at end of file diff --git a/investAPI-main/src/docs/cases.md b/investAPI-main/src/docs/cases.md index 8017447..281b12d 100644 --- a/investAPI-main/src/docs/cases.md +++ b/investAPI-main/src/docs/cases.md @@ -1,45 +1,69 @@ -### Наиболее популярные кейсы +Чтобы понимать алгоритм выполнения основных задач, ознакомьтесь с доступными SDK в разделе [**Языки программирования**](https://russianinvestments.github.io/investAPI/faq_python/). -Для понимания алгоритма выполнения основных задач ознакомьтесь с доступными SDK в [разделе](https://tinkoff.github.io/investAPI/faq_python/) "Языки программирования". +Также рекомендуем прочитать [статью о создании торгового робота](https://habr.com/ru/companies/tinkoff/articles/709166/) — в ней описаны популярные сценарии для пользователей T-Invest API. -Рекомендуется также прочитать [статью о создании торгового робота](https://habr.com/ru/companies/tinkoff/articles/709166/). +## Создать заявку на покупку или продажу инструмента -В статье описаны популярные сценарии для пользователей Tinkoff Invest API. +Когда стратегия даёт команду продавать или покупать, нужно создать заявку: -#### Как создать заявку на покупку или продажу инструмента +1. Проверьте, существует ли позиция по бумаге через метод [FindInstrument](/investAPI/instruments/#findinstrument). +2. Проверьте статус торгового инструмента через метод [GetTradingStatus](/investAPI/marketdata/#gettradingstatus). +3. Получите последние цены на инструмент через метод [GetLastPrice](/investAPI/marketdata#getlastprices). +4. Получите параметр `min_price_increment` для расчёта цены, которую можно выставить, через метод [GetInstrumentBy](/investAPI/instruments/#getinstrumentby). +5. Проверьте свой счёт в аккаунте. +6. Выставите заявку через метод [PostOrder](/investAPI/orders#postorder) и сохраните полученный параметр `order_id`. +7. Получите список активных заявок через метод [GetOrders](/investAPI/orders#getorders) и по параметру `order_id` проверьте, есть ли заявка в списке активных. -В случае, когда стратегия дает команду продавать или покупать, необходимо создать заявку: +Информацию об исполненной заявке можно получить через метод [GetOrderState](/investAPI/orders#getorderstate) по параметру `order_id`. -1. Проверьте существует ли позиция по бумаге с помощью метода [FindInstrument](/investAPI/instruments/#findinstrument). -2. Проверьте статус торгового инструмента с помощью метода [GetTradingStatus](/investAPI/marketdata/#gettradingstatus). -3. Получите последние цены на инструмент с помощью метода [GetLastPrice](/investAPI/marketdata#getlastprices). -4. Получите параметр `min_price_increment` для расчета цены, которую возможно выставить, с помощью метода [GetInstrumentBy](/src/docs/instruments.md/#getinstrumentby). -5. Проверьте свой счет на аккаунте. -6. Выставите заявку с помощью метода [PostOrder](/investAPI/orders#postorder) и сохраните полученный параметр `order_id`. -7. Получите список активных заявок с помощью метода [GetOrders](/investAPI/orders#getorders) и проверьте есть ли заявка в списке активных по параметру `order_id`. +## Получить информации об аккаунте -Информацию об исполненной заявке возможно получить с помощью метода [GetOrderState](/investAPI/orders#getorderstate) по параметру `order_id`. - - -### Начало работы и получение информации об аккаунте - -Для получения информации об аккаунте: +Чтобы получить информацию об аккаунте: 1. Вызовите метод [GetAccounts](/investAPI/users#getaccounts) для получения списка счетов, их статусов и типов. -2. Вызовите метод [GetInfo](/investAPI/users#getinfo), который позволяет: - * определить наличие у пользователя статуса квалифицированного инвестора, премиального клиента; +2. Вызовите метод [GetInfo](/investAPI/users#getinfo). С помощью него можно: + * определить наличие у пользователя статуса квалифицированного инвестора и премиального клиента; * получить список типов инструментов, к которым пользователь имеет доступ по итогам тестирования. - Эта информация помогает определить ограничения в торговле. -3. Получите доступные лимиты с помощью метода [GetInfo](/investAPI/users#getaccounts). -4. Периодически обновляйте информацию о маржинальных показателях счета с помощью метода [GetMarginAttributes](/investAPI/users#getmarginattributes) по параметру `accountId` для торговли на срочном рынке. + Это помогает определить ограничения в торговле. + +3. Получите доступные лимиты через метод [GetInfo](/investAPI/users#getaccounts). +4. Для торговли на срочном рынке периодически обновляйте информацию о маржинальных показателях счёта через метод [GetMarginAttributes](/investAPI/users#getmarginattributes) по параметру `accountId`. -### Как найти базовый актив фьючерса +## Найти базовый актив фьючерса -Для поиска базового актива фьючерса: +Чтобы найти базовый актив фьючерса: 1. Вызовите один из методов: [GetFutureBy](/investAPI/instruments/#futureby) или [GetFutures](/investAPI/instruments/#futures). -2. Сохраните значение параметра `basic_asset_position_uid` (уникальный идентификатор позиции основного инструмента). +2. Сохраните значение параметра `basic_asset_position_uid` — это уникальный идентификатор позиции основного инструмента. + +>**Примечание**
+> Для поиска базового актива фьючерса можно также использовать метод [FindInstrument](/investAPI/instruments/#findinstrument) — в `query` передайте значение параметра `basic_asset_position_uid`, который возвращается в методах [GetFutureBy](/investAPI/instruments/#futureby) и [GetFutures](/investAPI/instruments/#futures). + + +## Ошибки с сертификатом + +При работе с API могут возникнуть ошибки, связанные с сертификатом: + +* `failed to connect to all addresses`; +* `handshake failed`; +* `certificate verify failed`; + +Часто эта проблема возникает из-за недействительного сертификата, который используется в приложении. + +Выпустите новый сертификат — например, через команду `openssl s_client -connect invest-public-api.tinkoff.ru:443`, и импортируйте его. + + +### Загрузить сертификат вручную + +Сертификат можно загрузить вручную. Пример шагов для Windows и Google Chrome: + +1. Зайдите на [сайт Т-Банк](https://www.tbank.ru/). +2. В адресной строке нажмите и выберите **Безопасное подключение**. +3. Нажмите **Показать сертификат**. +4. В открывшемся окне выберите вкладку **Подробнее**. +5. Нажмите **Экспорт** и сохраните сертификат на компьютер. +6. Откройте папку с сохранённым файлом, нажмите по нему правой кнопкой мыши и выберите **Установить сертификат**. +7. Установите сертификат через мастера импорта сертификатов, выбирая ответы по умолчанию. ->**Примечание** -> Для поиска базового актива фьючерса можно также использовать метод [FindInstrument](/investAPI/instruments/#findinstrument). Для этого достаточно передать в query значение параметра `basic_asset_position_uid`, возвращаемое методами GetFutureBy и GetFutures. +![Загрузка сертификата](/investAPI/img/cert.png "Загрузка сертификата") \ No newline at end of file diff --git a/investAPI-main/src/docs/common.md b/investAPI-main/src/docs/common.md index 15b8ef7..13253eb 100644 --- a/investAPI-main/src/docs/common.md +++ b/investAPI-main/src/docs/common.md @@ -3,28 +3,6 @@ -#### SecurityTradingStatus - -| Name | Number | Description | -| ---- | ------ | ----------- | -| SECURITY_TRADING_STATUS_UNSPECIFIED | 0 | Торговый статус не определён | -| SECURITY_TRADING_STATUS_NOT_AVAILABLE_FOR_TRADING | 1 | Недоступен для торгов | -| SECURITY_TRADING_STATUS_OPENING_PERIOD | 2 | Период открытия торгов | -| SECURITY_TRADING_STATUS_CLOSING_PERIOD | 3 | Период закрытия торгов | -| SECURITY_TRADING_STATUS_BREAK_IN_TRADING | 4 | Перерыв в торговле | -| SECURITY_TRADING_STATUS_NORMAL_TRADING | 5 | Нормальная торговля | -| SECURITY_TRADING_STATUS_CLOSING_AUCTION | 6 | Аукцион закрытия | -| SECURITY_TRADING_STATUS_DARK_POOL_AUCTION | 7 | Аукцион крупных пакетов | -| SECURITY_TRADING_STATUS_DISCRETE_AUCTION | 8 | Дискретный аукцион | -| SECURITY_TRADING_STATUS_OPENING_AUCTION_PERIOD | 9 | Аукцион открытия | -| SECURITY_TRADING_STATUS_TRADING_AT_CLOSING_AUCTION_PRICE | 10 | Период торгов по цене аукциона закрытия | -| SECURITY_TRADING_STATUS_SESSION_ASSIGNED | 11 | Сессия назначена | -| SECURITY_TRADING_STATUS_SESSION_CLOSE | 12 | Сессия закрыта | -| SECURITY_TRADING_STATUS_SESSION_OPEN | 13 | Сессия открыта | -| SECURITY_TRADING_STATUS_DEALER_NORMAL_TRADING | 14 |Доступна торговля в режиме внутренней ликвидности брокера | -| SECURITY_TRADING_STATUS_DEALER_BREAK_IN_TRADING | 15 |Перерыв торговли в режиме внутренней ликвидности брокера | -| SECURITY_TRADING_STATUS_DEALER_NOT_AVAILABLE_FOR_TRADING | 16 |Недоступна торговля в режиме внутренней ликвидности брокера | - ### Нестандартные типы данных #### MoneyValue diff --git a/investAPI-main/src/docs/contracts/common.proto b/investAPI-main/src/docs/contracts/common.proto index 4f5d1a3..120b6db 100644 --- a/investAPI-main/src/docs/contracts/common.proto +++ b/investAPI-main/src/docs/contracts/common.proto @@ -22,55 +22,112 @@ enum InstrumentType { INSTRUMENT_TYPE_SP = 6; //Структурная нота. INSTRUMENT_TYPE_OPTION = 7; //Опцион. INSTRUMENT_TYPE_CLEARING_CERTIFICATE = 8; //Clearing certificate. + INSTRUMENT_TYPE_INDEX = 9; //Индекс. + INSTRUMENT_TYPE_COMMODITY = 10; //Товар. } -//Денежная сумма в определенной валюте +//Статус запрашиваемых инструментов. +enum InstrumentStatus { + INSTRUMENT_STATUS_UNSPECIFIED = 0; //Значение не определено. + INSTRUMENT_STATUS_BASE = 1; //Базовый список инструментов (по умолчанию). Инструменты, доступные для торговли через T-Invest API. Cейчас списки бумаг, которые доступны из API и других интерфейсах совпадают — кроме внебиржевых бумаг. Но в будущем возможны ситуации, когда списки инструментов будут отличаться. + INSTRUMENT_STATUS_ALL = 2; //Список всех инструментов. +} + +//Денежная сумма в определённой валюте. message MoneyValue { - // строковый ISO-код валюты + // Строковый ISO-код валюты. string currency = 1; - // целая часть суммы, может быть отрицательным числом + // Целая часть суммы, может быть отрицательным числом. int64 units = 2; - // дробная часть суммы, может быть отрицательным числом + // Дробная часть суммы, может быть отрицательным числом. int32 nano = 3; } -//Котировка — денежная сумма без указания валюты +//Котировка — денежная сумма без указания валюты. message Quotation { - // целая часть суммы, может быть отрицательным числом + // Целая часть суммы, может быть отрицательным числом. int64 units = 1; - // дробная часть суммы, может быть отрицательным числом + // Дробная часть суммы, может быть отрицательным числом. int32 nano = 2; } //Режим торгов инструмента enum SecurityTradingStatus { - SECURITY_TRADING_STATUS_UNSPECIFIED = 0; //Торговый статус не определён - SECURITY_TRADING_STATUS_NOT_AVAILABLE_FOR_TRADING = 1; //Недоступен для торгов - SECURITY_TRADING_STATUS_OPENING_PERIOD = 2; //Период открытия торгов - SECURITY_TRADING_STATUS_CLOSING_PERIOD = 3; //Период закрытия торгов - SECURITY_TRADING_STATUS_BREAK_IN_TRADING = 4; //Перерыв в торговле - SECURITY_TRADING_STATUS_NORMAL_TRADING = 5; //Нормальная торговля - SECURITY_TRADING_STATUS_CLOSING_AUCTION = 6; //Аукцион закрытия - SECURITY_TRADING_STATUS_DARK_POOL_AUCTION = 7; //Аукцион крупных пакетов - SECURITY_TRADING_STATUS_DISCRETE_AUCTION = 8; //Дискретный аукцион - SECURITY_TRADING_STATUS_OPENING_AUCTION_PERIOD = 9; //Аукцион открытия - SECURITY_TRADING_STATUS_TRADING_AT_CLOSING_AUCTION_PRICE = 10; //Период торгов по цене аукциона закрытия - SECURITY_TRADING_STATUS_SESSION_ASSIGNED = 11; //Сессия назначена - SECURITY_TRADING_STATUS_SESSION_CLOSE = 12; //Сессия закрыта - SECURITY_TRADING_STATUS_SESSION_OPEN = 13; //Сессия открыта - SECURITY_TRADING_STATUS_DEALER_NORMAL_TRADING = 14; //Доступна торговля в режиме внутренней ликвидности брокера - SECURITY_TRADING_STATUS_DEALER_BREAK_IN_TRADING = 15; //Перерыв торговли в режиме внутренней ликвидности брокера - SECURITY_TRADING_STATUS_DEALER_NOT_AVAILABLE_FOR_TRADING = 16; //Недоступна торговля в режиме внутренней ликвидности брокера + SECURITY_TRADING_STATUS_UNSPECIFIED = 0; //Торговый статус не определён. + SECURITY_TRADING_STATUS_NOT_AVAILABLE_FOR_TRADING = 1; //Недоступен для торгов. + SECURITY_TRADING_STATUS_OPENING_PERIOD = 2; //Период открытия торгов. + SECURITY_TRADING_STATUS_CLOSING_PERIOD = 3; //Период закрытия торгов. + SECURITY_TRADING_STATUS_BREAK_IN_TRADING = 4; //Перерыв в торговле. + SECURITY_TRADING_STATUS_NORMAL_TRADING = 5; //Нормальная торговля. + SECURITY_TRADING_STATUS_CLOSING_AUCTION = 6; //Аукцион закрытия. + SECURITY_TRADING_STATUS_DARK_POOL_AUCTION = 7; //Аукцион крупных пакетов. + SECURITY_TRADING_STATUS_DISCRETE_AUCTION = 8; //Дискретный аукцион. + SECURITY_TRADING_STATUS_OPENING_AUCTION_PERIOD = 9; //Аукцион открытия. + SECURITY_TRADING_STATUS_TRADING_AT_CLOSING_AUCTION_PRICE = 10; //Период торгов по цене аукциона закрытия. + SECURITY_TRADING_STATUS_SESSION_ASSIGNED = 11; //Сессия назначена. + SECURITY_TRADING_STATUS_SESSION_CLOSE = 12; //Сессия закрыта. + SECURITY_TRADING_STATUS_SESSION_OPEN = 13; //Сессия открыта. + SECURITY_TRADING_STATUS_DEALER_NORMAL_TRADING = 14; //Доступна торговля в режиме внутренней ликвидности брокера. + SECURITY_TRADING_STATUS_DEALER_BREAK_IN_TRADING = 15; //Перерыв торговли в режиме внутренней ликвидности брокера. + SECURITY_TRADING_STATUS_DEALER_NOT_AVAILABLE_FOR_TRADING = 16; //Недоступна торговля в режиме внутренней ликвидности брокера. +} + +message PingRequest { + optional google.protobuf.Timestamp time = 1; //Время формирования запроса +} + +message PingDelaySettings { + optional int32 ping_delay_ms = 15; //Задержка пинг сообщений milliseconds 5000-180000, default 120000 } //Проверка активности стрима. message Ping { + google.protobuf.Timestamp time = 1; //Время проверки. + string stream_id = 2; //Идентификатор соединения. + optional google.protobuf.Timestamp ping_request_time = 4; //Время формирования запроса +} + +//Тип цены. +enum PriceType { + PRICE_TYPE_UNSPECIFIED = 0; //Значение не определено. + PRICE_TYPE_POINT = 1; //Цена в пунктах (только для фьючерсов и облигаций). + PRICE_TYPE_CURRENCY = 2; //Цена в валюте расчётов по инструменту. +} + +message Page { + int32 limit = 1; //Максимальное число возвращаемых записей. + int32 page_number = 2; //Порядковый номер страницы, начиная с 0. +} + +message PageResponse { + int32 limit = 1; //Максимальное число возвращаемых записей. + int32 page_number = 2; //Порядковый номер страницы, начиная с 0. + int32 total_count = 3; //Общее количество записей. +} + +message ResponseMetadata { + string tracking_id = 42; //Идентификатор трекинга. + google.protobuf.Timestamp server_time = 43; //Серверное время. +} + +message BrandData { + string logo_name = 1; // Логотип инструмента. Имя файла для получения логотипа. + string logo_base_color = 2; // Цвет бренда. + string text_color = 3; // Цвет текста для цвета логотипа бренда. +} + +enum ResultSubscriptionStatus { + RESULT_SUBSCRIPTION_STATUS_UNSPECIFIED = 0; //Статус подписки не определен. + RESULT_SUBSCRIPTION_STATUS_OK = 1; //Подписка успешно установлена. + RESULT_SUBSCRIPTION_STATUS_ERROR = 13; //Ошибка подписки +} - //Время проверки. - google.protobuf.Timestamp time = 1; +message ErrorDetail { + string code = 1; //Код ошибки. + string message = 3; //Описание ошибки. } diff --git a/investAPI-main/src/docs/contracts/google/api/field_behavior.proto b/investAPI-main/src/docs/contracts/google/api/field_behavior.proto new file mode 100644 index 0000000..1a3a2f2 --- /dev/null +++ b/investAPI-main/src/docs/contracts/google/api/field_behavior.proto @@ -0,0 +1,90 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.api; + +import "google/protobuf/descriptor.proto"; + +option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; +option java_multiple_files = true; +option java_outer_classname = "FieldBehaviorProto"; +option java_package = "com.google.api"; +option objc_class_prefix = "GAPI"; + +extend google.protobuf.FieldOptions { + // A designation of a specific field behavior (required, output only, etc.) + // in protobuf messages. + // + // Examples: + // + // string name = 1 [(google.api.field_behavior) = REQUIRED]; + // State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + // google.protobuf.Duration ttl = 1 + // [(google.api.field_behavior) = INPUT_ONLY]; + // google.protobuf.Timestamp expire_time = 1 + // [(google.api.field_behavior) = OUTPUT_ONLY, + // (google.api.field_behavior) = IMMUTABLE]; + repeated google.api.FieldBehavior field_behavior = 1052; +} + +// An indicator of the behavior of a given field (for example, that a field +// is required in requests, or given as output but ignored as input). +// This **does not** change the behavior in protocol buffers itself; it only +// denotes the behavior and may affect how API tooling handles the field. +// +// Note: This enum **may** receive new values in the future. +enum FieldBehavior { + // Conventional default for enums. Do not use this. + FIELD_BEHAVIOR_UNSPECIFIED = 0; + + // Specifically denotes a field as optional. + // While all fields in protocol buffers are optional, this may be specified + // for emphasis if appropriate. + OPTIONAL = 1; + + // Denotes a field as required. + // This indicates that the field **must** be provided as part of the request, + // and failure to do so will cause an error (usually `INVALID_ARGUMENT`). + REQUIRED = 2; + + // Denotes a field as output only. + // This indicates that the field is provided in responses, but including the + // field in a request does nothing (the server *must* ignore it and + // *must not* throw an error as a result of the field's presence). + OUTPUT_ONLY = 3; + + // Denotes a field as input only. + // This indicates that the field is provided in requests, and the + // corresponding field is not included in output. + INPUT_ONLY = 4; + + // Denotes a field as immutable. + // This indicates that the field may be set once in a request to create a + // resource, but may not be changed thereafter. + IMMUTABLE = 5; + + // Denotes that a (repeated) field is an unordered list. + // This indicates that the service may provide the elements of the list + // in any arbitrary order, rather than the order the user originally + // provided. Additionally, the list's order may or may not be stable. + UNORDERED_LIST = 6; + + // Denotes that this field returns a non-empty default value if not set. + // This indicates that if the user provides the empty value in a request, + // a non-empty value will be returned. The user will not be aware of what + // non-empty value to expect. + NON_EMPTY_DEFAULT = 7; +} diff --git a/investAPI-main/src/docs/contracts/instruments.proto b/investAPI-main/src/docs/contracts/instruments.proto index 3b3240d..009b4b2 100644 --- a/investAPI-main/src/docs/contracts/instruments.proto +++ b/investAPI-main/src/docs/contracts/instruments.proto @@ -11,101 +11,119 @@ option php_namespace = "Tinkoff\\Invest\\V1"; import "google/protobuf/timestamp.proto"; import "common.proto"; +import "google/api/field_behavior.proto"; +service InstrumentsService {/*Методы сервиса предназначены для получения:
1. Информации об инструментах.
2. + Расписания торговых сессий.
3. Календаря выплат купонов по облигациям.
4. + Размера гарантийного обеспечения по фьючерсам.
5. Дивидендов по ценной бумаге.*/ -service InstrumentsService {/*Сервис предназначен для получения:
**1**. информации об инструментах;
**2**. - расписания торговых сессий;
**3**. календаря выплат купонов по облигациям;
**4**. - размера гарантийного обеспечения по фьючерсам;
**5**. дивидендов по ценной бумаге.*/ - - //Метод получения расписания торгов торговых площадок. + //Получить расписания торгов торговых площадок. rpc TradingSchedules (TradingSchedulesRequest) returns (TradingSchedulesResponse); - //Метод получения облигации по её идентификатору. + //Получить облигации по её идентификатору. rpc BondBy (InstrumentRequest) returns (BondResponse); - //Метод получения списка облигаций. + //Получить список облигаций. rpc Bonds (InstrumentsRequest) returns (BondsResponse); - //Метод получения графика выплат купонов по облигации. + //Получить график выплат купонов по облигации. rpc GetBondCoupons (GetBondCouponsRequest) returns (GetBondCouponsResponse); - //Метод получения валюты по её идентификатору. + //Получить события по облигации + rpc GetBondEvents (GetBondEventsRequest) returns (GetBondEventsResponse); + + //Получить валюту по её идентификатору. rpc CurrencyBy (InstrumentRequest) returns (CurrencyResponse); - //Метод получения списка валют. + //Получить список валют. rpc Currencies (InstrumentsRequest) returns (CurrenciesResponse); - //Метод получения инвестиционного фонда по его идентификатору. + //Получить инвестиционный фонд по его идентификатору. rpc EtfBy (InstrumentRequest) returns (EtfResponse); - //Метод получения списка инвестиционных фондов. + //Получить список инвестиционных фондов. rpc Etfs (InstrumentsRequest) returns (EtfsResponse); - //Метод получения фьючерса по его идентификатору. + //Получить фьючерс по его идентификатору. rpc FutureBy (InstrumentRequest) returns (FutureResponse); - //Метод получения списка фьючерсов. + //Получить список фьючерсов. rpc Futures (InstrumentsRequest) returns (FuturesResponse); - //Метод получения опциона по его идентификатору. + //Получить опцион по его идентификатору. rpc OptionBy (InstrumentRequest) returns (OptionResponse); - //Deprecated Метод получения списка опционов. + //Deprecated Получить списка опционов. rpc Options (InstrumentsRequest) returns (OptionsResponse) { option deprecated = true; }; - //Метод получения списка опционов. + //Получить список опционов. rpc OptionsBy (FilterOptionsRequest) returns (OptionsResponse); - //Метод получения акции по её идентификатору. + //Получить акцию по её идентификатору. rpc ShareBy (InstrumentRequest) returns (ShareResponse); - //Метод получения списка акций. + //Получить список акций. rpc Shares (InstrumentsRequest) returns (SharesResponse); - //Метод получения накопленного купонного дохода по облигации. + //Получить индикативные инструменты — индексы, товары и другие. + rpc Indicatives(IndicativesRequest) returns (IndicativesResponse); + + //Получить накопленный купонный доход по облигации. rpc GetAccruedInterests (GetAccruedInterestsRequest) returns (GetAccruedInterestsResponse); - //Метод получения размера гарантийного обеспечения по фьючерсам. + //Получить размера гарантийного обеспечения по фьючерсам. rpc GetFuturesMargin (GetFuturesMarginRequest) returns (GetFuturesMarginResponse); - //Метод получения основной информации об инструменте. + //Получить основную информацию об инструменте. rpc GetInstrumentBy (InstrumentRequest) returns (InstrumentResponse); - //Метод для получения событий выплаты дивидендов по инструменту. + //Получить события выплаты дивидендов по инструменту. rpc GetDividends (GetDividendsRequest) returns (GetDividendsResponse); - //Метод получения актива по его идентификатору. + //Получить актив по его идентификатору. rpc GetAssetBy (AssetRequest) returns (AssetResponse); - //Метод получения списка активов. Метод работает для всех инструментов, за исключением срочных - опционов и фьючерсов. + //Получить список активов. Метод работает для всех инструментов, кроме срочных — фьючерсов и опционов. rpc GetAssets (AssetsRequest) returns (AssetsResponse); - //Метод получения списка избранных инструментов. + //Получить список избранных инструментов. rpc GetFavorites (GetFavoritesRequest) returns (GetFavoritesResponse); - //Метод редактирования списка избранных инструментов. + //Отредактировать список избранных инструментов. rpc EditFavorites (EditFavoritesRequest) returns (EditFavoritesResponse); - //Метод получения списка стран. + //Получить список стран. rpc GetCountries (GetCountriesRequest) returns (GetCountriesResponse); - //Метод поиска инструмента. + //Найти инструмент. rpc FindInstrument (FindInstrumentRequest) returns (FindInstrumentResponse); - //Метод получения списка брендов. + //Получить список брендов. rpc GetBrands(GetBrandsRequest) returns (GetBrandsResponse); - //Метод получения бренда по его идентификатору. + //Получить бренд по его идентификатору. rpc GetBrandBy(GetBrandRequest) returns (Brand); + + //Получить фундаментальные показатели по активу. + rpc GetAssetFundamentals(GetAssetFundamentalsRequest) returns (GetAssetFundamentalsResponse); + + //Получить расписания выхода отчётностей эмитентов. + rpc GetAssetReports(GetAssetReportsRequest) returns (GetAssetReportsResponse); + + //Получить мнения аналитиков по инструменту. + rpc GetConsensusForecasts(GetConsensusForecastsRequest) returns (GetConsensusForecastsResponse); + + //Получить прогнозов инвестдомов по инструменту. + rpc GetForecastBy(GetForecastRequest) returns (GetForecastResponse); } //Запрос расписания торгов. message TradingSchedulesRequest { - string exchange = 1; //Наименование биржи или расчетного календаря.
Если не передаётся, возвращается информация по всем доступным торговым площадкам. - google.protobuf.Timestamp from = 2; //Начало периода по часовому поясу UTC. - google.protobuf.Timestamp to = 3; //Окончание периода по часовому поясу UTC. + optional string exchange = 1; //Наименование биржи или расчетного календаря.
Если не передаётся, возвращается информация по всем доступным торговым площадкам. + optional google.protobuf.Timestamp from = 2; //Начало периода по UTC. + optional google.protobuf.Timestamp to = 3; //Окончание периода по UTC. } //Список торговых площадок. @@ -124,36 +142,38 @@ message TradingDay { reserved 5, 6; google.protobuf.Timestamp date = 1; // Дата. bool is_trading_day = 2; // Признак торгового дня на бирже. - google.protobuf.Timestamp start_time = 3; // Время начала торгов по часовому поясу UTC. - google.protobuf.Timestamp end_time = 4; // Время окончания торгов по часовому поясу UTC. - google.protobuf.Timestamp opening_auction_start_time = 7; // Время начала аукциона открытия в часовом поясе UTC. - google.protobuf.Timestamp closing_auction_end_time = 8; // Время окончания аукциона закрытия в часовом поясе UTC. - google.protobuf.Timestamp evening_opening_auction_start_time = 9; // Время начала аукциона открытия вечерней сессии в часовом поясе UTC. - google.protobuf.Timestamp evening_start_time = 10; // Время начала вечерней сессии в часовом поясе UTC. - google.protobuf.Timestamp evening_end_time = 11; // Время окончания вечерней сессии в часовом поясе UTC. - google.protobuf.Timestamp clearing_start_time = 12; // Время начала основного клиринга в часовом поясе UTC. - google.protobuf.Timestamp clearing_end_time = 13; // Время окончания основного клиринга в часовом поясе UTC. - google.protobuf.Timestamp premarket_start_time = 14; // Время начала премаркета в часовом поясе UTC. - google.protobuf.Timestamp premarket_end_time = 15; // Время окончания премаркета в часовом поясе UTC. - google.protobuf.Timestamp closing_auction_start_time = 16; // Время начала аукциона закрытия в часовом поясе UTC. - google.protobuf.Timestamp opening_auction_end_time = 17; // Время окончания аукциона открытия в часовом поясе UTC. + google.protobuf.Timestamp start_time = 3; // Время начала торгов по UTC. + google.protobuf.Timestamp end_time = 4; // Время окончания торгов по UTC. + google.protobuf.Timestamp opening_auction_start_time = 7; // Время начала аукциона открытия по UTC. + google.protobuf.Timestamp closing_auction_end_time = 8; // Время окончания аукциона закрытия по UTC. + google.protobuf.Timestamp evening_opening_auction_start_time = 9; // Время начала аукциона открытия вечерней сессии по UTC. + google.protobuf.Timestamp evening_start_time = 10; // Время начала вечерней сессии по UTC. + google.protobuf.Timestamp evening_end_time = 11; // Время окончания вечерней сессии по UTC. + google.protobuf.Timestamp clearing_start_time = 12; // Время начала основного клиринга по UTC. + google.protobuf.Timestamp clearing_end_time = 13; // Время окончания основного клиринга по UTC. + google.protobuf.Timestamp premarket_start_time = 14; // Время начала премаркета по UTC. + google.protobuf.Timestamp premarket_end_time = 15; // Время окончания премаркета по UTC. + google.protobuf.Timestamp closing_auction_start_time = 16; // Время начала аукциона закрытия по UTC. + google.protobuf.Timestamp opening_auction_end_time = 17; // Время окончания аукциона открытия по UTC. + repeated TradingInterval intervals = 18; // Торговые интервалы. } //Запрос получения инструмента по идентификатору. message InstrumentRequest { - InstrumentIdType id_type = 1; // Тип идентификатора инструмента. Возможные значения: figi, ticker. Подробнее об идентификации инструментов: [Идентификация инструментов](https://tinkoff.github.io/investAPI/faq_identification/) - string class_code = 2; // Идентификатор class_code. Обязателен при id_type = ticker. - string id = 3; // Идентификатор запрашиваемого инструмента. + InstrumentIdType id_type = 1 [(google.api.field_behavior) = REQUIRED]; // Тип идентификатора инструмента. Возможные значения — `figi`, `ticker`. [Подробнее об идентификации инструментов](https://russianinvestments.github.io/investAPI/faq_identification/). + optional string class_code = 2; // Идентификатор `class_code`. Обязательный, если `id_type = ticker`. + string id = 3 [(google.api.field_behavior) = REQUIRED]; // Идентификатор запрашиваемого инструмента. } //Запрос получения инструментов. message InstrumentsRequest { - InstrumentStatus instrument_status = 1; //Статус запрашиваемых инструментов. Возможные значения: [InstrumentStatus](#instrumentstatus) + optional InstrumentStatus instrument_status = 1; //Статус запрашиваемых инструментов. [Возможные значения](#instrumentstatus). + optional InstrumentExchangeType instrument_exchange = 2; // Тип площадки торговли. [Возможные значения](#instrumentexchangetype). } -//Параметры фильтрации опционов +//Параметры фильтрации опционов. message FilterOptionsRequest { - string basic_asset_uid = 1; //Идентификатор базового актива опциона. Обязательный параметр. - string basic_asset_position_uid = 2; //Идентификатор позиции базового актива опциона + optional string basic_asset_uid = 1; //Идентификатор базового актива опциона. Обязательный параметр. + optional string basic_asset_position_uid = 2; //Идентификатор позиции базового актива опциона. } //Информация об облигации. @@ -168,9 +188,10 @@ message BondsResponse { //Запрос купонов по облигации. message GetBondCouponsRequest { - string figi = 1; //Figi-идентификатор инструмента. - google.protobuf.Timestamp from = 2; //Начало запрашиваемого периода в часовом поясе UTC. Фильтрация по coupon_date (дата выплаты купона) - google.protobuf.Timestamp to = 3; //Окончание запрашиваемого периода в часовом поясе UTC. Фильтрация по coupon_date (дата выплаты купона) + string figi = 1 [deprecated = true]; //FIGI-идентификатор инструмента. + optional google.protobuf.Timestamp from = 2; //Начало запрашиваемого периода по UTC. Фильтрация по `coupon_date` — дата выплаты купона. + optional google.protobuf.Timestamp to = 3; //Окончание запрашиваемого периода по UTC. Фильтрация по `coupon_date` — дата выплаты купона. + string instrument_id = 4 [(google.api.field_behavior) = REQUIRED]; //Идентификатор инструмента — `figi` или `instrument_uid`. } //Купоны по облигации. @@ -178,12 +199,58 @@ message GetBondCouponsResponse { repeated Coupon events = 1; } +//События по облигации. +message GetBondEventsRequest { + optional google.protobuf.Timestamp from = 2; //Начало запрашиваемого периода по UTC. + optional google.protobuf.Timestamp to = 3; //Окончание запрашиваемого периода по UTC. + string instrument_id = 4 [(google.api.field_behavior) = REQUIRED]; //Идентификатор инструмента — `figi` или `instrument_uid`. + EventType type = 5; //Тип события + + enum EventType { + EVENT_TYPE_UNSPECIFIED = 0; //Неопределённое значение. + EVENT_TYPE_CPN = 1; // Купон. + EVENT_TYPE_CALL = 2; // Опцион (оферта). + EVENT_TYPE_MTY = 3;// Погашение. + EVENT_TYPE_CONV = 4; // Конвертация. + } +} + +//Объект передачи информации о событии облигации. +message GetBondEventsResponse { + repeated BondEvent events = 1; + message BondEvent { + string instrument_id = 2; // Идентификатор инструмента. + int32 event_number = 3; // Номер события для данного типа события. + google.protobuf.Timestamp event_date = 4; // Дата события. + GetBondEventsRequest.EventType event_type = 5; // Тип события. + Quotation event_total_vol = 6; // Полное количество бумаг, задействованных в событии. + google.protobuf.Timestamp fix_date = 7; // Дата фиксации владельцев для участия в событии. + google.protobuf.Timestamp rate_date = 8; // Дата определения даты или факта события. + google.protobuf.Timestamp default_date = 9; // Дата дефолта, если применимо. + google.protobuf.Timestamp real_pay_date = 10; // Дата реального исполнения обязательства. + google.protobuf.Timestamp pay_date = 11; // Дата выплаты. + MoneyValue pay_one_bond = 12; // Выплата на одну облигацию. + MoneyValue money_flow_val = 13; // Выплаты на все бумаги, задействованные в событии. + string execution = 14; // Признак исполнения. + string operation_type = 15; // Тип операции. + Quotation value = 16; // Стоимость операции — ставка купона, доля номинала, цена выкупа или коэффициент конвертации. + string note = 17; // Примечание. + string convert_to_fin_tool_id = 18; // ID выпуска бумаг, в который произведена конвертация (для конвертаций). + google.protobuf.Timestamp coupon_start_date = 19; // Начало купонного периода. + google.protobuf.Timestamp coupon_end_date = 20; // Окончание купонного периода. + int32 coupon_period = 21; // Купонный период. + Quotation coupon_interest_rate = 22; // Ставка купона, процентов годовых. + } +} + + + //Объект передачи информации о купоне облигации. message Coupon { - string figi = 1; //Figi-идентификатор инструмента. + string figi = 1; //FIGI-идентификатор инструмента. google.protobuf.Timestamp coupon_date = 2; //Дата выплаты купона. int64 coupon_number = 3; //Номер купона. - google.protobuf.Timestamp fix_date = 4; //(Опционально) Дата фиксации реестра для выплаты купона. + google.protobuf.Timestamp fix_date = 4; //Дата фиксации реестра для выплаты купона — опционально. MoneyValue pay_one_bond = 5; //Выплата на одну облигацию. CouponType coupon_type = 6; //Тип купона. google.protobuf.Timestamp coupon_start_date = 7; //Начало купонного периода. @@ -193,14 +260,14 @@ message Coupon { //Тип купонов. enum CouponType { - COUPON_TYPE_UNSPECIFIED = 0; //Неопределенное значение - COUPON_TYPE_CONSTANT = 1; //Постоянный - COUPON_TYPE_FLOATING = 2; //Плавающий - COUPON_TYPE_DISCOUNT = 3; //Дисконт - COUPON_TYPE_MORTGAGE = 4; //Ипотечный - COUPON_TYPE_FIX = 5; //Фиксированный - COUPON_TYPE_VARIABLE = 6; //Переменный - COUPON_TYPE_OTHER = 7; //Прочее + COUPON_TYPE_UNSPECIFIED = 0; //Неопределённое значение. + COUPON_TYPE_CONSTANT = 1; //Постоянный. + COUPON_TYPE_FLOATING = 2; //Плавающий. + COUPON_TYPE_DISCOUNT = 3; //Дисконт. + COUPON_TYPE_MORTGAGE = 4; //Ипотечный. + COUPON_TYPE_FIX = 5; //Фиксированный. + COUPON_TYPE_VARIABLE = 6; //Переменный. + COUPON_TYPE_OTHER = 7; //Прочее. } //Данные по валюте. @@ -252,9 +319,9 @@ message Option { string basic_asset_position_uid = 5; //Уникальный идентификатор позиции основного инструмента. SecurityTradingStatus trading_status = 21; //Текущий режим торгов инструмента. - RealExchange real_exchange = 31; //Реальная площадка исполнения расчётов (биржа). Допустимые значения: [REAL_EXCHANGE_MOEX, REAL_EXCHANGE_RTS] + RealExchange real_exchange = 31; //Реальная площадка исполнения расчётов (биржа). OptionDirection direction = 41; //Направление опциона. - OptionPaymentType payment_type = 42; //Тип расчетов по опциону. + OptionPaymentType payment_type = 42; //Тип расчётов по опциону. OptionStyle style = 43; //Стиль опциона. OptionSettlementType settlement_type = 44; //Способ исполнения опциона. @@ -267,18 +334,22 @@ message Option { string country_of_risk = 151; //Код страны рисков. string country_of_risk_name = 152; //Наименование страны рисков. string sector = 161; //Сектор экономики. + BrandData brand = 162; // Информация о бренде. int32 lot = 201; //Количество бумаг в лоте. Quotation basic_asset_size = 211; //Размер основного актива. - Quotation klong = 221; //Коэффициент ставки риска длинной позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР). 1 – клиент с повышенным уровнем риска (КПУР) - Quotation kshort = 222; //Коэффициент ставки риска короткой позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР). 1 – клиент с повышенным уровнем риска (КПУР) - Quotation dlong = 223; //Ставка риска начальной маржи для КСУР лонг. Подробнее: [ставка риска в лонг](https://help.tinkoff.ru/margin-trade/long/risk-rate/) - Quotation dshort = 224; //Ставка риска начальной маржи для КСУР шорт. Подробнее: [ставка риска в шорт](https://help.tinkoff.ru/margin-trade/short/risk-rate/) - Quotation dlong_min = 225; //Ставка риска начальной маржи для КПУР лонг. Подробнее: [ставка риска в лонг](https://help.tinkoff.ru/margin-trade/long/risk-rate/) - Quotation dshort_min = 226; //Ставка риска начальной маржи для КПУР шорт. Подробнее: [ставка риска в шорт](https://help.tinkoff.ru/margin-trade/short/risk-rate/) + Quotation klong = 221; //Коэффициент ставки риска длинной позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation kshort = 222; //Коэффициент ставки риска короткой позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation dlong = 223 [deprecated = true]; //Ставка риска начальной маржи для КСУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort = 224 [deprecated = true]; //Ставка риска начальной маржи для КСУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dlong_min = 225 [deprecated = true]; //Ставка риска начальной маржи для КПУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_min = 226 [deprecated = true]; //Ставка риска начальной маржи для КПУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). Quotation min_price_increment = 231; //Минимальный шаг цены. MoneyValue strike_price = 241; //Цена страйка. + Quotation dlong_client = 290; //Ставка риска в лонг, с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_client = 291; //Ставка риска в шорт, с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + google.protobuf.Timestamp expiration_date = 301; //Дата истечения срока в формате UTC. google.protobuf.Timestamp first_trade_date = 311; //Дата начала обращения контракта в формате UTC. google.protobuf.Timestamp last_trade_date = 312; //Дата исполнения в формате UTC. @@ -286,42 +357,42 @@ message Option { google.protobuf.Timestamp first_1day_candle_date = 322; //Дата первой дневной свечи в формате UTC. bool short_enabled_flag = 401; //Признак доступности для операций шорт. - bool for_iis_flag = 402; //Возможность покупки/продажи на ИИС. - bool otc_flag = 403; //Признак внебиржевой ценной бумаги. + bool for_iis_flag = 402; //Возможность покупки или продажи на ИИС. + bool otc_flag = 403; //Флаг, используемый ранее для определения внебиржевых инструментов. На данный момент не используется для торгуемых через API инструментов. Может использоваться как фильтр для операций, совершавшихся некоторое время назад на ОТС площадке. bool buy_available_flag = 404; //Признак доступности для покупки. bool sell_available_flag = 405; //Признак доступности для продажи. - bool for_qual_investor_flag = 406; //Флаг отображающий доступность торговли инструментом только для квалифицированных инвесторов. - bool weekend_flag = 407; //Флаг отображающий доступность торговли инструментом по выходным. + bool for_qual_investor_flag = 406; //Флаг, отображающий доступность торговли инструментом только для квалифицированных инвесторов. + bool weekend_flag = 407; //Флаг, отображающий доступность торговли инструментом по выходным. bool blocked_tca_flag = 408; //Флаг заблокированного ТКС. - bool api_trade_available_flag = 409; //Параметр указывает на возможность торговать инструментом через API. + bool api_trade_available_flag = 409; //Возможность торговать инструментом через API. } //Тип опциона по направлению сделки. enum OptionDirection { - OPTION_DIRECTION_UNSPECIFIED = 0; //Тип не определен. + OPTION_DIRECTION_UNSPECIFIED = 0; //Тип не определён. OPTION_DIRECTION_PUT = 1; //Опцион на продажу. OPTION_DIRECTION_CALL = 2; //Опцион на покупку. } -//Тип расчетов по опциону. +//Тип расчётов по опциону. enum OptionPaymentType { - OPTION_PAYMENT_TYPE_UNSPECIFIED = 0; //Тип не определен. - OPTION_PAYMENT_TYPE_PREMIUM = 1; //Опционы с использованием премии в расчетах. + OPTION_PAYMENT_TYPE_UNSPECIFIED = 0; //Тип не определён. + OPTION_PAYMENT_TYPE_PREMIUM = 1; //Опционы с использованием премии в расчётах. OPTION_PAYMENT_TYPE_MARGINAL = 2; //Маржируемые опционы. } //Тип опциона по стилю. enum OptionStyle { - OPTION_STYLE_UNSPECIFIED = 0; //Тип не определен. + OPTION_STYLE_UNSPECIFIED = 0; //Тип не определён. OPTION_STYLE_AMERICAN = 1; //Американский опцион. OPTION_STYLE_EUROPEAN = 2; //Европейский опцион. } //Тип опциона по способу исполнения. enum OptionSettlementType { - OPTION_EXECUTION_TYPE_UNSPECIFIED = 0; //Тип не определен. + OPTION_EXECUTION_TYPE_UNSPECIFIED = 0; //Тип не определён. OPTION_EXECUTION_TYPE_PHYSICAL_DELIVERY = 1; // Поставочный тип опциона. - OPTION_EXECUTION_TYPE_CASH_SETTLEMENT = 2; //Расчетный тип опциона. + OPTION_EXECUTION_TYPE_CASH_SETTLEMENT = 2; //Расчётный тип опциона. } //Данные по акции. @@ -336,42 +407,42 @@ message SharesResponse { //Объект передачи информации об облигации. message Bond { - string figi = 1; //Figi-идентификатор инструмента. + string figi = 1; //FIGI-идентификатор инструмента. string ticker = 2; //Тикер инструмента. string class_code = 3; //Класс-код (секция торгов). - string isin = 4; //Isin-идентификатор инструмента. - int32 lot = 5; //Лотность инструмента. Возможно совершение операций только на количества ценной бумаги, кратные параметру *lot*. Подробнее: [лот](https://tinkoff.github.io/investAPI/glossary#lot) + string isin = 4; //ISIN-идентификатор инструмента. + int32 lot = 5; //Лотность инструмента. Возможно совершение операций только на количества ценной бумаги, кратные параметру `lot`. [Подробнее](https://russianinvestments.github.io/investAPI/glossary#lot). string currency = 6; //Валюта расчётов. - Quotation klong = 7; //Коэффициент ставки риска длинной позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР). 1 – клиент с повышенным уровнем риска (КПУР) - Quotation kshort = 8; //Коэффициент ставки риска короткой позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР). 1 – клиент с повышенным уровнем риска (КПУР) - Quotation dlong = 9; //Ставка риска начальной маржи для КСУР лонг. Подробнее: [ставка риска в лонг](https://help.tinkoff.ru/margin-trade/long/risk-rate/) - Quotation dshort = 10; //Ставка риска начальной маржи для КСУР шорт. Подробнее: [ставка риска в шорт](https://help.tinkoff.ru/margin-trade/short/risk-rate/) - Quotation dlong_min = 11; // Ставка риска начальной маржи для КПУР лонг. Подробнее: [ставка риска в лонг](https://help.tinkoff.ru/margin-trade/long/risk-rate/) - Quotation dshort_min = 12; //Ставка риска начальной маржи для КПУР шорт. Подробнее: [ставка риска в шорт](https://help.tinkoff.ru/margin-trade/short/risk-rate/) + Quotation klong = 7; //Коэффициент ставки риска длинной позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation kshort = 8; //Коэффициент ставки риска короткой позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation dlong = 9 [deprecated = true]; //Ставка риска начальной маржи для КСУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort = 10 [deprecated = true]; //Ставка риска начальной маржи для КСУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dlong_min = 11 [deprecated = true]; // Ставка риска начальной маржи для КПУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_min = 12 [deprecated = true]; //Ставка риска начальной маржи для КПУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). bool short_enabled_flag = 13; //Признак доступности для операций в шорт. string name = 15; //Название инструмента. string exchange = 16; //Tорговая площадка (секция биржи). int32 coupon_quantity_per_year = 17; //Количество выплат по купонам в год. - google.protobuf.Timestamp maturity_date = 18; //Дата погашения облигации в часовом поясе UTC. + google.protobuf.Timestamp maturity_date = 18; //Дата погашения облигации по UTC. MoneyValue nominal = 19; //Номинал облигации. MoneyValue initial_nominal = 20; //Первоначальный номинал облигации. - google.protobuf.Timestamp state_reg_date = 21; //Дата выпуска облигации в часовом поясе UTC. - google.protobuf.Timestamp placement_date = 22; //Дата размещения в часовом поясе UTC. + google.protobuf.Timestamp state_reg_date = 21; //Дата выпуска облигации по UTC. + google.protobuf.Timestamp placement_date = 22; //Дата размещения по UTC. MoneyValue placement_price = 23; //Цена размещения. MoneyValue aci_value = 24; //Значение НКД (накопленного купонного дохода) на дату. - string country_of_risk = 25; //Код страны риска, т.е. страны, в которой компания ведёт основной бизнес. - string country_of_risk_name = 26; //Наименование страны риска, т.е. страны, в которой компания ведёт основной бизнес. + string country_of_risk = 25; //Код страны риска — то есть страны, в которой компания ведёт основной бизнес. + string country_of_risk_name = 26; //Наименование страны риска — то есть страны, в которой компания ведёт основной бизнес. string sector = 27; //Сектор экономики. string issue_kind = 28; //Форма выпуска. Возможные значения:
**documentary** — документарная;
**non_documentary** — бездокументарная. int64 issue_size = 29; //Размер выпуска. int64 issue_size_plan = 30; //Плановый размер выпуска. SecurityTradingStatus trading_status = 31; //Текущий режим торгов инструмента. - bool otc_flag = 32; //Признак внебиржевой ценной бумаги. + bool otc_flag = 32; //Флаг, используемый ранее для определения внебиржевых инструментов. На данный момент не используется для торгуемых через API инструментов. Может использоваться как фильтр для операций, совершавшихся некоторое время назад на ОТС площадке. bool buy_available_flag = 33; //Признак доступности для покупки. bool sell_available_flag = 34; //Признак доступности для продажи. bool floating_coupon_flag = 35; //Признак облигации с плавающим купоном. @@ -383,44 +454,52 @@ message Bond { string uid = 40; //Уникальный идентификатор инструмента. RealExchange real_exchange = 41; //Реальная площадка исполнения расчётов. (биржа) string position_uid = 42; //Уникальный идентификатор позиции инструмента. + string asset_uid = 43; //Уникальный идентификатор актива. bool for_iis_flag = 51; //Признак доступности для ИИС. - bool for_qual_investor_flag = 52; //Флаг отображающий доступность торговли инструментом только для квалифицированных инвесторов. - bool weekend_flag = 53; //Флаг отображающий доступность торговли инструментом по выходным - bool blocked_tca_flag = 54; //Флаг заблокированного ТКС + bool for_qual_investor_flag = 52; //Флаг, отображающий доступность торговли инструментом только для квалифицированных инвесторов. + bool weekend_flag = 53; //Флаг, отображающий доступность торговли инструментом по выходным. + bool blocked_tca_flag = 54; //Флаг заблокированного ТКС. bool subordinated_flag = 55; //Признак субординированной облигации. - bool liquidity_flag = 56; //Флаг достаточной ликвидности + bool liquidity_flag = 56; //Флаг достаточной ликвидности. google.protobuf.Timestamp first_1min_candle_date = 61; //Дата первой минутной свечи. google.protobuf.Timestamp first_1day_candle_date = 62; //Дата первой дневной свечи. RiskLevel risk_level = 63; //Уровень риска. + BrandData brand = 64; // Информация о бренде. + BondType bond_type = 65; // Тип облигации. + google.protobuf.Timestamp call_date = 69; // Дата погашения облигации. + + Quotation dlong_client = 90; //Ставка риска в лонг, с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_client = 91; //Ставка риска в шорт, с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + } //Объект передачи информации о валюте. message Currency { - string figi = 1; //Figi-идентификатор инструмента. + string figi = 1; //FIGI-идентификатор инструмента. string ticker = 2; //Тикер инструмента. string class_code = 3; //Класс-код (секция торгов). - string isin = 4; //Isin-идентификатор инструмента. - int32 lot = 5; //Лотность инструмента. Возможно совершение операций только на количества ценной бумаги, кратные параметру *lot*. Подробнее: [лот](https://tinkoff.github.io/investAPI/glossary#lot) + string isin = 4; //ISIN-идентификатор инструмента. + int32 lot = 5; //Лотность инструмента. Возможно совершение операций только на количества ценной бумаги, кратные параметру `lot`. [Подробнее](https://russianinvestments.github.io/investAPI/glossary#lot). string currency = 6; //Валюта расчётов. - Quotation klong = 7; //Коэффициент ставки риска длинной позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР). 1 – клиент с повышенным уровнем риска (КПУР) - Quotation kshort = 8; //Коэффициент ставки риска короткой позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР). 1 – клиент с повышенным уровнем риска (КПУР) - Quotation dlong = 9; //Ставка риска начальной маржи для КСУР лонг.Подробнее: [ставка риска в лонг](https://help.tinkoff.ru/margin-trade/long/risk-rate/) - Quotation dshort = 10; //Ставка риска начальной маржи для КСУР шорт. Подробнее: [ставка риска в шорт](https://help.tinkoff.ru/margin-trade/short/risk-rate/) - Quotation dlong_min = 11; //Ставка риска начальной маржи для КПУР лонг. Подробнее: [ставка риска в лонг](https://help.tinkoff.ru/margin-trade/long/risk-rate/) - Quotation dshort_min = 12; //Ставка риска начальной маржи для КПУР шорт. Подробнее: [ставка риска в шорт](https://help.tinkoff.ru/margin-trade/short/risk-rate/) + Quotation klong = 7; //Коэффициент ставки риска длинной позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation kshort = 8; //Коэффициент ставки риска короткой позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation dlong = 9 [deprecated = true]; //Ставка риска начальной маржи для КСУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort = 10 [deprecated = true]; //Ставка риска начальной маржи для КСУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dlong_min = 11 [deprecated = true]; //Ставка риска начальной маржи для КПУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_min = 12 [deprecated = true]; //Ставка риска начальной маржи для КПУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). bool short_enabled_flag = 13; //Признак доступности для операций в шорт. string name = 15; //Название инструмента. - string exchange = 16; //Tорговая площадка (секция биржи) + string exchange = 16; //Tорговая площадка (секция биржи). MoneyValue nominal = 17; //Номинал. - string country_of_risk = 18; //Код страны риска, т.е. страны, в которой компания ведёт основной бизнес. - string country_of_risk_name = 19; //Наименование страны риска, т.е. страны, в которой компания ведёт основной бизнес. + string country_of_risk = 18; //Код страны риска — то есть страны, в которой компания ведёт основной бизнес. + string country_of_risk_name = 19; //Наименование страны риска — то есть страны, в которой компания ведёт основной бизнес. SecurityTradingStatus trading_status = 20; //Текущий режим торгов инструмента. - bool otc_flag = 21; //Признак внебиржевой ценной бумаги. + bool otc_flag = 21; //Флаг, используемый ранее для определения внебиржевых инструментов. На данный момент не используется для торгуемых через API инструментов. Может использоваться как фильтр для операций, совершавшихся некоторое время назад на ОТС площадке. bool buy_available_flag = 22; //Признак доступности для покупки. bool sell_available_flag = 23; //Признак доступности для продажи. string iso_currency_name = 24; //Строковый ISO-код валюты. @@ -432,44 +511,49 @@ message Currency { string position_uid = 29; //Уникальный идентификатор позиции инструмента. bool for_iis_flag = 41; //Признак доступности для ИИС. - bool for_qual_investor_flag = 52; //Флаг отображающий доступность торговли инструментом только для квалифицированных инвесторов. - bool weekend_flag = 53; //Флаг отображающий доступность торговли инструментом по выходным. + bool for_qual_investor_flag = 52; //Флаг, отображающий доступность торговли инструментом только для квалифицированных инвесторов. + bool weekend_flag = 53; //Флаг, отображающий доступность торговли инструментом по выходным. bool blocked_tca_flag = 54; //Флаг заблокированного ТКС. google.protobuf.Timestamp first_1min_candle_date = 56; //Дата первой минутной свечи. google.protobuf.Timestamp first_1day_candle_date = 57; //Дата первой дневной свечи. + BrandData brand = 60; // Информация о бренде. + + Quotation dlong_client = 90; //Ставка риска в лонг, с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_client = 91; //Ставка риска в шорт, с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + } //Объект передачи информации об инвестиционном фонде. message Etf { - string figi = 1; //Figi-идентификатор инструмента. + string figi = 1; //FIGI-идентификатор инструмента. string ticker = 2; //Тикер инструмента. string class_code = 3; //Класс-код (секция торгов). - string isin = 4; //Isin-идентификатор инструмента. - int32 lot = 5; //Лотность инструмента. Возможно совершение операций только на количества ценной бумаги, кратные параметру *lot*. Подробнее: [лот](https://tinkoff.github.io/investAPI/glossary#lot) + string isin = 4; //ISIN-идентификатор инструмента. + int32 lot = 5; //Лотность инструмента. Возможно совершение операций только на количества ценной бумаги, кратные параметру `lot`. [Подробнее](https://russianinvestments.github.io/investAPI/glossary#lot). string currency = 6; //Валюта расчётов. - Quotation klong = 7; //Коэффициент ставки риска длинной позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР). 1 – клиент с повышенным уровнем риска (КПУР) - Quotation kshort = 8; //Коэффициент ставки риска короткой позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР). 1 – клиент с повышенным уровнем риска (КПУР) - Quotation dlong = 9; //Ставка риска начальной маржи для КСУР лонг.Подробнее: [ставка риска в лонг](https://help.tinkoff.ru/margin-trade/long/risk-rate/) - Quotation dshort = 10; //Ставка риска начальной маржи для КСУР шорт. Подробнее: [ставка риска в шорт](https://help.tinkoff.ru/margin-trade/short/risk-rate/) - Quotation dlong_min = 11; //Ставка риска начальной маржи для КПУР лонг. Подробнее: [ставка риска в лонг](https://help.tinkoff.ru/margin-trade/long/risk-rate/) - Quotation dshort_min = 12; //Ставка риска начальной маржи для КПУР шорт. Подробнее: [ставка риска в шорт](https://help.tinkoff.ru/margin-trade/short/risk-rate/) + Quotation klong = 7; //Коэффициент ставки риска длинной позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation kshort = 8; //Коэффициент ставки риска короткой позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation dlong = 9 [deprecated = true]; //Ставка риска начальной маржи для КСУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort = 10 [deprecated = true]; //Ставка риска начальной маржи для КСУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dlong_min = 11 [deprecated = true]; //Ставка риска начальной маржи для КПУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_min = 12 [deprecated = true]; //Ставка риска начальной маржи для КПУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). bool short_enabled_flag = 13; //Признак доступности для операций в шорт. string name = 15; //Название инструмента. string exchange = 16; //Tорговая площадка (секция биржи). Quotation fixed_commission = 17; //Размер фиксированной комиссии фонда. string focus_type = 18; //Возможные значения:
**equity** — акции;
**fixed_income** — облигации;
**mixed_allocation** — смешанный;
**money_market** — денежный рынок;
**real_estate** — недвижимость;
**commodity** — товары;
**specialty** — специальный;
**private_equity** — private equity;
**alternative_investment** — альтернативные инвестиции. - google.protobuf.Timestamp released_date = 19; //Дата выпуска в часовом поясе UTC. - Quotation num_shares = 20; //Количество акций фонда в обращении. + google.protobuf.Timestamp released_date = 19; //Дата выпуска по UTC. + Quotation num_shares = 20; //Количество паев фонда в обращении. - string country_of_risk = 21; //Код страны риска, т.е. страны, в которой компания ведёт основной бизнес. - string country_of_risk_name = 22; //Наименование страны риска, т.е. страны, в которой компания ведёт основной бизнес. + string country_of_risk = 21; //Код страны риска — то есть страны, в которой компания ведёт основной бизнес. + string country_of_risk_name = 22; //Наименование страны риска — то есть страны, в которой компания ведёт основной бизнес. string sector = 23; //Сектор экономики. string rebalancing_freq = 24; //Частота ребалансировки. SecurityTradingStatus trading_status = 25; //Текущий режим торгов инструмента. - bool otc_flag = 26; //Признак внебиржевой ценной бумаги. + bool otc_flag = 26; //Флаг, используемый ранее для определения внебиржевых инструментов. На данный момент не используется для торгуемых через API инструментов. Может использоваться как фильтр для операций, совершавшихся некоторое время назад на ОТС площадке. bool buy_available_flag = 27; //Признак доступности для покупки. bool sell_available_flag = 28; //Признак доступности для продажи. Quotation min_price_increment = 29; //Шаг цены. @@ -478,48 +562,55 @@ message Etf { string uid = 31; //Уникальный идентификатор инструмента. RealExchange real_exchange = 32; //Реальная площадка исполнения расчётов (биржа). string position_uid = 33; //Уникальный идентификатор позиции инструмента. + string asset_uid = 34; //Уникальный идентификатор актива. + InstrumentExchangeType instrument_exchange = 35; //Тип площадки торговли. bool for_iis_flag = 41; //Признак доступности для ИИС. - bool for_qual_investor_flag = 42; //Флаг отображающий доступность торговли инструментом только для квалифицированных инвесторов. - bool weekend_flag = 43; //Флаг отображающий доступность торговли инструментом по выходным. + bool for_qual_investor_flag = 42; //Флаг, отображающий доступность торговли инструментом только для квалифицированных инвесторов. + bool weekend_flag = 43; //ФлагФлаг, отображающий доступность торговли инструментом по выходным. bool blocked_tca_flag = 44; //Флаг заблокированного ТКС. - bool liquidity_flag = 45; //Флаг достаточной ликвидности + bool liquidity_flag = 45; //Флаг достаточной ликвидности. google.protobuf.Timestamp first_1min_candle_date = 56; //Дата первой минутной свечи. google.protobuf.Timestamp first_1day_candle_date = 57; //Дата первой дневной свечи. + BrandData brand = 60; // Информация о бренде. + + Quotation dlong_client = 90; //Ставка риска в лонг, с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_client = 91; //Ставка риска в шорт, с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + } //Объект передачи информации о фьючерсе. message Future { - string figi = 1; //Figi-идентификатор инструмента. + string figi = 1; //FIGI-идентификатор инструмента. string ticker = 2; //Тикер инструмента. string class_code = 3; //Класс-код (секция торгов). - int32 lot = 4; //Лотность инструмента. Возможно совершение операций только на количества ценной бумаги, кратные параметру *lot*. Подробнее: [лот](https://tinkoff.github.io/investAPI/glossary#lot) + int32 lot = 4; //Лотность инструмента. Возможно совершение операций только на количества ценной бумаги, кратные параметру `lot`. [Подробнее](https://russianinvestments.github.io/investAPI/glossary#lot). string currency = 5; //Валюта расчётов. - Quotation klong = 6; //Коэффициент ставки риска длинной позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР). 1 – клиент с повышенным уровнем риска (КПУР) - Quotation kshort = 7; //Коэффициент ставки риска короткой позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР). 1 – клиент с повышенным уровнем риска (КПУР) - Quotation dlong = 8; //Ставка риска начальной маржи для КСУР лонг.Подробнее: [ставка риска в лонг](https://help.tinkoff.ru/margin-trade/long/risk-rate/) - Quotation dshort = 9; //Ставка риска начальной маржи для КСУР шорт. Подробнее: [ставка риска в шорт](https://help.tinkoff.ru/margin-trade/short/risk-rate/) - Quotation dlong_min = 10; //Ставка риска начальной маржи для КПУР лонг. Подробнее: [ставка риска в лонг](https://help.tinkoff.ru/margin-trade/long/risk-rate/) - Quotation dshort_min = 11; //Ставка риска начальной маржи для КПУР шорт. Подробнее: [ставка риска в шорт](https://help.tinkoff.ru/margin-trade/short/risk-rate/) + Quotation klong = 6; //Коэффициент ставки риска длинной позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation kshort = 7; //Коэффициент ставки риска короткой позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation dlong = 8 [deprecated = true]; //Ставка риска начальной маржи для КСУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort = 9 [deprecated = true]; //Ставка риска начальной маржи для КСУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dlong_min = 10 [deprecated = true]; //Ставка риска начальной маржи для КПУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_min = 11 [deprecated = true]; //Ставка риска начальной маржи для КПУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). bool short_enabled_flag = 12; //Признак доступности для операций шорт. string name = 13; //Название инструмента. string exchange = 14; //Tорговая площадка (секция биржи). - google.protobuf.Timestamp first_trade_date = 15; //Дата начала обращения контракта в часовом поясе UTC. - google.protobuf.Timestamp last_trade_date = 16; //Дата в часовом поясе UTC, до которой возможно проведение операций с фьючерсом. + google.protobuf.Timestamp first_trade_date = 15; //Дата начала обращения контракта по UTC. + google.protobuf.Timestamp last_trade_date = 16; //Дата по UTC, до которой возможно проведение операций с фьючерсом. string futures_type = 17; //Тип фьючерса. Возможные значения:
**physical_delivery** — физические поставки;
**cash_settlement** — денежный эквивалент. string asset_type = 18; //Тип актива. Возможные значения:
**commodity** — товар;
**currency** — валюта;
**security** — ценная бумага;
**index** — индекс. string basic_asset = 19; //Основной актив. Quotation basic_asset_size = 20; //Размер основного актива. - string country_of_risk = 21; //Код страны риска, т.е. страны, в которой компания ведёт основной бизнес. - string country_of_risk_name = 22; //Наименование страны риска, т.е. страны, в которой компания ведёт основной бизнес. + string country_of_risk = 21; //Код страны риска — то есть страны, в которой компания ведёт основной бизнес. + string country_of_risk_name = 22; //Наименование страны риска — то есть страны, в которой компания ведёт основной бизнес. string sector = 23; //Сектор экономики. google.protobuf.Timestamp expiration_date = 24; //Дата истечения срока в часов поясе UTC. SecurityTradingStatus trading_status = 25; //Текущий режим торгов инструмента. - bool otc_flag = 26; //Признак внебиржевой ценной бумаги. + bool otc_flag = 26; //Флаг, используемый ранее для определения внебиржевых инструментов. На данный момент не используется для торгуемых через API инструментов. Может использоваться как фильтр для операций, совершавшихся некоторое время назад на ОТС площадке. bool buy_available_flag = 27; //Признак доступности для покупки. bool sell_available_flag = 28; //Признак доступности для продажи. Quotation min_price_increment = 29; //Шаг цены. @@ -531,78 +622,95 @@ message Future { string basic_asset_position_uid = 34; //Уникальный идентификатор позиции основного инструмента. bool for_iis_flag = 41; //Признак доступности для ИИС. - bool for_qual_investor_flag = 42; //Флаг отображающий доступность торговли инструментом только для квалифицированных инвесторов. - bool weekend_flag = 43; //Флаг отображающий доступность торговли инструментом по выходным. + bool for_qual_investor_flag = 42; //Флаг, отображающий доступность торговли инструментом только для квалифицированных инвесторов. + bool weekend_flag = 43; //Флаг, отображающий доступность торговли инструментом по выходным. bool blocked_tca_flag = 44; //Флаг заблокированного ТКС. google.protobuf.Timestamp first_1min_candle_date = 56; //Дата первой минутной свечи. google.protobuf.Timestamp first_1day_candle_date = 57; //Дата первой дневной свечи. + + MoneyValue initial_margin_on_buy = 61; //Гарантийное обеспечение при покупке. + MoneyValue initial_margin_on_sell = 62; //Гарантийное обеспечение при продаже. + Quotation min_price_increment_amount = 63; //Стоимость шага цены. + BrandData brand = 64; // Информация о бренде. + + Quotation dlong_client = 90; //Ставка риска в лонг, с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_client = 91; //Ставка риска в шорт, с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + } //Объект передачи информации об акции. message Share { - string figi = 1; //Figi-идентификатор инструмента. + string figi = 1; //FIGI-идентификатор инструмента. string ticker = 2; //Тикер инструмента. string class_code = 3; //Класс-код (секция торгов). - string isin = 4; //Isin-идентификатор инструмента. - int32 lot = 5; //Лотность инструмента. Возможно совершение операций только на количества ценной бумаги, кратные параметру *lot*. Подробнее: [лот](https://tinkoff.github.io/investAPI/glossary#lot) + string isin = 4; //ISIN-идентификатор инструмента. + int32 lot = 5; //Лотность инструмента. Возможно совершение операций только на количества ценной бумаги, кратные параметру `lot`. [Подробнее](https://russianinvestments.github.io/investAPI/glossary#lot) string currency = 6; //Валюта расчётов. - Quotation klong = 7; //Коэффициент ставки риска длинной позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР). 1 – клиент с повышенным уровнем риска (КПУР) - Quotation kshort = 8; //Коэффициент ставки риска короткой позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР). 1 – клиент с повышенным уровнем риска (КПУР) - Quotation dlong = 9; //Ставка риска начальной маржи для КСУР лонг.Подробнее: [ставка риска в лонг](https://help.tinkoff.ru/margin-trade/long/risk-rate/) - Quotation dshort = 10; //Ставка риска начальной маржи для КСУР шорт. Подробнее: [ставка риска в шорт](https://help.tinkoff.ru/margin-trade/short/risk-rate/) - Quotation dlong_min = 11; //Ставка риска начальной маржи для КПУР лонг. Подробнее: [ставка риска в лонг](https://help.tinkoff.ru/margin-trade/long/risk-rate/) - Quotation dshort_min = 12; //Ставка риска начальной маржи для КПУР шорт. Подробнее: [ставка риска в шорт](https://help.tinkoff.ru/margin-trade/short/risk-rate/) + Quotation klong = 7; //Коэффициент ставки риска длинной позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation kshort = 8; //Коэффициент ставки риска короткой позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation dlong = 9 [deprecated = true]; //Ставка риска начальной маржи для КСУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort = 10 [deprecated = true]; //Ставка риска начальной маржи для КСУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dlong_min = 11 [deprecated = true]; //Ставка риска начальной маржи для КПУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_min = 12 [deprecated = true]; //Ставка риска начальной маржи для КПУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). bool short_enabled_flag = 13; //Признак доступности для операций в шорт. string name = 15; //Название инструмента. string exchange = 16; //Tорговая площадка (секция биржи). - google.protobuf.Timestamp ipo_date = 17; //Дата IPO акции в часовом поясе UTC. + google.protobuf.Timestamp ipo_date = 17; //Дата IPO акции по UTC. int64 issue_size = 18; //Размер выпуска. - string country_of_risk = 19; //Код страны риска, т.е. страны, в которой компания ведёт основной бизнес. - string country_of_risk_name = 20; //Наименование страны риска, т.е. страны, в которой компания ведёт основной бизнес. + string country_of_risk = 19; //Код страны риска — то есть страны, в которой компания ведёт основной бизнес. + string country_of_risk_name = 20; //Наименование страны риска — то есть страны, в которой компания ведёт основной бизнес. string sector = 21; //Сектор экономики. int64 issue_size_plan = 22; //Плановый размер выпуска. MoneyValue nominal = 23; //Номинал. SecurityTradingStatus trading_status = 25; //Текущий режим торгов инструмента. - bool otc_flag = 26; //Признак внебиржевой ценной бумаги. + bool otc_flag = 26; //Флаг, используемый ранее для определения внебиржевых инструментов. На данный момент не используется для торгуемых через API инструментов. Может использоваться как фильтр для операций, совершавшихся некоторое время назад на ОТС площадке. bool buy_available_flag = 27; //Признак доступности для покупки. bool sell_available_flag = 28; //Признак доступности для продажи. bool div_yield_flag = 29; //Признак наличия дивидендной доходности. - ShareType share_type = 30; //Тип акции. Возможные значения: [ShareType](https://tinkoff.github.io/investAPI/instruments#sharetype) + ShareType share_type = 30; //Тип акции. Возможные значения — `[ShareType](https://russianinvestments.github.io/investAPI/instruments#sharetype)`. Quotation min_price_increment = 31; //Шаг цены. - bool api_trade_available_flag = 32; //Параметр указывает на возможность торговать инструментом через API. + bool api_trade_available_flag = 32; //Возможность торговать инструментом через API. string uid = 33; //Уникальный идентификатор инструмента. RealExchange real_exchange = 34; //Реальная площадка исполнения расчётов (биржа). string position_uid = 35; //Уникальный идентификатор позиции инструмента. + string asset_uid = 36; //Уникальный идентификатор актива. + InstrumentExchangeType instrument_exchange = 37; //Тип площадки торговли. bool for_iis_flag = 46; //Признак доступности для ИИС. - bool for_qual_investor_flag = 47; //Флаг отображающий доступность торговли инструментом только для квалифицированных инвесторов. - bool weekend_flag = 48; //Флаг отображающий доступность торговли инструментом по выходным - bool blocked_tca_flag = 49; //Флаг заблокированного ТКС - bool liquidity_flag = 50; //Флаг достаточной ликвидности + bool for_qual_investor_flag = 47; //Флаг, отображающий доступность торговли инструментом только для квалифицированных инвесторов. + bool weekend_flag = 48; //Флаг, отображающий доступность торговли инструментом по выходным. + bool blocked_tca_flag = 49; //Флаг заблокированного ТКС. + bool liquidity_flag = 50; //Флаг достаточной ликвидности. google.protobuf.Timestamp first_1min_candle_date = 56; //Дата первой минутной свечи. google.protobuf.Timestamp first_1day_candle_date = 57; //Дата первой дневной свечи. + BrandData brand = 60; // Информация о бренде. + + Quotation dlong_client = 90; //Ставка риска в лонг, с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_client = 91; //Ставка риска в шорт, с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + } -//Запрос НКД по облигации +//Запрос НКД по облигации. message GetAccruedInterestsRequest { - string figi = 1; //Figi-идентификатор инструмента. - google.protobuf.Timestamp from = 2; //Начало запрашиваемого периода в часовом поясе UTC. - google.protobuf.Timestamp to = 3; //Окончание запрашиваемого периода в часовом поясе UTC. + string figi = 1 [deprecated = true]; //FIGI-идентификатор инструмента. + google.protobuf.Timestamp from = 2 [(google.api.field_behavior) = REQUIRED]; //Начало запрашиваемого периода по UTC. + google.protobuf.Timestamp to = 3 [(google.api.field_behavior) = REQUIRED]; //Окончание запрашиваемого периода по UTC. + string instrument_id = 4 [(google.api.field_behavior) = REQUIRED]; //Идентификатор инструмента — `figi` или `instrument_uid`. } -//НКД облигации +//НКД облигации. message GetAccruedInterestsResponse { repeated AccruedInterest accrued_interests = 1; //Массив операций начисления купонов. } //Операция начисления купонов. message AccruedInterest { - google.protobuf.Timestamp date = 1; //Дата и время выплаты в часовом поясе UTC. + google.protobuf.Timestamp date = 1; //Дата и время выплаты по UTC. Quotation value = 2; //Величина выплаты. Quotation value_percent = 3; //Величина выплаты в процентах от номинала. Quotation nominal = 4; //Номинал облигации. @@ -610,7 +718,8 @@ message AccruedInterest { //Запрос информации о фьючерсе message GetFuturesMarginRequest { - string figi = 1; // Идентификатор инструмента. + string figi = 1 [deprecated = true]; // Идентификатор инструмента. + string instrument_id = 4 [(google.api.field_behavior) = REQUIRED]; //Идентификатор инструмента — `figi` или `instrument_uid`. } //Данные по фьючерсу @@ -621,21 +730,15 @@ message GetFuturesMarginResponse { Quotation min_price_increment_amount = 4; //Стоимость шага цены. } -//Тип идентификатора инструмента. Подробнее об идентификации инструментов: [Идентификация инструментов](https://tinkoff.github.io/investAPI/faq_identification/) +//Тип идентификатора инструмента. [Подробнее об идентификации инструментов](https://russianinvestments.github.io/investAPI/faq_identification/). enum InstrumentIdType { INSTRUMENT_ID_UNSPECIFIED = 0; //Значение не определено. - INSTRUMENT_ID_TYPE_FIGI = 1; //Figi. + INSTRUMENT_ID_TYPE_FIGI = 1; //FIGI. INSTRUMENT_ID_TYPE_TICKER = 2; //Ticker. INSTRUMENT_ID_TYPE_UID = 3; //Уникальный идентификатор. INSTRUMENT_ID_TYPE_POSITION_UID = 4; //Идентификатор позиции. } -//Статус запрашиваемых инструментов. -enum InstrumentStatus { - INSTRUMENT_STATUS_UNSPECIFIED = 0; //Значение не определено. - INSTRUMENT_STATUS_BASE = 1; //Базовый список инструментов (по умолчанию). Инструменты доступные для торговли через TINKOFF INVEST API. Cейчас списки бумаг, доступных из api и других интерфейсах совпадают (за исключением внебиржевых бумаг), но в будущем возможны ситуации, когда списки инструментов будут отличаться - INSTRUMENT_STATUS_ALL = 2; //Список всех инструментов. -} //Данные по инструменту. message InstrumentResponse { @@ -644,29 +747,29 @@ message InstrumentResponse { //Объект передачи основной информации об инструменте. message Instrument { - string figi = 1; //Figi-идентификатор инструмента. + string figi = 1; //FIGI-идентификатор инструмента. string ticker = 2; //Тикер инструмента. string class_code = 3; //Класс-код инструмента. - string isin = 4; //Isin-идентификатор инструмента. - int32 lot = 5; //Лотность инструмента. Возможно совершение операций только на количества ценной бумаги, кратные параметру *lot*. Подробнее: [лот](https://tinkoff.github.io/investAPI/glossary#lot) + string isin = 4; //ISIN-идентификатор инструмента. + int32 lot = 5; //Лотность инструмента. Возможно совершение операций только на количества ценной бумаги, кратные параметру `lot`. [Подробнее](https://russianinvestments.github.io/investAPI/glossary#lot). string currency = 6; //Валюта расчётов. - Quotation klong = 7; //Коэффициент ставки риска длинной позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР). 1 – клиент с повышенным уровнем риска (КПУР) - Quotation kshort = 8; //Коэффициент ставки риска короткой позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР). 1 – клиент с повышенным уровнем риска (КПУР) - Quotation dlong = 9; //ССтавка риска начальной маржи для КСУР лонг.Подробнее: [ставка риска в лонг](https://help.tinkoff.ru/margin-trade/long/risk-rate/) - Quotation dshort = 10; //Ставка риска начальной маржи для КСУР шорт. Подробнее: [ставка риска в шорт](https://help.tinkoff.ru/margin-trade/short/risk-rate/) - Quotation dlong_min = 11; //Ставка риска начальной маржи для КПУР лонг. Подробнее: [ставка риска в лонг](https://help.tinkoff.ru/margin-trade/long/risk-rate/) - Quotation dshort_min = 12; //Ставка риска начальной маржи для КПУР шорт. Подробнее: [ставка риска в шорт](https://help.tinkoff.ru/margin-trade/short/risk-rate/) + Quotation klong = 7; //Коэффициент ставки риска длинной позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation kshort = 8; //Коэффициент ставки риска короткой позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation dlong = 9 [deprecated = true]; //Ставка риска начальной маржи для КСУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort = 10 [deprecated = true]; //Ставка риска начальной маржи для КСУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dlong_min = 11 [deprecated = true]; //Ставка риска начальной маржи для КПУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_min = 12 [deprecated = true]; //Ставка риска начальной маржи для КПУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). bool short_enabled_flag = 13; //Признак доступности для операций в шорт. string name = 14; //Название инструмента. string exchange = 15; //Tорговая площадка (секция биржи). - string country_of_risk = 16; //Код страны риска, т.е. страны, в которой компания ведёт основной бизнес. - string country_of_risk_name = 17; //Наименование страны риска, т.е. страны, в которой компания ведёт основной бизнес. + string country_of_risk = 16; //Код страны риска — то есть страны, в которой компания ведёт основной бизнес. + string country_of_risk_name = 17; //Наименование страны риска — то есть страны, в которой компания ведёт основной бизнес. string instrument_type = 18; //Тип инструмента. SecurityTradingStatus trading_status = 19; //Текущий режим торгов инструмента. - bool otc_flag = 20; //Признак внебиржевой ценной бумаги. + bool otc_flag = 20; //Флаг, используемый ранее для определения внебиржевых инструментов. На данный момент не используется для торгуемых через API инструментов. Может использоваться как фильтр для операций, совершавшихся некоторое время назад на ОТС площадке. bool buy_available_flag = 21; //Признак доступности для покупки. bool sell_available_flag = 22; //Признак доступности для продажи. Quotation min_price_increment = 23; //Шаг цены. @@ -675,21 +778,29 @@ message Instrument { string uid = 25; //Уникальный идентификатор инструмента. RealExchange real_exchange = 26; //Реальная площадка исполнения расчётов (биржа). string position_uid = 27; //Уникальный идентификатор позиции инструмента. + string asset_uid = 28; //Уникальный идентификатор актива. bool for_iis_flag = 36; //Признак доступности для ИИС. - bool for_qual_investor_flag = 37; //Флаг отображающий доступность торговли инструментом только для квалифицированных инвесторов. - bool weekend_flag = 38; //Флаг отображающий доступность торговли инструментом по выходным - bool blocked_tca_flag = 39; //Флаг заблокированного ТКС - InstrumentType instrument_kind = 40; //Тип инструмента. + bool for_qual_investor_flag = 37; //Флаг, отображающий доступность торговли инструментом только для квалифицированных инвесторов. + bool weekend_flag = 38; //Флаг, отображающий доступность торговли инструментом по выходным. + bool blocked_tca_flag = 39; //Флаг заблокированного ТКС. + InstrumentType instrument_kind = 40; //Тип инструмента. google.protobuf.Timestamp first_1min_candle_date = 56; //Дата первой минутной свечи. google.protobuf.Timestamp first_1day_candle_date = 57; //Дата первой дневной свечи. + BrandData brand = 60; // Информация о бренде. + + + Quotation dlong_client = 490; //Ставка риска в лонг, с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_client = 491; //Ставка риска в шорт, с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + } //Запрос дивидендов. message GetDividendsRequest { - string figi = 1; //Figi-идентификатор инструмента. - google.protobuf.Timestamp from = 2; //Начало запрашиваемого периода в часовом поясе UTC. Фильтрация происходит по параметру *record_date* (дата фиксации реестра). - google.protobuf.Timestamp to = 3; //Окончание запрашиваемого периода в часовом поясе UTC. Фильтрация происходит по параметру *record_date* (дата фиксации реестра). + string figi = 1 [deprecated = true]; //FIGI-идентификатор инструмента. + optional google.protobuf.Timestamp from = 2; //Начало запрашиваемого периода по UTC. Фильтрация происходит по параметру `record_date` — дата фиксации реестра. + optional google.protobuf.Timestamp to = 3; //Окончание запрашиваемого периода по UTC. Фильтрация происходит по параметру `record_date` — дата фиксации реестра. + string instrument_id = 4 [(google.api.field_behavior) = REQUIRED]; //Идентификатор инструмента — `figi` или `instrument_uid`. } //Дивиденды. @@ -700,33 +811,33 @@ message GetDividendsResponse { //Информация о выплате. message Dividend { MoneyValue dividend_net = 1; //Величина дивиденда на 1 ценную бумагу (включая валюту). - google.protobuf.Timestamp payment_date = 2; //Дата фактических выплат в часовом поясе UTC. - google.protobuf.Timestamp declared_date = 3; //Дата объявления дивидендов в часовом поясе UTC. - google.protobuf.Timestamp last_buy_date = 4; //Последний день (включительно) покупки для получения выплаты в часовом поясе UTC. - string dividend_type = 5; //Тип выплаты. Возможные значения: Regular Cash – регулярные выплаты, Cancelled – выплата отменена, Daily Accrual – ежедневное начисление, Return of Capital – возврат капитала, прочие типы выплат. - google.protobuf.Timestamp record_date = 6; //Дата фиксации реестра в часовом поясе UTC. - string regularity = 7; //Регулярность выплаты. Возможные значения: Annual – ежегодная, Semi-Anl – каждые полгода, прочие типы выплат. - MoneyValue close_price = 8; //Цена закрытия инструмента на момент ex_dividend_date. + google.protobuf.Timestamp payment_date = 2; //Дата фактических выплат по UTC. + google.protobuf.Timestamp declared_date = 3; //Дата объявления дивидендов по UTC. + google.protobuf.Timestamp last_buy_date = 4; //Последний день (включительно) покупки для получения выплаты по UTC. + string dividend_type = 5; //Тип выплаты. Возможные значения: `Regular Cash` – регулярные выплаты, `Cancelled` – выплата отменена, `Daily Accrual` – ежедневное начисление, `Return of Capital` – возврат капитала, прочие типы выплат. + google.protobuf.Timestamp record_date = 6; //Дата фиксации реестра по UTC. + string regularity = 7; //Регулярность выплаты. Возможные значения: `Annual` – ежегодная, `Semi-Anl` – каждые полгода, прочие типы выплат. + MoneyValue close_price = 8; //Цена закрытия инструмента на момент `ex_dividend_date`. Quotation yield_value = 9; //Величина доходности. - google.protobuf.Timestamp created_at = 10; //Дата и время создания записи в часовом поясе UTC. + google.protobuf.Timestamp created_at = 10; //Дата и время создания записи по UTC. } //Тип акций. enum ShareType { SHARE_TYPE_UNSPECIFIED = 0; //Значение не определено. - SHARE_TYPE_COMMON = 1; //Обыкновенная - SHARE_TYPE_PREFERRED = 2; //Привилегированная - SHARE_TYPE_ADR = 3; //Американские депозитарные расписки - SHARE_TYPE_GDR = 4; //Глобальные депозитарные расписки - SHARE_TYPE_MLP = 5; //Товарищество с ограниченной ответственностью - SHARE_TYPE_NY_REG_SHRS = 6; //Акции из реестра Нью-Йорка - SHARE_TYPE_CLOSED_END_FUND = 7; //Закрытый инвестиционный фонд - SHARE_TYPE_REIT = 8; //Траст недвижимости + SHARE_TYPE_COMMON = 1; //Обыкновенная. + SHARE_TYPE_PREFERRED = 2; //Привилегированная. + SHARE_TYPE_ADR = 3; //Американские депозитарные расписки. + SHARE_TYPE_GDR = 4; //Глобальные депозитарные расписки. + SHARE_TYPE_MLP = 5; //Товарищество с ограниченной ответственностью. + SHARE_TYPE_NY_REG_SHRS = 6; //Акции из реестра Нью-Йорка. + SHARE_TYPE_CLOSED_END_FUND = 7; //Закрытый инвестиционный фонд. + SHARE_TYPE_REIT = 8; //Траст недвижимости. } //Запрос актива по идентификатору. message AssetRequest { - string id = 1; //uid-идентификатор актива. + string id = 1 [(google.api.field_behavior) = REQUIRED]; //UID-идентификатор актива. } //Данные по активу. @@ -736,7 +847,9 @@ message AssetResponse { //Запрос списка активов. message AssetsRequest { - InstrumentType instrument_type = 1; + optional InstrumentType instrument_type = 1; + optional InstrumentStatus instrument_status = 2; //Статус запрашиваемых инструментов. [Возможные значения](#instrumentstatus). + } //Список активов. @@ -753,8 +866,8 @@ message AssetFull { google.protobuf.Timestamp deleted_at = 6; //Дата и время удаления актива. repeated string required_tests = 7; //Тестирование клиентов. oneof ext { - AssetCurrency currency = 8; //Валюта. Обязательно и заполняется только для type = "ASSET_TYPE_CURRENCY". - AssetSecurity security = 9; //Ценная бумага. Обязательно и заполняется только для type = "ASSET_TYPE_SECURITY". + AssetCurrency currency = 8; //Валюта. Обязательно и заполняется только для `type = ASSET_TYPE_CURRENCY`. + AssetSecurity security = 9; //Ценная бумага. Обязательно и заполняется только для `type = ASSET_TYPE_SECURITY`. } string gos_reg_code = 10; //Номер государственной регистрации. string cfi = 11; //Код CFI. @@ -793,13 +906,13 @@ message AssetCurrency { message AssetSecurity { string isin = 1; //ISIN-идентификатор ценной бумаги. string type = 2; //Тип ценной бумаги. - InstrumentType instrument_kind = 10; //Тип инструмента. + InstrumentType instrument_kind = 10; //Тип инструмента. oneof ext { - AssetShare share = 3; //Акция. Заполняется только для акций (тип актива asset.type = "ASSET_TYPE_SECURITY" и security.type = share). - AssetBond bond = 4; //Облигация. Заполняется только для облигаций (тип актива asset.type = "ASSET_TYPE_SECURITY" и security.type = bond). - AssetStructuredProduct sp = 5; //Структурная нота. Заполняется только для структурных продуктов (тип актива asset.type = "ASSET_TYPE_SECURITY" и security.type = sp). - AssetEtf etf = 6; // Фонд. Заполняется только для фондов (тип актива asset.type = "ASSET_TYPE_SECURITY" и security.type = etf). - AssetClearingCertificate clearing_certificate = 7; // Клиринговый сертификат участия. Заполняется только для клиринговых сертификатов (тип актива asset.type = "ASSET_TYPE_SECURITY" и security.type = clearing_certificate). + AssetShare share = 3; //Акция. Заполняется только для акций — тип актива `asset.type = ASSET_TYPE_SECURITY` и `security.type = share`. + AssetBond bond = 4; //Облигация. Заполняется только для облигаций — тип актива `asset.type = ASSET_TYPE_SECURITY` и `security.type = bond`. + AssetStructuredProduct sp = 5; //Структурная нота. Заполняется только для структурных продуктов — тип актива `asset.type = ASSET_TYPE_SECURITY` и `security.type = sp`. + AssetEtf etf = 6; // Фонд. Заполняется только для фондов — тип актива `asset.type = ASSET_TYPE_SECURITY` и `security.type = etf`. + AssetClearingCertificate clearing_certificate = 7; // Клиринговый сертификат участия. Заполняется только для клиринговых сертификатов — тип актива `asset.type = ASSET_TYPE_SECURITY` и security.type = `clearing_certificate`. } } @@ -818,7 +931,7 @@ message AssetShare { string issue_kind = 11; //Форма выпуска ФИ. google.protobuf.Timestamp placement_date = 12; //Дата размещения акции. string repres_isin = 13; //ISIN базового актива. - Quotation issue_size_plan = 14; //Объявленное количество шт. + Quotation issue_size_plan = 14; //Объявленное количество, шт. Quotation total_float = 15; //Количество акций в свободном обращении. } @@ -835,7 +948,7 @@ message AssetBond { bool indexed_nominal_flag = 9; //Признак облигации с индексируемым номиналом. bool subordinated_flag = 10; //Признак субординированной облигации. bool collateral_flag = 11; //Признак обеспеченной облигации. - bool tax_free_flag = 12; //Признак показывает, что купоны облигации не облагаются налогом (для mass market). + bool tax_free_flag = 12; //Признак показывает, что купоны облигации не облагаются налогом — для mass market. bool amortization_flag = 13; //Признак облигации с амортизацией долга. bool floating_coupon_flag = 14; //Признак облигации с плавающим купоном. bool perpetual_flag = 15; //Признак бессрочной облигации. @@ -844,22 +957,22 @@ message AssetBond { google.protobuf.Timestamp state_reg_date = 18; //Дата выпуска облигации. google.protobuf.Timestamp placement_date = 19; //Дата размещения облигации. Quotation placement_price = 20; //Цена размещения облигации. - Quotation issue_size_plan = 21; //Объявленное количество шт. + Quotation issue_size_plan = 21; //Объявленное количество, шт. } //Структурная нота. message AssetStructuredProduct { - string borrow_name = 1; //Наименование заемщика. + string borrow_name = 1; //Наименование заёмщика. Quotation nominal = 2; //Номинал. string nominal_currency = 3; //Валюта номинала. StructuredProductType type = 4; //Тип структурной ноты. string logic_portfolio = 5; //Стратегия портфеля. AssetType asset_type = 6; //Тип базового актива. string basic_asset = 7; //Вид базового актива в зависимости от типа базового актива. - Quotation safety_barrier = 8; //Барьер сохранности (в процентах). + Quotation safety_barrier = 8; //Барьер сохранности в процентах. google.protobuf.Timestamp maturity_date = 9; //Дата погашения. - Quotation issue_size_plan = 10; //Объявленное количество шт. - Quotation issue_size = 11; //Объем размещения. + Quotation issue_size_plan = 10; //Объявленное количество, шт. + Quotation issue_size = 11; //Объём размещения. google.protobuf.Timestamp placement_date = 12; //Дата размещения ноты. string issue_kind = 13; //Форма выпуска. } @@ -873,14 +986,14 @@ enum StructuredProductType { //Фонд. message AssetEtf { - Quotation total_expense = 1; //Суммарные расходы фонда (в %). - Quotation hurdle_rate = 2; //Барьерная ставка доходности после которой фонд имеет право на perfomance fee (в процентах). - Quotation performance_fee = 3; //Комиссия за успешные результаты фонда (в процентах). - Quotation fixed_commission = 4; //Фиксированная комиссия за управление (в процентах). + Quotation total_expense = 1; //Суммарные расходы фонда в процентах. + Quotation hurdle_rate = 2; //Барьерная ставка доходности, после которой фонд имеет право на perfomance fee — в процентах. + Quotation performance_fee = 3; //Комиссия за успешные результаты фонда в процентах. + Quotation fixed_commission = 4; //Фиксированная комиссия за управление в процентах. string payment_type = 5; //Тип распределения доходов от выплат по бумагам. bool watermark_flag = 6; //Признак необходимости выхода фонда в плюс для получения комиссии. - Quotation buy_premium = 7; //Премия (надбавка к цене) при покупке доли в фонде (в процентах). - Quotation sell_discount = 8; //Ставка дисконта (вычет из цены) при продаже доли в фонде (в процентах). + Quotation buy_premium = 7; //Премия (надбавка к цене) при покупке доли в фонде — в процентах. + Quotation sell_discount = 8; //Ставка дисконта (вычет из цены) при продаже доли в фонде — в процентах. bool rebalancing_flag = 9; //Признак ребалансируемости портфеля фонда. string rebalancing_freq = 10; //Периодичность ребалансировки. string management_type = 11; //Тип управления. @@ -893,11 +1006,11 @@ message AssetEtf { string description = 18; //Описание фонда. string primary_index_description = 19; //Описание индекса, за которым следует фонд. string primary_index_company = 20; //Основные компании, в которые вкладывается фонд. - Quotation index_recovery_period = 21; //Срок восстановления индекса (после просадки). + Quotation index_recovery_period = 21; //Срок восстановления индекса после просадки. string inav_code = 22; //IVAV-код. bool div_yield_flag = 23; //Признак наличия дивидендной доходности. - Quotation expense_commission = 24; //Комиссия на покрытие расходов фонда (в процентах). - Quotation primary_index_tracking_error = 25; //Ошибка следования за индексом (в процентах). + Quotation expense_commission = 24; //Комиссия на покрытие расходов фонда в процентах. + Quotation primary_index_tracking_error = 25; //Ошибка следования за индексом в процентах. string rebalancing_plan = 26; //Плановая ребалансировка портфеля. string tax_rate = 27; //Ставки налогообложения дивидендов и купонов. repeated google.protobuf.Timestamp rebalancing_dates = 28; //Даты ребалансировок. @@ -914,7 +1027,7 @@ message AssetClearingCertificate { //Бренд. message Brand { - string uid = 1; //uid идентификатор бренда. + string uid = 1; //UID-идентификатор бренда. string name = 2; //Наименование бренда. string description = 3; //Описание. string info = 4; //Информация о бренде. @@ -926,20 +1039,20 @@ message Brand { //Идентификаторы инструмента. message AssetInstrument { - string uid = 1; //uid идентификатор инструмента. - string figi = 2; //figi идентификатор инструмента. + string uid = 1; //UID-идентификатор инструмента. + string figi = 2; //FIGI-идентификатор инструмента. string instrument_type = 3; //Тип инструмента. string ticker = 4; //Тикер инструмента. string class_code = 5; //Класс-код (секция торгов). repeated InstrumentLink links = 6; //Массив связанных инструментов. - InstrumentType instrument_kind = 10; //Тип инструмента. - string position_uid = 11; //id позиции. + InstrumentType instrument_kind = 10; //Тип инструмента. + string position_uid = 11; //ID позиции. } //Связь с другим инструментом. message InstrumentLink { string type = 1; //Тип связи. - string instrument_uid = 2; //uid идентификатор связанного инструмента. + string instrument_uid = 2; //UID-идентификатор связанного инструмента. } //Запрос списка избранных инструментов, входные параметры не требуются. @@ -948,30 +1061,33 @@ message GetFavoritesRequest { //В ответ передаётся список избранных инструментов в качестве массива. message GetFavoritesResponse { - repeated FavoriteInstrument favorite_instruments = 1; //Массив инструментов + repeated FavoriteInstrument favorite_instruments = 1; //Массив инструментов. } //Массив избранных инструментов. message FavoriteInstrument { - string figi = 1; //Figi-идентификатор инструмента. + string figi = 1; //FIGI-идентификатор инструмента. string ticker = 2; //Тикер инструмента. string class_code = 3; //Класс-код инструмента. - string isin = 4; //Isin-идентификатор инструмента. + string isin = 4; //ISIN-идентификатор инструмента. string instrument_type = 11; //Тип инструмента. - bool otc_flag = 16; //Признак внебиржевой ценной бумаги. - bool api_trade_available_flag = 17; //Параметр указывает на возможность торговать инструментом через API. - InstrumentType instrument_kind = 18; //Тип инструмента. + string name = 12; //Название инструмента. + string uid = 13; //Уникальный идентификатор инструмента. + bool otc_flag = 16; //Флаг, используемый ранее для определения внебиржевых инструментов. На данный момент не используется для торгуемых через API инструментов. Может использоваться как фильтр для операций, совершавшихся некоторое время назад на ОТС площадке. + bool api_trade_available_flag = 17; //Возможность торговать инструментом через API. + InstrumentType instrument_kind = 18; //Тип инструмента. } //Запрос редактирования списка избранных инструментов. message EditFavoritesRequest { - repeated EditFavoritesRequestInstrument instruments = 1; //Массив инструментов. - EditFavoritesActionType action_type = 6; //Тип действия со списком. + repeated EditFavoritesRequestInstrument instruments = 1 [(google.api.field_behavior) = REQUIRED]; //Массив инструментов. + EditFavoritesActionType action_type = 6 [(google.api.field_behavior) = REQUIRED]; //Тип действия со списком. } //Массив инструментов для редактирования списка избранных инструментов. message EditFavoritesRequestInstrument { - string figi = 1; //Figi-идентификатор инструмента. + optional string figi = 1 [deprecated = true]; //FIGI-идентификатор инструмента. + string instrument_id = 2 [(google.api.field_behavior) = REQUIRED]; //Идентификатор инструмента — `figi` или `instrument_uid`. } //Тип действия со списком избранных инструментов. @@ -983,7 +1099,7 @@ enum EditFavoritesActionType { //Результат редактирования списка избранных инструментов. message EditFavoritesResponse { - repeated FavoriteInstrument favorite_instruments = 1; //Массив инструментов + repeated FavoriteInstrument favorite_instruments = 1; //Массив инструментов. } //Реальная площадка исполнения расчётов. @@ -992,6 +1108,7 @@ enum RealExchange { REAL_EXCHANGE_MOEX = 1; //Московская биржа. REAL_EXCHANGE_RTS = 2; //Санкт-Петербургская биржа. REAL_EXCHANGE_OTC = 3; //Внебиржевой инструмент. + REAL_EXCHANGE_DEALER = 4; //Инструмент, торгуемый на площадке брокера. } //Запрос справочника стран. @@ -1002,6 +1119,28 @@ message GetCountriesResponse { repeated CountryResponse countries = 1; //Массив стран. } +//Запрос справочника индексов и товаров +message IndicativesRequest {} + +//Справочник индексов и товаров +message IndicativesResponse { + repeated IndicativeResponse instruments = 1; // Массив инструментов. +}; + +//Индикатив +message IndicativeResponse { + string figi = 1; // FIGI-идентификатор инструмента. + string ticker = 2; // Тикер инструмента. + string class_code = 3; // Класс-код инструмента. + string currency = 4; // Валюта расчётов. + InstrumentType instrument_kind = 10; //Тип инструмента. + string name = 12; // Название инструмента. + string exchange = 13; // Tорговая площадка (секция биржи). + string uid = 14; // Уникальный идентификатор инструмента. + bool buy_available_flag = 404; // Признак доступности для покупки. + bool sell_available_flag = 405; // Признак доступности для продажи. +} + //Данные о стране. message CountryResponse { string alfa_two = 1; //Двухбуквенный код страны. @@ -1012,9 +1151,9 @@ message CountryResponse { //Запрос на поиск инструментов. message FindInstrumentRequest { - string query = 1; //Строка поиска. - InstrumentType instrument_kind = 2; //Фильтр по типу инструмента. - bool api_trade_available_flag = 3; //Фильтр для отображения только торговых инструментов. + string query = 1 [(google.api.field_behavior) = REQUIRED]; //Строка поиска. + optional InstrumentType instrument_kind = 2; //Фильтр по типу инструмента. + optional bool api_trade_available_flag = 3; //Фильтр для отображения только торговых инструментов. } //Результат поиска инструментов. @@ -1024,40 +1163,241 @@ message FindInstrumentResponse { //Краткая информация об инструменте. message InstrumentShort { - string isin = 1; //Isin инструмента. - string figi = 2; //Figi инструмента. + string isin = 1; //ISIN инструмента. + string figi = 2; //FIGI инструмента. string ticker = 3; //Ticker инструмента. string class_code = 4; //ClassCode инструмента. string instrument_type = 5; //Тип инструмента. string name = 6; //Название инструмента. string uid = 7; //Уникальный идентификатор инструмента. string position_uid = 8; //Уникальный идентификатор позиции инструмента. - InstrumentType instrument_kind = 10; //Тип инструмента. - bool api_trade_available_flag = 11; //Параметр указывает на возможность торговать инструментом через API. + InstrumentType instrument_kind = 10; //Тип инструмента. + bool api_trade_available_flag = 11; //Возможность торговать инструментом через API. bool for_iis_flag = 12; //Признак доступности для ИИС. google.protobuf.Timestamp first_1min_candle_date = 26; //Дата первой минутной свечи. google.protobuf.Timestamp first_1day_candle_date = 27; //Дата первой дневной свечи. - bool for_qual_investor_flag = 28; //Флаг отображающий доступность торговли инструментом только для квалифицированных инвесторов. - bool weekend_flag = 29; //Флаг отображающий доступность торговли инструментом по выходным - bool blocked_tca_flag = 30; //Флаг заблокированного ТКС + bool for_qual_investor_flag = 28; //Флаг, отображающий доступность торговли инструментом только для квалифицированных инвесторов. + bool weekend_flag = 29; //Флаг, отображающий доступность торговли инструментом по выходным. + bool blocked_tca_flag = 30; //Флаг заблокированного ТКС. + int32 lot = 31; //Количество бумаг в лоте. } //Запрос списка брендов. -message GetBrandsRequest {} +message GetBrandsRequest { + Page paging = 1; //Настройки пагинации. +} //Запрос бренда. message GetBrandRequest { - string id = 1; //Uid-идентификатор бренда. + string id = 1 [(google.api.field_behavior) = REQUIRED]; //UID-идентификатор бренда. } //Список брендов. message GetBrandsResponse { repeated Brand brands = 1; //Массив брендов. + PageResponse paging = 2; //Данные по пагинации. +} + +//Запрос фундаментальных показателей +message GetAssetFundamentalsRequest { + repeated string assets = 1 [(google.api.field_behavior) = REQUIRED]; //Массив идентификаторов активов, не более 100 шт. +} + +//Фундаментальные показатели +message GetAssetFundamentalsResponse { + repeated StatisticResponse fundamentals = 1; + + //Фундаментальные показатели по активу + message StatisticResponse { + string asset_uid = 1; //Идентификатор актива. + string currency = 2; //Валюта. + double market_capitalization = 3; //Рыночная капитализация. + double high_price_last_52_weeks = 4; //Максимум за год. + double low_price_last_52_weeks = 5; //Минимум за год. + double average_daily_volume_last_10_days = 6; //Средний объём торгов за 10 дней. + double average_daily_volume_last_4_weeks = 7; //Средний объём торгов за месяц. + double beta = 8; + double free_float = 9; //Доля акций в свободном обращении. + double forward_annual_dividend_yield = 10; //Процент форвардной дивидендной доходности по отношению к цене акций. + double shares_outstanding = 11; //Количество акций в обращении. + double revenue_ttm = 12; //Выручка. + double ebitda_ttm = 13; //EBITDA — прибыль до вычета процентов, налогов, износа и амортизации. + double net_income_ttm = 14; //Чистая прибыль. + double eps_ttm = 15; //EPS — величина чистой прибыли компании, которая приходится на каждую обыкновенную акцию. + double diluted_eps_ttm = 16; //EPS компании с допущением, что все конвертируемые ценные бумаги компании были сконвертированы в обыкновенные акции. + double free_cash_flow_ttm = 17; //Свободный денежный поток. + double five_year_annual_revenue_growth_rate = 18; //Среднегодовой рocт выручки за 5 лет. + double three_year_annual_revenue_growth_rate = 19; //Среднегодовой рocт выручки за 3 года. + double pe_ratio_ttm = 20; //Соотношение рыночной капитализации компании к её чистой прибыли. + double price_to_sales_ttm = 21; //Соотношение рыночной капитализации компании к её выручке. + double price_to_book_ttm = 22; //Соотношение рыночной капитализации компании к её балансовой стоимости. + double price_to_free_cash_flow_ttm = 23; //Соотношение рыночной капитализации компании к её свободному денежному потоку. + double total_enterprise_value_mrq = 24; //Рыночная стоимость компании. + double ev_to_ebitda_mrq = 25; //Соотношение EV и EBITDA. + double net_margin_mrq = 26; //Маржа чистой прибыли. + double net_interest_margin_mrq = 27; //Рентабельность чистой прибыли. + double roe = 28; //Рентабельность собственного капитала. + double roa = 29; //Рентабельность активов. + double roic = 30; //Рентабельность активов. + double total_debt_mrq = 31; //Сумма краткосрочных и долгосрочных обязательств компании. + double total_debt_to_equity_mrq = 32; //Соотношение долга к собственному капиталу. + double total_debt_to_ebitda_mrq = 33; //Total Debt/EBITDA. + double free_cash_flow_to_price = 34; //Отношение свободногоо кэша к стоимости. + double net_debt_to_ebitda = 35; //Отношение чистого долга к EBITDA. + double current_ratio_mrq = 36; //Коэффициент текущей ликвидности. + double fixed_charge_coverage_ratio_fy = 37; //Коэффициент покрытия фиксированных платежей — FCCR. + double dividend_yield_daily_ttm = 38; //Дивидендная доходность за 12 месяцев. + double dividend_rate_ttm = 39; //Выплаченные дивиденды за 12 месяцев. + double dividends_per_share = 40; //Значение дивидендов на акцию. + double five_years_average_dividend_yield = 41; //Средняя дивидендная доходность за 5 лет. + double five_year_annual_dividend_growth_rate = 42; //Среднегодовой рост дивидендов за 5 лет. + double dividend_payout_ratio_fy = 43; //Процент чистой прибыли, уходящий на выплату дивидендов. + double buy_back_ttm = 44; //Деньги, потраченные на обратный выкуп акций. + double one_year_annual_revenue_growth_rate = 45; //Рост выручки за 1 год. + string domicile_indicator_code = 46; //Код страны. + double adr_to_common_share_ratio = 47; //Соотношение депозитарной расписки к акциям. + double number_of_employees = 48; //Количество сотрудников. + google.protobuf.Timestamp ex_dividend_date = 49; + google.protobuf.Timestamp fiscal_period_start_date = 50; //Начало фискального периода. + google.protobuf.Timestamp fiscal_period_end_date = 51; //Окончание фискального периода. + double revenue_change_five_years = 53; //Изменение общего дохода за 5 лет. + double eps_change_five_years = 54; //Изменение EPS за 5 лет. + double ebitda_change_five_years = 55; //Изменение EBIDTA за 5 лет. + double total_debt_change_five_years = 56; //Изменение общей задолжности за 5 лет. + double ev_to_sales = 57; //Отношение EV к выручке. + } + +} + +//Запрос отчетов эмитентов +message GetAssetReportsRequest { + string instrument_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор инструмента в формате UID. + optional google.protobuf.Timestamp from = 2; //Начало запрашиваемого периода по UTC. + optional google.protobuf.Timestamp to = 3; //Окончание запрашиваемого периода по UTC. +} + +//Отчеты эмитентов +message GetAssetReportsResponse { + repeated GetAssetReportsEvent events = 1; // Массив событий по облигации. + + //Отчет + message GetAssetReportsEvent { + string instrument_id = 1; // Идентификатор инструмента. + google.protobuf.Timestamp report_date = 2; // Дата публикации отчёта. + int32 period_year = 3; // Год периода отчета. + int32 period_num = 4; // Номер периода. + AssetReportPeriodType period_type = 5; // Тип отчёта. + google.protobuf.Timestamp created_at = 6; // Дата создания записи. + } + + enum AssetReportPeriodType { + PERIOD_TYPE_UNSPECIFIED = 0; // Не указан. + PERIOD_TYPE_QUARTER = 1; // Квартальный. + PERIOD_TYPE_SEMIANNUAL = 2; // Полугодовой. + PERIOD_TYPE_ANNUAL = 3; // Годовой. + } +} + +//Запрос консенсус-прогнозов +message GetConsensusForecastsRequest { + optional Page paging = 1; //Настройки пагинации. +} + +//Консенсус-прогнозы +message GetConsensusForecastsResponse { + repeated ConsensusForecastsItem items = 1; // Массив прогнозов. + PageResponse page = 2; //Данные по пагинации. + + //Прогноз + message ConsensusForecastsItem { + string uid = 1; // UID-идентификатор. + string asset_uid = 2; // UID-идентификатор актива. + google.protobuf.Timestamp created_at = 3; // Дата и время создания записи. + Quotation best_target_price = 4; // Целевая цена на 12 месяцев. + Quotation best_target_low = 5; // Минимальная прогнозная цена. + Quotation best_target_high = 6; // Максимальная прогнозная цена. + int32 total_buy_recommend = 7; // Количество аналитиков рекомендующих покупать. + int32 total_hold_recommend = 8; // Количество аналитиков рекомендующих держать. + int32 total_sell_recommend = 9; // Количество аналитиков рекомендующих продавать. + string currency = 10; // Валюта прогнозов инструмента. + Recommendation consensus = 11; // Консенсус-прогноз. + google.protobuf.Timestamp prognosis_date = 12; // Дата прогноза. + } + +} + +enum Recommendation { + RECOMMENDATION_UNSPECIFIED = 0; // Не определено. + RECOMMENDATION_BUY = 1; // Покупать. + RECOMMENDATION_HOLD = 2; // Держать. + RECOMMENDATION_SELL = 3; // Продавать. +} + +//Запрос прогнозов инвестдомов. +message GetForecastRequest { + string instrument_id = 1; // Идентификатор инструмента. +} + +//Прогнозы инвестдомов по инструменту. +message GetForecastResponse { + repeated TargetItem targets = 1; //Массив прогнозов. + ConsensusItem consensus = 2; // Согласованный прогноз. + + //Прогноз + message TargetItem { + string uid = 1; // Уникальный идентификатор инструмента. + string ticker = 2; // Тикер инструмента. + string company = 3; // Название компании, давшей прогноз. + Recommendation recommendation = 4; // Прогноз. + google.protobuf.Timestamp recommendation_date = 5; //Дата прогноза. + string currency = 6; // Валюта. + Quotation current_price = 7; // Текущая цена. + Quotation target_price = 8; // Прогнозируемая цена. + Quotation price_change = 9; // Изменение цены. + Quotation price_change_rel = 10; // Относительное изменение цены. + string show_name = 11; // Наименование инструмента. + } + + //Консенсус-прогноз. + message ConsensusItem { + string uid = 1; // Уникальный идентификатор инструмента. + string ticker = 2; // Тикер инструмента. + Recommendation recommendation = 3; // Прогноз. + string currency = 4; // Валюта. + Quotation current_price = 5; // Текущая цена. + Quotation consensus = 6; // Прогнозируемая цена. + Quotation min_target = 7; // Минимальная цена прогноза. + Quotation max_target = 8; // Максимальная цена прогноза. + Quotation price_change = 9; // Изменение цены. + Quotation price_change_rel = 10; // Относительное изменение цены. + } +} + +message TradingInterval { + string type = 1; //Название интервала. + TimeInterval interval = 2; //Интервал. + + message TimeInterval { + google.protobuf.Timestamp start_ts = 1; // Время начала интервала. + google.protobuf.Timestamp end_ts = 2; // Время окончания интервала. + } } //Уровень риска облигации. enum RiskLevel { - RISK_LEVEL_HIGH = 0; //Высокий уровень риска - RISK_LEVEL_MODERATE = 1; //Средний уровень риска - RISK_LEVEL_LOW = 2; //Низкий уровень риска + RISK_LEVEL_UNSPECIFIED = 0; //Не указан. + RISK_LEVEL_LOW = 1; //Низкий уровень риска. + RISK_LEVEL_MODERATE = 2; //Средний уровень риска. + RISK_LEVEL_HIGH = 3; //Высокий уровень риска. +} + +enum BondType { + BOND_TYPE_UNSPECIFIED = 0; // Тип облигации не определён. + BOND_TYPE_REPLACED = 1; // Замещающая облигация. +} + +// Площадка торговли. +enum InstrumentExchangeType { + INSTRUMENT_EXCHANGE_UNSPECIFIED = 0; // Площадка торговли не определена. + INSTRUMENT_EXCHANGE_DEALER = 1; // Бумага, торгуемая у дилера. } diff --git a/investAPI-main/src/docs/contracts/marketdata.proto b/investAPI-main/src/docs/contracts/marketdata.proto index 9e98b4b..8300f0c 100644 --- a/investAPI-main/src/docs/contracts/marketdata.proto +++ b/investAPI-main/src/docs/contracts/marketdata.proto @@ -11,33 +11,37 @@ option php_namespace = "Tinkoff\\Invest\\V1"; import "google/protobuf/timestamp.proto"; import "common.proto"; +import "google/api/field_behavior.proto"; -service MarketDataService { //Сервис получения биржевой информации:
**1**. свечи;
**2**. стаканы;
**3**. торговые статусы;
**4**. лента сделок. +service MarketDataService {//Сервис для получения биржевой информации:
1. Свечи.
2. Стаканы.
3. Торговые статусы.
4. Лента сделок. - //Метод запроса исторических свечей по инструменту. + //Запросить исторические свечи по инструменту. rpc GetCandles(GetCandlesRequest) returns (GetCandlesResponse); - //Метод запроса цен последних сделок по инструментам. + //Запросить цены последних сделок по инструментам. rpc GetLastPrices(GetLastPricesRequest) returns (GetLastPricesResponse); - //Метод получения стакана по инструменту. + //Получить стакан по инструменту. rpc GetOrderBook(GetOrderBookRequest) returns (GetOrderBookResponse); - //Метод запроса статуса торгов по инструментам. + //Запросить статус торгов по инструментам. rpc GetTradingStatus(GetTradingStatusRequest) returns (GetTradingStatusResponse); - //Метод запроса статуса торгов по инструментам. + //Запросить статус торгов по инструментам. rpc GetTradingStatuses(GetTradingStatusesRequest) returns (GetTradingStatusesResponse); - //Метод запроса обезличенных сделок за последний час. + //Запросить обезличенные сделки за последний час. rpc GetLastTrades(GetLastTradesRequest) returns (GetLastTradesResponse); - //Метод запроса цен закрытия торговой сессии по инструментам. + //Запросить цены закрытия торговой сессии по инструментам. rpc GetClosePrices(GetClosePricesRequest) returns (GetClosePricesResponse); + + //Получить технические индикаторы по инструменту. + rpc GetTechAnalysis(GetTechAnalysisRequest) returns (GetTechAnalysisResponse); } service MarketDataStreamService { - //Bi-directional стрим предоставления биржевой информации. + //Bidirectional-стрим предоставления биржевой информации. rpc MarketDataStream(stream MarketDataRequest) returns (stream MarketDataResponse); //Server-side стрим предоставления биржевой информации. @@ -53,6 +57,8 @@ message MarketDataRequest { SubscribeInfoRequest subscribe_info_request = 4; //Запрос подписки на торговые статусы инструментов. SubscribeLastPriceRequest subscribe_last_price_request = 5; //Запрос подписки на цены последних сделок. GetMySubscriptions get_my_subscriptions = 6; //Запрос своих подписок. + PingRequest ping = 7; //Запрос проверки активности соединения. + PingDelaySettings ping_settings = 15; //Запрос настройки пинга. } } @@ -62,6 +68,7 @@ message MarketDataServerSideStreamRequest { SubscribeTradesRequest subscribe_trades_request = 3; //Запрос подписки на ленту обезличенных сделок. SubscribeInfoRequest subscribe_info_request = 4; //Запрос подписки на торговые статусы инструментов. SubscribeLastPriceRequest subscribe_last_price_request = 5; //Запрос подписки на цены последних сделок. + PingDelaySettings ping_settings = 15; //Запрос настройки пинга. } //Пакет биржевой информации по подписке. @@ -85,7 +92,8 @@ message MarketDataResponse { message SubscribeCandlesRequest { SubscriptionAction subscription_action = 1; //Изменение статуса подписки. repeated CandleInstrument instruments = 2; //Массив инструментов для подписки на свечи. - bool waiting_close = 3; //Флаг ожидания закрытия временного интервала для отправки свечи, применяется только для минутных свечей. + bool waiting_close = 3; //Флаг ожидания закрытия временного интервала для отправки свечи. + optional GetCandlesRequest.CandleSource candle_source_type = 9; //Источник свечей. } //Тип операции со списком подписок. @@ -100,27 +108,42 @@ enum SubscriptionInterval { SUBSCRIPTION_INTERVAL_UNSPECIFIED = 0; //Интервал свечи не определён. SUBSCRIPTION_INTERVAL_ONE_MINUTE = 1; //Минутные свечи. SUBSCRIPTION_INTERVAL_FIVE_MINUTES = 2; //Пятиминутные свечи. + SUBSCRIPTION_INTERVAL_FIFTEEN_MINUTES = 3; //Пятнадцатиминутные свечи. + SUBSCRIPTION_INTERVAL_ONE_HOUR = 4; //Часовые свечи. + SUBSCRIPTION_INTERVAL_ONE_DAY = 5; //Дневные свечи. + SUBSCRIPTION_INTERVAL_2_MIN = 6; //Двухминутные свечи. + SUBSCRIPTION_INTERVAL_3_MIN = 7; //Трёхминутные свечи. + SUBSCRIPTION_INTERVAL_10_MIN = 8; //Десятиминутные свечи. + SUBSCRIPTION_INTERVAL_30_MIN = 9; //Тридцатиминутные свечи. + SUBSCRIPTION_INTERVAL_2_HOUR = 10; //Двухчасовые свечи. + SUBSCRIPTION_INTERVAL_4_HOUR = 11; //Четырёхчасовые свечи. + SUBSCRIPTION_INTERVAL_WEEK = 12; //Недельные свечи. + SUBSCRIPTION_INTERVAL_MONTH = 13; //Месячные свечи. } //Запрос изменения статус подписки на свечи. message CandleInstrument { - string figi = 1 [ deprecated = true ]; // Deprecated Figi-идентификатор инструмента. Необходимо использовать instrument_id. - SubscriptionInterval interval = 2; //Интервал свечей. - string instrument_id = 3; //Идентификатор инструмента, принимает значение figi или instrument_uid + string figi = 1 [deprecated = true]; // Deprecated FIGI-идентификатор инструмента. Используйте `instrument_id`. + SubscriptionInterval interval = 2; //Интервал свечей. Двухчасовые и четырёхчасовые свечи в стриме отсчитываются с 0:00 по UTC. + string instrument_id = 3; //Идентификатор инструмента. Принимает значение `figi` или `instrument_uid`. } //Результат изменения статус подписки на свечи. message SubscribeCandlesResponse { - string tracking_id = 1; //Уникальный идентификатор запроса, подробнее: [tracking_id](https://tinkoff.github.io/investAPI/grpc#tracking-id). + string tracking_id = 1; //Уникальный идентификатор запроса. [Подробнее](https://russianinvestments.github.io/investAPI/grpc#tracking-id). repeated CandleSubscription candles_subscriptions = 2; //Массив статусов подписки на свечи. } //Статус подписки на свечи. message CandleSubscription { - string figi = 1; //Figi-идентификатор инструмента. + string figi = 1; //FIGI-идентификатор инструмента. SubscriptionInterval interval = 2; //Интервал свечей. SubscriptionStatus subscription_status = 3; //Статус подписки. - string instrument_uid = 4; //Uid инструмента + string instrument_uid = 4; //UID инструмента. + bool waiting_close = 5; //Флаг ожидания закрытия временного интервала для отправки свечи. + string stream_id = 6; //Идентификатор открытого соединения. + string subscription_id = 7; //Идентификатор подписки в формате `UUID`. + optional GetCandlesRequest.CandleSource candle_source_type = 9; //Источник свечей. } //Результат подписки. @@ -128,13 +151,14 @@ enum SubscriptionStatus { SUBSCRIPTION_STATUS_UNSPECIFIED = 0; //Статус подписки не определён. SUBSCRIPTION_STATUS_SUCCESS = 1; //Успешно. SUBSCRIPTION_STATUS_INSTRUMENT_NOT_FOUND = 2; //Инструмент не найден. - SUBSCRIPTION_STATUS_SUBSCRIPTION_ACTION_IS_INVALID = 3; //Некорректный статус подписки, список возможных значений: [SubscriptionAction](https://tinkoff.github.io/investAPI/marketdata#subscriptionaction). - SUBSCRIPTION_STATUS_DEPTH_IS_INVALID = 4; //Некорректная глубина стакана, доступные значения: 1, 10, 20, 30, 40, 50. - SUBSCRIPTION_STATUS_INTERVAL_IS_INVALID = 5; //Некорректный интервал свечей, список возможных значений: [SubscriptionInterval](https://tinkoff.github.io/investAPI/marketdata#subscriptioninterval). - SUBSCRIPTION_STATUS_LIMIT_IS_EXCEEDED = 6; //Превышен лимит на общее количество подписок в рамках стрима, подробнее: [Лимитная политика](https://tinkoff.github.io/investAPI/limits/). + SUBSCRIPTION_STATUS_SUBSCRIPTION_ACTION_IS_INVALID = 3; //Некорректный статус подписки. [Список возможных значений](https://russianinvestments.github.io/investAPI/marketdata#subscriptionaction). + SUBSCRIPTION_STATUS_DEPTH_IS_INVALID = 4; //Некорректная глубина стакана. Доступные значения — 1, 10, 20, 30, 40, 50. + SUBSCRIPTION_STATUS_INTERVAL_IS_INVALID = 5; //Некорректный интервал свечей. [Список возможных значений](https://russianinvestments.github.io/investAPI/marketdata#subscriptioninterval). + SUBSCRIPTION_STATUS_LIMIT_IS_EXCEEDED = 6; //Превышен лимит на общее количество подписок в рамках стрима. [Лимитная политика](https://russianinvestments.github.io/investAPI/limits/). SUBSCRIPTION_STATUS_INTERNAL_ERROR = 7; //Внутренняя ошибка сервиса. - SUBSCRIPTION_STATUS_TOO_MANY_REQUESTS = 8; //Превышен лимит на количество запросов на подписки в течение установленного отрезка времени - SUBSCRIPTION_STATUS_SUBSCRIPTION_NOT_FOUND = 9; // Активная подписка не найдена. Ошибка может возникнуть только при отписке от не существующей отписки + SUBSCRIPTION_STATUS_TOO_MANY_REQUESTS = 8; //Превышен лимит на количество запросов на подписки в течение установленного отрезка времени. + SUBSCRIPTION_STATUS_SUBSCRIPTION_NOT_FOUND = 9; // Активная подписка не найдена. Ошибка может возникнуть только при отписке от несуществующей подписки. + SUBSCRIPTION_STATUS_SOURCE_IS_INVALID = 10; //Указан некорректный источник } //Запрос на изменение статуса подписки на стаканы. @@ -145,48 +169,64 @@ message SubscribeOrderBookRequest { //Запрос подписки на стаканы. message OrderBookInstrument { - string figi = 1 [ deprecated = true ]; //Deprecated Figi-идентификатор инструмента. Необходимо использовать instrument_id. + string figi = 1 [deprecated = true]; //Deprecated FIGI-идентификатор инструмента. Используйте `instrument_id`. int32 depth = 2; //Глубина стакана. - string instrument_id = 3; //Идентификатор инструмента, принимает значение figi или instrument_uid + string instrument_id = 3; //Идентификатор инструмента. Принимает значение `figi` или `instrument_uid`. + OrderBookType order_book_type = 4; //Тип стакана. По умолчанию ORDERBOOK_TYPE_ALL - стакан биржевой и дилера. } //Результат изменения статуса подписки на стаканы. message SubscribeOrderBookResponse { - string tracking_id = 1; //Уникальный идентификатор запроса, подробнее: [tracking_id](https://tinkoff.github.io/investAPI/grpc#tracking-id). + string tracking_id = 1; //Уникальный идентификатор запроса. [Подробнее](https://russianinvestments.github.io/investAPI/grpc#tracking-id). repeated OrderBookSubscription order_book_subscriptions = 2; //Массив статусов подписки на стаканы. } //Статус подписки. message OrderBookSubscription { - string figi = 1; //Figi-идентификатор инструмента. + string figi = 1; //FIGI-идентификатор инструмента. int32 depth = 2; //Глубина стакана. SubscriptionStatus subscription_status = 3; //Статус подписки. - string instrument_uid = 4; //Uid инструмента + string instrument_uid = 4; //UID инструмента. + string stream_id = 5; //Идентификатор открытого соединения. + string subscription_id = 6; //Идентификатор подписки в формате `UUID`. + OrderBookType order_book_type = 7; //Тип стакана. +} + +//Типы источников сделок. +enum TradeSourceType { + TRADE_SOURCE_UNSPECIFIED = 0; //Тип источника сделки не определён. + TRADE_SOURCE_EXCHANGE = 1; // Биржевые сделки. + TRADE_SOURCE_DEALER = 2; // Сделки дилера. + TRADE_SOURCE_ALL = 3; // Все сделки. } //Изменение статуса подписки на поток обезличенных сделок. message SubscribeTradesRequest { SubscriptionAction subscription_action = 1; //Изменение статуса подписки. repeated TradeInstrument instruments = 2; //Массив инструментов для подписки на поток обезличенных сделок. + TradeSourceType trade_source = 3; //Тип источника сделок. По умолчанию TRADE_SOURCE_ALL - все сделки. } //Запрос подписки на поток обезличенных сделок. message TradeInstrument { - string figi = 1 [ deprecated = true ]; //Deprecated Figi-идентификатор инструмента. Необходимо использовать instrument_id. - string instrument_id = 2; //Идентификатор инструмента, принимает значение figi или instrument_uid + string figi = 1 [deprecated = true]; //Deprecated FIGI-идентификатор инструмента. Используйте instrument_id`. + string instrument_id = 2; //Идентификатор инструмента. Принимает значение `figi` или `instrument_uid`. } //Результат изменения статуса подписки на поток обезличенных сделок. message SubscribeTradesResponse { - string tracking_id = 1; //Уникальный идентификатор запроса, подробнее: [tracking_id](https://tinkoff.github.io/investAPI/grpc#tracking-id). + string tracking_id = 1; //Уникальный идентификатор запроса. [Подробнее](https://russianinvestments.github.io/investAPI/grpc#tracking-id). repeated TradeSubscription trade_subscriptions = 2; //Массив статусов подписки на поток сделок. + TradeSourceType trade_source = 3; //Тип источника сделок. } //Статус подписки. message TradeSubscription { - string figi = 1; //Figi-идентификатор инструмента. + string figi = 1; //FIGI-идентификатор инструмента. SubscriptionStatus subscription_status = 2; //Статус подписки. - string instrument_uid = 3; //Uid инструмента + string instrument_uid = 3; //UID инструмента. + string stream_id = 4; //Идентификатор открытого соединения. + string subscription_id = 5; //Идентификатор подписки в формате UUID. } //Изменение статуса подписки на торговый статус инструмента. @@ -197,21 +237,23 @@ message SubscribeInfoRequest { //Запрос подписки на торговый статус. message InfoInstrument { - string figi = 1 [ deprecated = true ]; //Deprecated Figi-идентификатор инструмента. Необходимо использовать instrument_id. - string instrument_id = 2; //Идентификатор инструмента, принимает значение figi или instrument_uid + string figi = 1 [deprecated = true]; //Deprecated FIGI-идентификатор инструмента. Используйте instrument_id`. + string instrument_id = 2; //Идентификатор инструмента. Принимает значение `figi` или `instrument_uid`. } //Результат изменения статуса подписки на торговый статус. message SubscribeInfoResponse { - string tracking_id = 1; //Уникальный идентификатор запроса, подробнее: [tracking_id](https://tinkoff.github.io/investAPI/grpc#tracking-id). + string tracking_id = 1; //Уникальный идентификатор запроса. [Подробнее](https://russianinvestments.github.io/investAPI/grpc#tracking-id). repeated InfoSubscription info_subscriptions = 2; //Массив статусов подписки на торговый статус. } //Статус подписки. message InfoSubscription { - string figi = 1; //Figi-идентификатор инструмента. + string figi = 1; //FIGI-идентификатор инструмента. SubscriptionStatus subscription_status = 2; //Статус подписки. - string instrument_uid = 3; //Uid инструмента + string instrument_uid = 3; //UID инструмента. + string stream_id = 4; //Идентификатор открытого соединения. + string subscription_id = 5; //Идентификатор подписки в формате UUID. } //Изменение статуса подписки на цену последней сделки по инструменту. @@ -222,64 +264,69 @@ message SubscribeLastPriceRequest { //Запрос подписки на последнюю цену. message LastPriceInstrument { - string figi = 1 [ deprecated = true ]; //Deprecated Figi-идентификатор инструмента. Необходимо использовать instrument_id. - string instrument_id = 2; //Идентификатор инструмента, принимает значение figi или instrument_uid + string figi = 1 [deprecated = true]; //Deprecated FIGI-идентификатор инструмента. Используйте instrument_id`. + string instrument_id = 2; //Идентификатор инструмента. Принимает значение `figi` или `instrument_uid`. } //Результат изменения статуса подписки на цену последней сделки. message SubscribeLastPriceResponse { - string tracking_id = 1; //Уникальный идентификатор запроса, подробнее: [tracking_id](https://tinkoff.github.io/investAPI/grpc#tracking-id). + string tracking_id = 1; //Уникальный идентификатор запроса. [Подробнее](https://russianinvestments.github.io/investAPI/grpc#tracking-id). repeated LastPriceSubscription last_price_subscriptions = 2; //Массив статусов подписки на цену последней сделки. } //Статус подписки на цену последней сделки. message LastPriceSubscription { - string figi = 1; //Figi-идентификатор инструмента. + string figi = 1; //FIGI-идентификатор инструмента. SubscriptionStatus subscription_status = 2; //Статус подписки. - string instrument_uid = 3; //Uid инструмента + string instrument_uid = 3; //UID инструмента. + string stream_id = 4; //Идентификатор открытого соединения. + string subscription_id = 5; //Идентификатор подписки в формате `UUID`. } //Пакет свечей в рамках стрима. message Candle { - string figi = 1; //Figi-идентификатор инструмента. + string figi = 1; //FIGI-идентификатор инструмента. SubscriptionInterval interval = 2; //Интервал свечи. - Quotation open = 3; //Цена открытия за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) - Quotation high = 4; //Максимальная цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) - Quotation low = 5; //Минимальная цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) - Quotation close = 6; //Цена закрытия за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) + Quotation open = 3; //Цена открытия за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](https://russianinvestments.github.io/investAPI/faq_marketdata/#_15). + Quotation high = 4; //Максимальная цена за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](https://russianinvestments.github.io/investAPI/faq_marketdata/#_15). + Quotation low = 5; //Минимальная цена за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](https://russianinvestments.github.io/investAPI/faq_marketdata/#_15). + Quotation close = 6; //Цена закрытия за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](https://russianinvestments.github.io/investAPI/faq_marketdata/#_15). int64 volume = 7; //Объём сделок в лотах. - google.protobuf.Timestamp time = 8; //Время начала интервала свечи в часовом поясе UTC. - google.protobuf.Timestamp last_trade_ts = 9; //Время последней сделки, вошедшей в свечу в часовом поясе UTC. - string instrument_uid = 10; //Uid инструмента + google.protobuf.Timestamp time = 8; //Время начала интервала свечи по UTC. + google.protobuf.Timestamp last_trade_ts = 9; //Время последней сделки, вошедшей в свечу по UTC. + string instrument_uid = 10; //UID инструмента. + CandleSource candle_source_type = 19; //Источник свечей } //Пакет стаканов в рамках стрима. message OrderBook { - string figi = 1; //Figi-идентификатор инструмента. + string figi = 1; //FIGI-идентификатор инструмента. int32 depth = 2; //Глубина стакана. - bool is_consistent = 3; //Флаг консистентности стакана. **false** значит не все заявки попали в стакан по причинам сетевых задержек или нарушения порядка доставки. + bool is_consistent = 3; //Флаг консистентности стакана. **false** — не все заявки попали в стакан из-за сетевых задержек или нарушения порядка доставки. repeated Order bids = 4; //Массив предложений. repeated Order asks = 5; //Массив спроса. google.protobuf.Timestamp time = 6; //Время формирования стакана в часовом поясе UTC по времени биржи. - Quotation limit_up = 7; //Верхний лимит цены за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) - Quotation limit_down = 8; //Нижний лимит цены за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) - string instrument_uid = 9; //Uid инструмента + Quotation limit_up = 7; //Верхний лимит цены за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](https://russianinvestments.github.io/investAPI/faq_marketdata/#_15). + Quotation limit_down = 8; //Нижний лимит цены за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](https://russianinvestments.github.io/investAPI/faq_marketdata/#_15). + string instrument_uid = 9; //UID инструмента. + OrderBookType order_book_type = 10; //Тип стакана. } //Массив предложений/спроса. message Order { - Quotation price = 1; //Цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) + Quotation price = 1; //Цена за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](https://russianinvestments.github.io/investAPI/faq_marketdata/#_15). int64 quantity = 2; //Количество в лотах. } //Информация о сделке. message Trade { - string figi = 1; //Figi-идентификатор инструмента. + string figi = 1; //FIGI-идентификатор инструмента. TradeDirection direction = 2; //Направление сделки. - Quotation price = 3; //Цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) + Quotation price = 3; //Цена за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](https://russianinvestments.github.io/investAPI/faq_marketdata/#_15). int64 quantity = 4; //Количество лотов. google.protobuf.Timestamp time = 5; //Время сделки в часовом поясе UTC по времени биржи. - string instrument_uid = 6; //Uid инструмента + string instrument_uid = 6; //UID инструмента. + TradeSourceType trade_source = 7; //Тип источника сделки. } //Направление сделки. @@ -291,39 +338,53 @@ enum TradeDirection { //Пакет изменения торгового статуса. message TradingStatus { - string figi = 1; //Figi-идентификатор инструмента. + string figi = 1; //FIGI-идентификатор инструмента. SecurityTradingStatus trading_status = 2; //Статус торговли инструментом. - google.protobuf.Timestamp time = 3; //Время изменения торгового статуса в часовом поясе UTC. + google.protobuf.Timestamp time = 3; //Время изменения торгового статуса по UTC. bool limit_order_available_flag = 4; //Признак доступности выставления лимитной заявки по инструменту. bool market_order_available_flag = 5; //Признак доступности выставления рыночной заявки по инструменту. - string instrument_uid = 6; //Uid инструмента + string instrument_uid = 6; //UID инструмента. } //Запрос исторических свечей. message GetCandlesRequest { - string figi = 1 [ deprecated = true ]; //Deprecated Figi-идентификатор инструмента. Необходимо использовать instrument_id. - google.protobuf.Timestamp from = 2; //Начало запрашиваемого периода в часовом поясе UTC. - google.protobuf.Timestamp to = 3; //Окончание запрашиваемого периода в часовом поясе UTC. - CandleInterval interval = 4; //Интервал запрошенных свечей. - string instrument_id = 5; //Идентификатор инструмента, принимает значение figi или instrument_uid. + optional string figi = 1 [deprecated = true]; //Deprecated FIGI-идентификатор инструмента. Используйте `instrument_id`. + google.protobuf.Timestamp from = 2 [(google.api.field_behavior) = REQUIRED]; //Начало запрашиваемого периода по UTC. + google.protobuf.Timestamp to = 3 [(google.api.field_behavior) = REQUIRED]; //Окончание запрашиваемого периода по UTC. + CandleInterval interval = 4 [(google.api.field_behavior) = REQUIRED]; //Интервал запрошенных свечей. + optional string instrument_id = 5; //Идентификатор инструмента. Принимает значение `figi` или `instrument_uid`. + optional CandleSource candle_source_type = 7; //Тип источника свечи. + optional int32 limit = 10; //Максимальное количество свечей в ответе. + + enum CandleSource { + CANDLE_SOURCE_UNSPECIFIED = 0; //Все свечи. + CANDLE_SOURCE_EXCHANGE = 1; //Биржевые свечи. + CANDLE_SOURCE_INCLUDE_WEEKEND = 3; //Все свечи с учетом торговли по выходным. + } } -//Интервал свечей. +//Интервал свечей. Максимальное значение интервала приведено ориентировочно, может отличаться в большую сторону в зависимости от параметров запроса. enum CandleInterval { CANDLE_INTERVAL_UNSPECIFIED = 0; //Интервал не определён. - CANDLE_INTERVAL_1_MIN = 1; //от 1 минуты до 1 дня. - CANDLE_INTERVAL_5_MIN = 2; //от 5 минут до 1 дня. - CANDLE_INTERVAL_15_MIN = 3; //от 15 минут до 1 дня. - CANDLE_INTERVAL_HOUR = 4; //от 1 часа до 1 недели. - CANDLE_INTERVAL_DAY = 5; //от 1 дня до 1 года. - CANDLE_INTERVAL_2_MIN = 6; //от 2 минут до 1 дня. - CANDLE_INTERVAL_3_MIN = 7; //от 3 минут до 1 дня. - CANDLE_INTERVAL_10_MIN = 8; //от 10 минут до 1 дня. - CANDLE_INTERVAL_30_MIN = 9; //от 30 минут до 2 дней. - CANDLE_INTERVAL_2_HOUR = 10; //от 2 часов до 1 месяца. - CANDLE_INTERVAL_4_HOUR = 11; //от 4 часов до 1 месяца. - CANDLE_INTERVAL_WEEK = 12; //от 1 недели до 2 лет. - CANDLE_INTERVAL_MONTH = 13; //от 1 месяца до 10 лет. + CANDLE_INTERVAL_1_MIN = 1; //От 1 минуты до 1 дня (лимит 2400). + CANDLE_INTERVAL_5_MIN = 2; //От 5 минут до недели (лимит 2400). + CANDLE_INTERVAL_15_MIN = 3; //От 15 минут до 3 недель (лимит 2400). + CANDLE_INTERVAL_HOUR = 4; //От 1 часа до 3 месяцев (лимит 2400). + CANDLE_INTERVAL_DAY = 5; //От 1 дня до 6 лет (лимит 2400). + CANDLE_INTERVAL_2_MIN = 6; //От 2 минут до 1 дня (лимит 1200). + CANDLE_INTERVAL_3_MIN = 7; //От 3 минут до 1 дня (лимит 750). + CANDLE_INTERVAL_10_MIN = 8; //От 10 минут до недели (лимит 1200). + CANDLE_INTERVAL_30_MIN = 9; //От 30 минут до 3 недель (лимит 1200). + CANDLE_INTERVAL_2_HOUR = 10; //От 2 часов до 3 месяцев (лимит 2400). + CANDLE_INTERVAL_4_HOUR = 11; //От 4 часов до 3 месяцев (лимит 700). + CANDLE_INTERVAL_WEEK = 12; //От 1 недели до 5 лет (лимит 300). + CANDLE_INTERVAL_MONTH = 13; //От 1 месяца до 10 лет (лимит 120). +} + +enum CandleSource { + CANDLE_SOURCE_UNSPECIFIED = 0; //Источник свечей не определён. + CANDLE_SOURCE_EXCHANGE = 1; //Биржевые свечи. + CANDLE_SOURCE_DEALER_WEEKEND = 2; //Свечи дилера в результате торговли по выходным. } //Список свечей. @@ -333,19 +394,22 @@ message GetCandlesResponse { //Информация о свече. message HistoricCandle { - Quotation open = 1; //Цена открытия за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) - Quotation high = 2; //Максимальная цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) - Quotation low = 3; //Минимальная цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) - Quotation close = 4; //Цена закрытия за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) + Quotation open = 1; //Цена открытия за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](https://russianinvestments.github.io/investAPI/faq_marketdata/#_15). + Quotation high = 2; //Максимальная цена за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](https://russianinvestments.github.io/investAPI/faq_marketdata/#_15). + Quotation low = 3; //Минимальная цена за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](https://russianinvestments.github.io/investAPI/faq_marketdata/#_15). + Quotation close = 4; //Цена закрытия за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](https://russianinvestments.github.io/investAPI/faq_marketdata/#_15). int64 volume = 5; //Объём торгов в лотах. google.protobuf.Timestamp time = 6; //Время свечи в часовом поясе UTC. - bool is_complete = 7; //Признак завершённости свечи. **false** значит, свеча за текущие интервал ещё сформирована не полностью. + bool is_complete = 7; //Признак завершённости свечи. **false** — свеча за текущие интервал ещё сформирована не полностью. + CandleSource candle_source_type = 9; //Тип источника свечи } //Запрос получения цен последних сделок. message GetLastPricesRequest { - repeated string figi = 1 [ deprecated = true ]; //Deprecated Figi-идентификатор инструмента. Необходимо использовать instrument_id. - repeated string instrument_id = 2; //Массив идентификаторов инструмента, принимает значения figi или instrument_uid. + repeated string figi = 1 [deprecated = true]; //Deprecated FIGI-идентификатор инструмента. Используйте `instrument_id`. + repeated string instrument_id = 2; //Массив идентификаторов инструмента. Принимает значения `figi` или `instrument_uid`. + LastPriceType last_price_type = 3; //Тип запрашиваемой последней цены. + optional InstrumentStatus instrument_status = 9; //Статус запрашиваемых инструментов. [Возможные значения](#instrumentstatus). } //Список цен последних сделок. @@ -355,67 +419,72 @@ message GetLastPricesResponse { //Информация о цене последней сделки. message LastPrice { - string figi = 1; //Figi инструмента. - Quotation price = 2; //Цена последней сделки за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) + string figi = 1; //FIGI инструмента. + Quotation price = 2; //Цена последней сделки за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](https://russianinvestments.github.io/investAPI/faq_marketdata/#_15). google.protobuf.Timestamp time = 3; //Время получения последней цены в часовом поясе UTC по времени биржи. - string instrument_uid = 11; //Uid инструмента + string instrument_uid = 11; //UID инструмента. + LastPriceType last_price_type = 12; //Тип последней цены. } //Запрос стакана. message GetOrderBookRequest { - string figi = 1 [ deprecated = true ]; //Deprecated Figi-идентификатор инструмента. Необходимо использовать instrument_id. - int32 depth = 2; //Глубина стакана. - string instrument_id = 3; //Идентификатор инструмента, принимает значение figi или instrument_uid. + optional string figi = 1 [deprecated = true]; //Deprecated FIGI-идентификатор инструмента. Используйте `instrument_id`. + int32 depth = 2 [(google.api.field_behavior) = REQUIRED]; //Глубина стакана. + optional string instrument_id = 3; //Идентификатор инструмента. Принимает значение `figi` или `instrument_uid`. } //Информация о стакане. message GetOrderBookResponse { - string figi = 1; //Figi-идентификатор инструмента. + string figi = 1; //FIGI-идентификатор инструмента. int32 depth = 2; //Глубина стакана. repeated Order bids = 3; //Множество пар значений на покупку. repeated Order asks = 4; //Множество пар значений на продажу. - Quotation last_price = 5; //Цена последней сделки за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) - Quotation close_price = 6; //Цена закрытия за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) - Quotation limit_up = 7; //Верхний лимит цены за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) - Quotation limit_down = 8; //Нижний лимит цены за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) + Quotation last_price = 5; //Цена последней сделки за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](https://russianinvestments.github.io/investAPI/faq_marketdata/#_15). + Quotation close_price = 6; //Цена закрытия за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](https://russianinvestments.github.io/investAPI/faq_marketdata/#_15). + Quotation limit_up = 7; //Верхний лимит цены за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](https://russianinvestments.github.io/investAPI/faq_marketdata/#_15). + Quotation limit_down = 8; //Нижний лимит цены за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](https://russianinvestments.github.io/investAPI/faq_marketdata/#_15). google.protobuf.Timestamp last_price_ts = 21; //Время получения цены последней сделки. google.protobuf.Timestamp close_price_ts = 22; //Время получения цены закрытия. google.protobuf.Timestamp orderbook_ts = 23; //Время формирования стакана на бирже. - string instrument_uid = 9; //Uid инструмента. + string instrument_uid = 9; //UID инструмента. } //Запрос получения торгового статуса. message GetTradingStatusRequest { - string figi = 1 [ deprecated = true ]; //Deprecated Figi-идентификатор инструмента. Необходимо использовать instrument_id. - string instrument_id = 2; //Идентификатор инструмента, принимает значение figi или instrument_uid. + optional string figi = 1 [deprecated = true]; //Deprecated FIGI-идентификатор инструмента. Используйте `instrument_id`. + optional string instrument_id = 2; //Идентификатор инструмента. Принимает значение `figi` или `instrument_uid`. } //Запрос получения торгового статуса. message GetTradingStatusesRequest { - repeated string instrument_id = 1; //Идентификатор инструмента, принимает значение figi или instrument_uid + repeated string instrument_id = 1; //Идентификатор инструмента. Принимает значение `figi` или `instrument_uid`. } //Информация о торговом статусе. message GetTradingStatusesResponse { - repeated GetTradingStatusResponse trading_statuses = 1; //Массив информации о торговых статусах + repeated GetTradingStatusResponse trading_statuses = 1; //Массив информации о торговых статусах. } //Информация о торговом статусе. message GetTradingStatusResponse { - string figi = 1; //Figi-идентификатор инструмента. + string figi = 1; //FIGI-идентификатор инструмента. SecurityTradingStatus trading_status = 2; //Статус торговли инструментом. bool limit_order_available_flag = 3; //Признак доступности выставления лимитной заявки по инструменту. bool market_order_available_flag = 4; //Признак доступности выставления рыночной заявки по инструменту. bool api_trade_available_flag = 5; //Признак доступности торгов через API. - string instrument_uid = 6; //Uid инструмента. + string instrument_uid = 6; //UID инструмента. + + bool bestprice_order_available_flag = 8; //Признак доступности завяки по лучшей цене. + bool only_best_price = 9; //Признак доступности только заявки по лучшей цене. } //Запрос обезличенных сделок за последний час. message GetLastTradesRequest { - string figi = 1 [ deprecated = true ]; //Deprecated Figi-идентификатор инструмента. Необходимо использовать instrument_id. - google.protobuf.Timestamp from = 2; //Начало запрашиваемого периода в часовом поясе UTC. - google.protobuf.Timestamp to = 3; //Окончание запрашиваемого периода в часовом поясе UTC. - string instrument_id = 4; //Идентификатор инструмента, принимает значение figi или instrument_uid. + optional string figi = 1 [deprecated = true]; //Deprecated FIGI-идентификатор инструмента. Используйте `instrument_id`. + google.protobuf.Timestamp from = 2 [(google.api.field_behavior) = REQUIRED]; //Начало запрашиваемого периода по UTC. + google.protobuf.Timestamp to = 3 [(google.api.field_behavior) = REQUIRED]; //Окончание запрашиваемого периода по UTC. + optional string instrument_id = 4; //Идентификатор инструмента. Принимает значение `figi` или `instrument_uid`. + TradeSourceType trade_source = 5; //Тип источника сделок. По умолчанию TRADE_SOURCE_ALL - все сделки. } //Обезличенных сделок за последний час. @@ -423,17 +492,18 @@ message GetLastTradesResponse { repeated Trade trades = 1; //Массив сделок. } -//Запрос активных подписок. -message GetMySubscriptions { } +//Запрос активных подписок. Возвращает по одному сообщению на каждый тип активных подписок — `SubscribeLastPriceResponse`, `SubscribeInfoResponse`, `SubscribeTradesResponse`, `SubscribeOrderBookResponse`, `SubscribeCandlesResponse`. +message GetMySubscriptions {} //Запрос цен закрытия торговой сессии по инструментам. message GetClosePricesRequest { - repeated InstrumentClosePriceRequest instruments = 1; //Массив по инструментам. + repeated InstrumentClosePriceRequest instruments = 1 [(google.api.field_behavior) = REQUIRED]; //Массив по инструментам. + optional InstrumentStatus instrument_status = 9; //Статус запрашиваемых инструментов. [Возможные значения](#instrumentstatus). } //Запрос цен закрытия торговой сессии по инструменту. message InstrumentClosePriceRequest { - string instrument_id = 1; //Идентификатор инструмента, принимает значение figi или instrument_uid. + string instrument_id = 1; //Идентификатор инструмента. Принимает значение `figi` или `instrument_uid`. } //Цены закрытия торговой сессии по инструментам. @@ -443,8 +513,94 @@ message GetClosePricesResponse { //Цена закрытия торговой сессии по инструменту. message InstrumentClosePriceResponse { - string figi = 1; //Figi инструмента. - string instrument_uid = 2; //Uid инструмента. + string figi = 1; //FIGI инструмента. + string instrument_uid = 2; //UID инструмента. Quotation price = 11; //Цена закрытия торговой сессии. + Quotation evening_session_price = 12; //Цена последней сделки с вечерней сессии. Цена публикуется биржей по торговым дням и в нерабочие дни не обновляется. google.protobuf.Timestamp time = 21; //Дата совершения торгов. } + +message GetTechAnalysisRequest { + IndicatorType indicator_type = 1 [(google.api.field_behavior) = REQUIRED]; //Тип технического индикатора. + string instrument_uid = 2 [(google.api.field_behavior) = REQUIRED]; //UID инструмента. + google.protobuf.Timestamp from = 3 [(google.api.field_behavior) = REQUIRED]; //Начало запрашиваемого периода по UTC. + google.protobuf.Timestamp to = 4 [(google.api.field_behavior) = REQUIRED]; //Окончание запрашиваемого периода по UTC. + IndicatorInterval interval = 5 [(google.api.field_behavior) = REQUIRED]; //Интервал, за который рассчитывается индикатор. + TypeOfPrice type_of_price = 6 [(google.api.field_behavior) = REQUIRED]; //Тип цены, который используется при расчёте индикатора. + int32 length = 7; //Торговый период, за который рассчитывается индикатор. + Deviation deviation = 8; //Параметры отклонения. + Smoothing smoothing = 9; //Параметры сглаживания. + + message Smoothing { + int32 fast_length = 1; //Короткий период сглаживания для первой экспоненциальной скользящей средней (EMA). + int32 slow_length = 2; //Длинный период сглаживания для второй экспоненциальной скользящей средней (EMA). + int32 signal_smoothing = 3; //Период сглаживания для третьей экспоненциальной скользящей средней (EMA) + } + + message Deviation { + Quotation deviation_multiplier = 1; //Количество стандартных отклонений, на которые отступают верхняя и нижняя границы. + } + + //Интервал свечи. + enum IndicatorInterval { + INDICATOR_INTERVAL_UNSPECIFIED = 0; //Интервал не определён. + INDICATOR_INTERVAL_ONE_MINUTE = 1; //1 минута. + INDICATOR_INTERVAL_FIVE_MINUTES = 2; //5 минут. + INDICATOR_INTERVAL_FIFTEEN_MINUTES = 3; //15 минут. + INDICATOR_INTERVAL_ONE_HOUR = 4; //1 час. + INDICATOR_INTERVAL_ONE_DAY = 5; //1 день. + INDICATOR_INTERVAL_2_MIN = 6; //2 минуты. + INDICATOR_INTERVAL_3_MIN = 7; //3 минуты. + INDICATOR_INTERVAL_10_MIN = 8; //10 минут. + INDICATOR_INTERVAL_30_MIN = 9; //30 минут. + INDICATOR_INTERVAL_2_HOUR = 10; //2 часа. + INDICATOR_INTERVAL_4_HOUR = 11; //4 часа. + INDICATOR_INTERVAL_WEEK = 12; //Неделя. + INDICATOR_INTERVAL_MONTH = 13; //Месяц. + } + + enum TypeOfPrice { + TYPE_OF_PRICE_UNSPECIFIED = 0; //Не указано. + TYPE_OF_PRICE_CLOSE = 1; //Цена закрытия. + TYPE_OF_PRICE_OPEN = 2; //Цена открытия. + TYPE_OF_PRICE_HIGH = 3; //Максимальное значение за выбранный интервал. + TYPE_OF_PRICE_LOW = 4; //Минимальное значение за выбранный интервал. + TYPE_OF_PRICE_AVG = 5; //Среднее значение по показателям [ (close + open + high + low) / 4 ]. + } + + enum IndicatorType { + INDICATOR_TYPE_UNSPECIFIED = 0; //Не определён. + INDICATOR_TYPE_BB = 1; //Bollinger Bands — линия Боллинжера. + INDICATOR_TYPE_EMA = 2; //Exponential Moving Average — EMA, экспоненциальная скользящая средняя. + INDICATOR_TYPE_RSI = 3; //Relative Strength Index — индекс относительной силы. + INDICATOR_TYPE_MACD = 4; //Moving Average Convergence/Divergence — схождение/расхождение скользящих средних. + INDICATOR_TYPE_SMA = 5; //Simple Moving Average — простое скользящее среднее. + } +} + +message GetTechAnalysisResponse { + repeated TechAnalysisItem technical_indicators = 1; //Массив значений результатов технического анализа. + + message TechAnalysisItem { + google.protobuf.Timestamp timestamp = 1; //Временная метка по UTC, для которой были рассчитаны значения индикатора. + optional Quotation middle_band = 2; //Значение простого скользящего среднего (средней линии). + optional Quotation upper_band = 3; //Значение верхней линии Боллинджера. + optional Quotation lower_band = 4; //Значение нижней линии Боллинджера. + optional Quotation signal = 5; //Значение сигнальной линии. + optional Quotation macd = 6; //Значение линии MACD. + } +} + +enum OrderBookType { + ORDERBOOK_TYPE_UNSPECIFIED = 0; //Не определён. + ORDERBOOK_TYPE_EXCHANGE = 1; //Биржевой стакан. + ORDERBOOK_TYPE_DEALER = 2; //Стакан дилера. + ORDERBOOK_TYPE_ALL = 3; //Стакан биржевой и дилера. +} + +//Тип последней цены +enum LastPriceType { + LAST_PRICE_UNSPECIFIED = 0; //Не определен. + LAST_PRICE_EXCHANGE = 1; // Цена биржи. + LAST_PRICE_DEALER = 2; // Цена дилера +} diff --git a/investAPI-main/src/docs/contracts/operations.proto b/investAPI-main/src/docs/contracts/operations.proto index 469d5ba..c1c0c96 100644 --- a/investAPI-main/src/docs/contracts/operations.proto +++ b/investAPI-main/src/docs/contracts/operations.proto @@ -11,49 +11,50 @@ option php_namespace = "Tinkoff\\Invest\\V1"; import "google/protobuf/timestamp.proto"; import "common.proto"; +import "google/api/field_behavior.proto"; -service OperationsService {/*Сервис предназначен для получения:
**1**. списка операций по счёту;
**2**. - портфеля по счёту;
**3**. позиций ценных бумаг на счёте;
**4**. - доступного остатка для вывода средств;
**5**. получения различных отчётов.*/ - //Метод получения списка операций по счёту.При работе с данным методом необходимо учитывать - // [особенности взаимодействия](/investAPI/operations_problems) с данным методом. +service OperationsService {/*С помощью методов сервиса можно получить:

**1**. Список операций по счёту.
**2**. + Портфель по счёту.
**3**. Позиции ценных бумаг на счёте.
**4**. + Доступный остаток для вывода средств.
**5**. Различные отчёты.*/ + //Получить список операций по счёту. При работе с методом учитывайте + // [особенности взаимодействия](/investAPI/operations_problems). rpc GetOperations(OperationsRequest) returns (OperationsResponse); - //Метод получения портфеля по счёту. + //Получить портфель по счёту. rpc GetPortfolio(PortfolioRequest) returns (PortfolioResponse); - //Метод получения списка позиций по счёту. + //Получить список позиций по счёту. rpc GetPositions(PositionsRequest) returns (PositionsResponse); - //Метод получения доступного остатка для вывода средств. + //Получить доступный остаток для вывода средств. rpc GetWithdrawLimits(WithdrawLimitsRequest) returns (WithdrawLimitsResponse); - //Метод получения брокерского отчёта. + //Получить брокерский отчёт. rpc GetBrokerReport(BrokerReportRequest) returns (BrokerReportResponse); - //Метод получения отчёта "Справка о доходах за пределами РФ". + //Получить отчёт «Справка о доходах за пределами РФ». rpc GetDividendsForeignIssuer(GetDividendsForeignIssuerRequest) returns (GetDividendsForeignIssuerResponse); - //Метод получения списка операций по счёту с пагинацией. При работе с данным методом необходимо учитывать - // [особенности взаимодействия](/investAPI/operations_problems) с данным методом. + //Получить список операций по счёту с пагинацией. При работе с методом учитывайте + // [особенности взаимодействия](/investAPI/operations_problems). rpc GetOperationsByCursor(GetOperationsByCursorRequest) returns (GetOperationsByCursorResponse); } service OperationsStreamService { - //Server-side stream обновлений портфеля + //Server-side stream обновлений портфеля. rpc PortfolioStream(PortfolioStreamRequest) returns (stream PortfolioStreamResponse); - //Server-side stream обновлений информации по изменению позиций портфеля + //Server-side stream обновлений информации по изменению позиций портфеля. rpc PositionsStream(PositionsStreamRequest) returns (stream PositionsStreamResponse); } //Запрос получения списка операций по счёту. message OperationsRequest { - string account_id = 1; //Идентификатор счёта клиента. - google.protobuf.Timestamp from = 2; //Начало периода (по UTC). - google.protobuf.Timestamp to = 3; //Окончание периода (по UTC). - OperationState state = 4; //Статус запрашиваемых операций. - string figi = 5; //Figi-идентификатор инструмента для фильтрации. + string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор счёта клиента. + optional google.protobuf.Timestamp from = 2; //Начало периода по UTC. + optional google.protobuf.Timestamp to = 3; //Окончание периода по UTC. + optional OperationState state = 4; //Статус запрашиваемых операций. + optional string figi = 5; //FIGI-идентификатор инструмента для фильтрации. } //Список операций. @@ -67,33 +68,34 @@ message Operation { string parent_operation_id = 2; //Идентификатор родительской операции. string currency = 3; //Валюта операции. MoneyValue payment = 4; //Сумма операции. - MoneyValue price = 5; //Цена операции за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. + MoneyValue price = 5; //Цена операции за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. OperationState state = 6; //Статус операции. int64 quantity = 7; //Количество единиц инструмента. int64 quantity_rest = 8; //Неисполненный остаток по сделке. - string figi = 9; //Figi-идентификатор инструмента, связанного с операцией. - string instrument_type = 10; //Тип инструмента. Возможные значения:
**bond** — облигация;
**share** — акция;
**currency** — валюта;
**etf** — фонд;
**futures** — фьючерс. + string figi = 9; //FIGI-идентификатор инструмента, связанного с операцией. + string instrument_type = 10; //Тип инструмента. Возможные значения:

`bond` — облигация;
`share` — акция;
`currency` — валюта;
`etf` — фонд;
`futures` — фьючерс. google.protobuf.Timestamp date = 11; //Дата и время операции в формате часовом поясе UTC. string type = 12; //Текстовое описание типа операции. OperationType operation_type = 13; //Тип операции. repeated OperationTrade trades = 14; //Массив сделок. string asset_uid = 16; //Идентификатор актива - string position_uid = 17; //position_uid-идентификатора инструмента. + string position_uid = 17; //Уникальный идентификатор позиции. string instrument_uid = 18; //Уникальный идентификатор инструмента. + repeated ChildOperationItem child_operations = 19; //Массив дочерних операций. } //Сделка по операции. message OperationTrade { string trade_id = 1; //Идентификатор сделки. - google.protobuf.Timestamp date_time = 2; //Дата и время сделки в часовом поясе UTC. + google.protobuf.Timestamp date_time = 2; //Дата и время сделки по UTC. int64 quantity = 3; //Количество инструментов. - MoneyValue price = 4; //Цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. + MoneyValue price = 4; //Цена за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. } //Запрос получения текущего портфеля по счёту. message PortfolioRequest { - string account_id = 1; //Идентификатор счёта пользователя. - CurrencyRequest currency = 2; //Валюта, в которой требуется рассчитать портфель + string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор счёта пользователя. + optional CurrencyRequest currency = 2; //Валюта, в которой нужно рассчитать портфель. enum CurrencyRequest { RUB = 0; //Рубли USD = 1; //Доллары @@ -108,7 +110,7 @@ message PortfolioResponse { MoneyValue total_amount_etf = 3; //Общая стоимость фондов в портфеле. MoneyValue total_amount_currencies = 4; //Общая стоимость валют в портфеле. MoneyValue total_amount_futures = 5; //Общая стоимость фьючерсов в портфеле. - Quotation expected_yield = 6; //Текущая относительная доходность портфеля, в %. + Quotation expected_yield = 6; //Текущая относительная доходность портфеля в %. repeated PortfolioPosition positions = 7; //Список позиций портфеля. string account_id = 8; //Идентификатор счёта пользователя. @@ -116,11 +118,13 @@ message PortfolioResponse { MoneyValue total_amount_sp = 10; //Общая стоимость структурных нот в портфеле. MoneyValue total_amount_portfolio = 11; //Общая стоимость портфеля. repeated VirtualPortfolioPosition virtual_positions = 12; //Массив виртуальных позиций портфеля. + MoneyValue daily_yield = 15; // Рассчитанная доходность портфеля за день в рублях + Quotation daily_yield_relative = 16; //Относительная доходность в день в % } //Запрос позиций портфеля по счёту. message PositionsRequest { - string account_id = 1; //Идентификатор счёта пользователя. + string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор счёта пользователя. } //Список позиций по счёту. @@ -128,17 +132,18 @@ message PositionsResponse { repeated MoneyValue money = 1; //Массив валютных позиций портфеля. repeated MoneyValue blocked = 2; //Массив заблокированных валютных позиций портфеля. repeated PositionsSecurities securities = 3; //Список ценно-бумажных позиций портфеля. - bool limits_loading_in_progress = 4; //Признак идущей в данный момент выгрузки лимитов. + bool limits_loading_in_progress = 4; //Признак идущей выгрузки лимитов в данный момент. repeated PositionsFutures futures = 5; //Список фьючерсов портфеля. repeated PositionsOptions options = 6; //Список опционов портфеля. + string account_id = 15; //Идентификатор счёта пользователя. } -//Запрос доступного для вывода остатка. +//Запрос доступного остатка для вывода. message WithdrawLimitsRequest { - string account_id = 1; //Идентификатор счёта пользователя. + string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор счёта пользователя. } -//Доступный для вывода остаток. +//Доступный остаток для вывода. message WithdrawLimitsResponse { repeated MoneyValue money = 1; //Массив валютных позиций портфеля. repeated MoneyValue blocked = 2; //Массив заблокированных валютных позиций портфеля. @@ -147,53 +152,55 @@ message WithdrawLimitsResponse { //Позиции портфеля. message PortfolioPosition { - string figi = 1; //Figi-идентификатора инструмента. + string figi = 1; //FIGI-идентификатор инструмента. string instrument_type = 2; //Тип инструмента. Quotation quantity = 3; //Количество инструмента в портфеле в штуках. - MoneyValue average_position_price = 4; //Средневзвешенная цена позиции. **Возможна задержка до секунды для пересчёта**. + MoneyValue average_position_price = 4; //Средневзвешенная цена позиции. Для пересчёта возможна задержка до одной секунды. Quotation expected_yield = 5; //Текущая рассчитанная доходность позиции. MoneyValue current_nkd = 6; // Текущий НКД. - Quotation average_position_price_pt = 7 [ deprecated = true ]; // Deprecated Средняя цена позиции в пунктах (для фьючерсов). **Возможна задержка до секунды для пересчёта**. - MoneyValue current_price = 8; //Текущая цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. - MoneyValue average_position_price_fifo = 9; //Средняя цена позиции по методу FIFO. **Возможна задержка до секунды для пересчёта**. + Quotation average_position_price_pt = 7 [ deprecated = true ]; // Deprecated Средняя цена позиции в пунктах (для фьючерсов). Для пересчёта возможна задержка до одной секунды. + MoneyValue current_price = 8; //Текущая цена за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. + MoneyValue average_position_price_fifo = 9; //Средняя цена позиции по методу FIFO. Для пересчёта возможна задержка до одной секунды. Quotation quantity_lots = 10 [ deprecated = true ]; //Deprecated Количество лотов в портфеле. bool blocked = 21; //Заблокировано на бирже. Quotation blocked_lots = 22; //Количество бумаг, заблокированных выставленными заявками. - string position_uid = 24; //position_uid-идентификатора инструмента - string instrument_uid = 25; //instrument_uid-идентификатора инструмента - MoneyValue var_margin = 26; //Вариационная маржа + string position_uid = 24; //Уникальный идентификатор позиции. + string instrument_uid = 25; //Уникальный идентификатор инструмента. + MoneyValue var_margin = 26; //Вариационная маржа. Quotation expected_yield_fifo = 27; //Текущая рассчитанная доходность позиции. + MoneyValue daily_yield = 31; // Рассчитанная доходность портфеля за день } message VirtualPortfolioPosition { - string position_uid = 1; //position_uid-идентификатора инструмента - string instrument_uid = 2; //instrument_uid-идентификатора инструмента - string figi = 3; //Figi-идентификатора инструмента. + string position_uid = 1; //Уникальный идентификатор позиции. + string instrument_uid = 2; //Уникальный идентификатор инструмента. + string figi = 3; //FIGI-идентификатор инструмента. string instrument_type = 4; //Тип инструмента. Quotation quantity = 5; //Количество инструмента в портфеле в штуках. - MoneyValue average_position_price = 6; //Средневзвешенная цена позиции. **Возможна задержка до секунды для пересчёта**. + MoneyValue average_position_price = 6; //Средневзвешенная цена позиции. Для пересчёта возможна задержка до одной секунды. Quotation expected_yield = 7; //Текущая рассчитанная доходность позиции. Quotation expected_yield_fifo = 8; //Текущая рассчитанная доходность позиции. - google.protobuf.Timestamp expire_date = 9; //Дата до которой нужно продать виртуальные бумаги, после этой даты виртуальная позиция "сгорит" - MoneyValue current_price = 10; //Текущая цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. - MoneyValue average_position_price_fifo = 11; //Средняя цена позиции по методу FIFO. **Возможна задержка до секунды для пересчёта**. + google.protobuf.Timestamp expire_date = 9; //Дата, до которой нужно продать виртуальные бумаги. После этой даты виртуальная позиция «сгораетт». + MoneyValue current_price = 10; //Текущая цена за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. + MoneyValue average_position_price_fifo = 11; //Средняя цена позиции по методу FIFO. Для пересчёта возможна задержка до одной секунды. + MoneyValue daily_yield = 31; // Рассчитанная доходность портфеля за день } //Баланс позиции ценной бумаги. message PositionsSecurities { - string figi = 1; //Figi-идентификатор бумаги. - int64 blocked = 2; //Количество бумаг заблокированных выставленными заявками. + string figi = 1; //FIGI-идентификатор бумаги. + int64 blocked = 2; //Количество бумаг, заблокированных выставленными заявками. int64 balance = 3; //Текущий незаблокированный баланс. string position_uid = 4; //Уникальный идентификатор позиции. - string instrument_uid = 5; //Уникальный идентификатор инструмента. + string instrument_uid = 5; //Уникальный идентификатор инструмента. bool exchange_blocked = 11; //Заблокировано на бирже. string instrument_type = 16; //Тип инструмента. } //Баланс фьючерса. message PositionsFutures { - string figi = 1; //Figi-идентификатор фьючерса. - int64 blocked = 2; //Количество бумаг заблокированных выставленными заявками. + string figi = 1; //FIGI-идентификатор фьючерса. + int64 blocked = 2; //Количество бумаг, заблокированных выставленными заявками. int64 balance = 3; //Текущий незаблокированный баланс. string position_uid = 4; //Уникальный идентификатор позиции. string instrument_uid = 5; //Уникальный идентификатор инструмента. @@ -203,7 +210,7 @@ message PositionsFutures { message PositionsOptions { string position_uid = 1; //Уникальный идентификатор позиции опциона. string instrument_uid = 2; //Уникальный идентификатор инструмента. - int64 blocked = 11; //Количество бумаг заблокированных выставленными заявками. + int64 blocked = 11; //Количество бумаг, заблокированных выставленными заявками. int64 balance = 21; //Текущий незаблокированный баланс. } @@ -222,9 +229,9 @@ message BrokerReportResponse { } message GenerateBrokerReportRequest { - string account_id = 1; //Идентификатор счёта клиента. - google.protobuf.Timestamp from = 2; //Начало периода в часовом поясе UTC. - google.protobuf.Timestamp to = 3; //Окончание периода в часовом поясе UTC. + string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор счёта клиента. + google.protobuf.Timestamp from = 2 [(google.api.field_behavior) = REQUIRED]; //Начало периода по UTC. + google.protobuf.Timestamp to = 3 [(google.api.field_behavior) = REQUIRED]; //Окончание периода по UTC. } message GenerateBrokerReportResponse { @@ -232,23 +239,23 @@ message GenerateBrokerReportResponse { } message GetBrokerReportRequest { - string task_id = 1; //Идентификатор задачи формирования брокерского отчёта. - int32 page = 2; //Номер страницы отчета (начинается с 1), значение по умолчанию: 0. + string task_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор задачи формирования брокерского отчёта. + optional int32 page = 2; //Номер страницы отчёта, начинается с 1. Значение по умолчанию — 0. } message GetBrokerReportResponse { repeated BrokerReport broker_report = 1; - int32 itemsCount = 2; //Количество записей в отчете. - int32 pagesCount = 3; //Количество страниц с данными отчета (начинается с 0). - int32 page = 4; //Текущая страница (начинается с 0). + int32 itemsCount = 2; //Количество записей в отчёте. + int32 pagesCount = 3; //Количество страниц с данными отчёта, начинается с 0. + int32 page = 4; //Текущая страница, начинается с 0. } message BrokerReport { string trade_id = 1;//Номер сделки. string order_id = 2; //Номер поручения. - string figi = 3; //Figi-идентификатор инструмента. + string figi = 3; //FIGI-идентификаторинструмента. string execute_sign = 4; //Признак исполнения. - google.protobuf.Timestamp trade_datetime = 5; //Дата и время заключения в часовом поясе UTC. + google.protobuf.Timestamp trade_datetime = 5; //Дата и время заключения по UTC. string exchange = 6; //Торговая площадка. string class_code = 7; //Режим торгов. string direction = 8; //Вид сделки. @@ -256,27 +263,27 @@ message BrokerReport { string ticker = 10; //Код актива. MoneyValue price = 11; //Цена за единицу. int64 quantity = 12; //Количество. - MoneyValue order_amount = 13; //Сумма (без НКД). + MoneyValue order_amount = 13; //Сумма без НКД. Quotation aci_value = 14; //НКД. MoneyValue total_order_amount = 15; //Сумма сделки. MoneyValue broker_commission = 16; //Комиссия брокера. MoneyValue exchange_commission = 17; //Комиссия биржи. - MoneyValue exchange_clearing_commission = 18; //Комиссия клир. центра. - Quotation repo_rate = 19; //Ставка РЕПО (%). - string party = 20; //Контрагент/Брокер. - google.protobuf.Timestamp clear_value_date = 21; //Дата расчётов в часовом поясе UTC. - google.protobuf.Timestamp sec_value_date = 22; //Дата поставки в часовом поясе UTC. + MoneyValue exchange_clearing_commission = 18; //Комиссия клирингового центра. + Quotation repo_rate = 19; //Ставка РЕПО, %. + string party = 20; //Контрагент или брокерарокер. + google.protobuf.Timestamp clear_value_date = 21; //Дата расчётов по UTC. + google.protobuf.Timestamp sec_value_date = 22; //Дата поставки по UTC. string broker_status = 23; //Статус брокера. - string separate_agreement_type = 24; //Тип дог. - string separate_agreement_number = 25; //Номер дог. - string separate_agreement_date = 26; //Дата дог. + string separate_agreement_type = 24; //Тип договора. + string separate_agreement_number = 25; //Номер договора. + string separate_agreement_date = 26; //Дата договора. string delivery_type = 27; //Тип расчёта по сделке. } //Статус запрашиваемых операций. enum OperationState { - OPERATION_STATE_UNSPECIFIED = 0; //Статус операции не определён - OPERATION_STATE_EXECUTED = 1; //Исполнена. + OPERATION_STATE_UNSPECIFIED = 0; //Статус операции не определён. + OPERATION_STATE_EXECUTED = 1; //Исполнена частично или полностью. OPERATION_STATE_CANCELED = 2; //Отменена. OPERATION_STATE_PROGRESS = 3; //Исполняется. } @@ -329,22 +336,23 @@ enum OperationType { OPERATION_TYPE_DIV_EXT = 43; //Выплата дивидендов на карту. OPERATION_TYPE_TAX_CORRECTION_COUPON = 44; //Корректировка налога по купонам. OPERATION_TYPE_CASH_FEE = 45; //Комиссия за валютный остаток. - OPERATION_TYPE_OUT_FEE = 46; //Комиссия за вывод валюты с брокерского счета. + OPERATION_TYPE_OUT_FEE = 46; //Комиссия за вывод валюты с брокерского счёта. OPERATION_TYPE_OUT_STAMP_DUTY = 47; //Гербовый сбор. - OPERATION_TYPE_OUTPUT_SWIFT = 50; // SWIFT-перевод - OPERATION_TYPE_INPUT_SWIFT = 51; // SWIFT-перевод - OPERATION_TYPE_OUTPUT_ACQUIRING = 53; // Перевод на карту - OPERATION_TYPE_INPUT_ACQUIRING = 54; // Перевод с карты - OPERATION_TYPE_OUTPUT_PENALTY = 55; // Комиссия за вывод средств - OPERATION_TYPE_ADVICE_FEE = 56; // Списание оплаты за сервис Советов - OPERATION_TYPE_TRANS_IIS_BS = 57; // Перевод ценных бумаг с ИИС на Брокерский счет - OPERATION_TYPE_TRANS_BS_BS = 58; // Перевод ценных бумаг с одного брокерского счета на другой - OPERATION_TYPE_OUT_MULTI = 59; // Вывод денежных средств со счета - OPERATION_TYPE_INP_MULTI = 60; // Пополнение денежных средств со счета - OPERATION_TYPE_OVER_PLACEMENT = 61; // Размещение биржевого овернайта - OPERATION_TYPE_OVER_COM = 62; // Списание комиссии - OPERATION_TYPE_OVER_INCOME = 63; // Доход от оверанайта - OPERATION_TYPE_OPTION_EXPIRATION = 64; // Экспирация + OPERATION_TYPE_OUTPUT_SWIFT = 50; // SWIFT-перевод. + OPERATION_TYPE_INPUT_SWIFT = 51; // SWIFT-перевод. + OPERATION_TYPE_OUTPUT_ACQUIRING = 53; // Перевод на карту. + OPERATION_TYPE_INPUT_ACQUIRING = 54; // Перевод с карты. + OPERATION_TYPE_OUTPUT_PENALTY = 55; // Комиссия за вывод средств. + OPERATION_TYPE_ADVICE_FEE = 56; // Списание оплаты за сервис Советов. + OPERATION_TYPE_TRANS_IIS_BS = 57; // Перевод ценных бумаг с ИИС на брокерский счёт. + OPERATION_TYPE_TRANS_BS_BS = 58; // Перевод ценных бумаг с одного брокерского счёта на другой. + OPERATION_TYPE_OUT_MULTI = 59; // Вывод денежных средств со счёта. + OPERATION_TYPE_INP_MULTI = 60; // Пополнение денежных средств со счёта. + OPERATION_TYPE_OVER_PLACEMENT = 61; // Размещение биржевого овернайта. + OPERATION_TYPE_OVER_COM = 62; // Списание комиссии. + OPERATION_TYPE_OVER_INCOME = 63; // Доход от оверанайта. + OPERATION_TYPE_OPTION_EXPIRATION = 64; // Экспирация опциона. + OPERATION_TYPE_FUTURE_EXPIRATION = 65; // Экспирация фьючерса. } message GetDividendsForeignIssuerRequest { @@ -357,36 +365,36 @@ message GetDividendsForeignIssuerRequest { message GetDividendsForeignIssuerResponse { oneof payload { GenerateDividendsForeignIssuerReportResponse generate_div_foreign_issuer_report_response = 1; //Объект результата задачи запуска формирования отчёта. - GetDividendsForeignIssuerReportResponse div_foreign_issuer_report = 2; //Отчёт "Справка о доходах за пределами РФ". + GetDividendsForeignIssuerReportResponse div_foreign_issuer_report = 2; //Отчёт «Справка о доходах за пределами РФ». } } -//Объект запроса формирования отчёта "Справка о доходах за пределами РФ". +//Объект запроса формирования отчёта «Справка о доходах за пределами РФ». message GenerateDividendsForeignIssuerReportRequest { - string account_id = 1; //Идентификатор счёта клиента. - google.protobuf.Timestamp from = 2; //Начало периода (по UTC). - google.protobuf.Timestamp to = 3; //Окончание периода (по UTC). + string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор счёта клиента. + google.protobuf.Timestamp from = 2 [(google.api.field_behavior) = REQUIRED]; //Начало периода по UTC. + google.protobuf.Timestamp to = 3 [(google.api.field_behavior) = REQUIRED]; //Окончание периода по UTC. Как правило, можно сформировать отчёт по дату на несколько дней меньше текущей. Начало и окончание периода должны быть в рамках одного календарного года. } -// Объект запроса сформированного отчёта "Справка о доходах за пределами РФ". +// Объект запроса сформированного отчёта «Справка о доходах за пределами РФ». message GetDividendsForeignIssuerReportRequest { - string task_id = 1; //Идентификатор задачи формирования отчёта. - int32 page = 2; //Номер страницы отчета (начинается с 0), значение по умолчанию: 0. + string task_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор задачи формирования отчёта. + optional int32 page = 2; //Номер страницы отчета (начинается с 0), значение по умолчанию: 0. } -// Объект результата задачи запуска формирования отчёта "Справка о доходах за пределами РФ". +// Объект результата задачи запуска формирования отчёта «Справка о доходах за пределами РФ». message GenerateDividendsForeignIssuerReportResponse { string task_id = 1; //Идентификатор задачи формирования отчёта. } message GetDividendsForeignIssuerReportResponse { repeated DividendsForeignIssuerReport dividends_foreign_issuer_report = 1; - int32 itemsCount = 2; //Количество записей в отчете. - int32 pagesCount = 3; //Количество страниц с данными отчета (начинается с 0). - int32 page = 4; //Текущая страница (начинается с 0). + int32 itemsCount = 2; //Количество записей в отчёте. + int32 pagesCount = 3; //Количество страниц с данными отчёта, начинается с 0. + int32 page = 4; //Текущая страница, начинается с 0. } -// Отчёт "Справка о доходах за пределами РФ". +// Отчёт «Справка о доходах за пределами РФ». message DividendsForeignIssuerReport { google.protobuf.Timestamp record_date = 1; //Дата фиксации реестра. google.protobuf.Timestamp payment_date = 2; //Дата выплаты. @@ -404,7 +412,8 @@ message DividendsForeignIssuerReport { //Запрос установки stream-соединения. message PortfolioStreamRequest { - repeated string accounts = 1; //Массив идентификаторов счётов пользователя + repeated string accounts = 1; //Массив идентификаторов счётов пользователя. + PingDelaySettings ping_settings = 15; //Запрос настройки пинга. } //Информация по позициям и доходностям портфелей. @@ -419,11 +428,13 @@ message PortfolioStreamResponse { //Объект результата подписки. message PortfolioSubscriptionResult { repeated AccountSubscriptionStatus accounts = 1; //Массив счетов клиента. + string tracking_id = 7; //Уникальный идентификатор запроса, подробнее: [tracking_id](https://russianinvestments.github.io/investAPI/grpc#tracking-id). + string stream_id = 8; //Идентификатор открытого соединения } -//Счет клиента. +//Счёт клиента. message AccountSubscriptionStatus { - string account_id = 1; //Идентификатор счёта + string account_id = 1; //Идентификатор счёта. PortfolioSubscriptionStatus subscription_status = 6; //Результат подписки. } @@ -437,17 +448,17 @@ enum PortfolioSubscriptionStatus { //Запрос списка операций по счёту с пагинацией. message GetOperationsByCursorRequest { - string account_id = 1; //Идентификатор счёта клиента. Обязательный параметр для данного метода, остальные параметры опциональны. - string instrument_id = 2; //Идентификатор инструмента (Figi инструмента или uid инструмента) - google.protobuf.Timestamp from = 6; //Начало периода (по UTC). - google.protobuf.Timestamp to = 7; //Окончание периода (по UTC). - string cursor = 11; //Идентификатор элемента, с которого начать формировать ответ. - int32 limit = 12; //Лимит количества операций. По умолчанию устанавливается значение **100**, максимальное значение 1000. - repeated OperationType operation_types = 13; //Тип операции. Принимает значение из списка OperationType. - OperationState state = 14; //Статус запрашиваемых операций, возможные значения указаны в OperationState. - bool without_commissions = 15; //Флаг возвращать ли комиссии, по умолчанию false - bool without_trades = 16; //Флаг получения ответа без массива сделок. - bool without_overnights = 17; //Флаг не показывать overnight операций. + string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор счёта клиента, обязательный параметр. Остальные параметры опциональны. + optional string instrument_id = 2; //Идентификатор инструмента — FIGI или UID инструмента. + optional google.protobuf.Timestamp from = 6; //Начало периода по UTC. + optional google.protobuf.Timestamp to = 7; //Окончание периода по UTC. + optional string cursor = 11; //Идентификатор элемента, с которого начать формировать ответ. + optional int32 limit = 12; //Лимит количества операций. По умолчанию — `100`, максимальное значение — `1000`. + repeated OperationType operation_types = 13; //Тип операции. Принимает значение из списка `OperationType`. + optional OperationState state = 14; //Статус запрашиваемых операций. Возможные значения указаны в `OperationState`. + optional bool without_commissions = 15; //Флаг возврата комиссии. По умолчанию — `false`. + optional bool without_trades = 16; //Флаг получения ответа без массива сделок. + optional bool without_overnights = 17; //Флаг показа overnight операций. } //Список операций по счёту с пагинацией. @@ -460,19 +471,19 @@ message GetOperationsByCursorResponse { //Данные об операции. message OperationItem { string cursor = 1; //Курсор. - string broker_account_id = 6; //Номер счета клиента. + string broker_account_id = 6; //Номер счёта клиента. string id = 16; //Идентификатор операции, может меняться с течением времени. - string parent_operation_id = 17; //Идентификатор родительской операции, может измениться, если изменился id родительской операции. + string parent_operation_id = 17; //Идентификатор родительской операции. Может измениться, если изменился ID родительской операции. string name = 18; //Название операции. - google.protobuf.Timestamp date = 21; //Дата поручения. + google.protobuf.Timestamp date = 21; //Дата поручения. OperationType type = 22; //Тип операции. string description = 23; //Описание операции. OperationState state = 24; //Статус поручения. string instrument_uid = 31; //Уникальный идентификатор инструмента. - string figi = 32; //Figi. + string figi = 32; //FIGI. string instrument_type = 33; //Тип инструмента. InstrumentType instrument_kind = 34; //Тип инструмента. - string position_uid = 35; //position_uid-идентификатора инструмента. + string position_uid = 35; //Уникальный идентификатор позиции. MoneyValue payment = 41; //Сумма операции. MoneyValue price = 42; //Цена операции за 1 инструмент. MoneyValue commission = 43; //Комиссия. @@ -485,7 +496,8 @@ message OperationItem { google.protobuf.Timestamp cancel_date_time = 56; //Дата и время снятия заявки. string cancel_reason = 57; //Причина отмены операции. OperationItemTrades trades_info = 61; //Массив сделок. - string asset_uid = 64; //Идентификатор актива + string asset_uid = 64; //Идентификатор актива. + repeated ChildOperationItem child_operations = 65; //Массив дочерних операций. } //Массив с информацией о сделках. @@ -495,8 +507,8 @@ message OperationItemTrades { //Сделка по операции. message OperationItemTrade { - string num = 1; //Номер сделки - google.protobuf.Timestamp date = 6; //Дата сделки + string num = 1; //Номер сделки. + google.protobuf.Timestamp date = 6; //Дата сделки. int64 quantity = 11; //Количество в единицах. MoneyValue price = 16; //Цена. MoneyValue yield = 21; //Доходность. @@ -505,7 +517,9 @@ message OperationItemTrade { //Запрос установки stream-соединения позиций. message PositionsStreamRequest { - repeated string accounts = 1; //Массив идентификаторов счётов пользователя + repeated string accounts = 1; //Массив идентификаторов счётов пользователя. + bool with_initial_positions = 3; //Получение состояния позиций на момент подключения. + PingDelaySettings ping_settings = 15; //Запрос настройки пинга. } //Информация по изменению позиций портфеля. @@ -514,17 +528,20 @@ message PositionsStreamResponse { PositionsSubscriptionResult subscriptions = 1; //Объект результата подписки. PositionData position = 2; //Объект стриминга позиций. Ping ping = 3; //Проверка активности стрима. + PositionsResponse initial_positions = 5; //Текущие позиции. } } //Объект результата подписки. message PositionsSubscriptionResult { repeated PositionsSubscriptionStatus accounts = 1; //Массив счетов клиента. + string tracking_id = 7; //Уникальный идентификатор запроса, подробнее: [tracking_id](https://russianinvestments.github.io/investAPI/grpc#tracking-id). + string stream_id = 8; //Идентификатор открытого соединения } -//Счет клиента. +//Счёт клиента. message PositionsSubscriptionStatus { - string account_id = 1; //Идентификатор счёта + string account_id = 1; //Идентификатор счёта. PositionsAccountSubscriptionStatus subscription_status = 6; //Результат подписки. } @@ -549,5 +566,10 @@ message PositionData { //Валютная позиция портфеля. message PositionsMoney { MoneyValue available_value = 1; //Доступное количество валютный позиций. - MoneyValue blocked_value = 2; //Заблокированное количество валютный позиций. + MoneyValue blocked_value = 2; //Заблокированное количество валютных позиций. } + +message ChildOperationItem { + string instrument_uid = 1; //Уникальный идентификатор инструмента. + MoneyValue payment = 2; //Сумма операции. +} \ No newline at end of file diff --git a/investAPI-main/src/docs/contracts/orders.proto b/investAPI-main/src/docs/contracts/orders.proto index 56078a2..26a22aa 100644 --- a/investAPI-main/src/docs/contracts/orders.proto +++ b/investAPI-main/src/docs/contracts/orders.proto @@ -11,10 +11,13 @@ option php_namespace = "Tinkoff\\Invest\\V1"; import "common.proto"; import "google/protobuf/timestamp.proto"; +import "google/api/field_behavior.proto"; service OrdersStreamService { //Stream сделок пользователя rpc TradesStream(TradesStreamRequest) returns (stream TradesStreamResponse); + //Stream поручений пользователя. Перед работой прочитайте [статью](https://russianinvestments.github.io/investAPI/orders_state_stream/). + rpc OrderStateStream(OrderStateStreamRequest) returns (stream OrderStateStreamResponse); } service OrdersService {/* Сервис предназначен для работы с торговыми поручениями:
**1**. @@ -23,6 +26,9 @@ service OrdersService {/* Сервис предназначен для рабо //Метод выставления заявки. rpc PostOrder(PostOrderRequest) returns (PostOrderResponse); + //Асинхронный метод выставления заявки. + rpc PostOrderAsync(PostOrderAsyncRequest) returns (PostOrderAsyncResponse); + //Метод отмены биржевой заявки. rpc CancelOrder(CancelOrderRequest) returns (CancelOrderResponse); @@ -34,11 +40,18 @@ service OrdersService {/* Сервис предназначен для рабо //Метод изменения выставленной заявки. rpc ReplaceOrder(ReplaceOrderRequest) returns (PostOrderResponse); + + //расчет количества доступных для покупки/продажи лотов + rpc GetMaxLots(GetMaxLotsRequest) returns (GetMaxLotsResponse); + + //Метод получения предварительной стоимости для лимитной заявки + rpc GetOrderPrice(GetOrderPriceRequest) returns (GetOrderPriceResponse); } //Запрос установки соединения. message TradesStreamRequest { repeated string accounts = 1; //Идентификаторы счетов. + optional int32 ping_delay_ms = 15; //Задержка пинг сообщений milliseconds 5000-180000, default 120000 } //Информация о торговых поручениях. @@ -46,6 +59,7 @@ message TradesStreamResponse { oneof payload { OrderTrades order_trades = 1; //Информация об исполнении торгового поручения. Ping ping = 2; //Проверка активности стрима. + SubscriptionResponse subscription = 3; //Ответ на запрос на подписку. } } @@ -70,17 +84,19 @@ message OrderTrade { //Запрос выставления торгового поручения. message PostOrderRequest { - string figi = 1 [ deprecated = true ]; //Deprecated Figi-идентификатор инструмента. Необходимо использовать instrument_id. - int64 quantity = 2; //Количество лотов. - Quotation price = 3; //Цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Игнорируется для рыночных поручений. - OrderDirection direction = 4; //Направление операции. - string account_id = 5; //Номер счёта. - OrderType order_type = 6; //Тип заявки. - string order_id = 7; //Идентификатор запроса выставления поручения для целей идемпотентности в формате UID. Максимальная длина 36 символов. + optional string figi = 1 [deprecated = true]; //Deprecated Figi-идентификатор инструмента. Необходимо использовать instrument_id. + int64 quantity = 2 [(google.api.field_behavior) = REQUIRED]; //Количество лотов. + optional Quotation price = 3; //Цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Игнорируется для рыночных поручений. + OrderDirection direction = 4 [(google.api.field_behavior) = REQUIRED]; //Направление операции. + string account_id = 5 [(google.api.field_behavior) = REQUIRED]; //Номер счёта. + OrderType order_type = 6 [(google.api.field_behavior) = REQUIRED]; //Тип заявки. + string order_id = 7 [(google.api.field_behavior) = REQUIRED]; //Идентификатор запроса выставления поручения для целей идемпотентности в формате UID. Максимальная длина 36 символов. string instrument_id = 8; //Идентификатор инструмента, принимает значения Figi или Instrument_uid. + TimeInForceType time_in_force = 9; //Алгоритм исполнения поручения, применяется только к лимитной заявке. + PriceType price_type = 10; //Тип цены. } -//Прочитайте про ключ идемпотентности [здесь](https://tinkoff.github.io/investAPI/head-orders/) +//Прочитайте про ключ идемпотентности [здесь](https://russianinvestments.github.io/investAPI/head-orders/) //Информация о выставлении поручения. message PostOrderResponse { @@ -94,7 +110,7 @@ message PostOrderResponse { MoneyValue total_order_amount = 7; //Итоговая стоимость заявки, включающая все комиссии. MoneyValue initial_commission = 8; //Начальная комиссия. Комиссия рассчитанная при выставлении заявки. MoneyValue executed_commission = 9; //Фактическая комиссия по итогам исполнения заявки. - MoneyValue aci_value = 10; //Значение НКД (накопленного купонного дохода) на дату. Подробнее: [НКД при выставлении торговых поручений](https://tinkoff.github.io/investAPI/head-orders#coupon) + MoneyValue aci_value = 10; //Значение НКД (накопленного купонного дохода) на дату. Подробнее: [НКД при выставлении торговых поручений](https://russianinvestments.github.io/investAPI/head-orders#coupon) string figi = 11; // Figi-идентификатор инструмента. OrderDirection direction = 12; //Направление сделки. @@ -103,28 +119,54 @@ message PostOrderResponse { string message = 15; //Дополнительные данные об исполнении заявки. Quotation initial_order_price_pt = 16; //Начальная цена заявки в пунктах (для фьючерсов). string instrument_uid = 17; //UID идентификатор инструмента. + string order_request_id = 20; //Идентификатор ключа идемпотентности, переданный клиентом, в формате UID. Максимальная длина 36 символов. + ResponseMetadata response_metadata = 254; //Метадата +} + +//Запрос выставления асинхронного торгового поручения. +message PostOrderAsyncRequest { + string instrument_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор инструмента, принимает значения Figi или Instrument_uid. + int64 quantity = 2 [(google.api.field_behavior) = REQUIRED]; //Количество лотов. + optional Quotation price = 3; //Цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Игнорируется для рыночных поручений. + OrderDirection direction = 4 [(google.api.field_behavior) = REQUIRED]; //Направление операции. + string account_id = 5 [(google.api.field_behavior) = REQUIRED]; //Номер счёта. + OrderType order_type = 6 [(google.api.field_behavior) = REQUIRED]; //Тип заявки. + string order_id = 7 [(google.api.field_behavior) = REQUIRED]; //Идентификатор запроса выставления поручения для целей идемпотентности в формате UID. Максимальная длина 36 символов. + optional TimeInForceType time_in_force = 8; //Алгоритм исполнения поручения, применяется только к лимитной заявке. + optional PriceType price_type = 9; //Тип цены. +} + +//Результат выставления асинхронного торгового поручения. +message PostOrderAsyncResponse { + string order_request_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор ключа идемпотентности, переданный клиентом, в формате UID. Максимальная длина 36 символов. + OrderExecutionReportStatus execution_report_status = 2 [(google.api.field_behavior) = REQUIRED]; //Текущий статус заявки. + optional string trade_intent_id = 3; //Идентификатор торгового поручения. } //Запрос отмены торгового поручения. message CancelOrderRequest { - string account_id = 1; //Номер счёта. - string order_id = 2; //Идентификатор заявки. + string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Номер счёта. + string order_id = 2 [(google.api.field_behavior) = REQUIRED]; //Идентификатор заявки. + optional OrderIdType order_id_type = 3; //Тип идентификатора заявки. } //Результат отмены торгового поручения. message CancelOrderResponse { google.protobuf.Timestamp time = 1; //Дата и время отмены заявки в часовом поясе UTC. + ResponseMetadata response_metadata = 254; //Метадата } //Запрос получения статуса торгового поручения. message GetOrderStateRequest { - string account_id = 1; //Номер счёта. - string order_id = 2; //Идентификатор заявки. + string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Номер счёта. + string order_id = 2 [(google.api.field_behavior) = REQUIRED]; //Идентификатор заявки. + PriceType price_type = 3; //Тип цены. + optional OrderIdType order_id_type = 4; //Тип идентификатора заявки. } //Запрос получения списка активных торговых поручений. message GetOrdersRequest { - string account_id = 1; //Номер счёта. + string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Номер счёта. } //Список активных торговых поручений. @@ -161,16 +203,159 @@ message OrderStage { MoneyValue price = 1; //Цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. int64 quantity = 2; //Количество лотов. string trade_id = 3; //Идентификатор сделки. + google.protobuf.Timestamp execution_time = 5; //Время исполнения сделки } //Запрос изменения выставленной заявки. message ReplaceOrderRequest { - string account_id = 1; //Номер счета. - string order_id = 6; //Идентификатор заявки на бирже. - string idempotency_key = 7; //Новый идентификатор запроса выставления поручения для целей идемпотентности. Максимальная длина 36 символов. Перезатирает старый ключ. - int64 quantity = 11; //Количество лотов. - Quotation price = 12; //Цена за 1 инструмент. - PriceType price_type = 13; //Тип цены. + string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Номер счета. + string order_id = 6 [(google.api.field_behavior) = REQUIRED]; //Идентификатор заявки на бирже. + string idempotency_key = 7 [(google.api.field_behavior) = REQUIRED]; //Новый идентификатор запроса выставления поручения для целей идемпотентности. Максимальная длина 36 символов. Перезатирает старый ключ. + int64 quantity = 11 [(google.api.field_behavior) = REQUIRED]; //Количество лотов. + optional Quotation price = 12; //Цена за 1 инструмент. + optional PriceType price_type = 13; //Тип цены. +} + +//Запрос на расчет количества доступных для покупки/продажи лотов. Если не указывать цену инструмента, то расчет произведется по текущум ценам в стакане: по лучшему предложению для покупки и по лучшему спросу для продажи. +message GetMaxLotsRequest { + string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Номер счета + string instrument_id = 2 [(google.api.field_behavior) = REQUIRED]; //Идентификатор инструмента, принимает значения Figi или instrument_uid + optional Quotation price = 3; //Цена инструмента +} + +//Результат количество доступных для покупки/продажи лотов +message GetMaxLotsResponse { + string currency = 1; //Валюта инструмента + BuyLimitsView buy_limits = 2; //Лимиты для покупок на собственные деньги + BuyLimitsView buy_margin_limits = 3; //Лимиты для покупок с учетом маржинального кредитования + SellLimitsView sell_limits = 4; //Лимиты для продаж по собственной позиции + SellLimitsView sell_margin_limits = 5; //Лимиты для продаж с учетом маржинального кредитования + + message BuyLimitsView { + Quotation buy_money_amount = 1; //Количество доступной валюты для покупки + int64 buy_max_lots = 2; //Максимальное доступное количество лотов для покупки + int64 buy_max_market_lots = 3; //Максимальное доступное количество лотов для покупки для заявки по рыночной цене на текущий момент + } + + message SellLimitsView { + int64 sell_max_lots = 1; //Максимальное доступное количество лотов для продажи + } +} + +//Запрос получения предварительной стоимости заявки +message GetOrderPriceRequest { + string account_id = 1; //Номер счета + string instrument_id = 2; //Идентификатор инструмента, принимает значения Figi или instrument_uid + Quotation price = 3; //Цена инструмента + OrderDirection direction = 12; //Направление заявки + int64 quantity = 13; //Количество лотов +} + +//Предварительная стоимость заявки +message GetOrderPriceResponse { + MoneyValue total_order_amount = 1; //Итоговая стоимость заявки + MoneyValue initial_order_amount = 5; //Стоимость заявки без комиссий, НКД, ГО (для фьючерсов — стоимость контрактов) + int64 lots_requested = 3; //Запрошено лотов + MoneyValue executed_commission = 7; //Общая комиссия + MoneyValue executed_commission_rub = 8; //Общая комиссия в рублях + MoneyValue service_commission = 9; //Сервисная комиссия + MoneyValue deal_commission = 10; //Комиссия за проведение сделки + + oneof instrument_extra { + ExtraBond extra_bond = 12; //Дополнительная информация по облигациям + ExtraFuture extra_future = 13; //Дополнительная информация по фьючерсам + } + + message ExtraBond { + MoneyValue aci_value = 2; //Значение НКД (накопленного купонного дохода) на дату + Quotation nominal_conversion_rate = 3; //Курс конвертации для замещающих облигаций + } + + message ExtraFuture { + MoneyValue initial_margin = 2; //Гарантийное обеспечение для фьючерса + } +} + +//Запрос установки стрим-соединения торговых поручений +message OrderStateStreamRequest { + repeated string accounts = 1; //Идентификаторы счетов. + optional int32 ping_delay_ms = 15; //Задержка пинг сообщений milliseconds 5000-180000, default 120000 +} + +//Информация по подпискам +message SubscriptionResponse { + string tracking_id = 1; //Уникальный идентификатор запроса, подробнее: [tracking_id](https://russianinvestments.github.io/investAPI/grpc#tracking-id). + ResultSubscriptionStatus status = 2; //Статус подписки. + string stream_id = 4; //Идентификатор открытого соединения + repeated string accounts = 5; //Идентификаторы счетов. + optional ErrorDetail error = 7; +} + +//Информация по заявкам +message OrderStateStreamResponse { + oneof payload { + OrderState order_state = 1; //Информация об исполнении торгового поручения. + Ping ping = 2; //Проверка активности стрима. + SubscriptionResponse subscription = 3; //Ответ на запрос на подписку. + } + + //Заявка + message OrderState { + string order_id = 1; //Биржевой идентификатор заявки + optional string order_request_id = 2; //Идентификатор ключа идемпотентности, переданный клиентом, в формате UID. Максимальная длина 36 символов. + string client_code = 3; //Код клиента на бирже + google.protobuf.Timestamp created_at = 4; //Дата создания заявки + OrderExecutionReportStatus execution_report_status = 5; //Статус заявки + optional StatusCauseInfo status_info = 6; //Дополнительная информация по статусу + string ticker = 7; //Тикер инструмента + string class_code = 8; //Класс-код (секция торгов) + int32 lot_size = 9; //Лотность инструмента заявки + OrderDirection direction = 10; //Направление заявки + TimeInForceType time_in_force = 11; //Алгоритм исполнения поручения + OrderType order_type = 12; //Тип заявки + string account_id = 13; //Номер счета + MoneyValue initial_order_price = 22; //Начальная цена заявки + MoneyValue order_price = 23; //Цена выставления заявки + optional MoneyValue amount = 24; //Предрассчитанная стоимость полной заявки + MoneyValue executed_order_price = 25; //Исполненная средняя цена одного инструмента в заявке + string currency = 26; //Валюта исполнения + int64 lots_requested = 27; //Запрошено лотов + int64 lots_executed = 28; //Исполнено лотов + int64 lots_left = 29; //Число неисполненных лотов по заявке + int64 lots_cancelled = 30; //Отмененные лоты + optional MarkerType marker = 31; //Спецсимвол + repeated OrderTrade trades = 33; // Список сделок + google.protobuf.Timestamp completion_time = 35; //Время исполнения заявки + string exchange = 36; //Код биржи + string instrument_uid = 41; //UID идентификатор инструмента + } + + //Маркер + enum MarkerType { + MARKER_UNKNOWN = 0; //не определено + MARKER_BROKER = 1; //сделки брокера + MARKER_CHAT = 2; //исполнение поручение, полученного от клиента через каналы связи + MARKER_PAPER = 3; //исполнение поручение, полученного от клиента в бумажной форме + MARKER_MARGIN = 4; //принудительное закрытие позиций + MARKER_TKBNM = 5; //сделки по управлению ликвидностью + MARKER_SHORT = 6; //сделки РЕПО по привлечению у клиентов бумаг + MARKER_SPECMM = 7; //перенос временно непокрытых позиций + MARKER_PO = 8; + } + + //Дополнительная информация по статусу заявки + enum StatusCauseInfo { + CAUSE_UNSPECIFIED = 0; //Не определено + CAUSE_CANCELLED_BY_CLIENT = 15; //Отменено клиентом + CAUSE_CANCELLED_BY_EXCHANGE = 1; //Отменено биржей + CAUSE_CANCELLED_NOT_ENOUGH_POSITION = 2; //Заявка не выставлена из-за нехватки средств + CAUSE_CANCELLED_BY_CLIENT_BLOCK = 3; //Отменено из-за блокировки клиента + CAUSE_REJECTED_BY_BROKER = 4; //Отклонено брокером + CAUSE_REJECTED_BY_EXCHANGE = 5; //Отклонено биржей + CAUSE_CANCELLED_BY_BROKER = 6; //Отменено брокером + } + + } //Направление операции. @@ -198,9 +383,17 @@ enum OrderExecutionReportStatus { EXECUTION_REPORT_STATUS_PARTIALLYFILL = 5; //Частично исполнена } -//Тип цены. -enum PriceType { - PRICE_TYPE_UNSPECIFIED = 0; //Значение не определено. - PRICE_TYPE_POINT = 1; //Цена в пунктах (только для фьючерсов и облигаций). - PRICE_TYPE_CURRENCY = 2; //Цена в валюте расчётов по инструменту. +//Алгоритм исполнения заявки +enum TimeInForceType { + TIME_IN_FORCE_UNSPECIFIED = 0; //Значение не определено см. TIME_IN_FORCE_DAY + TIME_IN_FORCE_DAY = 1; //Заявка действует до конца торгового дня. Значение по умолчанию + TIME_IN_FORCE_FILL_AND_KILL = 2; //Если в момент выставления возможно исполнение заявки(в т.ч. частичное), заявка будет исполнена или отменена сразу после выставления + TIME_IN_FORCE_FILL_OR_KILL = 3; //Если в момент выставления возможно полное исполнение заявки, заявка будет исполнена или отменена сразу после выставления, недоступно для срочного рынка и торговли по выходным +} + +//Тип идентификатора заявки +enum OrderIdType { + ORDER_ID_TYPE_UNSPECIFIED = 0; //Тип идентификатора не указан. + ORDER_ID_TYPE_EXCHANGE = 1; //Биржевой идентификатор + ORDER_ID_TYPE_REQUEST = 2; //Ключ идемпотентности, переданный клиентом } diff --git a/investAPI-main/src/docs/contracts/sandbox.proto b/investAPI-main/src/docs/contracts/sandbox.proto index 9c0859c..0df13e4 100644 --- a/investAPI-main/src/docs/contracts/sandbox.proto +++ b/investAPI-main/src/docs/contracts/sandbox.proto @@ -13,55 +13,59 @@ import "common.proto"; import "orders.proto"; import "operations.proto"; import "users.proto"; +import "google/api/field_behavior.proto"; -service SandboxService { //Сервис для работы с песочницей TINKOFF INVEST API +service SandboxService { // Методы для работы с песочницей T-Invest API - //Метод регистрации счёта в песочнице. + //Зарегистрировать счёт. rpc OpenSandboxAccount(OpenSandboxAccountRequest) returns (OpenSandboxAccountResponse); - //Метод получения счетов в песочнице. + //Получить счета. rpc GetSandboxAccounts(GetAccountsRequest) returns (GetAccountsResponse); - //Метод закрытия счёта в песочнице. + //Закрыть счёт. rpc CloseSandboxAccount(CloseSandboxAccountRequest) returns (CloseSandboxAccountResponse); - //Метод выставления торгового поручения в песочнице. + //Выставить торговое поручение. rpc PostSandboxOrder(PostOrderRequest) returns (PostOrderResponse); - //Метод изменения выставленной заявки. + //Изменить выставленную заявку. rpc ReplaceSandboxOrder(ReplaceOrderRequest) returns (PostOrderResponse); - //Метод получения списка активных заявок по счёту в песочнице. + //Получить список активных заявок по счёту. rpc GetSandboxOrders(GetOrdersRequest) returns (GetOrdersResponse); - //Метод отмены торгового поручения в песочнице. + //Отменить торговое поручение. rpc CancelSandboxOrder(CancelOrderRequest) returns (CancelOrderResponse); - //Метод получения статуса заявки в песочнице. Заявки хранятся в таблице 7 дней. + //Поулчить статус заявки в песочнице. Заявки хранятся в таблице 7 дней. rpc GetSandboxOrderState(GetOrderStateRequest) returns (OrderState); - //Метод получения позиций по виртуальному счёту песочницы. + //Получить позиции по виртуальному счёту. rpc GetSandboxPositions(PositionsRequest) returns (PositionsResponse); - //Метод получения операций в песочнице по номеру счёта. + //Получить операции по номеру счёта. rpc GetSandboxOperations(OperationsRequest) returns (OperationsResponse); - //Метод получения операций в песочнице по номеру счета с пагинацией. + //Получить операции по номеру счёта с пагинацией. rpc GetSandboxOperationsByCursor(GetOperationsByCursorRequest) returns (GetOperationsByCursorResponse); - //Метод получения портфолио в песочнице. + //Получить портфель. rpc GetSandboxPortfolio(PortfolioRequest) returns (PortfolioResponse); - //Метод пополнения счёта в песочнице. + //Пополнить счёт. rpc SandboxPayIn(SandboxPayInRequest) returns (SandboxPayInResponse); - //Метод получения доступного остатка для вывода средств в песочнице. + //Получить доступный остаток для вывода средств. rpc GetSandboxWithdrawLimits(WithdrawLimitsRequest) returns (WithdrawLimitsResponse); + + //Расчёт количества доступных для покупки/продажи лотов в песочнице. + rpc GetSandboxMaxLots(GetMaxLotsRequest) returns (GetMaxLotsResponse); } //Запрос открытия счёта в песочнице. message OpenSandboxAccountRequest { - //пустой запрос + optional string name = 1; // Название счёта } //Номер открытого счёта в песочнице. @@ -71,7 +75,7 @@ message OpenSandboxAccountResponse { //Запрос закрытия счёта в песочнице. message CloseSandboxAccountRequest { - string account_id = 1; //Номер счёта + string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Номер счёта } //Результат закрытия счёта в песочнице. @@ -81,8 +85,8 @@ message CloseSandboxAccountResponse { //Запрос пополнения счёта в песочнице. message SandboxPayInRequest { - string account_id = 1; //Номер счёта - MoneyValue amount = 2; //Сумма пополнения счёта в рублях + string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Номер счёта + MoneyValue amount = 2 [(google.api.field_behavior) = REQUIRED]; //Сумма пополнения счёта в рублях } //Результат пополнения счёта, текущий баланс. diff --git a/investAPI-main/src/docs/contracts/signals.proto b/investAPI-main/src/docs/contracts/signals.proto new file mode 100644 index 0000000..f702090 --- /dev/null +++ b/investAPI-main/src/docs/contracts/signals.proto @@ -0,0 +1,109 @@ +syntax = "proto3"; + +package tinkoff.public.invest.api.contract.v1; + +option go_package = "./;investapi"; +option java_package = "ru.tinkoff.piapi.contract.v1"; +option java_multiple_files = true; +option csharp_namespace = "Tinkoff.InvestApi.V1"; +option objc_class_prefix = "TIAPI"; +option php_namespace = "Tinkoff\\Invest\\V1"; + +import "google/protobuf/timestamp.proto"; +import "google/api/field_behavior.proto"; +import "common.proto"; + +service SignalService {//Сервис для получения технических сигналов и мнений аналитиков по инструментам + + //Запросить стратегии. + rpc GetStrategies(GetStrategiesRequest) returns (GetStrategiesResponse); + + //Запросить сигналы. + rpc GetSignals(GetSignalsRequest) returns (GetSignalsResponse); +} + +//Запрос стратегий. +message GetStrategiesRequest { + optional string strategy_id = 1; //Идентификатор стратегии +} + +//Стратегии +message GetStrategiesResponse { + repeated Strategy strategies = 1; +} + +//Стратегия +message Strategy { + string strategy_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор стратегии. + string strategy_name = 2 [(google.api.field_behavior) = REQUIRED]; //Название стратегии. + optional string strategy_description = 3; //Описание стратегии. + optional string strategy_url = 4; //Ссылка на страницу с описанием стратегии. + StrategyType strategy_type = 5 [(google.api.field_behavior) = REQUIRED]; //Тип стратегии. + int32 active_signals = 6 [(google.api.field_behavior) = REQUIRED]; //Количество активных сигналов. + int32 total_signals = 7 [(google.api.field_behavior) = REQUIRED]; //Общее количество сигналов. + int64 time_in_position = 8 [(google.api.field_behavior) = REQUIRED]; //Среднее время нахождения сигнала в позиции. + Quotation average_signal_yield = 9 [(google.api.field_behavior) = REQUIRED]; //Средняя доходность сигнала в стратегии. + Quotation average_signal_yield_year = 10 [(google.api.field_behavior) = REQUIRED]; //Средняя доходность сигналов в стратегии за последний год. + Quotation yield = 11 [(google.api.field_behavior) = REQUIRED]; //Доходность стратегии. + Quotation yield_year = 12 [(google.api.field_behavior) = REQUIRED]; //Доходность стратегии за последний год. +} + +//Запрос сигналов. +message GetSignalsRequest { + optional string signal_id = 1; //Идентификатор сигнала. + optional string strategy_id = 2; //Идентификатор стратегии. + optional StrategyType strategy_type = 3; //Тип стратегии. + optional string instrument_uid = 4; // Идентификатор бумаги + optional google.protobuf.Timestamp from = 5; // Дата начала запрашиваемого интервала в часовом поясе UTC. + optional google.protobuf.Timestamp to = 6; // Дата конца запрашиваемого интервала в часовом поясе UTC. + optional SignalDirection direction = 7; // Направление сигнала. + optional SignalState active = 8; //Состояние сигнала. + optional Page paging = 9; //Настройки пагинации. +} + +//Сигналы. +message GetSignalsResponse { + repeated Signal signals = 1; //Массив сигналов. + PageResponse paging = 2; //Данные по пагинации. +} + +//Сигнал. +message Signal { + string signal_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор сигнала. + string strategy_id = 2 [(google.api.field_behavior) = REQUIRED]; //Идентификатор стратегии. + string strategy_name = 3 [(google.api.field_behavior) = REQUIRED]; //Название стратегии. + string instrument_uid = 4 [(google.api.field_behavior) = REQUIRED]; //Идентификатор бумаги. + google.protobuf.Timestamp create_dt = 5 [(google.api.field_behavior) = REQUIRED]; //Дата и время создания сигнала в часовом поясе UTC. + SignalDirection direction = 6 [(google.api.field_behavior) = REQUIRED]; //Направление сигнала + Quotation initial_price = 7 [(google.api.field_behavior) = REQUIRED]; //Цена бумаги на момент формирования сигнала + optional string info = 8; //Дополнительная информация о сигнале. + string name = 9 [(google.api.field_behavior) = REQUIRED]; //Название сигнала. + Quotation target_price = 10 [(google.api.field_behavior) = REQUIRED]; //Целевая цена. + google.protobuf.Timestamp end_dt = 11 [(google.api.field_behavior) = REQUIRED]; //Дата и время дедлайна сигнала в часовом поясе UTC. + optional int32 probability = 12; //Вероятность сигнала. + optional Quotation stoploss = 13; //Порог закрытия сигнала по стоплосс. + optional Quotation close_price = 14; //Цена закрытия сигнала. + optional google.protobuf.Timestamp close_dt = 15; //Дата и время закрытия сигнала в часовом поясе UTC. +} + +//Тип стратегии. +enum StrategyType { + STRATEGY_TYPE_UNSPECIFIED = 0; //Не определен. + STRATEGY_TYPE_TECHNICAL = 1; //Техническая стратегия. + STRATEGY_TYPE_FUNDAMENTAL = 2; //Фундаментальная стратегия. +} + +//Направление сигнала. +enum SignalDirection { + SIGNAL_DIRECTION_UNSPECIFIED = 0; //Не определен. + SIGNAL_DIRECTION_BUY = 1; //Покупка. + SIGNAL_DIRECTION_SELL = 2; //Продажа. +} + +//Статус сигнала. +enum SignalState { + SIGNAL_STATE_UNSPECIFIED = 0; //Не определен. + SIGNAL_STATE_ACTIVE = 1; //Активный сигнал. + SIGNAL_STATE_CLOSED = 2; //Закрытый сигнал. + SIGNAL_STATE_ALL = 3; //Все состояния. +} diff --git a/investAPI-main/src/docs/contracts/stoporders.proto b/investAPI-main/src/docs/contracts/stoporders.proto index bfc8475..b11be45 100644 --- a/investAPI-main/src/docs/contracts/stoporders.proto +++ b/investAPI-main/src/docs/contracts/stoporders.proto @@ -10,43 +10,59 @@ option objc_class_prefix = "TIAPI"; option php_namespace = "Tinkoff\\Invest\\V1"; import "google/protobuf/timestamp.proto"; +import "google/api/field_behavior.proto"; import "common.proto"; -service StopOrdersService { /* Сервис предназначен для работы со стоп-заявками:
**1**. - выставление;
**2**. отмена;
**3**. получение списка стоп-заявок.*/ +service StopOrdersService { /* Сервис для работы со стоп-заявками: выставление, отмена, получение списка стоп-заявок.*/ - //Метод выставления стоп-заявки. + //Выставить стоп-заявку. rpc PostStopOrder(PostStopOrderRequest) returns (PostStopOrderResponse); - //Метод получения списка активных стоп заявок по счёту. + //Получить список активных стоп-заявок по счёту. rpc GetStopOrders(GetStopOrdersRequest) returns (GetStopOrdersResponse); - //Метод отмены стоп-заявки. + //Отменить стоп-заявку. rpc CancelStopOrder(CancelStopOrderRequest) returns (CancelStopOrderResponse); } //Запрос выставления стоп-заявки. message PostStopOrderRequest { - string figi = 1 [ deprecated = true ]; //Deprecated Figi-идентификатор инструмента. Необходимо использовать instrument_id. - int64 quantity = 2; //Количество лотов. - Quotation price = 3; //Цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. - Quotation stop_price = 4; //Стоп-цена заявки за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. - StopOrderDirection direction = 5; //Направление операции. - string account_id = 6; //Номер счёта. - StopOrderExpirationType expiration_type = 7; //Тип экспирации заявки. - StopOrderType stop_order_type = 8; //Тип заявки. - google.protobuf.Timestamp expire_date = 9; //Дата и время окончания действия стоп-заявки в часовом поясе UTC. **Для ExpirationType = GoodTillDate заполнение обязательно**. - string instrument_id = 10; //Идентификатор инструмента, принимает значения Figi или instrument_uid. + optional string figi = 1 [ deprecated = true ]; //Deprecated FIGI-идентификатор инструмента. Используйте `instrument_id`. + int64 quantity = 2 [(google.api.field_behavior) = REQUIRED]; //Количество лотов. + optional Quotation price = 3; //Цена за 1 инструмент биржевой заявки, которая будет выставлена при срабатывании по достижению `stop_price`. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. + optional Quotation stop_price = 4; //Стоп-цена заявки за 1 инструмент. При достижении стоп-цены происходит активация стоп-заявки, в результате чего выставляется биржевая заявка. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. + StopOrderDirection direction = 5 [(google.api.field_behavior) = REQUIRED]; //Направление операции. + string account_id = 6 [(google.api.field_behavior) = REQUIRED]; //Номер счёта. + StopOrderExpirationType expiration_type = 7 [(google.api.field_behavior) = REQUIRED]; //Тип экспирации заявки. + StopOrderType stop_order_type = 8 [(google.api.field_behavior) = REQUIRED]; //Тип заявки. + optional google.protobuf.Timestamp expire_date = 9; //Дата и время окончания действия стоп-заявки по UTC. Для `ExpirationType = GoodTillDate` заполнение обязательно, для `GoodTillCancel` игнорируется. + string instrument_id = 10 [(google.api.field_behavior) = REQUIRED]; //Идентификатор инструмента. Принимает значение `figi` или `instrument_uid`. + ExchangeOrderType exchange_order_type = 11; //Тип дочерней биржевой заявки для тейкпрофита. + TakeProfitType take_profit_type = 12; //Подтип стоп-заявки — `TakeProfit`. + TrailingData trailing_data = 13; //Массив с параметрами трейлинг-стопа. + PriceType price_type = 14; //Тип цены. + string order_id = 15 [(google.api.field_behavior) = REQUIRED]; //Идентификатор запроса выставления поручения для целей идемпотентности в формате `UID`. Максимальная длина — 36 символов. + message TrailingData { + Quotation indent = 1; //Отступ. + TrailingValueType indent_type = 2; //Тип величины отступа. + Quotation spread = 3; //Размер защитного спреда. + TrailingValueType spread_type = 4; //Тип величины защитного спреда. + } } //Результат выставления стоп-заявки. message PostStopOrderResponse { string stop_order_id = 1; //Уникальный идентификатор стоп-заявки. + string order_request_id = 2; //Идентификатор ключа идемпотентности, переданный клиентом, в формате `UID`. Максимальная длина 36 — символов. + ResponseMetadata response_metadata = 254; //Метадата. } //Запрос получения списка активных стоп-заявок. message GetStopOrdersRequest { - string account_id = 1; //Идентификатор счёта клиента. + string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор счёта клиента. + StopOrderStatusOption status = 2; //Статус заявок. + google.protobuf.Timestamp from = 3; //Левая граница. + google.protobuf.Timestamp to = 4; //Правая граница. } //Список активных стоп-заявок. @@ -56,29 +72,43 @@ message GetStopOrdersResponse { //Запрос отмены выставленной стоп-заявки. message CancelStopOrderRequest { - string account_id = 1; //Идентификатор счёта клиента. - string stop_order_id = 2; //Уникальный идентификатор стоп-заявки. + string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор счёта клиента. + string stop_order_id = 2 [(google.api.field_behavior) = REQUIRED]; //Уникальный идентификатор стоп-заявки. } //Результат отмены выставленной стоп-заявки. message CancelStopOrderResponse { - google.protobuf.Timestamp time = 1; //Время отмены заявки в часовом поясе UTC. + google.protobuf.Timestamp time = 1; //Время отмены заявки по UTC. } //Информация о стоп-заявке. message StopOrder { - string stop_order_id = 1; //Идентификатор-идентификатор стоп-заявки. + string stop_order_id = 1; //Уникальный идентификатор стоп-заявки. int64 lots_requested = 2; //Запрошено лотов. - string figi = 3; //Figi-идентификатор инструмента. + string figi = 3; //FIGI-идентификатор инструмента. StopOrderDirection direction = 4; //Направление операции. string currency = 5; //Валюта стоп-заявки. StopOrderType order_type = 6; //Тип стоп-заявки. - google.protobuf.Timestamp create_date = 7; //Дата и время выставления заявки в часовом поясе UTC. - google.protobuf.Timestamp activation_date_time = 8; //Дата и время конвертации стоп-заявки в биржевую в часовом поясе UTC. - google.protobuf.Timestamp expiration_time = 9; //Дата и время снятия заявки в часовом поясе UTC. - MoneyValue price = 10; //Цена заявки за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. - MoneyValue stop_price = 11; //Цена активации стоп-заявки за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. - string instrument_uid = 12; //instrument_uid идентификатор инструмента. + google.protobuf.Timestamp create_date = 7; //Дата и время выставления заявки по UTC. + google.protobuf.Timestamp activation_date_time = 8; //Дата и время конвертации стоп-заявки в биржевую по UTC. + google.protobuf.Timestamp expiration_time = 9; //Дата и время снятия заявки по UTC. + MoneyValue price = 10; //Цена заявки за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. + MoneyValue stop_price = 11; //Цена активации стоп-заявки за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. + string instrument_uid = 12; //`instrument_uid`-идентификатор инструмента. + TakeProfitType take_profit_type = 13; //Подтип стоп-заявки — `TakeProfit`. + TrailingData trailing_data = 14; //Параметры трейлинг-стопа. + StopOrderStatusOption status = 15; //Статус заявки. + ExchangeOrderType exchange_order_type = 16; //Тип дочерней биржевой заявки для тейкпрофита. + optional string exchange_order_id = 17; //Идентификатор биржевой заявки. + message TrailingData { + Quotation indent = 1; //Отступ. + TrailingValueType indent_type = 2; //Тип величины отступа. + Quotation spread = 3; //Размер защитного спреда. + TrailingValueType spread_type = 4; //Тип величины защитного спреда. + TrailingStopStatus status = 5; //Статус трейлинг-стопа. + Quotation price = 7; //Цена исполнения. + Quotation extr = 8; //Локальный экстремум. + } } //Направление сделки стоп-заявки. @@ -98,7 +128,45 @@ enum StopOrderExpirationType { //Тип стоп-заявки. enum StopOrderType { STOP_ORDER_TYPE_UNSPECIFIED = 0; //Значение не указано. - STOP_ORDER_TYPE_TAKE_PROFIT = 1; //Take-profit заявка. - STOP_ORDER_TYPE_STOP_LOSS = 2; //Stop-loss заявка. - STOP_ORDER_TYPE_STOP_LIMIT = 3; //Stop-limit заявка. + STOP_ORDER_TYPE_TAKE_PROFIT = 1; //`Take-profit`-заявка. + STOP_ORDER_TYPE_STOP_LOSS = 2; //`Stop-loss`-заявка. + STOP_ORDER_TYPE_STOP_LIMIT = 3; //`Stop-limit`-заявка. +} + +//Статус стоп-заяки. +enum StopOrderStatusOption { + STOP_ORDER_STATUS_UNSPECIFIED = 0; //Значение не указано. + STOP_ORDER_STATUS_ALL = 1; //Все заявки. + STOP_ORDER_STATUS_ACTIVE = 2; //Активные заявки. + STOP_ORDER_STATUS_EXECUTED = 3; //Исполненные заявки. + STOP_ORDER_STATUS_CANCELED = 4; //Отменённые заявки. + STOP_ORDER_STATUS_EXPIRED = 5; //Истёкшие заявки. +} + +//Тип выставляемой заявки. +enum ExchangeOrderType { + EXCHANGE_ORDER_TYPE_UNSPECIFIED = 0; //Значение не указано. + EXCHANGE_ORDER_TYPE_MARKET = 1; //Заявка по рыночной цене. + EXCHANGE_ORDER_TYPE_LIMIT = 2; //Лимитная заявка. +} + +//Тип TakeProfit-заявки. +enum TakeProfitType { + TAKE_PROFIT_TYPE_UNSPECIFIED = 0; //Значение не указано. + TAKE_PROFIT_TYPE_REGULAR = 1; //Обычная заявка, значение по умолчанию. + TAKE_PROFIT_TYPE_TRAILING = 2; //Трейлинг-стоп. +} + +//Тип параметров значений трейлинг-стопа. +enum TrailingValueType { + TRAILING_VALUE_UNSPECIFIED = 0; //Значение не указано. + TRAILING_VALUE_ABSOLUTE = 1; //Абсолютное значение в единицах цены. + TRAILING_VALUE_RELATIVE = 2; //Относительное значение в процентах. +} + +//Статус трейлинг-стопа. +enum TrailingStopStatus { + TRAILING_STOP_UNSPECIFIED = 0; //Значение не указано. + TRAILING_STOP_ACTIVE = 1; //Активный. + TRAILING_STOP_ACTIVATED = 2; //Активированный. } diff --git a/investAPI-main/src/docs/contracts/users.proto b/investAPI-main/src/docs/contracts/users.proto index e6e5b4f..0a72ce8 100644 --- a/investAPI-main/src/docs/contracts/users.proto +++ b/investAPI-main/src/docs/contracts/users.proto @@ -10,26 +10,29 @@ option objc_class_prefix = "TIAPI"; option php_namespace = "Tinkoff\\Invest\\V1"; import "google/protobuf/timestamp.proto"; +import "google/api/field_behavior.proto"; import "common.proto"; -service UsersService { /*Сервис предназначен для получения:
**1**. - списка счетов пользователя;
**2**. маржинальных показателей по счёту.*/ +service UsersService { /*С помощью сервиса можно получить:
1. + список счетов пользователя;
2. маржинальные показатели по счёту.*/ - //Метод получения счетов пользователя. + //Получить счета пользователя. rpc GetAccounts (GetAccountsRequest) returns (GetAccountsResponse); - //Расчёт маржинальных показателей по счёту. + //Рассчитать маржинальные показатели по счёту. rpc GetMarginAttributes (GetMarginAttributesRequest) returns (GetMarginAttributesResponse); - //Запрос тарифа пользователя. + //Запросить тариф пользователя. rpc GetUserTariff (GetUserTariffRequest) returns (GetUserTariffResponse); - //Метод получения информации о пользователе. + //Получить информацию о пользователе. rpc GetInfo (GetInfoRequest) returns (GetInfoResponse); } //Запрос получения счетов пользователя. -message GetAccountsRequest {} +message GetAccountsRequest { + optional AccountStatus status = 1; //Статус счета. +} //Список счетов пользователя. message GetAccountsResponse { @@ -65,9 +68,10 @@ message Account { //Тип счёта. enum AccountType { ACCOUNT_TYPE_UNSPECIFIED = 0; //Тип аккаунта не определён. - ACCOUNT_TYPE_TINKOFF = 1; //Брокерский счёт Тинькофф. - ACCOUNT_TYPE_TINKOFF_IIS = 2; //ИИС счёт. + ACCOUNT_TYPE_TINKOFF = 1; //Брокерский счёт Т-Инвестиций. + ACCOUNT_TYPE_TINKOFF_IIS = 2; //ИИС. ACCOUNT_TYPE_INVEST_BOX = 3; //Инвесткопилка. + ACCOUNT_TYPE_INVEST_FUND = 4; //Фонд денежного рынка. } //Статус счёта. @@ -76,25 +80,26 @@ enum AccountStatus { ACCOUNT_STATUS_NEW = 1; //Новый, в процессе открытия. ACCOUNT_STATUS_OPEN = 2; //Открытый и активный счёт. ACCOUNT_STATUS_CLOSED = 3; //Закрытый счёт. + ACCOUNT_STATUS_ALL = 4; //Все счета. } -//Запрос маржинальных показателей по счёту +//Запрос маржинальных показателей по счёту. message GetMarginAttributesRequest { // Идентификатор счёта пользователя. - string account_id = 1; + string account_id = 1 [(google.api.field_behavior) = REQUIRED]; } //Маржинальные показатели по счёту. message GetMarginAttributesResponse { - // Ликвидная стоимость портфеля. Подробнее: [что такое ликвидный портфель?](https://help.tinkoff.ru/margin-trade/short/liquid-portfolio/). + // Ликвидная стоимость портфеля. [Подробнее про ликвидный портфель](https://help.tbank.ru/margin-trade/short/liquid-portfolio/). MoneyValue liquid_portfolio = 1; - // Начальная маржа — начальное обеспечение для совершения новой сделки. Подробнее: [начальная и минимальная маржа](https://help.tinkoff.ru/margin-trade/short/initial-and-maintenance-margin/). + // Начальная маржа — начальное обеспечение для совершения новой сделки. [Подробнее про начальную и минимальную маржу](https://help.tbank.ru/margin-trade/short/initial-and-maintenance-margin/). MoneyValue starting_margin = 2; - // Минимальная маржа — это минимальное обеспечение для поддержания позиции, которую вы уже открыли. Подробнее: [начальная и минимальная маржа](https://help.tinkoff.ru/margin-trade/short/initial-and-maintenance-margin/). + // Минимальная маржа — это минимальное обеспечение для поддержания позиции, которую вы уже открыли. [Подробнее про начальную и минимальную маржу](https://help.tbank.ru/margin-trade/short/initial-and-maintenance-margin/). MoneyValue minimal_margin = 3; // Уровень достаточности средств. Соотношение стоимости ликвидного портфеля к начальной марже. @@ -103,7 +108,7 @@ message GetMarginAttributesResponse { // Объем недостающих средств. Разница между стартовой маржой и ликвидной стоимости портфеля. MoneyValue amount_of_missing_funds = 5; - // Скорректированная маржа.Начальная маржа, в которой плановые позиции рассчитываются с учётом активных заявок на покупку позиций лонг или продажу позиций шорт. + // Скорректированная маржа. Начальная маржа, в которой плановые позиции рассчитываются с учётом активных заявок на покупку позиций лонг или продажу позиций шорт. MoneyValue corrected_margin = 6; } @@ -138,7 +143,7 @@ message GetInfoRequest { message GetInfoResponse { bool prem_status = 1; //Признак премиум клиента. bool qual_status = 2; //Признак квалифицированного инвестора. - repeated string qualified_for_work_with = 3; //Набор требующих тестирования инструментов и возможностей, с которыми может работать пользователь. [Подробнее](https://tinkoff.github.io/investAPI/faq_users/). + repeated string qualified_for_work_with = 3; //Набор требующих тестирования инструментов и возможностей, с которыми может работать пользователь. [Подробнее](https://russianinvestments.github.io/investAPI/faq_users/). string tariff = 4; //Наименование тарифа пользователя. } @@ -146,6 +151,6 @@ message GetInfoResponse { enum AccessLevel { ACCOUNT_ACCESS_LEVEL_UNSPECIFIED = 0; //Уровень доступа не определён. ACCOUNT_ACCESS_LEVEL_FULL_ACCESS = 1; //Полный доступ к счёту. - ACCOUNT_ACCESS_LEVEL_READ_ONLY = 2; //Доступ с уровнем прав "только чтение". - ACCOUNT_ACCESS_LEVEL_NO_ACCESS = 3; //Доступ отсутствует. + ACCOUNT_ACCESS_LEVEL_READ_ONLY = 2; //Доступ с уровнем прав «только чтение». + ACCOUNT_ACCESS_LEVEL_NO_ACCESS = 3; //Доступа нет. } diff --git a/investAPI-main/src/docs/deadlines.md b/investAPI-main/src/docs/deadlines.md index ff5714d..ed0b909 100644 --- a/investAPI-main/src/docs/deadlines.md +++ b/investAPI-main/src/docs/deadlines.md @@ -1,17 +1,17 @@ -# Дедлайны запросов +# Время исполнения запросов -TINKOFF INVEST API работает по протоколу [gRPC](/investAPI/grpc/), который предполагает использование -параметра `deadline` на стороне клиента. Данный параметр отвечает за обозначение крайнего срока выполнения -запроса, т.е. по истечению объявленного срока запрос будет прерван принудительно. В TINKOFF INVEST API -не существует жёсткого регулирования полученного дедлайна, однако стоит учитывать, что время выполнения -запроса зависит от множества факторов (объёма данных, скорости их обработки, сложности вычислений и т.п.) -Поэтому команда TINKOFF INVEST API не рекомендует использовать параметр *deadline* со значениями ниже обозначенных в таблице. +T-Invest API работает по протоколу [gRPC](/investAPI/grpc/), который предполагает использование +параметра `deadline` на стороне клиента. +Этот параметр обозначает крайний срок исполнения запроса — по истечении указанного времени запрос будет прерван принудительно. -*Подробнее про deadline: [gRPC and Deadlines](https://grpc.io/blog/deadlines/).* +В T-Invest API нет жёсткого регулирования параметра `deadline`, но учитывайте, что время исполнения запроса зависит от множества факторов — объёма данных, скорости их обработки, сложности вычислений и других. +Поэтому мы не рекомендуем использовать значения меньше указанных в таблице ниже. -## Рекомендованные минимальные дедлайны запросов +[Подробнее про gRPC и `deadline`](https://grpc.io/blog/deadlines/) -| Метод TINKOFF INVEST API | Рекомендованный deadline (ms) | +## Рекомендованные минимальные сроки исполнения запросов + +| Метод T-Invest API | Рекомендованный `deadline` (ms) | |:------------------------------------------------------------------|:------------------------------| | [GetAccounts](/investAPI/users#getaccounts) | 300 | | [GetMarginAttributes](/investAPI/users#getmarginattributes) | 300 | @@ -56,4 +56,4 @@ TINKOFF INVEST API работает по протоколу [gRPC](/investAPI/gr | [GetSandboxPositions](/investAPI/sandbox#getsandboxpositions) | 2000 | | [GetSandboxOperations](/investAPI/sandbox#getsandboxoperations) | 2000 | | [GetSandboxPortfolio](/investAPI/sandbox#getsandboxportfolio) | 2000 | -| [SandboxPayIn](/investAPI/sandbox#sandboxpayin) | 300 | +| [SandboxPayIn](/investAPI/sandbox#sandboxpayin) | 300 | \ No newline at end of file diff --git a/investAPI-main/src/docs/eol_v1.md b/investAPI-main/src/docs/eol_v1.md index 6b02e07..6f04d9b 100644 --- a/investAPI-main/src/docs/eol_v1.md +++ b/investAPI-main/src/docs/eol_v1.md @@ -1,8 +1,8 @@ -# Прекращение поддержки старой версии openAPI +# Прекращение поддержки старой версии OpenAPI ->**Важно!** ->С мая 2023 поддержка старой версии openapi прекращается. -Клиенты, использующие [старую версию](https://github.com/Tinkoff/invest-openapi/) и использующие сервера api-invest.tinkoff.ru/openapi, должны перейти на новую версию Tinkoff invest API. +>**Важно**
+>С мая 2023 поддержка старой версии OpenAPI прекращается. +Если вы используете [старую версию](https://github.com/Tinkoff/invest-openapi/) и серверы `api-invest.tinkoff.ru/openapi`, переключитесь на новую версию T-Invest API. В новой версии поддерживаются все изменения брокера: @@ -11,25 +11,21 @@ * стриминги сделок, портфеля и позиций; * большое количество новых методов и данных. -## Торговать на новой версией API - выгодно +## Преимущества торговли через новую версию -Действует программа кэшбека в размере 10% с комиссии сделок, совершенных через API. +При торговле через новую версию действует программа кешбэка — 10% с комиссии сделок, которые совершаются через API. -## Ссылки +## Полезные ссылки -Репозитарий новой версии: [https://github.com/Tinkoff/investAPI](https://github.com/Tinkoff/investAPI) +- [Репозиторий новой версии](https://github.com/RussianInvestments/investAPI) -Документация новой версии: [https://tinkoff.github.io/investAPI/](https://tinkoff.github.io/investAPI/) +- [Документация новой версии](https://russianinvestments.github.io/investAPI/) -Поддерживаются протоколы: +Поддерживаемые протоколы — [gRPC](https://RussianInvestments.github.io/investAPI/grpc/) и [REST](https://RussianInvestments.github.io/investAPI/swagger-ui/). -* gRPC – [https://tinkoff.github.io/investAPI/grpc/](https://tinkoff.github.io/investAPI/grpc/) -* REST – [https://tinkoff.github.io/investAPI/swagger-ui/](https://tinkoff.github.io/investAPI/swagger-ui/) +## Связь -## Вопросы - -Если остались вопросы, пишите: - -* в [неофициальный телеграм-чат](https://t.me/joinchat/VaW05CDzcSdsPULM) -* по почте [invest-public-api@tinkoff.ru](mailto:invest-public-api@tinkoff.ru) +Если у вас остались вопросы, напишите нам: +* в [неофициальный Телеграм-чат](https://t.me/joinchat/VaW05CDzcSdsPULM); +* на почту — [invest-public-api@tbank.ru](mailto:invest-public-api@tbank.ru). \ No newline at end of file diff --git a/investAPI-main/src/docs/errors.md b/investAPI-main/src/docs/errors.md index c44142f..855caa4 100644 --- a/investAPI-main/src/docs/errors.md +++ b/investAPI-main/src/docs/errors.md @@ -1,123 +1,148 @@ -#Ошибки TINKOFF INVEST API +# Ошибки T-Invest API -Некоторые ошибки - |Код ошибки|Тип ошибки|Текст ошибки|Причины возникновения и
рекомендации по устранению| |---|---|---|---| -12001|UNIMPLEMENTED|Method is unimplemented|Метод не реализован| -12002|UNAVAILABLE|Deprecated method is unavailable|Метод устарел и недоступен| -30001|INVALID_ARGUMENT|missing parameter: 'from'|Входной параметр `from` является обязательным.
Укажите корректный параметр `from`| -30002|INVALID_ARGUMENT|the required period should not exceed 7 days|Запрошенный период не может превышать 7 дней.
Укажите корректный период| -30003|INVALID_ARGUMENT|'from' can't be less than the current date|Входной параметр `from` не может быть меньше текущей даты.
Укажите корректный параметр `from`| -30004|INVALID_ARGUMENT|missing parameter: 'to'|Входной параметр `to` является обязательным.
Укажите корректный параметр `to`| -30005|INVALID_ARGUMENT|'id_type' is invalid|Входной параметр `id_type` имеет некорректное значение.
Список доступных значений: [id_type](https://tinkoff.github.io/investAPI/instruments#instrumentidtype)| -30006|INVALID_ARGUMENT|missing parameter: 'id_type'|Входной параметр `id_type` является обязательным.
Укажите корректный параметр `id_type`| -30007|INVALID_ARGUMENT|missing parameter: 'id'|Входной параметр `id` является обязательным.
Укажите корректный параметр `id`| -30008|INVALID_ARGUMENT|missing parameter: 'figi'|Входной параметр `figi` является обязательным.
Укажите корректный параметр `figi`| -30009|INVALID_ARGUMENT|'from' is invalid|Входной параметр `from` имеет некорректное значение.
Укажите корректный параметр `from`| -30010|INVALID_ARGUMENT|'to' is invalid|Входной параметр `to` имеет некорректное значение.
Укажите корректный параметр `to`| -30011|INVALID_ARGUMENT|interval is invalid|Входной параметр `interval` имеет некорректное значение.
Список доступных значений: [interval](https://tinkoff.github.io/investAPI/marketdata#subscriptioninterval)| -30012|INVALID_ARGUMENT|'to' can't be less than 'from'|Входной параметр `to` не может быть меньше параметра `from`.
Укажите корректные параметры `from` и `to`| -30013|INVALID_ARGUMENT|'class_code' require for 'id_type' = 'ticker'|Входной параметр `class_code` не может быть пустым при поиске по тикеру.
Укажите корректный параметр `class_code`.
Подробнее: [Идентификация инструментов](https://tinkoff.github.io/investAPI/faq_identification/)| -30014|INVALID_ARGUMENT|the maximum request period for the given candle interval has been exceeded|Превышен максимальный период запроса для данного интервала свечи.
Укажите корректный интервал.
Подробнее: [Интервалы свечей и доступные периоды](https://tinkoff.github.io/investAPI/load_history/)| -30015|INVALID_ARGUMENT|parameter 'quantity' is missing or equal to 0|Входной параметр `quantity` является обязательным.
Укажите корректный параметр `quantity`| -30016|INVALID_ARGUMENT|'quantity' is invalid|Входной параметр `quantity` имеет некорректное значение.
Укажите корректный параметр `quantity`| -30017|INVALID_ARGUMENT|missing parameter: 'price'|Входной параметр `price` является обязательным.
Укажите корректный параметр `price`.
Значение параметра `price` должно быть положительным.
units и nanos не могут иметь разные знак и модуль nanos должен быть < 999 999 999| -30018|INVALID_ARGUMENT|price is invalid|Входной параметр *price* имеет некорректное значение.
Укажите корректный параметр `price`| -30019|INVALID_ARGUMENT|missing parameter: 'direction'|Входной параметр `direction` является обязательным.
Укажите корректный параметр `direction`| -30020|INVALID_ARGUMENT|'direction' is invalid|Входной параметр `direction` имеет некорректное значение| -30021|INVALID_ARGUMENT|missing parameter: 'account_id'|Входной параметр `account_id` является обязательным.
Укажите корректный параметр `account_id`| -30022|INVALID_ARGUMENT|missing parameter: 'state'|Входной параметр `state` является обязательным.
Укажите корректный параметр `state`.
Список доступных значений: [direction](https://tinkoff.github.io/investAPI/operations/#operationstate)| -30023|INVALID_ARGUMENT|invalid parameter: 'state'|Входной параметр `state` имеет некорректное значение.
Укажите корректный параметр `state`.
Список доступных значений: [direction](https://tinkoff.github.io/investAPI/operations/#operationstate)| -30025|INVALID_ARGUMENT|missing parameter: 'order_type'|Входной параметр `order_type` является обязательным.
Укажите корректный параметр `order_type`. Список доступных значений: [order_type](https://tinkoff.github.io/investAPI/orders/#ordertype)| -30026|INVALID_ARGUMENT|invalid parameter: 'order_type'|Входной параметр `order_type` имеет некорректное значение.
Укажите корректный параметр `order_type`| -30027|INVALID_ARGUMENT|missing parameter: 'order_id'|Входной параметр `order_id` является обязательным.
Укажите корректный параметр `order_id`| -30028|INVALID_ARGUMENT|'order id' is invalid UUID format.|Входной параметр `order_id` имеет некорректное значение.
Укажите корректный параметр `order_id` формата UUID.Максимальная длина 36 символов| -30029|INVALID_ARGUMENT|missing parameter: 'idempotency_key'|Входной параметр `idempotency_key` является обязательным.
Укажите корректный параметр `idempotency_key`| -30030|INVALID_ARGUMENT|'idempotency_key' is invalid|Входной параметр `idempotency_key` имеет некорректное значение.
Укажите корректный параметр `idempotency_key`. Максимальная длина 36 символов| -30031|INVALID_ARGUMENT|missing parameter: 'depth'|Входной параметр `depth` является обязательным.
Укажите корректный параметр `depth`| -30032|INVALID_ARGUMENT|depth is invalid|Входной параметр `depth` имеет некорректное значение.
Укажите корректный параметр `depth`| -30033|INVALID_ARGUMENT|missing parameter: 'trade_clearing_account' or 'class_code'|Параметр `trade_clearing_account` или `class_code` не может быть пустым| -30034|INVALID_ARGUMENT|not enough balance|Недостаточно средств для совершения сделки (ошибка песочницы).
Пополните баланс нужной валюты c помощью метода [SandboxPayIn](https://tinkoff.github.io/investAPI/sandbox#sandboxpayin)| -30036|INVALID_ARGUMENT|missing parameter: 'stop_price'|Входной параметр `stop_price` является обязательным.
Укажите корректный параметр `stop_price`| -30037|INVALID_ARGUMENT|missing parameter: 'stop_order_type'|Входной параметр `stop_order_type` является обязательным.
Укажите корректный параметр `stop_order_type`| -30038|INVALID_ARGUMENT|'stop_order_type' is invalid|Входной параметр `stop_order_type` имеет некорректное значение.
Список доступных значений: [stop_order_type](https://tinkoff.github.io/investAPI/stoporders/#stopordertype)| -30040|INVALID_ARGUMENT|'expire_date' is invalid|Входной параметр `expire_date` имеет некорректное значение.
Укажите корректный параметр `expire_date`| -30041|INVALID_ARGUMENT|the method is available only for futures|Метод предназначен только для работы с фьючерсами.
Передайте во входные параметры метода идентификатор фьючерса| -30042|INVALID_ARGUMENT|not enough assets for a margin trade|Недостаточно активов для маржинальной сделки.
Проверьте маржинальные показатели счёта с помощью метода [GetMarginAttributes](https://tinkoff.github.io/investAPI/users#getmarginattributes)| -30043|INVALID_ARGUMENT|missing parameter: 'expiration_type'|Входной параметр `expiration_type` является обязательным.
Укажите корректный параметр `expiration_type`| -30044|INVALID_ARGUMENT|'expiration_type' is invalid|Входной параметр `expiration_type` имеет некорректное значение.
Список доступных значений: [expiration_type](https://tinkoff.github.io/investAPI/stoporders/#stoporderexpirationtype)| -30045|INVALID_ARGUMENT|missing parameter: 'ticker'|Входной параметр `ticker` является обязательным.
Укажите корректный параметр `ticker`| -30047|INVALID_ARGUMENT|price currency does not match the settlement currency|Валюта цены не совпадает с валютой расчётов по инструменту.
Укажите корректную валюту цены. Узнайте валюту расчета конкретного инструмента с помощью метода [GetInstrumentBy](https://tinkoff.github.io/investAPI/instruments#getinstrumentby)| -30048|INVALID_ARGUMENT|instrument type is not bond|Метод предназначен только для запроса информации по облигации.
Передайте во входные параметры метода идентификатор облигации| -30049|INVALID_ARGUMENT|post order error: %s|Ошибка метода выставления торгового поручения.
Подробнее в тексте ошибки| -30050|INVALID_ARGUMENT|'instrument_status' is invalid|Входной параметр `instrument_status` имеет некорректное значение.
Список доступных значений: [instrument_status](https://tinkoff.github.io/investAPI/instruments#instrumentstatus)| -30051|INVALID_ARGUMENT|account margin status is disabled|Для данного договора недоступна маржинальная торговля.
Для выставления поручений на срочном рынке, необходимо включить маржинальную торговлю в приложении и терминале| -30052|INVALID_ARGUMENT|instrument forbidden for trading by API|Для данного инструмента недоступна торговля через API.
Проверьте значение параметра `api_trade_available_flag` данного инструмента c помощью метода [GetTradingStatus](https://tinkoff.github.io/investAPI/marketdata#gettradingstatus)| -30053|INVALID_ARGUMENT|post stop_order error: %s|Ошибка метода выставления стоп-заявки.
Подробнее в тексте ошибки| -30054|INVALID_ARGUMENT|instrument type is not a share or etf|Тип инструмента не инвестиционный фонд или акция| -30055|INVALID_ARGUMENT|order_id cannot be longer than 36 characters|Значение параметра `order_id` не может быть длиннее 36 символов| -30056|INVALID_ARGUMENT|stop order settlement currency is not supported|Валюта выставления стоп-заявки не поддерживается| -30057|INVALID_ARGUMENT|the order is a duplicate, but the order report was not found|Заявка является дублем, но отчет по заявке не найден.
Проверьте параметр `order_id` (идентификатор запроса выставления поручения для целей идемпотентности) – он должен быть уникальным| -30058|INVALID_ARGUMENT|task not completed yet, please try again later|Выполнение задачи еще не завершено, попробуйте позже| -30059|INVALID_ARGUMENT|cancel order error: %s|Ошибка метода отмены заявки.
Подробнее в тексте ошибки| -30060|INVALID_ARGUMENT|cancel stop-order error: %s|Ошибка метода отмены стоп-заявки.
Подробнее в тексте ошибки| -30061|INVALID_ARGUMENT|'from' value out of range|Входной параметр `from` имеет некорректное значение.
Укажите значение в пределах от 1970-01-01T00:00:00Z до 2099-12-31T23:59:59.999999999Z включительно| -30062|INVALID_ARGUMENT|'to' value out of range|Входной параметр `to` имеет некорректное значение.
Укажите значение в пределах от 1970-01-01T00:00:00Z до 2099-12-31T23:59:59.999999999Z включительно| -30063|INVALID_ARGUMENT|'expire_date' value out of range|Входной параметр `expire_date` имеет некорректное значение.
Дата должна быть не ранее текущей и не позднее 2099-12-31T23:59:59.999999999Z| -30064|INVALID_ARGUMENT|the required period should not exceed 31 days|Запрошенный период не может превышать 31 дня.
Укажите корректный период| -30065|INVALID_ARGUMENT|missing parameter: 'task_id'|Входной параметр `task_id` является обязательным.
Укажите корректный параметр `task_id`| -30066|INVALID_ARGUMENT|missing parameter: 'payload'|Входной параметр `payload` является обязательным.
Укажите корректный параметр `payload`| -30067|INVALID_ARGUMENT|'action_type' is invalid|Некорректное значение `action_type`.
Выберите допустимое значение| -30068|INVALID_ARGUMENT|Only limit order is allowed|В настоящий момент возможно выставление только лимитного торгового поручения. Подробнее про [выставление торговых поручений](https://tinkoff.github.io/investAPI/orders_details)| -30069|INVALID_ARGUMENT|Invalid parameter: 'limit'|Входной параметр `limit` имеет некорректное значение.
Значение должно быть меньше или равно 1000| -30070|INVALID_ARGUMENT|'from' can't be more than the current date|Входной параметр `from` имеет некорректное значение.
Укажите значение не превышающее текущую дату и время| -30077|INVALID_ARGUMENT|not available for OTC instruments|Метод недоступен для внебиржевых инструментов.
У таких инструментов параметр `api_trade_available_flag` метода [GetTradingStatus](https://tinkoff.github.io/investAPI/marketdata#gettradingstatus) будет иметь значение false| -30078|INVALID_ARGUMENT|Incorrect minimum price increment|Некорректный шаг изменения цены.
Остаток от деления price на min_price_increment должен быть равен 0| -30079|INVALID_ARGUMENT|instrument is not available for trading|Инструмент недоступен для торгов. Подробнее о [торговых статусах](https://tinkoff.github.io/investAPI/faq_trading_status)| -30080|INVALID_ARGUMENT|quantity must be positive|Количество лотов должно быть положительным числом| -30081|INVALID_ARGUMENT|account status is closed|Аккаунт закрыт| -30082|INVALID_ARGUMENT|account status is blocked|Аккаунт заблокирован| -30083|INVALID_ARGUMENT|order_type is invalid|Некорректный тип заявки| -30084|INVALID_ARGUMENT|maximum request period has been exceeded|Превышен лимит запрашиваемого периода| -30085|INVALID_ARGUMENT|price in points is available only for futures and bonds|Тип цены в пунктах доступен только для фьючерсов и облигаций| -30086|INVALID_ARGUMENT|year is invalid|Некорректный год| -30087|INVALID_ARGUMENT|missing parameter: query|Входной параметр `query` является обязательным.
Укажите корректный (не пустой) параметр `query`| -30088|INVALID_ARGUMENT|'from' and 'to' must have the same year|Запрашиваемые даты должны быть в рамках одного года| -30089|INVALID_ARGUMENT|'to' must not be later than %s|Значение параметра `to` не должно быть позднее даты, указанной в тексте ошибки.
Дата указана в формате ISO 8601| -30090|INVALID_ARGUMENT|missing parameter: 'siebel_id'|Входной параметр `siebel_id` является обязательным.
Укажите корректный параметр `siebel_id`| -30091|INVALID_ARGUMENT|quantity of instruments can't be more than 100|Количество инструментов не может превышать 100| -30092|INVALID_ARGUMENT|trading unavailable on weekends|Торги недоступны по нерабочим дням. Больше о [торговых сессиях](https://tinkoff.github.io/investAPI/markets)| -30093|INVALID_ARGUMENT|missing parameter: 'figi' or 'instrument_id'|Один из параметров `figi` или `instrument_id` является обязательным| -30094|INVALID_ARGUMENT|options trading is not available at the moment|Выставление заявок по опционам недоступно.| -30095|INVALID_ARGUMENT|the request was not executed by the exchange|Заявка не исполнена биржей.
Лимитная заявка может не исполняться по причине недостижения установленной цены на бирже.
Рыночная же может не исполняться по причине отсутствия сделок с данными инструментов (низкая ликвидность)| -30096|INVALID_ARGUMENT|the order was rejected, try again later|Заявка отклонена, попробуйте повторить позже| -30097|INVALID_ARGUMENT|inappropriate trading session|Сейчас эта сессия не идёт. Больше о [торговых сессиях](https://tinkoff.github.io/investAPI/markets)| -30098|INVALID_ARGUMENT|currently, there is no trading on this financial instrument|Торги по этому финансовому инструменту сейчас не проводятся.
Проверьте актуальный торговый статус инструмента с помощью метода [GetTradingStatus](https://tinkoff.github.io/investAPI/marketdata#gettradingstatus)| -30099|INVALID_ARGUMENT|the price is outside the limits for this instrument|Цена вне лимитов по инструменту или цена сделки вне лимита. Подробнее про [выставление торговых поручений](https://tinkoff.github.io/investAPI/orders_details)| -30100|INVALID_ARGUMENT|the price must be positive|Цена должна быть положительной| -30101|INVALID_ARGUMENT|to trade this financial instrument, pass the test|Для торговли этим инструментом пройдите тестирование. О том, как сдать тестирование и кому оно нужно читайте в [статье](https://www.tinkoff.ru/blog/articles/test-invest/)| -30102|INVALID_ARGUMENT|Required parameters missing|Не правильно указаны обязательные параметры| -30103|INVALID_ARGUMENT|Only best price is allowed|Для инструмента доступно выставление заявки только типа "лучшая цена"| -30104|INVALID_ARGUMENT|price_type is invalid| Некорректное значение `price_type`. Значением `price_type` может быть только **PRICE_TYPE_POINT** или **PRICE_TYPE_CURRENCY**| -40002|PERMISSION_DENIED|insufficient privileges|Недостаточно прав для совершения операции.
Токен доступа имеет уровень прав read-only, либо у токена нет доступа к указанному счету.
Подробнее: [виды токенов](https://tinkoff.github.io/investAPI/index#_2)| -40003|UNAUTHENTICATED|authentication token is missing or invalid|Токен доступа не найден или не активен.
Выпустите новый токен в [настройках](https://www.tinkoff.ru/invest/settings/)| -40004|PERMISSION_DENIED|Working with orders is not available with this account|Выставление заявок недоступно с текущего аккаунта.
Брокерский счет не найден, не принадлежит пользователю или закрыт, либо на пользователе ограничения (от Tinkoff Invest API или от биржи). В этом случае нужно обратиться в техподдержку| -50001|NOT_FOUND|exchange not found|Биржа не найдена по переданному параметру `exchange_id`.
Укажите корректный параметр `exchange_id`| -50002|NOT_FOUND|instrument not found|Инструмент не найден.
Укажите корректный идентификатор инструмента| -50004|NOT_FOUND|account not found|Счёт не найден по переданному параметру `account_id`.
Укажите корректный парамтер `account_id`| -50005|NOT_FOUND|order not found|Торговое поручение не найдено по переданному параметру `order_id`.
Укажите корректный параметр `order_id`| -50006|NOT_FOUND|stop-order not found|Стоп-заявка не найдена по переданному параметру `stop_order_id`.
Укажите корректный параметр `stop_order_id`| -50007|NOT_FOUND|task not found|Задача не найдена| -50008|NOT_FOUND|no orderbook provider|Отсутствует источник данных по стаканам| -50009|NOT_FOUND|asset not found|Актив не найден.
Укажите корректный идентификатор актива| -50010|NOT_FOUND|brand not found|Бренд не найден.
Укажите корректный идентификатор бренда| -70001|INTERNAL|internal error|Внутренняя ошибка сервиса.
Если ошибка повторяется, обратитесь в службу технической поддержки| -70002|INTERNAL|internal network error|Неизвестная сетевая ошибка, попробуйте выполнить запрос позднее.
Если ошибка повторяется, обратитесь в службу технической поддержки| -70003|INTERNAL|internal error, please try again later|Внутренняя ошибка сервиса, попробуйте выполнить запрос позднее.
Если ошибка повторяется, обратитесь в службу технической поддержки| -80001|RESOURCE_EXHAUSTED|limit of open streams exceeded|Превышен лимит одновременных открытых stream-соединений. Подробнее: [Лимитная политика](https://tinkoff.github.io/investAPI/limits/)| -80002|RESOURCE_EXHAUSTED|request limit exceeded|Превышен лимит запросов в минуту. Подробнее: [Лимитная политика](https://tinkoff.github.io/investAPI/limits/)| -80003|RESOURCE_EXHAUSTED|The limit on SMS sending has been exceeded, try again in a minute|Превышен лимит на отправку СМС, попробуйте через минуту. Если Вы не хотите получать СМС при выставлении заявки, отключите отправку СМС в ЛК| -90001|FAILED_PRECONDITION|need confirmation: %s|Требуется подтверждение операции.
Подробнее в тексте ошибки| -90002|FAILED_PRECONDITION|only for qualified investors|Торговля этим инструментом доступна только квалифицированным инвесторам| -90003|FAILED_PRECONDITION|The price is too high|Цена заявки слишком высокая. Разбейте заявку на заявки меньшего размера. Подробнее: [Ограничения на стоимость заявки](https://tinkoff.github.io/investAPI/faq_orders/)| +12001|UNIMPLEMENTED|Method is unimplemented|Метод не реализован.| +12002|UNAVAILABLE|Deprecated method is unavailable|Метод устарел и недоступен.| +30001|INVALID_ARGUMENT|Missing parameter: `from`|Входной параметр `from` является обязательным.
Укажите корректный параметр `from`.| +30002|INVALID_ARGUMENT|The required period should not exceed 7 days|Запрошенный период не может превышать 7 дней.
Укажите корректный период.| +30003|INVALID_ARGUMENT|`from` can't be less than the current date|Входной параметр `from` не может быть меньше текущей даты.
Укажите корректный параметр `from`.| +30004|INVALID_ARGUMENT|Missing parameter: `to`|Входной параметр `to` является обязательным.
Укажите корректный параметр `to`.| +30005|INVALID_ARGUMENT|`id_type` is invalid|Входной параметр `id_type` имеет некорректное значение.
[Список доступных значений](https://russianinvestments.github.io/investAPI/instruments#instrumentidtype).| +30006|INVALID_ARGUMENT|Missing parameter: `id_type`|Входной параметр `id_type` является обязательным.
Укажите корректный параметр `id_type`.| +30007|INVALID_ARGUMENT|Missing parameter: `id`|Входной параметр `id` является обязательным.
Укажите корректный параметр `id`.| +30008|INVALID_ARGUMENT|Missing parameter: `figi`|Входной параметр `figi` является обязательным.
Укажите корректный параметр `figi`.| +30009|INVALID_ARGUMENT|`from` is invalid|Входной параметр `from` имеет некорректное значение.
Укажите корректный параметр `from`.| +30010|INVALID_ARGUMENT|`to` is invalid|Входной параметр `to` имеет некорректное значение.
Укажите корректный параметр `to`.| +30011|INVALID_ARGUMENT|`interval` is invalid|Входной параметр `interval` имеет некорректное значение.
[Список доступных значений](https://russianinvestments.github.io/investAPI/marketdata#subscriptioninterval).| +30012|INVALID_ARGUMENT|`to` can't be less than `from`|Входной параметр `to` не может быть меньше параметра `from`.
Укажите корректные параметры `from` и `to`.| +30013|INVALID_ARGUMENT|`class_code` require for `id_type` = `ticker`|Входной параметр `class_code` не может быть пустым при поиске по тикеру.
Укажите корректный параметр `class_code`.
[Подробнее](https://russianinvestments.github.io/investAPI/faq_identification/).| +30014|INVALID_ARGUMENT|The maximum request period for the given candle interval has been exceeded|Превышен максимальный период запроса для данного интервала свечи.
Укажите корректный интервал.
[Подробнее](https://russianinvestments.github.io/investAPI/load_history/).| +30015|INVALID_ARGUMENT|Parameter `quantity` is missing or equal to 0|Входной параметр `quantity` является обязательным.
Укажите корректный параметр `quantity`.| +30016|INVALID_ARGUMENT|`quantity` is invalid|Входной параметр `quantity` имеет некорректное значение.
Укажите корректный параметр `quantity`.| +30017|INVALID_ARGUMENT|Missing parameter: `price`|Входной параметр `price` является обязательным.
Укажите корректный параметр `price`.
Значение параметра `price` должно быть положительным.
`units` и `nanos` не могут иметь разные знак и модуль `nanos` должен быть < 999 999 999| +30018|INVALID_ARGUMENT|`price` is invalid|Входной параметр `price` имеет некорректное значение.
Укажите корректный параметр `price`.| +30019|INVALID_ARGUMENT|Missing parameter: `direction`|Входной параметр `direction` является обязательным.
Укажите корректный параметр `direction`.| +30020|INVALID_ARGUMENT|`direction` is invalid|Входной параметр `direction` имеет некорректное значение.| +30021|INVALID_ARGUMENT|Missing parameter: `account_id`|Входной параметр `account_id` является обязательным.
Укажите корректный параметр `account_id`.| +30022|INVALID_ARGUMENT|`account_id` is invalid|Входной параметр `account_id` имеет некорректное значение.| +30023|INVALID_ARGUMENT|Invalid parameter: `state`|Входной параметр `state` имеет некорректное значение.
Укажите корректный параметр `state`.
[Список доступных значений](https://russianinvestments.github.io/investAPI/operations/#operationstate).| +30025|INVALID_ARGUMENT|Missing parameter: `order_type`|Входной параметр `order_type` является обязательным.
Укажите корректный параметр `order_type`. [Список доступных значений](https://russianinvestments.github.io/investAPI/orders/#ordertype).| +30026|INVALID_ARGUMENT|Invalid parameter: `order_type`|Входной параметр `order_type` имеет некорректное значение.
Укажите корректный параметр `order_type`.| +30027|INVALID_ARGUMENT|Missing parameter: `order_id`|Входной параметр `order_id` является обязательным.
Укажите корректный параметр `order_id`.| +30028|INVALID_ARGUMENT|`order id` has invalid UUID format|Входной параметр `order_id` имеет некорректное значение.
Укажите корректный параметр `order_id` формата UUID. Максимальная длина 36 символов.| +30029|INVALID_ARGUMENT|Missing parameter: `idempotency_key`|Входной параметр `idempotency_key` является обязательным.
Укажите корректный параметр `idempotency_key`.| +30030|INVALID_ARGUMENT|`idempotency_key` is invalid|Входной параметр `idempotency_key` имеет некорректное значение.
Укажите корректный параметр `idempotency_key`. Максимальная длина 36 символов.| +30031|INVALID_ARGUMENT|Missing parameter: `depth`|Входной параметр `depth` является обязательным.
Укажите корректный параметр `depth`.| +30032|INVALID_ARGUMENT|`depth` is invalid|Входной параметр `depth` имеет некорректное значение.
Укажите корректный параметр `depth`.| +30033|INVALID_ARGUMENT|Missing parameter: `trade_clearing_account` or `class_code`|Параметр `trade_clearing_account` или `class_code` не может быть пустым.| +30034|INVALID_ARGUMENT|Not enough balance|Недостаточно средств для совершения сделки (ошибка песочницы).
Пополните баланс нужной валюты через метод [SandboxPayIn](https://russianinvestments.github.io/investAPI/sandbox#sandboxpayin).| +30036|INVALID_ARGUMENT|Missing parameter: `stop_price`|Входной параметр `stop_price` является обязательным.
Укажите корректный параметр `stop_price`.| +30037|INVALID_ARGUMENT|Missing parameter: `stop_order_type`|Входной параметр `stop_order_type` является обязательным.
Укажите корректный параметр `stop_order_typ`.| +30038|INVALID_ARGUMENT|`stop_order_type` is invalid|Входной параметр `stop_order_type` имеет некорректное значение.
[Список доступных значений](https://russianinvestments.github.io/investAPI/stoporders/#stopordertype).| +30039|INVALID_ARGUMENT|Bad request: `trailing_data`|Укажите корректное значение параметра `trailing_data`| +30040|INVALID_ARGUMENT|`expire_date` is invalid|Входной параметр `expire_date` имеет некорректное значение.
Укажите корректный параметр `expire_date`.| +30041|INVALID_ARGUMENT|The method is available only for futures|Метод предназначен только для работы с фьючерсами.
Передайте во входные параметры метода идентификатор фьючерса.| +30042|INVALID_ARGUMENT|Not enough assets for a margin trade|Недостаточно активов для маржинальной сделки.
Проверьте маржинальные показатели счёта — это можно сделать через метод [GetMarginAttributes](https://russianinvestments.github.io/investAPI/users#getmarginattributes).| +30043|INVALID_ARGUMENT|Missing parameter: `expiration_type`|Входной параметр `expiration_type` является обязательным.
Укажите корректный параметр `expiration_type`.| +30044|INVALID_ARGUMENT|`expiration_type` is invalid|Входной параметр `expiration_type` имеет некорректное значение.
[Список доступных значений](https://russianinvestments.github.io/investAPI/stoporders/#stoporderexpirationtype).| +30045|INVALID_ARGUMENT|Missing parameter: `ticker`|Входной параметр `ticker` является обязательным.
Укажите корректный параметр `ticker`.| +30047|INVALID_ARGUMENT|Price currency does not match the settlement currency|Валюта цены не совпадает с валютой расчётов по инструменту.
Укажите корректную валюту цены. Узнать валюту расчета конкретного инструмента можно через метод [GetInstrumentBy](https://russianinvestments.github.io/investAPI/instruments#getinstrumentby). | +30048|INVALID_ARGUMENT|Instrument type is not bond|Метод предназначен только для запроса информации по облигации.
Передайте во входные параметры метода идентификатор облигации.| +30049|INVALID_ARGUMENT|Post order error: %s|Ошибка метода выставления торгового поручения.
Смотрите подробнее в тексте ошибки.| +30050|INVALID_ARGUMENT|`instrument_status` is invalid|Входной параметр `instrument_status` имеет некорректное значение.
[Список доступных значений](https://russianinvestments.github.io/investAPI/instruments#instrumentstatus).| +30051|INVALID_ARGUMENT|Account margin status is disabled|Для данного договора недоступна маржинальная торговля.
Для выставления поручений на срочном рынке, необходимо включить маржинальную торговлю в приложении и терминале.| +30052|INVALID_ARGUMENT|Instrument forbidden for trading by API|Для данного инструмента недоступна торговля через API.
Вы можете проверить значение параметра `api_trade_available_flag` данного инструмента через метод [GetTradingStatus](https://russianinvestments.github.io/investAPI/marketdata#gettradingstatus).| +30053|INVALID_ARGUMENT|Post stop_order error: %s|Ошибка метода выставления стоп-заявки.
Смотрите подробнее в тексте ошибки.| +30054|INVALID_ARGUMENT|Instrument type is not a share or etf|Тип инструмента не инвестиционный фонд или акция| +30055|INVALID_ARGUMENT|`order_id` cannot be longer than 36 characters|`order_id` не может быть длиннее 36 символов| +30056|INVALID_ARGUMENT|Stop order settlement currency is not supported|Валюта выставления стоп-заявки не поддерживается| +30057|INVALID_ARGUMENT|The order is a duplicate, but the order report was not found|Заявка является дублем, но отчет по заявке не найден.
Проверьте параметр `order_id` (идентификатор запроса выставления поручения для целей идемпотентности.) - он должен быть уникальным.| +30058|INVALID_ARGUMENT|Task not completed yet, please try again later|Выполнение задачи еще не завершено, попробуйте позже.| +30059|INVALID_ARGUMENT|Cancel order error: %s|Ошибка метода отмены заявки.
Смотрите подробнее в тексте ошибки.| +30060|INVALID_ARGUMENT|Cancel stop-order error: %s|Ошибка метода отмены стоп-заявки.
Смотрите подробнее в тексте ошибки.| +30061|INVALID_ARGUMENT|`from` value out of range|Входной параметр `from` имеет некорректное значение.
Укажите значение в пределах от 1970-01-01T00:00:00Z до 2099-12-31T23:59:59.999999999Z включительно.| +30062|INVALID_ARGUMENT|`to` value out of range|Входной параметр `to` имеет некорректное значение.
Укажите значение в пределах от 1970-01-01T00:00:00Z до 2099-12-31T23:59:59.999999999Z включительно.| +30063|INVALID_ARGUMENT|`expire_date` value out of range|Входной параметр `expire_date` имеет некорректное значение.
Дата должна быть не ранее текущей и не позднее 2099-12-31T23:59:59.999999999Z.| +30064|INVALID_ARGUMENT|The required period should not exceed 31 days|Запрошенный период не может превышать 31 дня.
Укажите корректный период.| +30065|INVALID_ARGUMENT|Missing parameter: `task_id`|Входной параметр `task_id` является обязательным.
Укажите корректный параметр `task_id`.| +30066|INVALID_ARGUMENT|Missing parameter: `payload`|Входной параметр `payload` является обязательным.
Укажите корректный параметр `payload`.| +30067|INVALID_ARGUMENT|`action_type` is invalid|Некорректное значение `action_type`.
Выберите допустимое значение.| +30068|INVALID_ARGUMENT|Only limit order is allowed|В настоящий момент возможно выставление только лимитного торгового поручения. [Подробнее про выставление торговых поручений](https://russianinvestments.github.io/investAPI/orders_details).| +30069|INVALID_ARGUMENT|Invalid parameter: `limit`|Входной параметр `limit` имеет некорректное значение.
Значение должно быть меньше или равно 1000.| +30070|INVALID_ARGUMENT|`from` can't be more than the current date|Входной параметр `from` имеет некорректное значение.
Укажите значение не превышающее текущую дату и время.| +30077|INVALID_ARGUMENT|Not available for OTC instruments|Метод недоступен для внебиржевых инструментов.
У таких инструментов параметр `api_trade_available_flag` метода [GetTradingStatus](https://russianinvestments.github.io/investAPI/marketdata#gettradingstatus) будет иметь значение `false`.| +30078|INVALID_ARGUMENT|Incorrect minimum price increment|Некорректный шаг изменения цены.
Остаток от деления `price` на `min_price_increment` должен быть равен 0.| +30079|INVALID_ARGUMENT|Instrument is not available for trading|Инструмент недоступен для торгов. [Подробнее о торговых статусах](https://russianinvestments.github.io/investAPI/faq_trading_status).| +30080|INVALID_ARGUMENT|`quantity` must be positive|Количество лотов должно быть положительным числом.| +30081|INVALID_ARGUMENT|Account status is closed|Аккаунт закрыт.| +30082|INVALID_ARGUMENT|Account status is blocked|Аккаунт заблокирован.| +30083|INVALID_ARGUMENT|`order_type` is invalid|Некорректный тип заявки.| +30084|INVALID_ARGUMENT|Maximum request period has been exceeded|Превышен лимит запрашиваемого периода.| +30085|INVALID_ARGUMENT|Price in points is available only for futures and bonds|Тип цены в пунктах доступен только для фьючерсов и облигаций.| +30086|INVALID_ARGUMENT|Year is invalid|Некорректный год.| +30087|INVALID_ARGUMENT|Missing parameter: `query`|Входной параметр `query` является обязательным.
Укажите не пустой параметр `query`.| +30088|INVALID_ARGUMENT|`from` and `to` must have the same year|Запрашиваемые даты должны быть в рамках одного года.| +30089|INVALID_ARGUMENT|`to` must not be later than %s|Поле `to` не должно быть позднее даты, указанной в тексте ошибки.
Дата указана в формате ISO 8601.| +30090|INVALID_ARGUMENT|Missing parameter: `siebel_id`|Входной параметр `siebel_id` является обязательным.
Укажите корректный параметр `siebel_id`.| +30091|INVALID_ARGUMENT|Quantity of instruments can't be more than 100|Количество инструментов не может превышать 100.| +30092|INVALID_ARGUMENT|Trading unavailable on weekends|Торги недоступны по нерабочим дням. [Подробнее о торговых сессиях](https://russianinvestments.github.io/investAPI/markets).| +30093|INVALID_ARGUMENT|Missing parameter: `figi` or `instrument_id`|Один из параметров `figi` или `instrument_id` является обязательным.| +30094|INVALID_ARGUMENT|Options trading is not available at the moment|Выставление заявок по опционам недоступно.| +30095|INVALID_ARGUMENT|The request was not executed by the exchange|Заявка не исполнена биржей.
Лимитная заявка может не исполняться по причине недостижения установленной цены на бирже.
Рыночная же может не исполняться по причине отсутствия сделок с данными инструментов (низкая ликвидность).| +30096|INVALID_ARGUMENT|The order was rejected, try again later|Заявка отклонена, попробуйте повторить позже.| +30097|INVALID_ARGUMENT|Inappropriate trading session|Сейчас эта сессия не идёт. [Подробнее о торговых сессиях](https://russianinvestments.github.io/investAPI/markets).| +30098|INVALID_ARGUMENT|Currently there is no trading on this financial instrument|Торги по этому финансовому инструменту сейчас не проводятся.
Проверить актуальный торговый статус инструмента через метод [GetTradingStatus](https://russianinvestments.github.io/investAPI/marketdata#gettradingstatus).| +30099|INVALID_ARGUMENT|The price is outside the limits for this instrument|Цена вне лимитов по инструменту или цена сделки вне лимита. [Подробнее про выставление торговых поручений](https://russianinvestments.github.io/investAPI/orders_details).| +30100|INVALID_ARGUMENT|The price must be positive|Цена должна быть положительной.| +30101|INVALID_ARGUMENT|To trade this financial instrument, pass the test|Для торговли этим инструментом пройдите тестирование. [Подробнее про тестирование](https://www.tbank.ru/blog/articles/test-invest/).| +30102|INVALID_ARGUMENT|Required parameters Missing|Обязательные параметры указаны неправильно.| +30103|INVALID_ARGUMENT|Only best price is allowed|Для инструмента можно выставить заявки только с типом «лучшая цена».| +30104|INVALID_ARGUMENT|`price_type` is invalid|Некорректное значение `price_type`. Значением `price_type` может быть только `PRICE_TYPE_POINT` или `PRICE_TYPE_CURRENCY`.| +30105|INVALID_ARGUMENT|`exchange_order_type` is invalid|Некорректное значение `exchange_order_type`. Значением `exchange_order_type` может быть только `LIMIT` или `MARKET`.| +30106|INVALID_ARGUMENT|`status` is invalid|Некорректное значение `status`. Значением `status` может быть только `ACTIVE`, `EXCECUTED`, `CANCELED` И `EXPIRED`.| +30107|INVALID_ARGUMENT|Negative values are not allowed|Некорректное значение `limit` и/или `page`. Параметры `limit` и `page` не могут принимать отицательные значения.| +30108|INVALID_ARGUMENT|Specify a lower `limit` or `page` value because there are fewer brands|Количество брендов меньше запрашиваемых параметров.| +30109|INVALID_ARGUMENT|Maximum transaction amount has been exceeded|Превышена максимальная сумма сделки. Разделите ордер на несколько ордеров меньшего объема.| +30210|INVALID_ARGUMENT|Trailing data required|Проверьте параметры запроса стоп-заявки. Не заданы `indent` или `spread`.| +30211|INVALID_ARGUMENT|`indent type` required|Проверьте параметры запроса стоп-заявки. Не задан `indent_type`.| +30212|INVALID_ARGUMENT|`spread type` required|Проверьте параметры запроса стоп-заявки. Не задан `spread_type`.| +30213|INVALID_ARGUMENT|`indicator_type` is invalid|Проверьте параметры запроса. Некорректный `indicator_type`.| +30214|INVALID_ARGUMENT|`type_of_price` is invalid|Проверьте параметры запроса. Некорректный `type_of_price`.| +30215|INVALID_ARGUMENT|`length` is invalid|Проверьте параметры запроса. Некорректный `length`.| +30216|INVALID_ARGUMENT|`deviation_data` is invalid|Проверьте параметры запроса. Некорректный параметр `deviation_data`.| +30217|INVALID_ARGUMENT|`smoothing_data` is invalid|Проверьте параметры запроса. Некорректный параметр `smoothing_data`.| +30218|INVALID_ARGUMENT|Quantity of instruments can`t be more than 3000|Количество инструментов в списке не может быть больше 3000.| +30219|INVALID_ARGUMENT|input `candle_source_type` is invalid|Проверьте параметры запроса. Некорректный параметр `candle_source_type`.| +30221|INVALID_ARGUMENT|`order_request_id` not in UUID format|Входной параметр `order_request_id` имеет некорректное значение. Укажите параметр `order_request_id` в UUID формате. Максимальная длина — 36 символов.| +30222|INVALID_ARGUMENT|`signal_id` not in UUID format|Входной параметр `signal_id` имеет некорректное значение. Укажите параметр `signal_id` в UUID формате. Максимальная длина — 36 символов.| +30223|INVALID_ARGUMENT|`strategy_id` not in UUID format|Входной параметр `strategy_id` имеет некорректное значение. Укажите параметр `strategy_id` в UUID формате. Максимальная длина — 36 символов.| +30224|INVALID_ARGUMENT|`strategy_type` is not valid|Входной параметр `strategy_type` имеет некорректное значение.| +30225|INVALID_ARGUMENT|`active` is not valid|Входной параметр `active` имеет некорректное значение.| +30226|INVALID_ARGUMENT|Specify a lower limit or page value because there are fewer items|Количество элементов меньше запрашиваемых параметров.| +30227|INVALID_ARGUMENT|Order cancelled|Заявка с заданными параметрами не может быть исполнена и отменена Биржей или Брокером.| +35001|INVALID_ARGUMENT|Sandbox accounts limit reached|Достигнут лимит на открытие торговых счетов в песочнице. Чтобы открыть новый счёт, закройте один из существующих.| +40002|PERMISSION_DENIED|Insufficient privileges|Недостаточно прав для совершения операции.
Токен доступа имеет уровень прав read-only или у токена нет доступа к указанному счёту.
[Подробнее про виды токенов](https://russianinvestments.github.io/investAPI/index#_2)| +40003|UNAUTHENTICATED|Authentication token is missing or invalid|Токен доступа не найден или неактивен.
Новый токен можно выпустить в [личном кабинете](https://www.tbank.ru/invest/settings/).| +40004|PERMISSION_DENIED|Working with orders is not available with this account|Выставление заявок недоступно с текущего аккаунта.
Брокерский счёт не найден, не принадлежит пользователю или закрыт. Возможно, на пользователе ограничения от T-Invest API или от биржи — в этом случае обратитесь в техподдержку. | +50001|NOT_FOUND|Exchange not found|Биржа не найдена по переданному `exchange_id`.
Укажите корректный `exchange_id`.| +50002|NOT_FOUND|Instrument not found|Инструмент не найден.
Укажите корректный идентификатор инструмента.| +50004|NOT_FOUND|Account not found|Счёт по переданному `account_id` не найден.
Укажите корректный `account_id`.| +50005|NOT_FOUND|Order not found|Торговое поручение по переданному `order_id` не найдено.
Укажите корректный `order_id`.| +50006|NOT_FOUND|Stop-order not found|Стоп-заявка по переданному `stop_order_id` не найдена.
Укажите корректный `stop_order_id`.| +50007|NOT_FOUND|Task not found|Задача не найдена.| +50008|NOT_FOUND|No orderbook provider|Отсутствует источник данных по стаканам.| +50009|NOT_FOUND|Asset not found|Актив не найден.
Укажите корректный идентификатор актива.| +50011|NOT_FOUND|Strategy not found|Стратегия не найдена. Укажите корректный идентификатор стратегии.| +50012|NOT_FOUND|Signal not found|Сигнал не найден. Укажите корректный идентификатор сигнала.| +50010|NOT_FOUND|Brand not found|Бренд не найден.
Укажите корректный идентификатор бренда.| +70001|INTERNAL|Internal error|Внутренняя ошибка сервиса.
Если ошибка повторяется, обратитесь в службу технической поддержки.| +70002|INTERNAL|Internal network error|Неизвестная сетевая ошибка, попробуйте выполнить запрос позже.
Если ошибка повторяется, обратитесь в службу технической поддержки.| +70003|INTERNAL|Internal error, please try again later|Внутренняя ошибка сервиса, попробуйте выполнить запрос позже.
Если ошибка повторяется, обратитесь в службу технической поддержки.| +80001|RESOURCE_EXHAUSTED|Limit of open streams exceeded|Превышен лимит одновременных открытых stream-соединений. [Подробнее про лимитную политику](https://russianinvestments.github.io/investAPI/limits/)| +80002|RESOURCE_EXHAUSTED|Request limit exceeded|Превышен лимит запросов в минуту. [Подробнее про лимитную политику](https://russianinvestments.github.io/investAPI/limits/)| +80003|RESOURCE_EXHAUSTED|The limit on SMS sending has been exceeded, try again in a minute|Превышен лимит на отправку СМС, попробуйте через минуту. Если вы не хотите получать СМС при выставлении заявки, отключите отправку СМС в личном кабинете.| +80004|RESOURCE_EXHAUSTED|No active subscriptions|В стриме отсутствуют активные подписки.| +90001|FAILED_PRECONDITION|Need confirmation: %s|Требуется подтверждение операции.
Смотрите подробнее в тексте ошибки.| +90002|FAILED_PRECONDITION|Only for qualified investors|Торговля этим инструментом доступна только квалифицированным инвесторам.| +90003|FAILED_PRECONDITION|The price is too high|Цена заявки слишком высокая. Разбейте заявку на заявки меньшего размера. [Подробнее про ограничения на стоимость заявки](https://russianinvestments.github.io/investAPI/faq_orders/).| diff --git a/investAPI-main/src/docs/errors/api_errors.json b/investAPI-main/src/docs/errors/api_errors.json index d18966d..b053c28 100644 --- a/investAPI-main/src/docs/errors/api_errors.json +++ b/investAPI-main/src/docs/errors/api_errors.json @@ -10,459 +10,464 @@ "description": "Метод устарел и недоступен." }, "30001": { - "message": "missing parameter: 'from'", + "message": "Missing parameter: `from`", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *from* является обязательным.
Укажите корректный параметр *from*." + "description": "Входной параметр `from` является обязательным.
Укажите корректный параметр `from`." }, "30002": { - "message": "the required period should not exceed 7 days", + "message": "The required period should not exceed 7 days", "type": "INVALID_ARGUMENT", "description": "Запрошенный период не может превышать 7 дней.
Укажите корректный период." }, "30003": { - "message": "'from' can't be less than the current date", + "message": "`from` can't be less than the current date", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *from* не может быть меньше текущей даты.
Укажите корректный параметр *from*." + "description": "Входной параметр `from` не может быть меньше текущей даты.
Укажите корректный параметр `from`." }, "30004": { - "message": "missing parameter: 'to'", + "message": "Missing parameter: `to`", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *to* является обязательным.
Укажите корректный параметр *to*." + "description": "Входной параметр `to` является обязательным.
Укажите корректный параметр `to`." }, "30005": { - "message": "'id_type' is invalid", + "message": "`id_type` is invalid", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *id_type* имеет некорректное значение.
Список доступных значений: [*id_type*](https://tinkoff.github.io/investAPI/instruments#instrumentidtype)." + "description": "Входной параметр `id_type` имеет некорректное значение.
[Список доступных значений](https://russianinvestments.github.io/investAPI/instruments#instrumentidtype)." }, "30006": { - "message": "missing parameter: 'id_type'", + "message": "Missing parameter: `id_type`", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *id_type* является обязательным.
Укажите корректный параметр *id_type*." + "description": "Входной параметр `id_type` является обязательным.
Укажите корректный параметр `id_type`." }, "30007": { - "message": "missing parameter: 'id'", + "message": "Missing parameter: `id`", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *id* является обязательным.
Укажите корректный параметр *id*." + "description": "Входной параметр `id` является обязательным.
Укажите корректный параметр `id`." }, "30008": { - "message": "missing parameter: 'figi'", + "message": "Missing parameter: `figi`", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *figi* является обязательным.
Укажите корректный параметр *figi*." + "description": "Входной параметр `figi` является обязательным.
Укажите корректный параметр `figi`." }, "30009": { - "message": "'from' is invalid", + "message": "`from` is invalid", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *from* имеет некорректное значение.
Укажите корректный параметр *from*." + "description": "Входной параметр `from` имеет некорректное значение.
Укажите корректный параметр `from`." }, "30010": { - "message": "'to' is invalid", + "message": "`to` is invalid", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *to* имеет некорректное значение.
Укажите корректный параметр *to*." + "description": "Входной параметр `to` имеет некорректное значение.
Укажите корректный параметр `to`." }, "30011": { - "message": "interval is invalid", + "message": "`interval` is invalid", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *interval* имеет некорректное значение.
Список доступных значений: [*interval*](https://tinkoff.github.io/investAPI/marketdata#subscriptioninterval)." + "description": "Входной параметр `interval` имеет некорректное значение.
[Список доступных значений](https://russianinvestments.github.io/investAPI/marketdata#subscriptioninterval)." }, "30012": { - "message": "'to' can't be less than 'from'", + "message": "`to` can't be less than `from`", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *to* не может быть меньше параметра *from*.
Укажите корректные параметры *from* и *to*." + "description": "Входной параметр `to` не может быть меньше параметра `from`.
Укажите корректные параметры `from` и `to`." }, "30013": { - "message": "'class_code' require for 'id_type' = 'ticker'", + "message": "`class_code` require for `id_type` = `ticker`", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *class_code* не может быть пустым при поиске по тикеру.
Укажите корректный параметр *class_code*.
Подробнее: [Идентификация инструментов](https://tinkoff.github.io/investAPI/faq_identification/)." + "description": "Входной параметр `class_code` не может быть пустым при поиске по тикеру.
Укажите корректный параметр `class_code`.
[Подробнее](https://russianinvestments.github.io/investAPI/faq_identification/)." }, "30014": { - "message": "the maximum request period for the given candle interval has been exceeded", + "message": "The maximum request period for the given candle interval has been exceeded", "type": "INVALID_ARGUMENT", - "description": "Превышен максимальный период запроса для данного интервала свечи.
Укажите корректный интервал.
Подробнее: [Интервалы свечей и доступные периоды](https://tinkoff.github.io/investAPI/load_history/)." + "description": "Превышен максимальный период запроса для данного интервала свечи.
Укажите корректный интервал.
[Подробнее](https://russianinvestments.github.io/investAPI/load_history/)." }, "30015": { - "message": "parameter 'quantity' is missing or equal to 0", + "message": "Parameter `quantity` is missing or equal to 0", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *quantity* является обязательным.
Укажите корректный параметр *quantity*." + "description": "Входной параметр `quantity` является обязательным.
Укажите корректный параметр `quantity`." }, "30016": { - "message": "'quantity' is invalid", + "message": "`quantity` is invalid", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *quantity* имеет некорректное значение.
Укажите корректный параметр *quantity*." + "description": "Входной параметр `quantity` имеет некорректное значение.
Укажите корректный параметр `quantity`." }, "30017": { - "message": "missing parameter: 'price'", + "message": "Missing parameter: `price`", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *price* является обязательным.
Укажите корректный параметр *price*.
Значение параметра *price* должно быть положительным.
units и nanos не могут иметь разные знак и модуль nanos должен быть < 999 999 999" + "description": "Входной параметр `price` является обязательным.
Укажите корректный параметр `price`.
Значение параметра `price` должно быть положительным.
`units` и `nanos` не могут иметь разные знак и модуль `nanos` должен быть < 999 999 999" }, "30018": { - "message": "price is invalid", + "message": "`price` is invalid", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *price* имеет некорректное значение.
Укажите корректный параметр *price*." + "description": "Входной параметр `price` имеет некорректное значение.
Укажите корректный параметр `price`." }, "30019": { - "message": "missing parameter: 'direction'", + "message": "Missing parameter: `direction`", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *direction* является обязательным.
Укажите корректный параметр *direction*." + "description": "Входной параметр `direction` является обязательным.
Укажите корректный параметр `direction`." }, "30020": { - "message": "'direction' is invalid", + "message": "`direction` is invalid", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *direction* имеет некорректное значение." + "description": "Входной параметр `direction` имеет некорректное значение." }, "30021": { - "message": "missing parameter: 'account_id'", + "message": "Missing parameter: `account_id`", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *account_id* является обязательным.
Укажите корректный параметр *account_id*." + "description": "Входной параметр `account_id` является обязательным.
Укажите корректный параметр `account_id`." }, "30022": { - "message": "missing parameter: 'state'", + "message": "`account_id` is invalid", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *state* является обязательным.
Укажите корректный параметр *state*.
Список доступных значений: [*direction*](https://tinkoff.github.io/investAPI/operations/#operationstate)." + "description": "Входной параметр `account_id` имеет некорректное значение." }, "30023": { - "message": "invalid parameter: 'state'", + "message": "Invalid parameter: `state`", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *state* имеет некорректное значение.
Укажите корректный параметр *state*.
Список доступных значений: [*direction*](https://tinkoff.github.io/investAPI/operations/#operationstate)." + "description": "Входной параметр `state` имеет некорректное значение.
Укажите корректный параметр `state`.
[Список доступных значений](https://russianinvestments.github.io/investAPI/operations/#operationstate)." }, "30025": { - "message": "missing parameter: 'order_type'", + "message": "Missing parameter: `order_type`", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *order_type* является обязательным.
Укажите корректный параметр *order_type*. Список доступных значений: [*order_type*](https://tinkoff.github.io/investAPI/orders/#ordertype)." + "description": "Входной параметр `order_type` является обязательным.
Укажите корректный параметр `order_type`. [Список доступных значений](https://russianinvestments.github.io/investAPI/orders/#ordertype)." }, "30026": { - "message": "invalid parameter: 'order_type'", + "message": "Invalid parameter: `order_type`", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *order_type* имеет некорректное значение.
Укажите корректный параметр *order_type*." + "description": "Входной параметр `order_type` имеет некорректное значение.
Укажите корректный параметр `order_type`." }, "30027": { - "message": "missing parameter: 'order_id'", + "message": "Missing parameter: `order_id`", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *order_id* является обязательным.
Укажите корректный параметр *order_id*." + "description": "Входной параметр `order_id` является обязательным.
Укажите корректный параметр `order_id`." }, "30028": { - "message": "'order id' is invalid UUID format.", + "message": "`order id` has invalid UUID format", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *order_id* имеет некорректное значение.
Укажите корректный параметр *order_id* формата UUID. Максимальная длина 36 символов." + "description": "Входной параметр `order_id` имеет некорректное значение.
Укажите корректный параметр `order_id` формата UUID. Максимальная длина 36 символов." }, "30029": { - "message": "missing parameter: 'idempotency_key'", + "message": "Missing parameter: `idempotency_key`", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *idempotency_key* является обязательным.
Укажите корректный параметр *idempotency_key*." + "description": "Входной параметр `idempotency_key` является обязательным.
Укажите корректный параметр `idempotency_key`." }, "30030": { - "message": "'idempotency_key' is invalid", + "message": "`idempotency_key` is invalid", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *idempotency_key* имеет некорректное значение.
Укажите корректный параметр *idempotency_key*. Максимальная длина 36 символов." + "description": "Входной параметр `idempotency_key` имеет некорректное значение.
Укажите корректный параметр `idempotency_key`. Максимальная длина 36 символов." }, "30031": { - "message": "missing parameter: 'depth'", + "message": "Missing parameter: `depth`", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *depth* является обязательным.
Укажите корректный параметр *depth*." + "description": "Входной параметр `depth` является обязательным.
Укажите корректный параметр `depth`." }, "30032": { - "message": "depth is invalid", + "message": "`depth` is invalid", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *depth* имеет некорректное значение.
Укажите корректный параметр *depth*." + "description": "Входной параметр `depth` имеет некорректное значение.
Укажите корректный параметр `depth`." }, "30033": { - "message": "missing parameter: 'trade_clearing_account' or 'class_code'", + "message": "Missing parameter: `trade_clearing_account` or `class_code`", "type": "INVALID_ARGUMENT", - "description": "Параметр *trade_clearing_account* или *class_code* не может быть пустым." + "description": "Параметр `trade_clearing_account` или `class_code` не может быть пустым." }, "30034": { - "message": "not enough balance", + "message": "Not enough balance", "type": "INVALID_ARGUMENT", - "description": "Недостаточно средств для совершения сделки (ошибка песочницы).
Пополните баланс нужной валюты c помощью метода [*SandboxPayIn*](https://tinkoff.github.io/investAPI/sandbox#sandboxpayin)." + "description": "Недостаточно средств для совершения сделки (ошибка песочницы).
Пополните баланс нужной валюты через метод [SandboxPayIn](https://russianinvestments.github.io/investAPI/sandbox#sandboxpayin)." }, "30036": { - "message": "missing parameter: 'stop_price'", + "message": "Missing parameter: `stop_price`", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *stop_price* является обязательным.
Укажите корректный параметр *stop_price*." + "description": "Входной параметр `stop_price` является обязательным.
Укажите корректный параметр `stop_price`." }, "30037": { - "message": "missing parameter: 'stop_order_type'", + "message": "Missing parameter: `stop_order_type`", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *stop_order_type* является обязательным.
Укажите корректный параметр *stop_order_type*." + "description": "Входной параметр `stop_order_type` является обязательным.
Укажите корректный параметр `stop_order_typ`." }, "30038": { - "message": "'stop_order_type' is invalid", + "message": "`stop_order_type` is invalid", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *stop_order_type* имеет некорректное значение.
Список доступных значений: [*stop_order_type*](https://tinkoff.github.io/investAPI/stoporders/#stopordertype)." + "description": "Входной параметр `stop_order_type` имеет некорректное значение.
[Список доступных значений](https://russianinvestments.github.io/investAPI/stoporders/#stopordertype)." + }, + "30039": { + "message": "Bad request: `trailing_data`", + "type": "INVALID_ARGUMENT", + "description": "Укажите корректное значение параметра `trailing_data`" }, "30040": { - "message": "'expire_date' is invalid", + "message": "`expire_date` is invalid", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *expire_date* имеет некорректное значение.
Укажите корректный параметр *expire_date*." + "description": "Входной параметр `expire_date` имеет некорректное значение.
Укажите корректный параметр `expire_date`." }, "30041": { - "message": "the method is available only for futures", + "message": "The method is available only for futures", "type": "INVALID_ARGUMENT", "description": "Метод предназначен только для работы с фьючерсами.
Передайте во входные параметры метода идентификатор фьючерса." }, "30042": { - "message": "not enough assets for a margin trade", + "message": "Not enough assets for a margin trade", "type": "INVALID_ARGUMENT", - "description": "Недостаточно активов для маржинальной сделки.
Проверьте маржинальные показатели счёта. Вы можете сделать это с помощью метода [*GetMarginAttributes*](https://tinkoff.github.io/investAPI/users#getmarginattributes)." + "description": "Недостаточно активов для маржинальной сделки.
Проверьте маржинальные показатели счёта — это можно сделать через метод [GetMarginAttributes](https://russianinvestments.github.io/investAPI/users#getmarginattributes)." }, "30043": { - "message": "missing parameter: 'expiration_type'", + "message": "Missing parameter: `expiration_type`", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *expiration_type* является обязательным.
Укажите корректный параметр *expiration_type*." + "description": "Входной параметр `expiration_type` является обязательным.
Укажите корректный параметр `expiration_type`." }, "30044": { - "message": "'expiration_type' is invalid", + "message": "`expiration_type` is invalid", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *expiration_type* имеет некорректное значение.
Список доступных значений: [*expiration_type*](https://tinkoff.github.io/investAPI/stoporders/#stoporderexpirationtype)." + "description": "Входной параметр `expiration_type` имеет некорректное значение.
[Список доступных значений](https://russianinvestments.github.io/investAPI/stoporders/#stoporderexpirationtype)." }, "30045": { - "message": "missing parameter: 'ticker'", + "message": "Missing parameter: `ticker`", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *ticker* является обязательным.
Укажите корректный параметр *ticker*." + "description": "Входной параметр `ticker` является обязательным.
Укажите корректный параметр `ticker`." }, "30047": { - "message": "price currency does not match the settlement currency", + "message": "Price currency does not match the settlement currency", "type": "INVALID_ARGUMENT", - "description": "Валюта цены не совпадает с валютой расчётов по инструменту.
Укажите корректную валюту цены. Узнать валюту расчета конкретного инструмента вы можете с помощью метода [*GetInstrumentBy*](https://tinkoff.github.io/investAPI/instruments#getinstrumentby). " + "description": "Валюта цены не совпадает с валютой расчётов по инструменту.
Укажите корректную валюту цены. Узнать валюту расчета конкретного инструмента можно через метод [GetInstrumentBy](https://russianinvestments.github.io/investAPI/instruments#getinstrumentby). " }, "30048": { - "message": "instrument type is not bond", + "message": "Instrument type is not bond", "type": "INVALID_ARGUMENT", "description": "Метод предназначен только для запроса информации по облигации.
Передайте во входные параметры метода идентификатор облигации." }, "30049": { - "message": "post order error: %s", + "message": "Post order error: %s", "type": "INVALID_ARGUMENT", - "description": "Ошибка метода выставления торгового поручения.
Подробнее в тексте ошибки." + "description": "Ошибка метода выставления торгового поручения.
Смотрите подробнее в тексте ошибки." }, "30050": { - "message": "'instrument_status' is invalid", + "message": "`instrument_status` is invalid", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *instrument_status* имеет некорректное значение.
Список доступных значений: [*instrument_status*](https://tinkoff.github.io/investAPI/instruments#instrumentstatus)." + "description": "Входной параметр `instrument_status` имеет некорректное значение.
[Список доступных значений](https://russianinvestments.github.io/investAPI/instruments#instrumentstatus)." }, "30051": { - "message": "account margin status is disabled", + "message": "Account margin status is disabled", "type": "INVALID_ARGUMENT", "description": "Для данного договора недоступна маржинальная торговля.
Для выставления поручений на срочном рынке, необходимо включить маржинальную торговлю в приложении и терминале." }, "30052": { - "message": "instrument forbidden for trading by API", + "message": "Instrument forbidden for trading by API", "type": "INVALID_ARGUMENT", - "description": "Для данного инструмента недоступна торговля через API.
Вы можете проверить значение параметра api_trade_available_flag данного инструмента c помощью метода [*GetTradingStatus*](https://tinkoff.github.io/investAPI/marketdata#gettradingstatus)." + "description": "Для данного инструмента недоступна торговля через API.
Вы можете проверить значение параметра `api_trade_available_flag` данного инструмента через метод [GetTradingStatus](https://russianinvestments.github.io/investAPI/marketdata#gettradingstatus)." }, "30053": { - "message": "post stop_order error: %s", + "message": "Post stop_order error: %s", "type": "INVALID_ARGUMENT", - "description": "Ошибка метода выставления стоп-заявки.
Подробнее в тексте ошибки." + "description": "Ошибка метода выставления стоп-заявки.
Смотрите подробнее в тексте ошибки." }, "30054": { - "message": "instrument type is not a share or etf", + "message": "Instrument type is not a share or etf", "type": "INVALID_ARGUMENT", "description": "Тип инструмента не инвестиционный фонд или акция" }, "30055": { - "message": "order_id cannot be longer than 36 characters", + "message": "`order_id` cannot be longer than 36 characters", "type": "INVALID_ARGUMENT", - "description": "order_id не может быть длиннее 36 символов" + "description": "`order_id` не может быть длиннее 36 символов" }, "30056": { - "message": "stop order settlement currency is not supported", + "message": "Stop order settlement currency is not supported", "type": "INVALID_ARGUMENT", "description": "Валюта выставления стоп-заявки не поддерживается" }, "30057": { - "message": "the order is a duplicate, but the order report was not found", + "message": "The order is a duplicate, but the order report was not found", "type": "INVALID_ARGUMENT", - "description": "Заявка является дублем, но отчет по заявке не найден.
Проверьте параметр order_id (идентификатор запроса выставления поручения для целей идемпотентности.) - он должен быть уникальным." + "description": "Заявка является дублем, но отчет по заявке не найден.
Проверьте параметр `order_id` (идентификатор запроса выставления поручения для целей идемпотентности.) - он должен быть уникальным." }, "30058": { - "message": "task not completed yet, please try again later", + "message": "Task not completed yet, please try again later", "type": "INVALID_ARGUMENT", "description": "Выполнение задачи еще не завершено, попробуйте позже." }, "30059": { - "message": "cancel order error: %s", + "message": "Cancel order error: %s", "type": "INVALID_ARGUMENT", - "description": "Ошибка метода отмены заявки.
Подробнее в тексте ошибки." + "description": "Ошибка метода отмены заявки.
Смотрите подробнее в тексте ошибки." }, "30060": { - "message": "cancel stop-order error: %s", + "message": "Cancel stop-order error: %s", "type": "INVALID_ARGUMENT", - "description": "Ошибка метода отмены стоп-заявки.
Подробнее в тексте ошибки." + "description": "Ошибка метода отмены стоп-заявки.
Смотрите подробнее в тексте ошибки." }, "30061": { - "message": "'from' value out of range", + "message": "`from` value out of range", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *from* имеет некорректное значение.
Укажите значение в пределах от 1970-01-01T00:00:00Z до 2099-12-31T23:59:59.999999999Z включительно." + "description": "Входной параметр `from` имеет некорректное значение.
Укажите значение в пределах от 1970-01-01T00:00:00Z до 2099-12-31T23:59:59.999999999Z включительно." }, "30062": { - "message": "'to' value out of range", + "message": "`to` value out of range", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *to* имеет некорректное значение.
Укажите значение в пределах от 1970-01-01T00:00:00Z до 2099-12-31T23:59:59.999999999Z включительно." + "description": "Входной параметр `to` имеет некорректное значение.
Укажите значение в пределах от 1970-01-01T00:00:00Z до 2099-12-31T23:59:59.999999999Z включительно." }, "30063": { - "message": "'expire_date' value out of range", + "message": "`expire_date` value out of range", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *expire_date* имеет некорректное значение.
Дата должна быть не ранее текущей и не позднее 2099-12-31T23:59:59.999999999Z." + "description": "Входной параметр `expire_date` имеет некорректное значение.
Дата должна быть не ранее текущей и не позднее 2099-12-31T23:59:59.999999999Z." }, "30064": { - "message": "the required period should not exceed 31 days", + "message": "The required period should not exceed 31 days", "type": "INVALID_ARGUMENT", "description": "Запрошенный период не может превышать 31 дня.
Укажите корректный период." }, "30065": { - "message": "missing parameter: 'task_id'", + "message": "Missing parameter: `task_id`", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *task_id* является обязательным.
Укажите корректный параметр *task_id*." + "description": "Входной параметр `task_id` является обязательным.
Укажите корректный параметр `task_id`." }, "30066": { - "message": "missing parameter: 'payload'", + "message": "Missing parameter: `payload`", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *payload* является обязательным.
Укажите корректный параметр *payload*." + "description": "Входной параметр `payload` является обязательным.
Укажите корректный параметр `payload`." }, "30067": { - "message": "'action_type' is invalid", + "message": "`action_type` is invalid", "type": "INVALID_ARGUMENT", - "description": "Некорректное значение *action_type*.
Выберите допустимое значение." + "description": "Некорректное значение `action_type`.
Выберите допустимое значение." }, "30068": { "message": "Only limit order is allowed", "type": "INVALID_ARGUMENT", - "description": "В настоящий момент возможно выставление только лимитного торгового поручения. Подробнее про [выставление торговых поручений](https://tinkoff.github.io/investAPI/orders_details)." + "description": "В настоящий момент возможно выставление только лимитного торгового поручения. [Подробнее про выставление торговых поручений](https://russianinvestments.github.io/investAPI/orders_details)." }, "30069": { - "message": "Invalid parameter: 'limit'", + "message": "Invalid parameter: `limit`", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *limit* имеет некорректное значение.
Значение должно быть меньше или равно 1000." + "description": "Входной параметр `limit` имеет некорректное значение.
Значение должно быть меньше или равно 1000." }, "30070": { - "message": "'from' can't be more than the current date", + "message": "`from` can't be more than the current date", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *from* имеет некорректное значение.
Укажите значение не превышающее текущую дату и время." + "description": "Входной параметр `from` имеет некорректное значение.
Укажите значение не превышающее текущую дату и время." }, "30077": { - "message": "not available for OTC instruments", + "message": "Not available for OTC instruments", "type": "INVALID_ARGUMENT", - "description": "Метод недоступен для внебиржевых инструментов.
У таких инструментов параметр api_trade_available_flag метода [*GetTradingStatus*](https://tinkoff.github.io/investAPI/marketdata#gettradingstatus) будет иметь значение false." + "description": "Метод недоступен для внебиржевых инструментов.
У таких инструментов параметр `api_trade_available_flag` метода [GetTradingStatus](https://russianinvestments.github.io/investAPI/marketdata#gettradingstatus) будет иметь значение `false`." }, "30078": { "message": "Incorrect minimum price increment", "type": "INVALID_ARGUMENT", - "description": "Некорректный шаг изменения цены.
Остаток от деления price на min_price_increment должен быть равен 0." + "description": "Некорректный шаг изменения цены.
Остаток от деления `price` на `min_price_increment` должен быть равен 0." }, "30079": { - "message": "instrument is not available for trading", + "message": "Instrument is not available for trading", "type": "INVALID_ARGUMENT", - "description": "Инструмент недоступен для торгов. Подробнее о [торговых статусах](https://tinkoff.github.io/investAPI/faq_trading_status)." + "description": "Инструмент недоступен для торгов. [Подробнее о торговых статусах](https://russianinvestments.github.io/investAPI/faq_trading_status)." }, "30080": { - "message": "quantity must be positive", + "message": "`quantity` must be positive", "type": "INVALID_ARGUMENT", "description": "Количество лотов должно быть положительным числом." }, "30081": { - "message": "account status is closed", + "message": "Account status is closed", "type": "INVALID_ARGUMENT", "description": "Аккаунт закрыт." }, "30082": { - "message": "account status is blocked", + "message": "Account status is blocked", "type": "INVALID_ARGUMENT", "description": "Аккаунт заблокирован." }, "30083": { - "message": "order_type is invalid", + "message": "`order_type` is invalid", "type": "INVALID_ARGUMENT", "description": "Некорректный тип заявки." }, "30084": { - "message": "maximum request period has been exceeded", + "message": "Maximum request period has been exceeded", "type": "INVALID_ARGUMENT", "description": "Превышен лимит запрашиваемого периода." }, "30085": { - "message": "price in points is available only for futures and bonds", + "message": "Price in points is available only for futures and bonds", "type": "INVALID_ARGUMENT", "description": "Тип цены в пунктах доступен только для фьючерсов и облигаций." }, "30086": { - "message": "year is invalid", + "message": "Year is invalid", "type": "INVALID_ARGUMENT", "description": "Некорректный год." }, "30087": { - "message": "missing parameter: query", + "message": "Missing parameter: `query`", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *query* является обязательным.
Укажите не пустой параметр *query*." + "description": "Входной параметр `query` является обязательным.
Укажите не пустой параметр `query`." }, "30088": { - "message": "'from' and 'to' must have the same year", + "message": "`from` and `to` must have the same year", "type": "INVALID_ARGUMENT", "description": "Запрашиваемые даты должны быть в рамках одного года." }, "30089": { - "message": "'to' must not be later than %s", + "message": "`to` must not be later than %s", "type": "INVALID_ARGUMENT", - "description": "Поле to не должно быть позднее даты, указанной в тексте ошибки.
Дата указана в формате ISO 8601." + "description": "Поле `to` не должно быть позднее даты, указанной в тексте ошибки.
Дата указана в формате ISO 8601." }, "30090": { - "message": "missing parameter: 'siebel_id'", + "message": "Missing parameter: `siebel_id`", "type": "INVALID_ARGUMENT", - "description": "Входной параметр *siebel_id* является обязательным.
Укажите корректный параметр *siebel_id*." + "description": "Входной параметр `siebel_id` является обязательным.
Укажите корректный параметр `siebel_id`." }, "30091": { - "message": "quantity of instruments can't be more than 100", + "message": "Quantity of instruments can't be more than 100", "type": "INVALID_ARGUMENT", "description": "Количество инструментов не может превышать 100." }, "30092": { - "message": "trading unavailable on weekends", + "message": "Trading unavailable on weekends", "type": "INVALID_ARGUMENT", - "description": "Торги недоступны по нерабочим дням. Больше о [торговых сессиях](https://tinkoff.github.io/investAPI/markets)." + "description": "Торги недоступны по нерабочим дням. [Подробнее о торговых сессиях](https://russianinvestments.github.io/investAPI/markets)." }, "30093": { - "message": "missing parameter: 'figi' or 'instrument_id'", + "message": "Missing parameter: `figi` or `instrument_id`", "type": "INVALID_ARGUMENT", - "description": "Один из параметров *figi* или *instrument_id* является обязательным." + "description": "Один из параметров `figi` или `instrument_id` является обязательным." }, "30094": { - "message": "options trading is not available at the moment", + "message": "Options trading is not available at the moment", "type": "INVALID_ARGUMENT", "description": "Выставление заявок по опционам недоступно." }, "30095": { - "message": "the request was not executed by the exchange", + "message": "The request was not executed by the exchange", "type": "INVALID_ARGUMENT", "description": "Заявка не исполнена биржей.
Лимитная заявка может не исполняться по причине недостижения установленной цены на бирже.
Рыночная же может не исполняться по причине отсутствия сделок с данными инструментов (низкая ликвидность)." }, "30096": { - "message": "the order was rejected, try again later", + "message": "The order was rejected, try again later", "type": "INVALID_ARGUMENT", "description": "Заявка отклонена, попробуйте повторить позже." }, "30097": { - "message": "inappropriate trading session", + "message": "Inappropriate trading session", "type": "INVALID_ARGUMENT", - "description": "Сейчас эта сессия не идёт. Больше о [торговых сессиях](https://tinkoff.github.io/investAPI/markets)." + "description": "Сейчас эта сессия не идёт. [Подробнее о торговых сессиях](https://russianinvestments.github.io/investAPI/markets)." }, "30098": { - "message": "currently, there is no trading on this financial instrument", + "message": "Currently there is no trading on this financial instrument", "type": "INVALID_ARGUMENT", - "description": "Торги по этому финансовому инструменту сейчас не проводятся.
Вы можете проверить актуальный торговый статус инструмента с помощью метода [*GetTradingStatus*](https://tinkoff.github.io/investAPI/marketdata#gettradingstatus)." + "description": "Торги по этому финансовому инструменту сейчас не проводятся.
Проверить актуальный торговый статус инструмента через метод [GetTradingStatus](https://russianinvestments.github.io/investAPI/marketdata#gettradingstatus)." }, "30099": { - "message": "the price is outside the limits for this instrument", + "message": "The price is outside the limits for this instrument", "type": "INVALID_ARGUMENT", - "description": "Цена вне лимитов по инструменту или цена сделки вне лимита. Подробнее про [выставление торговых поручений](https://tinkoff.github.io/investAPI/orders_details)." + "description": "Цена вне лимитов по инструменту или цена сделки вне лимита. [Подробнее про выставление торговых поручений](https://russianinvestments.github.io/investAPI/orders_details)." }, "30100": { - "message": "the price must be positive", + "message": "The price must be positive", "type": "INVALID_ARGUMENT", "description": "Цена должна быть положительной." }, "30101": { - "message": "to trade this financial instrument, pass the test", + "message": "Pass the test to trade this financial instrument", "type": "INVALID_ARGUMENT", - "description": "Для торговли этим инструментом пройдите тестирование. О том, как сдать тестирование и кому оно нужно читайте [тут](https://www.tinkoff.ru/blog/articles/test-invest/)." + "description": "Для торговли этим инструментом пройдите тестирование. [Подробнее про тестирование](https://www.tbank.ru/blog/articles/test-invest/)." }, "30102": { "message": "Required parameters missing", @@ -472,137 +477,257 @@ "30103": { "message": "Only best price is allowed", "type": "INVALID_ARGUMENT", - "description": "Для инструмента доступно выставление заявки только типа лучшая цена" + "description": "Для инструмента доступно выставить заявки только с типом «лучшая цена»." }, "30104": { - "message": "price_type is invalid", + "message": "`price_type` is invalid", "type": "INVALID_ARGUMENT", - "description": "Некорректное значение *price_type*. Значением *price_type* может быть только **PRICE_TYPE_POINT** ИЛИ **PRICE_TYPE_CURRENCY**." + "description": "Некорректное значение `price_type`. Значением `price_type` может быть только `PRICE_TYPE_POINT` или `PRICE_TYPE_CURRENCY`." }, "30105": { - "message": "exchange_order_type is invalid", + "message": "`exchange_order_type` is invalid", "type": "INVALID_ARGUMENT", - "description": "Некорректное значение *exchange_order_type*. Значением *exchange_order_type* может быть только **LIMIT** ИЛИ **MARKET**." + "description": "Некорректное значение `exchange_order_type`. Значением `exchange_order_type` может быть только `LIMIT` или `MARKET`." }, "30106": { - "message": "status is invalid", + "message": "`status` is invalid", "type": "INVALID_ARGUMENT", - "description": "Некорректное значение *status*. Значением *status* может быть только **ACTIVE**, **EXCECUTED**, **CANCELED** И **EXPIRED**." + "description": "Некорректное значение `status`. Значением `status` может быть только `ACTIVE`, `EXCECUTED`, `CANCELED` И `EXPIRED`." }, "30107": { - "message": "negative values are not allowed", + "message": "Negative values are not allowed", "type": "INVALID_ARGUMENT", - "description": "Некорректное значение *limit* и/или *page*. Параметры *limit* и *page* не могут принимать отицательные значения." + "description": "Некорректное значение `limit` и/или `page`. Параметры `limit` и `page` не могут принимать отицательные значения." }, "30108": { - "message": "specify a lower limit or page value because there are fewer brands", + "message": "Specify a lower `limit` or `page` value because there are fewer brands", "type": "INVALID_ARGUMENT", "description": "Количество брендов меньше запрашиваемых параметров." }, + "30109": { + "message": "Maximum transaction amount has been exceeded", + "type": "INVALID_ARGUMENT", + "description": "Превышена максимальная сумма сделки. Разделите ордер на несколько ордеров меньшего объема." + }, + "30210": { + "message": "Trailing data required", + "type": "INVALID_ARGUMENT", + "description": "Проверьте параметры запроса стоп-заявки. Не заданы `indent` или `spread`." + }, + "30211": { + "message": "`indent type` required", + "type": "INVALID_ARGUMENT", + "description": "Проверьте параметры запроса стоп-заявки. Не задан `indent_type`." + }, + "30212": { + "message": "`spread type` required", + "type": "INVALID_ARGUMENT", + "description": "Проверьте параметры запроса стоп-заявки. Не задан `spread_type`." + }, + "30213": { + "message": "`indicator_type` is invalid", + "type": "INVALID_ARGUMENT", + "description": "Проверьте параметры запроса. Некорректный `indicator_type`." + }, + "30214": { + "message": "`type_of_price` is invalid", + "type": "INVALID_ARGUMENT", + "description": "Проверьте параметры запроса. Некорректный `type_of_price`." + }, + "30215": { + "message": "`length` is invalid", + "type": "INVALID_ARGUMENT", + "description": "Проверьте параметры запроса. Некорректный `length`." + }, + "30216": { + "message": "`deviation_data` is invalid", + "type": "INVALID_ARGUMENT", + "description": "Проверьте параметры запроса. Некорректный параметр `deviation_data`." + }, + "30217": { + "message": "`smoothing_data` is invalid", + "type": "INVALID_ARGUMENT", + "description": "Проверьте параметры запроса. Некорректный параметр `smoothing_data`." + }, + "30218": { + "message": "Quantity of instruments can't be more than 3000", + "type": "INVALID_ARGUMENT", + "description": "Количество инструментов в списке не может быть больше 3000." + }, + "30219": { + "message": "`candle_source_type` is invalid", + "type": "INVALID_ARGUMENT", + "description": "Проверьте параметры запроса. Некорректный параметр `candle_source_type`." + }, + "30221": { + "message": "`order_request_id` not in UUID format", + "type": "INVALID_ARGUMENT", + "description": "Входной параметр `order_request_id` имеет некорректное значение. Укажите параметр `order_request_id` в UUID формате. Максимальная длина — 36 символов." + }, + "30222": { + "message": "`signal_id` not in UUID format", + "type": "INVALID_ARGUMENT", + "description": "Входной параметр `signal_id` имеет некорректное значение. Укажите параметр `signal_id` в UUID формате. Максимальная длина — 36 символов." + }, + "30223": { + "message": "`strategy_id` not in UUID format", + "type": "INVALID_ARGUMENT", + "description": "Входной параметр `strategy_id` имеет некорректное значение. Укажите параметр `strategy_id` в UUID формате. Максимальная длина — 36 символов." + }, + "30224": { + "message": "`strategy_type` is not valid", + "type": "INVALID_ARGUMENT", + "description": "Входной параметр `strategy_type` имеет некорректное значение." + }, + "30225": { + "message": "`active` is not valid", + "type": "INVALID_ARGUMENT", + "description": "Входной параметр `active` имеет некорректное значение." + }, + "30226": { + "message": "Specify a lower limit or page value because there are fewer items", + "type": "INVALID_ARGUMENT", + "description": "Количество элементов меньше запрашиваемых параметров." + }, + "30227": { + "message": "Order cancelled", + "type": "INVALID_ARGUMENT", + "description": "Заявка с заданными параметрами не может быть исполнена и отменена Биржей или Брокером." + }, + "30228": { + "message": "`from` or `limit` have to be specified", + "type": "INVALID_ARGUMENT", + "description": "Необходимо указать один из параметров `from` или `limit`" + }, + "30229": { + "message": "Price in points not available", + "type": "INVALID_ARGUMENT", + "description": "Конвертация цены фьючерса в данный момент не доступна. Возможно фьючерс истек или отсутствуют данные для расчета" + }, + "35001": { + "message": "Sandbox accounts limit reached", + "type": "INVALID_ARGUMENT", + "description": "Достигнут лимит на открытие торговых счетов в песочнице. Чтобы открыть новый счет необходимо закрыть один из существующих." + }, "40002": { - "message": "insufficient privileges", + "message": "Insufficient privileges", "type": "PERMISSION_DENIED", - "description": "Недостаточно прав для совершения операции.
Токен доступа имеет уровень прав read-only, либо у токена нет доступа к указанному счету.
Подробнее: [Виды токенов](https://tinkoff.github.io/investAPI/index#_2)" + "description": "Недостаточно прав для совершения операции.
Токен доступа имеет уровень прав read-only, либо у токена нет доступа к указанному счету.
[Подробнее про виды токенов](https://russianinvestments.github.io/investAPI/index#_2)." }, "40003": { - "message": "authentication token is missing or invalid", + "message": "Authentication token is missing or invalid", "type": "UNAUTHENTICATED", - "description": "Токен доступа не найден или не активен.
Вы можете выпустить новый токен по ссылке [Настройки](https://www.tinkoff.ru/invest/settings/)" + "description": "Токен доступа не найден или не активен.
Новый токен можно выпустить в [личном кабинете](https://www.tbank.ru/invest/settings/)." }, "40004": { "message": "Working with orders is not available with this account", "type": "PERMISSION_DENIED", - "description": "Выставление заявок недоступно с текущего аккаунта.
Брокерский счет не найден, не принадлежит пользователю или закрыт, либо на пользователе ограничения (от Tinkoff Invest API или от биржи). В этом случае нужно обратиться в техподдержку. " + "description": "Выставление заявок недоступно с текущего аккаунта.
Брокерский счет не найден, не принадлежит пользователю или закрыт. Возможно, на пользователе ограничения от T-Invest API или от биржи — в этом случае обратитесь в техподдержку." }, "50001": { - "message": "exchange not found", + "message": "Exchange not found", "type": "NOT_FOUND", - "description": "Биржа не найдена по переданному *exchange_id*.
Укажите корректный *exchange_id*." + "description": "Биржа не найдена по переданному `exchange_id`.
Укажите корректный `exchange_id`." }, "50002": { - "message": "instrument not found", + "message": "Instrument not found", "type": "NOT_FOUND", "description": "Инструмент не найден.
Укажите корректный идентификатор инструмента." }, "50004": { - "message": "account not found", + "message": "Account not found", "type": "NOT_FOUND", - "description": "Счёт не найден по переданному *account_id*.
Укажите корректный *account_id*." + "description": "Счёт по переданному `account_id` не найден.
Укажите корректный `account_id`." }, "50005": { - "message": "order not found", + "message": "Order not found", "type": "NOT_FOUND", - "description": "Торговое поручение не найдено по переданному *order_id*.
Укажите корректный *order_id*." + "description": "Торговое поручение по переданному `order_id` не найдено.
Укажите корректный `order_id`." }, "50006": { - "message": "stop-order not found", + "message": "Stop-order not found", "type": "NOT_FOUND", - "description": "Стоп-заявка не найдена по переданному *stop_order_id*.
Укажите корректный *stop_order_id*." + "description": "Стоп-заявка по переданному `stop_order_id` не найдена.
Укажите корректный `stop_order_id`." }, "50007": { - "message": "task not found", + "message": "Task not found", "type": "NOT_FOUND", "description": "Задача не найдена." }, "50008": { - "message": "no orderbook provider", + "message": "No orderbook provider", "type": "NOT_FOUND", "description": "Отсутствует источник данных по стаканам." }, "50009": { - "message": "asset not found", + "message": "Asset not found", "type": "NOT_FOUND", "description": "Актив не найден.
Укажите корректный идентификатор актива." }, "50010": { - "message": "brand not found", + "message": "Brand not found", "type": "NOT_FOUND", "description": "Бренд не найден.
Укажите корректный идентификатор бренда." }, + "50011": { + "message": "Strategy not found", + "type": "NOT_FOUND", + "description": "Стратегия не найдена. Укажите корректный идентификатор стратегии." + }, + "50012": { + "message": "Signal not found", + "type": "NOT_FOUND", + "description": "Сигнал не найден. Укажите корректный идентификатор сигнала." + }, "70001": { - "message": "internal error", + "message": "Internal error", "type": "INTERNAL", "description": "Внутренняя ошибка сервиса.
Если ошибка повторяется, обратитесь в службу технической поддержки." }, "70002": { - "message": "internal network error", + "message": "Internal network error", "type": "INTERNAL", - "description": "Неизвестная сетевая ошибка, попробуйте выполнить запрос позднее.
Если ошибка повторяется, обратитесь в службу технической поддержки." + "description": "Неизвестная сетевая ошибка, попробуйте выполнить запрос позже.
Если ошибка повторяется, обратитесь в службу технической поддержки." }, "70003": { - "message": "internal error, please try again later", + "message": "Internal error, please try again later", "type": "INTERNAL", - "description": "Внутренняя ошибка сервиса, попробуйте выполнить запрос позднее.
Если ошибка повторяется, обратитесь в службу технической поддержки." + "description": "Внутренняя ошибка сервиса, попробуйте выполнить запрос позже.
Если ошибка повторяется, обратитесь в службу технической поддержки." }, "80001": { - "message": "limit of open streams exceeded", + "message": "Limit of open streams exceeded", "type": "RESOURCE_EXHAUSTED", - "description": "Превышен лимит одновременных открытых stream-соединений. Подробнее: [Лимитная политика](https://tinkoff.github.io/investAPI/limits/)" + "description": "Превышен лимит одновременных открытых stream-соединений. [Подробнее про лимитную политику](https://russianinvestments.github.io/investAPI/limits/)" }, "80002": { - "message": "request limit exceeded", + "message": "Request limit exceeded", "type": "RESOURCE_EXHAUSTED", - "description": "Превышен лимит запросов в минуту. Подробнее: [Лимитная политика](https://tinkoff.github.io/investAPI/limits/)" + "description": "Превышен лимит запросов в минуту. [Подробнее про лимитную политику](https://russianinvestments.github.io/investAPI/limits/)" }, "80003": { "message": "The limit on SMS sending has been exceeded, try again in a minute", "type": "RESOURCE_EXHAUSTED", - "description": "Превышен лимит на отправку СМС, попробуйте через минуту. Если вы не хотите получать СМС при выставлении заявки, отключите отправку СМС в ЛК." + "description": "Превышен лимит на отправку СМС, попробуйте через минуту. Если вы не хотите получать СМС при выставлении заявки, отключите отправку СМС в личном кабинете." + }, + "80004": { + "message": "No active subscriptions", + "type": "RESOURCE_EXHAUSTED", + "description": "В стриме отсутствуют активные подписки." }, "90001": { - "message": "need confirmation: %s", + "message": "Need confirmation: %s", "type": "FAILED_PRECONDITION", - "description": "Требуется подтверждение операции.
Подробнее в тексте ошибки." + "description": "Требуется подтверждение операции.
Смотрите подробнее в тексте ошибки." }, "90002": { - "message": "only for qualified investors", + "message": "Only for qualified investors", "type": "FAILED_PRECONDITION", "description": "Торговля этим инструментом доступна только квалифицированным инвесторам." }, "90003": { "message": "The price is too high", "type": "FAILED_PRECONDITION", - "description": "Цена заявки слишком высокая. Разбейте заявку на заявки меньшего размера. Подробнее: [Ограничения на стоимость заявки](https://tinkoff.github.io/investAPI/faq_orders/)." + "description": "Цена заявки слишком высокая. Разбейте заявку на заявки меньшего размера. [Подробнее про ограничения на стоимость заявки](https://russianinvestments.github.io/investAPI/faq_orders/)." } } diff --git a/investAPI-main/src/docs/example.md b/investAPI-main/src/docs/example.md index 9fe63eb..c477f3a 100644 --- a/investAPI-main/src/docs/example.md +++ b/investAPI-main/src/docs/example.md @@ -1,101 +1,100 @@ # Примеры запросов -На данной странице представлены примеры запросов по некоторым методам в формате JSON. +На странице привели примеры запросов по некоторым методам в формате JSON. -## [PostOrder](/investAPI/orders/#postorder) – Метод выставления заявок +## [PostOrder](/investAPI/orders/#postorder) – выставить заявку Задача: выставить лимитную заявку на покупку инструмента. ``` { -"figi": "BBG000000001", \\ FIGI инструмента по которому выставляется заявка. В данном случае используем Тинькофф Вечный портфель RUB. -"quantity": "1", \\ количество лотов инструмента -"price": { \\ цена, по которой будет выставлена заявка +"figi": "BBG000000001", \\ FIGI инструмента, по которому выставляется заявка. В данном случае используем Т-Банк Вечный портфель RUB +"quantity": "1", \\ Количество лотов инструмента +"price": { \\ Цена, по которой будет выставлена заявка "nano": 600000000, "units": "5" }, -"direction": "ORDER_DIRECTION_BUY", \\ Направление заявки, в данном случае покупка -"accountId": "XXXXXXXXXX", \\ Номер счета с которого будет выставлена заявка -"orderType": "ORDER_TYPE_LIMIT", \\ Тип заявки, в данном случае лимитная. -"orderId": "string" \\ ключ идемпотентности. +"direction": "ORDER_DIRECTION_BUY", \\ Направление заявки, в данном случае — покупка +"accountId": "XXXXXXXXXX", \\ Номер счёта, с которого будет выставлена заявка +"orderType": "ORDER_TYPE_LIMIT", \\ Тип заявки, в данном случае — лимитная +"orderId": "string" \\ Ключ идемпотентности } ``` -## [ReplaceOrder](/investAPI/orders/#replaceorder) – Метод изменения выставленной заявки +## [ReplaceOrder](/investAPI/orders/#replaceorder) – изменить выставленную заявку Задача: изменить выставленную ранее заявку. ``` { -"accountId": "XXXXXXXXXX", \\ номер счета с которого выставлена заявка -"orderId": "XXXXXXXXX", \\ номер выставленной заявки -"idempotencyKey": "string", \\ ключ идемпотентности -"quantity": "4", \\ новое количество лотов -"price": { \\ новая цена заявки +"accountId": "XXXXXXXXXX", \\ Номер счёта, с которого выставлена заявка +"orderId": "XXXXXXXXX", \\ Номер выставленной заявки +"idempotencyKey": "string", \\ Ключ идемпотентности +"quantity": "4", \\ Новое количество лотов +"price": { \\ Новая цена заявки "nano": 700000000, "units": "5" } } ``` -## [PostStopOrder](/investAPI/stoporders/#poststoporder) – Метод выставления стоп-заявок +## [PostStopOrder](/investAPI/stoporders/#poststoporder) – выставить стоп-заявку Задача: выставить лимитную заявку на покупку инструмента. ``` { -"figi": "BBG000000001", \\ FIGI инструмента по которому выставляется заявка. В данном случае используем Тинькофф Вечный портфель RUB -"quantity": "2", \\ количество лотов инструмента -"price": { \\ цена, по которой будет выставлена заявка +"figi": "BBG000000001", \\ FIGI инструмента, по которому выставляется заявка. В данном случае используем Т-Банк Вечный портфель RUB +"quantity": "2", \\ Количество лотов инструмента +"price": { \\ Цена, по которой будет выставлена заявка "nano": 600000000, "units": "5" }, -"stopPrice": { \\ стоп-цена, она же цена активации заявки. Т.е. когда цена инструмента на бирже достигнет установленной стоп-цены, будет выставлена заявка с указанными параметрами +"stopPrice": { \\ Стоп-цена, она же цена активации заявки — это значит, когда цена инструмента на бирже достигнет установленной стоп-цены, заявка будет выставлена с указанными параметрами "nano": 700000000, "units": "5" }, -"direction": "STOP_ORDER_DIRECTION_BUY", \\ Направление сделки, в данном случае покупка. -"accountId": "XXXXXXXXXX", \\ номер счета с которого будет выставлена заявка -"expirationType": "STOP_ORDER_EXPIRATION_TYPE_GOOD_TILL_CANCEL", \\ срок действия заявки. В данном случае пока не будет отменена -"stopOrderType": "STOP_ORDER_TYPE_STOP_LIMIT" \\ Тип стоп заявки. В данном случае стоп-лимит. +"direction": "STOP_ORDER_DIRECTION_BUY", \\ Направление сделки, в данном случае — покупка +"accountId": "XXXXXXXXXX", \\ Номер счёта, с которого будет выставлена заявка +"expirationType": "STOP_ORDER_EXPIRATION_TYPE_GOOD_TILL_CANCEL", \\ Срок действия заявки. В данном случае — пока не будет отменена +"stopOrderType": "STOP_ORDER_TYPE_STOP_LIMIT" \\ Тип стоп-заявки. В данном случае — стоп-лимит } ``` -## [GetOperationsByCursor](/investAPI/operations/#getoperationsbycursor) – Метод получения операций по счету с курсором +## [GetOperationsByCursor](/investAPI/operations/#getoperationsbycursor) – получить операции по счёту с курсором -Задача: получить список операций по счету, за год с постраничным выводом. +Задача: получить список операций по счёту за год с постраничным выводом. ``` { -"accountId": "XXXXXXXXX", \\ номер счета, единственный обязательный параметр в этом методе. Можно указать только его и получить первые 100 операции по счету -"instrumentId": "BBG000000001", \\ параметр в котором вы можете указать figi или instrument_uid инструмента, по которому хотите получить операции. В данном случае используем Тинькофф Вечный портфель RUB -"from": "2021-11-07T12:49:35.896Z", \\ дата начала периода, с которого отображаются операции. -"to": "2022-11-07T12:49:35.896Z", \\ дата окончания периода, по который отображаются операции. -"limit": 1000, \\ лимит вывода количества операций. 1000- максимальный лимит. По-умолчанию передается limit=100 +"accountId": "XXXXXXXXX", \\ Номер счёта, единственный обязательный параметр в этом методе. Можно указать только его и получить первые 100 операций по счёту +"instrumentId": "BBG000000001", \\ Параметр, в котором вы можете указать FIGI или instrument_uid инструмента, по которому хотите получить операции. В данном случае используем Т-Банк Вечный портфель RUB +"from": "2021-11-07T12:49:35.896Z", \\ Дата начала периода, с которого отображаются операции +"to": "2022-11-07T12:49:35.896Z", \\ Дата окончания периода, по который отображаются операции +"limit": 1000, \\ Лимит вывода количества операций. Максимальный лимит — 1000, значение по умолчанию — 100 "operationTypes": [ -"OPERATION_TYPE_BUY" \\ Тип операций – покупка. +"OPERATION_TYPE_BUY" \\ Тип операций – покупка ], -"state": "OPERATION_STATE_EXECUTED" \\ Статус операций, в данном случае исполненные +"state": "OPERATION_STATE_EXECUTED" \\ Статус операций, в данном случае — исполненные } ``` -## [GetOperations](/investAPI/operations/#getoperations) – Метод получения операций по счету +## [GetOperations](/investAPI/operations/#getoperations) – получить операции по счёту -Задача: получить список операций по счету, за год. +Задача: получить список операций по счёту за год. ``` { -"accountId": "XXXXXXXXXX", \\ номер счета, единственный обязательный параметр в этом методе. Можно указать только его и получить первые 100 операции по счету -"figi": "BBG000000001", \\ параметр в котором вы можете указать figi инструмента, по которому хотите получить операции. В данном случае используем Тинькофф Вечный портфель RUB -"from": "2021-11-07T12:49:35.896Z", \\ дата начала периода, с которого отображаются операции. -"to": "2022-11-07T12:49:35.896Z", \\ дата окончания периода, по который отображаются операции. -"state": "OPERATION_STATE_EXECUTED" \\ Статус операций, в данном случае исполненные +"accountId": "XXXXXXXXXX", \\ Номер счёта, единственный обязательный параметр в этом методе. Можно указать только его и получить первые 100 операций по счёту +"figi": "BBG000000001", \\ Параметр, в котором вы можете указать FIGI инструмента, по которому хотите получить операции. В данном случае используем Т-Банк Вечный портфель RUB +"from": "2021-11-07T12:49:35.896Z", \\ Дата начала периода, с которого отображаются операции +"to": "2022-11-07T12:49:35.896Z", \\ Дата окончания периода, по который отображаются операции +"state": "OPERATION_STATE_EXECUTED" \\ Статус операций, в данном случае — исполненные } ``` -## [GetCandles](/investAPI/marketdata/#getcandles) – Метод получения свечей +## [GetCandles](/investAPI/marketdata/#getcandles) – получить свечи Задача: получить минутные свечи за день. ``` { "from": "2022-11-08T05:47:40.866Z", \\ Дата начала периода запрошенных свечей "to": "2022-11-09T05:47:40.866Z", \\ Дата окончания периода запрошенных свечей -"interval": "CANDLE_INTERVAL_1MIN", \\Интервал свечей -"instrumentId": "BBG000000001" \\ параметр в котором вы можете указать figi или instrument_uid инструмента, по которому хотите получить операции. В данном случае используем Тинькофф Вечный портфель RUB +"interval": "CANDLE_INTERVAL_1MIN", \\ Интервал свечей +"instrumentId": "BBG000000001" \\ Параметр, в котором вы можете указать FIGI или instrument_uid инструмента, по которому хотите получить операции. В данном случае используем Т-Банк Вечный портфель RUB } -``` - +``` \ No newline at end of file diff --git a/investAPI-main/src/docs/extended.md b/investAPI-main/src/docs/extended.md new file mode 100644 index 0000000..11a56bd --- /dev/null +++ b/investAPI-main/src/docs/extended.md @@ -0,0 +1,14 @@ +По ряду инструментов в T-Invest API есть возможность совершать операции в то время, когда на бирже инструмент не тогуется. +Торговля имеет ряд ограничений и особенностей и похожа на [торговлю по выходным](/investAPI/weekend). + +[Подробнее про особенности торговли в выходные](https://www.tbank.ru/finance/blog/weekend-trading/) + + +## Торгуемые инструменты + +Заключать сделки возможно только по [ограниченному списку инструментов](/investAPI/faq_instruments/#1.13). +Сейчас это инструменты [торговой площадки](/investAPI/markets/) `moex_extended`. + +## Расписание торгов + +Торговая сессия проходит по [расписанию](/investAPI/instruments#tradingschedules) moex_extended и MOEX_DEALER_WEEKEND. diff --git a/investAPI-main/src/docs/faq.md b/investAPI-main/src/docs/faq.md index 899c74c..214d10f 100644 --- a/investAPI-main/src/docs/faq.md +++ b/investAPI-main/src/docs/faq.md @@ -1,65 +1,53 @@ -####[Можно ли вывести в API показатели компаний/прогнозы/доходности и т.д.?](#6.1) -####[Какие документы регламентируют юридическую сторону работы API? ](#6.2) -####[Как открыть дополнительные брокерские счета для использования в TINKOFF INVEST API?](#6.3) -####[Какая логика работы с мультисчетами?](#6.4) -####[Поддерживаются ли сейчас мультисчета в TINKOFF INVEST API?](#6.5) -####[Поддерживает ли TINKOFF INVEST API работу с внебиржевыми инструментами?](#6.6) -####[Торговля бумагами Тинькофф через TINKOFF INVEST API](#6.7) -####[Валюты в TINKOFF INVEST API](#6.8) +## Вопросы по работе с T-Invest API -Ответы на часто задаваемые вопросы, относящиеся к работе различных сервисов TINKOFF INVEST API +### Сервисы T-Invest API -* [FAQ Сервиса аккаунтов](/investAPI/faq_users/) -* [FAQ Сервиса инструментов](/investAPI/faq_instruments/) -* [FAQ Сервиса торговых поручений](/investAPI/faq_orders/) -* [FAQ Сервиса операций](/investAPI/faq_operations/) -* [FAQ Сервиса котировок](/investAPI/faq_marketdata/) -* [FAQ Сервиса стоп-заявок](/investAPI/faq_stoporders/) -* [FAQ Песочница](/investAPI/faq_sandbox/) +Ответы на часто задаваемые вопросы по работе с сервисами T-Invest API можно найти в FAQ каждого сервиса: +* [Сервис аккаунтов](/investAPI/faq_users/) +* [Сервис инструментов](/investAPI/faq_instruments/) +* [Сервис торговых поручений](/investAPI/faq_orders/) +* [Сервис операций](/investAPI/faq_operations/) +* [Сервис котировок](/investAPI/faq_marketdata/) +* [Сервис стоп-заявок](/investAPI/faq_stoporders/) +* [Песочница](/investAPI/faq_sandbox/) -##Условия использования +### Можно ли сделать публичный сервис на основе T-Invest API? -###Можно ли сделать публичный сервис на основе TINKOFF INVEST API? -Нет, TINKOFF INVEST API предоставляется только клиентам Тинькофф без права на ретрансляцию данных. +Нет, T-Invest API предоставляется только клиентам Т-Инвестиций без права на ретрансляцию данных. -###Можно ли вывести в API показатели компаний/прогнозы/доходности и т.д.? +### Можно ли вывести в API показатели компаний/прогнозы/доходности и т.д.? -Пока не имеем права выгружать эти данные для автоматизированных систем. Работаем над этим. +В API есть [фундаментальные показатели](/investAPI/instruments/#getassetfundamentalsresponse), а также [прогнозы](/investAPI/instruments/#getconsensusforecasts). -###Какие документы регламентируют юридическую сторону работы API? +### Какие документы регламентируют юридическую сторону работы API? -Сервис предоставляется в соответствии с [пользовательским соглашением](https://www.tinkoff.ru/about/documents/disclosure/). +Сервис предоставляется в соответствии с [пользовательским соглашением](https://www.tbank.ru/about/documents/disclosure/). -###Как открыть дополнительные брокерские счета для использования в TINKOFF INVEST API? +### Как открыть дополнительные брокерские счета для использования в T-Invest API? -Дополнительные счета Тинькофф Инвестиций открываются в мобильном приложении. Сделать это -через TINKOFF INVEST API нельзя. +Дополнительные счета Т-Инвестиций открываются в мобильном приложении. Сделать это +через T-Invest API нельзя. -###Какая логика работы с мультисчетами? +### Поддерживаются ли сейчас мультисчета в T-Invest API? -Каждый новый счет полностью изолирован от остальных - портфолио, операции, лимиты, -гарантийные обеспечения, уровни достаточности средств учитываются по каждому счету -отдельно. Поэтому может быть ситуация, при которой на одном счете средств хватает с -избытком, а на другом при нехватке средств и активной маржинальной торговле может -наступить маржин-колл. +Да, в T-Invest API можно работать с несколькими счетами. Все ключевые методы принимают +на входе параметр `account_id` — идентификатор счёта. -###Поддерживаются ли сейчас мультисчета в TINKOFF INVEST API? +### Какая логика работы с мультисчетами? -Да, в TINKOFF INVEST API можно работать с несколькими счетами. Все ключевые методы принимают -на вход параметр *account_id* (идентификатор счёта). +Каждый новый счёт полностью изолирован от остальных — портфолио, операции, лимиты, +гарантийные обеспечения, уровни достаточности средств учитываются по каждому счёту +отдельно. -###Поддерживает ли TINKOFF INVEST API работу с внебиржевыми инструментами? +Поэтому может быть ситуация, когда на одном счёте средств хватает с избытком, а на другом при нехватке средств и активной маржинальной торговле может наступить маржин-колл. -В данный момент TINKOFF INVEST API предполагает работу только с биржевыми инструментами. +### Поддерживает ли T-Invest API работу с внебиржевыми инструментами? -###Торговля бумагами Тинькофф через TINKOFF INVEST API +Сейчас T-Invest API предполагает работу только с биржевыми инструментами. -Из-за огромного количества скальперских сделок мы ограничили торговлю БПИФ от УК "Тинькофф Капитал" -в TINKOFF INVEST API. В данный момент действует ограничение в **100 сделок с этими бумагами в сутки**. +### Валюты в T-Invest API -###Валюты в TINKOFF INVEST API +Получить список доступных валют можно через метод [getInstruments/currencies](/investAPI/instruments#currencies). -Получить список доступных валют можно при помощи метода [getInstruments/currencies](/investAPI/instruments#currencies). - -Обратите внимание, что лотность валют ограничена лотностью, которую предоставляет биржа. Например, по евро и доллару 1 лот равен 1000 единиц валюты. +>Лотность валют ограничена лотностью, которую предоставляет биржа. Например, по евро и доллару 1 лот равен 1000 единиц валюты. \ No newline at end of file diff --git a/investAPI-main/src/docs/faq_corp_action.md b/investAPI-main/src/docs/faq_corp_action.md index bcfa2ef..7dab446 100644 --- a/investAPI-main/src/docs/faq_corp_action.md +++ b/investAPI-main/src/docs/faq_corp_action.md @@ -1,54 +1,51 @@ -#Корпоративные действия +# Корпоративные действия -В процессе владения ценными бумагами любой трейдер сталкивается с так называемыми "корпоративными -действиями". Это события в жизни эмитента ценной бумаги, которое так или иначе влияет на депонента. -К таким событиям относятся: +В процессе владения ценными бумагами любой трейдер сталкивается с так называемыми «корпоративными +действиями» — это события в жизни эмитента ценной бумаги, которые так или иначе влияют на депонента. -1. **Сплит акций (англ. stock split — дробление бумаг)** — это увеличение количества ценных бумаг, торгуемых на бирже, +

К таким событиям относятся:

+ + +## Влияние корпоративных действий на котировки и портфель пользователя | Тип корпоративного действия | Влияние на котировки | Влияние на портфель | Влияние на исторические котировки | Влияние на идентификаторы | | :-------------------------- | :------------------- | :------------------ | :-------------------------------- | ------------------------- | -| **Сплит акций** | Цена бумаг уменьшается на коэффициент сплита | Количество ценных бумаг в портфеле увеличивается, но общая стоимость остаётся прежней| Уменьшаются на коэффициент сплита | Отсутствует | -| **Обратный сплит** | Цена бумаг увеличивается на коэффициент обратного сплита | Количество ценных бумаг в портфеле уменьшается, но общая стоимость остаётся прежней | Увеличиваются на коэффициент обратного сплита| Отсутствует | -| **Выделение** | Прямого влияния нет. Однако, происходит реакция рынка, которая может влиять на цену в ту или иную сторону | Происходит полная или частичная замена одних ценных бумаг на другие | Отсутствует | Создаётся новая ценная бумага | -| **Делистинг** | Ценные бумаги перестают торговаться на бирже | Отсутствует, но ценные бумаги больше нельзя продать на бирже (иногда доступна внебиржевая торговля) | Отсутствует | Отсутствует | -| **Выплата дивидендов в виде акций** | Прямого влияния нет, только реакция рынка | Количество акций увеличивается на размер выплаты (по текущему или фиксированному курсу) | Отсутствует | Отсутствует | -| **Конвертация ценных бумаг** | Прямого влияния нет, только реакция рынка | Одни ценные бумаги заменяются другими | Отсутствует | Идентификаторы изменяются | -| **Погашение облигаций** | Облигация перестаёт торговаться на бирже | Облигации "продаются" по цене номинала с учётом накопленного купонного дохода | Отсутствует | Отсутствует | +| **Сплит акций** | Цена бумаг уменьшается на коэффициент сплита | Количество ценных бумаг в портфеле увеличивается, но общая стоимость остаётся прежней| Уменьшаются на коэффициент сплита | Нет | +| **Обратный сплит** | Цена бумаг увеличивается на коэффициент обратного сплита | Количество ценных бумаг в портфеле уменьшается, но общая стоимость остаётся прежней | Увеличиваются на коэффициент обратного сплита| Нет | +| **Выделение** | Прямого влияния нет. Но происходит реакция рынка, которая может влиять на цену в ту или иную сторону | Происходит полная или частичная замена одних ценных бумаг на другие | Нет | Создаётся новая ценная бумага | +| **Делистинг** | Ценные бумаги перестают торговаться на бирже | Нет, но ценные бумаги больше нельзя продать на бирже. Иногда доступна внебиржевая торговля | Нет | Нет | +| **Выплата дивидендов в виде акций** | Прямого влияния нет, только реакция рынка | Количество акций увеличивается на размер выплаты — по текущему или фиксированному курсу | Нет | Нет | +| **Конвертация ценных бумаг** | Прямого влияния нет, только реакция рынка | Одни ценные бумаги заменяются другими | Нет | Идентификаторы изменяются | +| **Погашение облигаций** | Облигация перестаёт торговаться на бирже | Облигации «продаются» по цене номинала с учётом накопленного купонного дохода | Нет | Нет | diff --git a/investAPI-main/src/docs/faq_csharp.md b/investAPI-main/src/docs/faq_csharp.md index 304edf5..c849716 100644 --- a/investAPI-main/src/docs/faq_csharp.md +++ b/investAPI-main/src/docs/faq_csharp.md @@ -1,13 +1,5 @@ -##SDK для c# - -####Официальные SDK: -* [InvestApi .NET SDK](https://github.com/Tinkoff/invest-api-csharp-sdk) - -####Неофициальные SDK: - -##Примеры подключения - -Примеры подключения и получения данных доступны в репозитории официальной SDK: -[Tinkoff/invest-api-csharp-sdk/tree/main/Tinkoff.InvestApi.Sample](https://github.com/Tinkoff/invest-api-csharp-sdk/tree/main/Tinkoff.InvestApi.Sample) +### Официальный SDK +* [InvestApi .NET SDK](https://github.com/RussianInvestments/invest-api-csharp-sdk). +- [Примеры подключения и получения данных](https://github.com/RussianInvestments/invest-api-csharp-sdk/tree/main/Tinkoff.InvestApi.Sample) \ No newline at end of file diff --git a/investAPI-main/src/docs/faq_custom_types.md b/investAPI-main/src/docs/faq_custom_types.md index 1fc981e..288da02 100644 --- a/investAPI-main/src/docs/faq_custom_types.md +++ b/investAPI-main/src/docs/faq_custom_types.md @@ -1,14 +1,18 @@ -#Нестандартные типы данных TINKOFF INVEST API +# Нестандартные типы данных T-Invest API -##Timestamp -Тип данных Timestamp является основным для передачи времени [в формате protoсol-buffers](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#timestamp) и представляет собой значение в диапазоне интервала дат -от 0001-01-01T00:00:00Z до 9999-12-31T23:59:59.999999999Z +## Timestamp -Timestamp всегда работает в формате UTC с нулевым смещением. Тип Timestamp состоит из двух полей целого типа: seconds и nanos. +Timestamp — основной тип данных для передачи времени в формате [protoсol-buffers](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#timestamp). Он состоит из значения в диапазоне интервала дат — от `0001-01-01T00:00:00Z` до `9999-12-31T23:59:59.999999999Z`. -Seconds содержит количество секунд с полуночи (00:00:00) 01.01.1970, а nanos принимает значение от 0 до 999999999. +

Timestamp всегда работает в формате UTC с нулевым смещением и состоит из двух полей целого типа:

+ + + +#### Примеры Timestamp -####Примеры timestamp |Seconds|Nanos|Значение| |:-------|:----------------|:------------------| |1645718039|0|24 February 2022, 15:53:59.000| @@ -17,9 +21,9 @@ Seconds содержит количество секунд с полуночи ( { //Пример конвертации из POSIX функции time() - Timestamp timestamp; - timestamp.set_seconds(time(NULL)); - timestamp.set_nanos(0); + Timestamp timestamp; + timestamp.set_seconds(time(NULL)); + timestamp.set_nanos(0); } @@ -48,22 +52,23 @@ Seconds содержит количество секунд с полуночи ( } -##MoneyValue -Данный тип данных используется для параметров, имеющих денежный эквивалент. Например, стоимость ценных бумаг. +## MoneyValue + +Этот тип данных используется для параметров, у которых есть денежный эквивалент — например, стоимость ценных бумаг. -Тип состоит из трёх параметров: +MoneyValue состоит из трёх параметров: -* currency — строковый [ISO-код валюты](https://ru.wikipedia.org/wiki/ISO_4217). Например, RUB или USD. -* units — целая часть суммы. -* nano — дробная часть суммы (миллиардные доли). +* `currency` — строковый [ISO-код валюты](https://ru.wikipedia.org/wiki/ISO_4217). Например, RUB или USD. +* `units` — целая часть суммы. +* `nano` — дробная часть суммы, миллиардные доли. -Для корректной работы с данным типом данных требуется его конвертация в стандартные типы языка программирования, -который используется для написания торгового робота. +Чтобы корректно работать с этим типом данных, его нужно сконвертировать в стандартные типы языка программирования, +который используется для написания торгового робота. -###Пример конвертации на Java +### Пример конвертации на Java { - //MoneyValue - конвертация из BigDecimal в MoneyValue и обратно + //MoneyValue — конвертация из BigDecimal в MoneyValue и обратно BigDecimal value = new BigDecimal("123.456"); String currency = "RUB"; MoneyValue moneyValue = MoneyValue.newBuilder() @@ -74,23 +79,25 @@ Seconds содержит количество секунд с полуночи ( BigDecimal bigDecimal = moneyValue.getUnits() == 0 && moneyValue.getNano() == 0 ? BigDecimal.ZERO : BigDecimal.valueOf(moneyValue.getUnits()).add(BigDecimal.valueOf(moneyValue.getNano(), 9)); } -####Примеры конвертированных значений +#### Примеры конвертированных значений + |Сумма в валюте|Сумма в MoneyValue| |:---------------|:-----------------| | 114,25 рублей |`{`
`"currency": "RUB",`
`"units": "114",`
`"nano": 250000000`
`}`| |-200,20 долларов|`{`
`"currency": "USD",`
`"units": "-200",`
`"nano": -200000000`
`}`| |-0.01 юаней |`{`
`"currency": "CNY",`
`"units": "-0",`
`"nano": -10000000`
`}`| -##Quotation -Данный тип данных аналогичен MoneyValue с той лишь разницей, что в нём не содержится информации о валюте. +## Quotation + +Этот тип данных аналогичен MoneyValue, но в нём не содержится информации о валюте. -* units — целая часть суммы. -* nano — дробная часть суммы. +* `units` — целая часть суммы; +* `nano` — дробная часть суммы. -###Пример конвертации на Java +### Пример конвертации на Java { - //Пример конвертации из BigDecimal в Quotation и обратно + //Из BigDecimal в Quotation и обратно BigDecimal value = new BigDecimal("123.456"); Quotation quotation = Quotation.newBuilder() .setUnits(value != null ? value.longValue() : 0) @@ -99,9 +106,10 @@ Seconds содержит количество секунд с полуночи ( BigDecimal bigDecimal = quotation.getUnits() == 0 && quotation.getNano() == 0 ? BigDecimal.ZERO : BigDecimal.valueOf(quotation.getUnits()).add(BigDecimal.valueOf(quotation.getNano(), 9)); } -####Примеры конвертированных значений +#### Примеры конвертированных значений + |Сумма |Сумма в Quotation| |:-------|:----------------| | 114,25 |`{`
`"units": "114",`
`"nano": 250000000`
`}`| |-200,20 |`{`
`"units": "-200",`
`"nano": -200000000`
`}`| -|-0.01 |`{`
`"units": "-0",`
`"nano": -10000000`
`}`| +|-0.01 |`{`
`"units": "-0",`
`"nano": -10000000`
`}`| \ No newline at end of file diff --git a/investAPI-main/src/docs/faq_golang.md b/investAPI-main/src/docs/faq_golang.md index 11a47a8..b6a278d 100644 --- a/investAPI-main/src/docs/faq_golang.md +++ b/investAPI-main/src/docs/faq_golang.md @@ -1,11 +1,10 @@ +### Официальный SDK -####Официальный SDK: +* [invest-api-go-sdk](https://github.com/RussianInvestments/invest-api-go-sdk). +* [Примеры](https://github.com/RussianInvestments/invest-api-go-sdk/tree/main/examples). +* [Загрузчик стаканов из стриминга](https://github.com/RussianInvestments/invest-api-go-sdk/blob/main/examples/order_book_download/order_book.go). -* [invest-api-go-sdk](https://github.com/Tinkoff/invest-api-go-sdk) -* [примеры](https://github.com/Tinkoff/invest-api-go-sdk/tree/main/examples) -* [загрузчик стаканов из стриминга](https://github.com/Tinkoff/invest-api-go-sdk/blob/main/examples/order_book_download/order_book.go) +### Неофициальный SDK -####Неофициальный SDK: - -* [от ssummers02](https://github.com/ssummers02/invest-api-go-sdk) -* [от vodolaz095](https://github.com/vodolaz095/go-investAPI) +* [От ssummers02](https://github.com/ssummers02/invest-api-go-sdk). +* [От vodolaz095](https://github.com/vodolaz095/go-investAPI). diff --git a/investAPI-main/src/docs/faq_identification.md b/investAPI-main/src/docs/faq_identification.md index 6ab77c2..1628143 100644 --- a/investAPI-main/src/docs/faq_identification.md +++ b/investAPI-main/src/docs/faq_identification.md @@ -1,54 +1,64 @@ # Идентификация торговых инструментов -Для точного определения различных торговых инструментов используются различные идентификаторы: +Для точного определения торговых инструментов используются разные идентификаторы: -1. **Isin**(*англ.:* International Security Identification Number) — международный -идентификационный номер ценной бумаги, состоит из 12 символов цифр и латинских букв, -которые начинаются, как правило, с 2-буквенного кода страны эмитента ценной бумаги. -**Структура ISIN:** -Первые два символа — буквы, определяющие код страны эмитента согласно стандарту ISO 3166-1 (например, российские ISIN-коды начинаются буквами RU). -Далее следуют 9 букв и цифр национального идентификационного кода ценной бумаги (англ. National Securities Identifying Number, NSIN). Завершает код контрольная цифра. -Например, ISIN акции TCS Group — US87238U2033. +
    +
  1. Isin (International Security Identification Number) — международный +идентификационный номер ценной бумаги. Состоит из 12 символов цифр и латинских букв, +которые обычно начинаются с 2-буквенного кода страны эмитента ценной бумаги.

    +

    Структура ISIN
    Первые два символа — буквы, определяющие код страны эмитента согласно стандарту ISO 3166-1 — например, российские ISIN-коды начинаются буквами RU.
    Далее — 9 букв и цифр национального идентификационного кода ценной бумаги (National Securities Identifying Number, NSIN). +Завершает код контрольная цифра. Например, ISIN акции TCS Group — US87238U2033.

    +
  2. +
  3. Ticker — краткое (1–5 букв) наименование ценной бумаги на конкретной бирже. Без +указания биржи и режима торгов это просто набор букв — поэтому на российских биржах MOEX и SPBE используется специальный признак «Режим торгов», который соответствует техническому термину class_code. Комбинация тикера и class_code является уникальным идентификатором, только тикер — нет.
    Например, тикер TCS Group — T.

    +
  4. +
  5. FIGI (Financial Instrument Global Identifier) — глобальный идентификатор +финансового инструмента. Представляет собой 12-символьный код из латинских букв и цифр. +Определяется как идентификатор ценной бумаги на торговой площадке (бирже), которая +является некоторым «источником цен».

    +

    Обратите внимание: FIGI, присваемые в Т-Инвестициях, не всегда совпадают с международным классификатором. Это устаревший параметр, который не рекомендуется использовать.

    +
  6. +
-2. **Ticker** — краткое (1-5 букв) наименование ценной бумаги *на конкретной бирже*. Без -указания биржи и режима торгов, по сути, является бессмысленным набором букв. Для этого -на российских биржах MOEX и SPBE используется специальный признак "Режим торгов", -который соответствует техническому термину "class_сode". Комбинация тикера и "class_code" -является уникальным идентификатором. Отдельно же, только тикер, - нет. -Например, тикер TCS Group Tinkoff - TCSG. +## Идентификаторы из модели финансовых инструментов Т-Инвестиций -3. **FIGI**(*англ.:* Financial Instrument Global Identifier) — глобальный идентификатор -финансового инструмента. Представляет собой 12-символьный код из латинских букв и цифр, -определяется как идентификатор ценной бумаги на торговой площадке (бирже), которая -является некоторым *"источником цен"*. +В Т-Инвестициях применяется иерархическая система идентификации финансовых объектов. -Важно: не всегда FIGI, присваемые в Тинькофф Инвестициях, совпадают с международным классификатором. -Является устаревшим параметром и не рекомендуется к использованию. +**Бренд** -## Идентификаторы из модели финансовых инструментов Тинькофф Инвестиций +На верхнем уровне находится бренд — работающая на финансовом рынке компания, которая является эмитентом ценных бумаг. Пример бренда — Сбербанк. -В Тинькофф Инвестициях применяется иерархическая система идентификации финансовых объектов. -На верхнем уровне находится **актив** - это по сути работающая на финансовом рынке компания, являющаяся эмитентом ценных бумаг. Примером актива может быть например Сбербанк. +**Актив** -У актива может несколько финансовых инструментов: акции (в т.ч. на разных биржах), облигации и т.д., каждая из подобных ценных бумаг называется **позиция**. То есть *Позиция* - это совокупность актива, типа и торговой площадки(биржи). +У бренда может несколько финансовых инструментов: акции, в том числе на разных биржах, облигации и прочее. Каждая из ценных бумаг называется актив. -Но одна и та же позиция может торговаться в разных режимах торгов и по разной цене: например: валюта разной лотности может иметь различную стоимость; или акцию можно продать за биржевом рынке, так и на внебиржевом (в торговле на выходных). Поэтому есть еще один идентификатор - **торговый инструмент** - он определяется как ценная бумага на торговой площадке (бирже) в указанном режиме торгов. Получить котировки можно только по торговому инструменту. +**Позиция** -Подведем итоги, +Один и тот же актив может торговаться на разных биржах. Совокупность актива и торговой площадки (биржи) — это позиция. -* идентификатор актива - это asset_uid -* идентификатор позиции - это position_uid -* идентификатор торгового инструмента - это instrument_uid +В некоторых ситуациях размещение бумаг на бирже, выплаты купонов и дивидендов проходят позициям, которые отличаются от тех, что торгуются на бирже или находятся в портфеле. -Для удобства клиентов, использовавших в своих системах устаревший идентификатор FIGI в многих методах API Тинькофф предусмотрено универсальное поле **Instrument_Id** - в которое можно передавать как FIGI, так и instrument_uid. +**Торговый инструмент** +Одна и та же позиция может торговаться в разных режимах торгов и по разной цене. Например, валюта разной лотности может иметь различную стоимость, а акцию можно продать на биржевом и внебиржевом рынках, то есть в торговле на выходных. -Вы можете получить идентификаторы конкретного инструмента с помощью метода [FindInstrument](/investAPI/instruments/#findinstrument), передав в параметр *query* известный идентификатор или название инструмента. +Поэтому есть еще один идентификатор — торговый инструмент. Он определяется как ценная бумага на торговой площадке (бирже) в указанном режиме торгов. Получить котировки можно только по торговому инструменту. -Использование `Instrument_Id` является более предпочтительным, так как предполагает возможность использования -**instrument_uid** или **FIGI**. +## Параметры в API -На данный момент при передаче значения в параметр `Instrument_Id` сначала выполняется поиск инструмента по -**instrument_uid**, а потом уже по **FIGI**. +- `uid` бренда — идентификатор компании; +- `asset_uid` — идентификатор актива; +- `position_uid` — идентификатор позиции; +- `instrument_uid` — идентификатор торгового инструмента. -**Основным идентификатором торгового инструмента при работе с TINKOFF INVEST API является *UID*, так как, например, в опционах идентификатор FIGI не поддерживается** +### Instrument_Id + +Для удобства клиентов, которые в своих системах использовали устаревший идентификатор FIGI, в большинстве методов T-Invest API предусмотрено универсальное поле **Instrument_Id** — в нём можно передавать как `FIGI`, так и `instrument_uid`. + +Вы можете получить идентификаторы конкретного инструмента через метод [FindInstrument](/investAPI/instruments/#findinstrument), передав в параметре `query` известный идентификатор или название инструмента. + +Сейчас при передаче значения в параметре `Instrument_Id` сначала выполняется поиск инструмента по +`instrument_uid`, потом — по `FIGI`. + +Основной идентификатор торгового инструмента при работе с T-Invest API — UID, так как, например, в +опционах идентификатор FIGI не поддерживается. \ No newline at end of file diff --git a/investAPI-main/src/docs/faq_instruments.md b/investAPI-main/src/docs/faq_instruments.md index 3c80f75..f023f26 100644 --- a/investAPI-main/src/docs/faq_instruments.md +++ b/investAPI-main/src/docs/faq_instruments.md @@ -1,222 +1,251 @@ -####[Что такое Figi инструмента?](#1.1) -####[Как мне найти Figi инструмента по его названию, тикеру или isin?](#1.2) -####[Что такое class_code и где его найти?](#1.3) -####[Как понять, что бумага доступна для торговли через TINKOFF INVEST API?](#1.4) -####[Что такое накопленный купонный доход облигации и как его узнать?](#1.5) -####[Как узнать стоимость шага цены (min_price_increment_amount) фьючерса?](#1.6) -####[Как узнать на какой бирже исполняются расчеты по инструменту?](#1.7) -####[Как найти базовый актив фьючерса?](#1.8) -####[Как отличить инструмент доступный для ИИС?](#1.9) -####[Как получить информацию об брендах?](#1.10) -####[Как по позиции найти инструмент?](#1.11) -####[Ставки риска и их коэфффиценты](#1.12) -####[Как узнать торгуется ли инструмент на выходных?](#1.13) -####[Какие заявки по опционам возможно выставить?](#1.14) -####[Что такое liquidity_flag?](#1.15) - -###Что такое Figi инструмента? - -**FIGI**(*англ.:* Financial Instrument Global Identifier) — глобальный идентификатор -финансового инструмента. Представляет собой 12-символьный код из латинских букв и цифр, +### Что такое FIGI инструмента? + +**FIGI** (Financial Instrument Global Identifier) — глобальный идентификатор +финансового инструмента. Представляет собой 12-символьный код из латинских букв и цифр и определяется как идентификатор ценной бумаги на торговой площадке (бирже), которая -является некоторым *"источником цен"*. +является некоторым «источником цен». + +Учитывайте, что не у всех инструментов, которые доступны в Т-Инвестициях, есть общепринятый +FIGI — поэтому уникальность инструментов с другими источниками не гарантируется. -Нужно понимать, что не все инструменты, доступные в Тинькофф Инвестициях, имеют общепринятый -Figi. Поэтому не гарантируется уникальность инструментов с другими источниками. Узнать актуальный -Figi-идентификатор инструмента можно при помощи методов [сервиса инструментов](/investAPI/instruments/). +Узнать актуальный FIGI-идентификатор инструмента можно через методы [сервиса инструментов](/investAPI/instruments/). - -**На данный момент основным идентификатором внутри Тинькофф Инвестиций является uid, который позволяет избежать возможной путаницы.** +>**Важно**
+>Сейчас основной идентификатор внутри Т-Инвестиций — UID. Он позволяет избежать возможной путаницы. -###Как мне найти Figi инструмента по его названию, тикеру или isin? +### Как найти FIGI инструмента по его названию, тикеру или ISIN? -Методы поиска инструментов по идентификатору ([BondBy](/investAPI/instruments#bondby), +Через методы поиска инструментов по идентификатору — [BondBy](/investAPI/instruments#bondby), [CurrencyBy](/investAPI/instruments#currencyby), [EtfBy](/investAPI/instruments#etfby), -[FutureBy](/instruments#futureby), [ShareBy](/investAPI/instruments#shareby)) позволяют получить -информацию об инструменте зная его Figi или связку ticker + class_code. Если же эти идентификаторы -вам неизвестны, вы можете получить полный список инструментов определённого типа методами запроса -списков инструментов ([Bonds](/investAPI/instruments#bonds), -[Currencies](/investAPI/instruments#currencies), [Etfs](/investAPI/instruments#etfs), -[Futures](/instruments#futures), [Shares](/investAPI/instruments#shares)) и выполнить поиск по известным -параметрам самостоятельно. Сделать это можно в коде робота или при помощи любого доступного gRPC-клиента, -например, Kreya. Инструкция по настройке Kreya доступна по [ссылке](/investAPI/grpc#kreya). - -###Что такое class_code и где его найти? - -Сlass_code — это технический параметр "Режим торгов", используемый для обозначения секции биржи, на -которой торгуется данный инструмент. Узнать его можно, получив детали по инструменту методами сервиса -инструментов. - -###Как понять, что бумага доступна для торговли через TINKOFF INVEST API? - -Чтобы получить все доступные для торговли инструменты определённого типа можно воспользоваться -соответствующими методами, передав параметр **instrument_status** = ***INSTRUMENT_STATUS_BASE***: -* [Bonds](/investAPI/instruments#bonds) -* [Currencies](/investAPI/instruments#currencies) -* [Etfs](/investAPI/instruments#etfs) -* [Futures](/instruments#futures) -* [Shares](/investAPI/instruments#shares) - -Если же нет необходимости получать полный список инструментов, можно использовать параметр -**api_trade_available_flag** из ответа метода получения инструмента по его идентификатору -([BondBy](/investAPI/instruments#bondby), -[CurrencyBy](/investAPI/instruments#currencyby), [EtfBy](/investAPI/instruments#etfby), -[FutureBy](/instruments#futureby), [ShareBy](/investAPI/instruments#shareby)). Этот флаг -отвечает за доступность инструмента для торгов через TINKOFF INVEST API. - -Кроме того следует учитывать расписание работы бирж и торговый статус инструмента. Подробнее: -[Торговые статусы инструментов и расписание торгов](/investAPI/faq_trading_status/). - -###Что такое накопленный купонный доход облигации и как его узнать? +[FutureBy](/instruments#futureby), [ShareBy](/investAPI/instruments#shareby). Они позволяют получить +информацию об инструменте, зная его FIGI или связку ticker + class_code. -**Купон, или купонный доход** — это процентные выплаты держателям облигаций со стороны эмитента, то есть -компании или госоргана, выпустивших этот тип ценных бумаг. -Даты выплат процентов по облигациям и размер купона известны заранее. Размер купона задается в процентах от -номинала — то есть от цены облигации при ее выпуске. Величина купона может быть фиксированной или плавающей — -то есть привязанной к инфляции, ключевой ставке Центробанка России или другим ориентирам. Иногда у облигации -может вовсе не быть купона. [Купонный доход по облигациям](https://www.tinkoff.ru/invest/account/help/get-profit/coupon-yield). +Если вы не знаете эти идентификаторы, получить полный список инструментов определённого типа можно через методы запроса +списков инструментов — [Bonds](/investAPI/instruments#bonds), [Currencies](/investAPI/instruments#currencies), [Etfs](/investAPI/instruments#etfs), [Futures](/instruments#futures), [Shares](/investAPI/instruments#shares). Выполните поиск по известным параметрам самостоятельно — это можно сделать в коде робота или через любый доступный gRPC-клиент, +например, Kreya. [Инструкция по настройке Kreya](/investAPI/grpc#kreya). + +### Что такое `class_code` и где его найти? + +`class_code` — это технический параметр «Режим торгов». Используется для обозначения секции биржи, на +которой торгуется инструмент. + +Чтобы его узнать, получите детали по инструменту через методы [сервиса инструментов](/investAPI/instruments/). + +### Как понять, что бумага доступна для торговли через T-Invest API? + +Чтобы получить все доступные для торговли инструменты определённого типа, передайте параметр `instrument_status` = `INSTRUMENT_STATUS_BASE` в нужном методе: -Получить календарь купонных выплат можно методом [GetAccruedInterests](/investAPI/instruments#getaccruedinterests). +* [Bonds](/investAPI/instruments#bonds). +* [Currencies](/investAPI/instruments#currencies). +* [Etfs](/investAPI/instruments#etfs). +* [Futures](/instruments#futures). +* [Shares](/investAPI/instruments#shares). -###Как узнать стоимость шага цены(min_price_increment_amount) фьючерса? +Если вам не нужно получать полный список инструментов, используйте параметр `api_trade_available_flag` из ответа методов получения инструмента по его идентификатору — [BondBy](/investAPI/instruments#bondby), [CurrencyBy](/investAPI/instruments#currencyby), [EtfBy](/investAPI/instruments#etfby), [FutureBy](/instruments#futureby), [ShareBy](/investAPI/instruments#shareby). Он отвечает за доступность инструмента для торгов через T-Invest API. -Данный параметр может изменяться довольно часто в течении дня, поэтому для его получения существует -отдельный метод сервиса инструментов [GetFuturesMargin](/investAPI/instruments#getfuturesmargin). +Также учитывайте расписание работы бирж и торговый статус инструмента. [Подробнее](/investAPI/faq_trading_status/). -###Как узнать на какой бирже исполняются расчеты по инструменту? +### Что такое накопленный купонный доход облигации и как его узнать? -Для определения биржи на которой исполняются расчеты по финансовому инструменту в TINKOFF INVEST API добавлен параметр [real_exchange](/investAPI/instruments/#realexchange). +**Купон, или купонный доход** — это процентные выплаты держателям облигаций со стороны эмитента, то есть +компании или госоргана, выпустивших этот тип ценных бумаг. -Список методов возвращающих в ответе биржу на которой исполняются расчеты: +Даты выплат процентов по облигациям и размер купона известны заранее. Размер купона задаётся в процентах от +номинала — то есть от цены облигации при её выпуске. Величина купона может быть фиксированной или плавающей — +привязанной к инфляции, ключевой ставке Центробанка России или другим ориентирам. Иногда у облигации +может не быть купона. [Купонный доход по облигациям](https://www.tbank.ru/invest/account/help/get-profit/coupon-yield). -* [GetInstrumentBy](/investAPI/instruments/#getinstrumentby) - Метод получения основной информации об инструменте. -* [GetBondBy](/investAPI/instruments/#bondby) - Метод получения облигации по её идентификатору. -* [GetBonds](/investAPI/instruments/#bonds) - Метод получения списка облигаций. -* [GetShareBy](/investAPI/instruments/#shareby) - Метод получения акции по её идентификатору. -* [GetShares](/investAPI/instruments/#shares) - Метод получения списка акций. -* [GetEtfBy](/investAPI/instruments/#etfby) - Метод получения инвестиционного фонда по его идентификатору. -* [GetEtfs](/investAPI/instruments/#etfs) - Метод получения списка инвестиционных фондов. -* [GetFutureBy](/investAPI/instruments/#futureby) - Метод получения фьючерса по его идентификатору. -* [GetFutures](/investAPI/instruments/#futures) - Метод получения списка фьючерсов. -* [GetCurrencyBy](/investAPI/instruments/#currencyby) - Метод получения валюты по её идентификатору. -* [GetCurrencies](/investAPI/instruments/#currencies) - Метод получения списка валют. -* [GetOptionBy](/investAPI/instruments/#optionby) - Метод получения опциона по его идентификатору. -* [GetOptions](/investAPI/instruments/#options) - Метод получения опционов. +Получить календарь купонных выплат можно через метод [GetAccruedInterests](/investAPI/instruments#getaccruedinterests). +### Как узнать стоимость шага цены (min_price_increment_amount) фьючерса? -###Как найти базовый актив фьючерса? +Этот параметр может изменяться довольно часто в течение дня, поэтому для его получения есть +отдельный метод сервиса инструментов — [GetFuturesMargin](/investAPI/instruments#getfuturesmargin). -Используя метод [FindInstrument](/investAPI/instruments/#findinstrument) можно найти базовый актив фьючерса. Для этого достаточно передать в query значение параметра *basic_asset_position_uid*, возвращаемое методами [GetFutureBy](/investAPI/instruments/#futureby) и [GetFutures](/investAPI/instruments/#futures). +### Как узнать, на какой бирже исполняются расчёты по инструменту? -###Как получить и изменить список избранных инструментов? +В T-Invest API есть параметр [real_exchange](/investAPI/instruments/#realexchange) — он передаётся для определения биржи, на которой исполняются расчёты по финансовому инструменту. -Используя метод [GetFavorites](/investAPI/instruments#getfavorites) можно получить список избранных инструментов клиента. -Данный метод может использоваться разработчиками для получения списка инструментов, которые робот добавил в избранное используя метод [EditFavorites](/investAPI/instruments#editfavorites). +Список методов: -Для добавления или удаления инструментов из списка избранных можно использовать [EditFavorites](/investAPI/instruments#editfavorites). -Данный метод позволяет разработчикам автоматизировать выделение наиболее интересных инструментов путем редактирования списка избранных инструментов. -Использование метода ограничено 100 инструментов. При попытке передать больше 100 инструментов будет возвращена ошибка "code":"30091" и "message":"quantity of instruments can't be more than 100". +* [GetInstrumentBy](/investAPI/instruments/#getinstrumentby) — получить основную информацию об инструменте. +* [BondBy](/investAPI/instruments/#bondby) — получить облигацию по её идентификатору. +* [Bonds](/investAPI/instruments/#bonds) — получить список облигаций. +* [ShareBy](/investAPI/instruments/#shareby) — получить акцию по её идентификатору. +* [Shares](/investAPI/instruments/#shares) — получить список акций. +* [EtfBy](/investAPI/instruments/#etfby) — получить инвестиционный фонд по его идентификатору. +* [Etfs](/investAPI/instruments/#etfs) — получить список инвестиционных фондов. +* [FutureBy](/investAPI/instruments/#futureby) — получить фьючерс по его идентификатору. +* [Futures](/investAPI/instruments/#futures) — получить список фьючерсов. +* [CurrencyBy](/investAPI/instruments/#currencyby) — получить валюту по её идентификатору. +* [Currencies](/investAPI/instruments/#currencies) — получить список валют. +* [OptionBy](/investAPI/instruments/#optionby) — получить опцион по его идентификатору. +* [Options](/investAPI/instruments/#options) — получить опционы. -**Важно!!!** Если вы хотите добавить в список избранных инструментов валюту, то это необходимо делать через валюту с лотностью = 1. -Инструменты валюты с разной лотностью имеют разные значения идентификаторов. -Например, +### Как найти базовый актив фьючерса? -* FIGI доллара США с **лотностью 1000** - TCS0013HGFT4, а FIGI доллара США с **лотностью 1** - USD000UTSTOM. -* FIGI евро с **лотностью 1000** - BBG0013HJJ31, а FIGI доллара США с **лотностью 1** - EUR000UTSTOM. +Чтобы найти базовый актив фьючерса, можно использовать метод [FindInstrument](/investAPI/instruments/#findinstrument) — для этого в **query** передайте значение параметра `basic_asset_position_uid`, которое возвращается в методах [GetFutureBy](/investAPI/instruments/#futureby) и [GetFutures](/investAPI/instruments/#futures). -###Как отличить инструмент доступный для ИИС? +### Как получить и изменить список избранных инструментов? -В методах получения информации об инструментах добавлен флаг `For_iis_flag` принимающий булево значение в зависимости от доступности инструмента для ИИС. + -###Как получить информацию об активах? +>**Важно** +>

Если вы хотите добавить валюту в список избранных инструментов, это нужно делать через валюту с лотностью 1. Инструменты валюты с разной лотностью имеют разные значения идентификаторов.

+>

У позиции (валюты) есть разные инструменты, которыми можно торговать. Например, у доллара это могут быть инструменты с лотностью в 1 доллар или 1000 долларов.

+>

Примеры идентификаторов:

+> -В TINKOFF INVEST API представлены два метода для получения активов. +### Как отличить инструмент доступный для ИИС? -Используя метод [getAssets](/investAPI/instruments/#getassets) сервиса инструментов можно получить список всех активов. Метод работает для всех инструментов, за исключением срочных - опционов и фьючерсов. +В методах для получения информации об инструментах есть флаг `for_iis_flag` — он принимает булевое значение в зависимости от доступности инструмента для ИИС. -Используя метод [getAssetBy](/investAPI/instruments/#getassetby) сервиса инструментов можно найти актив по его идентификатору. -Этот метод возвращает более подробную информацию о запрошенном активе. Набор данных отличается в зависимости от типа актива. +### Как получить информацию об активах? +

В T-Invest API есть два метода для получения активов:

+
    +
  1. getAssets — получить список всех активов. Метод работает для всех инструментов, кроме срочных: опционов и фьючерсов. Возвращает краткую информацию об активе:

    +
      +
    • Идентификатор.
    • +
    • Тип актива.
    • +
    • Название актива.
    • +
    • Массив инструментов актива.
    • +
    +
  2. +
  3. getAssetBy — найти актив по его идентификатору. +Метод возвращает более подробную информацию о запрошенном активе. Набор данных отличается в зависимости от типа актива.

    +
  4. +
-###Как получить информацию об брендах? +### Как получить информацию об брендах? -В TINKOFF INVEST API представлены два метода для получения брендов. +В T-Invest API есть два метода для получения брендов: -Используя метод [getBrands](/investAPI/instruments/#getbrands) сервиса инструментов можно получить список всех брендов. +1. [Brands](/investAPI/instruments/#getbrands) — получить список всех брендов. -Используя метод [getBrandBy](/investAPI/instruments/#getbrandby) сервиса инструментов можно найти бренд по его идентификатору. +2. [BrandBy](/investAPI/instruments/#getbrandby) — найти бренд по его идентификатору. -###Как по позиции найти инструмент? +### Как по позиции найти инструмент? -Для поиска инструмента по идентификатору позиции (Position_uid) добавлен тип идентификатора инструмента - INSTRUMENT_ID_TYPE_POSITION_UID. +Для поиска инструмента по идентификатору позиции (`position_uid`) есть тип идентификатора инструмента — `INSTRUMENT_ID_TYPE_POSITION_UID`. -Использовать `id_type = INSTRUMENT_ID_TYPE_POSITION_UID` можно методах: +Использовать `id_type = INSTRUMENT_ID_TYPE_POSITION_UID` можно в методах: -* [GetInstrumentBy](/investAPI/instruments/#getinstrumentby) - Метод получения основной информации об инструменте. -* [GetBondBy](/investAPI/instruments/#bondby) - Метод получения облигации по её идентификатору. -* [GetShareBy](/investAPI/instruments/#shareby) - Метод получения акции по её идентификатору. -* [GetEtfBy](/investAPI/instruments/#etfby) - Метод получения инвестиционного фонда по его идентификатору. -* [GetFutureBy](/investAPI/instruments/#futureby) - Метод получения фьючерса по его идентификатору. -* [GetOptionBy](/investAPI/instruments/#optionby) - Метод получения опциона по его идентификатору. -* [GetCurrencyBy](/investAPI/instruments/#currencyby) - Метод получения валюты по её идентификатору. +* [InstrumentBy](/investAPI/instruments/#getinstrumentby) — получить основную информацию об инструменте. +* [BondBy](/investAPI/instruments/#bondby) — получить облигацию по её идентификатору. +* [ShareBy](/investAPI/instruments/#shareby) — получить акцию по её идентификатору. +* [EtfBy](/investAPI/instruments/#etfby) — получить инвестиционный фонд по его идентификатору. +* [FutureBy](/investAPI/instruments/#futureby) — получить фьючерс по его идентификатору. +* [OptionBy](/investAPI/instruments/#optionby) — получить опцион по его идентификатору. +* [CurrencyBy](/investAPI/instruments/#currencyby) — получить валюту по её идентификатору. -###Ставки риска и их коэфффиценты +### Ставки риска и их коэфффиценты Чтобы лучше понять тему, вы можете ознакомиться с материалами, указанными в ссылках. Здесь же мы приведем лишь краткое определения и раскроем суть параметров. -**Ставка риска** — это показатель, который брокер использует для расчета суммы, которую вам нужно иметь на счете, чтобы открыть или поддерживать непокрытую позицию. Чем ниже ставка риска, тем крупнее может быть непокрытая позиция — то есть брокер будет готов одолжить больше активов. И наоборот — с высокой ставкой риска размер кредитного плеча в сделке будет небольшим или его не будет вовсе. Больше о [ставках риска](https://www.tinkoff.ru/invest/help/brokerage/account/margin/about/#q5). +**Ставка риска** — это показатель, который брокер использует для расчёта суммы, которую вам нужно иметь на счёте, чтобы открыть или поддерживать непокрытую позицию. Чем ниже ставка риска, тем крупнее может быть непокрытая позиция — то есть брокер будет готов одолжить больше активов. И наоборот: с высокой ставкой риска размер кредитного плеча в сделке будет небольшим или его не будет вообще. [Подробнее о ставках риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). -**Стандартный и повышенный уровни риска**. Клиенты российских брокеров — физические лица — делятся на две категории: клиенты со стандартным уровнем риска (**КСУР**) и клиенты с повышенным уровнем риска (**КПУР**). Клиентам со стандартным уровнем доступно меньшее **кредитное плечо**, чем КПУР. +**Уровни риска** — Клиенты российских брокеров — физические лица делятся на несколько категорий. Каждой категории соответствует свое кредитное плечо. В методах сервиса инструментов в параметрах `dshort_client` и `dlong_client` передается ставка риска уже с учетом категории. -**Кредитное плечо** — это беспроцентный заем, который брокер предоставляет инвестору для совершения сделок на более крупные суммы. Это соотношение между собственными средствами трейдера и заемными деньгами, предоставляемыми брокером или дилинговым центром на специальных условиях. +**Кредитное плечо** — это беспроцентный заём, который брокер предоставляет инвестору для совершения сделок на более крупные суммы. Это соотношение между собственными средствами трейдера и заёмными деньгами, которые предоставляет брокер или дилинговый центр на специальных условиях. -**Начальная маржа** — это стоимость всех ликвидных активов и фьючерсов в портфеле инвестора, приведенная к рублям по биржевому курсу и умноженная на ставки риска этих активов +**Начальная маржа** — это стоимость всех ликвидных активов и фьючерсов в портфеле инвестора, приведённая к рублям по биржевому курсу и умноженная на ставки риска этих активов. -**Скорректированная маржа** — это показатель, аналогичный начальной марже, но при этом учитывающий выставленные вами лимитные заявки на увеличение позиции (на любую покупку или на продажу в шорт). +**Скорректированная маржа** — показатель, аналогичный начальной марже, но учитывающий выставленные вами лимитные заявки на увеличение позиции (на любую покупку или на продажу в шорт). **Минимальная маржа** — это половина от начальной или скорректированной маржи портфеля. -**Лонг, или длинная позиция**, — это сделка по покупке актива, когда инвестор ожидает роста его цены. Если инвесторы хотят заработать на растущем рынке, они торгуют в лонг. [Как торговать в шорт?](https://www.tinkoff.ru/invest/help/brokerage/account/margin/long/) +**Лонг, или длинная позиция** — это сделка по покупке актива, когда инвестор ожидает роста его цены. Если инвесторы хотят заработать на растущем рынке, они торгуют в лонг. + +**Шорт, или короткая позиция** — это сделка по продаже полученного в долг актива с целью выкупа его дешевле через некоторое время и заработка на разнице цен. Когда инвесторы хотят получить прибыль за счёт снижения стоимости актива, они торгуют в шорт — также это называется «игрой на понижение» или «непокрытой продажей». [Подробнее о торговле в шорт](https://www.tbank.ru/invest/help/brokerage/account/margin/short/). + +

В методах сервиса инструментов есть параметры, связанные со ставками риска:

+ + +Коэффициенты маржинальной торговли есть только у инструментов из [перечня ликвидного имущества](https://www.tbank.ru/invest/margin/equities/). + +### Как узнать, торгуется ли инструмент на выходных? + +В методах инстурментов есть флаг `weekend_flag`: + +- `true` — инструмент торгуется; +- `false` — инструмент не торгуется. + +### Какие заявки можно выставить по опционам? -**Шорт или короткая позиция**, - это сделка по продаже полученного в долг актива с целью через некоторое время выкупить его дешевле и заработать на разнице цен. Когда инвесторы хотят получить прибыль за счет снижения стоимости актива, они торгуют в шорт (также известен как «игра на понижение» или «непокрытая продажа»). [Как торговать в шорт?](https://www.tinkoff.ru/invest/help/brokerage/account/margin/short/) +Сейчас торговля опционами через API недоступна. +### Что такое `liquidity_flag`? -В методе сервиса инструментов в методах есть ряд параметров, связанных со ставками риска: +**Ликвидность** — это способность быстро продать актив по рыночной цене, то есть без скидок. Чем быстрее это можно сделать, тем выше ликвидность актива. -**klong** - Коэффициент ставки риска длинной позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР). 1 – клиент с повышенным уровнем риска (КПУР). -**kshort** - Коэффициент ставки риска короткой позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР). 1 – клиент с повышенным уровнем риска (КПУР). -**dlong** - Ставка риска начальной маржи для КСУР лонг. -**dshort** - Ставка риска начальной маржи для КСУР шорт. -**dlong_min** - Ставка риска начальной маржи для КПУР лонг. -**dshort_min** - Ставка риска начальной маржи для КПУР шорт. + Ликвидность инструмента на фондовом рынке оценивают по количеству совершаемых сделок — то есть по объёму торгов — и величине спреда. -Коэффициенты маржинальной торговли появляются только на тех инструментах, которые были в [перечне ликвидного имущества](https://www.tinkoff.ru/invest/margin/equities/). +**Спред** — это разница между максимальными ценами заявок на покупку и минимальными ценами заявок на продажу. Чем больше сделок и меньше разница, тем выше ликвидность. -###Как узнать торгуется ли инструмент на выходных? +Раз в полчаса брокер рассчитывает ликвидность по всем финансовым инструментам: -Для отображения информации о возможности торговли инструментам по выходным добавлен флаг `weekend_flag`. +- Для облигаций — `liquidity` = `((Среднедневная цена * current_nominal)/100) * (Дневной объём торгов)`. +- В остальных случаях — `liquidity` = `(Среднедневная цена) * (Дневной объём торгов)`. -###Какие заявки по опционам возможно выставить? +На основе значения `liqudity` для разных типов финансовых инструментов устанавливается значение флага `liquidity_flag`: -Торговля опционами через API в данный момент не доступна. +- `true` — инструмент считается ликвидным; +- `false` — инструмент не считается ликвидным. -###Что такое liquidity_flag? +### Корпоративные действия и изменение идентификатора инструмента -**Ликвидность** — это способность быстро продать какой-то актив по рыночной цене, то есть без скидок. Чем быстрее это можно сделать, тем выше ликвидность актива. +**Корпоративные действия** — это события, связанные с ценной бумагой: например, сплит, консолидация, конвертация и другие. Каждое корпоративное действие индивидуально и имеет свои условия. -Ликвидность инструмента на фондовом рынке оценивают по количеству совершаемых сделок (то есть по объему торгов) и величине спреда. **Спред** — это разница между максимальными ценами заявок на покупку и минимальными ценами заявок на продажу. Чем больше сделок и меньше разница, тем выше ликвидность. +Некоторые корпоративные действия приводят к изменению инструмента и его параметров на бирже — новый тикер, изменение лотности, шага цены, стоимости. После таких событий: -Раз в полчаса брокер рассчитывает ликвидность по всем финансовым инструментом: +* создаётся новый инструмент с новыми идентификаторами — FIGI, UID; +* позиция переносится на новый инструмент; +* операции начинают проводиться по созданному инструменту; +* старый инструмент помечается удалённым и становится недоступен в API; +* исторические данные по инструменту, который существовал до корпоративного действия, больше недоступны. -**Для облигаций:** +### Как скачать логотип компании? -liquidity = ((Среднедневная цена * current_nominal)/100) * (Дневной объем торгов) +В методах [GetBondBy](/investAPI/instruments/#bondby), [GetBonds](/investAPI/instruments/#bonds), [GetShareBy](/investAPI/instruments/#shareby), [GetShares](/investAPI/instruments/#shares), +[GetEtfBy](/investAPI/instruments/#etfby), [GetEtfs](/investAPI/instruments/#etfs), [GetFutureBy](/investAPI/instruments/#futureby), [GetFutures](/investAPI/instruments/#futures), +[GetCurrencyBy](/investAPI/instruments/#currencyby), [GetCurrencies](/investAPI/instruments/#currencies) есть информация о бренде, в том числе логотип компании. -**В остальных случаях:** +Чтобы скачать логотип, сформируйте запрос вида `https://invest-brands.cdn-tinkoff.ru/.png>`, где `.png>` — логотип компании с размерами в точках. Доступные размеры — 160x, 320x, 640x. -liquidity = (Среднедневная цена) * (Дневной объем торгов) +**Пример** -На основе значения *liqudity* для разных типов финансовых инструментов устанавливается значение флага *liquidity_flag*, который принимает для значения: +Логотип компании TCS Group — `US87238U20333.png`. Запрос будет одним из следующих: -- **true** - инструмент **считается** ликвидным -- **false** - инструмент **не считается** ликвидным \ No newline at end of file +| Размер логотипа | Запрос | +|:----------------|:-------------------------------------------------------------------------------------------------------------------------| +| 160x | [https://invest-brands.cdn-tinkoff.ru/US87238U20333x160.png](https://invest-brands.cdn-tinkoff.ru/US87238U20333x160.png) | +| 320x | [https://invest-brands.cdn-tinkoff.ru/US87238U20333x320.png](https://invest-brands.cdn-tinkoff.ru/US87238U20333x320.png) | +| 640x | [https://invest-brands.cdn-tinkoff.ru/US87238U20333x640.png](https://invest-brands.cdn-tinkoff.ru/US87238U20333x640.png) | \ No newline at end of file diff --git a/investAPI-main/src/docs/faq_java.md b/investAPI-main/src/docs/faq_java.md index 9c8d056..e7f72a7 100644 --- a/investAPI-main/src/docs/faq_java.md +++ b/investAPI-main/src/docs/faq_java.md @@ -1,39 +1,45 @@ -##SDK для Java +### Официальный SDK -####Официальные SDK: -* [invest-api-java-sdk](https://github.com/Tinkoff/invest-api-java-sdk) - -####Неофициальные SDK: +* [invest-api-java-sdk](https://github.com/RussianInvestments/invest-api-java-sdk). +- [Примеры подключения и получения данных](https://github.com/RussianInvestments/invest-api-java-sdk/blob/main/example/src/main/java/ru/tinkoff/piapi/example/Example.java). +### Основные классы для работы -##Примеры взаимодействия: +
    +
  • ManagedChannel — абстракция канала до сервера. Используйте один и тот же канал во всём приложении.

    +

    При создании канала рекомендуем использовать метод io.grpc.ManagedChannelBuilder#useTransportSecurity, так как сервер API поддерживает только защищённое соединение.

    +

    Для автоматической проверки работоспособности канала при иницииализации используйте метод io.grpc.ManagedChannelBuilder#keepAliveTime. Допустимое время keepAlive — не меньше 10 секунд.

    +
  • +
  • Stub — сгенерированные классы клиентов для сервисов API. Есть три варианта клиентов:

    +
      +
    • Не блокирующий — ServiceNameStub, например InstrumentsServiceStub. Все методы такого клиента принимают два параметра: запрос и обработчик результата вызова io.grpc.stub.StreamObserver. Методы обработчика будут вызваны после получения результата. Не рекомендуется выполнять блокирующие операции (I/O, любые операции с ожиданием завершения) в методах обработчика.
    • +
    • Блокирующий — ServiceNameBlockingStub, например InstrumentsServiceBlockingStub. Все методы такого клиента принимают один параметр — запрос — и возвращают результат либо выбрасывают исключение. Вызов метода блокирует поток исполнения до получения результата или исключения.
    • +
    • Асинхронный — ServiceNameFutureStub, например InstrumentsServiceFutureStub. Все методы такого клиента принимают один параметр — запрос — и возвращают объект типа com.google.common.util.concurrent.ListenableFuture.
    • +
    +
  • +
-Примеры подключения и получения данных доступны в репозитории официальной SDK: -[/tinkoff/piapi/example/Example.java](https://github.com/Tinkoff/invest-api-java-sdk/blob/main/example/src/main/java/ru/tinkoff/piapi/example/Example.java) +### Таймаут запроса -### Основные классы для работы -`ManagedChannel` - абстракция канала до сервера. Следует переиспользовать один и тот же канал во всем приложении. +В gRPC вместо таймаута используется `deadline` — время в будущем, до наступления которого будет ожидаться выполнение вызова. -При создании канала следует использовать метод `io.grpc.ManagedChannelBuilder#useTransportSecurity`, т.к. сервер API поддерживает только защищенное соединение. +Если результат не получен и deadline наступил, возникнет ошибка с кодом `DEADLINE_EXCEEDED`. При этом может быть ситуация, когда на сервере API операция была обработана успешно. Для критичных действий используйте ключ идемпотентности. -Для автоматической проверки работоспособности канала следует использовать метод `io.grpc.ManagedChannelBuilder#keepAliveTime` при иницииализации. Допускается время `keepAlive` не менее 10 секунд. +Рекомендуем устанавливать `deadline` через метод `io.grpc.stub.AbstractStub#withDeadlineAfter`. -`*Stub` - сгенерированные классы клиентов для сервисов API. -Существует три варианта клиентов: -1. Неблокирующий - `ServiceNameStub`, например `InstrumentsServiceStub`. Все методы такого клиента принимают два параметра: запрос и обработчик результата вызова `io.grpc.stub.StreamObserver`. Методы обработчика будут вызваны после получения результата. Не рекомендуется выполнять блокирующие операции (I/O, любые операции с ожиданием завершения) в методах обработчика. -2. Блокирующий - `ServiceNameBlockingStub`, например `InstrumentsServiceBlockingStub`. Все методы такого клиента принимают один параметр - запрос и возвращают результат либо выбрасывают исключение. Вызов метода блокирует поток исполнения до получения результата или исключения. -3. Асинхронный - `ServiceNameFutureStub`, например `InstrumentsServiceFutureStub`. Все методы такого клиента принимают один параметр - запрос и возвращают объект типа `com.google.common.util.concurrent.ListenableFuture`. +>**Обратите внимание**
+>Период времени начинает отсчитываться сразу после отправки запроса через метод. -### Таймаут запроса -В gRPC используется deadline вместо таймаута - время в будущем, до наступления которого будет проводится ожидание выполнения вызова. Если результат не получен, и время deadline наступило - на клиенте возникнет ошибка с кодом `DEADLINE_EXCEEDED`. При этом возможна ситуация, что на сервере API операция была обработана успешно. Для критичных действий предлагается использовать ключ идемпотентности. +### Метаданные -Рекомендуемый способ установки deadline: вызов метода `io.grpc.stub.AbstractStub#withDeadlineAfter`. Обратите внимание, что период времени начинает отсчитываться сразу после выполнения этого метода. +Метаданные — аналог заголовков в HTTP. -### Метаданные -Метаданные - аналог заголовков в HTTP. #### Передача метаданных запроса -Для использования API необходимо передавать метаданные с ключом `"Authorization"` и значением `"bearer {token}"`. [Подробнее здесь](https://tinkoff.github.io/investAPI/token/). -Можно добавить перехватчик в канал с помощью метода `io.grpc.ManagedChannelBuilder#intercept(io.grpc.ClientInterceptor...)`. Пример авторизационного перехватичка: + +Чтобы использовать API, нужно передавать метаданные с ключом `Authorization` и значением `bearer {token}`. [Подробнее](https://russianinvestments.github.io/investAPI/token/). + +Перехватчик можно добавить в канал через метод `io.grpc.ManagedChannelBuilder#intercept(io.grpc.ClientInterceptor...)`. Пример авторизационного перехватичка: + ```java public class AuthInterceptor implements ClientInterceptor { @@ -61,13 +67,16 @@ public class AuthInterceptor implements ClientInterceptor { ``` #### Получение метаданных ответа -В метаданных ответа для unary-методов передаются [идентификатор отслеживания](https://tinkoff.github.io/investAPI/grpc/#tracking-id) и описание ошибки. + +В метаданных ответа для Unary-методов передаются [идентификатор отслеживания](https://russianinvestments.github.io/investAPI/grpc/#tracking-id) и описание ошибки. + Для получения метаданных ответа можно использовать перехватчик `io.grpc.stub.MetadataUtils#newCaptureMetadataInterceptor`, например: ```java var headersCapture = new AtomicReference(); var trailersCapture = new AtomicReference(); instruments.withInterceptors(MetadataUtils.newCaptureMetadataInterceptor(headersCapture, trailersCapture)).getInstrumentBy(...); ``` -После выполнения метода переменная `headersCapture` будет содержать метаданные ответа. -При работе с методами клиентов исключения следует конвертировать в статус с помощью `io.grpc.Status#fromThrowable`. В поле `description` статуса будет содержаться [код ошибки](https://tinkoff.github.io/investAPI/errors/). \ No newline at end of file +После исполнения метода метаданные ответа вернутся в переменной `headersCapture`. + +При работе с методами клиентов конвертируйте исключения в статус через `io.grpc.Status#fromThrowable`. В поле `description` статуса вернётся [код ошибки](https://russianinvestments.github.io/investAPI/errors/). \ No newline at end of file diff --git a/investAPI-main/src/docs/faq_marketdata.md b/investAPI-main/src/docs/faq_marketdata.md index c3c4edc..e78a01c 100644 --- a/investAPI-main/src/docs/faq_marketdata.md +++ b/investAPI-main/src/docs/faq_marketdata.md @@ -1,34 +1,16 @@ -####[Что такое шаг цены?](#2.1) -####[Отличие лотов и количества инструментов](#2.2) -####[Цены облигаций и фьючерсов](#2.3) -####[Формулы расчета реальной стоимости инструментов в валюте ](#2.4) -####[Какие интервалы доступны при запросе исторических свечей?](#2.5) -####[Как одним запросом получить последние цены по нескольким инструментам?](#2.6) -####[Как подписаться на разные типы данных в рамках stream-соединения сервиса котировок?](#2.7) -####[Внебиржевые инструменты в TINKOFF INVEST API](#2.8) -####[Какие данные отливаются в стриминг стаканов?](#2.9) -####[Торговля бумагами Тинькофф через TINKOFF INVEST API](#2.10) -####[Валюты в TINKOFF INVEST API](#2.11) -####[Почему отличаются исторические цены в TINKOFF INVEST API и других источниках?](#2.12) -####[Как получить исторические рыночные данные?](#2.13) -####[Какое максимальное количество запросов на подписку в MarketDataStream?](#2.14) -####[Как узнать дату, с которой можно получить свечи по инструменту?](#2.15) -####[Как узнать доступности торгов инструментом через API?](#2.16) -###[Какой идентификатор инструмента использовать для получения данных в сервисе котировок?](#2.17) - -###Что такое шаг цены? - -Шаг цены — это минимальное изменение цены определенного инструмента. - -####Пример - -Шаг цены для инструмента = `0.1`, а последняя цена = `10.5` — это означает, что заявка может быть выставлена по одной из следующих цен: - -* 10.4 -* 10.5 -* 10.6 - -Цена `10.55` будет некорректной и заявка не будет выставлена. +### Что такое шаг цены? + +Шаг цены — это минимальное изменение цены определёного инструмента. + +**Пример** + +Шаг цены для инструмента — `0.1`, последняя цена — `10.5`. Это значит, что заявка может быть выставлена по одной из следующих цен: + +* 10.4, +* 10.5, +* 10.6. + +Цена `10.55` будет некорректной, заявка не выставится. ```scala def isValidPrice(price: BigDecimal, increment: BigDecimal): Boolean = { @@ -39,24 +21,23 @@ isValidPrice(10.1, 0.1) // true isValidPrice(10.16, 0.1) // false ``` -###Отличие лотов и количества инструментов +### Отличие лотов и количества инструментов + +При работе с T-Invest API обращайте особое внимание на различие понятий +лот и количество ценных бумаг. -При работе с сервисом TINKOFF INVEST API следует обращать особое внимание на различия понятий -лот и количество ценных бумаг. Все цены в [сервисе котировок](/investAPI/head-marketdata/) предоставляются -за одну ценную бумагу. Данное правило касается методов [GetLastPrice](/investAPI/marketdata#getlastprices), -[GetCandles](/investAPI/marketdata#getcandles), а так же подписки на эти данные в рамках [stream-соединений](/investAPI/marketdata#marketdatastreamservice) -данного сервиса. +Все цены в [сервисе котировок](/investAPI/head-marketdata/) предоставляются за одну ценную бумагу. Это правило касается методов [GetLastPrice](/investAPI/marketdata#getlastprices) и [GetCandles](/investAPI/marketdata#getcandles), а также подписки на эти данные в рамках [stream-соединений](/investAPI/marketdata#marketdatastreamservice) сервиса. -При получении данных по стакану или сделкам объём этих сделок отображается в лотах. Т.е. параметр quantity -метода [GetOrderBook](/investAPI/marketdata#getorderbook) и пакета [trade](/investAPI/marketdata#trade) в рамках -[stream-соединений](/investAPI/marketdata#marketdatastreamservice) сервиса отображается в **лотах** +Если вы получаете данные по стакану или сделкам, объём этих сделок отображается в лотах. То есть параметр `quantity` метода [GetOrderBook](/investAPI/marketdata#getorderbook) и пакета [trade](/investAPI/marketdata#trade) в рамках [stream-соединений](/investAPI/marketdata#marketdatastreamservice) сервиса отображается в лотах. -###Цены облигаций и фьючерсов +### Цены облигаций и фьючерсов -Цены облигаций и фьючерсов в TINKOFF INVEST API предоставляются в пунктах. Методика расчёта стоимости +Цены облигаций и фьючерсов в T-Invest API предоставляются в пунктах. Методика расчёта стоимости лота в валюте отличается в зависимости от типа биржевого инструмента. -##Формулы расчета реальной стоимости инструментов в валюте +## Формулы расчёта реальной стоимости инструментов в валюте + +Значения: * **price** — текущая котировка ценной бумаги; * **nominal** — номинал облигации; @@ -64,126 +45,117 @@ isValidPrice(10.16, 0.1) // false * **min_price_increment_amount** — стоимость шага цены; * **lot** - лотность инструмента. -###Акции - -> **price** * **lot** - -###Облигации +### Акции -Пункты цены для котировок облигаций представляют собой проценты номинала облигации. Для пересчёта пунктов -в валюту можно воспользоваться формулой: +Формула расчёта: **price** * **lot**. -> **price** / 100 * **nominal** +### Облигации +Пункты цены для котировок облигаций — это проценты номинала облигации. Формула для пересчёта пунктов в валюту: +**price** / 100 * **nominal**. -###Валюта +### Валюта -> **price** * **lot** / **nominal** +Формула расчёта: **price** * **lot** / **nominal**. -**Важно!** При торговле валютой необходимо учитывать, что такие валюты как Иена, Армянский драм и Тенге имеют nominal = 100 +>**Важно**
+>При торговле валютой учитывайте, что у таких валют как Иена, Армянский драм и Тенге `nominal` отличный от `1`. - -###Фьючерсы +### Фьючерсы -Стоимость фьючерсов так же предоставляется в пунктах, для пересчёта можно воспользоваться формулой: +Стоимость фьючерсов предоставляется в пунктах. Формула расчёта: **price** / **min_price_increment** * **min_price_increment_amount**. -> **price** / **min_price_increment** * **min_price_increment_amount** +Также при работе с фьючерсами важно учитывать размер гарантийного обеспечения. Узнать эти параметры фьючерсов +можно чрез метод [getFuturesMargin](/investAPI/instruments#getfuturesmargin). -Так же при работе с фьючерсами важно учитывать размер гарантийного обеспечения. Узнать эти параметры фьючерсов -можно при помощи метода: [getFuturesMargin](/investAPI/instruments#getfuturesmargin). Подробнее про срочный -рынок читайте [тут](https://help.tinkoff.ru/forts/) +[Подробнее про срочный рынок](https://help.tbank.ru/forts/) -###Какие интервалы доступны при запросе исторических свечей? +### Какие интервалы доступны при запросе исторических свечей? Метод [GetCandles](/investAPI/marketdata#getcandles) позволяет получать исторические свечи разных -таймфреймов. Существует ограничение на максимальный и минимальный период запроса для каждого интервала +временных интервалов. Есть ограничения на максимальный и минимальный период запроса для каждого интервала свечей: |Запрошенный интервал свечей|Допустимый период запроса| |:---|---:| -| CANDLE_INTERVAL_UNSPECIFIED | Интервал не определён. | -| CANDLE_INTERVAL_1_MIN | от 1 минуты до 1 дня. | -| CANDLE_INTERVAL_5_MIN | от 5 минут до 1 дня. | -| CANDLE_INTERVAL_15_MIN | от 15 минут до 1 дня. | -| CANDLE_INTERVAL_HOUR | от 1 часа до 1 недели. | -| CANDLE_INTERVAL_DAY | от 1 дня до 1 года. | -| CANDLE_INTERVAL_2_MIN | от 2 минут до 1 дня. | -| CANDLE_INTERVAL_3_MIN | от 3 минут до 1 дня. | -| CANDLE_INTERVAL_10_MIN | от 10 минут до 1 дня. | -| CANDLE_INTERVAL_30_MIN | от 30 минут до 2 дней. | -| CANDLE_INTERVAL_2_HOUR | от 2 часов до 1 месяца. | -| CANDLE_INTERVAL_4_HOUR | от 4 часов до 1 месяца. | -| CANDLE_INTERVAL_WEEK | от 1 недели до 2 лет. | -| CANDLE_INTERVAL_MONTH | от 1 месяца до 10 лет. | - -**Важно!** При запросе дневных свечей CANDLE_INTERVAL_DAY время, переданное в поля from и to игнорируется, -Т.е. при запросе дневной свечи по интервалу с 12:00 01.01.2021 по 07:00 02.01.2021 вернётся две дневных -свечи за 01.01.2021 и за 02.01.2021 - -**Важно!** При попытке получить данные с временным интервалом меньше временного интервала данного таймфрейма, ответом метода будет возвращен пустой массив. Например, если интервал при запросе дневных свечей (CANDLE_INTERVAL_DAY) инструмента будет 1 час. - -###Как одним запросом получить последние цены по нескольким инструментам? - -Для получения цен последних сделок по массиву инструментов можно методом -[GetLastPrices](/investAPI/marketdata#getlastprices). Во входные параметры метода можно передать массив +| CANDLE_INTERVAL_UNSPECIFIED | Интервал не определен. | +| CANDLE_INTERVAL_1_MIN | От 1 минуты до 1 дня (лимит 2400). | +| CANDLE_INTERVAL_5_MIN | От 5 минут до недели (лимит 2400). | +| CANDLE_INTERVAL_15_MIN | От 15 минут до 3 недель (лимит 2400). | +| CANDLE_INTERVAL_HOUR | От 1 часа до 3 месяцев (лимит 2400). | +| CANDLE_INTERVAL_DAY | От 1 дня до 6 лет (лимит 2400). | +| CANDLE_INTERVAL_2_MIN | От 2 минут до 1 дня (лимит 1200). | +| CANDLE_INTERVAL_3_MIN | От 3 минут до 1 дня (лимит 750). | +| CANDLE_INTERVAL_10_MIN | От 10 минут до недели (лимит 1200). | +| CANDLE_INTERVAL_30_MIN | От 30 минут до 3 недель (лимит 1200). | +| CANDLE_INTERVAL_2_HOUR | От 2 часов до 3 месяцев (лимит 2400). | +| CANDLE_INTERVAL_4_HOUR | От 4 часов до 3 месяцев (лимит 700). | +| CANDLE_INTERVAL_WEEK | От 1 недели до 5 лет (лимит 300). | +| CANDLE_INTERVAL_MONTH | От 1 месяца до 10 лет (лимит 120). | + +>**Важно**
+>При запросе дневных свечей `CANDLE_INTERVAL_DAY` время, которое передаётся в полях `from` и `to`, игнорируется.
+>Например, при запросе дневной свечи по интервалу с 12:00 01.01.2021 по 07:00 02.01.2021 вернутся две дневные +свечи за 01.01.2021 и за 02.01.2021. + +>**Важно**
+>Если попытаться получить данные с временным интервалом меньше временного интервала данного таймфрейма, в ответе метода вернётся пустой массив. Например, если интервал при запросе дневных свечей (CANDLE_INTERVAL_DAY) инструмента будет 1 час. + +### Как одним запросом получить последние цены по нескольким инструментам? + +Через метод [GetLastPrices](/investAPI/marketdata#getlastprices) — в запросе передайте массив идентификаторов инструментов. -###Как подписаться на разные типы данных в рамках stream-соединения сервиса котировок? +### Как подписаться на разные типы данных в рамках stream-соединения сервиса котировок? -Bi-directional stream Сервиса котировок поддерживает одновременную подписку на разные типы данных (свечи, -стаканы, сделки и т.п.) в рамках одного соединения. Для этого следует последовательно отправить пакеты -подписки на разные данные. Т.е. отдельно реализуется подписка на свечи, отдельно на стаканы и т.п. -Подробнее можно узнать в примерах выбранного вами SDK. +Bidirectional stream сервиса котировок поддерживает одновременную подписку на разные типы данных — свечи, +стаканы, сделки и другие в рамках одного соединения. -###Внебиржевые инструменты в TINKOFF INVEST API +Для этого нужно последовательно отправить пакеты подписки на разные данные — то есть отдельно подписаться подписаться на свечи, стаканы и так далее. Подробнее смотрите в примерах выбранного вами SDK. -В данный момент TINKOFF INVEST API предполагает работу только с биржевыми инструментами. +### Внебиржевые инструменты в T-Invest API -###Какие данные отливаются в стриминг стаканов? +Сейчас T-Invest API предполагает работу только с биржевыми инструментами. -Пока только биржевые. Внебиржевые стаканы, например, TRRE, не транслируются в режиме стриминга. - -###Торговля бумагами Тинькофф через TINKOFF INVEST API +### Какие данные отливаются в стриминг стаканов? -Из-за огромного количества скальперских сделок мы закрыли торговлю БПИФ от УК "Тинькофф Капитал" в TINKOFF INVEST API. -Список бумаг смотрите [здесь](https://tinkoff.github.io/invest-openapi/). +Пока только биржевые. Внебиржевые стаканы, например, TRRE, не транслируются в режиме стриминга. -###Валюты в TINKOFF INVEST API +### Валюты в T-Invest API -Получить список доступных валют можно при помощи метода [getInstruments/currencies](/investAPI/instruments#currencies). +Получить список доступных валют можно через метод [getInstruments/currencies](/investAPI/instruments#currencies). -Обратите внимание, что лотность валют ограничена лотностью, которая предоставляет биржа. Например, операции -с Евро и Долларами возможны только на количества кратные 1000. +Обратите внимание: лотность валют ограничена лотностью, которую предоставляет биржа. Например, операции +с евро и долларами возможны только на количества, кратные 1000. -###Почему отличаются исторические цены в TINKOFF INVEST API и других источниках? +### Почему отличаются исторические цены в T-Invest API и других источниках? -Исторические данные [Тинькофф Инвестиций](https://www.tinkoff.ru/invest/) могут отличаться от данных, -которые предоставляют другие сервисы. Связано это может быть как с различными источниками первичных данных, +Исторические данные [Т-Инвестиций](https://www.tbank.ru/invest/) могут отличаться от данных, +которые предоставляют другие сервисы. Это может быть связано как с различными источниками первичных данных, так и с различными алгоритмами их обработки и агрегации. -###Как получить исторические рыночные данные? +### Как получить исторические рыночные данные? -Исторические рыночные данные можно загрузить в виде архива используя метод [Загрузка исторических рыночных данных в виде архива](/investAPI/get_history/). +Через метод [Загрузка исторических рыночных данных в виде архива](/investAPI/get_history/). +### Какое максимальное количество запросов на подписку в [MarketDataStream](/investAPI/marketdata/#marketdatastream)? -###Какое максимальное количество запросов на подписку в [MarketDataStream](/investAPI/marketdata/#marketdatastream)? +Для всех типов подписок в методе [MarketDataStream](/investAPI/marketdata/#marketdatastream) установлены ограничения максимального количества запросов на подписку. -Для всех типов подписок в [методе](/investAPI/marketdata/#marketdatastream) установлены ограничения максимального количества запросов на подписку. -Если количество запросов за минуту превысит 100, то для всех элементов будет установлен статус [SUBSCRIPTION_STATUS_TOO_MANY_REQUESTS](/investAPI/marketdata/#subscriptionstatus). +Максимальное количество запросов в минуту — 100. Если количество запросов за минуту превысит 100, для всех элементов будет установлен статус [SUBSCRIPTION_STATUS_TOO_MANY_REQUESTS](/investAPI/marketdata/#subscriptionstatus). -Максимальное количество запросов в минуту = 100. +### Как узнать дату, с которой можно получить свечи по инструменту? -###Как узнать дату, с которой можно получить свечи по инструменту? +Чтобы понять, с какой даты запрашивать свечи по инструменту, в [сервисе инструментов](/investAPI/head-instruments/) T-Invest API есть параметры `first_1min_candle_date` и `first_1day_candle_date`. -Для того что бы понять с какой даты запрашивать свечи по инструменту в [Сервис инструментов](/investAPI/head-instruments/) TINKOFF INVEST API добавлены параметры `first_1min_candle_date` и `first_1day_candle_date`. -Данные параметры возвращаются в методах получения информации об инструментах. Параметр `first_1min_candle_date` возвращает дату первой минутной свечи, а `first_1day_candle_date` дату первой дневной свечи. +Они возвращаются в методах получения информации об инструментах. Параметр `first_1min_candle_date` возвращает дату первой минутной свечи, `first_1day_candle_date` — дату первой дневной свечи. -###Как узнать доступности торгов инструментом через API? +### Как узнать доступности торгов инструментом через API? -Узнать доступность торгов инструментом можно по параметру `api_trade_available_flag` в методе [getTradingStatus](/investAPI/marketdata/#gettradingstatus) или [FindInstrument](/investAPI/instruments/#findinstrument). +По параметру `api_trade_available_flag` в методах [getTradingStatus](/investAPI/marketdata/#gettradingstatus) или [FindInstrument](/investAPI/instruments/#findinstrument). +### Какой идентификатор инструмента использовать для получения данных в сервисе котировок? -###Какой идентификатор инструмента использовать для получения данных в сервисе котировок? +Все методы сервиса котировок принимают на вход параметр `instrumentId`, в котором можно передать значение **instrument_uid** или **FIGI**. -Все методы сервиса котировок принимают на вход `instrumentId` - параметр, в который можно передать значение **instrument_uid** *или* **FIGI**. -Получить более подробную информацию можно на странице [об идентификаторах инструментов](/investAPI/faq_identification/). \ No newline at end of file +[Подробнее об идентификаторах инструментов](/investAPI/faq_identification/) \ No newline at end of file diff --git a/investAPI-main/src/docs/faq_multiaccounts.md b/investAPI-main/src/docs/faq_multiaccounts.md index 14da2df..ba4c982 100644 --- a/investAPI-main/src/docs/faq_multiaccounts.md +++ b/investAPI-main/src/docs/faq_multiaccounts.md @@ -8,12 +8,12 @@ избытком, а на другом при нехватке средств и активной маржинальной торговле может наступить маржин-колл. -##Поддерживаются ли сейчас мультисчета в TINKOFF INVEST API? -Да, в TINKOFF INVEST API можно работать с несколькими счетами. Все ключевые методы принимают +##Поддерживаются ли сейчас мультисчета в T-Invest API? +Да, в T-Invest API можно работать с несколькими счетами. Все ключевые методы принимают на вход параметр *account_id* (идентификатор счёта). + + diff --git a/investAPI-main/src/docs/swagger-ui/openapi.yaml b/investAPI-main/src/docs/swagger-ui/openapi.yaml index d553d99..662c39b 100644 --- a/investAPI-main/src/docs/swagger-ui/openapi.yaml +++ b/investAPI-main/src/docs/swagger-ui/openapi.yaml @@ -1,10 +1,10 @@ openapi: 3.0.1 info: - title: Tinkoff Invest API - termsOfService: https://www.tinkoff.ru/invest/disclaimers/basic-information/ + title: T-Invest API + termsOfService: https://www.tbank.ru/invest/disclaimers/basic-information/ contact: - email: al.a.volkov@tinkoff.ru - version: '1.4' + email: al.a.volkov@tbank.ru + version: '1.27' license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0 @@ -16,8 +16,8 @@ servers: security: - Bearer: [] externalDocs: - description: Документация Tinkoff Invest API - url: https://tinkoff.github.io/investAPI/ + description: Документация T-Invest API + url: https://russianinvestments.github.io/investAPI/ tags: - name: InstrumentsService - name: MarketDataService @@ -35,6 +35,7 @@ paths: application/json: schema: $ref: '#/components/schemas/v1InstrumentRequest' + description: Запрос получения инструмента по идентификатору. required: true responses: '200': @@ -43,13 +44,89 @@ paths: schema: $ref: '#/components/schemas/v1BondResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения облигации по её идентификатору. + summary: Получить облигации по её идентификатору. tags: - InstrumentsService x-codegen-request-body-name: body @@ -61,6 +138,7 @@ paths: application/json: schema: $ref: '#/components/schemas/v1InstrumentsRequest' + description: Запрос получения инструментов. required: true responses: '200': @@ -69,13 +147,89 @@ paths: schema: $ref: '#/components/schemas/v1BondsResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения списка облигаций. + summary: Получить список облигаций. tags: - InstrumentsService x-codegen-request-body-name: body @@ -87,6 +241,7 @@ paths: application/json: schema: $ref: '#/components/schemas/v1InstrumentsRequest' + description: Запрос получения инструментов. required: true responses: '200': @@ -95,13 +250,89 @@ paths: schema: $ref: '#/components/schemas/v1CurrenciesResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения списка валют. + summary: Получить список валют. tags: - InstrumentsService x-codegen-request-body-name: body @@ -113,6 +344,7 @@ paths: application/json: schema: $ref: '#/components/schemas/v1InstrumentRequest' + description: Запрос получения инструмента по идентификатору. required: true responses: '200': @@ -121,13 +353,89 @@ paths: schema: $ref: '#/components/schemas/v1CurrencyResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения валюты по её идентификатору. + summary: Получить валюту по её идентификатору. tags: - InstrumentsService x-codegen-request-body-name: body @@ -139,6 +447,7 @@ paths: application/json: schema: $ref: '#/components/schemas/v1EditFavoritesRequest' + description: Запрос редактирования списка избранных инструментов. required: true responses: '200': @@ -147,13 +456,89 @@ paths: schema: $ref: '#/components/schemas/v1EditFavoritesResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод редактирования списка избранных инструментов. + summary: Отредактировать список избранных инструментов. tags: - InstrumentsService x-codegen-request-body-name: body @@ -165,6 +550,7 @@ paths: application/json: schema: $ref: '#/components/schemas/v1InstrumentRequest' + description: Запрос получения инструмента по идентификатору. required: true responses: '200': @@ -173,13 +559,89 @@ paths: schema: $ref: '#/components/schemas/v1EtfResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения инвестиционного фонда по его идентификатору. + summary: Получить инвестиционный фонд по его идентификатору. tags: - InstrumentsService x-codegen-request-body-name: body @@ -191,6 +653,7 @@ paths: application/json: schema: $ref: '#/components/schemas/v1InstrumentsRequest' + description: Запрос получения инструментов. required: true responses: '200': @@ -199,13 +662,89 @@ paths: schema: $ref: '#/components/schemas/v1EtfsResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения списка инвестиционных фондов. + summary: Получить список инвестиционных фондов. tags: - InstrumentsService x-codegen-request-body-name: body @@ -217,6 +756,7 @@ paths: application/json: schema: $ref: '#/components/schemas/v1FindInstrumentRequest' + description: Запрос на поиск инструментов. required: true responses: '200': @@ -225,13 +765,89 @@ paths: schema: $ref: '#/components/schemas/v1FindInstrumentResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод поиска инструмента. + summary: Найти инструмент. tags: - InstrumentsService x-codegen-request-body-name: body @@ -243,6 +859,7 @@ paths: application/json: schema: $ref: '#/components/schemas/v1InstrumentRequest' + description: Запрос получения инструмента по идентификатору. required: true responses: '200': @@ -251,13 +868,89 @@ paths: schema: $ref: '#/components/schemas/v1FutureResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения фьючерса по его идентификатору. + summary: Получить фьючерс по его идентификатору. tags: - InstrumentsService x-codegen-request-body-name: body @@ -269,6 +962,7 @@ paths: application/json: schema: $ref: '#/components/schemas/v1InstrumentsRequest' + description: Запрос получения инструментов. required: true responses: '200': @@ -277,13 +971,89 @@ paths: schema: $ref: '#/components/schemas/v1FuturesResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения списка фьючерсов. + summary: Получить список фьючерсов. tags: - InstrumentsService x-codegen-request-body-name: body @@ -295,6 +1065,7 @@ paths: application/json: schema: $ref: '#/components/schemas/v1GetAccruedInterestsRequest' + description: Запрос НКД по облигации. required: true responses: '200': @@ -303,13 +1074,89 @@ paths: schema: $ref: '#/components/schemas/v1GetAccruedInterestsResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения накопленного купонного дохода по облигации. + summary: Получить накопленный купонный доход по облигации. tags: - InstrumentsService x-codegen-request-body-name: body @@ -321,6 +1168,7 @@ paths: application/json: schema: $ref: '#/components/schemas/v1AssetRequest' + description: Запрос актива по идентификатору. required: true responses: '200': @@ -329,1337 +1177,5020 @@ paths: schema: $ref: '#/components/schemas/v1AssetResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения актива по его идентификатору. + summary: Получить актив по его идентификатору. tags: - InstrumentsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.InstrumentsService/GetAssets: + /tinkoff.public.invest.api.contract.v1.InstrumentsService/GetAssetFundamentals: post: - operationId: InstrumentsService_GetAssets + operationId: InstrumentsService_GetAssetFundamentals requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1AssetsRequest' + $ref: '#/components/schemas/v1GetAssetFundamentalsRequest' required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1AssetsResponse' + $ref: '#/components/schemas/v1GetAssetFundamentalsResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения списка активов. + summary: Получить фундаментальные показатели по активу. tags: - InstrumentsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.InstrumentsService/GetBondCoupons: + /tinkoff.public.invest.api.contract.v1.InstrumentsService/GetAssetReports: post: - operationId: InstrumentsService_GetBondCoupons + operationId: InstrumentsService_GetAssetReports requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1GetBondCouponsRequest' + $ref: '#/components/schemas/v1GetAssetReportsRequest' required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1GetBondCouponsResponse' + $ref: '#/components/schemas/v1GetAssetReportsResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения графика выплат купонов по облигации. + summary: Получить расписания выхода отчётностей эмитентов. tags: - InstrumentsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.InstrumentsService/GetBrandBy: + /tinkoff.public.invest.api.contract.v1.InstrumentsService/GetAssets: post: - operationId: InstrumentsService_GetBrandBy + operationId: InstrumentsService_GetAssets requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1GetBrandRequest' + $ref: '#/components/schemas/v1AssetsRequest' + description: Запрос списка активов. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1Brand' + $ref: '#/components/schemas/v1AssetsResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения бренда по его идентификатору. + summary: >- + Получить список активов. Метод работает для всех инструментов, кроме + срочных — фьючерсов и опционов. tags: - InstrumentsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.InstrumentsService/GetBrands: + /tinkoff.public.invest.api.contract.v1.InstrumentsService/GetBondCoupons: post: - operationId: InstrumentsService_GetBrands + operationId: InstrumentsService_GetBondCoupons requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1GetBrandsRequest' + $ref: '#/components/schemas/v1GetBondCouponsRequest' + description: Запрос купонов по облигации. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1GetBrandsResponse' + $ref: '#/components/schemas/v1GetBondCouponsResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения списка брендов. + summary: Получить график выплат купонов по облигации. tags: - InstrumentsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.InstrumentsService/GetCountries: + /tinkoff.public.invest.api.contract.v1.InstrumentsService/GetBondEvents: post: - operationId: InstrumentsService_GetCountries + operationId: InstrumentsService_GetBondEvents requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1GetCountriesRequest' + $ref: '#/components/schemas/v1GetBondEventsRequest' + description: События по облигации. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1GetCountriesResponse' + $ref: '#/components/schemas/v1GetBondEventsResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения списка стран. + summary: Получить события по облигации tags: - InstrumentsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.InstrumentsService/GetDividends: + /tinkoff.public.invest.api.contract.v1.InstrumentsService/GetBrandBy: post: - operationId: InstrumentsService_GetDividends + operationId: InstrumentsService_GetBrandBy requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1GetDividendsRequest' + $ref: '#/components/schemas/v1GetBrandRequest' + description: Запрос бренда. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1GetDividendsResponse' + $ref: '#/components/schemas/v1Brand' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод для получения событий выплаты дивидендов по инструменту. + summary: Получить бренд по его идентификатору. tags: - InstrumentsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.InstrumentsService/GetFavorites: + /tinkoff.public.invest.api.contract.v1.InstrumentsService/GetBrands: post: - operationId: InstrumentsService_GetFavorites + operationId: InstrumentsService_GetBrands requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1GetFavoritesRequest' + $ref: '#/components/schemas/v1GetBrandsRequest' + description: Запрос списка брендов. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1GetFavoritesResponse' + $ref: '#/components/schemas/v1GetBrandsResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения списка избранных инструментов. + summary: Получить список брендов. tags: - InstrumentsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.InstrumentsService/GetFuturesMargin: + /tinkoff.public.invest.api.contract.v1.InstrumentsService/GetConsensusForecasts: post: - operationId: InstrumentsService_GetFuturesMargin + operationId: InstrumentsService_GetConsensusForecasts requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1GetFuturesMarginRequest' + $ref: '#/components/schemas/v1GetConsensusForecastsRequest' required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1GetFuturesMarginResponse' + $ref: '#/components/schemas/v1GetConsensusForecastsResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения размера гарантийного обеспечения по фьючерсам. + summary: Получить мнения аналитиков по инструменту. tags: - InstrumentsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.InstrumentsService/GetInstrumentBy: + /tinkoff.public.invest.api.contract.v1.InstrumentsService/GetCountries: post: - operationId: InstrumentsService_GetInstrumentBy + operationId: InstrumentsService_GetCountries requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1InstrumentRequest' + $ref: '#/components/schemas/v1GetCountriesRequest' + description: Запрос справочника стран. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1InstrumentResponse' + $ref: '#/components/schemas/v1GetCountriesResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения основной информации об инструменте. + summary: Получить список стран. tags: - InstrumentsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.InstrumentsService/OptionBy: + /tinkoff.public.invest.api.contract.v1.InstrumentsService/GetDividends: post: - operationId: InstrumentsService_OptionBy + operationId: InstrumentsService_GetDividends requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1InstrumentRequest' + $ref: '#/components/schemas/v1GetDividendsRequest' + description: Запрос дивидендов. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1OptionResponse' + $ref: '#/components/schemas/v1GetDividendsResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения опциона по его идентификатору. + summary: Получить события выплаты дивидендов по инструменту. tags: - InstrumentsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.InstrumentsService/Options: + /tinkoff.public.invest.api.contract.v1.InstrumentsService/GetFavorites: post: - operationId: InstrumentsService_Options + operationId: InstrumentsService_GetFavorites requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1InstrumentsRequest' + $ref: '#/components/schemas/v1GetFavoritesRequest' + description: Запрос списка избранных инструментов, входные параметры не требуются. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1OptionsResponse' + $ref: '#/components/schemas/v1GetFavoritesResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Deprecated Метод получения списка опционов. + summary: Получить список избранных инструментов. tags: - InstrumentsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.InstrumentsService/OptionsBy: + /tinkoff.public.invest.api.contract.v1.InstrumentsService/GetForecastBy: post: - operationId: InstrumentsService_OptionsBy + operationId: InstrumentsService_GetForecastBy requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1FilterOptionsRequest' + $ref: '#/components/schemas/v1GetForecastRequest' + description: Запрос прогнозов инвестдомов. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1OptionsResponse' + $ref: '#/components/schemas/v1GetForecastResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения списка опционов. + summary: Получить прогнозов инвестдомов по инструменту. tags: - InstrumentsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.InstrumentsService/ShareBy: + /tinkoff.public.invest.api.contract.v1.InstrumentsService/GetFuturesMargin: post: - operationId: InstrumentsService_ShareBy + operationId: InstrumentsService_GetFuturesMargin requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1InstrumentRequest' + $ref: '#/components/schemas/v1GetFuturesMarginRequest' required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1ShareResponse' + $ref: '#/components/schemas/v1GetFuturesMarginResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения акции по её идентификатору. + summary: Получить размера гарантийного обеспечения по фьючерсам. tags: - InstrumentsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.InstrumentsService/Shares: + /tinkoff.public.invest.api.contract.v1.InstrumentsService/GetInstrumentBy: post: - operationId: InstrumentsService_Shares + operationId: InstrumentsService_GetInstrumentBy requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1InstrumentsRequest' + $ref: '#/components/schemas/v1InstrumentRequest' + description: Запрос получения инструмента по идентификатору. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1SharesResponse' + $ref: '#/components/schemas/v1InstrumentResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения списка акций. + summary: Получить основную информацию об инструменте. tags: - InstrumentsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.InstrumentsService/TradingSchedules: + /tinkoff.public.invest.api.contract.v1.InstrumentsService/Indicatives: post: - operationId: InstrumentsService_TradingSchedules + operationId: InstrumentsService_Indicatives requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1TradingSchedulesRequest' + $ref: '#/components/schemas/v1IndicativesRequest' required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1TradingSchedulesResponse' + $ref: '#/components/schemas/v1IndicativesResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения расписания торгов торговых площадок. + summary: Получить индикативные инструменты — индексы, товары и другие. tags: - InstrumentsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.MarketDataService/GetCandles: + /tinkoff.public.invest.api.contract.v1.InstrumentsService/OptionBy: post: - operationId: MarketDataService_GetCandles + operationId: InstrumentsService_OptionBy requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1GetCandlesRequest' + $ref: '#/components/schemas/v1InstrumentRequest' + description: Запрос получения инструмента по идентификатору. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1GetCandlesResponse' + $ref: '#/components/schemas/v1OptionResponse' description: A successful response. - default: + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. content: application/json: schema: - $ref: '#/components/schemas/rpcStatus' - description: An unexpected error response. - summary: Метод запроса исторических свечей по инструменту. - tags: - - MarketDataService - x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.MarketDataService/GetClosePrices: - post: - operationId: MarketDataService_GetClosePrices - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/v1GetClosePricesRequest' - required: true - responses: - '200': + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. content: application/json: schema: - $ref: '#/components/schemas/v1GetClosePricesResponse' - description: A successful response. + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод запроса цен закрытия торговой сессии по инструментам. + summary: Получить опцион по его идентификатору. tags: - - MarketDataService + - InstrumentsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.MarketDataService/GetLastPrices: + /tinkoff.public.invest.api.contract.v1.InstrumentsService/Options: post: - operationId: MarketDataService_GetLastPrices + operationId: InstrumentsService_Options requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1GetLastPricesRequest' + $ref: '#/components/schemas/v1InstrumentsRequest' + description: Запрос получения инструментов. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1GetLastPricesResponse' + $ref: '#/components/schemas/v1OptionsResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод запроса цен последних сделок по инструментам. + summary: Deprecated Получить списка опционов. tags: - - MarketDataService + - InstrumentsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.MarketDataService/GetLastTrades: + /tinkoff.public.invest.api.contract.v1.InstrumentsService/OptionsBy: post: - operationId: MarketDataService_GetLastTrades + operationId: InstrumentsService_OptionsBy requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1GetLastTradesRequest' + $ref: '#/components/schemas/v1FilterOptionsRequest' + description: Параметры фильтрации опционов. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1GetLastTradesResponse' + $ref: '#/components/schemas/v1OptionsResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод запроса обезличенных сделок за последний час. + summary: Получить список опционов. tags: - - MarketDataService + - InstrumentsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.MarketDataService/GetOrderBook: + /tinkoff.public.invest.api.contract.v1.InstrumentsService/ShareBy: post: - operationId: MarketDataService_GetOrderBook + operationId: InstrumentsService_ShareBy requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1GetOrderBookRequest' + $ref: '#/components/schemas/v1InstrumentRequest' + description: Запрос получения инструмента по идентификатору. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1GetOrderBookResponse' + $ref: '#/components/schemas/v1ShareResponse' description: A successful response. - default: + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. content: application/json: schema: - $ref: '#/components/schemas/rpcStatus' - description: An unexpected error response. - summary: Метод получения стакана по инструменту. - tags: - - MarketDataService - x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.MarketDataService/GetTradingStatus: - post: - operationId: MarketDataService_GetTradingStatus - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/v1GetTradingStatusRequest' - required: true - responses: - '200': + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. content: application/json: schema: - $ref: '#/components/schemas/v1GetTradingStatusResponse' - description: A successful response. + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод запроса статуса торгов по инструментам. + summary: Получить акцию по её идентификатору. tags: - - MarketDataService + - InstrumentsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.MarketDataService/GetTradingStatuses: + /tinkoff.public.invest.api.contract.v1.InstrumentsService/Shares: post: - operationId: MarketDataService_GetTradingStatuses + operationId: InstrumentsService_Shares requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1GetTradingStatusesRequest' + $ref: '#/components/schemas/v1InstrumentsRequest' + description: Запрос получения инструментов. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1GetTradingStatusesResponse' + $ref: '#/components/schemas/v1SharesResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод запроса статуса торгов по инструментам. + summary: Получить список акций. tags: - - MarketDataService + - InstrumentsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.MarketDataStreamService/MarketDataServerSideStream: + /tinkoff.public.invest.api.contract.v1.InstrumentsService/TradingSchedules: post: - operationId: MarketDataStreamService_MarketDataServerSideStream + operationId: InstrumentsService_TradingSchedules requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1MarketDataServerSideStreamRequest' + $ref: '#/components/schemas/v1TradingSchedulesRequest' + description: Запрос расписания торгов. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/Stream_result_of_v1MarketDataResponse' - description: A successful response.(streaming responses) + $ref: '#/components/schemas/v1TradingSchedulesResponse' + description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Server-side стрим предоставления биржевой информации. + summary: Получить расписания торгов торговых площадок. tags: - - MarketDataStreamService + - InstrumentsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.MarketDataStreamService/MarketDataStream: + /tinkoff.public.invest.api.contract.v1.MarketDataService/GetCandles: post: - operationId: MarketDataStreamService_MarketDataStream + operationId: MarketDataService_GetCandles requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1MarketDataRequest' - description: ' (streaming inputs)' + $ref: '#/components/schemas/v1GetCandlesRequest' + description: Запрос исторических свечей. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/Stream_result_of_v1MarketDataResponse' - description: A successful response.(streaming responses) + $ref: '#/components/schemas/v1GetCandlesResponse' + description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Bi-directional стрим предоставления биржевой информации. + summary: Запросить исторические свечи по инструменту. tags: - - MarketDataStreamService + - MarketDataService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.OperationsService/GetBrokerReport: + /tinkoff.public.invest.api.contract.v1.MarketDataService/GetClosePrices: post: - operationId: OperationsService_GetBrokerReport + operationId: MarketDataService_GetClosePrices requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1BrokerReportRequest' + $ref: '#/components/schemas/v1GetClosePricesRequest' + description: Запрос цен закрытия торговой сессии по инструментам. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1BrokerReportResponse' + $ref: '#/components/schemas/v1GetClosePricesResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения брокерского отчёта. + summary: Запросить цены закрытия торговой сессии по инструментам. tags: - - OperationsService + - MarketDataService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.OperationsService/GetDividendsForeignIssuer: + /tinkoff.public.invest.api.contract.v1.MarketDataService/GetLastPrices: post: - operationId: OperationsService_GetDividendsForeignIssuer + operationId: MarketDataService_GetLastPrices requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1GetDividendsForeignIssuerRequest' + $ref: '#/components/schemas/v1GetLastPricesRequest' + description: Запрос получения цен последних сделок. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1GetDividendsForeignIssuerResponse' + $ref: '#/components/schemas/v1GetLastPricesResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения отчёта "Справка о доходах за пределами РФ". + summary: Запросить цены последних сделок по инструментам. tags: - - OperationsService + - MarketDataService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.OperationsService/GetOperations: + /tinkoff.public.invest.api.contract.v1.MarketDataService/GetLastTrades: post: - operationId: OperationsService_GetOperations + operationId: MarketDataService_GetLastTrades requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1OperationsRequest' + $ref: '#/components/schemas/v1GetLastTradesRequest' + description: Запрос обезличенных сделок за последний час. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1OperationsResponse' + $ref: '#/components/schemas/v1GetLastTradesResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: >- - Метод получения списка операций по счёту.При работе с данным методом - необходимо учитывать - - [особенности взаимодействия](/investAPI/operations_problems) с данным - методом. + summary: Запросить обезличенные сделки за последний час. tags: - - OperationsService + - MarketDataService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.OperationsService/GetOperationsByCursor: + /tinkoff.public.invest.api.contract.v1.MarketDataService/GetOrderBook: post: - operationId: OperationsService_GetOperationsByCursor + operationId: MarketDataService_GetOrderBook requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1GetOperationsByCursorRequest' + $ref: '#/components/schemas/v1GetOrderBookRequest' + description: Запрос стакана. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1GetOperationsByCursorResponse' + $ref: '#/components/schemas/v1GetOrderBookResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: >- - Метод получения списка операций по счёту с пагинацией. При работе с - данным методом необходимо учитывать - - [особенности взаимодействия](/investAPI/operations_problems) с данным - методом. + summary: Получить стакан по инструменту. tags: - - OperationsService + - MarketDataService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.OperationsService/GetPortfolio: + /tinkoff.public.invest.api.contract.v1.MarketDataService/GetTechAnalysis: post: - operationId: OperationsService_GetPortfolio + operationId: MarketDataService_GetTechAnalysis requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1PortfolioRequest' + $ref: '#/components/schemas/v1GetTechAnalysisRequest' required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1PortfolioResponse' + $ref: '#/components/schemas/v1GetTechAnalysisResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения портфеля по счёту. + summary: Получить технические индикаторы по инструменту. tags: - - OperationsService + - MarketDataService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.OperationsService/GetPositions: + /tinkoff.public.invest.api.contract.v1.MarketDataService/GetTradingStatus: post: - operationId: OperationsService_GetPositions + operationId: MarketDataService_GetTradingStatus requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1PositionsRequest' + $ref: '#/components/schemas/v1GetTradingStatusRequest' + description: Запрос получения торгового статуса. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1PositionsResponse' + $ref: '#/components/schemas/v1GetTradingStatusResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения списка позиций по счёту. + summary: Запросить статус торгов по инструментам. tags: - - OperationsService + - MarketDataService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.OperationsService/GetWithdrawLimits: + /tinkoff.public.invest.api.contract.v1.MarketDataService/GetTradingStatuses: post: - operationId: OperationsService_GetWithdrawLimits + operationId: MarketDataService_GetTradingStatuses requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1WithdrawLimitsRequest' + $ref: '#/components/schemas/v1GetTradingStatusesRequest' + description: Запрос получения торгового статуса. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1WithdrawLimitsResponse' + $ref: '#/components/schemas/v1GetTradingStatusesResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения доступного остатка для вывода средств. + summary: Запросить статус торгов по инструментам. tags: - - OperationsService + - MarketDataService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.OperationsStreamService/PortfolioStream: + /tinkoff.public.invest.api.contract.v1.MarketDataStreamService/MarketDataServerSideStream: post: - operationId: OperationsStreamService_PortfolioStream + operationId: MarketDataStreamService_MarketDataServerSideStream requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1PortfolioStreamRequest' + $ref: '#/components/schemas/v1MarketDataServerSideStreamRequest' required: true responses: '200': content: application/json: schema: - $ref: >- - #/components/schemas/Stream_result_of_v1PortfolioStreamResponse + $ref: '#/components/schemas/Stream_result_of_v1MarketDataResponse' description: A successful response.(streaming responses) + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Server-side stream обновлений портфеля + summary: Server-side стрим предоставления биржевой информации. tags: - - OperationsStreamService + - MarketDataStreamService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.OperationsStreamService/PositionsStream: + /tinkoff.public.invest.api.contract.v1.MarketDataStreamService/MarketDataStream: post: - operationId: OperationsStreamService_PositionsStream + operationId: MarketDataStreamService_MarketDataStream requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1PositionsStreamRequest' + $ref: '#/components/schemas/v1MarketDataRequest' + description: >- + Запрос подписки или отписки на определённые биржевые данные. + (streaming inputs) required: true responses: '200': content: application/json: schema: - $ref: >- - #/components/schemas/Stream_result_of_v1PositionsStreamResponse + $ref: '#/components/schemas/Stream_result_of_v1MarketDataResponse' description: A successful response.(streaming responses) + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Server-side stream обновлений информации по изменению позиций портфеля + summary: Bidirectional-стрим предоставления биржевой информации. tags: - - OperationsStreamService + - MarketDataStreamService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.OrdersService/CancelOrder: + /tinkoff.public.invest.api.contract.v1.OperationsService/GetBrokerReport: post: - operationId: OrdersService_CancelOrder + operationId: OperationsService_GetBrokerReport requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1CancelOrderRequest' + $ref: '#/components/schemas/v1BrokerReportRequest' required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1CancelOrderResponse' + $ref: '#/components/schemas/v1BrokerReportResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод отмены биржевой заявки. + summary: Получить брокерский отчёт. tags: - - OrdersService + - OperationsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.OrdersService/GetOrderState: + /tinkoff.public.invest.api.contract.v1.OperationsService/GetDividendsForeignIssuer: post: - operationId: OrdersService_GetOrderState + operationId: OperationsService_GetDividendsForeignIssuer requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1GetOrderStateRequest' + $ref: '#/components/schemas/v1GetDividendsForeignIssuerRequest' required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1OrderState' + $ref: '#/components/schemas/v1GetDividendsForeignIssuerResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения статуса торгового поручения. + summary: Получить отчёт «Справка о доходах за пределами РФ». tags: - - OrdersService + - OperationsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.OrdersService/GetOrders: + /tinkoff.public.invest.api.contract.v1.OperationsService/GetOperations: post: - operationId: OrdersService_GetOrders + operationId: OperationsService_GetOperations requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1GetOrdersRequest' + $ref: '#/components/schemas/v1OperationsRequest' + description: Запрос получения списка операций по счёту. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1GetOrdersResponse' + $ref: '#/components/schemas/v1OperationsResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения списка активных заявок по счёту. + summary: |- + Получить список операций по счёту. При работе с методом учитывайте + [особенности взаимодействия](/investAPI/operations_problems). tags: - - OrdersService + - OperationsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.OrdersService/PostOrder: + /tinkoff.public.invest.api.contract.v1.OperationsService/GetOperationsByCursor: post: - operationId: OrdersService_PostOrder + operationId: OperationsService_GetOperationsByCursor requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1PostOrderRequest' + $ref: '#/components/schemas/v1GetOperationsByCursorRequest' + description: Запрос списка операций по счёту с пагинацией. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1PostOrderResponse' + $ref: '#/components/schemas/v1GetOperationsByCursorResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод выставления заявки. + summary: >- + Получить список операций по счёту с пагинацией. При работе с методом + учитывайте + + [особенности взаимодействия](/investAPI/operations_problems). tags: - - OrdersService + - OperationsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.OrdersService/ReplaceOrder: + /tinkoff.public.invest.api.contract.v1.OperationsService/GetPortfolio: post: - operationId: OrdersService_ReplaceOrder + operationId: OperationsService_GetPortfolio requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1ReplaceOrderRequest' + $ref: '#/components/schemas/v1PortfolioRequest' + description: Запрос получения текущего портфеля по счёту. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1PostOrderResponse' + $ref: '#/components/schemas/v1PortfolioResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод изменения выставленной заявки. + summary: Получить портфель по счёту. tags: - - OrdersService + - OperationsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.OrdersStreamService/TradesStream: + /tinkoff.public.invest.api.contract.v1.OperationsService/GetPositions: post: - operationId: OrdersStreamService_TradesStream + operationId: OperationsService_GetPositions requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1TradesStreamRequest' + $ref: '#/components/schemas/v1PositionsRequest' + description: Запрос позиций портфеля по счёту. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/Stream_result_of_v1TradesStreamResponse' - description: A successful response.(streaming responses) + $ref: '#/components/schemas/v1PositionsResponse' + description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Stream сделок пользователя + summary: Получить список позиций по счёту. tags: - - OrdersStreamService + - OperationsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.SandboxService/CancelSandboxOrder: + /tinkoff.public.invest.api.contract.v1.OperationsService/GetWithdrawLimits: post: - operationId: SandboxService_CancelSandboxOrder + operationId: OperationsService_GetWithdrawLimits requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1CancelOrderRequest' + $ref: '#/components/schemas/v1WithdrawLimitsRequest' + description: Запрос доступного остатка для вывода. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1CancelOrderResponse' + $ref: '#/components/schemas/v1WithdrawLimitsResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод отмены торгового поручения в песочнице. + summary: Получить доступный остаток для вывода средств. tags: - - SandboxService + - OperationsService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.SandboxService/CloseSandboxAccount: + /tinkoff.public.invest.api.contract.v1.OperationsStreamService/PortfolioStream: post: - operationId: SandboxService_CloseSandboxAccount + operationId: OperationsStreamService_PortfolioStream requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1CloseSandboxAccountRequest' + $ref: '#/components/schemas/v1PortfolioStreamRequest' + description: Запрос установки stream-соединения. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1CloseSandboxAccountResponse' - description: A successful response. + $ref: >- + #/components/schemas/Stream_result_of_v1PortfolioStreamResponse + description: A successful response.(streaming responses) + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод закрытия счёта в песочнице. + summary: Server-side stream обновлений портфеля. tags: - - SandboxService + - OperationsStreamService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.SandboxService/GetSandboxAccounts: + /tinkoff.public.invest.api.contract.v1.OperationsStreamService/PositionsStream: post: - operationId: SandboxService_GetSandboxAccounts + operationId: OperationsStreamService_PositionsStream requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1GetAccountsRequest' + $ref: '#/components/schemas/v1PositionsStreamRequest' + description: Запрос установки stream-соединения позиций. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1GetAccountsResponse' - description: A successful response. + $ref: >- + #/components/schemas/Stream_result_of_v1PositionsStreamResponse + description: A successful response.(streaming responses) + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения счетов в песочнице. + summary: Server-side stream обновлений информации по изменению позиций портфеля. tags: - - SandboxService + - OperationsStreamService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.SandboxService/GetSandboxOperations: + /tinkoff.public.invest.api.contract.v1.OrdersService/CancelOrder: post: - operationId: SandboxService_GetSandboxOperations + operationId: OrdersService_CancelOrder requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1OperationsRequest' + $ref: '#/components/schemas/v1CancelOrderRequest' + description: Запрос отмены торгового поручения. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1OperationsResponse' + $ref: '#/components/schemas/v1CancelOrderResponse' description: A successful response. - default: + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. content: application/json: schema: - $ref: '#/components/schemas/rpcStatus' - description: An unexpected error response. - summary: Метод получения операций в песочнице по номеру счёта. - tags: - - SandboxService - x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.SandboxService/GetSandboxOperationsByCursor: - post: - operationId: SandboxService_GetSandboxOperationsByCursor - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/v1GetOperationsByCursorRequest' - required: true - responses: - '200': + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. content: application/json: schema: - $ref: '#/components/schemas/v1GetOperationsByCursorResponse' - description: A successful response. + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения операций в песочнице по номеру счета с пагинацией. + summary: Метод отмены биржевой заявки. tags: - - SandboxService + - OrdersService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.SandboxService/GetSandboxOrderState: + /tinkoff.public.invest.api.contract.v1.OrdersService/GetMaxLots: post: - operationId: SandboxService_GetSandboxOrderState + operationId: OrdersService_GetMaxLots requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1GetOrderStateRequest' + $ref: '#/components/schemas/v1GetMaxLotsRequest' + description: >- + Запрос на расчет количества доступных для покупки/продажи лотов. Если + не указывать цену инструмента, то расчет произведется по текущум ценам + в стакане: по лучшему предложению для покупки и по лучшему спросу для + продажи. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1OrderState' + $ref: '#/components/schemas/v1GetMaxLotsResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения статуса заявки в песочнице. + summary: расчет количества доступных для покупки/продажи лотов tags: - - SandboxService + - OrdersService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.SandboxService/GetSandboxOrders: + /tinkoff.public.invest.api.contract.v1.OrdersService/GetOrderPrice: post: - operationId: SandboxService_GetSandboxOrders + operationId: OrdersService_GetOrderPrice requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1GetOrdersRequest' + $ref: '#/components/schemas/v1GetOrderPriceRequest' required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1GetOrdersResponse' + $ref: '#/components/schemas/v1GetOrderPriceResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения списка активных заявок по счёту в песочнице. + summary: Метод получения предварительной стоимости для лимитной заявки tags: - - SandboxService + - OrdersService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.SandboxService/GetSandboxPortfolio: + /tinkoff.public.invest.api.contract.v1.OrdersService/GetOrderState: post: - operationId: SandboxService_GetSandboxPortfolio + operationId: OrdersService_GetOrderState requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1PortfolioRequest' + $ref: '#/components/schemas/v1GetOrderStateRequest' + description: Запрос получения статуса торгового поручения. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1PortfolioResponse' + $ref: '#/components/schemas/contractv1OrderState' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения портфолио в песочнице. + summary: Метод получения статуса торгового поручения. tags: - - SandboxService + - OrdersService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.SandboxService/GetSandboxPositions: + /tinkoff.public.invest.api.contract.v1.OrdersService/GetOrders: post: - operationId: SandboxService_GetSandboxPositions + operationId: OrdersService_GetOrders requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1PositionsRequest' + $ref: '#/components/schemas/v1GetOrdersRequest' + description: Запрос получения списка активных торговых поручений. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1PositionsResponse' + $ref: '#/components/schemas/v1GetOrdersResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения позиций по виртуальному счёту песочницы. + summary: Метод получения списка активных заявок по счёту. tags: - - SandboxService + - OrdersService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.SandboxService/GetSandboxWithdrawLimits: + /tinkoff.public.invest.api.contract.v1.OrdersService/PostOrder: post: - operationId: SandboxService_GetSandboxWithdrawLimits + operationId: OrdersService_PostOrder requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1WithdrawLimitsRequest' + $ref: '#/components/schemas/v1PostOrderRequest' + examples: + PostLimitOrder: + summary: An example of a limit order + value: + figi: BBG004730N88 + quantity: 1 + price: + nano: 0 + units: 250 + direction: ORDER_DIRECTION_BUY + accountId: any account + orderType: ORDER_TYPE_LIMIT + instrumentId: e6123145-9665-43e0-8413-cd61b8aa9b13 + PostMarketOrder: + summary: An example of a market order + value: + figi: BBG004730N88 + quantity: 1 + direction: ORDER_DIRECTION_BUY + accountId: any account + orderType: ORDER_TYPE_MARKET + instrumentId: e6123145-9665-43e0-8413-cd61b8aa9b13 + description: Запрос выставления торгового поручения. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1WithdrawLimitsResponse' + $ref: '#/components/schemas/v1PostOrderResponse' + example: + orderId: '40458655448' + executionReportStatus: EXECUTION_REPORT_STATUS_NEW + lotsRequested: '1' + lotsExecuted: '0' + initialOrderPrice: + currency: rub + units: '2500' + nano: 0 + executedOrderPrice: + currency: rub + units: '0' + nano: 0 + totalOrderAmount: + currency: rub + units: '0' + nano: 0 + initialCommission: + currency: rub + units: '1' + nano: 250000000 + executedCommission: + currency: rub + units: '0' + nano: 0 + aciValue: + currency: rub + units: '0' + nano: 0 + figi: BBG004730N88 + direction: ORDER_DIRECTION_BUY + initialSecurityPrice: + currency: rub + units: '250' + nano: 0 + orderType: ORDER_TYPE_LIMIT + message: '' + instrumentUid: e6123145-9665-43e0-8413-cd61b8aa9b13 + orderRequestId: fd411076-19cf-4e7b-9623-f7c9ca18ec6b description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения доступного остатка для вывода средств в песочнице. + summary: Метод выставления заявки. tags: - - SandboxService + - OrdersService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.SandboxService/OpenSandboxAccount: + /tinkoff.public.invest.api.contract.v1.OrdersService/PostOrderAsync: post: - operationId: SandboxService_OpenSandboxAccount + operationId: OrdersService_PostOrderAsync requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1OpenSandboxAccountRequest' + $ref: '#/components/schemas/v1PostOrderAsyncRequest' + description: Запрос выставления асинхронного торгового поручения. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1OpenSandboxAccountResponse' + $ref: '#/components/schemas/v1PostOrderAsyncResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод регистрации счёта в песочнице. + summary: Асинхронный метод выставления заявки. tags: - - SandboxService + - OrdersService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.SandboxService/PostSandboxOrder: + /tinkoff.public.invest.api.contract.v1.OrdersService/ReplaceOrder: post: - operationId: SandboxService_PostSandboxOrder + operationId: OrdersService_ReplaceOrder requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1PostOrderRequest' + $ref: '#/components/schemas/v1ReplaceOrderRequest' + examples: + ReplaceOrder: + summary: An example of order replace + value: + accountId: any account + orderId: '40458655448' + idempotencyKey: fd411090-19cf-4e7b-9623-f7c9ca18ec6b + quantity: 1 + price: + nano: 0 + units: 250 + description: Запрос изменения выставленной заявки. required: true responses: '200': @@ -1667,280 +6198,3969 @@ paths: application/json: schema: $ref: '#/components/schemas/v1PostOrderResponse' + example: + orderId: '40458655449' + executionReportStatus: EXECUTION_REPORT_STATUS_NEW + lotsRequested: '1' + lotsExecuted: '0' + initialOrderPrice: + currency: rub + units: '2500' + nano: 0 + executedOrderPrice: + currency: rub + units: '0' + nano: 0 + totalOrderAmount: + currency: rub + units: '0' + nano: 0 + initialCommission: + currency: rub + units: '1' + nano: 250000000 + executedCommission: + currency: rub + units: '0' + nano: 0 + aciValue: + currency: rub + units: '0' + nano: 0 + figi: BBG004730N88 + direction: ORDER_DIRECTION_BUY + initialSecurityPrice: + currency: rub + units: '250' + nano: 0 + orderType: ORDER_TYPE_LIMIT + message: '' + instrumentUid: e6123145-9665-43e0-8413-cd61b8aa9b13 + orderRequestId: '' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод выставления торгового поручения в песочнице. + summary: Метод изменения выставленной заявки. tags: - - SandboxService + - OrdersService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.SandboxService/ReplaceSandboxOrder: + /tinkoff.public.invest.api.contract.v1.OrdersStreamService/OrderStateStream: post: - operationId: SandboxService_ReplaceSandboxOrder + operationId: OrdersStreamService_OrderStateStream requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1ReplaceOrderRequest' + $ref: '#/components/schemas/v1OrderStateStreamRequest' required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1PostOrderResponse' - description: A successful response. + $ref: >- + #/components/schemas/Stream_result_of_v1OrderStateStreamResponse + description: A successful response.(streaming responses) + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод изменения выставленной заявки. + summary: >- + Stream поручений пользователя. Перед работой прочитайте + [статью](https://russianinvestments.github.io/investAPI/orders_state_stream/). tags: - - SandboxService + - OrdersStreamService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.SandboxService/SandboxPayIn: + /tinkoff.public.invest.api.contract.v1.OrdersStreamService/TradesStream: post: - operationId: SandboxService_SandboxPayIn + operationId: OrdersStreamService_TradesStream requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1SandboxPayInRequest' + $ref: '#/components/schemas/v1TradesStreamRequest' + description: Запрос установки соединения. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1SandboxPayInResponse' - description: A successful response. + $ref: '#/components/schemas/Stream_result_of_v1TradesStreamResponse' + description: A successful response.(streaming responses) + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод пополнения счёта в песочнице. + summary: Stream сделок пользователя tags: - - SandboxService + - OrdersStreamService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.StopOrdersService/CancelStopOrder: + /tinkoff.public.invest.api.contract.v1.SandboxService/CancelSandboxOrder: post: - operationId: StopOrdersService_CancelStopOrder + operationId: SandboxService_CancelSandboxOrder requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1CancelStopOrderRequest' + $ref: '#/components/schemas/v1CancelOrderRequest' + description: Запрос отмены торгового поручения. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1CancelStopOrderResponse' + $ref: '#/components/schemas/v1CancelOrderResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод отмены стоп-заявки. + summary: Отменить торговое поручение. tags: - - StopOrdersService + - SandboxService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.StopOrdersService/GetStopOrders: + /tinkoff.public.invest.api.contract.v1.SandboxService/CloseSandboxAccount: post: - operationId: StopOrdersService_GetStopOrders + operationId: SandboxService_CloseSandboxAccount requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1GetStopOrdersRequest' + $ref: '#/components/schemas/v1CloseSandboxAccountRequest' + description: Запрос закрытия счёта в песочнице. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1GetStopOrdersResponse' + $ref: '#/components/schemas/v1CloseSandboxAccountResponse' description: A successful response. - default: + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. content: application/json: schema: - $ref: '#/components/schemas/rpcStatus' + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. + default: + content: + application/json: + schema: + $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения списка активных стоп заявок по счёту. + summary: Закрыть счёт. tags: - - StopOrdersService + - SandboxService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.StopOrdersService/PostStopOrder: + /tinkoff.public.invest.api.contract.v1.SandboxService/GetSandboxAccounts: post: - operationId: StopOrdersService_PostStopOrder + operationId: SandboxService_GetSandboxAccounts requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1PostStopOrderRequest' + $ref: '#/components/schemas/v1GetAccountsRequest' + description: Запрос получения счетов пользователя. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1PostStopOrderResponse' + $ref: '#/components/schemas/v1GetAccountsResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод выставления стоп-заявки. + summary: Получить счета. tags: - - StopOrdersService + - SandboxService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.UsersService/GetAccounts: + /tinkoff.public.invest.api.contract.v1.SandboxService/GetSandboxMaxLots: post: - operationId: UsersService_GetAccounts + operationId: SandboxService_GetSandboxMaxLots requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1GetAccountsRequest' + $ref: '#/components/schemas/v1GetMaxLotsRequest' + description: >- + Запрос на расчет количества доступных для покупки/продажи лотов. Если + не указывать цену инструмента, то расчет произведется по текущум ценам + в стакане: по лучшему предложению для покупки и по лучшему спросу для + продажи. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1GetAccountsResponse' + $ref: '#/components/schemas/v1GetMaxLotsResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения счетов пользователя. + summary: Расчёт количества доступных для покупки/продажи лотов в песочнице. tags: - - UsersService + - SandboxService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.UsersService/GetInfo: + /tinkoff.public.invest.api.contract.v1.SandboxService/GetSandboxOperations: post: - operationId: UsersService_GetInfo + operationId: SandboxService_GetSandboxOperations requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1GetInfoRequest' + $ref: '#/components/schemas/v1OperationsRequest' + description: Запрос получения списка операций по счёту. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1GetInfoResponse' + $ref: '#/components/schemas/v1OperationsResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Метод получения информации о пользователе. + summary: Получить операции по номеру счёта. tags: - - UsersService + - SandboxService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.UsersService/GetMarginAttributes: + /tinkoff.public.invest.api.contract.v1.SandboxService/GetSandboxOperationsByCursor: post: - operationId: UsersService_GetMarginAttributes + operationId: SandboxService_GetSandboxOperationsByCursor requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1GetMarginAttributesRequest' + $ref: '#/components/schemas/v1GetOperationsByCursorRequest' + description: Запрос списка операций по счёту с пагинацией. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1GetMarginAttributesResponse' + $ref: '#/components/schemas/v1GetOperationsByCursorResponse' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Расчёт маржинальных показателей по счёту. + summary: Получить операции по номеру счёта с пагинацией. tags: - - UsersService + - SandboxService x-codegen-request-body-name: body - /tinkoff.public.invest.api.contract.v1.UsersService/GetUserTariff: + /tinkoff.public.invest.api.contract.v1.SandboxService/GetSandboxOrderState: post: - operationId: UsersService_GetUserTariff + operationId: SandboxService_GetSandboxOrderState requestBody: content: application/json: schema: - $ref: '#/components/schemas/v1GetUserTariffRequest' + $ref: '#/components/schemas/v1GetOrderStateRequest' + description: Запрос получения статуса торгового поручения. required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/v1GetUserTariffResponse' + $ref: '#/components/schemas/contractv1OrderState' description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. default: content: application/json: schema: $ref: '#/components/schemas/rpcStatus' description: An unexpected error response. - summary: Запрос тарифа пользователя. + summary: Поулчить статус заявки в песочнице. Заявки хранятся в таблице 7 дней. tags: - - UsersService + - SandboxService x-codegen-request-body-name: body -components: - schemas: + /tinkoff.public.invest.api.contract.v1.SandboxService/GetSandboxOrders: + post: + operationId: SandboxService_GetSandboxOrders + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/v1GetOrdersRequest' + description: Запрос получения списка активных торговых поручений. + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/v1GetOrdersResponse' + description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. + default: + content: + application/json: + schema: + $ref: '#/components/schemas/rpcStatus' + description: An unexpected error response. + summary: Получить список активных заявок по счёту. + tags: + - SandboxService + x-codegen-request-body-name: body + /tinkoff.public.invest.api.contract.v1.SandboxService/GetSandboxPortfolio: + post: + operationId: SandboxService_GetSandboxPortfolio + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/v1PortfolioRequest' + description: Запрос получения текущего портфеля по счёту. + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/v1PortfolioResponse' + description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. + default: + content: + application/json: + schema: + $ref: '#/components/schemas/rpcStatus' + description: An unexpected error response. + summary: Получить портфель. + tags: + - SandboxService + x-codegen-request-body-name: body + /tinkoff.public.invest.api.contract.v1.SandboxService/GetSandboxPositions: + post: + operationId: SandboxService_GetSandboxPositions + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/v1PositionsRequest' + description: Запрос позиций портфеля по счёту. + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/v1PositionsResponse' + description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. + default: + content: + application/json: + schema: + $ref: '#/components/schemas/rpcStatus' + description: An unexpected error response. + summary: Получить позиции по виртуальному счёту. + tags: + - SandboxService + x-codegen-request-body-name: body + /tinkoff.public.invest.api.contract.v1.SandboxService/GetSandboxWithdrawLimits: + post: + operationId: SandboxService_GetSandboxWithdrawLimits + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/v1WithdrawLimitsRequest' + description: Запрос доступного остатка для вывода. + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/v1WithdrawLimitsResponse' + description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. + default: + content: + application/json: + schema: + $ref: '#/components/schemas/rpcStatus' + description: An unexpected error response. + summary: Получить доступный остаток для вывода средств. + tags: + - SandboxService + x-codegen-request-body-name: body + /tinkoff.public.invest.api.contract.v1.SandboxService/OpenSandboxAccount: + post: + operationId: SandboxService_OpenSandboxAccount + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/v1OpenSandboxAccountRequest' + description: Запрос открытия счёта в песочнице. + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/v1OpenSandboxAccountResponse' + description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. + default: + content: + application/json: + schema: + $ref: '#/components/schemas/rpcStatus' + description: An unexpected error response. + summary: Зарегистрировать счёт. + tags: + - SandboxService + x-codegen-request-body-name: body + /tinkoff.public.invest.api.contract.v1.SandboxService/PostSandboxOrder: + post: + operationId: SandboxService_PostSandboxOrder + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/v1PostOrderRequest' + examples: + PostSandboxLimitOrder: + summary: An example of a limit order + value: + figi: BBG004730N88 + quantity: 1 + price: + nano: 0 + units: 250 + direction: ORDER_DIRECTION_BUY + accountId: any account + orderType: ORDER_TYPE_LIMIT + instrumentId: e6123145-9665-43e0-8413-cd61b8aa9b13 + PostSandboxMarketOrder: + summary: An example of a market order + value: + figi: BBG004730N88 + quantity: 1 + direction: ORDER_DIRECTION_BUY + accountId: any account + orderType: ORDER_TYPE_MARKET + instrumentId: e6123145-9665-43e0-8413-cd61b8aa9b13 + description: Запрос выставления торгового поручения. + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/v1PostOrderResponse' + example: + orderId: '40458655448' + executionReportStatus: EXECUTION_REPORT_STATUS_NEW + lotsRequested: '1' + lotsExecuted: '0' + initialOrderPrice: + currency: rub + units: '2500' + nano: 0 + executedOrderPrice: + currency: rub + units: '0' + nano: 0 + totalOrderAmount: + currency: rub + units: '0' + nano: 0 + initialCommission: + currency: rub + units: '1' + nano: 250000000 + executedCommission: + currency: rub + units: '0' + nano: 0 + aciValue: + currency: rub + units: '0' + nano: 0 + figi: BBG004730N88 + direction: ORDER_DIRECTION_BUY + initialSecurityPrice: + currency: rub + units: '250' + nano: 0 + orderType: ORDER_TYPE_LIMIT + message: '' + instrumentUid: e6123145-9665-43e0-8413-cd61b8aa9b13 + orderRequestId: '' + description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. + default: + content: + application/json: + schema: + $ref: '#/components/schemas/rpcStatus' + description: An unexpected error response. + summary: Выставить торговое поручение. + tags: + - SandboxService + x-codegen-request-body-name: body + /tinkoff.public.invest.api.contract.v1.SandboxService/ReplaceSandboxOrder: + post: + operationId: SandboxService_ReplaceSandboxOrder + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/v1ReplaceOrderRequest' + examples: + ReplaceSandboxOrder: + summary: An example of order replace + value: + accountId: any account + orderId: '40458655448' + idempotencyKey: fd411090-19cf-4e7b-9623-f7c9ca18ec6b + quantity: 1 + price: + nano: 0 + units: 250 + description: Запрос изменения выставленной заявки. + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/v1PostOrderResponse' + example: + orderId: '40458655449' + executionReportStatus: EXECUTION_REPORT_STATUS_NEW + lotsRequested: '1' + lotsExecuted: '0' + initialOrderPrice: + currency: rub + units: '2500' + nano: 0 + executedOrderPrice: + currency: rub + units: '0' + nano: 0 + totalOrderAmount: + currency: rub + units: '0' + nano: 0 + initialCommission: + currency: rub + units: '1' + nano: 250000000 + executedCommission: + currency: rub + units: '0' + nano: 0 + aciValue: + currency: rub + units: '0' + nano: 0 + figi: BBG004730N88 + direction: ORDER_DIRECTION_BUY + initialSecurityPrice: + currency: rub + units: '250' + nano: 0 + orderType: ORDER_TYPE_LIMIT + message: '' + instrumentUid: e6123145-9665-43e0-8413-cd61b8aa9b13 + orderRequestId: '' + description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. + default: + content: + application/json: + schema: + $ref: '#/components/schemas/rpcStatus' + description: An unexpected error response. + summary: Изменить выставленную заявку. + tags: + - SandboxService + x-codegen-request-body-name: body + /tinkoff.public.invest.api.contract.v1.SandboxService/SandboxPayIn: + post: + operationId: SandboxService_SandboxPayIn + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/v1SandboxPayInRequest' + examples: + ReplaceSandboxOrder: + summary: An example of order replace + value: + accountId: any account + amount: + nano: 500000000 + currency: rub + units: 1360000 + description: Запрос пополнения счёта в песочнице. + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/v1SandboxPayInResponse' + example: + balance: + currency: rub + units: '4013749' + nano: 800000000 + description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. + default: + content: + application/json: + schema: + $ref: '#/components/schemas/rpcStatus' + description: An unexpected error response. + summary: Пополнить счёт. + tags: + - SandboxService + x-codegen-request-body-name: body + /tinkoff.public.invest.api.contract.v1.SignalService/GetSignals: + post: + operationId: SignalService_GetSignals + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/v1GetSignalsRequest' + description: Запрос сигналов. + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/v1GetSignalsResponse' + description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. + default: + content: + application/json: + schema: + $ref: '#/components/schemas/rpcStatus' + description: An unexpected error response. + summary: Запросить сигналы. + tags: + - SignalService + x-codegen-request-body-name: body + /tinkoff.public.invest.api.contract.v1.SignalService/GetStrategies: + post: + operationId: SignalService_GetStrategies + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/v1GetStrategiesRequest' + description: Запрос стратегий. + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/v1GetStrategiesResponse' + description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. + default: + content: + application/json: + schema: + $ref: '#/components/schemas/rpcStatus' + description: An unexpected error response. + summary: Запросить стратегии. + tags: + - SignalService + x-codegen-request-body-name: body + /tinkoff.public.invest.api.contract.v1.StopOrdersService/CancelStopOrder: + post: + operationId: StopOrdersService_CancelStopOrder + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/v1CancelStopOrderRequest' + description: Запрос отмены выставленной стоп-заявки. + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/v1CancelStopOrderResponse' + description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. + default: + content: + application/json: + schema: + $ref: '#/components/schemas/rpcStatus' + description: An unexpected error response. + summary: Отменить стоп-заявку. + tags: + - StopOrdersService + x-codegen-request-body-name: body + /tinkoff.public.invest.api.contract.v1.StopOrdersService/GetStopOrders: + post: + operationId: StopOrdersService_GetStopOrders + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/v1GetStopOrdersRequest' + description: Запрос получения списка активных стоп-заявок. + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/v1GetStopOrdersResponse' + description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. + default: + content: + application/json: + schema: + $ref: '#/components/schemas/rpcStatus' + description: An unexpected error response. + summary: Получить список активных стоп-заявок по счёту. + tags: + - StopOrdersService + x-codegen-request-body-name: body + /tinkoff.public.invest.api.contract.v1.StopOrdersService/PostStopOrder: + post: + operationId: StopOrdersService_PostStopOrder + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/v1PostStopOrderRequest' + examples: + GoodTillCancelStopOrder: + summary: An example of a good till cancell stop limit order + value: + figi: BBG004730N88 + quantity: 1 + price: + nano: 0 + units: 305 + stopPrice: + units: 300 + nano: 0 + direction: STOP_ORDER_DIRECTION_BUY + accountId: any account + expirationType: STOP_ORDER_EXPIRATION_TYPE_GOOD_TILL_CANCEL + stopOrderType: STOP_ORDER_TYPE_STOP_LIMIT + description: Запрос выставления стоп-заявки. + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/v1PostStopOrderResponse' + description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. + default: + content: + application/json: + schema: + $ref: '#/components/schemas/rpcStatus' + description: An unexpected error response. + summary: Выставить стоп-заявку. + tags: + - StopOrdersService + x-codegen-request-body-name: body + /tinkoff.public.invest.api.contract.v1.UsersService/GetAccounts: + post: + operationId: UsersService_GetAccounts + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/v1GetAccountsRequest' + description: Запрос получения счетов пользователя. + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/v1GetAccountsResponse' + description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. + default: + content: + application/json: + schema: + $ref: '#/components/schemas/rpcStatus' + description: An unexpected error response. + summary: Получить счета пользователя. + tags: + - UsersService + x-codegen-request-body-name: body + /tinkoff.public.invest.api.contract.v1.UsersService/GetInfo: + post: + operationId: UsersService_GetInfo + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/v1GetInfoRequest' + description: Запрос информации о пользователе. + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/v1GetInfoResponse' + description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. + default: + content: + application/json: + schema: + $ref: '#/components/schemas/rpcStatus' + description: An unexpected error response. + summary: Получить информацию о пользователе. + tags: + - UsersService + x-codegen-request-body-name: body + /tinkoff.public.invest.api.contract.v1.UsersService/GetMarginAttributes: + post: + operationId: UsersService_GetMarginAttributes + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/v1GetMarginAttributesRequest' + description: Запрос маржинальных показателей по счёту. + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/v1GetMarginAttributesResponse' + description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. + default: + content: + application/json: + schema: + $ref: '#/components/schemas/rpcStatus' + description: An unexpected error response. + summary: Рассчитать маржинальные показатели по счёту. + tags: + - UsersService + x-codegen-request-body-name: body + /tinkoff.public.invest.api.contract.v1.UsersService/GetUserTariff: + post: + operationId: UsersService_GetUserTariff + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/v1GetUserTariffRequest' + description: Запрос текущих лимитов пользователя. + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/v1GetUserTariffResponse' + description: A successful response. + '400': + description: >- + 400 Bad Request - Запрос составлен неверно, проверьте параметры + вызова и синтаксические ошибки. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 3 + message: interval is invalid + description: 30011 + '401': + description: 401 Unauthorized - Токен доступа не найден или не активен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 16 + message: authentication token is missing or invalid + description: 40003 + '403': + description: >- + 403 Forbidden - Недостаточно прав для выполнения запроса, проверьте + соответствие токена и передаваемого в запросе счета. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 7 + message: insufficient privileges + description: 40002 + '404': + description: >- + 404 Not Found - Неверный URL запроса или переданный параметр не + определен. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorResponse' + example: + code: 5 + message: account not found + description: 50004 + '408': + description: >- + 408 Request Timeout - Время передачи запроса клиентом истекло. + Проверьте работу приложения. + '415': + description: >- + 415 Unsupported Media Type - Неверный тип данных, проверьте формат + передаваемого сообщения. + '429': + description: 429 Too Many Requests - Превышен лимит запросов в минуту. + '500': + description: >- + 500 Internal Server Error - Внутренняя ошибка сервера, попробуйте + повторить запрос позже + '501': + description: >- + 501 Not Implemented - Метод не реализован, проверьте путь вызова в + запросе. + '503': + description: >- + 503 Service Unavailable - Сервис временно недоступен, попробуйте + повторить запрос позже. + '504': + description: >- + 504 Gateway Timeout - Превышен интервал ожидания ответа от сервера, + попробуйте повторить запрос позже. + default: + content: + application/json: + schema: + $ref: '#/components/schemas/rpcStatus' + description: An unexpected error response. + summary: Запросить тариф пользователя. + tags: + - UsersService + x-codegen-request-body-name: body +components: + schemas: + GetAssetFundamentalsResponseStatisticResponse: + example: + domicileIndicatorCode: domicileIndicatorCode + assetUid: assetUid + dividendYieldDailyTtm: 3.0937452626664474 + priceToSalesTtm: 4.965218492984954 + adrToCommonShareRatio: 7.740351818741173 + highPriceLast52Weeks: 6.027456183070403 + dividendRateTtm: 7.143538047012306 + revenueChangeFiveYears: 3.0576100241049344 + totalDebtMrq: 1.284659006116532 + fiveYearAnnualRevenueGrowthRate: 6.84685269835264 + fiveYearAnnualDividendGrowthRate: 6.519180951018382 + freeFloat: 7.061401241503109 + freeCashFlowToPrice: 6.878052220127876 + revenueTtm: 2.027123023002322 + totalEnterpriseValueMrq: 9.369310271410669 + epsTtm: 1.2315135367772556 + peRatioTtm: 1.1730742509559433 + fiscalPeriodStartDate: 2000-01-23T04:56:07.000Z + evToSales: 4.078845849666752 + fiscalPeriodEndDate: 2000-01-23T04:56:07.000Z + roic: 6.965117697638846 + dividendPayoutRatioFy: 0.10263654006109402 + marketCapitalization: 0.8008281904610115 + ebitdaChangeFiveYears: 5.533258397034986 + epsChangeFiveYears: 7.04836565559697 + priceToFreeCashFlowTtm: 9.965781217890562 + numberOfEmployees: 3.0205796992916243 + netInterestMarginMrq: 9.018348186070783 + oneYearAnnualRevenueGrowthRate: 8.969578798196912 + currentRatioMrq: 6.704019297950036 + averageDailyVolumeLast4Weeks: 5.637376656633329 + forwardAnnualDividendYield: 9.301444243932576 + netMarginMrq: 8.762042012749001 + roa: 3.5571952270680973 + totalDebtToEbitdaMrq: 6.778324963048013 + roe: 6.438423552598547 + freeCashFlowTtm: 1.4894159098541704 + evToEbitdaMrq: 6.683562403749608 + fiveYearsAverageDividendYield: 7.058770351582356 + priceToBookTtm: 5.025004791520295 + totalDebtToEquityMrq: 2.8841621266687802 + averageDailyVolumeLast10Days: 5.962133916683182 + fixedChargeCoverageRatioFy: 3.353193347011243 + currency: currency + netIncomeTtm: 7.386281948385884 + sharesOutstanding: 3.616076749251911 + beta: 2.3021358869347655 + threeYearAnnualRevenueGrowthRate: 7.457744773683766 + totalDebtChangeFiveYears: 3.2588565619047607 + lowPriceLast52Weeks: 1.4658129805029452 + exDividendDate: 2000-01-23T04:56:07.000Z + ebitdaTtm: 4.145608029883936 + netDebtToEbitda: 5.944895607614016 + dilutedEpsTtm: 1.0246457001441578 + buyBackTtm: 4.652396432933246 + dividendsPerShare: 0.8851374739011653 + properties: + assetUid: + description: Идентификатор актива. + type: string + currency: + description: Валюта. + type: string + marketCapitalization: + description: Рыночная капитализация. + format: double + type: number + highPriceLast52Weeks: + description: Максимум за год. + format: double + type: number + lowPriceLast52Weeks: + description: Минимум за год. + format: double + type: number + averageDailyVolumeLast10Days: + description: Средний объём торгов за 10 дней. + format: double + type: number + averageDailyVolumeLast4Weeks: + description: Средний объём торгов за месяц. + format: double + type: number + beta: + format: double + type: number + freeFloat: + description: Доля акций в свободном обращении. + format: double + type: number + forwardAnnualDividendYield: + description: Процент форвардной дивидендной доходности по отношению к цене акций. + format: double + type: number + sharesOutstanding: + description: Количество акций в обращении. + format: double + type: number + revenueTtm: + description: Выручка. + format: double + type: number + ebitdaTtm: + description: EBITDA — прибыль до вычета процентов, налогов, износа и амортизации. + format: double + type: number + netIncomeTtm: + description: Чистая прибыль. + format: double + type: number + epsTtm: + description: >- + EPS — величина чистой прибыли компании, которая приходится на каждую + обыкновенную акцию. + format: double + type: number + dilutedEpsTtm: + description: >- + EPS компании с допущением, что все конвертируемые ценные бумаги + компании были сконвертированы в обыкновенные акции. + format: double + type: number + freeCashFlowTtm: + description: Свободный денежный поток. + format: double + type: number + fiveYearAnnualRevenueGrowthRate: + description: Среднегодовой рocт выручки за 5 лет. + format: double + type: number + threeYearAnnualRevenueGrowthRate: + description: Среднегодовой рocт выручки за 3 года. + format: double + type: number + peRatioTtm: + description: Соотношение рыночной капитализации компании к её чистой прибыли. + format: double + type: number + priceToSalesTtm: + description: Соотношение рыночной капитализации компании к её выручке. + format: double + type: number + priceToBookTtm: + description: >- + Соотношение рыночной капитализации компании к её балансовой + стоимости. + format: double + type: number + priceToFreeCashFlowTtm: + description: >- + Соотношение рыночной капитализации компании к её свободному + денежному потоку. + format: double + type: number + totalEnterpriseValueMrq: + description: Рыночная стоимость компании. + format: double + type: number + evToEbitdaMrq: + description: Соотношение EV и EBITDA. + format: double + type: number + netMarginMrq: + description: Маржа чистой прибыли. + format: double + type: number + netInterestMarginMrq: + description: Рентабельность чистой прибыли. + format: double + type: number + roe: + description: Рентабельность собственного капитала. + format: double + type: number + roa: + description: Рентабельность активов. + format: double + type: number + roic: + description: Рентабельность активов. + format: double + type: number + totalDebtMrq: + description: Сумма краткосрочных и долгосрочных обязательств компании. + format: double + type: number + totalDebtToEquityMrq: + description: Соотношение долга к собственному капиталу. + format: double + type: number + totalDebtToEbitdaMrq: + description: Total Debt/EBITDA. + format: double + type: number + freeCashFlowToPrice: + description: Отношение свободногоо кэша к стоимости. + format: double + type: number + netDebtToEbitda: + description: Отношение чистого долга к EBITDA. + format: double + type: number + currentRatioMrq: + description: Коэффициент текущей ликвидности. + format: double + type: number + fixedChargeCoverageRatioFy: + description: Коэффициент покрытия фиксированных платежей — FCCR. + format: double + type: number + dividendYieldDailyTtm: + description: Дивидендная доходность за 12 месяцев. + format: double + type: number + dividendRateTtm: + description: Выплаченные дивиденды за 12 месяцев. + format: double + type: number + dividendsPerShare: + description: Значение дивидендов на акцию. + format: double + type: number + fiveYearsAverageDividendYield: + description: Средняя дивидендная доходность за 5 лет. + format: double + type: number + fiveYearAnnualDividendGrowthRate: + description: Среднегодовой рост дивидендов за 5 лет. + format: double + type: number + dividendPayoutRatioFy: + description: Процент чистой прибыли, уходящий на выплату дивидендов. + format: double + type: number + buyBackTtm: + description: Деньги, потраченные на обратный выкуп акций. + format: double + type: number + oneYearAnnualRevenueGrowthRate: + description: Рост выручки за 1 год. + format: double + type: number + domicileIndicatorCode: + description: Код страны. + type: string + adrToCommonShareRatio: + description: Соотношение депозитарной расписки к акциям. + format: double + type: number + numberOfEmployees: + description: Количество сотрудников. + format: double + type: number + exDividendDate: + format: date-time + type: string + fiscalPeriodStartDate: + description: Начало фискального периода. + format: date-time + type: string + fiscalPeriodEndDate: + description: Окончание фискального периода. + format: date-time + type: string + revenueChangeFiveYears: + description: Изменение общего дохода за 5 лет. + format: double + type: number + epsChangeFiveYears: + description: Изменение EPS за 5 лет. + format: double + type: number + ebitdaChangeFiveYears: + description: Изменение EBIDTA за 5 лет. + format: double + type: number + totalDebtChangeFiveYears: + description: Изменение общей задолжности за 5 лет. + format: double + type: number + evToSales: + description: Отношение EV к выручке. + format: double + type: number + title: Фундаментальные показатели по активу + type: object + GetAssetReportsResponseAssetReportPeriodType: + default: PERIOD_TYPE_UNSPECIFIED + description: |2- + - PERIOD_TYPE_UNSPECIFIED: Не указан. + - PERIOD_TYPE_QUARTER: Квартальный. + - PERIOD_TYPE_SEMIANNUAL: Полугодовой. + - PERIOD_TYPE_ANNUAL: Годовой. + enum: + - PERIOD_TYPE_UNSPECIFIED + - PERIOD_TYPE_QUARTER + - PERIOD_TYPE_SEMIANNUAL + - PERIOD_TYPE_ANNUAL + type: string + GetAssetReportsResponseGetAssetReportsEvent: + example: + periodNum: 6 + createdAt: 2000-01-23T04:56:07.000Z + reportDate: 2000-01-23T04:56:07.000Z + periodYear: 0 + instrumentId: instrumentId + properties: + instrumentId: + description: Идентификатор инструмента. + type: string + reportDate: + description: Дата публикации отчёта. + format: date-time + type: string + periodYear: + description: Год периода отчета. + format: int32 + type: integer + periodNum: + description: Номер периода. + format: int32 + type: integer + periodType: + $ref: '#/components/schemas/GetAssetReportsResponseAssetReportPeriodType' + createdAt: + description: Дата создания записи. + format: date-time + type: string + title: Отчет + type: object + GetBondEventsRequestEventType: + default: EVENT_TYPE_UNSPECIFIED + description: |2- + - EVENT_TYPE_UNSPECIFIED: Неопределённое значение. + - EVENT_TYPE_CPN: Купон. + - EVENT_TYPE_CALL: Опцион (оферта). + - EVENT_TYPE_MTY: Погашение. + - EVENT_TYPE_CONV: Конвертация. + enum: + - EVENT_TYPE_UNSPECIFIED + - EVENT_TYPE_CPN + - EVENT_TYPE_CALL + - EVENT_TYPE_MTY + - EVENT_TYPE_CONV + type: string + GetBondEventsResponseBondEvent: + example: + fixDate: 2000-01-23T04:56:07.000Z + execution: execution + note: note + defaultDate: 2000-01-23T04:56:07.000Z + eventNumber: 0 + instrumentId: instrumentId + couponEndDate: 2000-01-23T04:56:07.000Z + rateDate: 2000-01-23T04:56:07.000Z + payOneBond: + nano: 5 + currency: currency + units: units + moneyFlowVal: + nano: 5 + currency: currency + units: units + couponPeriod: 6 + convertToFinToolId: convertToFinToolId + couponInterestRate: + nano: 6 + units: units + eventTotalVol: + nano: 6 + units: units + realPayDate: 2000-01-23T04:56:07.000Z + operationType: operationType + value: + nano: 6 + units: units + couponStartDate: 2000-01-23T04:56:07.000Z + eventDate: 2000-01-23T04:56:07.000Z + payDate: 2000-01-23T04:56:07.000Z + properties: + instrumentId: + description: Идентификатор инструмента. + type: string + eventNumber: + description: Номер события для данного типа события. + format: int32 + type: integer + eventDate: + description: Дата события. + format: date-time + type: string + eventType: + $ref: '#/components/schemas/GetBondEventsRequestEventType' + eventTotalVol: + $ref: '#/components/schemas/v1Quotation' + fixDate: + description: Дата фиксации владельцев для участия в событии. + format: date-time + type: string + rateDate: + description: Дата определения даты или факта события. + format: date-time + type: string + defaultDate: + description: Дата дефолта, если применимо. + format: date-time + type: string + realPayDate: + description: Дата реального исполнения обязательства. + format: date-time + type: string + payDate: + description: Дата выплаты. + format: date-time + type: string + payOneBond: + $ref: '#/components/schemas/v1MoneyValue' + moneyFlowVal: + $ref: '#/components/schemas/v1MoneyValue' + execution: + description: Признак исполнения. + type: string + operationType: + description: Тип операции. + type: string + value: + $ref: '#/components/schemas/v1Quotation' + note: + description: Примечание. + type: string + convertToFinToolId: + description: >- + ID выпуска бумаг, в который произведена конвертация (для + конвертаций). + type: string + couponStartDate: + description: Начало купонного периода. + format: date-time + type: string + couponEndDate: + description: Окончание купонного периода. + format: date-time + type: string + couponPeriod: + description: Купонный период. + format: int32 + type: integer + couponInterestRate: + $ref: '#/components/schemas/v1Quotation' + type: object + GetConsensusForecastsResponseConsensusForecastsItem: + example: + uid: uid + assetUid: assetUid + createdAt: 2000-01-23T04:56:07.000Z + bestTargetHigh: + nano: 6 + units: units + bestTargetLow: + nano: 6 + units: units + totalSellRecommend: 1 + currency: currency + bestTargetPrice: + nano: 6 + units: units + totalHoldRecommend: 6 + prognosisDate: 2000-01-23T04:56:07.000Z + totalBuyRecommend: 0 + properties: + uid: + description: UID-идентификатор. + type: string + assetUid: + description: UID-идентификатор актива. + type: string + createdAt: + description: Дата и время создания записи. + format: date-time + type: string + bestTargetPrice: + $ref: '#/components/schemas/v1Quotation' + bestTargetLow: + $ref: '#/components/schemas/v1Quotation' + bestTargetHigh: + $ref: '#/components/schemas/v1Quotation' + totalBuyRecommend: + description: Количество аналитиков рекомендующих покупать. + format: int32 + type: integer + totalHoldRecommend: + description: Количество аналитиков рекомендующих держать. + format: int32 + type: integer + totalSellRecommend: + description: Количество аналитиков рекомендующих продавать. + format: int32 + type: integer + currency: + description: Валюта прогнозов инструмента. + type: string + consensus: + $ref: '#/components/schemas/v1Recommendation' + prognosisDate: + description: Дата прогноза. + format: date-time + type: string + title: Прогноз + type: object + GetForecastResponseConsensusItem: + description: Консенсус-прогноз. + example: + consensus: + nano: 6 + units: units + priceChange: + nano: 6 + units: units + uid: uid + maxTarget: + nano: 6 + units: units + ticker: ticker + priceChangeRel: + nano: 6 + units: units + currentPrice: + nano: 6 + units: units + currency: currency + minTarget: + nano: 6 + units: units + properties: + uid: + description: Уникальный идентификатор инструмента. + type: string + ticker: + description: Тикер инструмента. + type: string + recommendation: + $ref: '#/components/schemas/v1Recommendation' + currency: + description: Валюта. + type: string + currentPrice: + $ref: '#/components/schemas/v1Quotation' + consensus: + $ref: '#/components/schemas/v1Quotation' + minTarget: + $ref: '#/components/schemas/v1Quotation' + maxTarget: + $ref: '#/components/schemas/v1Quotation' + priceChange: + $ref: '#/components/schemas/v1Quotation' + priceChangeRel: + $ref: '#/components/schemas/v1Quotation' + type: object + GetForecastResponseTargetItem: + example: + priceChange: + nano: 6 + units: units + uid: uid + ticker: ticker + targetPrice: + nano: 6 + units: units + showName: showName + priceChangeRel: + nano: 6 + units: units + currentPrice: + nano: 6 + units: units + company: company + currency: currency + recommendationDate: 2000-01-23T04:56:07.000Z + properties: + uid: + description: Уникальный идентификатор инструмента. + type: string + ticker: + description: Тикер инструмента. + type: string + company: + description: Название компании, давшей прогноз. + type: string + recommendation: + $ref: '#/components/schemas/v1Recommendation' + recommendationDate: + description: Дата прогноза. + format: date-time + type: string + currency: + description: Валюта. + type: string + currentPrice: + $ref: '#/components/schemas/v1Quotation' + targetPrice: + $ref: '#/components/schemas/v1Quotation' + priceChange: + $ref: '#/components/schemas/v1Quotation' + priceChangeRel: + $ref: '#/components/schemas/v1Quotation' + showName: + description: Наименование инструмента. + type: string + title: Прогноз + type: object + GetMaxLotsResponseBuyLimitsView: + example: + buyMoneyAmount: + nano: 6 + units: units + buyMaxLots: buyMaxLots + buyMaxMarketLots: buyMaxMarketLots + properties: + buyMoneyAmount: + $ref: '#/components/schemas/v1Quotation' + buyMaxLots: + format: int64 + title: Максимальное доступное количество лотов для покупки + type: string + buyMaxMarketLots: + format: int64 + title: >- + Максимальное доступное количество лотов для покупки для заявки по + рыночной цене на текущий момент + type: string + type: object + GetMaxLotsResponseSellLimitsView: + example: + sellMaxLots: sellMaxLots + properties: + sellMaxLots: + format: int64 + title: Максимальное доступное количество лотов для продажи + type: string + type: object + GetOrderPriceResponseExtraBond: + example: + aciValue: + nano: 5 + currency: currency + units: units + nominalConversionRate: + nano: 6 + units: units + properties: + aciValue: + $ref: '#/components/schemas/v1MoneyValue' + nominalConversionRate: + $ref: '#/components/schemas/v1Quotation' + type: object + GetOrderPriceResponseExtraFuture: + example: + initialMargin: + nano: 5 + currency: currency + units: units + properties: + initialMargin: + $ref: '#/components/schemas/v1MoneyValue' + type: object + GetTechAnalysisRequestDeviation: + properties: + deviationMultiplier: + $ref: '#/components/schemas/v1Quotation' + type: object + GetTechAnalysisRequestIndicatorInterval: + default: INDICATOR_INTERVAL_UNSPECIFIED + description: |- + Интервал свечи. + + - INDICATOR_INTERVAL_UNSPECIFIED: Интервал не определён. + - INDICATOR_INTERVAL_ONE_MINUTE: 1 минута. + - INDICATOR_INTERVAL_FIVE_MINUTES: 5 минут. + - INDICATOR_INTERVAL_FIFTEEN_MINUTES: 15 минут. + - INDICATOR_INTERVAL_ONE_HOUR: 1 час. + - INDICATOR_INTERVAL_ONE_DAY: 1 день. + - INDICATOR_INTERVAL_2_MIN: 2 минуты. + - INDICATOR_INTERVAL_3_MIN: 3 минуты. + - INDICATOR_INTERVAL_10_MIN: 10 минут. + - INDICATOR_INTERVAL_30_MIN: 30 минут. + - INDICATOR_INTERVAL_2_HOUR: 2 часа. + - INDICATOR_INTERVAL_4_HOUR: 4 часа. + - INDICATOR_INTERVAL_WEEK: Неделя. + - INDICATOR_INTERVAL_MONTH: Месяц. + enum: + - INDICATOR_INTERVAL_UNSPECIFIED + - INDICATOR_INTERVAL_ONE_MINUTE + - INDICATOR_INTERVAL_FIVE_MINUTES + - INDICATOR_INTERVAL_FIFTEEN_MINUTES + - INDICATOR_INTERVAL_ONE_HOUR + - INDICATOR_INTERVAL_ONE_DAY + - INDICATOR_INTERVAL_2_MIN + - INDICATOR_INTERVAL_3_MIN + - INDICATOR_INTERVAL_10_MIN + - INDICATOR_INTERVAL_30_MIN + - INDICATOR_INTERVAL_2_HOUR + - INDICATOR_INTERVAL_4_HOUR + - INDICATOR_INTERVAL_WEEK + - INDICATOR_INTERVAL_MONTH + type: string + GetTechAnalysisRequestIndicatorType: + default: INDICATOR_TYPE_UNSPECIFIED + description: |2- + - INDICATOR_TYPE_UNSPECIFIED: Не определён. + - INDICATOR_TYPE_BB: Bollinger Bands — линия Боллинжера. + - INDICATOR_TYPE_EMA: Exponential Moving Average — EMA, экспоненциальная скользящая средняя. + - INDICATOR_TYPE_RSI: Relative Strength Index — индекс относительной силы. + - INDICATOR_TYPE_MACD: Moving Average Convergence/Divergence — схождение/расхождение скользящих средних. + - INDICATOR_TYPE_SMA: Simple Moving Average — простое скользящее среднее. + enum: + - INDICATOR_TYPE_UNSPECIFIED + - INDICATOR_TYPE_BB + - INDICATOR_TYPE_EMA + - INDICATOR_TYPE_RSI + - INDICATOR_TYPE_MACD + - INDICATOR_TYPE_SMA + type: string + GetTechAnalysisRequestSmoothing: + properties: + fastLength: + description: >- + Короткий период сглаживания для первой экспоненциальной скользящей + средней (EMA). + format: int32 + type: integer + slowLength: + description: >- + Длинный период сглаживания для второй экспоненциальной скользящей + средней (EMA). + format: int32 + type: integer + signalSmoothing: + format: int32 + title: >- + Период сглаживания для третьей экспоненциальной скользящей средней + (EMA) + type: integer + type: object + GetTechAnalysisRequestTypeOfPrice: + default: TYPE_OF_PRICE_UNSPECIFIED + description: |2- + - TYPE_OF_PRICE_UNSPECIFIED: Не указано. + - TYPE_OF_PRICE_CLOSE: Цена закрытия. + - TYPE_OF_PRICE_OPEN: Цена открытия. + - TYPE_OF_PRICE_HIGH: Максимальное значение за выбранный интервал. + - TYPE_OF_PRICE_LOW: Минимальное значение за выбранный интервал. + - TYPE_OF_PRICE_AVG: Среднее значение по показателям [ (close + open + high + low) / 4 ]. + enum: + - TYPE_OF_PRICE_UNSPECIFIED + - TYPE_OF_PRICE_CLOSE + - TYPE_OF_PRICE_OPEN + - TYPE_OF_PRICE_HIGH + - TYPE_OF_PRICE_LOW + - TYPE_OF_PRICE_AVG + type: string + GetTechAnalysisResponseTechAnalysisItem: + example: + lowerBand: + nano: 6 + units: units + upperBand: + nano: 6 + units: units + macd: + nano: 6 + units: units + signal: + nano: 6 + units: units + timestamp: 2000-01-23T04:56:07.000Z + middleBand: + nano: 6 + units: units + properties: + timestamp: + description: >- + Временная метка по UTC, для которой были рассчитаны значения + индикатора. + format: date-time + type: string + middleBand: + $ref: '#/components/schemas/v1Quotation' + upperBand: + $ref: '#/components/schemas/v1Quotation' + lowerBand: + $ref: '#/components/schemas/v1Quotation' + signal: + $ref: '#/components/schemas/v1Quotation' + macd: + $ref: '#/components/schemas/v1Quotation' + type: object + OrderStateStreamResponseMarkerType: + default: MARKER_UNKNOWN + description: |- + - MARKER_UNKNOWN: не определено + - MARKER_BROKER: сделки брокера + - MARKER_CHAT: исполнение поручение, полученного от клиента через каналы связи + - MARKER_PAPER: исполнение поручение, полученного от клиента в бумажной форме + - MARKER_MARGIN: принудительное закрытие позиций + - MARKER_TKBNM: сделки по управлению ликвидностью + - MARKER_SHORT: сделки РЕПО по привлечению у клиентов бумаг + - MARKER_SPECMM: перенос временно непокрытых позиций + enum: + - MARKER_UNKNOWN + - MARKER_BROKER + - MARKER_CHAT + - MARKER_PAPER + - MARKER_MARGIN + - MARKER_TKBNM + - MARKER_SHORT + - MARKER_SPECMM + - MARKER_PO + title: Маркер + type: string + OrderStateStreamResponseStatusCauseInfo: + default: CAUSE_UNSPECIFIED + description: |- + - CAUSE_UNSPECIFIED: Не определено + - CAUSE_CANCELLED_BY_CLIENT: Отменено клиентом + - CAUSE_CANCELLED_BY_EXCHANGE: Отменено биржей + - CAUSE_CANCELLED_NOT_ENOUGH_POSITION: Заявка не выставлена из-за нехватки средств + - CAUSE_CANCELLED_BY_CLIENT_BLOCK: Отменено из-за блокировки клиента + - CAUSE_REJECTED_BY_BROKER: Отклонено брокером + - CAUSE_REJECTED_BY_EXCHANGE: Отклонено биржей + - CAUSE_CANCELLED_BY_BROKER: Отменено брокером + enum: + - CAUSE_UNSPECIFIED + - CAUSE_CANCELLED_BY_CLIENT + - CAUSE_CANCELLED_BY_EXCHANGE + - CAUSE_CANCELLED_NOT_ENOUGH_POSITION + - CAUSE_CANCELLED_BY_CLIENT_BLOCK + - CAUSE_REJECTED_BY_BROKER + - CAUSE_REJECTED_BY_EXCHANGE + - CAUSE_CANCELLED_BY_BROKER + title: Дополнительная информация по статусу заявки + type: string PortfolioRequestCurrencyRequest: default: RUB enum: - RUB - USD - EUR + title: |- + - RUB: Рубли + - USD: Доллары + - EUR: Евро type: string - protobufAny: + TradingIntervalTimeInterval: example: - typeUrl: typeUrl - value: value + endTs: 2000-01-23T04:56:07.000Z + startTs: 2000-01-23T04:56:07.000Z properties: - typeUrl: + startTs: + description: Время начала интервала. + format: date-time type: string - value: - format: byte - pattern: ^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$ + endTs: + description: Время окончания интервала. + format: date-time + type: string + type: object + contractv1CandleSource: + default: CANDLE_SOURCE_UNSPECIFIED + description: |2- + - CANDLE_SOURCE_UNSPECIFIED: Источник свечей не определён. + - CANDLE_SOURCE_EXCHANGE: Биржевые свечи. + - CANDLE_SOURCE_DEALER_WEEKEND: Свечи дилера в результате торговли по выходным. + enum: + - CANDLE_SOURCE_UNSPECIFIED + - CANDLE_SOURCE_EXCHANGE + - CANDLE_SOURCE_DEALER_WEEKEND + type: string + contractv1OrderState: + description: Информация о торговом поручении. + example: + orderId: orderId + figi: figi + initialOrderPrice: + nano: 5 + currency: currency + units: units + initialCommission: + nano: 5 + currency: currency + units: units + averagePositionPrice: + nano: 5 + currency: currency + units: units + lotsExecuted: lotsExecuted + totalOrderAmount: + nano: 5 + currency: currency + units: units + lotsRequested: lotsRequested + instrumentUid: instrumentUid + stages: + - executionTime: 2000-01-23T04:56:07.000Z + quantity: quantity + price: + nano: 5 + currency: currency + units: units + tradeId: tradeId + - executionTime: 2000-01-23T04:56:07.000Z + quantity: quantity + price: + nano: 5 + currency: currency + units: units + tradeId: tradeId + orderRequestId: orderRequestId + executedOrderPrice: + nano: 5 + currency: currency + units: units + executedCommission: + nano: 5 + currency: currency + units: units + initialSecurityPrice: + nano: 5 + currency: currency + units: units + serviceCommission: + nano: 5 + currency: currency + units: units + currency: currency + orderDate: 2000-01-23T04:56:07.000Z + properties: + orderId: + description: Биржевой идентификатор заявки. + type: string + executionReportStatus: + $ref: '#/components/schemas/v1OrderExecutionReportStatus' + lotsRequested: + description: Запрошено лотов. + format: int64 + type: string + lotsExecuted: + description: Исполнено лотов. + format: int64 + type: string + initialOrderPrice: + $ref: '#/components/schemas/v1MoneyValue' + executedOrderPrice: + $ref: '#/components/schemas/v1MoneyValue' + totalOrderAmount: + $ref: '#/components/schemas/v1MoneyValue' + averagePositionPrice: + $ref: '#/components/schemas/v1MoneyValue' + initialCommission: + $ref: '#/components/schemas/v1MoneyValue' + executedCommission: + $ref: '#/components/schemas/v1MoneyValue' + figi: + description: Figi-идентификатор инструмента. + type: string + direction: + $ref: '#/components/schemas/v1OrderDirection' + initialSecurityPrice: + $ref: '#/components/schemas/v1MoneyValue' + stages: + description: Стадии выполнения заявки. + items: + $ref: '#/components/schemas/v1OrderStage' + type: array + serviceCommission: + $ref: '#/components/schemas/v1MoneyValue' + currency: + description: Валюта заявки. + type: string + orderType: + $ref: '#/components/schemas/v1OrderType' + orderDate: + description: Дата и время выставления заявки в часовом поясе UTC. + format: date-time + type: string + instrumentUid: + description: UID идентификатор инструмента. + type: string + orderRequestId: + description: >- + Идентификатор ключа идемпотентности, переданный клиентом, в формате + UID. Максимальная длина 36 символов. + type: string + type: object + protobufAny: + additionalProperties: + type: object + example: + '@type': '@type' + properties: + '@type': type: string type: object rpcStatus: example: code: 1 details: - - typeUrl: typeUrl - value: value - - typeUrl: typeUrl - value: value + - '@type': '@type' + - '@type': '@type' message: message properties: code: @@ -1955,7 +10175,13 @@ components: type: object v1AccessLevel: default: ACCOUNT_ACCESS_LEVEL_UNSPECIFIED - description: Уровень доступа к счёту. + description: |- + Уровень доступа к счёту. + + - ACCOUNT_ACCESS_LEVEL_UNSPECIFIED: Уровень доступа не определён. + - ACCOUNT_ACCESS_LEVEL_FULL_ACCESS: Полный доступ к счёту. + - ACCOUNT_ACCESS_LEVEL_READ_ONLY: Доступ с уровнем прав «только чтение». + - ACCOUNT_ACCESS_LEVEL_NO_ACCESS: Доступа нет. enum: - ACCOUNT_ACCESS_LEVEL_UNSPECIFIED - ACCOUNT_ACCESS_LEVEL_FULL_ACCESS @@ -1993,31 +10219,48 @@ components: type: object v1AccountStatus: default: ACCOUNT_STATUS_UNSPECIFIED - description: Статус счёта. + description: |- + Статус счёта. + + - ACCOUNT_STATUS_UNSPECIFIED: Статус счёта не определён. + - ACCOUNT_STATUS_NEW: Новый, в процессе открытия. + - ACCOUNT_STATUS_OPEN: Открытый и активный счёт. + - ACCOUNT_STATUS_CLOSED: Закрытый счёт. + - ACCOUNT_STATUS_ALL: Все счета. enum: - ACCOUNT_STATUS_UNSPECIFIED - ACCOUNT_STATUS_NEW - ACCOUNT_STATUS_OPEN - ACCOUNT_STATUS_CLOSED + - ACCOUNT_STATUS_ALL type: string v1AccountSubscriptionStatus: - description: Счет клиента. + description: Счёт клиента. example: accountId: accountId properties: accountId: + description: Идентификатор счёта. type: string subscriptionStatus: $ref: '#/components/schemas/v1PortfolioSubscriptionStatus' type: object v1AccountType: default: ACCOUNT_TYPE_UNSPECIFIED - description: Тип счёта. + description: |- + Тип счёта. + + - ACCOUNT_TYPE_UNSPECIFIED: Тип аккаунта не определён. + - ACCOUNT_TYPE_TINKOFF: Брокерский счёт Т-Инвестиций. + - ACCOUNT_TYPE_TINKOFF_IIS: ИИС. + - ACCOUNT_TYPE_INVEST_BOX: Инвесткопилка. + - ACCOUNT_TYPE_INVEST_FUND: Фонд денежного рынка. enum: - ACCOUNT_TYPE_UNSPECIFIED - ACCOUNT_TYPE_TINKOFF - ACCOUNT_TYPE_TINKOFF_IIS - ACCOUNT_TYPE_INVEST_BOX + - ACCOUNT_TYPE_INVEST_FUND type: string v1AccruedInterest: description: Операция начисления купонов. @@ -2034,6 +10277,7 @@ components: units: units properties: date: + description: Дата и время выплаты по UTC. format: date-time type: string value: @@ -2073,12 +10317,15 @@ components: name: name properties: uid: + description: Уникальный идентификатор актива. type: string type: $ref: '#/components/schemas/v1AssetType' name: + description: Наименование актива. type: string instruments: + description: Массив идентификаторов инструментов. items: $ref: '#/components/schemas/v1AssetInstrument' type: array @@ -2121,43 +10368,61 @@ components: currentNominal: $ref: '#/components/schemas/v1Quotation' borrowName: + description: Наименование заемщика. type: string issueSize: $ref: '#/components/schemas/v1Quotation' nominal: $ref: '#/components/schemas/v1Quotation' nominalCurrency: + description: Валюта номинала. type: string issueKind: + description: Форма выпуска облигации. type: string interestKind: + description: Форма дохода облигации. type: string couponQuantityPerYear: + description: Количество выплат в год. format: int32 type: integer indexedNominalFlag: + description: Признак облигации с индексируемым номиналом. type: boolean subordinatedFlag: + description: Признак субординированной облигации. type: boolean collateralFlag: + description: Признак обеспеченной облигации. type: boolean taxFreeFlag: + description: >- + Признак показывает, что купоны облигации не облагаются налогом — для + mass market. type: boolean amortizationFlag: + description: Признак облигации с амортизацией долга. type: boolean floatingCouponFlag: + description: Признак облигации с плавающим купоном. type: boolean perpetualFlag: + description: Признак бессрочной облигации. type: boolean maturityDate: + description: Дата погашения облигации. format: date-time type: string returnCondition: + description: Описание и условия получения дополнительного дохода. type: string stateRegDate: + description: Дата выпуска облигации. format: date-time type: string placementDate: + description: Дата размещения облигации. format: date-time type: string placementPrice: @@ -2176,6 +10441,7 @@ components: nominal: $ref: '#/components/schemas/v1Quotation' nominalCurrency: + description: Валюта номинала. type: string type: object v1AssetCurrency: @@ -2184,6 +10450,7 @@ components: baseCurrency: baseCurrency properties: baseCurrency: + description: ISO-код валюты. type: string type: object v1AssetEtf: @@ -2254,62 +10521,82 @@ components: fixedCommission: $ref: '#/components/schemas/v1Quotation' paymentType: + description: Тип распределения доходов от выплат по бумагам. type: string watermarkFlag: + description: Признак необходимости выхода фонда в плюс для получения комиссии. type: boolean buyPremium: $ref: '#/components/schemas/v1Quotation' sellDiscount: $ref: '#/components/schemas/v1Quotation' rebalancingFlag: + description: Признак ребалансируемости портфеля фонда. type: boolean rebalancingFreq: + description: Периодичность ребалансировки. type: string managementType: + description: Тип управления. type: string primaryIndex: + description: Индекс, который реплицирует (старается копировать) фонд. type: string focusType: + description: База ETF. type: string leveragedFlag: + description: Признак использования заемных активов (плечо). type: boolean numShare: $ref: '#/components/schemas/v1Quotation' ucitsFlag: + description: Признак обязательства по отчетности перед регулятором. type: boolean releasedDate: + description: Дата выпуска. format: date-time type: string description: + description: Описание фонда. type: string primaryIndexDescription: + description: Описание индекса, за которым следует фонд. type: string primaryIndexCompany: + description: Основные компании, в которые вкладывается фонд. type: string indexRecoveryPeriod: $ref: '#/components/schemas/v1Quotation' inavCode: + description: IVAV-код. type: string divYieldFlag: + description: Признак наличия дивидендной доходности. type: boolean expenseCommission: $ref: '#/components/schemas/v1Quotation' primaryIndexTrackingError: $ref: '#/components/schemas/v1Quotation' rebalancingPlan: + description: Плановая ребалансировка портфеля. type: string taxRate: + description: Ставки налогообложения дивидендов и купонов. type: string rebalancingDates: + description: Даты ребалансировок. items: format: date-time type: string type: array issueKind: + description: Форма выпуска. type: string nominal: $ref: '#/components/schemas/v1Quotation' nominalCurrency: + description: Валюта номинала. type: string type: object v1AssetFull: @@ -2506,19 +10793,25 @@ components: updatedAt: 2000-01-23T04:56:07.000Z properties: uid: + description: Уникальный идентификатор актива. type: string type: $ref: '#/components/schemas/v1AssetType' name: + description: Наименование актива. type: string nameBrief: + description: Короткое наименование актива. type: string description: + description: Описание актива. type: string deletedAt: + description: Дата и время удаления актива. format: date-time type: string requiredTests: + description: Тестирование клиентов. items: type: string type: array @@ -2527,23 +10820,31 @@ components: security: $ref: '#/components/schemas/v1AssetSecurity' gosRegCode: + description: Номер государственной регистрации. type: string cfi: + description: Код CFI. type: string codeNsd: + description: Код НРД инструмента. type: string status: + description: Статус актива. type: string brand: $ref: '#/components/schemas/v1Brand' updatedAt: + description: Дата и время последнего обновления записи. format: date-time type: string brCode: + description: Код типа ц.б. по классификации Банка России. type: string brCodeName: + description: Наименование кода типа ц.б. по классификации Банка России. type: string instruments: + description: Массив идентификаторов инструментов. items: $ref: '#/components/schemas/v1AssetInstrument' type: array @@ -2564,29 +10865,39 @@ components: type: type properties: uid: + description: UID-идентификатор инструмента. type: string figi: + description: FIGI-идентификатор инструмента. type: string instrumentType: + description: Тип инструмента. type: string ticker: + description: Тикер инструмента. type: string classCode: + description: Класс-код (секция торгов). type: string links: + description: Массив связанных инструментов. items: $ref: '#/components/schemas/v1InstrumentLink' type: array instrumentKind: $ref: '#/components/schemas/v1InstrumentType' positionUid: + description: ID позиции. type: string type: object v1AssetRequest: description: Запрос актива по идентификатору. properties: id: + description: UID-идентификатор актива. type: string + required: + - id type: object v1AssetResponse: description: Данные по активу. @@ -2931,8 +11242,10 @@ components: isin: isin properties: isin: + description: ISIN-идентификатор ценной бумаги. type: string type: + description: Тип ценной бумаги. type: string instrumentKind: $ref: '#/components/schemas/v1InstrumentType' @@ -2982,27 +11295,36 @@ components: nominal: $ref: '#/components/schemas/v1Quotation' nominalCurrency: + description: Валюта номинала. type: string primaryIndex: + description: Индекс (Bloomberg). type: string dividendRate: $ref: '#/components/schemas/v1Quotation' preferredShareType: + description: Тип привилегированных акций. type: string ipoDate: + description: Дата IPO. format: date-time type: string registryDate: + description: Дата регистрации. format: date-time type: string divYieldFlag: + description: Признак наличия дивидендной доходности. type: boolean issueKind: + description: Форма выпуска ФИ. type: string placementDate: + description: Дата размещения акции. format: date-time type: string represIsin: + description: ISIN базового актива. type: string issueSizePlan: $ref: '#/components/schemas/v1Quotation' @@ -3033,22 +11355,27 @@ components: nominalCurrency: nominalCurrency properties: borrowName: + description: Наименование заёмщика. type: string nominal: $ref: '#/components/schemas/v1Quotation' nominalCurrency: + description: Валюта номинала. type: string type: $ref: '#/components/schemas/v1StructuredProductType' logicPortfolio: + description: Стратегия портфеля. type: string assetType: $ref: '#/components/schemas/v1AssetType' basicAsset: + description: Вид базового актива в зависимости от типа базового актива. type: string safetyBarrier: $ref: '#/components/schemas/v1Quotation' maturityDate: + description: Дата погашения. format: date-time type: string issueSizePlan: @@ -3056,14 +11383,23 @@ components: issueSize: $ref: '#/components/schemas/v1Quotation' placementDate: + description: Дата размещения ноты. format: date-time type: string issueKind: + description: Форма выпуска. type: string type: object v1AssetType: default: ASSET_TYPE_UNSPECIFIED - description: Тип актива. + description: |- + Тип актива. + + - ASSET_TYPE_UNSPECIFIED: Тип не определён. + - ASSET_TYPE_CURRENCY: Валюта. + - ASSET_TYPE_COMMODITY: Товар. + - ASSET_TYPE_INDEX: Индекс. + - ASSET_TYPE_SECURITY: Ценная бумага. enum: - ASSET_TYPE_UNSPECIFIED - ASSET_TYPE_CURRENCY @@ -3076,6 +11412,8 @@ components: properties: instrumentType: $ref: '#/components/schemas/v1InstrumentType' + instrumentStatus: + $ref: '#/components/schemas/v1InstrumentStatus' type: object v1AssetsResponse: description: Список активов. @@ -3133,6 +11471,7 @@ components: name: name properties: assets: + description: Активы. items: $ref: '#/components/schemas/v1Asset' type: array @@ -3140,8 +11479,13 @@ components: v1Bond: description: Объект передачи информации об облигации. example: + assetUid: assetUid + callDate: 2000-01-23T04:56:07.000Z countryOfRisk: countryOfRisk blockedTcaFlag: true + dlongClient: + nano: 6 + units: units maturityDate: 2000-01-23T04:56:07.000Z sellAvailableFlag: true first1dayCandleDate: 2000-01-23T04:56:07.000Z @@ -3150,10 +11494,17 @@ components: currency: currency units: units sector: sector + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor liquidityFlag: true forIisFlag: true positionUid: positionUid shortEnabledFlag: true + dshortClient: + nano: 6 + units: units dshort: nano: 6 units: units @@ -3215,17 +11566,26 @@ components: isin: isin properties: figi: + description: FIGI-идентификатор инструмента. type: string ticker: + description: Тикер инструмента. type: string classCode: + description: Класс-код (секция торгов). type: string isin: + description: ISIN-идентификатор инструмента. type: string lot: + description: >- + Лотность инструмента. Возможно совершение операций только на + количества ценной бумаги, кратные параметру `lot`. + [Подробнее](https://russianinvestments.github.io/investAPI/glossary#lot). format: int32 type: integer currency: + description: Валюта расчётов. type: string klong: $ref: '#/components/schemas/v1Quotation' @@ -3240,15 +11600,20 @@ components: dshortMin: $ref: '#/components/schemas/v1Quotation' shortEnabledFlag: + description: Признак доступности для операций в шорт. type: boolean name: + description: Название инструмента. type: string exchange: + description: Tорговая площадка (секция биржи). type: string couponQuantityPerYear: + description: Количество выплат по купонам в год. format: int32 type: integer maturityDate: + description: Дата погашения облигации по UTC. format: date-time type: string nominal: @@ -3256,9 +11621,11 @@ components: initialNominal: $ref: '#/components/schemas/v1MoneyValue' stateRegDate: + description: Дата выпуска облигации по UTC. format: date-time type: string placementDate: + description: Дата размещения по UTC. format: date-time type: string placementPrice: @@ -3266,70 +11633,125 @@ components: aciValue: $ref: '#/components/schemas/v1MoneyValue' countryOfRisk: + description: >- + Код страны риска — то есть страны, в которой компания ведёт основной + бизнес. type: string countryOfRiskName: + description: >- + Наименование страны риска — то есть страны, в которой компания ведёт + основной бизнес. type: string sector: + description: Сектор экономики. type: string issueKind: + description: >- + Форма выпуска. Возможные значения:
**documentary** — + документарная;
**non_documentary** — бездокументарная. type: string issueSize: + description: Размер выпуска. format: int64 type: string issueSizePlan: + description: Плановый размер выпуска. format: int64 type: string tradingStatus: $ref: '#/components/schemas/v1SecurityTradingStatus' otcFlag: + description: >- + Флаг, используемый ранее для определения внебиржевых инструментов. + На данный момент не используется для торгуемых через API + инструментов. Может использоваться как фильтр для операций, + совершавшихся некоторое время назад на ОТС площадке. type: boolean buyAvailableFlag: + description: Признак доступности для покупки. type: boolean sellAvailableFlag: + description: Признак доступности для продажи. type: boolean floatingCouponFlag: + description: Признак облигации с плавающим купоном. type: boolean perpetualFlag: + description: Признак бессрочной облигации. type: boolean amortizationFlag: + description: Признак облигации с амортизацией долга. type: boolean minPriceIncrement: $ref: '#/components/schemas/v1Quotation' apiTradeAvailableFlag: + description: Параметр указывает на возможность торговать инструментом через API. type: boolean uid: + description: Уникальный идентификатор инструмента. type: string realExchange: $ref: '#/components/schemas/v1RealExchange' positionUid: + description: Уникальный идентификатор позиции инструмента. + type: string + assetUid: + description: Уникальный идентификатор актива. type: string forIisFlag: + description: Признак доступности для ИИС. type: boolean forQualInvestorFlag: + description: >- + Флаг, отображающий доступность торговли инструментом только для + квалифицированных инвесторов. type: boolean weekendFlag: + description: Флаг, отображающий доступность торговли инструментом по выходным. type: boolean blockedTcaFlag: + description: Флаг заблокированного ТКС. type: boolean subordinatedFlag: + description: Признак субординированной облигации. type: boolean liquidityFlag: + description: Флаг достаточной ликвидности. type: boolean first1minCandleDate: + description: Дата первой минутной свечи. format: date-time type: string first1dayCandleDate: + description: Дата первой дневной свечи. format: date-time type: string riskLevel: $ref: '#/components/schemas/v1RiskLevel' + brand: + $ref: '#/components/schemas/v1BrandData' + bondType: + $ref: '#/components/schemas/v1BondType' + callDate: + description: Дата погашения облигации. + format: date-time + type: string + dlongClient: + $ref: '#/components/schemas/v1Quotation' + dshortClient: + $ref: '#/components/schemas/v1Quotation' type: object v1BondResponse: description: Информация об облигации. example: instrument: + assetUid: assetUid + callDate: 2000-01-23T04:56:07.000Z countryOfRisk: countryOfRisk blockedTcaFlag: true + dlongClient: + nano: 6 + units: units maturityDate: 2000-01-23T04:56:07.000Z sellAvailableFlag: true first1dayCandleDate: 2000-01-23T04:56:07.000Z @@ -3338,10 +11760,17 @@ components: currency: currency units: units sector: sector + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor liquidityFlag: true forIisFlag: true positionUid: positionUid shortEnabledFlag: true + dshortClient: + nano: 6 + units: units dshort: nano: 6 units: units @@ -3405,12 +11834,26 @@ components: instrument: $ref: '#/components/schemas/v1Bond' type: object + v1BondType: + default: BOND_TYPE_UNSPECIFIED + description: |2- + - BOND_TYPE_UNSPECIFIED: Тип облигации не определён. + - BOND_TYPE_REPLACED: Замещающая облигация. + enum: + - BOND_TYPE_UNSPECIFIED + - BOND_TYPE_REPLACED + type: string v1BondsResponse: description: Список облигаций. example: instruments: - - countryOfRisk: countryOfRisk + - assetUid: assetUid + callDate: 2000-01-23T04:56:07.000Z + countryOfRisk: countryOfRisk blockedTcaFlag: true + dlongClient: + nano: 6 + units: units maturityDate: 2000-01-23T04:56:07.000Z sellAvailableFlag: true first1dayCandleDate: 2000-01-23T04:56:07.000Z @@ -3419,10 +11862,17 @@ components: currency: currency units: units sector: sector + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor liquidityFlag: true forIisFlag: true positionUid: positionUid shortEnabledFlag: true + dshortClient: + nano: 6 + units: units dshort: nano: 6 units: units @@ -3482,8 +11932,13 @@ components: issueSize: issueSize countryOfRiskName: countryOfRiskName isin: isin - - countryOfRisk: countryOfRisk + - assetUid: assetUid + callDate: 2000-01-23T04:56:07.000Z + countryOfRisk: countryOfRisk blockedTcaFlag: true + dlongClient: + nano: 6 + units: units maturityDate: 2000-01-23T04:56:07.000Z sellAvailableFlag: true first1dayCandleDate: 2000-01-23T04:56:07.000Z @@ -3492,10 +11947,17 @@ components: currency: currency units: units sector: sector + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor liquidityFlag: true forIisFlag: true positionUid: positionUid shortEnabledFlag: true + dshortClient: + nano: 6 + units: units dshort: nano: 6 units: units @@ -3557,6 +12019,7 @@ components: isin: isin properties: instruments: + description: Массив облигаций. items: $ref: '#/components/schemas/v1Bond' type: array @@ -3574,20 +12037,44 @@ components: countryOfRisk: countryOfRisk properties: uid: + description: UID-идентификатор бренда. type: string name: + description: Наименование бренда. type: string description: + description: Описание. type: string info: + description: Информация о бренде. type: string company: + description: Компания. type: string sector: + description: Сектор. type: string countryOfRisk: + description: Код страны риска. type: string countryOfRiskName: + description: Наименование страны риска. + type: string + type: object + v1BrandData: + example: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor + properties: + logoName: + description: Логотип инструмента. Имя файла для получения логотипа. + type: string + logoBaseColor: + description: Цвет бренда. + type: string + textColor: + description: Цвет текста для цвета логотипа бренда. type: string type: object v1BrokerReport: @@ -3643,29 +12130,40 @@ components: party: party properties: tradeId: + description: Номер сделки. type: string orderId: + description: Номер поручения. type: string figi: + description: FIGI-идентификаторинструмента. type: string executeSign: + description: Признак исполнения. type: string tradeDatetime: + description: Дата и время заключения по UTC. format: date-time type: string exchange: + description: Торговая площадка. type: string classCode: + description: Режим торгов. type: string direction: + description: Вид сделки. type: string name: + description: Сокращённое наименование актива. type: string ticker: + description: Код актива. type: string price: $ref: '#/components/schemas/v1MoneyValue' quantity: + description: Количество. format: int64 type: string orderAmount: @@ -3683,22 +12181,30 @@ components: repoRate: $ref: '#/components/schemas/v1Quotation' party: + description: Контрагент или брокерарокер. type: string clearValueDate: + description: Дата расчётов по UTC. format: date-time type: string secValueDate: + description: Дата поставки по UTC. format: date-time type: string brokerStatus: + description: Статус брокера. type: string separateAgreementType: + description: Тип договора. type: string separateAgreementNumber: + description: Номер договора. type: string separateAgreementDate: + description: Дата договора. type: string deliveryType: + description: Тип расчёта по сделке. type: string type: object v1BrokerReportRequest: @@ -3825,26 +12331,44 @@ components: description: Запрос отмены торгового поручения. properties: accountId: + description: Номер счёта. type: string orderId: + description: Идентификатор заявки. type: string + orderIdType: + $ref: '#/components/schemas/v1OrderIdType' + required: + - accountId + - orderId type: object v1CancelOrderResponse: description: Результат отмены торгового поручения. example: time: 2000-01-23T04:56:07.000Z + responseMetadata: + serverTime: 2000-01-23T04:56:07.000Z + trackingId: trackingId properties: time: + description: Дата и время отмены заявки в часовом поясе UTC. format: date-time type: string + responseMetadata: + $ref: '#/components/schemas/v1ResponseMetadata' type: object v1CancelStopOrderRequest: description: Запрос отмены выставленной стоп-заявки. properties: accountId: + description: Идентификатор счёта клиента. type: string stopOrderId: + description: Уникальный идентификатор стоп-заявки. type: string + required: + - accountId + - stopOrderId type: object v1CancelStopOrderResponse: description: Результат отмены выставленной стоп-заявки. @@ -3852,6 +12376,7 @@ components: time: 2000-01-23T04:56:07.000Z properties: time: + description: Время отмены заявки по UTC. format: date-time type: string type: object @@ -3877,6 +12402,7 @@ components: units: units properties: figi: + description: FIGI-идентификатор инструмента. type: string interval: $ref: '#/components/schemas/v1SubscriptionInterval' @@ -3889,30 +12415,61 @@ components: close: $ref: '#/components/schemas/v1Quotation' volume: + description: Объём сделок в лотах. format: int64 type: string time: + description: Время начала интервала свечи по UTC. format: date-time type: string lastTradeTs: + description: Время последней сделки, вошедшей в свечу по UTC. format: date-time type: string instrumentUid: + description: UID инструмента. type: string + candleSourceType: + $ref: '#/components/schemas/contractv1CandleSource' type: object v1CandleInstrument: description: Запрос изменения статус подписки на свечи. properties: figi: + description: >- + Deprecated FIGI-идентификатор инструмента. Используйте + `instrument_id`. type: string + deprecated: true interval: $ref: '#/components/schemas/v1SubscriptionInterval' instrumentId: + description: >- + Идентификатор инструмента. Принимает значение `figi` или + `instrument_uid`. type: string type: object v1CandleInterval: default: CANDLE_INTERVAL_UNSPECIFIED - description: Интервал свечей. + description: >- + Интервал свечей. Максимальное значение интервала приведено + ориентировочно, может отличаться в большую сторону в зависимости от + параметров запроса. + + - CANDLE_INTERVAL_UNSPECIFIED: Интервал не определён. + - CANDLE_INTERVAL_1_MIN: От 1 минуты до 1 дня (лимит 2400). + - CANDLE_INTERVAL_5_MIN: От 5 минут до недели (лимит 2400). + - CANDLE_INTERVAL_15_MIN: От 15 минут до 3 недель (лимит 2400). + - CANDLE_INTERVAL_HOUR: От 1 часа до 3 месяцев (лимит 2400). + - CANDLE_INTERVAL_DAY: От 1 дня до 6 лет (лимит 2400). + - CANDLE_INTERVAL_2_MIN: От 2 минут до 1 дня (лимит 1200). + - CANDLE_INTERVAL_3_MIN: От 3 минут до 1 дня (лимит 750). + - CANDLE_INTERVAL_10_MIN: От 10 минут до недели (лимит 1200). + - CANDLE_INTERVAL_30_MIN: От 30 минут до 3 недель (лимит 1200). + - CANDLE_INTERVAL_2_HOUR: От 2 часов до 3 месяцев (лимит 2400). + - CANDLE_INTERVAL_4_HOUR: От 4 часов до 3 месяцев (лимит 700). + - CANDLE_INTERVAL_WEEK: От 1 недели до 5 лет (лимит 300). + - CANDLE_INTERVAL_MONTH: От 1 месяца до 10 лет (лимит 120). enum: - CANDLE_INTERVAL_UNSPECIFIED - CANDLE_INTERVAL_1_MIN @@ -3932,26 +12489,62 @@ components: v1CandleSubscription: description: Статус подписки на свечи. example: + streamId: streamId instrumentUid: instrumentUid + waitingClose: true figi: figi + subscriptionId: subscriptionId properties: figi: + description: FIGI-идентификатор инструмента. type: string interval: $ref: '#/components/schemas/v1SubscriptionInterval' subscriptionStatus: $ref: '#/components/schemas/v1SubscriptionStatus' instrumentUid: + description: UID инструмента. + type: string + waitingClose: + description: Флаг ожидания закрытия временного интервала для отправки свечи. + type: boolean + streamId: + description: Идентификатор открытого соединения. + type: string + subscriptionId: + description: Идентификатор подписки в формате `UUID`. + type: string + candleSourceType: + $ref: '#/components/schemas/v1GetCandlesRequestCandleSource' + type: object + v1ChildOperationItem: + example: + instrumentUid: instrumentUid + payment: + nano: 5 + currency: currency + units: units + properties: + instrumentUid: + description: Уникальный идентификатор инструмента. type: string + payment: + $ref: '#/components/schemas/v1MoneyValue' type: object v1CloseSandboxAccountRequest: description: Запрос закрытия счёта в песочнице. properties: accountId: + title: Номер счёта type: string + required: + - accountId type: object v1CloseSandboxAccountResponse: - description: Результат закрытия счёта в песочнице. + description: |- + Результат закрытия счёта в песочнице. + + пустой ответ type: object v1CountryResponse: description: Данные о стране. @@ -3962,12 +12555,16 @@ components: nameBrief: nameBrief properties: alfaTwo: + description: Двухбуквенный код страны. type: string alfaThree: + description: Трёхбуквенный код страны. type: string name: + description: Наименование страны. type: string nameBrief: + description: Краткое наименование страны. type: string type: object v1Coupon: @@ -3986,14 +12583,18 @@ components: units: units properties: figi: + description: FIGI-идентификатор инструмента. type: string couponDate: + description: Дата выплаты купона. format: date-time type: string couponNumber: + description: Номер купона. format: int64 type: string fixDate: + description: Дата фиксации реестра для выплаты купона — опционально. format: date-time type: string payOneBond: @@ -4001,18 +12602,31 @@ components: couponType: $ref: '#/components/schemas/v1CouponType' couponStartDate: + description: Начало купонного периода. format: date-time type: string couponEndDate: + description: Окончание купонного периода. format: date-time type: string couponPeriod: + description: Купонный период в днях. format: int32 type: integer type: object v1CouponType: default: COUPON_TYPE_UNSPECIFIED - description: Тип купонов. + description: |- + Тип купонов. + + - COUPON_TYPE_UNSPECIFIED: Неопределённое значение. + - COUPON_TYPE_CONSTANT: Постоянный. + - COUPON_TYPE_FLOATING: Плавающий. + - COUPON_TYPE_DISCOUNT: Дисконт. + - COUPON_TYPE_MORTGAGE: Ипотечный. + - COUPON_TYPE_FIX: Фиксированный. + - COUPON_TYPE_VARIABLE: Переменный. + - COUPON_TYPE_OTHER: Прочее. enum: - COUPON_TYPE_UNSPECIFIED - COUPON_TYPE_CONSTANT @@ -4039,6 +12653,9 @@ components: dlong: nano: 6 units: units + dlongClient: + nano: 6 + units: units nominal: nano: 5 currency: currency @@ -4046,6 +12663,10 @@ components: sellAvailableFlag: true currency: currency first1dayCandleDate: 2000-01-23T04:56:07.000Z + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor buyAvailableFlag: true weekendFlag: true classCode: classCode @@ -4066,6 +12687,9 @@ components: nano: 6 units: units otcFlag: true + dshortClient: + nano: 6 + units: units klong: nano: 6 units: units @@ -4088,6 +12712,9 @@ components: dlong: nano: 6 units: units + dlongClient: + nano: 6 + units: units nominal: nano: 5 currency: currency @@ -4095,6 +12722,10 @@ components: sellAvailableFlag: true currency: currency first1dayCandleDate: 2000-01-23T04:56:07.000Z + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor buyAvailableFlag: true weekendFlag: true classCode: classCode @@ -4115,6 +12746,9 @@ components: nano: 6 units: units otcFlag: true + dshortClient: + nano: 6 + units: units klong: nano: 6 units: units @@ -4127,6 +12761,7 @@ components: isin: isin properties: instruments: + description: Массив валют. items: $ref: '#/components/schemas/v1Currency' type: array @@ -4146,6 +12781,9 @@ components: dlong: nano: 6 units: units + dlongClient: + nano: 6 + units: units nominal: nano: 5 currency: currency @@ -4153,6 +12791,10 @@ components: sellAvailableFlag: true currency: currency first1dayCandleDate: 2000-01-23T04:56:07.000Z + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor buyAvailableFlag: true weekendFlag: true classCode: classCode @@ -4173,6 +12815,9 @@ components: nano: 6 units: units otcFlag: true + dshortClient: + nano: 6 + units: units klong: nano: 6 units: units @@ -4185,17 +12830,26 @@ components: isin: isin properties: figi: + description: FIGI-идентификатор инструмента. type: string ticker: + description: Тикер инструмента. type: string classCode: + description: Класс-код (секция торгов). type: string isin: + description: ISIN-идентификатор инструмента. type: string lot: + description: >- + Лотность инструмента. Возможно совершение операций только на + количества ценной бумаги, кратные параметру `lot`. + [Подробнее](https://russianinvestments.github.io/investAPI/glossary#lot). format: int32 type: integer currency: + description: Валюта расчётов. type: string klong: $ref: '#/components/schemas/v1Quotation' @@ -4210,51 +12864,85 @@ components: dshortMin: $ref: '#/components/schemas/v1Quotation' shortEnabledFlag: + description: Признак доступности для операций в шорт. type: boolean name: + description: Название инструмента. type: string exchange: + description: Tорговая площадка (секция биржи). type: string nominal: $ref: '#/components/schemas/v1MoneyValue' countryOfRisk: + description: >- + Код страны риска — то есть страны, в которой компания ведёт основной + бизнес. type: string countryOfRiskName: + description: >- + Наименование страны риска — то есть страны, в которой компания ведёт + основной бизнес. type: string tradingStatus: $ref: '#/components/schemas/v1SecurityTradingStatus' otcFlag: + description: >- + Флаг, используемый ранее для определения внебиржевых инструментов. + На данный момент не используется для торгуемых через API + инструментов. Может использоваться как фильтр для операций, + совершавшихся некоторое время назад на ОТС площадке. type: boolean buyAvailableFlag: + description: Признак доступности для покупки. type: boolean sellAvailableFlag: + description: Признак доступности для продажи. type: boolean isoCurrencyName: + description: Строковый ISO-код валюты. type: string minPriceIncrement: $ref: '#/components/schemas/v1Quotation' apiTradeAvailableFlag: + description: Параметр указывает на возможность торговать инструментом через API. type: boolean uid: + description: Уникальный идентификатор инструмента. type: string realExchange: $ref: '#/components/schemas/v1RealExchange' positionUid: + description: Уникальный идентификатор позиции инструмента. type: string forIisFlag: + description: Признак доступности для ИИС. type: boolean forQualInvestorFlag: + description: >- + Флаг, отображающий доступность торговли инструментом только для + квалифицированных инвесторов. type: boolean weekendFlag: + description: Флаг, отображающий доступность торговли инструментом по выходным. type: boolean blockedTcaFlag: + description: Флаг заблокированного ТКС. type: boolean first1minCandleDate: + description: Дата первой минутной свечи. format: date-time type: string first1dayCandleDate: + description: Дата первой дневной свечи. format: date-time type: string + brand: + $ref: '#/components/schemas/v1BrandData' + dlongClient: + $ref: '#/components/schemas/v1Quotation' + dshortClient: + $ref: '#/components/schemas/v1Quotation' type: object v1CurrencyResponse: description: Данные по валюте. @@ -4272,6 +12960,9 @@ components: dlong: nano: 6 units: units + dlongClient: + nano: 6 + units: units nominal: nano: 5 currency: currency @@ -4279,6 +12970,10 @@ components: sellAvailableFlag: true currency: currency first1dayCandleDate: 2000-01-23T04:56:07.000Z + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor buyAvailableFlag: true weekendFlag: true classCode: classCode @@ -4299,6 +12994,9 @@ components: nano: 6 units: units otcFlag: true + dshortClient: + nano: 6 + units: units klong: nano: 6 units: units @@ -4338,31 +13036,44 @@ components: dividendNet: $ref: '#/components/schemas/v1MoneyValue' paymentDate: + description: Дата фактических выплат по UTC. format: date-time type: string declaredDate: + description: Дата объявления дивидендов по UTC. format: date-time type: string lastBuyDate: + description: Последний день (включительно) покупки для получения выплаты по UTC. format: date-time type: string dividendType: + description: >- + Тип выплаты. Возможные значения: `Regular Cash` – регулярные + выплаты, `Cancelled` – выплата отменена, `Daily Accrual` – + ежедневное начисление, `Return of Capital` – возврат капитала, + прочие типы выплат. type: string recordDate: + description: Дата фиксации реестра по UTC. format: date-time type: string regularity: + description: >- + Регулярность выплаты. Возможные значения: `Annual` – ежегодная, + `Semi-Anl` – каждые полгода, прочие типы выплат. type: string closePrice: $ref: '#/components/schemas/v1MoneyValue' yieldValue: $ref: '#/components/schemas/v1Quotation' createdAt: + description: Дата и время создания записи по UTC. format: date-time type: string type: object v1DividendsForeignIssuerReport: - description: Отчёт "Справка о доходах за пределами РФ". + description: Отчёт «Справка о доходах за пределами РФ». example: issuerCountry: issuerCountry externalCommission: @@ -4388,18 +13099,26 @@ components: isin: isin properties: recordDate: + description: Дата фиксации реестра. format: date-time type: string paymentDate: + description: Дата выплаты. format: date-time type: string securityName: + description: Наименование ценной бумаги. type: string isin: + description: ISIN-идентификатор ценной бумаги. type: string issuerCountry: + description: >- + Страна эмитента. Для депозитарных расписок указывается страна + эмитента базового актива. type: string quantity: + description: Количество ценных бумаг. format: int64 type: string dividend: @@ -4413,11 +13132,17 @@ components: dividendAmount: $ref: '#/components/schemas/v1Quotation' currency: + description: Валюта. type: string type: object v1EditFavoritesActionType: default: EDIT_FAVORITES_ACTION_TYPE_UNSPECIFIED - description: Тип действия со списком избранных инструментов. + description: |- + Тип действия со списком избранных инструментов. + + - EDIT_FAVORITES_ACTION_TYPE_UNSPECIFIED: Тип не определён. + - EDIT_FAVORITES_ACTION_TYPE_ADD: Добавить в список. + - EDIT_FAVORITES_ACTION_TYPE_DEL: Удалить из списка. enum: - EDIT_FAVORITES_ACTION_TYPE_UNSPECIFIED - EDIT_FAVORITES_ACTION_TYPE_ADD @@ -4427,17 +13152,24 @@ components: description: Запрос редактирования списка избранных инструментов. properties: instruments: + description: Массив инструментов. items: $ref: '#/components/schemas/v1EditFavoritesRequestInstrument' type: array actionType: $ref: '#/components/schemas/v1EditFavoritesActionType' + required: + - actionType + - instruments type: object v1EditFavoritesRequestInstrument: description: Массив инструментов для редактирования списка избранных инструментов. properties: - figi: + instrumentId: + description: Идентификатор инструмента — `figi` или `instrument_uid`. type: string + required: + - instrumentId type: object v1EditFavoritesResponse: description: Результат редактирования списка избранных инструментов. @@ -4445,24 +13177,41 @@ components: favoriteInstruments: - otcFlag: true classCode: classCode + uid: uid ticker: ticker instrumentType: instrumentType + name: name figi: figi apiTradeAvailableFlag: true isin: isin - otcFlag: true classCode: classCode + uid: uid ticker: ticker instrumentType: instrumentType + name: name figi: figi apiTradeAvailableFlag: true isin: isin properties: favoriteInstruments: + description: Массив инструментов. items: $ref: '#/components/schemas/v1FavoriteInstrument' type: array type: object + v1ErrorDetail: + example: + code: code + message: message + properties: + code: + description: Код ошибки. + type: string + message: + description: Описание ошибки. + type: string + type: object v1Etf: description: Объект передачи информации об инвестиционном фонде. example: @@ -4470,6 +13219,7 @@ components: fixedCommission: nano: 6 units: units + assetUid: assetUid figi: figi dshortMin: nano: 6 @@ -4481,10 +13231,17 @@ components: dlong: nano: 6 units: units + dlongClient: + nano: 6 + units: units sellAvailableFlag: true currency: currency first1dayCandleDate: 2000-01-23T04:56:07.000Z sector: sector + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor buyAvailableFlag: true weekendFlag: true classCode: classCode @@ -4507,6 +13264,9 @@ components: nano: 6 units: units otcFlag: true + dshortClient: + nano: 6 + units: units klong: nano: 6 units: units @@ -4523,17 +13283,26 @@ components: isin: isin properties: figi: + description: FIGI-идентификатор инструмента. type: string ticker: + description: Тикер инструмента. type: string classCode: + description: Класс-код (секция торгов). type: string isin: + description: ISIN-идентификатор инструмента. type: string lot: + description: >- + Лотность инструмента. Возможно совершение операций только на + количества ценной бумаги, кратные параметру `lot`. + [Подробнее](https://russianinvestments.github.io/investAPI/glossary#lot). format: int32 type: integer currency: + description: Валюта расчётов. type: string klong: $ref: '#/components/schemas/v1Quotation' @@ -4548,62 +13317,114 @@ components: dshortMin: $ref: '#/components/schemas/v1Quotation' shortEnabledFlag: + description: Признак доступности для операций в шорт. type: boolean name: + description: Название инструмента. type: string exchange: + description: Tорговая площадка (секция биржи). type: string fixedCommission: $ref: '#/components/schemas/v1Quotation' focusType: + description: >- + Возможные значения:
**equity** — акции;
**fixed_income** — + облигации;
**mixed_allocation** — + смешанный;
**money_market** — денежный + рынок;
**real_estate** — недвижимость;
**commodity** — + товары;
**specialty** — специальный;
**private_equity** — + private equity;
**alternative_investment** — альтернативные + инвестиции. type: string releasedDate: + description: Дата выпуска по UTC. format: date-time type: string numShares: $ref: '#/components/schemas/v1Quotation' countryOfRisk: + description: >- + Код страны риска — то есть страны, в которой компания ведёт основной + бизнес. type: string countryOfRiskName: + description: >- + Наименование страны риска — то есть страны, в которой компания ведёт + основной бизнес. type: string sector: + description: Сектор экономики. type: string rebalancingFreq: + description: Частота ребалансировки. type: string tradingStatus: $ref: '#/components/schemas/v1SecurityTradingStatus' otcFlag: + description: >- + Флаг, используемый ранее для определения внебиржевых инструментов. + На данный момент не используется для торгуемых через API + инструментов. Может использоваться как фильтр для операций, + совершавшихся некоторое время назад на ОТС площадке. type: boolean buyAvailableFlag: + description: Признак доступности для покупки. type: boolean sellAvailableFlag: + description: Признак доступности для продажи. type: boolean minPriceIncrement: $ref: '#/components/schemas/v1Quotation' apiTradeAvailableFlag: + description: Параметр указывает на возможность торговать инструментом через API. type: boolean uid: + description: Уникальный идентификатор инструмента. type: string realExchange: $ref: '#/components/schemas/v1RealExchange' positionUid: + description: Уникальный идентификатор позиции инструмента. + type: string + assetUid: + description: Уникальный идентификатор актива. type: string + instrumentExchange: + $ref: '#/components/schemas/v1InstrumentExchangeType' forIisFlag: + description: Признак доступности для ИИС. type: boolean forQualInvestorFlag: + description: >- + Флаг, отображающий доступность торговли инструментом только для + квалифицированных инвесторов. type: boolean weekendFlag: + description: >- + ФлагФлаг, отображающий доступность торговли инструментом по + выходным. type: boolean blockedTcaFlag: + description: Флаг заблокированного ТКС. type: boolean liquidityFlag: + description: Флаг достаточной ликвидности. type: boolean first1minCandleDate: + description: Дата первой минутной свечи. format: date-time type: string first1dayCandleDate: + description: Дата первой дневной свечи. format: date-time type: string + brand: + $ref: '#/components/schemas/v1BrandData' + dlongClient: + $ref: '#/components/schemas/v1Quotation' + dshortClient: + $ref: '#/components/schemas/v1Quotation' type: object v1EtfResponse: description: Данные по фонду. @@ -4613,6 +13434,7 @@ components: fixedCommission: nano: 6 units: units + assetUid: assetUid figi: figi dshortMin: nano: 6 @@ -4624,10 +13446,17 @@ components: dlong: nano: 6 units: units + dlongClient: + nano: 6 + units: units sellAvailableFlag: true currency: currency first1dayCandleDate: 2000-01-23T04:56:07.000Z sector: sector + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor buyAvailableFlag: true weekendFlag: true classCode: classCode @@ -4650,6 +13479,9 @@ components: nano: 6 units: units otcFlag: true + dshortClient: + nano: 6 + units: units klong: nano: 6 units: units @@ -4676,6 +13508,7 @@ components: fixedCommission: nano: 6 units: units + assetUid: assetUid figi: figi dshortMin: nano: 6 @@ -4687,10 +13520,17 @@ components: dlong: nano: 6 units: units + dlongClient: + nano: 6 + units: units sellAvailableFlag: true currency: currency first1dayCandleDate: 2000-01-23T04:56:07.000Z sector: sector + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor buyAvailableFlag: true weekendFlag: true classCode: classCode @@ -4713,6 +13553,9 @@ components: nano: 6 units: units otcFlag: true + dshortClient: + nano: 6 + units: units klong: nano: 6 units: units @@ -4731,6 +13574,7 @@ components: fixedCommission: nano: 6 units: units + assetUid: assetUid figi: figi dshortMin: nano: 6 @@ -4742,10 +13586,17 @@ components: dlong: nano: 6 units: units + dlongClient: + nano: 6 + units: units sellAvailableFlag: true currency: currency first1dayCandleDate: 2000-01-23T04:56:07.000Z sector: sector + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor buyAvailableFlag: true weekendFlag: true classCode: classCode @@ -4768,6 +13619,9 @@ components: nano: 6 units: units otcFlag: true + dshortClient: + nano: 6 + units: units klong: nano: 6 units: units @@ -4784,55 +13638,94 @@ components: isin: isin properties: instruments: + description: Массив фондов. items: $ref: '#/components/schemas/v1Etf' type: array type: object + v1ExchangeOrderType: + default: EXCHANGE_ORDER_TYPE_UNSPECIFIED + description: |- + Тип выставляемой заявки. + + - EXCHANGE_ORDER_TYPE_UNSPECIFIED: Значение не указано. + - EXCHANGE_ORDER_TYPE_MARKET: Заявка по рыночной цене. + - EXCHANGE_ORDER_TYPE_LIMIT: Лимитная заявка. + enum: + - EXCHANGE_ORDER_TYPE_UNSPECIFIED + - EXCHANGE_ORDER_TYPE_MARKET + - EXCHANGE_ORDER_TYPE_LIMIT + type: string v1FavoriteInstrument: description: Массив избранных инструментов. example: otcFlag: true classCode: classCode + uid: uid ticker: ticker instrumentType: instrumentType + name: name figi: figi apiTradeAvailableFlag: true isin: isin properties: figi: + description: FIGI-идентификатор инструмента. type: string ticker: + description: Тикер инструмента. type: string classCode: + description: Класс-код инструмента. type: string isin: + description: ISIN-идентификатор инструмента. type: string instrumentType: + description: Тип инструмента. + type: string + name: + description: Название инструмента. + type: string + uid: + description: Уникальный идентификатор инструмента. type: string otcFlag: + description: >- + Флаг, используемый ранее для определения внебиржевых инструментов. + На данный момент не используется для торгуемых через API + инструментов. Может использоваться как фильтр для операций, + совершавшихся некоторое время назад на ОТС площадке. type: boolean apiTradeAvailableFlag: + description: Возможность торговать инструментом через API. type: boolean instrumentKind: $ref: '#/components/schemas/v1InstrumentType' type: object v1FilterOptionsRequest: + description: Параметры фильтрации опционов. properties: basicAssetUid: + description: Идентификатор базового актива опциона. Обязательный параметр. type: string basicAssetPositionUid: + description: Идентификатор позиции базового актива опциона. type: string - title: Параметры фильтрации опционов type: object v1FindInstrumentRequest: description: Запрос на поиск инструментов. properties: query: + description: Строка поиска. type: string instrumentKind: $ref: '#/components/schemas/v1InstrumentType' apiTradeAvailableFlag: + description: Фильтр для отображения только торговых инструментов. type: boolean + required: + - query type: object v1FindInstrumentResponse: description: Результат поиска инструментов. @@ -4848,6 +13741,7 @@ components: figi: figi apiTradeAvailableFlag: true first1minCandleDate: 2000-01-23T04:56:07.000Z + lot: 0 uid: uid blockedTcaFlag: true name: name @@ -4863,6 +13757,7 @@ components: figi: figi apiTradeAvailableFlag: true first1minCandleDate: 2000-01-23T04:56:07.000Z + lot: 0 uid: uid blockedTcaFlag: true name: name @@ -4870,6 +13765,7 @@ components: isin: isin properties: instruments: + description: Массив инструментов, удовлетворяющих условиям поиска. items: $ref: '#/components/schemas/v1InstrumentShort' type: array @@ -4877,6 +13773,10 @@ components: v1Future: description: Объект передачи информации о фьючерсе. example: + initialMarginOnSell: + nano: 5 + currency: currency + units: units figi: figi dshortMin: nano: 6 @@ -4889,11 +13789,21 @@ components: dlong: nano: 6 units: units + dlongClient: + nano: 6 + units: units lastTradeDate: 2000-01-23T04:56:07.000Z sellAvailableFlag: true currency: currency first1dayCandleDate: 2000-01-23T04:56:07.000Z sector: sector + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor + minPriceIncrementAmount: + nano: 6 + units: units expirationDate: 2000-01-23T04:56:07.000Z buyAvailableFlag: true weekendFlag: true @@ -4921,27 +13831,42 @@ components: units: units otcFlag: true basicAssetPositionUid: basicAssetPositionUid + dshortClient: + nano: 6 + units: units klong: nano: 6 units: units dshort: nano: 6 units: units + initialMarginOnBuy: + nano: 5 + currency: currency + units: units name: name basicAsset: basicAsset exchange: exchange countryOfRiskName: countryOfRiskName properties: figi: + description: FIGI-идентификатор инструмента. type: string ticker: + description: Тикер инструмента. type: string classCode: + description: Класс-код (секция торгов). type: string lot: + description: >- + Лотность инструмента. Возможно совершение операций только на + количества ценной бумаги, кратные параметру `lot`. + [Подробнее](https://russianinvestments.github.io/investAPI/glossary#lot). format: int32 type: integer currency: + description: Валюта расчётов. type: string klong: $ref: '#/components/schemas/v1Quotation' @@ -4956,73 +13881,129 @@ components: dshortMin: $ref: '#/components/schemas/v1Quotation' shortEnabledFlag: + description: Признак доступности для операций шорт. type: boolean name: + description: Название инструмента. type: string exchange: + description: Tорговая площадка (секция биржи). type: string firstTradeDate: + description: Дата начала обращения контракта по UTC. format: date-time type: string lastTradeDate: + description: Дата по UTC, до которой возможно проведение операций с фьючерсом. format: date-time type: string futuresType: + description: >- + Тип фьючерса. Возможные значения:
**physical_delivery** — + физические поставки;
**cash_settlement** — денежный эквивалент. type: string assetType: + description: >- + Тип актива. Возможные значения:
**commodity** — товар; +
**currency** — валюта;
**security** — ценная бумага; +
**index** — индекс. type: string basicAsset: + description: Основной актив. type: string basicAssetSize: $ref: '#/components/schemas/v1Quotation' countryOfRisk: + description: >- + Код страны риска — то есть страны, в которой компания ведёт основной + бизнес. type: string countryOfRiskName: + description: >- + Наименование страны риска — то есть страны, в которой компания ведёт + основной бизнес. type: string sector: + description: Сектор экономики. type: string expirationDate: + description: Дата истечения срока в часов поясе UTC. format: date-time type: string tradingStatus: $ref: '#/components/schemas/v1SecurityTradingStatus' otcFlag: + description: >- + Флаг, используемый ранее для определения внебиржевых инструментов. + На данный момент не используется для торгуемых через API + инструментов. Может использоваться как фильтр для операций, + совершавшихся некоторое время назад на ОТС площадке. type: boolean buyAvailableFlag: + description: Признак доступности для покупки. type: boolean sellAvailableFlag: + description: Признак доступности для продажи. type: boolean minPriceIncrement: $ref: '#/components/schemas/v1Quotation' apiTradeAvailableFlag: + description: Параметр указывает на возможность торговать инструментом через API. type: boolean uid: + description: Уникальный идентификатор инструмента. type: string realExchange: $ref: '#/components/schemas/v1RealExchange' positionUid: + description: Уникальный идентификатор позиции инструмента. type: string basicAssetPositionUid: + description: Уникальный идентификатор позиции основного инструмента. type: string forIisFlag: + description: Признак доступности для ИИС. type: boolean forQualInvestorFlag: + description: >- + Флаг, отображающий доступность торговли инструментом только для + квалифицированных инвесторов. type: boolean weekendFlag: + description: Флаг, отображающий доступность торговли инструментом по выходным. type: boolean blockedTcaFlag: + description: Флаг заблокированного ТКС. type: boolean first1minCandleDate: + description: Дата первой минутной свечи. format: date-time type: string first1dayCandleDate: + description: Дата первой дневной свечи. format: date-time type: string + initialMarginOnBuy: + $ref: '#/components/schemas/v1MoneyValue' + initialMarginOnSell: + $ref: '#/components/schemas/v1MoneyValue' + minPriceIncrementAmount: + $ref: '#/components/schemas/v1Quotation' + brand: + $ref: '#/components/schemas/v1BrandData' + dlongClient: + $ref: '#/components/schemas/v1Quotation' + dshortClient: + $ref: '#/components/schemas/v1Quotation' type: object v1FutureResponse: description: Данные по фьючерсу. example: instrument: + initialMarginOnSell: + nano: 5 + currency: currency + units: units figi: figi dshortMin: nano: 6 @@ -5035,11 +14016,21 @@ components: dlong: nano: 6 units: units + dlongClient: + nano: 6 + units: units lastTradeDate: 2000-01-23T04:56:07.000Z sellAvailableFlag: true currency: currency first1dayCandleDate: 2000-01-23T04:56:07.000Z sector: sector + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor + minPriceIncrementAmount: + nano: 6 + units: units expirationDate: 2000-01-23T04:56:07.000Z buyAvailableFlag: true weekendFlag: true @@ -5067,12 +14058,19 @@ components: units: units otcFlag: true basicAssetPositionUid: basicAssetPositionUid + dshortClient: + nano: 6 + units: units klong: nano: 6 units: units dshort: nano: 6 units: units + initialMarginOnBuy: + nano: 5 + currency: currency + units: units name: name basicAsset: basicAsset exchange: exchange @@ -5085,7 +14083,11 @@ components: description: Данные по фьючерсам. example: instruments: - - figi: figi + - initialMarginOnSell: + nano: 5 + currency: currency + units: units + figi: figi dshortMin: nano: 6 units: units @@ -5097,11 +14099,21 @@ components: dlong: nano: 6 units: units + dlongClient: + nano: 6 + units: units lastTradeDate: 2000-01-23T04:56:07.000Z sellAvailableFlag: true currency: currency first1dayCandleDate: 2000-01-23T04:56:07.000Z sector: sector + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor + minPriceIncrementAmount: + nano: 6 + units: units expirationDate: 2000-01-23T04:56:07.000Z buyAvailableFlag: true weekendFlag: true @@ -5129,17 +14141,28 @@ components: units: units otcFlag: true basicAssetPositionUid: basicAssetPositionUid + dshortClient: + nano: 6 + units: units klong: nano: 6 units: units dshort: nano: 6 units: units + initialMarginOnBuy: + nano: 5 + currency: currency + units: units name: name basicAsset: basicAsset exchange: exchange countryOfRiskName: countryOfRiskName - - figi: figi + - initialMarginOnSell: + nano: 5 + currency: currency + units: units + figi: figi dshortMin: nano: 6 units: units @@ -5151,11 +14174,21 @@ components: dlong: nano: 6 units: units + dlongClient: + nano: 6 + units: units lastTradeDate: 2000-01-23T04:56:07.000Z sellAvailableFlag: true currency: currency first1dayCandleDate: 2000-01-23T04:56:07.000Z sector: sector + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor + minPriceIncrementAmount: + nano: 6 + units: units expirationDate: 2000-01-23T04:56:07.000Z buyAvailableFlag: true weekendFlag: true @@ -5183,18 +14216,26 @@ components: units: units otcFlag: true basicAssetPositionUid: basicAssetPositionUid + dshortClient: + nano: 6 + units: units klong: nano: 6 units: units dshort: nano: 6 units: units + initialMarginOnBuy: + nano: 5 + currency: currency + units: units name: name basicAsset: basicAsset exchange: exchange countryOfRiskName: countryOfRiskName properties: instruments: + description: Массив фьючерсов. items: $ref: '#/components/schemas/v1Future' type: array @@ -5202,45 +14243,67 @@ components: v1GenerateBrokerReportRequest: properties: accountId: + description: Идентификатор счёта клиента. type: string from: + description: Начало периода по UTC. format: date-time type: string to: + description: Окончание периода по UTC. format: date-time type: string + required: + - accountId + - from + - to type: object v1GenerateBrokerReportResponse: example: taskId: taskId properties: taskId: + description: Идентификатор задачи формирования брокерского отчёта. type: string type: object v1GenerateDividendsForeignIssuerReportRequest: - description: Объект запроса формирования отчёта "Справка о доходах за пределами РФ". + description: Объект запроса формирования отчёта «Справка о доходах за пределами РФ». properties: accountId: + description: Идентификатор счёта клиента. type: string from: + description: Начало периода по UTC. format: date-time type: string to: + description: >- + Окончание периода по UTC. Как правило, можно сформировать отчёт по + дату на несколько дней меньше текущей. Начало и окончание периода + должны быть в рамках одного календарного года. format: date-time type: string + required: + - accountId + - from + - to type: object v1GenerateDividendsForeignIssuerReportResponse: description: >- - Объект результата задачи запуска формирования отчёта "Справка о доходах - за пределами РФ". + Объект результата задачи запуска формирования отчёта «Справка о доходах + за пределами РФ». example: taskId: taskId properties: taskId: + description: Идентификатор задачи формирования отчёта. type: string type: object v1GetAccountsRequest: description: Запрос получения счетов пользователя. + properties: + status: + $ref: '#/components/schemas/v1AccountStatus' type: object v1GetAccountsResponse: description: Список счетов пользователя. @@ -5262,18 +14325,26 @@ components: type: array type: object v1GetAccruedInterestsRequest: + description: Запрос НКД по облигации. properties: - figi: - type: string from: + description: Начало запрашиваемого периода по UTC. format: date-time type: string to: + description: Окончание запрашиваемого периода по UTC. format: date-time type: string - title: Запрос НКД по облигации + instrumentId: + description: Идентификатор инструмента — `figi` или `instrument_uid`. + type: string + required: + - from + - instrumentId + - to type: object v1GetAccruedInterestsResponse: + description: НКД облигации. example: accruedInterests: - date: 2000-01-23T04:56:07.000Z @@ -5298,22 +14369,202 @@ components: units: units properties: accruedInterests: + description: Массив операций начисления купонов. items: $ref: '#/components/schemas/v1AccruedInterest' type: array - title: НКД облигации + type: object + v1GetAssetFundamentalsRequest: + properties: + assets: + description: Массив идентификаторов активов, не более 100 шт. + items: + type: string + type: array + required: + - assets + title: Запрос фундаментальных показателей + type: object + v1GetAssetFundamentalsResponse: + example: + fundamentals: + - domicileIndicatorCode: domicileIndicatorCode + assetUid: assetUid + dividendYieldDailyTtm: 3.0937452626664474 + priceToSalesTtm: 4.965218492984954 + adrToCommonShareRatio: 7.740351818741173 + highPriceLast52Weeks: 6.027456183070403 + dividendRateTtm: 7.143538047012306 + revenueChangeFiveYears: 3.0576100241049344 + totalDebtMrq: 1.284659006116532 + fiveYearAnnualRevenueGrowthRate: 6.84685269835264 + fiveYearAnnualDividendGrowthRate: 6.519180951018382 + freeFloat: 7.061401241503109 + freeCashFlowToPrice: 6.878052220127876 + revenueTtm: 2.027123023002322 + totalEnterpriseValueMrq: 9.369310271410669 + epsTtm: 1.2315135367772556 + peRatioTtm: 1.1730742509559433 + fiscalPeriodStartDate: 2000-01-23T04:56:07.000Z + evToSales: 4.078845849666752 + fiscalPeriodEndDate: 2000-01-23T04:56:07.000Z + roic: 6.965117697638846 + dividendPayoutRatioFy: 0.10263654006109402 + marketCapitalization: 0.8008281904610115 + ebitdaChangeFiveYears: 5.533258397034986 + epsChangeFiveYears: 7.04836565559697 + priceToFreeCashFlowTtm: 9.965781217890562 + numberOfEmployees: 3.0205796992916243 + netInterestMarginMrq: 9.018348186070783 + oneYearAnnualRevenueGrowthRate: 8.969578798196912 + currentRatioMrq: 6.704019297950036 + averageDailyVolumeLast4Weeks: 5.637376656633329 + forwardAnnualDividendYield: 9.301444243932576 + netMarginMrq: 8.762042012749001 + roa: 3.5571952270680973 + totalDebtToEbitdaMrq: 6.778324963048013 + roe: 6.438423552598547 + freeCashFlowTtm: 1.4894159098541704 + evToEbitdaMrq: 6.683562403749608 + fiveYearsAverageDividendYield: 7.058770351582356 + priceToBookTtm: 5.025004791520295 + totalDebtToEquityMrq: 2.8841621266687802 + averageDailyVolumeLast10Days: 5.962133916683182 + fixedChargeCoverageRatioFy: 3.353193347011243 + currency: currency + netIncomeTtm: 7.386281948385884 + sharesOutstanding: 3.616076749251911 + beta: 2.3021358869347655 + threeYearAnnualRevenueGrowthRate: 7.457744773683766 + totalDebtChangeFiveYears: 3.2588565619047607 + lowPriceLast52Weeks: 1.4658129805029452 + exDividendDate: 2000-01-23T04:56:07.000Z + ebitdaTtm: 4.145608029883936 + netDebtToEbitda: 5.944895607614016 + dilutedEpsTtm: 1.0246457001441578 + buyBackTtm: 4.652396432933246 + dividendsPerShare: 0.8851374739011653 + - domicileIndicatorCode: domicileIndicatorCode + assetUid: assetUid + dividendYieldDailyTtm: 3.0937452626664474 + priceToSalesTtm: 4.965218492984954 + adrToCommonShareRatio: 7.740351818741173 + highPriceLast52Weeks: 6.027456183070403 + dividendRateTtm: 7.143538047012306 + revenueChangeFiveYears: 3.0576100241049344 + totalDebtMrq: 1.284659006116532 + fiveYearAnnualRevenueGrowthRate: 6.84685269835264 + fiveYearAnnualDividendGrowthRate: 6.519180951018382 + freeFloat: 7.061401241503109 + freeCashFlowToPrice: 6.878052220127876 + revenueTtm: 2.027123023002322 + totalEnterpriseValueMrq: 9.369310271410669 + epsTtm: 1.2315135367772556 + peRatioTtm: 1.1730742509559433 + fiscalPeriodStartDate: 2000-01-23T04:56:07.000Z + evToSales: 4.078845849666752 + fiscalPeriodEndDate: 2000-01-23T04:56:07.000Z + roic: 6.965117697638846 + dividendPayoutRatioFy: 0.10263654006109402 + marketCapitalization: 0.8008281904610115 + ebitdaChangeFiveYears: 5.533258397034986 + epsChangeFiveYears: 7.04836565559697 + priceToFreeCashFlowTtm: 9.965781217890562 + numberOfEmployees: 3.0205796992916243 + netInterestMarginMrq: 9.018348186070783 + oneYearAnnualRevenueGrowthRate: 8.969578798196912 + currentRatioMrq: 6.704019297950036 + averageDailyVolumeLast4Weeks: 5.637376656633329 + forwardAnnualDividendYield: 9.301444243932576 + netMarginMrq: 8.762042012749001 + roa: 3.5571952270680973 + totalDebtToEbitdaMrq: 6.778324963048013 + roe: 6.438423552598547 + freeCashFlowTtm: 1.4894159098541704 + evToEbitdaMrq: 6.683562403749608 + fiveYearsAverageDividendYield: 7.058770351582356 + priceToBookTtm: 5.025004791520295 + totalDebtToEquityMrq: 2.8841621266687802 + averageDailyVolumeLast10Days: 5.962133916683182 + fixedChargeCoverageRatioFy: 3.353193347011243 + currency: currency + netIncomeTtm: 7.386281948385884 + sharesOutstanding: 3.616076749251911 + beta: 2.3021358869347655 + threeYearAnnualRevenueGrowthRate: 7.457744773683766 + totalDebtChangeFiveYears: 3.2588565619047607 + lowPriceLast52Weeks: 1.4658129805029452 + exDividendDate: 2000-01-23T04:56:07.000Z + ebitdaTtm: 4.145608029883936 + netDebtToEbitda: 5.944895607614016 + dilutedEpsTtm: 1.0246457001441578 + buyBackTtm: 4.652396432933246 + dividendsPerShare: 0.8851374739011653 + properties: + fundamentals: + items: + $ref: '#/components/schemas/GetAssetFundamentalsResponseStatisticResponse' + type: array + title: Фундаментальные показатели + type: object + v1GetAssetReportsRequest: + properties: + instrumentId: + description: Идентификатор инструмента в формате UID. + type: string + from: + description: Начало запрашиваемого периода по UTC. + format: date-time + type: string + to: + description: Окончание запрашиваемого периода по UTC. + format: date-time + type: string + required: + - instrumentId + title: Запрос отчетов эмитентов + type: object + v1GetAssetReportsResponse: + example: + events: + - periodNum: 6 + createdAt: 2000-01-23T04:56:07.000Z + reportDate: 2000-01-23T04:56:07.000Z + periodYear: 0 + instrumentId: instrumentId + - periodNum: 6 + createdAt: 2000-01-23T04:56:07.000Z + reportDate: 2000-01-23T04:56:07.000Z + periodYear: 0 + instrumentId: instrumentId + properties: + events: + description: Массив событий по облигации. + items: + $ref: '#/components/schemas/GetAssetReportsResponseGetAssetReportsEvent' + type: array + title: Отчеты эмитентов type: object v1GetBondCouponsRequest: description: Запрос купонов по облигации. properties: - figi: - type: string from: + description: >- + Начало запрашиваемого периода по UTC. Фильтрация по `coupon_date` — + дата выплаты купона. format: date-time type: string to: + description: >- + Окончание запрашиваемого периода по UTC. Фильтрация по `coupon_date` + — дата выплаты купона. format: date-time type: string + instrumentId: + description: Идентификатор инструмента — `figi` или `instrument_uid`. + type: string + required: + - instrumentId type: object v1GetBondCouponsResponse: description: Купоны по облигации. @@ -5347,14 +14598,113 @@ components: $ref: '#/components/schemas/v1Coupon' type: array type: object + v1GetBondEventsRequest: + description: События по облигации. + properties: + from: + description: Начало запрашиваемого периода по UTC. + format: date-time + type: string + to: + description: Окончание запрашиваемого периода по UTC. + format: date-time + type: string + instrumentId: + description: Идентификатор инструмента — `figi` или `instrument_uid`. + type: string + type: + $ref: '#/components/schemas/GetBondEventsRequestEventType' + required: + - instrumentId + type: object + v1GetBondEventsResponse: + description: Объект передачи информации о событии облигации. + example: + events: + - fixDate: 2000-01-23T04:56:07.000Z + execution: execution + note: note + defaultDate: 2000-01-23T04:56:07.000Z + eventNumber: 0 + instrumentId: instrumentId + couponEndDate: 2000-01-23T04:56:07.000Z + rateDate: 2000-01-23T04:56:07.000Z + payOneBond: + nano: 5 + currency: currency + units: units + moneyFlowVal: + nano: 5 + currency: currency + units: units + couponPeriod: 6 + convertToFinToolId: convertToFinToolId + couponInterestRate: + nano: 6 + units: units + eventTotalVol: + nano: 6 + units: units + realPayDate: 2000-01-23T04:56:07.000Z + operationType: operationType + value: + nano: 6 + units: units + couponStartDate: 2000-01-23T04:56:07.000Z + eventDate: 2000-01-23T04:56:07.000Z + payDate: 2000-01-23T04:56:07.000Z + - fixDate: 2000-01-23T04:56:07.000Z + execution: execution + note: note + defaultDate: 2000-01-23T04:56:07.000Z + eventNumber: 0 + instrumentId: instrumentId + couponEndDate: 2000-01-23T04:56:07.000Z + rateDate: 2000-01-23T04:56:07.000Z + payOneBond: + nano: 5 + currency: currency + units: units + moneyFlowVal: + nano: 5 + currency: currency + units: units + couponPeriod: 6 + convertToFinToolId: convertToFinToolId + couponInterestRate: + nano: 6 + units: units + eventTotalVol: + nano: 6 + units: units + realPayDate: 2000-01-23T04:56:07.000Z + operationType: operationType + value: + nano: 6 + units: units + couponStartDate: 2000-01-23T04:56:07.000Z + eventDate: 2000-01-23T04:56:07.000Z + payDate: 2000-01-23T04:56:07.000Z + properties: + events: + items: + $ref: '#/components/schemas/GetBondEventsResponseBondEvent' + type: array + type: object v1GetBrandRequest: description: Запрос бренда. properties: id: + description: UID-идентификатор бренда. type: string + required: + - id type: object v1GetBrandsRequest: description: Запрос списка брендов. + properties: + paging: + $ref: '#/components/schemas/v1Page' type: object v1GetBrandsResponse: description: Список брендов. @@ -5376,19 +14726,30 @@ components: countryOfRiskName: countryOfRiskName info: info countryOfRisk: countryOfRisk + paging: + pageNumber: 6 + limit: 0 + totalCount: 1 properties: brands: + description: Массив брендов. items: $ref: '#/components/schemas/v1Brand' type: array + paging: + $ref: '#/components/schemas/v1PageResponse' type: object v1GetBrokerReportRequest: properties: taskId: + description: Идентификатор задачи формирования брокерского отчёта. type: string page: + description: Номер страницы отчёта, начинается с 1. Значение по умолчанию — 0. format: int32 type: integer + required: + - taskId type: object v1GetBrokerReportResponse: example: @@ -5500,31 +14861,58 @@ components: $ref: '#/components/schemas/v1BrokerReport' type: array itemsCount: + description: Количество записей в отчёте. format: int32 type: integer pagesCount: + description: Количество страниц с данными отчёта, начинается с 0. format: int32 type: integer page: + description: Текущая страница, начинается с 0. format: int32 type: integer type: object v1GetCandlesRequest: description: Запрос исторических свечей. properties: - figi: - type: string from: + description: Начало запрашиваемого периода по UTC. format: date-time type: string to: + description: Окончание запрашиваемого периода по UTC. format: date-time type: string interval: $ref: '#/components/schemas/v1CandleInterval' instrumentId: + description: >- + Идентификатор инструмента. Принимает значение `figi` или + `instrument_uid`. type: string + candleSourceType: + $ref: '#/components/schemas/v1GetCandlesRequestCandleSource' + limit: + description: Максимальное количество свечей в ответе. + format: int32 + type: integer + required: + - from + - interval + - to type: object + v1GetCandlesRequestCandleSource: + default: CANDLE_SOURCE_UNSPECIFIED + description: |2- + - CANDLE_SOURCE_UNSPECIFIED: Все свечи. + - CANDLE_SOURCE_EXCHANGE: Биржевые свечи. + - CANDLE_SOURCE_INCLUDE_WEEKEND: Все свечи с учетом торговли по выходным. + enum: + - CANDLE_SOURCE_UNSPECIFIED + - CANDLE_SOURCE_EXCHANGE + - CANDLE_SOURCE_INCLUDE_WEEKEND + type: string v1GetCandlesResponse: description: Список свечей. example: @@ -5561,6 +14949,7 @@ components: isComplete: true properties: candles: + description: Массив свечей. items: $ref: '#/components/schemas/v1HistoricCandle' type: array @@ -5569,21 +14958,32 @@ components: description: Запрос цен закрытия торговой сессии по инструментам. properties: instruments: + description: Массив по инструментам. items: $ref: '#/components/schemas/v1InstrumentClosePriceRequest' type: array + instrumentStatus: + $ref: '#/components/schemas/v1InstrumentStatus' + required: + - instruments type: object v1GetClosePricesResponse: description: Цены закрытия торговой сессии по инструментам. example: closePrices: - - price: + - eveningSessionPrice: + nano: 6 + units: units + price: nano: 6 units: units instrumentUid: instrumentUid figi: figi time: 2000-01-23T04:56:07.000Z - - price: + - eveningSessionPrice: + nano: 6 + units: units + price: nano: 6 units: units instrumentUid: instrumentUid @@ -5591,10 +14991,69 @@ components: time: 2000-01-23T04:56:07.000Z properties: closePrices: + description: Массив по инструментам. items: $ref: '#/components/schemas/v1InstrumentClosePriceResponse' type: array type: object + v1GetConsensusForecastsRequest: + properties: + paging: + $ref: '#/components/schemas/v1Page' + title: Запрос консенсус-прогнозов + type: object + v1GetConsensusForecastsResponse: + example: + page: + pageNumber: 6 + limit: 0 + totalCount: 1 + items: + - uid: uid + assetUid: assetUid + createdAt: 2000-01-23T04:56:07.000Z + bestTargetHigh: + nano: 6 + units: units + bestTargetLow: + nano: 6 + units: units + totalSellRecommend: 1 + currency: currency + bestTargetPrice: + nano: 6 + units: units + totalHoldRecommend: 6 + prognosisDate: 2000-01-23T04:56:07.000Z + totalBuyRecommend: 0 + - uid: uid + assetUid: assetUid + createdAt: 2000-01-23T04:56:07.000Z + bestTargetHigh: + nano: 6 + units: units + bestTargetLow: + nano: 6 + units: units + totalSellRecommend: 1 + currency: currency + bestTargetPrice: + nano: 6 + units: units + totalHoldRecommend: 6 + prognosisDate: 2000-01-23T04:56:07.000Z + totalBuyRecommend: 0 + properties: + items: + description: Массив прогнозов. + items: + $ref: >- + #/components/schemas/GetConsensusForecastsResponseConsensusForecastsItem + type: array + page: + $ref: '#/components/schemas/v1PageResponse' + title: Консенсус-прогнозы + type: object v1GetCountriesRequest: description: Запрос справочника стран. type: object @@ -5612,20 +15071,25 @@ components: nameBrief: nameBrief properties: countries: + description: Массив стран. items: $ref: '#/components/schemas/v1CountryResponse' type: array type: object v1GetDividendsForeignIssuerReportRequest: description: >- - Объект запроса сформированного отчёта "Справка о доходах за пределами - РФ". + Объект запроса сформированного отчёта «Справка о доходах за пределами + РФ». properties: taskId: + description: Идентификатор задачи формирования отчёта. type: string page: + description: 'Номер страницы отчета (начинается с 0), значение по умолчанию: 0.' format: int32 type: integer + required: + - taskId type: object v1GetDividendsForeignIssuerReportResponse: example: @@ -5683,12 +15147,15 @@ components: $ref: '#/components/schemas/v1DividendsForeignIssuerReport' type: array itemsCount: + description: Количество записей в отчёте. format: int32 type: integer pagesCount: + description: Количество страниц с данными отчёта, начинается с 0. format: int32 type: integer page: + description: Текущая страница, начинается с 0. format: int32 type: integer type: object @@ -5761,14 +15228,23 @@ components: v1GetDividendsRequest: description: Запрос дивидендов. properties: - figi: - type: string from: + description: >- + Начало запрашиваемого периода по UTC. Фильтрация происходит по + параметру `record_date` — дата фиксации реестра. format: date-time type: string to: + description: >- + Окончание запрашиваемого периода по UTC. Фильтрация происходит по + параметру `record_date` — дата фиксации реестра. format: date-time type: string + instrumentId: + description: Идентификатор инструмента — `figi` или `instrument_uid`. + type: string + required: + - instrumentId type: object v1GetDividendsResponse: description: Дивиденды. @@ -5825,28 +15301,114 @@ components: favoriteInstruments: - otcFlag: true classCode: classCode + uid: uid ticker: ticker instrumentType: instrumentType + name: name figi: figi apiTradeAvailableFlag: true isin: isin - otcFlag: true classCode: classCode + uid: uid + ticker: ticker + instrumentType: instrumentType + name: name + figi: figi + apiTradeAvailableFlag: true + isin: isin + properties: + favoriteInstruments: + description: Массив инструментов. + items: + $ref: '#/components/schemas/v1FavoriteInstrument' + type: array + type: object + v1GetForecastRequest: + description: Запрос прогнозов инвестдомов. + properties: + instrumentId: + description: Идентификатор инструмента. + type: string + type: object + v1GetForecastResponse: + description: Прогнозы инвестдомов по инструменту. + example: + consensus: + consensus: + nano: 6 + units: units + priceChange: + nano: 6 + units: units + uid: uid + maxTarget: + nano: 6 + units: units + ticker: ticker + priceChangeRel: + nano: 6 + units: units + currentPrice: + nano: 6 + units: units + currency: currency + minTarget: + nano: 6 + units: units + targets: + - priceChange: + nano: 6 + units: units + uid: uid + ticker: ticker + targetPrice: + nano: 6 + units: units + showName: showName + priceChangeRel: + nano: 6 + units: units + currentPrice: + nano: 6 + units: units + company: company + currency: currency + recommendationDate: 2000-01-23T04:56:07.000Z + - priceChange: + nano: 6 + units: units + uid: uid ticker: ticker - instrumentType: instrumentType - figi: figi - apiTradeAvailableFlag: true - isin: isin + targetPrice: + nano: 6 + units: units + showName: showName + priceChangeRel: + nano: 6 + units: units + currentPrice: + nano: 6 + units: units + company: company + currency: currency + recommendationDate: 2000-01-23T04:56:07.000Z properties: - favoriteInstruments: + targets: + description: Массив прогнозов. items: - $ref: '#/components/schemas/v1FavoriteInstrument' + $ref: '#/components/schemas/GetForecastResponseTargetItem' type: array + consensus: + $ref: '#/components/schemas/GetForecastResponseConsensusItem' type: object v1GetFuturesMarginRequest: properties: - figi: + instrumentId: + description: Идентификатор инструмента — `figi` или `instrument_uid`. type: string + required: + - instrumentId title: Запрос информации о фьючерсе type: object v1GetFuturesMarginResponse: @@ -5890,27 +15452,37 @@ components: tariff: tariff properties: premStatus: + description: Признак премиум клиента. type: boolean qualStatus: + description: Признак квалифицированного инвестора. type: boolean qualifiedForWorkWith: + description: >- + Набор требующих тестирования инструментов и возможностей, с которыми + может работать пользователь. + [Подробнее](https://russianinvestments.github.io/investAPI/faq_users/). items: type: string type: array tariff: + description: Наименование тарифа пользователя. type: string type: object v1GetLastPricesRequest: description: Запрос получения цен последних сделок. properties: - figi: - items: - type: string - type: array instrumentId: + description: >- + Массив идентификаторов инструмента. Принимает значения `figi` или + `instrument_uid`. items: type: string type: array + lastPriceType: + $ref: '#/components/schemas/v1LastPriceType' + instrumentStatus: + $ref: '#/components/schemas/v1InstrumentStatus' type: object v1GetLastPricesResponse: description: Список цен последних сделок. @@ -5930,6 +15502,7 @@ components: time: 2000-01-23T04:56:07.000Z properties: lastPrices: + description: Массив цен последних сделок. items: $ref: '#/components/schemas/v1LastPrice' type: array @@ -5937,16 +15510,24 @@ components: v1GetLastTradesRequest: description: Запрос обезличенных сделок за последний час. properties: - figi: - type: string from: + description: Начало запрашиваемого периода по UTC. format: date-time type: string to: + description: Окончание запрашиваемого периода по UTC. format: date-time type: string instrumentId: - type: string + description: >- + Идентификатор инструмента. Принимает значение `figi` или + `instrument_uid`. + type: string + tradeSource: + $ref: '#/components/schemas/v1TradeSourceType' + required: + - from + - to type: object v1GetLastTradesResponse: description: Обезличенных сделок за последний час. @@ -5968,16 +15549,19 @@ components: time: 2000-01-23T04:56:07.000Z properties: trades: + description: Массив сделок. items: $ref: '#/components/schemas/v1Trade' type: array type: object v1GetMarginAttributesRequest: + description: Запрос маржинальных показателей по счёту. properties: accountId: description: Идентификатор счёта пользователя. type: string - title: Запрос маржинальных показателей по счёту + required: + - accountId type: object v1GetMarginAttributesResponse: description: Маржинальные показатели по счёту. @@ -6019,39 +15603,113 @@ components: correctedMargin: $ref: '#/components/schemas/v1MoneyValue' type: object + v1GetMaxLotsRequest: + description: >- + Запрос на расчет количества доступных для покупки/продажи лотов. Если не + указывать цену инструмента, то расчет произведется по текущум ценам в + стакане: по лучшему предложению для покупки и по лучшему спросу для + продажи. + properties: + accountId: + title: Номер счета + type: string + instrumentId: + title: >- + Идентификатор инструмента, принимает значения Figi или + instrument_uid + type: string + price: + $ref: '#/components/schemas/v1Quotation' + required: + - accountId + - instrumentId + type: object + v1GetMaxLotsResponse: + example: + sellLimits: + sellMaxLots: sellMaxLots + buyLimits: + buyMoneyAmount: + nano: 6 + units: units + buyMaxLots: buyMaxLots + buyMaxMarketLots: buyMaxMarketLots + currency: currency + buyMarginLimits: + buyMoneyAmount: + nano: 6 + units: units + buyMaxLots: buyMaxLots + buyMaxMarketLots: buyMaxMarketLots + sellMarginLimits: + sellMaxLots: sellMaxLots + properties: + currency: + title: Валюта инструмента + type: string + buyLimits: + $ref: '#/components/schemas/GetMaxLotsResponseBuyLimitsView' + buyMarginLimits: + $ref: '#/components/schemas/GetMaxLotsResponseBuyLimitsView' + sellLimits: + $ref: '#/components/schemas/GetMaxLotsResponseSellLimitsView' + sellMarginLimits: + $ref: '#/components/schemas/GetMaxLotsResponseSellLimitsView' + title: Результат количество доступных для покупки/продажи лотов + type: object v1GetMySubscriptions: - description: Запрос активных подписок. + description: >- + Запрос активных подписок. Возвращает по одному сообщению на каждый тип + активных подписок — `SubscribeLastPriceResponse`, + `SubscribeInfoResponse`, `SubscribeTradesResponse`, + `SubscribeOrderBookResponse`, `SubscribeCandlesResponse`. type: object v1GetOperationsByCursorRequest: description: Запрос списка операций по счёту с пагинацией. properties: accountId: + description: >- + Идентификатор счёта клиента, обязательный параметр. Остальные + параметры опциональны. type: string instrumentId: + description: Идентификатор инструмента — FIGI или UID инструмента. type: string from: + description: Начало периода по UTC. format: date-time type: string to: + description: Окончание периода по UTC. format: date-time type: string cursor: + description: Идентификатор элемента, с которого начать формировать ответ. type: string limit: + description: >- + Лимит количества операций. По умолчанию — `100`, максимальное + значение — `1000`. format: int32 type: integer operationTypes: + description: Тип операции. Принимает значение из списка `OperationType`. items: $ref: '#/components/schemas/v1OperationType' type: array state: $ref: '#/components/schemas/v1OperationState' withoutCommissions: + description: Флаг возврата комиссии. По умолчанию — `false`. type: boolean withoutTrades: + description: Флаг получения ответа без массива сделок. type: boolean withoutOvernights: + description: Флаг показа overnight операций. type: boolean + required: + - accountId type: object v1GetOperationsByCursorResponse: description: Список операций по счёту с пагинацией. @@ -6120,6 +15778,17 @@ components: quantityRest: quantityRest cancelReason: cancelReason instrumentType: instrumentType + childOperations: + - instrumentUid: instrumentUid + payment: + nano: 5 + currency: currency + units: units + - instrumentUid: instrumentUid + payment: + nano: 5 + currency: currency + units: units quantity: quantity parentOperationId: parentOperationId positionUid: positionUid @@ -6190,6 +15859,17 @@ components: quantityRest: quantityRest cancelReason: cancelReason instrumentType: instrumentType + childOperations: + - instrumentUid: instrumentUid + payment: + nano: 5 + currency: currency + units: units + - instrumentUid: instrumentUid + payment: + nano: 5 + currency: currency + units: units quantity: quantity parentOperationId: parentOperationId positionUid: positionUid @@ -6201,10 +15881,13 @@ components: name: name properties: hasNext: + description: Признак, есть ли следующий элемент. type: boolean nextCursor: + description: Следующий курсор. type: string items: + description: Список операций. items: $ref: '#/components/schemas/v1OperationItem' type: array @@ -6212,13 +15895,17 @@ components: v1GetOrderBookRequest: description: Запрос стакана. properties: - figi: - type: string depth: + description: Глубина стакана. format: int32 type: integer instrumentId: + description: >- + Идентификатор инструмента. Принимает значение `figi` или + `instrument_uid`. type: string + required: + - depth type: object v1GetOrderBookResponse: description: Информация о стакане. @@ -6261,15 +15948,19 @@ components: units: units properties: figi: + description: FIGI-идентификатор инструмента. type: string depth: + description: Глубина стакана. format: int32 type: integer bids: + description: Множество пар значений на покупку. items: $ref: '#/components/schemas/v1Order' type: array asks: + description: Множество пар значений на продажу. items: $ref: '#/components/schemas/v1Order' type: array @@ -6282,30 +15973,129 @@ components: limitDown: $ref: '#/components/schemas/v1Quotation' lastPriceTs: + description: Время получения цены последней сделки. format: date-time type: string closePriceTs: + description: Время получения цены закрытия. format: date-time type: string orderbookTs: + description: Время формирования стакана на бирже. format: date-time type: string instrumentUid: + description: UID инструмента. + type: string + type: object + v1GetOrderPriceRequest: + properties: + accountId: + title: Номер счета + type: string + instrumentId: + title: >- + Идентификатор инструмента, принимает значения Figi или + instrument_uid + type: string + price: + $ref: '#/components/schemas/v1Quotation' + direction: + $ref: '#/components/schemas/v1OrderDirection' + quantity: + format: int64 + title: Количество лотов + type: string + title: Запрос получения предварительной стоимости заявки + type: object + v1GetOrderPriceResponse: + example: + totalOrderAmount: + nano: 5 + currency: currency + units: units + initialOrderAmount: + nano: 5 + currency: currency + units: units + dealCommission: + nano: 5 + currency: currency + units: units + extraFuture: + initialMargin: + nano: 5 + currency: currency + units: units + lotsRequested: lotsRequested + executedCommission: + nano: 5 + currency: currency + units: units + executedCommissionRub: + nano: 5 + currency: currency + units: units + serviceCommission: + nano: 5 + currency: currency + units: units + extraBond: + aciValue: + nano: 5 + currency: currency + units: units + nominalConversionRate: + nano: 6 + units: units + properties: + totalOrderAmount: + $ref: '#/components/schemas/v1MoneyValue' + initialOrderAmount: + $ref: '#/components/schemas/v1MoneyValue' + lotsRequested: + format: int64 + title: Запрошено лотов type: string + executedCommission: + $ref: '#/components/schemas/v1MoneyValue' + executedCommissionRub: + $ref: '#/components/schemas/v1MoneyValue' + serviceCommission: + $ref: '#/components/schemas/v1MoneyValue' + dealCommission: + $ref: '#/components/schemas/v1MoneyValue' + extraBond: + $ref: '#/components/schemas/GetOrderPriceResponseExtraBond' + extraFuture: + $ref: '#/components/schemas/GetOrderPriceResponseExtraFuture' + title: Предварительная стоимость заявки type: object v1GetOrderStateRequest: description: Запрос получения статуса торгового поручения. properties: accountId: + description: Номер счёта. type: string orderId: + description: Идентификатор заявки. type: string + priceType: + $ref: '#/components/schemas/v1PriceType' + orderIdType: + $ref: '#/components/schemas/v1OrderIdType' + required: + - accountId + - orderId type: object v1GetOrdersRequest: description: Запрос получения списка активных торговых поручений. properties: accountId: + description: Номер счёта. type: string + required: + - accountId type: object v1GetOrdersResponse: description: Список активных торговых поручений. @@ -6333,13 +16123,15 @@ components: lotsRequested: lotsRequested instrumentUid: instrumentUid stages: - - quantity: quantity + - executionTime: 2000-01-23T04:56:07.000Z + quantity: quantity price: nano: 5 currency: currency units: units tradeId: tradeId - - quantity: quantity + - executionTime: 2000-01-23T04:56:07.000Z + quantity: quantity price: nano: 5 currency: currency @@ -6386,13 +16178,15 @@ components: lotsRequested: lotsRequested instrumentUid: instrumentUid stages: - - quantity: quantity + - executionTime: 2000-01-23T04:56:07.000Z + quantity: quantity price: nano: 5 currency: currency units: units tradeId: tradeId - - quantity: quantity + - executionTime: 2000-01-23T04:56:07.000Z + quantity: quantity price: nano: 5 currency: currency @@ -6419,21 +16213,139 @@ components: orderDate: 2000-01-23T04:56:07.000Z properties: orders: + description: Массив активных заявок. + items: + $ref: '#/components/schemas/contractv1OrderState' + type: array + type: object + v1GetSignalsRequest: + description: Запрос сигналов. + properties: + signalId: + description: Идентификатор сигнала. + type: string + strategyId: + description: Идентификатор стратегии. + type: string + strategyType: + $ref: '#/components/schemas/v1StrategyType' + instrumentUid: + title: Идентификатор бумаги + type: string + from: + description: Дата начала запрашиваемого интервала в часовом поясе UTC. + format: date-time + type: string + to: + description: Дата конца запрашиваемого интервала в часовом поясе UTC. + format: date-time + type: string + direction: + $ref: '#/components/schemas/v1SignalDirection' + active: + $ref: '#/components/schemas/v1SignalState' + paging: + $ref: '#/components/schemas/v1Page' + type: object + v1GetSignalsResponse: + description: Сигналы. + example: + signals: + - strategyName: strategyName + stoploss: + nano: 6 + units: units + initialPrice: + nano: 6 + units: units + probability: 0 + endDt: 2000-01-23T04:56:07.000Z + createDt: 2000-01-23T04:56:07.000Z + closeDt: 2000-01-23T04:56:07.000Z + targetPrice: + nano: 6 + units: units + signalId: signalId + instrumentUid: instrumentUid + name: name + strategyId: strategyId + closePrice: + nano: 6 + units: units + info: info + - strategyName: strategyName + stoploss: + nano: 6 + units: units + initialPrice: + nano: 6 + units: units + probability: 0 + endDt: 2000-01-23T04:56:07.000Z + createDt: 2000-01-23T04:56:07.000Z + closeDt: 2000-01-23T04:56:07.000Z + targetPrice: + nano: 6 + units: units + signalId: signalId + instrumentUid: instrumentUid + name: name + strategyId: strategyId + closePrice: + nano: 6 + units: units + info: info + paging: + pageNumber: 6 + limit: 0 + totalCount: 1 + properties: + signals: + description: Массив сигналов. items: - $ref: '#/components/schemas/v1OrderState' + $ref: '#/components/schemas/v1Signal' type: array + paging: + $ref: '#/components/schemas/v1PageResponse' type: object v1GetStopOrdersRequest: description: Запрос получения списка активных стоп-заявок. properties: accountId: + description: Идентификатор счёта клиента. + type: string + status: + $ref: '#/components/schemas/v1StopOrderStatusOption' + from: + description: Левая граница. + format: date-time + type: string + to: + description: Правая граница. + format: date-time type: string + required: + - accountId type: object v1GetStopOrdersResponse: description: Список активных стоп-заявок. example: stopOrders: - activationDateTime: 2000-01-23T04:56:07.000Z + figi: figi + trailingData: + indent: + nano: 6 + units: units + price: + nano: 6 + units: units + extr: + nano: 6 + units: units + spread: + nano: 6 + units: units stopPrice: nano: 5 currency: currency @@ -6445,11 +16357,25 @@ components: currency: currency units: units instrumentUid: instrumentUid - figi: figi currency: currency stopOrderId: stopOrderId createDate: 2000-01-23T04:56:07.000Z + exchangeOrderId: exchangeOrderId - activationDateTime: 2000-01-23T04:56:07.000Z + figi: figi + trailingData: + indent: + nano: 6 + units: units + price: + nano: 6 + units: units + extr: + nano: 6 + units: units + spread: + nano: 6 + units: units stopPrice: nano: 5 currency: currency @@ -6461,72 +16387,200 @@ components: currency: currency units: units instrumentUid: instrumentUid - figi: figi currency: currency stopOrderId: stopOrderId createDate: 2000-01-23T04:56:07.000Z + exchangeOrderId: exchangeOrderId properties: stopOrders: + description: Массив стоп-заявок по счёту. items: $ref: '#/components/schemas/v1StopOrder' type: array type: object v1GetStrategiesRequest: + description: Запрос стратегий. properties: strategyId: + title: Идентификатор стратегии + type: string + type: object + v1GetStrategiesResponse: + example: + strategies: + - strategyName: strategyName + strategyDescription: strategyDescription + averageSignalYield: + nano: 6 + units: units + strategyUrl: strategyUrl + yieldYear: + nano: 6 + units: units + yield: + nano: 6 + units: units + strategyId: strategyId + totalSignals: 6 + timeInPosition: timeInPosition + averageSignalYieldYear: + nano: 6 + units: units + activeSignals: 0 + - strategyName: strategyName + strategyDescription: strategyDescription + averageSignalYield: + nano: 6 + units: units + strategyUrl: strategyUrl + yieldYear: + nano: 6 + units: units + yield: + nano: 6 + units: units + strategyId: strategyId + totalSignals: 6 + timeInPosition: timeInPosition + averageSignalYieldYear: + nano: 6 + units: units + activeSignals: 0 + properties: + strategies: + items: + $ref: '#/components/schemas/v1Strategy' + type: array + title: Стратегии + type: object + v1GetTechAnalysisRequest: + properties: + indicatorType: + $ref: '#/components/schemas/GetTechAnalysisRequestIndicatorType' + instrumentUid: + description: UID инструмента. + type: string + from: + description: Начало запрашиваемого периода по UTC. + format: date-time + type: string + to: + description: Окончание запрашиваемого периода по UTC. + format: date-time type: string + interval: + $ref: '#/components/schemas/GetTechAnalysisRequestIndicatorInterval' + typeOfPrice: + $ref: '#/components/schemas/GetTechAnalysisRequestTypeOfPrice' + length: + description: Торговый период, за который рассчитывается индикатор. + format: int32 + type: integer + deviation: + $ref: '#/components/schemas/GetTechAnalysisRequestDeviation' + smoothing: + $ref: '#/components/schemas/GetTechAnalysisRequestSmoothing' + required: + - from + - indicatorType + - instrumentUid + - interval + - to + - typeOfPrice type: object - v1GetStrategiesResponse: + v1GetTechAnalysisResponse: example: - strategies: - - strategyName: strategyName - strategyDescription: strategyDescription - strategyUrl: strategyUrl - strategyId: strategyId - - strategyName: strategyName - strategyDescription: strategyDescription - strategyUrl: strategyUrl - strategyId: strategyId + technicalIndicators: + - lowerBand: + nano: 6 + units: units + upperBand: + nano: 6 + units: units + macd: + nano: 6 + units: units + signal: + nano: 6 + units: units + timestamp: 2000-01-23T04:56:07.000Z + middleBand: + nano: 6 + units: units + - lowerBand: + nano: 6 + units: units + upperBand: + nano: 6 + units: units + macd: + nano: 6 + units: units + signal: + nano: 6 + units: units + timestamp: 2000-01-23T04:56:07.000Z + middleBand: + nano: 6 + units: units properties: - strategies: + technicalIndicators: + description: Массив значений результатов технического анализа. items: - $ref: '#/components/schemas/v1Strategy' + $ref: '#/components/schemas/GetTechAnalysisResponseTechAnalysisItem' type: array type: object v1GetTradingStatusRequest: description: Запрос получения торгового статуса. properties: - figi: - type: string instrumentId: + description: >- + Идентификатор инструмента. Принимает значение `figi` или + `instrument_uid`. type: string type: object v1GetTradingStatusResponse: description: Информация о торговом статусе. example: limitOrderAvailableFlag: true + bestpriceOrderAvailableFlag: true + onlyBestPrice: true marketOrderAvailableFlag: true instrumentUid: instrumentUid figi: figi apiTradeAvailableFlag: true properties: figi: + description: FIGI-идентификатор инструмента. type: string tradingStatus: $ref: '#/components/schemas/v1SecurityTradingStatus' limitOrderAvailableFlag: + description: Признак доступности выставления лимитной заявки по инструменту. type: boolean marketOrderAvailableFlag: + description: Признак доступности выставления рыночной заявки по инструменту. type: boolean apiTradeAvailableFlag: + description: Признак доступности торгов через API. type: boolean instrumentUid: + description: UID инструмента. type: string + bestpriceOrderAvailableFlag: + description: Признак доступности завяки по лучшей цене. + type: boolean + onlyBestPrice: + description: Признак доступности только заявки по лучшей цене. + type: boolean type: object v1GetTradingStatusesRequest: description: Запрос получения торгового статуса. properties: instrumentId: + description: >- + Идентификатор инструмента. Принимает значение `figi` или + `instrument_uid`. items: type: string type: array @@ -6536,17 +16590,22 @@ components: example: tradingStatuses: - limitOrderAvailableFlag: true + bestpriceOrderAvailableFlag: true + onlyBestPrice: true marketOrderAvailableFlag: true instrumentUid: instrumentUid figi: figi apiTradeAvailableFlag: true - limitOrderAvailableFlag: true + bestpriceOrderAvailableFlag: true + onlyBestPrice: true marketOrderAvailableFlag: true instrumentUid: instrumentUid figi: figi apiTradeAvailableFlag: true properties: tradingStatuses: + description: Массив информации о торговых статусах. items: $ref: '#/components/schemas/v1GetTradingStatusResponse' type: array @@ -6579,10 +16638,12 @@ components: open: 1 properties: unaryLimits: + description: Массив лимитов пользователя по unary-запросам. items: $ref: '#/components/schemas/v1UnaryLimit' type: array streamLimits: + description: Массив лимитов пользователей для stream-соединений. items: $ref: '#/components/schemas/v1StreamLimit' type: array @@ -6615,38 +16676,138 @@ components: close: $ref: '#/components/schemas/v1Quotation' volume: + description: Объём торгов в лотах. format: int64 type: string time: + description: Время свечи в часовом поясе UTC. format: date-time type: string isComplete: + description: >- + Признак завершённости свечи. **false** — свеча за текущие интервал + ещё сформирована не полностью. + type: boolean + candleSourceType: + $ref: '#/components/schemas/contractv1CandleSource' + type: object + v1IndicativeResponse: + example: + classCode: classCode + uid: uid + ticker: ticker + name: name + sellAvailableFlag: true + figi: figi + currency: currency + exchange: exchange + buyAvailableFlag: true + properties: + figi: + description: FIGI-идентификатор инструмента. + type: string + ticker: + description: Тикер инструмента. + type: string + classCode: + description: Класс-код инструмента. + type: string + currency: + description: Валюта расчётов. + type: string + instrumentKind: + $ref: '#/components/schemas/v1InstrumentType' + name: + description: Название инструмента. + type: string + exchange: + description: Tорговая площадка (секция биржи). + type: string + uid: + description: Уникальный идентификатор инструмента. + type: string + buyAvailableFlag: + description: Признак доступности для покупки. + type: boolean + sellAvailableFlag: + description: Признак доступности для продажи. type: boolean + title: Индикатив + type: object + v1IndicativesRequest: + title: Запрос справочника индексов и товаров + type: object + v1IndicativesResponse: + example: + instruments: + - classCode: classCode + uid: uid + ticker: ticker + name: name + sellAvailableFlag: true + figi: figi + currency: currency + exchange: exchange + buyAvailableFlag: true + - classCode: classCode + uid: uid + ticker: ticker + name: name + sellAvailableFlag: true + figi: figi + currency: currency + exchange: exchange + buyAvailableFlag: true + properties: + instruments: + description: Массив инструментов. + items: + $ref: '#/components/schemas/v1IndicativeResponse' + type: array + title: Справочник индексов и товаров type: object v1InfoInstrument: description: Запрос подписки на торговый статус. properties: figi: + description: >- + Deprecated FIGI-идентификатор инструмента. Используйте + instrument_id`. type: string + deprecated: true instrumentId: + description: >- + Идентификатор инструмента. Принимает значение `figi` или + `instrument_uid`. type: string type: object v1InfoSubscription: description: Статус подписки. example: + streamId: streamId instrumentUid: instrumentUid figi: figi + subscriptionId: subscriptionId properties: figi: + description: FIGI-идентификатор инструмента. type: string subscriptionStatus: $ref: '#/components/schemas/v1SubscriptionStatus' instrumentUid: + description: UID инструмента. + type: string + streamId: + description: Идентификатор открытого соединения. + type: string + subscriptionId: + description: Идентификатор подписки в формате UUID. type: string type: object v1Instrument: description: Объект передачи основной информации об инструменте. example: + assetUid: assetUid figi: figi dshortMin: nano: 6 @@ -6658,9 +16819,16 @@ components: dlong: nano: 6 units: units + dlongClient: + nano: 6 + units: units sellAvailableFlag: true currency: currency first1dayCandleDate: 2000-01-23T04:56:07.000Z + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor buyAvailableFlag: true weekendFlag: true classCode: classCode @@ -6682,6 +16850,9 @@ components: nano: 6 units: units otcFlag: true + dshortClient: + nano: 6 + units: units klong: nano: 6 units: units @@ -6694,17 +16865,26 @@ components: isin: isin properties: figi: + description: FIGI-идентификатор инструмента. type: string ticker: + description: Тикер инструмента. type: string classCode: + description: Класс-код инструмента. type: string isin: + description: ISIN-идентификатор инструмента. type: string lot: + description: >- + Лотность инструмента. Возможно совершение операций только на + количества ценной бумаги, кратные параметру `lot`. + [Подробнее](https://russianinvestments.github.io/investAPI/glossary#lot). format: int32 type: integer currency: + description: Валюта расчётов. type: string klong: $ref: '#/components/schemas/v1Quotation' @@ -6719,61 +16899,104 @@ components: dshortMin: $ref: '#/components/schemas/v1Quotation' shortEnabledFlag: + description: Признак доступности для операций в шорт. type: boolean name: + description: Название инструмента. type: string exchange: + description: Tорговая площадка (секция биржи). type: string countryOfRisk: + description: >- + Код страны риска — то есть страны, в которой компания ведёт основной + бизнес. type: string countryOfRiskName: + description: >- + Наименование страны риска — то есть страны, в которой компания ведёт + основной бизнес. type: string instrumentType: + description: Тип инструмента. type: string tradingStatus: $ref: '#/components/schemas/v1SecurityTradingStatus' otcFlag: + description: >- + Флаг, используемый ранее для определения внебиржевых инструментов. + На данный момент не используется для торгуемых через API + инструментов. Может использоваться как фильтр для операций, + совершавшихся некоторое время назад на ОТС площадке. type: boolean buyAvailableFlag: + description: Признак доступности для покупки. type: boolean sellAvailableFlag: + description: Признак доступности для продажи. type: boolean minPriceIncrement: $ref: '#/components/schemas/v1Quotation' apiTradeAvailableFlag: + description: Параметр указывает на возможность торговать инструментом через API. type: boolean uid: + description: Уникальный идентификатор инструмента. type: string realExchange: $ref: '#/components/schemas/v1RealExchange' positionUid: + description: Уникальный идентификатор позиции инструмента. + type: string + assetUid: + description: Уникальный идентификатор актива. type: string forIisFlag: + description: Признак доступности для ИИС. type: boolean forQualInvestorFlag: + description: >- + Флаг, отображающий доступность торговли инструментом только для + квалифицированных инвесторов. type: boolean weekendFlag: + description: Флаг, отображающий доступность торговли инструментом по выходным. type: boolean blockedTcaFlag: + description: Флаг заблокированного ТКС. type: boolean instrumentKind: $ref: '#/components/schemas/v1InstrumentType' first1minCandleDate: + description: Дата первой минутной свечи. format: date-time type: string first1dayCandleDate: + description: Дата первой дневной свечи. format: date-time type: string + brand: + $ref: '#/components/schemas/v1BrandData' + dlongClient: + $ref: '#/components/schemas/v1Quotation' + dshortClient: + $ref: '#/components/schemas/v1Quotation' type: object v1InstrumentClosePriceRequest: description: Запрос цен закрытия торговой сессии по инструменту. properties: instrumentId: + description: >- + Идентификатор инструмента. Принимает значение `figi` или + `instrument_uid`. type: string type: object v1InstrumentClosePriceResponse: description: Цена закрытия торговой сессии по инструменту. example: + eveningSessionPrice: + nano: 6 + units: units price: nano: 6 units: units @@ -6782,27 +17005,48 @@ components: time: 2000-01-23T04:56:07.000Z properties: figi: + description: FIGI инструмента. type: string instrumentUid: + description: UID инструмента. type: string price: $ref: '#/components/schemas/v1Quotation' + eveningSessionPrice: + $ref: '#/components/schemas/v1Quotation' time: + description: Дата совершения торгов. format: date-time type: string type: object + v1InstrumentExchangeType: + default: INSTRUMENT_EXCHANGE_UNSPECIFIED + description: |- + Площадка торговли. + + - INSTRUMENT_EXCHANGE_UNSPECIFIED: Площадка торговли не определена. + - INSTRUMENT_EXCHANGE_DEALER: Бумага, торгуемая у дилера. + enum: + - INSTRUMENT_EXCHANGE_UNSPECIFIED + - INSTRUMENT_EXCHANGE_DEALER + type: string v1InstrumentIdType: default: INSTRUMENT_ID_UNSPECIFIED + description: >- + Тип идентификатора инструмента. [Подробнее об идентификации + инструментов](https://russianinvestments.github.io/investAPI/faq_identification/). + + - INSTRUMENT_ID_UNSPECIFIED: Значение не определено. + - INSTRUMENT_ID_TYPE_FIGI: FIGI. + - INSTRUMENT_ID_TYPE_TICKER: Ticker. + - INSTRUMENT_ID_TYPE_UID: Уникальный идентификатор. + - INSTRUMENT_ID_TYPE_POSITION_UID: Идентификатор позиции. enum: - INSTRUMENT_ID_UNSPECIFIED - INSTRUMENT_ID_TYPE_FIGI - INSTRUMENT_ID_TYPE_TICKER - INSTRUMENT_ID_TYPE_UID - INSTRUMENT_ID_TYPE_POSITION_UID - title: >- - Тип идентификатора инструмента. Подробнее об идентификации инструментов: - [Идентификация - инструментов](https://tinkoff.github.io/investAPI/faq_identification/) type: string v1InstrumentLink: description: Связь с другим инструментом. @@ -6811,8 +17055,10 @@ components: type: type properties: type: + description: Тип связи. type: string instrumentUid: + description: UID-идентификатор связанного инструмента. type: string type: object v1InstrumentRequest: @@ -6821,14 +17067,20 @@ components: idType: $ref: '#/components/schemas/v1InstrumentIdType' classCode: + description: Идентификатор `class_code`. Обязательный, если `id_type = ticker`. type: string id: + description: Идентификатор запрашиваемого инструмента. type: string + required: + - id + - idType type: object v1InstrumentResponse: description: Данные по инструменту. example: instrument: + assetUid: assetUid figi: figi dshortMin: nano: 6 @@ -6840,9 +17092,16 @@ components: dlong: nano: 6 units: units + dlongClient: + nano: 6 + units: units sellAvailableFlag: true currency: currency first1dayCandleDate: 2000-01-23T04:56:07.000Z + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor buyAvailableFlag: true weekendFlag: true classCode: classCode @@ -6864,6 +17123,9 @@ components: nano: 6 units: units otcFlag: true + dshortClient: + nano: 6 + units: units klong: nano: 6 units: units @@ -6891,6 +17153,7 @@ components: figi: figi apiTradeAvailableFlag: true first1minCandleDate: 2000-01-23T04:56:07.000Z + lot: 0 uid: uid blockedTcaFlag: true name: name @@ -6898,43 +17161,69 @@ components: isin: isin properties: isin: + description: ISIN инструмента. type: string figi: + description: FIGI инструмента. type: string ticker: + description: Ticker инструмента. type: string classCode: + description: ClassCode инструмента. type: string instrumentType: + description: Тип инструмента. type: string name: + description: Название инструмента. type: string uid: + description: Уникальный идентификатор инструмента. type: string positionUid: + description: Уникальный идентификатор позиции инструмента. type: string instrumentKind: $ref: '#/components/schemas/v1InstrumentType' apiTradeAvailableFlag: + description: Возможность торговать инструментом через API. type: boolean forIisFlag: + description: Признак доступности для ИИС. type: boolean first1minCandleDate: + description: Дата первой минутной свечи. format: date-time type: string first1dayCandleDate: + description: Дата первой дневной свечи. format: date-time type: string forQualInvestorFlag: + description: >- + Флаг, отображающий доступность торговли инструментом только для + квалифицированных инвесторов. type: boolean weekendFlag: + description: Флаг, отображающий доступность торговли инструментом по выходным. type: boolean blockedTcaFlag: + description: Флаг заблокированного ТКС. type: boolean + lot: + description: Количество бумаг в лоте. + format: int32 + type: integer type: object v1InstrumentStatus: default: INSTRUMENT_STATUS_UNSPECIFIED - description: Статус запрашиваемых инструментов. + description: |- + Статус запрашиваемых инструментов. + + - INSTRUMENT_STATUS_UNSPECIFIED: Значение не определено. + - INSTRUMENT_STATUS_BASE: Базовый список инструментов (по умолчанию). Инструменты, доступные для торговли через T-Invest API. Cейчас списки бумаг, которые доступны из API и других интерфейсах совпадают — кроме внебиржевых бумаг. Но в будущем возможны ситуации, когда списки инструментов будут отличаться. + - INSTRUMENT_STATUS_ALL: Список всех инструментов. enum: - INSTRUMENT_STATUS_UNSPECIFIED - INSTRUMENT_STATUS_BASE @@ -6942,7 +17231,19 @@ components: type: string v1InstrumentType: default: INSTRUMENT_TYPE_UNSPECIFIED - description: Тип инструмента. + description: |- + Тип инструмента. + + - INSTRUMENT_TYPE_BOND: Облигация. + - INSTRUMENT_TYPE_SHARE: Акция. + - INSTRUMENT_TYPE_CURRENCY: Валюта. + - INSTRUMENT_TYPE_ETF: Exchange-traded fund. Фонд. + - INSTRUMENT_TYPE_FUTURES: Фьючерс. + - INSTRUMENT_TYPE_SP: Структурная нота. + - INSTRUMENT_TYPE_OPTION: Опцион. + - INSTRUMENT_TYPE_CLEARING_CERTIFICATE: Clearing certificate. + - INSTRUMENT_TYPE_INDEX: Индекс. + - INSTRUMENT_TYPE_COMMODITY: Товар. enum: - INSTRUMENT_TYPE_UNSPECIFIED - INSTRUMENT_TYPE_BOND @@ -6953,12 +17254,16 @@ components: - INSTRUMENT_TYPE_SP - INSTRUMENT_TYPE_OPTION - INSTRUMENT_TYPE_CLEARING_CERTIFICATE + - INSTRUMENT_TYPE_INDEX + - INSTRUMENT_TYPE_COMMODITY type: string v1InstrumentsRequest: description: Запрос получения инструментов. properties: instrumentStatus: $ref: '#/components/schemas/v1InstrumentStatus' + instrumentExchange: + $ref: '#/components/schemas/v1InstrumentExchangeType' type: object v1LastPrice: description: Информация о цене последней сделки. @@ -6971,36 +17276,70 @@ components: time: 2000-01-23T04:56:07.000Z properties: figi: + description: FIGI инструмента. type: string price: $ref: '#/components/schemas/v1Quotation' time: + description: Время получения последней цены в часовом поясе UTC по времени биржи. format: date-time type: string instrumentUid: + description: UID инструмента. type: string + lastPriceType: + $ref: '#/components/schemas/v1LastPriceType' type: object v1LastPriceInstrument: description: Запрос подписки на последнюю цену. properties: figi: + description: >- + Deprecated FIGI-идентификатор инструмента. Используйте + instrument_id`. type: string + deprecated: true instrumentId: + description: >- + Идентификатор инструмента. Принимает значение `figi` или + `instrument_uid`. type: string type: object v1LastPriceSubscription: description: Статус подписки на цену последней сделки. example: + streamId: streamId instrumentUid: instrumentUid figi: figi + subscriptionId: subscriptionId properties: figi: + description: FIGI-идентификатор инструмента. type: string subscriptionStatus: $ref: '#/components/schemas/v1SubscriptionStatus' instrumentUid: + description: UID инструмента. + type: string + streamId: + description: Идентификатор открытого соединения. + type: string + subscriptionId: + description: Идентификатор подписки в формате `UUID`. type: string type: object + v1LastPriceType: + default: LAST_PRICE_UNSPECIFIED + description: |- + - LAST_PRICE_UNSPECIFIED: Не определен. + - LAST_PRICE_EXCHANGE: Цена биржи. + - LAST_PRICE_DEALER: Цена дилера + enum: + - LAST_PRICE_UNSPECIFIED + - LAST_PRICE_EXCHANGE + - LAST_PRICE_DEALER + title: Тип последней цены + type: string v1MarketDataRequest: description: Запрос подписки или отписки на определённые биржевые данные. properties: @@ -7015,18 +17354,30 @@ components: subscribeLastPriceRequest: $ref: '#/components/schemas/v1SubscribeLastPriceRequest' getMySubscriptions: - description: Запрос активных подписок. + description: >- + Запрос активных подписок. Возвращает по одному сообщению на каждый + тип активных подписок — `SubscribeLastPriceResponse`, + `SubscribeInfoResponse`, `SubscribeTradesResponse`, + `SubscribeOrderBookResponse`, `SubscribeCandlesResponse`. type: object + ping: + $ref: '#/components/schemas/v1PingRequest' + pingSettings: + $ref: '#/components/schemas/v1PingDelaySettings' type: object v1MarketDataResponse: description: Пакет биржевой информации по подписке. example: subscribeInfoResponse: infoSubscriptions: - - instrumentUid: instrumentUid + - streamId: streamId + instrumentUid: instrumentUid figi: figi - - instrumentUid: instrumentUid + subscriptionId: subscriptionId + - streamId: streamId + instrumentUid: instrumentUid figi: figi + subscriptionId: subscriptionId trackingId: trackingId trade: quantity: quantity @@ -7039,13 +17390,19 @@ components: subscribeOrderBookResponse: orderBookSubscriptions: - depth: 0 + streamId: streamId instrumentUid: instrumentUid figi: figi + subscriptionId: subscriptionId - depth: 0 + streamId: streamId instrumentUid: instrumentUid figi: figi + subscriptionId: subscriptionId trackingId: trackingId ping: + streamId: streamId + pingRequestTime: 2000-01-23T04:56:07.000Z time: 2000-01-23T04:56:07.000Z candle: volume: volume @@ -7097,10 +17454,14 @@ components: isConsistent: true subscribeTradesResponse: tradeSubscriptions: - - instrumentUid: instrumentUid + - streamId: streamId + instrumentUid: instrumentUid figi: figi - - instrumentUid: instrumentUid + subscriptionId: subscriptionId + - streamId: streamId + instrumentUid: instrumentUid figi: figi + subscriptionId: subscriptionId trackingId: trackingId tradingStatus: limitOrderAvailableFlag: true @@ -7110,17 +17471,27 @@ components: time: 2000-01-23T04:56:07.000Z subscribeCandlesResponse: candlesSubscriptions: - - instrumentUid: instrumentUid + - streamId: streamId + instrumentUid: instrumentUid + waitingClose: true figi: figi - - instrumentUid: instrumentUid + subscriptionId: subscriptionId + - streamId: streamId + instrumentUid: instrumentUid + waitingClose: true figi: figi + subscriptionId: subscriptionId trackingId: trackingId subscribeLastPriceResponse: lastPriceSubscriptions: - - instrumentUid: instrumentUid + - streamId: streamId + instrumentUid: instrumentUid figi: figi - - instrumentUid: instrumentUid + subscriptionId: subscriptionId + - streamId: streamId + instrumentUid: instrumentUid figi: figi + subscriptionId: subscriptionId trackingId: trackingId lastPrice: price: @@ -7165,28 +17536,34 @@ components: $ref: '#/components/schemas/v1SubscribeInfoRequest' subscribeLastPriceRequest: $ref: '#/components/schemas/v1SubscribeLastPriceRequest' + pingSettings: + $ref: '#/components/schemas/v1PingDelaySettings' type: object v1MoneyValue: + description: Денежная сумма в определённой валюте. example: nano: 5 currency: currency units: units properties: currency: - title: строковый ISO-код валюты + description: Строковый ISO-код валюты. type: string units: + description: Целая часть суммы, может быть отрицательным числом. format: int64 - title: целая часть суммы, может быть отрицательным числом type: string nano: + description: Дробная часть суммы, может быть отрицательным числом. format: int32 - title: дробная часть суммы, может быть отрицательным числом type: integer - title: Денежная сумма в определенной валюте type: object v1OpenSandboxAccountRequest: description: Запрос открытия счёта в песочнице. + properties: + name: + title: Название счёта + type: string type: object v1OpenSandboxAccountResponse: description: Номер открытого счёта в песочнице. @@ -7194,6 +17571,7 @@ components: accountId: accountId properties: accountId: + title: Номер счёта type: string type: object v1Operation: @@ -7202,6 +17580,17 @@ components: date: 2000-01-23T04:56:07.000Z assetUid: assetUid instrumentType: instrumentType + childOperations: + - instrumentUid: instrumentUid + payment: + nano: 5 + currency: currency + units: units + - instrumentUid: instrumentUid + payment: + nano: 5 + currency: currency + units: units quantity: quantity parentOperationId: parentOperationId trades: @@ -7236,10 +17625,13 @@ components: quantityRest: quantityRest properties: id: + description: Идентификатор операции. type: string parentOperationId: + description: Идентификатор родительской операции. type: string currency: + description: Валюта операции. type: string payment: $ref: '#/components/schemas/v1MoneyValue' @@ -7248,32 +17640,50 @@ components: state: $ref: '#/components/schemas/v1OperationState' quantity: + description: Количество единиц инструмента. format: int64 type: string quantityRest: + description: Неисполненный остаток по сделке. format: int64 type: string figi: + description: FIGI-идентификатор инструмента, связанного с операцией. type: string instrumentType: + description: >- + Тип инструмента. Возможные значения:

`bond` — облигация; +
`share` — акция;
`currency` — валюта;
`etf` — фонд; +
`futures` — фьючерс. type: string date: + description: Дата и время операции в формате часовом поясе UTC. format: date-time type: string type: + description: Текстовое описание типа операции. type: string operationType: $ref: '#/components/schemas/v1OperationType' trades: + description: Массив сделок. items: $ref: '#/components/schemas/v1OperationTrade' type: array assetUid: + title: Идентификатор актива type: string positionUid: + description: Уникальный идентификатор позиции. type: string instrumentUid: + description: Уникальный идентификатор инструмента. type: string + childOperations: + description: Массив дочерних операций. + items: + $ref: '#/components/schemas/v1ChildOperationItem' + type: array type: object v1OperationItem: description: Данные об операции. @@ -7339,6 +17749,17 @@ components: quantityRest: quantityRest cancelReason: cancelReason instrumentType: instrumentType + childOperations: + - instrumentUid: instrumentUid + payment: + nano: 5 + currency: currency + units: units + - instrumentUid: instrumentUid + payment: + nano: 5 + currency: currency + units: units quantity: quantity parentOperationId: parentOperationId positionUid: positionUid @@ -7350,33 +17771,46 @@ components: name: name properties: cursor: + description: Курсор. type: string brokerAccountId: + description: Номер счёта клиента. type: string id: + description: Идентификатор операции, может меняться с течением времени. type: string parentOperationId: + description: >- + Идентификатор родительской операции. Может измениться, если + изменился ID родительской операции. type: string name: + description: Название операции. type: string date: + description: Дата поручения. format: date-time type: string type: $ref: '#/components/schemas/v1OperationType' description: + description: Описание операции. type: string state: $ref: '#/components/schemas/v1OperationState' instrumentUid: + description: Уникальный идентификатор инструмента. type: string figi: + description: FIGI. type: string instrumentType: + description: Тип инструмента. type: string instrumentKind: $ref: '#/components/schemas/v1InstrumentType' positionUid: + description: Уникальный идентификатор позиции. type: string payment: $ref: '#/components/schemas/v1MoneyValue' @@ -7391,23 +17825,34 @@ components: accruedInt: $ref: '#/components/schemas/v1MoneyValue' quantity: + description: Количество единиц инструмента. format: int64 type: string quantityRest: + description: Неисполненный остаток по сделке. format: int64 type: string quantityDone: + description: Исполненный остаток. format: int64 type: string cancelDateTime: + description: Дата и время снятия заявки. format: date-time type: string cancelReason: + description: Причина отмены операции. type: string tradesInfo: $ref: '#/components/schemas/v1OperationItemTrades' assetUid: + description: Идентификатор актива. type: string + childOperations: + description: Массив дочерних операций. + items: + $ref: '#/components/schemas/v1ChildOperationItem' + type: array type: object v1OperationItemTrade: description: Сделка по операции. @@ -7428,11 +17873,14 @@ components: units: units properties: num: + description: Номер сделки. type: string date: + description: Дата сделки. format: date-time type: string quantity: + description: Количество в единицах. format: int64 type: string price: @@ -7482,7 +17930,13 @@ components: type: object v1OperationState: default: OPERATION_STATE_UNSPECIFIED - description: Статус запрашиваемых операций. + description: |- + Статус запрашиваемых операций. + + - OPERATION_STATE_UNSPECIFIED: Статус операции не определён. + - OPERATION_STATE_EXECUTED: Исполнена частично или полностью. + - OPERATION_STATE_CANCELED: Отменена. + - OPERATION_STATE_PROGRESS: Исполняется. enum: - OPERATION_STATE_UNSPECIFIED - OPERATION_STATE_EXECUTED @@ -7501,11 +17955,14 @@ components: tradeId: tradeId properties: tradeId: + description: Идентификатор сделки. type: string dateTime: + description: Дата и время сделки по UTC. format: date-time type: string quantity: + description: Количество инструментов. format: int64 type: string price: @@ -7513,7 +17970,72 @@ components: type: object v1OperationType: default: OPERATION_TYPE_UNSPECIFIED - description: Тип операции. + description: |- + Тип операции. + + - OPERATION_TYPE_UNSPECIFIED: Тип операции не определён. + - OPERATION_TYPE_INPUT: Пополнение брокерского счёта. + - OPERATION_TYPE_BOND_TAX: Удержание НДФЛ по купонам. + - OPERATION_TYPE_OUTPUT_SECURITIES: Вывод ЦБ. + - OPERATION_TYPE_OVERNIGHT: Доход по сделке РЕПО овернайт. + - OPERATION_TYPE_TAX: Удержание налога. + - OPERATION_TYPE_BOND_REPAYMENT_FULL: Полное погашение облигаций. + - OPERATION_TYPE_SELL_CARD: Продажа ЦБ с карты. + - OPERATION_TYPE_DIVIDEND_TAX: Удержание налога по дивидендам. + - OPERATION_TYPE_OUTPUT: Вывод денежных средств. + - OPERATION_TYPE_BOND_REPAYMENT: Частичное погашение облигаций. + - OPERATION_TYPE_TAX_CORRECTION: Корректировка налога. + - OPERATION_TYPE_SERVICE_FEE: Удержание комиссии за обслуживание брокерского счёта. + - OPERATION_TYPE_BENEFIT_TAX: Удержание налога за материальную выгоду. + - OPERATION_TYPE_MARGIN_FEE: Удержание комиссии за непокрытую позицию. + - OPERATION_TYPE_BUY: Покупка ЦБ. + - OPERATION_TYPE_BUY_CARD: Покупка ЦБ с карты. + - OPERATION_TYPE_INPUT_SECURITIES: Перевод ценных бумаг из другого депозитария. + - OPERATION_TYPE_SELL_MARGIN: Продажа в результате Margin-call. + - OPERATION_TYPE_BROKER_FEE: Удержание комиссии за операцию. + - OPERATION_TYPE_BUY_MARGIN: Покупка в результате Margin-call. + - OPERATION_TYPE_DIVIDEND: Выплата дивидендов. + - OPERATION_TYPE_SELL: Продажа ЦБ. + - OPERATION_TYPE_COUPON: Выплата купонов. + - OPERATION_TYPE_SUCCESS_FEE: Удержание комиссии SuccessFee. + - OPERATION_TYPE_DIVIDEND_TRANSFER: Передача дивидендного дохода. + - OPERATION_TYPE_ACCRUING_VARMARGIN: Зачисление вариационной маржи. + - OPERATION_TYPE_WRITING_OFF_VARMARGIN: Списание вариационной маржи. + - OPERATION_TYPE_DELIVERY_BUY: Покупка в рамках экспирации фьючерсного контракта. + - OPERATION_TYPE_DELIVERY_SELL: Продажа в рамках экспирации фьючерсного контракта. + - OPERATION_TYPE_TRACK_MFEE: Комиссия за управление по счёту автоследования. + - OPERATION_TYPE_TRACK_PFEE: Комиссия за результат по счёту автоследования. + - OPERATION_TYPE_TAX_PROGRESSIVE: Удержание налога по ставке 15%. + - OPERATION_TYPE_BOND_TAX_PROGRESSIVE: Удержание налога по купонам по ставке 15%. + - OPERATION_TYPE_DIVIDEND_TAX_PROGRESSIVE: Удержание налога по дивидендам по ставке 15%. + - OPERATION_TYPE_BENEFIT_TAX_PROGRESSIVE: Удержание налога за материальную выгоду по ставке 15%. + - OPERATION_TYPE_TAX_CORRECTION_PROGRESSIVE: Корректировка налога по ставке 15%. + - OPERATION_TYPE_TAX_REPO_PROGRESSIVE: Удержание налога за возмещение по сделкам РЕПО по ставке 15%. + - OPERATION_TYPE_TAX_REPO: Удержание налога за возмещение по сделкам РЕПО. + - OPERATION_TYPE_TAX_REPO_HOLD: Удержание налога по сделкам РЕПО. + - OPERATION_TYPE_TAX_REPO_REFUND: Возврат налога по сделкам РЕПО. + - OPERATION_TYPE_TAX_REPO_HOLD_PROGRESSIVE: Удержание налога по сделкам РЕПО по ставке 15%. + - OPERATION_TYPE_TAX_REPO_REFUND_PROGRESSIVE: Возврат налога по сделкам РЕПО по ставке 15%. + - OPERATION_TYPE_DIV_EXT: Выплата дивидендов на карту. + - OPERATION_TYPE_TAX_CORRECTION_COUPON: Корректировка налога по купонам. + - OPERATION_TYPE_CASH_FEE: Комиссия за валютный остаток. + - OPERATION_TYPE_OUT_FEE: Комиссия за вывод валюты с брокерского счёта. + - OPERATION_TYPE_OUT_STAMP_DUTY: Гербовый сбор. + - OPERATION_TYPE_OUTPUT_SWIFT: SWIFT-перевод. + - OPERATION_TYPE_INPUT_SWIFT: SWIFT-перевод. + - OPERATION_TYPE_OUTPUT_ACQUIRING: Перевод на карту. + - OPERATION_TYPE_INPUT_ACQUIRING: Перевод с карты. + - OPERATION_TYPE_OUTPUT_PENALTY: Комиссия за вывод средств. + - OPERATION_TYPE_ADVICE_FEE: Списание оплаты за сервис Советов. + - OPERATION_TYPE_TRANS_IIS_BS: Перевод ценных бумаг с ИИС на брокерский счёт. + - OPERATION_TYPE_TRANS_BS_BS: Перевод ценных бумаг с одного брокерского счёта на другой. + - OPERATION_TYPE_OUT_MULTI: Вывод денежных средств со счёта. + - OPERATION_TYPE_INP_MULTI: Пополнение денежных средств со счёта. + - OPERATION_TYPE_OVER_PLACEMENT: Размещение биржевого овернайта. + - OPERATION_TYPE_OVER_COM: Списание комиссии. + - OPERATION_TYPE_OVER_INCOME: Доход от оверанайта. + - OPERATION_TYPE_OPTION_EXPIRATION: Экспирация опциона. + - OPERATION_TYPE_FUTURE_EXPIRATION: Экспирация фьючерса. enum: - OPERATION_TYPE_UNSPECIFIED - OPERATION_TYPE_INPUT @@ -7577,22 +18099,29 @@ components: - OPERATION_TYPE_OVER_COM - OPERATION_TYPE_OVER_INCOME - OPERATION_TYPE_OPTION_EXPIRATION + - OPERATION_TYPE_FUTURE_EXPIRATION type: string v1OperationsRequest: description: Запрос получения списка операций по счёту. properties: accountId: + description: Идентификатор счёта клиента. type: string from: + description: Начало периода по UTC. format: date-time type: string to: + description: Окончание периода по UTC. format: date-time type: string state: $ref: '#/components/schemas/v1OperationState' figi: + description: FIGI-идентификатор инструмента для фильтрации. type: string + required: + - accountId type: object v1OperationsResponse: description: Список операций. @@ -7601,6 +18130,17 @@ components: - date: 2000-01-23T04:56:07.000Z assetUid: assetUid instrumentType: instrumentType + childOperations: + - instrumentUid: instrumentUid + payment: + nano: 5 + currency: currency + units: units + - instrumentUid: instrumentUid + payment: + nano: 5 + currency: currency + units: units quantity: quantity parentOperationId: parentOperationId trades: @@ -7636,6 +18176,17 @@ components: - date: 2000-01-23T04:56:07.000Z assetUid: assetUid instrumentType: instrumentType + childOperations: + - instrumentUid: instrumentUid + payment: + nano: 5 + currency: currency + units: units + - instrumentUid: instrumentUid + payment: + nano: 5 + currency: currency + units: units quantity: quantity parentOperationId: parentOperationId trades: @@ -7670,6 +18221,7 @@ components: quantityRest: quantityRest properties: operations: + description: Массив операций. items: $ref: '#/components/schemas/v1Operation' type: array @@ -7687,11 +18239,18 @@ components: dlong: nano: 6 units: units + dlongClient: + nano: 6 + units: units lastTradeDate: 2000-01-23T04:56:07.000Z sellAvailableFlag: true currency: currency first1dayCandleDate: 2000-01-23T04:56:07.000Z sector: sector + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor expirationDate: 2000-01-23T04:56:07.000Z buyAvailableFlag: true weekendFlag: true @@ -7718,6 +18277,9 @@ components: nano: 6 units: units basicAssetPositionUid: basicAssetPositionUid + dshortClient: + nano: 6 + units: units otcFlag: true klong: nano: 6 @@ -7736,14 +18298,19 @@ components: units: units properties: uid: + description: Уникальный идентификатор инструмента. type: string positionUid: + description: Уникальный идентификатор позиции. type: string ticker: + description: Тикер инструмента. type: string classCode: + description: Класс-код. type: string basicAssetPositionUid: + description: Уникальный идентификатор позиции основного инструмента. type: string tradingStatus: $ref: '#/components/schemas/v1SecurityTradingStatus' @@ -7758,24 +18325,36 @@ components: settlementType: $ref: '#/components/schemas/v1OptionSettlementType' name: + description: Название инструмента. type: string currency: + description: Валюта. type: string settlementCurrency: + description: Валюта, в которой оценивается контракт. type: string assetType: + description: Тип актива. type: string basicAsset: + description: Основной актив. type: string exchange: + description: Tорговая площадка (секция биржи). type: string countryOfRisk: + description: Код страны рисков. type: string countryOfRiskName: + description: Наименование страны рисков. type: string sector: + description: Сектор экономики. type: string + brand: + $ref: '#/components/schemas/v1BrandData' lot: + description: Количество бумаг в лоте. format: int32 type: integer basicAssetSize: @@ -7796,43 +18375,72 @@ components: $ref: '#/components/schemas/v1Quotation' strikePrice: $ref: '#/components/schemas/v1MoneyValue' + dlongClient: + $ref: '#/components/schemas/v1Quotation' + dshortClient: + $ref: '#/components/schemas/v1Quotation' expirationDate: + description: Дата истечения срока в формате UTC. format: date-time type: string firstTradeDate: + description: Дата начала обращения контракта в формате UTC. format: date-time type: string lastTradeDate: + description: Дата исполнения в формате UTC. format: date-time type: string first1minCandleDate: + description: Дата первой минутной свечи в формате UTC. format: date-time type: string first1dayCandleDate: + description: Дата первой дневной свечи в формате UTC. format: date-time type: string shortEnabledFlag: + description: Признак доступности для операций шорт. type: boolean forIisFlag: + description: Возможность покупки или продажи на ИИС. type: boolean otcFlag: + description: >- + Флаг, используемый ранее для определения внебиржевых инструментов. + На данный момент не используется для торгуемых через API + инструментов. Может использоваться как фильтр для операций, + совершавшихся некоторое время назад на ОТС площадке. type: boolean buyAvailableFlag: + description: Признак доступности для покупки. type: boolean sellAvailableFlag: + description: Признак доступности для продажи. type: boolean forQualInvestorFlag: + description: >- + Флаг, отображающий доступность торговли инструментом только для + квалифицированных инвесторов. type: boolean weekendFlag: + description: Флаг, отображающий доступность торговли инструментом по выходным. type: boolean blockedTcaFlag: + description: Флаг заблокированного ТКС. type: boolean apiTradeAvailableFlag: + description: Возможность торговать инструментом через API. type: boolean type: object v1OptionDirection: default: OPTION_DIRECTION_UNSPECIFIED - description: Тип опциона по направлению сделки. + description: |- + Тип опциона по направлению сделки. + + - OPTION_DIRECTION_UNSPECIFIED: Тип не определён. + - OPTION_DIRECTION_PUT: Опцион на продажу. + - OPTION_DIRECTION_CALL: Опцион на покупку. enum: - OPTION_DIRECTION_UNSPECIFIED - OPTION_DIRECTION_PUT @@ -7840,7 +18448,12 @@ components: type: string v1OptionPaymentType: default: OPTION_PAYMENT_TYPE_UNSPECIFIED - description: Тип расчетов по опциону. + description: |- + Тип расчётов по опциону. + + - OPTION_PAYMENT_TYPE_UNSPECIFIED: Тип не определён. + - OPTION_PAYMENT_TYPE_PREMIUM: Опционы с использованием премии в расчётах. + - OPTION_PAYMENT_TYPE_MARGINAL: Маржируемые опционы. enum: - OPTION_PAYMENT_TYPE_UNSPECIFIED - OPTION_PAYMENT_TYPE_PREMIUM @@ -7860,11 +18473,18 @@ components: dlong: nano: 6 units: units + dlongClient: + nano: 6 + units: units lastTradeDate: 2000-01-23T04:56:07.000Z sellAvailableFlag: true currency: currency first1dayCandleDate: 2000-01-23T04:56:07.000Z sector: sector + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor expirationDate: 2000-01-23T04:56:07.000Z buyAvailableFlag: true weekendFlag: true @@ -7891,6 +18511,9 @@ components: nano: 6 units: units basicAssetPositionUid: basicAssetPositionUid + dshortClient: + nano: 6 + units: units otcFlag: true klong: nano: 6 @@ -7913,7 +18536,12 @@ components: type: object v1OptionSettlementType: default: OPTION_EXECUTION_TYPE_UNSPECIFIED - description: Тип опциона по способу исполнения. + description: |- + Тип опциона по способу исполнения. + + - OPTION_EXECUTION_TYPE_UNSPECIFIED: Тип не определён. + - OPTION_EXECUTION_TYPE_PHYSICAL_DELIVERY: Поставочный тип опциона. + - OPTION_EXECUTION_TYPE_CASH_SETTLEMENT: Расчётный тип опциона. enum: - OPTION_EXECUTION_TYPE_UNSPECIFIED - OPTION_EXECUTION_TYPE_PHYSICAL_DELIVERY @@ -7921,7 +18549,12 @@ components: type: string v1OptionStyle: default: OPTION_STYLE_UNSPECIFIED - description: Тип опциона по стилю. + description: |- + Тип опциона по стилю. + + - OPTION_STYLE_UNSPECIFIED: Тип не определён. + - OPTION_STYLE_AMERICAN: Американский опцион. + - OPTION_STYLE_EUROPEAN: Европейский опцион. enum: - OPTION_STYLE_UNSPECIFIED - OPTION_STYLE_AMERICAN @@ -7941,11 +18574,18 @@ components: dlong: nano: 6 units: units + dlongClient: + nano: 6 + units: units lastTradeDate: 2000-01-23T04:56:07.000Z sellAvailableFlag: true currency: currency first1dayCandleDate: 2000-01-23T04:56:07.000Z sector: sector + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor expirationDate: 2000-01-23T04:56:07.000Z buyAvailableFlag: true weekendFlag: true @@ -7972,6 +18612,9 @@ components: nano: 6 units: units basicAssetPositionUid: basicAssetPositionUid + dshortClient: + nano: 6 + units: units otcFlag: true klong: nano: 6 @@ -7998,11 +18641,18 @@ components: dlong: nano: 6 units: units + dlongClient: + nano: 6 + units: units lastTradeDate: 2000-01-23T04:56:07.000Z sellAvailableFlag: true currency: currency first1dayCandleDate: 2000-01-23T04:56:07.000Z sector: sector + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor expirationDate: 2000-01-23T04:56:07.000Z buyAvailableFlag: true weekendFlag: true @@ -8029,6 +18679,9 @@ components: nano: 6 units: units basicAssetPositionUid: basicAssetPositionUid + dshortClient: + nano: 6 + units: units otcFlag: true klong: nano: 6 @@ -8047,6 +18700,7 @@ components: units: units properties: instruments: + description: Массив данных по опциону. items: $ref: '#/components/schemas/v1Option' type: array @@ -8062,6 +18716,7 @@ components: price: $ref: '#/components/schemas/v1Quotation' quantity: + description: Количество в лотах. format: int64 type: string type: object @@ -8099,21 +18754,29 @@ components: isConsistent: true properties: figi: + description: FIGI-идентификатор инструмента. type: string depth: + description: Глубина стакана. format: int32 type: integer isConsistent: + description: >- + Флаг консистентности стакана. **false** — не все заявки попали в + стакан из-за сетевых задержек или нарушения порядка доставки. type: boolean bids: + description: Массив предложений. items: $ref: '#/components/schemas/v1Order' type: array asks: + description: Массив спроса. items: $ref: '#/components/schemas/v1Order' type: array time: + description: Время формирования стакана в часовом поясе UTC по времени биржи. format: date-time type: string limitUp: @@ -8121,39 +18784,83 @@ components: limitDown: $ref: '#/components/schemas/v1Quotation' instrumentUid: + description: UID инструмента. type: string + orderBookType: + $ref: '#/components/schemas/v1OrderBookType' type: object v1OrderBookInstrument: description: Запрос подписки на стаканы. properties: figi: + description: >- + Deprecated FIGI-идентификатор инструмента. Используйте + `instrument_id`. type: string + deprecated: true depth: + description: Глубина стакана. format: int32 type: integer instrumentId: + description: >- + Идентификатор инструмента. Принимает значение `figi` или + `instrument_uid`. type: string + orderBookType: + $ref: '#/components/schemas/v1OrderBookType' type: object v1OrderBookSubscription: description: Статус подписки. example: depth: 0 + streamId: streamId instrumentUid: instrumentUid figi: figi + subscriptionId: subscriptionId properties: figi: + description: FIGI-идентификатор инструмента. type: string depth: + description: Глубина стакана. format: int32 type: integer subscriptionStatus: $ref: '#/components/schemas/v1SubscriptionStatus' instrumentUid: + description: UID инструмента. + type: string + streamId: + description: Идентификатор открытого соединения. type: string + subscriptionId: + description: Идентификатор подписки в формате `UUID`. + type: string + orderBookType: + $ref: '#/components/schemas/v1OrderBookType' type: object + v1OrderBookType: + default: ORDERBOOK_TYPE_UNSPECIFIED + description: |2- + - ORDERBOOK_TYPE_UNSPECIFIED: Не определён. + - ORDERBOOK_TYPE_EXCHANGE: Биржевой стакан. + - ORDERBOOK_TYPE_DEALER: Стакан дилера. + - ORDERBOOK_TYPE_ALL: Стакан биржевой и дилера. + enum: + - ORDERBOOK_TYPE_UNSPECIFIED + - ORDERBOOK_TYPE_EXCHANGE + - ORDERBOOK_TYPE_DEALER + - ORDERBOOK_TYPE_ALL + type: string v1OrderDirection: default: ORDER_DIRECTION_UNSPECIFIED - description: Направление операции. + description: |- + Направление операции. + + - ORDER_DIRECTION_UNSPECIFIED: Значение не указано + - ORDER_DIRECTION_BUY: Покупка + - ORDER_DIRECTION_SELL: Продажа enum: - ORDER_DIRECTION_UNSPECIFIED - ORDER_DIRECTION_BUY @@ -8161,6 +18868,12 @@ components: type: string v1OrderExecutionReportStatus: default: EXECUTION_REPORT_STATUS_UNSPECIFIED + description: |- + - EXECUTION_REPORT_STATUS_FILL: Исполнена + - EXECUTION_REPORT_STATUS_REJECTED: Отклонена + - EXECUTION_REPORT_STATUS_CANCELLED: Отменена пользователем + - EXECUTION_REPORT_STATUS_NEW: Новая + - EXECUTION_REPORT_STATUS_PARTIALLYFILL: Частично исполнена enum: - EXECUTION_REPORT_STATUS_UNSPECIFIED - EXECUTION_REPORT_STATUS_FILL @@ -8170,126 +18883,257 @@ components: - EXECUTION_REPORT_STATUS_PARTIALLYFILL title: Текущий статус заявки (поручения) type: string + v1OrderIdType: + default: ORDER_ID_TYPE_UNSPECIFIED + description: |- + - ORDER_ID_TYPE_UNSPECIFIED: Тип идентификатора не указан. + - ORDER_ID_TYPE_EXCHANGE: Биржевой идентификатор + - ORDER_ID_TYPE_REQUEST: Ключ идемпотентности, переданный клиентом + enum: + - ORDER_ID_TYPE_UNSPECIFIED + - ORDER_ID_TYPE_EXCHANGE + - ORDER_ID_TYPE_REQUEST + title: Тип идентификатора заявки + type: string v1OrderStage: description: Сделки в рамках торгового поручения. example: + executionTime: 2000-01-23T04:56:07.000Z quantity: quantity price: nano: 5 currency: currency - units: units - tradeId: tradeId + units: units + tradeId: tradeId + properties: + price: + $ref: '#/components/schemas/v1MoneyValue' + quantity: + description: Количество лотов. + format: int64 + type: string + tradeId: + description: Идентификатор сделки. + type: string + executionTime: + format: date-time + title: Время исполнения сделки + type: string + type: object + v1OrderStateStreamRequest: + properties: + accounts: + description: Идентификаторы счетов. + items: + type: string + type: array + pingDelayMs: + format: int32 + title: Задержка пинг сообщений milliseconds 5000-180000, default 120000 + type: integer + title: Запрос установки стрим-соединения торговых поручений + type: object + v1OrderStateStreamResponse: + example: + ping: + streamId: streamId + pingRequestTime: 2000-01-23T04:56:07.000Z + time: 2000-01-23T04:56:07.000Z + subscription: + streamId: streamId + accounts: + - accounts + - accounts + error: + code: code + message: message + trackingId: trackingId + orderState: + orderId: orderId + initialOrderPrice: + nano: 5 + currency: currency + units: units + createdAt: 2000-01-23T04:56:07.000Z + completionTime: 2000-01-23T04:56:07.000Z + lotsLeft: lotsLeft + orderPrice: + nano: 5 + currency: currency + units: units + executedOrderPrice: + nano: 5 + currency: currency + units: units + currency: currency + classCode: classCode + ticker: ticker + amount: + nano: 5 + currency: currency + units: units + lotSize: 0 + lotsCancelled: lotsCancelled + trades: + - dateTime: 2000-01-23T04:56:07.000Z + quantity: quantity + price: + nano: 6 + units: units + tradeId: tradeId + - dateTime: 2000-01-23T04:56:07.000Z + quantity: quantity + price: + nano: 6 + units: units + tradeId: tradeId + accountId: accountId + lotsExecuted: lotsExecuted + clientCode: clientCode + lotsRequested: lotsRequested + instrumentUid: instrumentUid + orderRequestId: orderRequestId + exchange: exchange properties: - price: - $ref: '#/components/schemas/v1MoneyValue' - quantity: - format: int64 - type: string - tradeId: - type: string + orderState: + $ref: '#/components/schemas/v1OrderStateStreamResponseOrderState' + ping: + $ref: '#/components/schemas/v1Ping' + subscription: + $ref: '#/components/schemas/v1SubscriptionResponse' + title: Информация по заявкам type: object - v1OrderState: - description: Информация о торговом поручении. + v1OrderStateStreamResponseOrderState: example: orderId: orderId - figi: figi initialOrderPrice: nano: 5 currency: currency units: units - initialCommission: + createdAt: 2000-01-23T04:56:07.000Z + completionTime: 2000-01-23T04:56:07.000Z + lotsLeft: lotsLeft + orderPrice: nano: 5 currency: currency units: units - averagePositionPrice: + executedOrderPrice: nano: 5 currency: currency units: units - lotsExecuted: lotsExecuted - totalOrderAmount: + currency: currency + classCode: classCode + ticker: ticker + amount: nano: 5 currency: currency units: units - lotsRequested: lotsRequested - instrumentUid: instrumentUid - stages: - - quantity: quantity + lotSize: 0 + lotsCancelled: lotsCancelled + trades: + - dateTime: 2000-01-23T04:56:07.000Z + quantity: quantity price: - nano: 5 - currency: currency + nano: 6 units: units tradeId: tradeId - - quantity: quantity + - dateTime: 2000-01-23T04:56:07.000Z + quantity: quantity price: - nano: 5 - currency: currency + nano: 6 units: units tradeId: tradeId + accountId: accountId + lotsExecuted: lotsExecuted + clientCode: clientCode + lotsRequested: lotsRequested + instrumentUid: instrumentUid orderRequestId: orderRequestId - executedOrderPrice: - nano: 5 - currency: currency - units: units - executedCommission: - nano: 5 - currency: currency - units: units - initialSecurityPrice: - nano: 5 - currency: currency - units: units - serviceCommission: - nano: 5 - currency: currency - units: units - currency: currency - orderDate: 2000-01-23T04:56:07.000Z + exchange: exchange properties: orderId: + title: Биржевой идентификатор заявки + type: string + orderRequestId: + description: >- + Идентификатор ключа идемпотентности, переданный клиентом, в формате + UID. Максимальная длина 36 символов. + type: string + clientCode: + title: Код клиента на бирже + type: string + createdAt: + format: date-time + title: Дата создания заявки type: string executionReportStatus: $ref: '#/components/schemas/v1OrderExecutionReportStatus' - lotsRequested: - format: int64 + statusInfo: + $ref: '#/components/schemas/OrderStateStreamResponseStatusCauseInfo' + ticker: + title: Тикер инструмента type: string - lotsExecuted: - format: int64 + classCode: + title: Класс-код (секция торгов) + type: string + lotSize: + format: int32 + title: Лотность инструмента заявки + type: integer + direction: + $ref: '#/components/schemas/v1OrderDirection' + timeInForce: + $ref: '#/components/schemas/v1TimeInForceType' + orderType: + $ref: '#/components/schemas/v1OrderType' + accountId: + title: Номер счета type: string initialOrderPrice: $ref: '#/components/schemas/v1MoneyValue' - executedOrderPrice: - $ref: '#/components/schemas/v1MoneyValue' - totalOrderAmount: - $ref: '#/components/schemas/v1MoneyValue' - averagePositionPrice: + orderPrice: $ref: '#/components/schemas/v1MoneyValue' - initialCommission: + amount: $ref: '#/components/schemas/v1MoneyValue' - executedCommission: + executedOrderPrice: $ref: '#/components/schemas/v1MoneyValue' - figi: + currency: + title: Валюта исполнения type: string - direction: - $ref: '#/components/schemas/v1OrderDirection' - initialSecurityPrice: - $ref: '#/components/schemas/v1MoneyValue' - stages: + lotsRequested: + format: int64 + title: Запрошено лотов + type: string + lotsExecuted: + format: int64 + title: Исполнено лотов + type: string + lotsLeft: + format: int64 + title: Число неисполненных лотов по заявке + type: string + lotsCancelled: + format: int64 + title: Отмененные лоты + type: string + marker: + $ref: '#/components/schemas/OrderStateStreamResponseMarkerType' + trades: items: - $ref: '#/components/schemas/v1OrderStage' + $ref: '#/components/schemas/v1OrderTrade' + title: Список сделок type: array - serviceCommission: - $ref: '#/components/schemas/v1MoneyValue' - currency: - type: string - orderType: - $ref: '#/components/schemas/v1OrderType' - orderDate: + completionTime: format: date-time + title: Время исполнения заявки type: string - instrumentUid: + exchange: + title: Код биржи type: string - orderRequestId: + instrumentUid: + title: UID идентификатор инструмента type: string + title: Заявка type: object v1OrderTrade: description: Информация о сделке. @@ -8302,14 +19146,17 @@ components: tradeId: tradeId properties: dateTime: + description: Дата и время совершения сделки в часовом поясе UTC. format: date-time type: string price: $ref: '#/components/schemas/v1Quotation' quantity: + description: Количество штук в сделке. format: int64 type: string tradeId: + description: Идентификатор сделки. type: string type: object v1OrderTrades: @@ -8335,41 +19182,106 @@ components: figi: figi properties: orderId: + description: Идентификатор торгового поручения. type: string createdAt: + description: Дата и время создания сообщения в часовом поясе UTC. format: date-time type: string direction: $ref: '#/components/schemas/v1OrderDirection' figi: + description: Figi-идентификатор инструмента. type: string trades: + description: Массив сделок. items: $ref: '#/components/schemas/v1OrderTrade' type: array accountId: + description: Идентификатор счёта. type: string instrumentUid: + description: UID идентификатор инструмента. type: string type: object v1OrderType: default: ORDER_TYPE_UNSPECIFIED - description: Тип заявки. + description: |- + Тип заявки. + + - ORDER_TYPE_UNSPECIFIED: Значение не указано + - ORDER_TYPE_LIMIT: Лимитная + - ORDER_TYPE_MARKET: Рыночная + - ORDER_TYPE_BESTPRICE: Лучшая цена enum: - ORDER_TYPE_UNSPECIFIED - ORDER_TYPE_LIMIT - ORDER_TYPE_MARKET - ORDER_TYPE_BESTPRICE type: string + v1Page: + properties: + limit: + description: Максимальное число возвращаемых записей. + format: int32 + type: integer + pageNumber: + description: Порядковый номер страницы, начиная с 0. + format: int32 + type: integer + type: object + v1PageResponse: + example: + pageNumber: 6 + limit: 0 + totalCount: 1 + properties: + limit: + description: Максимальное число возвращаемых записей. + format: int32 + type: integer + pageNumber: + description: Порядковый номер страницы, начиная с 0. + format: int32 + type: integer + totalCount: + description: Общее количество записей. + format: int32 + type: integer + type: object v1Ping: description: Проверка активности стрима. example: + streamId: streamId + pingRequestTime: 2000-01-23T04:56:07.000Z time: 2000-01-23T04:56:07.000Z properties: time: description: Время проверки. format: date-time type: string + streamId: + description: Идентификатор соединения. + type: string + pingRequestTime: + format: date-time + title: Время формирования запроса + type: string + type: object + v1PingDelaySettings: + properties: + pingDelayMs: + format: int32 + title: Задержка пинг сообщений milliseconds 5000-180000, default 120000 + type: integer + type: object + v1PingRequest: + properties: + time: + format: date-time + title: Время формирования запроса + type: string type: object v1PortfolioPosition: description: Позиции портфеля. @@ -8410,6 +19322,10 @@ components: units: units blocked: true instrumentUid: instrumentUid + dailyYield: + nano: 5 + currency: currency + units: units currentNkd: nano: 5 currency: currency @@ -8419,8 +19335,10 @@ components: units: units properties: figi: + description: FIGI-идентификатор инструмента. type: string instrumentType: + description: Тип инструмента. type: string quantity: $ref: '#/components/schemas/v1Quotation' @@ -8439,25 +19357,33 @@ components: quantityLots: $ref: '#/components/schemas/v1Quotation' blocked: + description: Заблокировано на бирже. type: boolean blockedLots: $ref: '#/components/schemas/v1Quotation' positionUid: + description: Уникальный идентификатор позиции. type: string instrumentUid: + description: Уникальный идентификатор инструмента. type: string varMargin: $ref: '#/components/schemas/v1MoneyValue' expectedYieldFifo: $ref: '#/components/schemas/v1Quotation' + dailyYield: + $ref: '#/components/schemas/v1MoneyValue' type: object v1PortfolioRequest: description: Запрос получения текущего портфеля по счёту. properties: accountId: + description: Идентификатор счёта пользователя. type: string currency: $ref: '#/components/schemas/PortfolioRequestCurrencyRequest' + required: + - accountId type: object v1PortfolioResponse: description: Текущий портфель по счёту. @@ -8470,18 +19396,10 @@ components: nano: 5 currency: currency units: units - accountId: accountId - totalAmountCurrencies: - nano: 5 - currency: currency - units: units totalAmountSp: nano: 5 currency: currency units: units - expectedYield: - nano: 6 - units: units positions: - varMargin: nano: 5 @@ -8519,6 +19437,10 @@ components: units: units blocked: true instrumentUid: instrumentUid + dailyYield: + nano: 5 + currency: currency + units: units currentNkd: nano: 5 currency: currency @@ -8562,6 +19484,10 @@ components: units: units blocked: true instrumentUid: instrumentUid + dailyYield: + nano: 5 + currency: currency + units: units currentNkd: nano: 5 currency: currency @@ -8569,11 +19495,23 @@ components: expectedYield: nano: 6 units: units - totalAmountShares: + totalAmountEtf: nano: 5 currency: currency units: units - totalAmountEtf: + accountId: accountId + totalAmountCurrencies: + nano: 5 + currency: currency + units: units + dailyYield: + nano: 5 + currency: currency + units: units + expectedYield: + nano: 6 + units: units + totalAmountShares: nano: 5 currency: currency units: units @@ -8598,6 +19536,10 @@ components: currency: currency units: units instrumentUid: instrumentUid + dailyYield: + nano: 5 + currency: currency + units: units positionUid: positionUid currentPrice: nano: 5 @@ -8624,6 +19566,10 @@ components: currency: currency units: units instrumentUid: instrumentUid + dailyYield: + nano: 5 + currency: currency + units: units positionUid: positionUid currentPrice: nano: 5 @@ -8634,6 +19580,9 @@ components: nano: 6 units: units expireDate: 2000-01-23T04:56:07.000Z + dailyYieldRelative: + nano: 6 + units: units totalAmountOptions: nano: 5 currency: currency @@ -8652,10 +19601,12 @@ components: expectedYield: $ref: '#/components/schemas/v1Quotation' positions: + description: Список позиций портфеля. items: $ref: '#/components/schemas/v1PortfolioPosition' type: array accountId: + description: Идентификатор счёта пользователя. type: string totalAmountOptions: $ref: '#/components/schemas/v1MoneyValue' @@ -8664,25 +19615,35 @@ components: totalAmountPortfolio: $ref: '#/components/schemas/v1MoneyValue' virtualPositions: + description: Массив виртуальных позиций портфеля. items: $ref: '#/components/schemas/v1VirtualPortfolioPosition' type: array + dailyYield: + $ref: '#/components/schemas/v1MoneyValue' + dailyYieldRelative: + $ref: '#/components/schemas/v1Quotation' type: object v1PortfolioStreamRequest: description: Запрос установки stream-соединения. properties: accounts: + description: Массив идентификаторов счётов пользователя. items: type: string type: array + pingSettings: + $ref: '#/components/schemas/v1PingDelaySettings' type: object v1PortfolioStreamResponse: description: Информация по позициям и доходностям портфелей. example: subscriptions: + streamId: streamId accounts: - accountId: accountId - accountId: accountId + trackingId: trackingId portfolio: totalAmountBonds: nano: 5 @@ -8692,18 +19653,10 @@ components: nano: 5 currency: currency units: units - accountId: accountId - totalAmountCurrencies: - nano: 5 - currency: currency - units: units totalAmountSp: nano: 5 currency: currency units: units - expectedYield: - nano: 6 - units: units positions: - varMargin: nano: 5 @@ -8741,6 +19694,10 @@ components: units: units blocked: true instrumentUid: instrumentUid + dailyYield: + nano: 5 + currency: currency + units: units currentNkd: nano: 5 currency: currency @@ -8784,6 +19741,10 @@ components: units: units blocked: true instrumentUid: instrumentUid + dailyYield: + nano: 5 + currency: currency + units: units currentNkd: nano: 5 currency: currency @@ -8791,11 +19752,23 @@ components: expectedYield: nano: 6 units: units - totalAmountShares: + totalAmountEtf: nano: 5 currency: currency units: units - totalAmountEtf: + accountId: accountId + totalAmountCurrencies: + nano: 5 + currency: currency + units: units + dailyYield: + nano: 5 + currency: currency + units: units + expectedYield: + nano: 6 + units: units + totalAmountShares: nano: 5 currency: currency units: units @@ -8820,6 +19793,10 @@ components: currency: currency units: units instrumentUid: instrumentUid + dailyYield: + nano: 5 + currency: currency + units: units positionUid: positionUid currentPrice: nano: 5 @@ -8845,7 +19822,11 @@ components: nano: 5 currency: currency units: units - instrumentUid: instrumentUid + instrumentUid: instrumentUid + dailyYield: + nano: 5 + currency: currency + units: units positionUid: positionUid currentPrice: nano: 5 @@ -8856,11 +19837,16 @@ components: nano: 6 units: units expireDate: 2000-01-23T04:56:07.000Z + dailyYieldRelative: + nano: 6 + units: units totalAmountOptions: nano: 5 currency: currency units: units ping: + streamId: streamId + pingRequestTime: 2000-01-23T04:56:07.000Z time: 2000-01-23T04:56:07.000Z properties: subscriptions: @@ -8873,18 +19859,35 @@ components: v1PortfolioSubscriptionResult: description: Объект результата подписки. example: + streamId: streamId accounts: - accountId: accountId - accountId: accountId + trackingId: trackingId properties: accounts: + description: Массив счетов клиента. items: $ref: '#/components/schemas/v1AccountSubscriptionStatus' type: array + trackingId: + description: >- + Уникальный идентификатор запроса, подробнее: + [tracking_id](https://russianinvestments.github.io/investAPI/grpc#tracking-id). + type: string + streamId: + title: Идентификатор открытого соединения + type: string type: object v1PortfolioSubscriptionStatus: default: PORTFOLIO_SUBSCRIPTION_STATUS_UNSPECIFIED - description: Результат подписки. + description: |- + Результат подписки. + + - PORTFOLIO_SUBSCRIPTION_STATUS_UNSPECIFIED: Тип не определён. + - PORTFOLIO_SUBSCRIPTION_STATUS_SUCCESS: Успешно. + - PORTFOLIO_SUBSCRIPTION_STATUS_ACCOUNT_NOT_FOUND: Счёт не найден или недостаточно прав. + - PORTFOLIO_SUBSCRIPTION_STATUS_INTERNAL_ERROR: Произошла ошибка. enum: - PORTFOLIO_SUBSCRIPTION_STATUS_UNSPECIFIED - PORTFOLIO_SUBSCRIPTION_STATUS_SUCCESS @@ -8950,30 +19953,42 @@ components: exchangeBlocked: true properties: accountId: + description: Идентификатор счёта. type: string money: + description: Массив валютных позиций портфеля. items: $ref: '#/components/schemas/v1PositionsMoney' type: array securities: + description: Список ценно-бумажных позиций портфеля. items: $ref: '#/components/schemas/v1PositionsSecurities' type: array futures: + description: Список фьючерсов портфеля. items: $ref: '#/components/schemas/v1PositionsFutures' type: array options: + description: Список опционов портфеля. items: $ref: '#/components/schemas/v1PositionsOptions' type: array date: + description: Дата и время операции в формате UTC. format: date-time type: string type: object v1PositionsAccountSubscriptionStatus: default: POSITIONS_SUBSCRIPTION_STATUS_UNSPECIFIED - description: Результат подписки. + description: |- + Результат подписки. + + - POSITIONS_SUBSCRIPTION_STATUS_UNSPECIFIED: Тип не определён. + - POSITIONS_SUBSCRIPTION_STATUS_SUCCESS: Успешно. + - POSITIONS_SUBSCRIPTION_STATUS_ACCOUNT_NOT_FOUND: Счёт не найден или недостаточно прав. + - POSITIONS_SUBSCRIPTION_STATUS_INTERNAL_ERROR: Произошла ошибка. enum: - POSITIONS_SUBSCRIPTION_STATUS_UNSPECIFIED - POSITIONS_SUBSCRIPTION_STATUS_SUCCESS @@ -8990,16 +20005,21 @@ components: figi: figi properties: figi: + description: FIGI-идентификатор фьючерса. type: string blocked: + description: Количество бумаг, заблокированных выставленными заявками. format: int64 type: string balance: + description: Текущий незаблокированный баланс. format: int64 type: string positionUid: + description: Уникальный идентификатор позиции. type: string instrumentUid: + description: Уникальный идентификатор инструмента. type: string type: object v1PositionsMoney: @@ -9028,13 +20048,17 @@ components: positionUid: positionUid properties: positionUid: + description: Уникальный идентификатор позиции опциона. type: string instrumentUid: + description: Уникальный идентификатор инструмента. type: string blocked: + description: Количество бумаг, заблокированных выставленными заявками. format: int64 type: string balance: + description: Текущий незаблокированный баланс. format: int64 type: string type: object @@ -9042,12 +20066,16 @@ components: description: Запрос позиций портфеля по счёту. properties: accountId: + description: Идентификатор счёта пользователя. type: string + required: + - accountId type: object v1PositionsResponse: description: Список позиций по счёту. example: limitsLoadingInProgress: true + accountId: accountId money: - nano: 5 currency: currency @@ -9099,27 +20127,36 @@ components: exchangeBlocked: true properties: money: + description: Массив валютных позиций портфеля. items: $ref: '#/components/schemas/v1MoneyValue' type: array blocked: + description: Массив заблокированных валютных позиций портфеля. items: $ref: '#/components/schemas/v1MoneyValue' type: array securities: + description: Список ценно-бумажных позиций портфеля. items: $ref: '#/components/schemas/v1PositionsSecurities' type: array limitsLoadingInProgress: + description: Признак идущей выгрузки лимитов в данный момент. type: boolean futures: + description: Список фьючерсов портфеля. items: $ref: '#/components/schemas/v1PositionsFutures' type: array options: + description: Список опционов портфеля. items: $ref: '#/components/schemas/v1PositionsOptions' type: array + accountId: + description: Идентификатор счёта пользователя. + type: string type: object v1PositionsSecurities: description: Баланс позиции ценной бумаги. @@ -9133,38 +20170,107 @@ components: exchangeBlocked: true properties: figi: + description: FIGI-идентификатор бумаги. type: string blocked: + description: Количество бумаг, заблокированных выставленными заявками. format: int64 type: string balance: + description: Текущий незаблокированный баланс. format: int64 type: string positionUid: + description: Уникальный идентификатор позиции. type: string instrumentUid: + description: Уникальный идентификатор инструмента. type: string exchangeBlocked: + description: Заблокировано на бирже. type: boolean instrumentType: + description: Тип инструмента. type: string type: object v1PositionsStreamRequest: description: Запрос установки stream-соединения позиций. properties: accounts: + description: Массив идентификаторов счётов пользователя. items: type: string type: array + withInitialPositions: + description: Получение состояния позиций на момент подключения. + type: boolean + pingSettings: + $ref: '#/components/schemas/v1PingDelaySettings' type: object v1PositionsStreamResponse: description: Информация по изменению позиций портфеля. example: subscriptions: + streamId: streamId accounts: - accountId: accountId - accountId: accountId + trackingId: trackingId + initialPositions: + limitsLoadingInProgress: true + accountId: accountId + money: + - nano: 5 + currency: currency + units: units + - nano: 5 + currency: currency + units: units + blocked: + - nano: 5 + currency: currency + units: units + - nano: 5 + currency: currency + units: units + options: + - blocked: blocked + balance: balance + instrumentUid: instrumentUid + positionUid: positionUid + - blocked: blocked + balance: balance + instrumentUid: instrumentUid + positionUid: positionUid + futures: + - blocked: blocked + balance: balance + instrumentUid: instrumentUid + positionUid: positionUid + figi: figi + - blocked: blocked + balance: balance + instrumentUid: instrumentUid + positionUid: positionUid + figi: figi + securities: + - instrumentType: instrumentType + blocked: blocked + balance: balance + instrumentUid: instrumentUid + positionUid: positionUid + figi: figi + exchangeBlocked: true + - instrumentType: instrumentType + blocked: blocked + balance: balance + instrumentUid: instrumentUid + positionUid: positionUid + figi: figi + exchangeBlocked: true ping: + streamId: streamId + pingRequestTime: 2000-01-23T04:56:07.000Z time: 2000-01-23T04:56:07.000Z position: date: 2000-01-23T04:56:07.000Z @@ -9228,35 +20334,106 @@ components: $ref: '#/components/schemas/v1PositionData' ping: $ref: '#/components/schemas/v1Ping' + initialPositions: + $ref: '#/components/schemas/v1PositionsResponse' type: object v1PositionsSubscriptionResult: description: Объект результата подписки. example: + streamId: streamId accounts: - accountId: accountId - accountId: accountId + trackingId: trackingId properties: accounts: + description: Массив счетов клиента. items: $ref: '#/components/schemas/v1PositionsSubscriptionStatus' type: array + trackingId: + description: >- + Уникальный идентификатор запроса, подробнее: + [tracking_id](https://russianinvestments.github.io/investAPI/grpc#tracking-id). + type: string + streamId: + title: Идентификатор открытого соединения + type: string type: object v1PositionsSubscriptionStatus: - description: Счет клиента. + description: Счёт клиента. example: accountId: accountId properties: accountId: + description: Идентификатор счёта. type: string subscriptionStatus: $ref: '#/components/schemas/v1PositionsAccountSubscriptionStatus' type: object + v1PostOrderAsyncRequest: + description: Запрос выставления асинхронного торгового поручения. + properties: + instrumentId: + description: >- + Идентификатор инструмента, принимает значения Figi или + Instrument_uid. + type: string + quantity: + description: Количество лотов. + format: int64 + type: string + price: + $ref: '#/components/schemas/v1Quotation' + direction: + $ref: '#/components/schemas/v1OrderDirection' + accountId: + description: Номер счёта. + type: string + orderType: + $ref: '#/components/schemas/v1OrderType' + orderId: + description: >- + Идентификатор запроса выставления поручения для целей + идемпотентности в формате UID. Максимальная длина 36 символов. + type: string + timeInForce: + $ref: '#/components/schemas/v1TimeInForceType' + priceType: + $ref: '#/components/schemas/v1PriceType' + required: + - accountId + - direction + - instrumentId + - orderId + - orderType + - quantity + type: object + v1PostOrderAsyncResponse: + description: Результат выставления асинхронного торгового поручения. + example: + tradeIntentId: tradeIntentId + orderRequestId: orderRequestId + properties: + orderRequestId: + description: >- + Идентификатор ключа идемпотентности, переданный клиентом, в формате + UID. Максимальная длина 36 символов. + type: string + executionReportStatus: + $ref: '#/components/schemas/v1OrderExecutionReportStatus' + tradeIntentId: + description: Идентификатор торгового поручения. + type: string + required: + - executionReportStatus + - orderRequestId + type: object v1PostOrderRequest: description: Запрос выставления торгового поручения. properties: - figi: - type: string quantity: + description: Количество лотов. format: int64 type: string price: @@ -9264,13 +20441,30 @@ components: direction: $ref: '#/components/schemas/v1OrderDirection' accountId: + description: Номер счёта. type: string orderType: $ref: '#/components/schemas/v1OrderType' orderId: + description: >- + Идентификатор запроса выставления поручения для целей + идемпотентности в формате UID. Максимальная длина 36 символов. type: string instrumentId: + description: >- + Идентификатор инструмента, принимает значения Figi или + Instrument_uid. type: string + timeInForce: + $ref: '#/components/schemas/v1TimeInForceType' + priceType: + $ref: '#/components/schemas/v1PriceType' + required: + - accountId + - direction + - orderId + - orderType + - quantity type: object v1PostOrderResponse: description: Информация о выставлении поручения. @@ -9296,6 +20490,7 @@ components: nano: 6 units: units instrumentUid: instrumentUid + orderRequestId: orderRequestId executedOrderPrice: nano: 5 currency: currency @@ -9312,15 +20507,21 @@ components: nano: 5 currency: currency units: units + responseMetadata: + serverTime: 2000-01-23T04:56:07.000Z + trackingId: trackingId properties: orderId: + description: Биржевой идентификатор заявки. type: string executionReportStatus: $ref: '#/components/schemas/v1OrderExecutionReportStatus' lotsRequested: + description: Запрошено лотов. format: int64 type: string lotsExecuted: + description: Исполнено лотов. format: int64 type: string initialOrderPrice: @@ -9336,6 +20537,7 @@ components: aciValue: $ref: '#/components/schemas/v1MoneyValue' figi: + description: Figi-идентификатор инструмента. type: string direction: $ref: '#/components/schemas/v1OrderDirection' @@ -9344,18 +20546,26 @@ components: orderType: $ref: '#/components/schemas/v1OrderType' message: + description: Дополнительные данные об исполнении заявки. type: string initialOrderPricePt: $ref: '#/components/schemas/v1Quotation' instrumentUid: + description: UID идентификатор инструмента. + type: string + orderRequestId: + description: >- + Идентификатор ключа идемпотентности, переданный клиентом, в формате + UID. Максимальная длина 36 символов. type: string + responseMetadata: + $ref: '#/components/schemas/v1ResponseMetadata' type: object v1PostStopOrderRequest: description: Запрос выставления стоп-заявки. properties: - figi: - type: string quantity: + description: Количество лотов. format: int64 type: string price: @@ -9365,77 +20575,197 @@ components: direction: $ref: '#/components/schemas/v1StopOrderDirection' accountId: + description: Номер счёта. type: string expirationType: $ref: '#/components/schemas/v1StopOrderExpirationType' stopOrderType: $ref: '#/components/schemas/v1StopOrderType' expireDate: + description: >- + Дата и время окончания действия стоп-заявки по UTC. Для + `ExpirationType = GoodTillDate` заполнение обязательно, для + `GoodTillCancel` игнорируется. format: date-time type: string instrumentId: - type: string + description: >- + Идентификатор инструмента. Принимает значение `figi` или + `instrument_uid`. + type: string + exchangeOrderType: + $ref: '#/components/schemas/v1ExchangeOrderType' + takeProfitType: + $ref: '#/components/schemas/v1TakeProfitType' + trailingData: + $ref: '#/components/schemas/v1PostStopOrderRequestTrailingData' + priceType: + $ref: '#/components/schemas/v1PriceType' + orderId: + description: >- + Идентификатор запроса выставления поручения для целей + идемпотентности в формате `UID`. Максимальная длина — 36 символов. + type: string + required: + - accountId + - direction + - expirationType + - instrumentId + - orderId + - quantity + - stopOrderType + type: object + v1PostStopOrderRequestTrailingData: + properties: + indent: + $ref: '#/components/schemas/v1Quotation' + indentType: + $ref: '#/components/schemas/v1TrailingValueType' + spread: + $ref: '#/components/schemas/v1Quotation' + spreadType: + $ref: '#/components/schemas/v1TrailingValueType' type: object v1PostStopOrderResponse: description: Результат выставления стоп-заявки. example: + orderRequestId: orderRequestId + responseMetadata: + serverTime: 2000-01-23T04:56:07.000Z + trackingId: trackingId stopOrderId: stopOrderId properties: stopOrderId: + description: Уникальный идентификатор стоп-заявки. + type: string + orderRequestId: + description: >- + Идентификатор ключа идемпотентности, переданный клиентом, в формате + `UID`. Максимальная длина 36 — символов. type: string + responseMetadata: + $ref: '#/components/schemas/v1ResponseMetadata' type: object v1PriceType: default: PRICE_TYPE_UNSPECIFIED - description: Тип цены. + description: |- + Тип цены. + + - PRICE_TYPE_UNSPECIFIED: Значение не определено. + - PRICE_TYPE_POINT: Цена в пунктах (только для фьючерсов и облигаций). + - PRICE_TYPE_CURRENCY: Цена в валюте расчётов по инструменту. enum: - PRICE_TYPE_UNSPECIFIED - PRICE_TYPE_POINT - PRICE_TYPE_CURRENCY type: string v1Quotation: + description: Котировка — денежная сумма без указания валюты. example: nano: 6 units: units properties: units: + description: Целая часть суммы, может быть отрицательным числом. format: int64 - title: целая часть суммы, может быть отрицательным числом type: string nano: + description: Дробная часть суммы, может быть отрицательным числом. format: int32 - title: дробная часть суммы, может быть отрицательным числом type: integer - title: Котировка - денежная сумма без указания валюты type: object v1RealExchange: default: REAL_EXCHANGE_UNSPECIFIED - description: Реальная площадка исполнения расчётов. + description: |- + Реальная площадка исполнения расчётов. + + - REAL_EXCHANGE_UNSPECIFIED: Тип не определён. + - REAL_EXCHANGE_MOEX: Московская биржа. + - REAL_EXCHANGE_RTS: Санкт-Петербургская биржа. + - REAL_EXCHANGE_OTC: Внебиржевой инструмент. + - REAL_EXCHANGE_DEALER: Инструмент, торгуемый на площадке брокера. enum: - REAL_EXCHANGE_UNSPECIFIED - REAL_EXCHANGE_MOEX - REAL_EXCHANGE_RTS - REAL_EXCHANGE_OTC + - REAL_EXCHANGE_DEALER + type: string + v1Recommendation: + default: RECOMMENDATION_UNSPECIFIED + description: |2- + - RECOMMENDATION_UNSPECIFIED: Не определено. + - RECOMMENDATION_BUY: Покупать. + - RECOMMENDATION_HOLD: Держать. + - RECOMMENDATION_SELL: Продавать. + enum: + - RECOMMENDATION_UNSPECIFIED + - RECOMMENDATION_BUY + - RECOMMENDATION_HOLD + - RECOMMENDATION_SELL type: string v1ReplaceOrderRequest: description: Запрос изменения выставленной заявки. properties: accountId: + description: Номер счета. type: string orderId: + description: Идентификатор заявки на бирже. type: string idempotencyKey: + description: >- + Новый идентификатор запроса выставления поручения для целей + идемпотентности. Максимальная длина 36 символов. Перезатирает старый + ключ. type: string quantity: + description: Количество лотов. format: int64 type: string price: $ref: '#/components/schemas/v1Quotation' priceType: $ref: '#/components/schemas/v1PriceType' + required: + - accountId + - idempotencyKey + - orderId + - quantity + type: object + v1ResponseMetadata: + example: + serverTime: 2000-01-23T04:56:07.000Z + trackingId: trackingId + properties: + trackingId: + description: Идентификатор трекинга. + type: string + serverTime: + description: Серверное время. + format: date-time + type: string type: object + v1ResultSubscriptionStatus: + default: RESULT_SUBSCRIPTION_STATUS_UNSPECIFIED + enum: + - RESULT_SUBSCRIPTION_STATUS_UNSPECIFIED + - RESULT_SUBSCRIPTION_STATUS_OK + - RESULT_SUBSCRIPTION_STATUS_ERROR + title: |- + - RESULT_SUBSCRIPTION_STATUS_UNSPECIFIED: Статус подписки не определен. + - RESULT_SUBSCRIPTION_STATUS_OK: Подписка успешно установлена. + - RESULT_SUBSCRIPTION_STATUS_ERROR: Ошибка подписки + type: string v1RiskLevel: default: RISK_LEVEL_UNSPECIFIED - description: Уровень риска облигации. + description: |- + Уровень риска облигации. + + - RISK_LEVEL_UNSPECIFIED: Не указан. + - RISK_LEVEL_LOW: Низкий уровень риска. + - RISK_LEVEL_MODERATE: Средний уровень риска. + - RISK_LEVEL_HIGH: Высокий уровень риска. enum: - RISK_LEVEL_UNSPECIFIED - RISK_LEVEL_LOW @@ -9446,9 +20776,13 @@ components: description: Запрос пополнения счёта в песочнице. properties: accountId: + title: Номер счёта type: string amount: $ref: '#/components/schemas/v1MoneyValue' + required: + - accountId + - amount type: object v1SandboxPayInResponse: description: Результат пополнения счёта, текущий баланс. @@ -9463,6 +20797,24 @@ components: type: object v1SecurityTradingStatus: default: SECURITY_TRADING_STATUS_UNSPECIFIED + description: |- + - SECURITY_TRADING_STATUS_UNSPECIFIED: Торговый статус не определён. + - SECURITY_TRADING_STATUS_NOT_AVAILABLE_FOR_TRADING: Недоступен для торгов. + - SECURITY_TRADING_STATUS_OPENING_PERIOD: Период открытия торгов. + - SECURITY_TRADING_STATUS_CLOSING_PERIOD: Период закрытия торгов. + - SECURITY_TRADING_STATUS_BREAK_IN_TRADING: Перерыв в торговле. + - SECURITY_TRADING_STATUS_NORMAL_TRADING: Нормальная торговля. + - SECURITY_TRADING_STATUS_CLOSING_AUCTION: Аукцион закрытия. + - SECURITY_TRADING_STATUS_DARK_POOL_AUCTION: Аукцион крупных пакетов. + - SECURITY_TRADING_STATUS_DISCRETE_AUCTION: Дискретный аукцион. + - SECURITY_TRADING_STATUS_OPENING_AUCTION_PERIOD: Аукцион открытия. + - SECURITY_TRADING_STATUS_TRADING_AT_CLOSING_AUCTION_PRICE: Период торгов по цене аукциона закрытия. + - SECURITY_TRADING_STATUS_SESSION_ASSIGNED: Сессия назначена. + - SECURITY_TRADING_STATUS_SESSION_CLOSE: Сессия закрыта. + - SECURITY_TRADING_STATUS_SESSION_OPEN: Сессия открыта. + - SECURITY_TRADING_STATUS_DEALER_NORMAL_TRADING: Доступна торговля в режиме внутренней ликвидности брокера. + - SECURITY_TRADING_STATUS_DEALER_BREAK_IN_TRADING: Перерыв торговли в режиме внутренней ликвидности брокера. + - SECURITY_TRADING_STATUS_DEALER_NOT_AVAILABLE_FOR_TRADING: Недоступна торговля в режиме внутренней ликвидности брокера. enum: - SECURITY_TRADING_STATUS_UNSPECIFIED - SECURITY_TRADING_STATUS_NOT_AVAILABLE_FOR_TRADING @@ -9486,6 +20838,7 @@ components: v1Share: description: Объект передачи информации об акции. example: + assetUid: assetUid figi: figi dshortMin: nano: 6 @@ -9497,6 +20850,9 @@ components: dlong: nano: 6 units: units + dlongClient: + nano: 6 + units: units nominal: nano: 5 currency: currency @@ -9505,6 +20861,10 @@ components: currency: currency first1dayCandleDate: 2000-01-23T04:56:07.000Z sector: sector + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor buyAvailableFlag: true weekendFlag: true classCode: classCode @@ -9527,6 +20887,9 @@ components: nano: 6 units: units otcFlag: true + dshortClient: + nano: 6 + units: units klong: nano: 6 units: units @@ -9542,17 +20905,26 @@ components: ipoDate: 2000-01-23T04:56:07.000Z properties: figi: + description: FIGI-идентификатор инструмента. type: string ticker: + description: Тикер инструмента. type: string classCode: + description: Класс-код (секция торгов). type: string isin: + description: ISIN-идентификатор инструмента. type: string lot: format: int32 + title: >- + Лотность инструмента. Возможно совершение операций только на + количества ценной бумаги, кратные параметру `lot`. + [Подробнее](https://russianinvestments.github.io/investAPI/glossary#lot) type: integer currency: + description: Валюта расчётов. type: string klong: $ref: '#/components/schemas/v1Quotation' @@ -9567,24 +20939,37 @@ components: dshortMin: $ref: '#/components/schemas/v1Quotation' shortEnabledFlag: + description: Признак доступности для операций в шорт. type: boolean name: + description: Название инструмента. type: string exchange: + description: Tорговая площадка (секция биржи). type: string ipoDate: + description: Дата IPO акции по UTC. format: date-time type: string issueSize: + description: Размер выпуска. format: int64 type: string countryOfRisk: + description: >- + Код страны риска — то есть страны, в которой компания ведёт основной + бизнес. type: string countryOfRiskName: + description: >- + Наименование страны риска — то есть страны, в которой компания ведёт + основной бизнес. type: string sector: + description: Сектор экономики. type: string issueSizePlan: + description: Плановый размер выпуска. format: int64 type: string nominal: @@ -9592,46 +20977,78 @@ components: tradingStatus: $ref: '#/components/schemas/v1SecurityTradingStatus' otcFlag: + description: >- + Флаг, используемый ранее для определения внебиржевых инструментов. + На данный момент не используется для торгуемых через API + инструментов. Может использоваться как фильтр для операций, + совершавшихся некоторое время назад на ОТС площадке. type: boolean buyAvailableFlag: + description: Признак доступности для покупки. type: boolean sellAvailableFlag: + description: Признак доступности для продажи. type: boolean divYieldFlag: + description: Признак наличия дивидендной доходности. type: boolean shareType: $ref: '#/components/schemas/v1ShareType' minPriceIncrement: $ref: '#/components/schemas/v1Quotation' apiTradeAvailableFlag: + description: Возможность торговать инструментом через API. type: boolean uid: + description: Уникальный идентификатор инструмента. type: string realExchange: $ref: '#/components/schemas/v1RealExchange' positionUid: + description: Уникальный идентификатор позиции инструмента. type: string + assetUid: + description: Уникальный идентификатор актива. + type: string + instrumentExchange: + $ref: '#/components/schemas/v1InstrumentExchangeType' forIisFlag: + description: Признак доступности для ИИС. type: boolean forQualInvestorFlag: + description: >- + Флаг, отображающий доступность торговли инструментом только для + квалифицированных инвесторов. type: boolean weekendFlag: + description: Флаг, отображающий доступность торговли инструментом по выходным. type: boolean blockedTcaFlag: + description: Флаг заблокированного ТКС. type: boolean liquidityFlag: + description: Флаг достаточной ликвидности. type: boolean first1minCandleDate: + description: Дата первой минутной свечи. format: date-time type: string first1dayCandleDate: + description: Дата первой дневной свечи. format: date-time type: string + brand: + $ref: '#/components/schemas/v1BrandData' + dlongClient: + $ref: '#/components/schemas/v1Quotation' + dshortClient: + $ref: '#/components/schemas/v1Quotation' type: object v1ShareResponse: description: Данные по акции. example: instrument: + assetUid: assetUid figi: figi dshortMin: nano: 6 @@ -9643,6 +21060,9 @@ components: dlong: nano: 6 units: units + dlongClient: + nano: 6 + units: units nominal: nano: 5 currency: currency @@ -9651,6 +21071,10 @@ components: currency: currency first1dayCandleDate: 2000-01-23T04:56:07.000Z sector: sector + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor buyAvailableFlag: true weekendFlag: true classCode: classCode @@ -9673,6 +21097,9 @@ components: nano: 6 units: units otcFlag: true + dshortClient: + nano: 6 + units: units klong: nano: 6 units: units @@ -9692,7 +21119,18 @@ components: type: object v1ShareType: default: SHARE_TYPE_UNSPECIFIED - description: Тип акций. + description: |- + Тип акций. + + - SHARE_TYPE_UNSPECIFIED: Значение не определено. + - SHARE_TYPE_COMMON: Обыкновенная. + - SHARE_TYPE_PREFERRED: Привилегированная. + - SHARE_TYPE_ADR: Американские депозитарные расписки. + - SHARE_TYPE_GDR: Глобальные депозитарные расписки. + - SHARE_TYPE_MLP: Товарищество с ограниченной ответственностью. + - SHARE_TYPE_NY_REG_SHRS: Акции из реестра Нью-Йорка. + - SHARE_TYPE_CLOSED_END_FUND: Закрытый инвестиционный фонд. + - SHARE_TYPE_REIT: Траст недвижимости. enum: - SHARE_TYPE_UNSPECIFIED - SHARE_TYPE_COMMON @@ -9708,7 +21146,8 @@ components: description: Данные по акциям. example: instruments: - - figi: figi + - assetUid: assetUid + figi: figi dshortMin: nano: 6 units: units @@ -9719,6 +21158,9 @@ components: dlong: nano: 6 units: units + dlongClient: + nano: 6 + units: units nominal: nano: 5 currency: currency @@ -9727,6 +21169,10 @@ components: currency: currency first1dayCandleDate: 2000-01-23T04:56:07.000Z sector: sector + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor buyAvailableFlag: true weekendFlag: true classCode: classCode @@ -9749,6 +21195,9 @@ components: nano: 6 units: units otcFlag: true + dshortClient: + nano: 6 + units: units klong: nano: 6 units: units @@ -9762,7 +21211,8 @@ components: divYieldFlag: true isin: isin ipoDate: 2000-01-23T04:56:07.000Z - - figi: figi + - assetUid: assetUid + figi: figi dshortMin: nano: 6 units: units @@ -9773,6 +21223,9 @@ components: dlong: nano: 6 units: units + dlongClient: + nano: 6 + units: units nominal: nano: 5 currency: currency @@ -9781,6 +21234,10 @@ components: currency: currency first1dayCandleDate: 2000-01-23T04:56:07.000Z sector: sector + brand: + logoName: logoName + logoBaseColor: logoBaseColor + textColor: textColor buyAvailableFlag: true weekendFlag: true classCode: classCode @@ -9803,6 +21260,9 @@ components: nano: 6 units: units otcFlag: true + dshortClient: + nano: 6 + units: units klong: nano: 6 units: units @@ -9818,49 +21278,139 @@ components: ipoDate: 2000-01-23T04:56:07.000Z properties: instruments: + description: Массив акций. items: $ref: '#/components/schemas/v1Share' type: array type: object v1Signal: + description: Сигнал. example: - price: 0.8008282 + strategyName: strategyName + stoploss: + nano: 6 + units: units + initialPrice: + nano: 6 + units: units + probability: 0 + endDt: 2000-01-23T04:56:07.000Z + createDt: 2000-01-23T04:56:07.000Z + closeDt: 2000-01-23T04:56:07.000Z + targetPrice: + nano: 6 + units: units signalId: signalId instrumentUid: instrumentUid - lifetime: lifetime + name: name strategyId: strategyId - createDt: 2000-01-23T04:56:07.000Z - profit: 6.0274563 - direction: direction + closePrice: + nano: 6 + units: units info: info properties: signalId: + description: Идентификатор сигнала. type: string strategyId: + description: Идентификатор стратегии. + type: string + strategyName: + description: Название стратегии. type: string instrumentUid: + description: Идентификатор бумаги. type: string createDt: + description: Дата и время создания сигнала в часовом поясе UTC. format: date-time type: string - lifetime: - format: int64 - type: string direction: - type: string - price: - format: float - type: number - profit: - format: float - type: number + $ref: '#/components/schemas/v1SignalDirection' + initialPrice: + $ref: '#/components/schemas/v1Quotation' info: + description: Дополнительная информация о сигнале. + type: string + name: + description: Название сигнала. + type: string + targetPrice: + $ref: '#/components/schemas/v1Quotation' + endDt: + description: Дата и время дедлайна сигнала в часовом поясе UTC. + format: date-time + type: string + probability: + description: Вероятность сигнала. + format: int32 + type: integer + stoploss: + $ref: '#/components/schemas/v1Quotation' + closePrice: + $ref: '#/components/schemas/v1Quotation' + closeDt: + description: Дата и время закрытия сигнала в часовом поясе UTC. + format: date-time type: string + required: + - createDt + - direction + - endDt + - initialPrice + - instrumentUid + - name + - signalId + - strategyId + - strategyName + - targetPrice type: object + v1SignalDirection: + default: SIGNAL_DIRECTION_UNSPECIFIED + description: |- + Направление сигнала. + + - SIGNAL_DIRECTION_UNSPECIFIED: Не определен. + - SIGNAL_DIRECTION_BUY: Покупка. + - SIGNAL_DIRECTION_SELL: Продажа. + enum: + - SIGNAL_DIRECTION_UNSPECIFIED + - SIGNAL_DIRECTION_BUY + - SIGNAL_DIRECTION_SELL + type: string + v1SignalState: + default: SIGNAL_STATE_UNSPECIFIED + description: |- + Статус сигнала. + + - SIGNAL_STATE_UNSPECIFIED: Не определен. + - SIGNAL_STATE_ACTIVE: Активный сигнал. + - SIGNAL_STATE_CLOSED: Закрытый сигнал. + - SIGNAL_STATE_ALL: Все состояния. + enum: + - SIGNAL_STATE_UNSPECIFIED + - SIGNAL_STATE_ACTIVE + - SIGNAL_STATE_CLOSED + - SIGNAL_STATE_ALL + type: string v1StopOrder: description: Информация о стоп-заявке. example: activationDateTime: 2000-01-23T04:56:07.000Z + figi: figi + trailingData: + indent: + nano: 6 + units: units + price: + nano: 6 + units: units + extr: + nano: 6 + units: units + spread: + nano: 6 + units: units stopPrice: nano: 5 currency: currency @@ -9872,31 +21422,38 @@ components: currency: currency units: units instrumentUid: instrumentUid - figi: figi currency: currency stopOrderId: stopOrderId createDate: 2000-01-23T04:56:07.000Z + exchangeOrderId: exchangeOrderId properties: stopOrderId: + description: Уникальный идентификатор стоп-заявки. type: string lotsRequested: + description: Запрошено лотов. format: int64 type: string figi: + description: FIGI-идентификатор инструмента. type: string direction: $ref: '#/components/schemas/v1StopOrderDirection' currency: + description: Валюта стоп-заявки. type: string orderType: $ref: '#/components/schemas/v1StopOrderType' createDate: + description: Дата и время выставления заявки по UTC. format: date-time type: string activationDateTime: + description: Дата и время конвертации стоп-заявки в биржевую по UTC. format: date-time type: string expirationTime: + description: Дата и время снятия заявки по UTC. format: date-time type: string price: @@ -9904,11 +21461,28 @@ components: stopPrice: $ref: '#/components/schemas/v1MoneyValue' instrumentUid: + description: '`instrument_uid`-идентификатор инструмента.' + type: string + takeProfitType: + $ref: '#/components/schemas/v1TakeProfitType' + trailingData: + $ref: '#/components/schemas/v1StopOrderTrailingData' + status: + $ref: '#/components/schemas/v1StopOrderStatusOption' + exchangeOrderType: + $ref: '#/components/schemas/v1ExchangeOrderType' + exchangeOrderId: + description: Идентификатор биржевой заявки. type: string type: object v1StopOrderDirection: default: STOP_ORDER_DIRECTION_UNSPECIFIED - description: Направление сделки стоп-заявки. + description: |- + Направление сделки стоп-заявки. + + - STOP_ORDER_DIRECTION_UNSPECIFIED: Значение не указано. + - STOP_ORDER_DIRECTION_BUY: Покупка. + - STOP_ORDER_DIRECTION_SELL: Продажа. enum: - STOP_ORDER_DIRECTION_UNSPECIFIED - STOP_ORDER_DIRECTION_BUY @@ -9916,15 +21490,75 @@ components: type: string v1StopOrderExpirationType: default: STOP_ORDER_EXPIRATION_TYPE_UNSPECIFIED - description: Тип экспирации стоп-заявке. + description: |- + Тип экспирации стоп-заявке. + + - STOP_ORDER_EXPIRATION_TYPE_UNSPECIFIED: Значение не указано. + - STOP_ORDER_EXPIRATION_TYPE_GOOD_TILL_CANCEL: Действительно до отмены. + - STOP_ORDER_EXPIRATION_TYPE_GOOD_TILL_DATE: Действительно до даты снятия. enum: - STOP_ORDER_EXPIRATION_TYPE_UNSPECIFIED - STOP_ORDER_EXPIRATION_TYPE_GOOD_TILL_CANCEL - STOP_ORDER_EXPIRATION_TYPE_GOOD_TILL_DATE type: string + v1StopOrderStatusOption: + default: STOP_ORDER_STATUS_UNSPECIFIED + description: |- + Статус стоп-заяки. + + - STOP_ORDER_STATUS_UNSPECIFIED: Значение не указано. + - STOP_ORDER_STATUS_ALL: Все заявки. + - STOP_ORDER_STATUS_ACTIVE: Активные заявки. + - STOP_ORDER_STATUS_EXECUTED: Исполненные заявки. + - STOP_ORDER_STATUS_CANCELED: Отменённые заявки. + - STOP_ORDER_STATUS_EXPIRED: Истёкшие заявки. + enum: + - STOP_ORDER_STATUS_UNSPECIFIED + - STOP_ORDER_STATUS_ALL + - STOP_ORDER_STATUS_ACTIVE + - STOP_ORDER_STATUS_EXECUTED + - STOP_ORDER_STATUS_CANCELED + - STOP_ORDER_STATUS_EXPIRED + type: string + v1StopOrderTrailingData: + example: + indent: + nano: 6 + units: units + price: + nano: 6 + units: units + extr: + nano: 6 + units: units + spread: + nano: 6 + units: units + properties: + indent: + $ref: '#/components/schemas/v1Quotation' + indentType: + $ref: '#/components/schemas/v1TrailingValueType' + spread: + $ref: '#/components/schemas/v1Quotation' + spreadType: + $ref: '#/components/schemas/v1TrailingValueType' + status: + $ref: '#/components/schemas/v1TrailingStopStatus' + price: + $ref: '#/components/schemas/v1Quotation' + extr: + $ref: '#/components/schemas/v1Quotation' + type: object v1StopOrderType: default: STOP_ORDER_TYPE_UNSPECIFIED - description: Тип стоп-заявки. + description: |- + Тип стоп-заявки. + + - STOP_ORDER_TYPE_UNSPECIFIED: Значение не указано. + - STOP_ORDER_TYPE_TAKE_PROFIT: `Take-profit`-заявка. + - STOP_ORDER_TYPE_STOP_LOSS: `Stop-loss`-заявка. + - STOP_ORDER_TYPE_STOP_LIMIT: `Stop-limit`-заявка. enum: - STOP_ORDER_TYPE_UNSPECIFIED - STOP_ORDER_TYPE_TAKE_PROFIT @@ -9935,18 +21569,84 @@ components: example: strategyName: strategyName strategyDescription: strategyDescription + averageSignalYield: + nano: 6 + units: units strategyUrl: strategyUrl + yieldYear: + nano: 6 + units: units + yield: + nano: 6 + units: units strategyId: strategyId + totalSignals: 6 + timeInPosition: timeInPosition + averageSignalYieldYear: + nano: 6 + units: units + activeSignals: 0 properties: strategyId: + description: Идентификатор стратегии. type: string strategyName: + description: Название стратегии. type: string strategyDescription: + description: Описание стратегии. type: string strategyUrl: + description: Ссылка на страницу с описанием стратегии. type: string + strategyType: + $ref: '#/components/schemas/v1StrategyType' + activeSignals: + description: Количество активных сигналов. + format: int32 + type: integer + totalSignals: + description: Общее количество сигналов. + format: int32 + type: integer + timeInPosition: + description: Среднее время нахождения сигнала в позиции. + format: int64 + type: string + averageSignalYield: + $ref: '#/components/schemas/v1Quotation' + averageSignalYieldYear: + $ref: '#/components/schemas/v1Quotation' + yield: + $ref: '#/components/schemas/v1Quotation' + yieldYear: + $ref: '#/components/schemas/v1Quotation' + required: + - activeSignals + - averageSignalYield + - averageSignalYieldYear + - strategyId + - strategyName + - strategyType + - timeInPosition + - totalSignals + - yield + - yieldYear + title: Стратегия type: object + v1StrategyType: + default: STRATEGY_TYPE_UNSPECIFIED + description: |- + Тип стратегии. + + - STRATEGY_TYPE_UNSPECIFIED: Не определен. + - STRATEGY_TYPE_TECHNICAL: Техническая стратегия. + - STRATEGY_TYPE_FUNDAMENTAL: Фундаментальная стратегия. + enum: + - STRATEGY_TYPE_UNSPECIFIED + - STRATEGY_TYPE_TECHNICAL + - STRATEGY_TYPE_FUNDAMENTAL + type: string v1StreamLimit: description: Лимит stream-соединений. example: @@ -9957,19 +21657,27 @@ components: open: 1 properties: limit: + description: Максимальное количество stream-соединений. format: int32 type: integer streams: + description: Названия stream-методов. items: type: string type: array open: + description: Текущее количество открытых stream-соединений. format: int32 type: integer type: object v1StructuredProductType: default: SP_TYPE_UNSPECIFIED - description: Тип структурной ноты. + description: |- + Тип структурной ноты. + + - SP_TYPE_UNSPECIFIED: Тип не определён. + - SP_TYPE_DELIVERABLE: Поставочный. + - SP_TYPE_NON_DELIVERABLE: Беспоставочный. enum: - SP_TYPE_UNSPECIFIED - SP_TYPE_DELIVERABLE @@ -9981,25 +21689,39 @@ components: subscriptionAction: $ref: '#/components/schemas/v1SubscriptionAction' instruments: + description: Массив инструментов для подписки на свечи. items: $ref: '#/components/schemas/v1CandleInstrument' type: array waitingClose: + description: Флаг ожидания закрытия временного интервала для отправки свечи. type: boolean + candleSourceType: + $ref: '#/components/schemas/v1GetCandlesRequestCandleSource' type: object v1SubscribeCandlesResponse: description: Результат изменения статус подписки на свечи. example: candlesSubscriptions: - - instrumentUid: instrumentUid + - streamId: streamId + instrumentUid: instrumentUid + waitingClose: true figi: figi - - instrumentUid: instrumentUid + subscriptionId: subscriptionId + - streamId: streamId + instrumentUid: instrumentUid + waitingClose: true figi: figi + subscriptionId: subscriptionId trackingId: trackingId properties: trackingId: + description: >- + Уникальный идентификатор запроса. + [Подробнее](https://russianinvestments.github.io/investAPI/grpc#tracking-id). type: string candlesSubscriptions: + description: Массив статусов подписки на свечи. items: $ref: '#/components/schemas/v1CandleSubscription' type: array @@ -10010,6 +21732,7 @@ components: subscriptionAction: $ref: '#/components/schemas/v1SubscriptionAction' instruments: + description: Массив инструментов для подписки на торговый статус. items: $ref: '#/components/schemas/v1InfoInstrument' type: array @@ -10018,15 +21741,23 @@ components: description: Результат изменения статуса подписки на торговый статус. example: infoSubscriptions: - - instrumentUid: instrumentUid + - streamId: streamId + instrumentUid: instrumentUid figi: figi - - instrumentUid: instrumentUid + subscriptionId: subscriptionId + - streamId: streamId + instrumentUid: instrumentUid figi: figi + subscriptionId: subscriptionId trackingId: trackingId properties: trackingId: + description: >- + Уникальный идентификатор запроса. + [Подробнее](https://russianinvestments.github.io/investAPI/grpc#tracking-id). type: string infoSubscriptions: + description: Массив статусов подписки на торговый статус. items: $ref: '#/components/schemas/v1InfoSubscription' type: array @@ -10037,6 +21768,7 @@ components: subscriptionAction: $ref: '#/components/schemas/v1SubscriptionAction' instruments: + description: Массив инструментов для подписки на цену последней сделки. items: $ref: '#/components/schemas/v1LastPriceInstrument' type: array @@ -10045,15 +21777,23 @@ components: description: Результат изменения статуса подписки на цену последней сделки. example: lastPriceSubscriptions: - - instrumentUid: instrumentUid + - streamId: streamId + instrumentUid: instrumentUid figi: figi - - instrumentUid: instrumentUid + subscriptionId: subscriptionId + - streamId: streamId + instrumentUid: instrumentUid figi: figi + subscriptionId: subscriptionId trackingId: trackingId properties: trackingId: + description: >- + Уникальный идентификатор запроса. + [Подробнее](https://russianinvestments.github.io/investAPI/grpc#tracking-id). type: string lastPriceSubscriptions: + description: Массив статусов подписки на цену последней сделки. items: $ref: '#/components/schemas/v1LastPriceSubscription' type: array @@ -10064,6 +21804,7 @@ components: subscriptionAction: $ref: '#/components/schemas/v1SubscriptionAction' instruments: + description: Массив инструментов для подписки на стаканы. items: $ref: '#/components/schemas/v1OrderBookInstrument' type: array @@ -10073,16 +21814,24 @@ components: example: orderBookSubscriptions: - depth: 0 + streamId: streamId instrumentUid: instrumentUid figi: figi + subscriptionId: subscriptionId - depth: 0 + streamId: streamId instrumentUid: instrumentUid figi: figi + subscriptionId: subscriptionId trackingId: trackingId properties: trackingId: + description: >- + Уникальный идентификатор запроса. + [Подробнее](https://russianinvestments.github.io/investAPI/grpc#tracking-id). type: string orderBookSubscriptions: + description: Массив статусов подписки на стаканы. items: $ref: '#/components/schemas/v1OrderBookSubscription' type: array @@ -10093,30 +21842,48 @@ components: subscriptionAction: $ref: '#/components/schemas/v1SubscriptionAction' instruments: + description: Массив инструментов для подписки на поток обезличенных сделок. items: $ref: '#/components/schemas/v1TradeInstrument' type: array + tradeSource: + $ref: '#/components/schemas/v1TradeSourceType' type: object v1SubscribeTradesResponse: description: Результат изменения статуса подписки на поток обезличенных сделок. example: tradeSubscriptions: - - instrumentUid: instrumentUid + - streamId: streamId + instrumentUid: instrumentUid figi: figi - - instrumentUid: instrumentUid + subscriptionId: subscriptionId + - streamId: streamId + instrumentUid: instrumentUid figi: figi + subscriptionId: subscriptionId trackingId: trackingId properties: trackingId: + description: >- + Уникальный идентификатор запроса. + [Подробнее](https://russianinvestments.github.io/investAPI/grpc#tracking-id). type: string tradeSubscriptions: + description: Массив статусов подписки на поток сделок. items: $ref: '#/components/schemas/v1TradeSubscription' type: array + tradeSource: + $ref: '#/components/schemas/v1TradeSourceType' type: object v1SubscriptionAction: default: SUBSCRIPTION_ACTION_UNSPECIFIED - description: Тип операции со списком подписок. + description: |- + Тип операции со списком подписок. + + - SUBSCRIPTION_ACTION_UNSPECIFIED: Статус подписки не определён. + - SUBSCRIPTION_ACTION_SUBSCRIBE: Подписаться. + - SUBSCRIPTION_ACTION_UNSUBSCRIBE: Отписаться. enum: - SUBSCRIPTION_ACTION_UNSPECIFIED - SUBSCRIPTION_ACTION_SUBSCRIBE @@ -10124,15 +21891,85 @@ components: type: string v1SubscriptionInterval: default: SUBSCRIPTION_INTERVAL_UNSPECIFIED - description: Интервал свечи. + description: |- + Интервал свечи. + + - SUBSCRIPTION_INTERVAL_UNSPECIFIED: Интервал свечи не определён. + - SUBSCRIPTION_INTERVAL_ONE_MINUTE: Минутные свечи. + - SUBSCRIPTION_INTERVAL_FIVE_MINUTES: Пятиминутные свечи. + - SUBSCRIPTION_INTERVAL_FIFTEEN_MINUTES: Пятнадцатиминутные свечи. + - SUBSCRIPTION_INTERVAL_ONE_HOUR: Часовые свечи. + - SUBSCRIPTION_INTERVAL_ONE_DAY: Дневные свечи. + - SUBSCRIPTION_INTERVAL_2_MIN: Двухминутные свечи. + - SUBSCRIPTION_INTERVAL_3_MIN: Трёхминутные свечи. + - SUBSCRIPTION_INTERVAL_10_MIN: Десятиминутные свечи. + - SUBSCRIPTION_INTERVAL_30_MIN: Тридцатиминутные свечи. + - SUBSCRIPTION_INTERVAL_2_HOUR: Двухчасовые свечи. + - SUBSCRIPTION_INTERVAL_4_HOUR: Четырёхчасовые свечи. + - SUBSCRIPTION_INTERVAL_WEEK: Недельные свечи. + - SUBSCRIPTION_INTERVAL_MONTH: Месячные свечи. enum: - SUBSCRIPTION_INTERVAL_UNSPECIFIED - SUBSCRIPTION_INTERVAL_ONE_MINUTE - SUBSCRIPTION_INTERVAL_FIVE_MINUTES + - SUBSCRIPTION_INTERVAL_FIFTEEN_MINUTES + - SUBSCRIPTION_INTERVAL_ONE_HOUR + - SUBSCRIPTION_INTERVAL_ONE_DAY + - SUBSCRIPTION_INTERVAL_2_MIN + - SUBSCRIPTION_INTERVAL_3_MIN + - SUBSCRIPTION_INTERVAL_10_MIN + - SUBSCRIPTION_INTERVAL_30_MIN + - SUBSCRIPTION_INTERVAL_2_HOUR + - SUBSCRIPTION_INTERVAL_4_HOUR + - SUBSCRIPTION_INTERVAL_WEEK + - SUBSCRIPTION_INTERVAL_MONTH type: string + v1SubscriptionResponse: + example: + streamId: streamId + accounts: + - accounts + - accounts + error: + code: code + message: message + trackingId: trackingId + properties: + trackingId: + description: >- + Уникальный идентификатор запроса, подробнее: + [tracking_id](https://russianinvestments.github.io/investAPI/grpc#tracking-id). + type: string + status: + $ref: '#/components/schemas/v1ResultSubscriptionStatus' + streamId: + title: Идентификатор открытого соединения + type: string + accounts: + description: Идентификаторы счетов. + items: + type: string + type: array + error: + $ref: '#/components/schemas/v1ErrorDetail' + title: Информация по подпискам + type: object v1SubscriptionStatus: default: SUBSCRIPTION_STATUS_UNSPECIFIED - description: Результат подписки. + description: |- + Результат подписки. + + - SUBSCRIPTION_STATUS_UNSPECIFIED: Статус подписки не определён. + - SUBSCRIPTION_STATUS_SUCCESS: Успешно. + - SUBSCRIPTION_STATUS_INSTRUMENT_NOT_FOUND: Инструмент не найден. + - SUBSCRIPTION_STATUS_SUBSCRIPTION_ACTION_IS_INVALID: Некорректный статус подписки. [Список возможных значений](https://russianinvestments.github.io/investAPI/marketdata#subscriptionaction). + - SUBSCRIPTION_STATUS_DEPTH_IS_INVALID: Некорректная глубина стакана. Доступные значения — 1, 10, 20, 30, 40, 50. + - SUBSCRIPTION_STATUS_INTERVAL_IS_INVALID: Некорректный интервал свечей. [Список возможных значений](https://russianinvestments.github.io/investAPI/marketdata#subscriptioninterval). + - SUBSCRIPTION_STATUS_LIMIT_IS_EXCEEDED: Превышен лимит на общее количество подписок в рамках стрима. [Лимитная политика](https://russianinvestments.github.io/investAPI/limits/). + - SUBSCRIPTION_STATUS_INTERNAL_ERROR: Внутренняя ошибка сервиса. + - SUBSCRIPTION_STATUS_TOO_MANY_REQUESTS: Превышен лимит на количество запросов на подписки в течение установленного отрезка времени. + - SUBSCRIPTION_STATUS_SUBSCRIPTION_NOT_FOUND: Активная подписка не найдена. Ошибка может возникнуть только при отписке от несуществующей подписки. + - SUBSCRIPTION_STATUS_SOURCE_IS_INVALID: Указан некорректный источник enum: - SUBSCRIPTION_STATUS_UNSPECIFIED - SUBSCRIPTION_STATUS_SUCCESS @@ -10143,6 +21980,36 @@ components: - SUBSCRIPTION_STATUS_LIMIT_IS_EXCEEDED - SUBSCRIPTION_STATUS_INTERNAL_ERROR - SUBSCRIPTION_STATUS_TOO_MANY_REQUESTS + - SUBSCRIPTION_STATUS_SUBSCRIPTION_NOT_FOUND + - SUBSCRIPTION_STATUS_SOURCE_IS_INVALID + type: string + v1TakeProfitType: + default: TAKE_PROFIT_TYPE_UNSPECIFIED + description: |- + Тип TakeProfit-заявки. + + - TAKE_PROFIT_TYPE_UNSPECIFIED: Значение не указано. + - TAKE_PROFIT_TYPE_REGULAR: Обычная заявка, значение по умолчанию. + - TAKE_PROFIT_TYPE_TRAILING: Трейлинг-стоп. + enum: + - TAKE_PROFIT_TYPE_UNSPECIFIED + - TAKE_PROFIT_TYPE_REGULAR + - TAKE_PROFIT_TYPE_TRAILING + type: string + v1TimeInForceType: + default: TIME_IN_FORCE_UNSPECIFIED + description: >- + - TIME_IN_FORCE_UNSPECIFIED: Значение не определено см. + TIME_IN_FORCE_DAY + - TIME_IN_FORCE_DAY: Заявка действует до конца торгового дня. Значение по умолчанию + - TIME_IN_FORCE_FILL_AND_KILL: Если в момент выставления возможно исполнение заявки(в т.ч. частичное), заявка будет исполнена или отменена сразу после выставления + - TIME_IN_FORCE_FILL_OR_KILL: Если в момент выставления возможно полное исполнение заявки, заявка будет исполнена или отменена сразу после выставления, недоступно для срочного рынка и торговли по выходным + enum: + - TIME_IN_FORCE_UNSPECIFIED + - TIME_IN_FORCE_DAY + - TIME_IN_FORCE_FILL_AND_KILL + - TIME_IN_FORCE_FILL_OR_KILL + title: Алгоритм исполнения заявки type: string v1Trade: description: Информация о сделке. @@ -10156,23 +22023,34 @@ components: time: 2000-01-23T04:56:07.000Z properties: figi: + description: FIGI-идентификатор инструмента. type: string direction: $ref: '#/components/schemas/v1TradeDirection' price: $ref: '#/components/schemas/v1Quotation' quantity: + description: Количество лотов. format: int64 type: string time: + description: Время сделки в часовом поясе UTC по времени биржи. format: date-time type: string instrumentUid: + description: UID инструмента. type: string + tradeSource: + $ref: '#/components/schemas/v1TradeSourceType' type: object v1TradeDirection: default: TRADE_DIRECTION_UNSPECIFIED - description: Направление сделки. + description: |- + Направление сделки. + + - TRADE_DIRECTION_UNSPECIFIED: Направление сделки не определено. + - TRADE_DIRECTION_BUY: Покупка. + - TRADE_DIRECTION_SELL: Продажа. enum: - TRADE_DIRECTION_UNSPECIFIED - TRADE_DIRECTION_BUY @@ -10182,36 +22060,84 @@ components: description: Запрос подписки на поток обезличенных сделок. properties: figi: + description: >- + Deprecated FIGI-идентификатор инструмента. Используйте + instrument_id`. type: string + deprecated: true instrumentId: + description: >- + Идентификатор инструмента. Принимает значение `figi` или + `instrument_uid`. type: string type: object + v1TradeSourceType: + default: TRADE_SOURCE_UNSPECIFIED + description: |- + Типы источников сделок. + + - TRADE_SOURCE_UNSPECIFIED: Тип источника сделки не определён. + - TRADE_SOURCE_EXCHANGE: Биржевые сделки. + - TRADE_SOURCE_DEALER: Сделки дилера. + - TRADE_SOURCE_ALL: Все сделки. + enum: + - TRADE_SOURCE_UNSPECIFIED + - TRADE_SOURCE_EXCHANGE + - TRADE_SOURCE_DEALER + - TRADE_SOURCE_ALL + type: string v1TradeSubscription: description: Статус подписки. example: + streamId: streamId instrumentUid: instrumentUid figi: figi + subscriptionId: subscriptionId properties: figi: + description: FIGI-идентификатор инструмента. type: string subscriptionStatus: $ref: '#/components/schemas/v1SubscriptionStatus' instrumentUid: + description: UID инструмента. + type: string + streamId: + description: Идентификатор открытого соединения. + type: string + subscriptionId: + description: Идентификатор подписки в формате UUID. type: string type: object v1TradesStreamRequest: description: Запрос установки соединения. properties: accounts: + description: Идентификаторы счетов. items: type: string type: array + pingDelayMs: + format: int32 + title: Задержка пинг сообщений milliseconds 5000-180000, default 120000 + type: integer type: object v1TradesStreamResponse: description: Информация о торговых поручениях. example: ping: + streamId: streamId + pingRequestTime: 2000-01-23T04:56:07.000Z time: 2000-01-23T04:56:07.000Z + subscription: + streamId: streamId + accounts: + - accounts + - accounts + error: + code: code + message: message + trackingId: trackingId orderTrades: createdAt: 2000-01-23T04:56:07.000Z accountId: accountId @@ -10236,6 +22162,8 @@ components: $ref: '#/components/schemas/v1OrderTrades' ping: $ref: '#/components/schemas/v1Ping' + subscription: + $ref: '#/components/schemas/v1SubscriptionResponse' type: object v1TradingDay: description: Информация о времени торгов. @@ -10248,6 +22176,15 @@ components: premarketStartTime: 2000-01-23T04:56:07.000Z eveningOpeningAuctionStartTime: 2000-01-23T04:56:07.000Z isTradingDay: true + intervals: + - interval: + endTs: 2000-01-23T04:56:07.000Z + startTs: 2000-01-23T04:56:07.000Z + type: type + - interval: + endTs: 2000-01-23T04:56:07.000Z + startTs: 2000-01-23T04:56:07.000Z + type: type eveningStartTime: 2000-01-23T04:56:07.000Z openingAuctionEndTime: 2000-01-23T04:56:07.000Z premarketEndTime: 2000-01-23T04:56:07.000Z @@ -10257,49 +22194,82 @@ components: endTime: 2000-01-23T04:56:07.000Z properties: date: + description: Дата. format: date-time type: string isTradingDay: + description: Признак торгового дня на бирже. type: boolean startTime: + description: Время начала торгов по UTC. format: date-time type: string endTime: + description: Время окончания торгов по UTC. format: date-time type: string openingAuctionStartTime: + description: Время начала аукциона открытия по UTC. format: date-time type: string closingAuctionEndTime: + description: Время окончания аукциона закрытия по UTC. format: date-time type: string eveningOpeningAuctionStartTime: + description: Время начала аукциона открытия вечерней сессии по UTC. format: date-time type: string eveningStartTime: + description: Время начала вечерней сессии по UTC. format: date-time type: string eveningEndTime: + description: Время окончания вечерней сессии по UTC. format: date-time type: string clearingStartTime: + description: Время начала основного клиринга по UTC. format: date-time type: string clearingEndTime: + description: Время окончания основного клиринга по UTC. format: date-time type: string premarketStartTime: + description: Время начала премаркета по UTC. format: date-time type: string premarketEndTime: + description: Время окончания премаркета по UTC. format: date-time type: string closingAuctionStartTime: + description: Время начала аукциона закрытия по UTC. format: date-time type: string openingAuctionEndTime: + description: Время окончания аукциона открытия по UTC. format: date-time type: string + intervals: + description: Торговые интервалы. + items: + $ref: '#/components/schemas/v1TradingInterval' + type: array + type: object + v1TradingInterval: + example: + interval: + endTs: 2000-01-23T04:56:07.000Z + startTs: 2000-01-23T04:56:07.000Z + type: type + properties: + type: + description: Название интервала. + type: string + interval: + $ref: '#/components/schemas/TradingIntervalTimeInterval' type: object v1TradingSchedule: description: Данные по торговой площадке. @@ -10313,6 +22283,15 @@ components: premarketStartTime: 2000-01-23T04:56:07.000Z eveningOpeningAuctionStartTime: 2000-01-23T04:56:07.000Z isTradingDay: true + intervals: + - interval: + endTs: 2000-01-23T04:56:07.000Z + startTs: 2000-01-23T04:56:07.000Z + type: type + - interval: + endTs: 2000-01-23T04:56:07.000Z + startTs: 2000-01-23T04:56:07.000Z + type: type eveningStartTime: 2000-01-23T04:56:07.000Z openingAuctionEndTime: 2000-01-23T04:56:07.000Z premarketEndTime: 2000-01-23T04:56:07.000Z @@ -10328,6 +22307,15 @@ components: premarketStartTime: 2000-01-23T04:56:07.000Z eveningOpeningAuctionStartTime: 2000-01-23T04:56:07.000Z isTradingDay: true + intervals: + - interval: + endTs: 2000-01-23T04:56:07.000Z + startTs: 2000-01-23T04:56:07.000Z + type: type + - interval: + endTs: 2000-01-23T04:56:07.000Z + startTs: 2000-01-23T04:56:07.000Z + type: type eveningStartTime: 2000-01-23T04:56:07.000Z openingAuctionEndTime: 2000-01-23T04:56:07.000Z premarketEndTime: 2000-01-23T04:56:07.000Z @@ -10338,8 +22326,10 @@ components: exchange: exchange properties: exchange: + description: Наименование торговой площадки. type: string days: + description: Массив с торговыми и неторговыми днями. items: $ref: '#/components/schemas/v1TradingDay' type: array @@ -10348,11 +22338,17 @@ components: description: Запрос расписания торгов. properties: exchange: + description: >- + Наименование биржи или расчетного календаря.
Если не + передаётся, возвращается информация по всем доступным торговым + площадкам. type: string from: + description: Начало периода по UTC. format: date-time type: string to: + description: Окончание периода по UTC. format: date-time type: string type: object @@ -10369,6 +22365,15 @@ components: premarketStartTime: 2000-01-23T04:56:07.000Z eveningOpeningAuctionStartTime: 2000-01-23T04:56:07.000Z isTradingDay: true + intervals: + - interval: + endTs: 2000-01-23T04:56:07.000Z + startTs: 2000-01-23T04:56:07.000Z + type: type + - interval: + endTs: 2000-01-23T04:56:07.000Z + startTs: 2000-01-23T04:56:07.000Z + type: type eveningStartTime: 2000-01-23T04:56:07.000Z openingAuctionEndTime: 2000-01-23T04:56:07.000Z premarketEndTime: 2000-01-23T04:56:07.000Z @@ -10384,6 +22389,15 @@ components: premarketStartTime: 2000-01-23T04:56:07.000Z eveningOpeningAuctionStartTime: 2000-01-23T04:56:07.000Z isTradingDay: true + intervals: + - interval: + endTs: 2000-01-23T04:56:07.000Z + startTs: 2000-01-23T04:56:07.000Z + type: type + - interval: + endTs: 2000-01-23T04:56:07.000Z + startTs: 2000-01-23T04:56:07.000Z + type: type eveningStartTime: 2000-01-23T04:56:07.000Z openingAuctionEndTime: 2000-01-23T04:56:07.000Z premarketEndTime: 2000-01-23T04:56:07.000Z @@ -10401,6 +22415,15 @@ components: premarketStartTime: 2000-01-23T04:56:07.000Z eveningOpeningAuctionStartTime: 2000-01-23T04:56:07.000Z isTradingDay: true + intervals: + - interval: + endTs: 2000-01-23T04:56:07.000Z + startTs: 2000-01-23T04:56:07.000Z + type: type + - interval: + endTs: 2000-01-23T04:56:07.000Z + startTs: 2000-01-23T04:56:07.000Z + type: type eveningStartTime: 2000-01-23T04:56:07.000Z openingAuctionEndTime: 2000-01-23T04:56:07.000Z premarketEndTime: 2000-01-23T04:56:07.000Z @@ -10416,6 +22439,15 @@ components: premarketStartTime: 2000-01-23T04:56:07.000Z eveningOpeningAuctionStartTime: 2000-01-23T04:56:07.000Z isTradingDay: true + intervals: + - interval: + endTs: 2000-01-23T04:56:07.000Z + startTs: 2000-01-23T04:56:07.000Z + type: type + - interval: + endTs: 2000-01-23T04:56:07.000Z + startTs: 2000-01-23T04:56:07.000Z + type: type eveningStartTime: 2000-01-23T04:56:07.000Z openingAuctionEndTime: 2000-01-23T04:56:07.000Z premarketEndTime: 2000-01-23T04:56:07.000Z @@ -10426,6 +22458,7 @@ components: exchange: exchange properties: exchanges: + description: Список торговых площадок и режимов торгов. items: $ref: '#/components/schemas/v1TradingSchedule' type: array @@ -10440,19 +22473,50 @@ components: time: 2000-01-23T04:56:07.000Z properties: figi: + description: FIGI-идентификатор инструмента. type: string tradingStatus: $ref: '#/components/schemas/v1SecurityTradingStatus' time: + description: Время изменения торгового статуса по UTC. format: date-time type: string limitOrderAvailableFlag: + description: Признак доступности выставления лимитной заявки по инструменту. type: boolean marketOrderAvailableFlag: + description: Признак доступности выставления рыночной заявки по инструменту. type: boolean instrumentUid: + description: UID инструмента. type: string type: object + v1TrailingStopStatus: + default: TRAILING_STOP_UNSPECIFIED + description: |- + Статус трейлинг-стопа. + + - TRAILING_STOP_UNSPECIFIED: Значение не указано. + - TRAILING_STOP_ACTIVE: Активный. + - TRAILING_STOP_ACTIVATED: Активированный. + enum: + - TRAILING_STOP_UNSPECIFIED + - TRAILING_STOP_ACTIVE + - TRAILING_STOP_ACTIVATED + type: string + v1TrailingValueType: + default: TRAILING_VALUE_UNSPECIFIED + description: |- + Тип параметров значений трейлинг-стопа. + + - TRAILING_VALUE_UNSPECIFIED: Значение не указано. + - TRAILING_VALUE_ABSOLUTE: Абсолютное значение в единицах цены. + - TRAILING_VALUE_RELATIVE: Относительное значение в процентах. + enum: + - TRAILING_VALUE_UNSPECIFIED + - TRAILING_VALUE_ABSOLUTE + - TRAILING_VALUE_RELATIVE + type: string v1UnaryLimit: description: Лимит unary-методов. example: @@ -10462,9 +22526,11 @@ components: - methods properties: limitPerMinute: + description: Количество unary-запросов в минуту. format: int32 type: integer methods: + description: Названия методов. items: type: string type: array @@ -10487,6 +22553,10 @@ components: currency: currency units: units instrumentUid: instrumentUid + dailyYield: + nano: 5 + currency: currency + units: units positionUid: positionUid currentPrice: nano: 5 @@ -10499,12 +22569,16 @@ components: expireDate: 2000-01-23T04:56:07.000Z properties: positionUid: + description: Уникальный идентификатор позиции. type: string instrumentUid: + description: Уникальный идентификатор инструмента. type: string figi: + description: FIGI-идентификатор инструмента. type: string instrumentType: + description: Тип инструмента. type: string quantity: $ref: '#/components/schemas/v1Quotation' @@ -10515,21 +22589,29 @@ components: expectedYieldFifo: $ref: '#/components/schemas/v1Quotation' expireDate: + description: >- + Дата, до которой нужно продать виртуальные бумаги. После этой даты + виртуальная позиция «сгораетт». format: date-time type: string currentPrice: $ref: '#/components/schemas/v1MoneyValue' averagePositionPriceFifo: $ref: '#/components/schemas/v1MoneyValue' + dailyYield: + $ref: '#/components/schemas/v1MoneyValue' type: object v1WithdrawLimitsRequest: - description: Запрос доступного для вывода остатка. + description: Запрос доступного остатка для вывода. properties: accountId: + description: Идентификатор счёта пользователя. type: string + required: + - accountId type: object v1WithdrawLimitsResponse: - description: Доступный для вывода остаток. + description: Доступный остаток для вывода. example: blockedGuarantee: - nano: 5 @@ -10554,14 +22636,17 @@ components: units: units properties: money: + description: Массив валютных позиций портфеля. items: $ref: '#/components/schemas/v1MoneyValue' type: array blocked: + description: Массив заблокированных валютных позиций портфеля. items: $ref: '#/components/schemas/v1MoneyValue' type: array blockedGuarantee: + description: Заблокировано под гарантийное обеспечение фьючерсов. items: $ref: '#/components/schemas/v1MoneyValue' type: array @@ -10571,10 +22656,14 @@ components: result: subscribeInfoResponse: infoSubscriptions: - - instrumentUid: instrumentUid + - streamId: streamId + instrumentUid: instrumentUid figi: figi - - instrumentUid: instrumentUid + subscriptionId: subscriptionId + - streamId: streamId + instrumentUid: instrumentUid figi: figi + subscriptionId: subscriptionId trackingId: trackingId trade: quantity: quantity @@ -10587,13 +22676,19 @@ components: subscribeOrderBookResponse: orderBookSubscriptions: - depth: 0 + streamId: streamId instrumentUid: instrumentUid figi: figi + subscriptionId: subscriptionId - depth: 0 + streamId: streamId instrumentUid: instrumentUid figi: figi + subscriptionId: subscriptionId trackingId: trackingId ping: + streamId: streamId + pingRequestTime: 2000-01-23T04:56:07.000Z time: 2000-01-23T04:56:07.000Z candle: volume: volume @@ -10645,10 +22740,14 @@ components: isConsistent: true subscribeTradesResponse: tradeSubscriptions: - - instrumentUid: instrumentUid + - streamId: streamId + instrumentUid: instrumentUid figi: figi - - instrumentUid: instrumentUid + subscriptionId: subscriptionId + - streamId: streamId + instrumentUid: instrumentUid figi: figi + subscriptionId: subscriptionId trackingId: trackingId tradingStatus: limitOrderAvailableFlag: true @@ -10658,17 +22757,27 @@ components: time: 2000-01-23T04:56:07.000Z subscribeCandlesResponse: candlesSubscriptions: - - instrumentUid: instrumentUid + - streamId: streamId + instrumentUid: instrumentUid + waitingClose: true figi: figi - - instrumentUid: instrumentUid + subscriptionId: subscriptionId + - streamId: streamId + instrumentUid: instrumentUid + waitingClose: true figi: figi + subscriptionId: subscriptionId trackingId: trackingId subscribeLastPriceResponse: lastPriceSubscriptions: - - instrumentUid: instrumentUid + - streamId: streamId + instrumentUid: instrumentUid figi: figi - - instrumentUid: instrumentUid + subscriptionId: subscriptionId + - streamId: streamId + instrumentUid: instrumentUid figi: figi + subscriptionId: subscriptionId trackingId: trackingId lastPrice: price: @@ -10680,10 +22789,8 @@ components: error: code: 1 details: - - typeUrl: typeUrl - value: value - - typeUrl: typeUrl - value: value + - '@type': '@type' + - '@type': '@type' message: message properties: result: @@ -10696,9 +22803,11 @@ components: example: result: subscriptions: + streamId: streamId accounts: - accountId: accountId - accountId: accountId + trackingId: trackingId portfolio: totalAmountBonds: nano: 5 @@ -10708,18 +22817,10 @@ components: nano: 5 currency: currency units: units - accountId: accountId - totalAmountCurrencies: - nano: 5 - currency: currency - units: units totalAmountSp: nano: 5 currency: currency units: units - expectedYield: - nano: 6 - units: units positions: - varMargin: nano: 5 @@ -10757,6 +22858,10 @@ components: units: units blocked: true instrumentUid: instrumentUid + dailyYield: + nano: 5 + currency: currency + units: units currentNkd: nano: 5 currency: currency @@ -10800,6 +22905,10 @@ components: units: units blocked: true instrumentUid: instrumentUid + dailyYield: + nano: 5 + currency: currency + units: units currentNkd: nano: 5 currency: currency @@ -10807,11 +22916,23 @@ components: expectedYield: nano: 6 units: units - totalAmountShares: + totalAmountEtf: nano: 5 currency: currency units: units - totalAmountEtf: + accountId: accountId + totalAmountCurrencies: + nano: 5 + currency: currency + units: units + dailyYield: + nano: 5 + currency: currency + units: units + expectedYield: + nano: 6 + units: units + totalAmountShares: nano: 5 currency: currency units: units @@ -10836,6 +22957,10 @@ components: currency: currency units: units instrumentUid: instrumentUid + dailyYield: + nano: 5 + currency: currency + units: units positionUid: positionUid currentPrice: nano: 5 @@ -10862,6 +22987,10 @@ components: currency: currency units: units instrumentUid: instrumentUid + dailyYield: + nano: 5 + currency: currency + units: units positionUid: positionUid currentPrice: nano: 5 @@ -10872,19 +23001,22 @@ components: nano: 6 units: units expireDate: 2000-01-23T04:56:07.000Z + dailyYieldRelative: + nano: 6 + units: units totalAmountOptions: nano: 5 currency: currency units: units ping: + streamId: streamId + pingRequestTime: 2000-01-23T04:56:07.000Z time: 2000-01-23T04:56:07.000Z error: code: 1 details: - - typeUrl: typeUrl - value: value - - typeUrl: typeUrl - value: value + - '@type': '@type' + - '@type': '@type' message: message properties: result: @@ -10897,10 +23029,66 @@ components: example: result: subscriptions: + streamId: streamId accounts: - accountId: accountId - accountId: accountId + trackingId: trackingId + initialPositions: + limitsLoadingInProgress: true + accountId: accountId + money: + - nano: 5 + currency: currency + units: units + - nano: 5 + currency: currency + units: units + blocked: + - nano: 5 + currency: currency + units: units + - nano: 5 + currency: currency + units: units + options: + - blocked: blocked + balance: balance + instrumentUid: instrumentUid + positionUid: positionUid + - blocked: blocked + balance: balance + instrumentUid: instrumentUid + positionUid: positionUid + futures: + - blocked: blocked + balance: balance + instrumentUid: instrumentUid + positionUid: positionUid + figi: figi + - blocked: blocked + balance: balance + instrumentUid: instrumentUid + positionUid: positionUid + figi: figi + securities: + - instrumentType: instrumentType + blocked: blocked + balance: balance + instrumentUid: instrumentUid + positionUid: positionUid + figi: figi + exchangeBlocked: true + - instrumentType: instrumentType + blocked: blocked + balance: balance + instrumentUid: instrumentUid + positionUid: positionUid + figi: figi + exchangeBlocked: true ping: + streamId: streamId + pingRequestTime: 2000-01-23T04:56:07.000Z time: 2000-01-23T04:56:07.000Z position: date: 2000-01-23T04:56:07.000Z @@ -10960,10 +23148,8 @@ components: error: code: 1 details: - - typeUrl: typeUrl - value: value - - typeUrl: typeUrl - value: value + - '@type': '@type' + - '@type': '@type' message: message properties: result: @@ -10972,11 +23158,97 @@ components: $ref: '#/components/schemas/rpcStatus' title: Stream result of v1PositionsStreamResponse type: object + Stream_result_of_v1OrderStateStreamResponse: + example: + result: + ping: + streamId: streamId + pingRequestTime: 2000-01-23T04:56:07.000Z + time: 2000-01-23T04:56:07.000Z + subscription: + streamId: streamId + accounts: + - accounts + - accounts + error: + code: code + message: message + trackingId: trackingId + orderState: + orderId: orderId + initialOrderPrice: + nano: 5 + currency: currency + units: units + createdAt: 2000-01-23T04:56:07.000Z + completionTime: 2000-01-23T04:56:07.000Z + lotsLeft: lotsLeft + orderPrice: + nano: 5 + currency: currency + units: units + executedOrderPrice: + nano: 5 + currency: currency + units: units + currency: currency + classCode: classCode + ticker: ticker + amount: + nano: 5 + currency: currency + units: units + lotSize: 0 + lotsCancelled: lotsCancelled + trades: + - dateTime: 2000-01-23T04:56:07.000Z + quantity: quantity + price: + nano: 6 + units: units + tradeId: tradeId + - dateTime: 2000-01-23T04:56:07.000Z + quantity: quantity + price: + nano: 6 + units: units + tradeId: tradeId + accountId: accountId + lotsExecuted: lotsExecuted + clientCode: clientCode + lotsRequested: lotsRequested + instrumentUid: instrumentUid + orderRequestId: orderRequestId + exchange: exchange + error: + code: 1 + details: + - '@type': '@type' + - '@type': '@type' + message: message + properties: + result: + $ref: '#/components/schemas/v1OrderStateStreamResponse' + error: + $ref: '#/components/schemas/rpcStatus' + title: Stream result of v1OrderStateStreamResponse + type: object Stream_result_of_v1TradesStreamResponse: example: result: ping: + streamId: streamId + pingRequestTime: 2000-01-23T04:56:07.000Z time: 2000-01-23T04:56:07.000Z + subscription: + streamId: streamId + accounts: + - accounts + - accounts + error: + code: code + message: message + trackingId: trackingId orderTrades: createdAt: 2000-01-23T04:56:07.000Z accountId: accountId @@ -10999,10 +23271,8 @@ components: error: code: 1 details: - - typeUrl: typeUrl - value: value - - typeUrl: typeUrl - value: value + - '@type': '@type' + - '@type': '@type' message: message properties: result: @@ -11011,6 +23281,26 @@ components: $ref: '#/components/schemas/rpcStatus' title: Stream result of v1TradesStreamResponse type: object + ErrorResponse: + description: Данные об ошибке + type: object + required: + - code + - message + - description + properties: + code: + description: Уникальный идентификатор ошибки + type: integer + example: 3 + message: + description: Пользовательское сообщение об ошибке + type: string + example: interval is invalid + description: + description: Код ошибки + type: integer + example: 30011 securitySchemes: Bearer: type: http diff --git a/investAPI-main/src/docs/swagger-ui/swagger-ui-bundle.js b/investAPI-main/src/docs/swagger-ui/swagger-ui-bundle.js index c6fa628..3b2d35c 100644 --- a/investAPI-main/src/docs/swagger-ui/swagger-ui-bundle.js +++ b/investAPI-main/src/docs/swagger-ui/swagger-ui-bundle.js @@ -1,3 +1,3 @@ /*! For license information please see swagger-ui-bundle.js.LICENSE.txt */ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.SwaggerUIBundle=t():e.SwaggerUIBundle=t()}(this,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist",n(n.s=481)}([function(e,t,n){"use strict";e.exports=n(555)},function(e,t,n){e.exports=function(){"use strict";var e=Array.prototype.slice;function t(e,t){t&&(e.prototype=Object.create(t.prototype)),e.prototype.constructor=e}function n(e){return i(e)?e:J(e)}function r(e){return u(e)?e:K(e)}function o(e){return s(e)?e:Y(e)}function a(e){return i(e)&&!c(e)?e:G(e)}function i(e){return!(!e||!e[f])}function u(e){return!(!e||!e[p])}function s(e){return!(!e||!e[h])}function c(e){return u(e)||s(e)}function l(e){return!(!e||!e[d])}t(r,n),t(o,n),t(a,n),n.isIterable=i,n.isKeyed=u,n.isIndexed=s,n.isAssociative=c,n.isOrdered=l,n.Keyed=r,n.Indexed=o,n.Set=a;var f="@@__IMMUTABLE_ITERABLE__@@",p="@@__IMMUTABLE_KEYED__@@",h="@@__IMMUTABLE_INDEXED__@@",d="@@__IMMUTABLE_ORDERED__@@",m="delete",v=5,g=1<>>0;if(""+n!==t||4294967295===n)return NaN;t=n}return t<0?A(e)+t:t}function C(){return!0}function j(e,t,n){return(0===e||void 0!==n&&e<=-n)&&(void 0===t||void 0!==n&&t>=n)}function T(e,t){return N(e,t,0)}function I(e,t){return N(e,t,t)}function N(e,t,n){return void 0===e?n:e<0?Math.max(0,t+e):void 0===t?e:Math.min(t,e)}var P=0,M=1,R=2,D="function"==typeof Symbol&&Symbol.iterator,L="@@iterator",B=D||L;function F(e){this.next=e}function z(e,t,n,r){var o=0===e?t:1===e?n:[t,n];return r?r.value=o:r={value:o,done:!1},r}function q(){return{value:void 0,done:!0}}function U(e){return!!H(e)}function V(e){return e&&"function"==typeof e.next}function W(e){var t=H(e);return t&&t.call(e)}function H(e){var t=e&&(D&&e[D]||e[L]);if("function"==typeof t)return t}function $(e){return e&&"number"==typeof e.length}function J(e){return null==e?ie():i(e)?e.toSeq():ce(e)}function K(e){return null==e?ie().toKeyedSeq():i(e)?u(e)?e.toSeq():e.fromEntrySeq():ue(e)}function Y(e){return null==e?ie():i(e)?u(e)?e.entrySeq():e.toIndexedSeq():se(e)}function G(e){return(null==e?ie():i(e)?u(e)?e.entrySeq():e:se(e)).toSetSeq()}F.prototype.toString=function(){return"[Iterator]"},F.KEYS=P,F.VALUES=M,F.ENTRIES=R,F.prototype.inspect=F.prototype.toSource=function(){return this.toString()},F.prototype[B]=function(){return this},t(J,n),J.of=function(){return J(arguments)},J.prototype.toSeq=function(){return this},J.prototype.toString=function(){return this.__toString("Seq {","}")},J.prototype.cacheResult=function(){return!this._cache&&this.__iterateUncached&&(this._cache=this.entrySeq().toArray(),this.size=this._cache.length),this},J.prototype.__iterate=function(e,t){return fe(this,e,t,!0)},J.prototype.__iterator=function(e,t){return pe(this,e,t,!0)},t(K,J),K.prototype.toKeyedSeq=function(){return this},t(Y,J),Y.of=function(){return Y(arguments)},Y.prototype.toIndexedSeq=function(){return this},Y.prototype.toString=function(){return this.__toString("Seq [","]")},Y.prototype.__iterate=function(e,t){return fe(this,e,t,!1)},Y.prototype.__iterator=function(e,t){return pe(this,e,t,!1)},t(G,J),G.of=function(){return G(arguments)},G.prototype.toSetSeq=function(){return this},J.isSeq=ae,J.Keyed=K,J.Set=G,J.Indexed=Y;var Q,Z,X,ee="@@__IMMUTABLE_SEQ__@@";function te(e){this._array=e,this.size=e.length}function ne(e){var t=Object.keys(e);this._object=e,this._keys=t,this.size=t.length}function re(e){this._iterable=e,this.size=e.length||e.size}function oe(e){this._iterator=e,this._iteratorCache=[]}function ae(e){return!(!e||!e[ee])}function ie(){return Q||(Q=new te([]))}function ue(e){var t=Array.isArray(e)?new te(e).fromEntrySeq():V(e)?new oe(e).fromEntrySeq():U(e)?new re(e).fromEntrySeq():"object"==typeof e?new ne(e):void 0;if(!t)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+e);return t}function se(e){var t=le(e);if(!t)throw new TypeError("Expected Array or iterable object of values: "+e);return t}function ce(e){var t=le(e)||"object"==typeof e&&new ne(e);if(!t)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+e);return t}function le(e){return $(e)?new te(e):V(e)?new oe(e):U(e)?new re(e):void 0}function fe(e,t,n,r){var o=e._cache;if(o){for(var a=o.length-1,i=0;i<=a;i++){var u=o[n?a-i:i];if(!1===t(u[1],r?u[0]:i,e))return i+1}return i}return e.__iterateUncached(t,n)}function pe(e,t,n,r){var o=e._cache;if(o){var a=o.length-1,i=0;return new F((function(){var e=o[n?a-i:i];return i++>a?q():z(t,r?e[0]:i-1,e[1])}))}return e.__iteratorUncached(t,n)}function he(e,t){return t?de(t,e,"",{"":e}):me(e)}function de(e,t,n,r){return Array.isArray(t)?e.call(r,n,Y(t).map((function(n,r){return de(e,n,r,t)}))):ve(t)?e.call(r,n,K(t).map((function(n,r){return de(e,n,r,t)}))):t}function me(e){return Array.isArray(e)?Y(e).map(me).toList():ve(e)?K(e).map(me).toMap():e}function ve(e){return e&&(e.constructor===Object||void 0===e.constructor)}function ge(e,t){if(e===t||e!=e&&t!=t)return!0;if(!e||!t)return!1;if("function"==typeof e.valueOf&&"function"==typeof t.valueOf){if((e=e.valueOf())===(t=t.valueOf())||e!=e&&t!=t)return!0;if(!e||!t)return!1}return!("function"!=typeof e.equals||"function"!=typeof t.equals||!e.equals(t))}function ye(e,t){if(e===t)return!0;if(!i(t)||void 0!==e.size&&void 0!==t.size&&e.size!==t.size||void 0!==e.__hash&&void 0!==t.__hash&&e.__hash!==t.__hash||u(e)!==u(t)||s(e)!==s(t)||l(e)!==l(t))return!1;if(0===e.size&&0===t.size)return!0;var n=!c(e);if(l(e)){var r=e.entries();return t.every((function(e,t){var o=r.next().value;return o&&ge(o[1],e)&&(n||ge(o[0],t))}))&&r.next().done}var o=!1;if(void 0===e.size)if(void 0===t.size)"function"==typeof e.cacheResult&&e.cacheResult();else{o=!0;var a=e;e=t,t=a}var f=!0,p=t.__iterate((function(t,r){if(n?!e.has(t):o?!ge(t,e.get(r,b)):!ge(e.get(r,b),t))return f=!1,!1}));return f&&e.size===p}function be(e,t){if(!(this instanceof be))return new be(e,t);if(this._value=e,this.size=void 0===t?1/0:Math.max(0,t),0===this.size){if(Z)return Z;Z=this}}function we(e,t){if(!e)throw new Error(t)}function xe(e,t,n){if(!(this instanceof xe))return new xe(e,t,n);if(we(0!==n,"Cannot step a Range by 0"),e=e||0,void 0===t&&(t=1/0),n=void 0===n?1:Math.abs(n),tr?q():z(e,o,n[t?r-o++:o++])}))},t(ne,K),ne.prototype.get=function(e,t){return void 0===t||this.has(e)?this._object[e]:t},ne.prototype.has=function(e){return this._object.hasOwnProperty(e)},ne.prototype.__iterate=function(e,t){for(var n=this._object,r=this._keys,o=r.length-1,a=0;a<=o;a++){var i=r[t?o-a:a];if(!1===e(n[i],i,this))return a+1}return a},ne.prototype.__iterator=function(e,t){var n=this._object,r=this._keys,o=r.length-1,a=0;return new F((function(){var i=r[t?o-a:a];return a++>o?q():z(e,i,n[i])}))},ne.prototype[d]=!0,t(re,Y),re.prototype.__iterateUncached=function(e,t){if(t)return this.cacheResult().__iterate(e,t);var n=W(this._iterable),r=0;if(V(n))for(var o;!(o=n.next()).done&&!1!==e(o.value,r++,this););return r},re.prototype.__iteratorUncached=function(e,t){if(t)return this.cacheResult().__iterator(e,t);var n=W(this._iterable);if(!V(n))return new F(q);var r=0;return new F((function(){var t=n.next();return t.done?t:z(e,r++,t.value)}))},t(oe,Y),oe.prototype.__iterateUncached=function(e,t){if(t)return this.cacheResult().__iterate(e,t);for(var n,r=this._iterator,o=this._iteratorCache,a=0;a=r.length){var t=n.next();if(t.done)return t;r[o]=t.value}return z(e,o,r[o++])}))},t(be,Y),be.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},be.prototype.get=function(e,t){return this.has(e)?this._value:t},be.prototype.includes=function(e){return ge(this._value,e)},be.prototype.slice=function(e,t){var n=this.size;return j(e,t,n)?this:new be(this._value,I(t,n)-T(e,n))},be.prototype.reverse=function(){return this},be.prototype.indexOf=function(e){return ge(this._value,e)?0:-1},be.prototype.lastIndexOf=function(e){return ge(this._value,e)?this.size:-1},be.prototype.__iterate=function(e,t){for(var n=0;n=0&&t=0&&nn?q():z(e,a++,i)}))},xe.prototype.equals=function(e){return e instanceof xe?this._start===e._start&&this._end===e._end&&this._step===e._step:ye(this,e)},t(_e,n),t(Ee,_e),t(Se,_e),t(ke,_e),_e.Keyed=Ee,_e.Indexed=Se,_e.Set=ke;var Ae="function"==typeof Math.imul&&-2===Math.imul(4294967295,2)?Math.imul:function(e,t){var n=65535&(e|=0),r=65535&(t|=0);return n*r+((e>>>16)*r+n*(t>>>16)<<16>>>0)|0};function Oe(e){return e>>>1&1073741824|3221225471&e}function Ce(e){if(!1===e||null==e)return 0;if("function"==typeof e.valueOf&&(!1===(e=e.valueOf())||null==e))return 0;if(!0===e)return 1;var t=typeof e;if("number"===t){if(e!=e||e===1/0)return 0;var n=0|e;for(n!==e&&(n^=4294967295*e);e>4294967295;)n^=e/=4294967295;return Oe(n)}if("string"===t)return e.length>Fe?je(e):Te(e);if("function"==typeof e.hashCode)return e.hashCode();if("object"===t)return Ie(e);if("function"==typeof e.toString)return Te(e.toString());throw new Error("Value type "+t+" cannot be hashed.")}function je(e){var t=Ue[e];return void 0===t&&(t=Te(e),qe===ze&&(qe=0,Ue={}),qe++,Ue[e]=t),t}function Te(e){for(var t=0,n=0;n0)switch(e.nodeType){case 1:return e.uniqueID;case 9:return e.documentElement&&e.documentElement.uniqueID}}var Re,De="function"==typeof WeakMap;De&&(Re=new WeakMap);var Le=0,Be="__immutablehash__";"function"==typeof Symbol&&(Be=Symbol(Be));var Fe=16,ze=255,qe=0,Ue={};function Ve(e){we(e!==1/0,"Cannot perform this action with an infinite size.")}function We(e){return null==e?ot():He(e)&&!l(e)?e:ot().withMutations((function(t){var n=r(e);Ve(n.size),n.forEach((function(e,n){return t.set(n,e)}))}))}function He(e){return!(!e||!e[Je])}t(We,Ee),We.of=function(){var t=e.call(arguments,0);return ot().withMutations((function(e){for(var n=0;n=t.length)throw new Error("Missing value for key: "+t[n]);e.set(t[n],t[n+1])}}))},We.prototype.toString=function(){return this.__toString("Map {","}")},We.prototype.get=function(e,t){return this._root?this._root.get(0,void 0,e,t):t},We.prototype.set=function(e,t){return at(this,e,t)},We.prototype.setIn=function(e,t){return this.updateIn(e,b,(function(){return t}))},We.prototype.remove=function(e){return at(this,e,b)},We.prototype.deleteIn=function(e){return this.updateIn(e,(function(){return b}))},We.prototype.update=function(e,t,n){return 1===arguments.length?e(this):this.updateIn([e],t,n)},We.prototype.updateIn=function(e,t,n){n||(n=t,t=void 0);var r=vt(this,_n(e),t,n);return r===b?void 0:r},We.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):ot()},We.prototype.merge=function(){return pt(this,void 0,arguments)},We.prototype.mergeWith=function(t){return pt(this,t,e.call(arguments,1))},We.prototype.mergeIn=function(t){var n=e.call(arguments,1);return this.updateIn(t,ot(),(function(e){return"function"==typeof e.merge?e.merge.apply(e,n):n[n.length-1]}))},We.prototype.mergeDeep=function(){return pt(this,ht,arguments)},We.prototype.mergeDeepWith=function(t){var n=e.call(arguments,1);return pt(this,dt(t),n)},We.prototype.mergeDeepIn=function(t){var n=e.call(arguments,1);return this.updateIn(t,ot(),(function(e){return"function"==typeof e.mergeDeep?e.mergeDeep.apply(e,n):n[n.length-1]}))},We.prototype.sort=function(e){return Ut(fn(this,e))},We.prototype.sortBy=function(e,t){return Ut(fn(this,t,e))},We.prototype.withMutations=function(e){var t=this.asMutable();return e(t),t.wasAltered()?t.__ensureOwner(this.__ownerID):this},We.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new S)},We.prototype.asImmutable=function(){return this.__ensureOwner()},We.prototype.wasAltered=function(){return this.__altered},We.prototype.__iterator=function(e,t){return new et(this,e,t)},We.prototype.__iterate=function(e,t){var n=this,r=0;return this._root&&this._root.iterate((function(t){return r++,e(t[1],t[0],n)}),t),r},We.prototype.__ensureOwner=function(e){return e===this.__ownerID?this:e?rt(this.size,this._root,e,this.__hash):(this.__ownerID=e,this.__altered=!1,this)},We.isMap=He;var $e,Je="@@__IMMUTABLE_MAP__@@",Ke=We.prototype;function Ye(e,t){this.ownerID=e,this.entries=t}function Ge(e,t,n){this.ownerID=e,this.bitmap=t,this.nodes=n}function Qe(e,t,n){this.ownerID=e,this.count=t,this.nodes=n}function Ze(e,t,n){this.ownerID=e,this.keyHash=t,this.entries=n}function Xe(e,t,n){this.ownerID=e,this.keyHash=t,this.entry=n}function et(e,t,n){this._type=t,this._reverse=n,this._stack=e._root&&nt(e._root)}function tt(e,t){return z(e,t[0],t[1])}function nt(e,t){return{node:e,index:0,__prev:t}}function rt(e,t,n,r){var o=Object.create(Ke);return o.size=e,o._root=t,o.__ownerID=n,o.__hash=r,o.__altered=!1,o}function ot(){return $e||($e=rt(0))}function at(e,t,n){var r,o;if(e._root){var a=_(w),i=_(x);if(r=it(e._root,e.__ownerID,0,void 0,t,n,a,i),!i.value)return e;o=e.size+(a.value?n===b?-1:1:0)}else{if(n===b)return e;o=1,r=new Ye(e.__ownerID,[[t,n]])}return e.__ownerID?(e.size=o,e._root=r,e.__hash=void 0,e.__altered=!0,e):r?rt(o,r):ot()}function it(e,t,n,r,o,a,i,u){return e?e.update(t,n,r,o,a,i,u):a===b?e:(E(u),E(i),new Xe(t,r,[o,a]))}function ut(e){return e.constructor===Xe||e.constructor===Ze}function st(e,t,n,r,o){if(e.keyHash===r)return new Ze(t,r,[e.entry,o]);var a,i=(0===n?e.keyHash:e.keyHash>>>n)&y,u=(0===n?r:r>>>n)&y;return new Ge(t,1<>>=1)i[u]=1&n?t[a++]:void 0;return i[r]=o,new Qe(e,a+1,i)}function pt(e,t,n){for(var o=[],a=0;a>1&1431655765))+(e>>2&858993459))+(e>>4)&252645135,e+=e>>8,127&(e+=e>>16)}function yt(e,t,n,r){var o=r?e:k(e);return o[t]=n,o}function bt(e,t,n,r){var o=e.length+1;if(r&&t+1===o)return e[t]=n,e;for(var a=new Array(o),i=0,u=0;u=xt)return ct(e,s,r,o);var p=e&&e===this.ownerID,h=p?s:k(s);return f?u?c===l-1?h.pop():h[c]=h.pop():h[c]=[r,o]:h.push([r,o]),p?(this.entries=h,this):new Ye(e,h)}},Ge.prototype.get=function(e,t,n,r){void 0===t&&(t=Ce(n));var o=1<<((0===e?t:t>>>e)&y),a=this.bitmap;return 0==(a&o)?r:this.nodes[gt(a&o-1)].get(e+v,t,n,r)},Ge.prototype.update=function(e,t,n,r,o,a,i){void 0===n&&(n=Ce(r));var u=(0===t?n:n>>>t)&y,s=1<=_t)return ft(e,p,c,u,d);if(l&&!d&&2===p.length&&ut(p[1^f]))return p[1^f];if(l&&d&&1===p.length&&ut(d))return d;var m=e&&e===this.ownerID,g=l?d?c:c^s:c|s,w=l?d?yt(p,f,d,m):wt(p,f,m):bt(p,f,d,m);return m?(this.bitmap=g,this.nodes=w,this):new Ge(e,g,w)},Qe.prototype.get=function(e,t,n,r){void 0===t&&(t=Ce(n));var o=(0===e?t:t>>>e)&y,a=this.nodes[o];return a?a.get(e+v,t,n,r):r},Qe.prototype.update=function(e,t,n,r,o,a,i){void 0===n&&(n=Ce(r));var u=(0===t?n:n>>>t)&y,s=o===b,c=this.nodes,l=c[u];if(s&&!l)return this;var f=it(l,e,t+v,n,r,o,a,i);if(f===l)return this;var p=this.count;if(l){if(!f&&--p0&&r=0&&e>>t&y;if(r>=this.array.length)return new Ct([],e);var o,a=0===r;if(t>0){var i=this.array[r];if((o=i&&i.removeBefore(e,t-v,n))===i&&a)return this}if(a&&!o)return this;var u=Lt(this,e);if(!a)for(var s=0;s>>t&y;if(o>=this.array.length)return this;if(t>0){var a=this.array[o];if((r=a&&a.removeAfter(e,t-v,n))===a&&o===this.array.length-1)return this}var i=Lt(this,e);return i.array.splice(o+1),r&&(i.array[o]=r),i};var jt,Tt,It={};function Nt(e,t){var n=e._origin,r=e._capacity,o=qt(r),a=e._tail;return i(e._root,e._level,0);function i(e,t,n){return 0===t?u(e,n):s(e,t,n)}function u(e,i){var u=i===o?a&&a.array:e&&e.array,s=i>n?0:n-i,c=r-i;return c>g&&(c=g),function(){if(s===c)return It;var e=t?--c:s++;return u&&u[e]}}function s(e,o,a){var u,s=e&&e.array,c=a>n?0:n-a>>o,l=1+(r-a>>o);return l>g&&(l=g),function(){for(;;){if(u){var e=u();if(e!==It)return e;u=null}if(c===l)return It;var n=t?--l:c++;u=i(s&&s[n],o-v,a+(n<=e.size||t<0)return e.withMutations((function(e){t<0?Ft(e,t).set(0,n):Ft(e,0,t+1).set(t,n)}));t+=e._origin;var r=e._tail,o=e._root,a=_(x);return t>=qt(e._capacity)?r=Dt(r,e.__ownerID,0,t,n,a):o=Dt(o,e.__ownerID,e._level,t,n,a),a.value?e.__ownerID?(e._root=o,e._tail=r,e.__hash=void 0,e.__altered=!0,e):Pt(e._origin,e._capacity,e._level,o,r):e}function Dt(e,t,n,r,o,a){var i,u=r>>>n&y,s=e&&u0){var c=e&&e.array[u],l=Dt(c,t,n-v,r,o,a);return l===c?e:((i=Lt(e,t)).array[u]=l,i)}return s&&e.array[u]===o?e:(E(a),i=Lt(e,t),void 0===o&&u===i.array.length-1?i.array.pop():i.array[u]=o,i)}function Lt(e,t){return t&&e&&t===e.ownerID?e:new Ct(e?e.array.slice():[],t)}function Bt(e,t){if(t>=qt(e._capacity))return e._tail;if(t<1<0;)n=n.array[t>>>r&y],r-=v;return n}}function Ft(e,t,n){void 0!==t&&(t|=0),void 0!==n&&(n|=0);var r=e.__ownerID||new S,o=e._origin,a=e._capacity,i=o+t,u=void 0===n?a:n<0?a+n:o+n;if(i===o&&u===a)return e;if(i>=u)return e.clear();for(var s=e._level,c=e._root,l=0;i+l<0;)c=new Ct(c&&c.array.length?[void 0,c]:[],r),l+=1<<(s+=v);l&&(i+=l,o+=l,u+=l,a+=l);for(var f=qt(a),p=qt(u);p>=1<f?new Ct([],r):h;if(h&&p>f&&iv;g-=v){var b=f>>>g&y;m=m.array[b]=Lt(m.array[b],r)}m.array[f>>>v&y]=h}if(u=p)i-=p,u-=p,s=v,c=null,d=d&&d.removeBefore(r,0,i);else if(i>o||p>>s&y;if(w!==p>>>s&y)break;w&&(l+=(1<o&&(c=c.removeBefore(r,s,i-l)),c&&pa&&(a=c.size),i(s)||(c=c.map((function(e){return he(e)}))),r.push(c)}return a>e.size&&(e=e.setSize(a)),mt(e,t,r)}function qt(e){return e>>v<=g&&i.size>=2*a.size?(r=(o=i.filter((function(e,t){return void 0!==e&&u!==t}))).toKeyedSeq().map((function(e){return e[0]})).flip().toMap(),e.__ownerID&&(r.__ownerID=o.__ownerID=e.__ownerID)):(r=a.remove(t),o=u===i.size-1?i.pop():i.set(u,void 0))}else if(s){if(n===i.get(u)[1])return e;r=a,o=i.set(u,[t,n])}else r=a.set(t,i.size),o=i.set(i.size,[t,n]);return e.__ownerID?(e.size=r.size,e._map=r,e._list=o,e.__hash=void 0,e):Wt(r,o)}function Jt(e,t){this._iter=e,this._useKeys=t,this.size=e.size}function Kt(e){this._iter=e,this.size=e.size}function Yt(e){this._iter=e,this.size=e.size}function Gt(e){this._iter=e,this.size=e.size}function Qt(e){var t=bn(e);return t._iter=e,t.size=e.size,t.flip=function(){return e},t.reverse=function(){var t=e.reverse.apply(this);return t.flip=function(){return e.reverse()},t},t.has=function(t){return e.includes(t)},t.includes=function(t){return e.has(t)},t.cacheResult=wn,t.__iterateUncached=function(t,n){var r=this;return e.__iterate((function(e,n){return!1!==t(n,e,r)}),n)},t.__iteratorUncached=function(t,n){if(t===R){var r=e.__iterator(t,n);return new F((function(){var e=r.next();if(!e.done){var t=e.value[0];e.value[0]=e.value[1],e.value[1]=t}return e}))}return e.__iterator(t===M?P:M,n)},t}function Zt(e,t,n){var r=bn(e);return r.size=e.size,r.has=function(t){return e.has(t)},r.get=function(r,o){var a=e.get(r,b);return a===b?o:t.call(n,a,r,e)},r.__iterateUncached=function(r,o){var a=this;return e.__iterate((function(e,o,i){return!1!==r(t.call(n,e,o,i),o,a)}),o)},r.__iteratorUncached=function(r,o){var a=e.__iterator(R,o);return new F((function(){var o=a.next();if(o.done)return o;var i=o.value,u=i[0];return z(r,u,t.call(n,i[1],u,e),o)}))},r}function Xt(e,t){var n=bn(e);return n._iter=e,n.size=e.size,n.reverse=function(){return e},e.flip&&(n.flip=function(){var t=Qt(e);return t.reverse=function(){return e.flip()},t}),n.get=function(n,r){return e.get(t?n:-1-n,r)},n.has=function(n){return e.has(t?n:-1-n)},n.includes=function(t){return e.includes(t)},n.cacheResult=wn,n.__iterate=function(t,n){var r=this;return e.__iterate((function(e,n){return t(e,n,r)}),!n)},n.__iterator=function(t,n){return e.__iterator(t,!n)},n}function en(e,t,n,r){var o=bn(e);return r&&(o.has=function(r){var o=e.get(r,b);return o!==b&&!!t.call(n,o,r,e)},o.get=function(r,o){var a=e.get(r,b);return a!==b&&t.call(n,a,r,e)?a:o}),o.__iterateUncached=function(o,a){var i=this,u=0;return e.__iterate((function(e,a,s){if(t.call(n,e,a,s))return u++,o(e,r?a:u-1,i)}),a),u},o.__iteratorUncached=function(o,a){var i=e.__iterator(R,a),u=0;return new F((function(){for(;;){var a=i.next();if(a.done)return a;var s=a.value,c=s[0],l=s[1];if(t.call(n,l,c,e))return z(o,r?c:u++,l,a)}}))},o}function tn(e,t,n){var r=We().asMutable();return e.__iterate((function(o,a){r.update(t.call(n,o,a,e),0,(function(e){return e+1}))})),r.asImmutable()}function nn(e,t,n){var r=u(e),o=(l(e)?Ut():We()).asMutable();e.__iterate((function(a,i){o.update(t.call(n,a,i,e),(function(e){return(e=e||[]).push(r?[i,a]:a),e}))}));var a=yn(e);return o.map((function(t){return mn(e,a(t))}))}function rn(e,t,n,r){var o=e.size;if(void 0!==t&&(t|=0),void 0!==n&&(n===1/0?n=o:n|=0),j(t,n,o))return e;var a=T(t,o),i=I(n,o);if(a!=a||i!=i)return rn(e.toSeq().cacheResult(),t,n,r);var u,s=i-a;s==s&&(u=s<0?0:s);var c=bn(e);return c.size=0===u?u:e.size&&u||void 0,!r&&ae(e)&&u>=0&&(c.get=function(t,n){return(t=O(this,t))>=0&&tu)return q();var e=o.next();return r||t===M?e:z(t,s-1,t===P?void 0:e.value[1],e)}))},c}function on(e,t,n){var r=bn(e);return r.__iterateUncached=function(r,o){var a=this;if(o)return this.cacheResult().__iterate(r,o);var i=0;return e.__iterate((function(e,o,u){return t.call(n,e,o,u)&&++i&&r(e,o,a)})),i},r.__iteratorUncached=function(r,o){var a=this;if(o)return this.cacheResult().__iterator(r,o);var i=e.__iterator(R,o),u=!0;return new F((function(){if(!u)return q();var e=i.next();if(e.done)return e;var o=e.value,s=o[0],c=o[1];return t.call(n,c,s,a)?r===R?e:z(r,s,c,e):(u=!1,q())}))},r}function an(e,t,n,r){var o=bn(e);return o.__iterateUncached=function(o,a){var i=this;if(a)return this.cacheResult().__iterate(o,a);var u=!0,s=0;return e.__iterate((function(e,a,c){if(!u||!(u=t.call(n,e,a,c)))return s++,o(e,r?a:s-1,i)})),s},o.__iteratorUncached=function(o,a){var i=this;if(a)return this.cacheResult().__iterator(o,a);var u=e.__iterator(R,a),s=!0,c=0;return new F((function(){var e,a,l;do{if((e=u.next()).done)return r||o===M?e:z(o,c++,o===P?void 0:e.value[1],e);var f=e.value;a=f[0],l=f[1],s&&(s=t.call(n,l,a,i))}while(s);return o===R?e:z(o,a,l,e)}))},o}function un(e,t){var n=u(e),o=[e].concat(t).map((function(e){return i(e)?n&&(e=r(e)):e=n?ue(e):se(Array.isArray(e)?e:[e]),e})).filter((function(e){return 0!==e.size}));if(0===o.length)return e;if(1===o.length){var a=o[0];if(a===e||n&&u(a)||s(e)&&s(a))return a}var c=new te(o);return n?c=c.toKeyedSeq():s(e)||(c=c.toSetSeq()),(c=c.flatten(!0)).size=o.reduce((function(e,t){if(void 0!==e){var n=t.size;if(void 0!==n)return e+n}}),0),c}function sn(e,t,n){var r=bn(e);return r.__iterateUncached=function(r,o){var a=0,u=!1;function s(e,c){var l=this;e.__iterate((function(e,o){return(!t||c0}function dn(e,t,r){var o=bn(e);return o.size=new te(r).map((function(e){return e.size})).min(),o.__iterate=function(e,t){for(var n,r=this.__iterator(M,t),o=0;!(n=r.next()).done&&!1!==e(n.value,o++,this););return o},o.__iteratorUncached=function(e,o){var a=r.map((function(e){return e=n(e),W(o?e.reverse():e)})),i=0,u=!1;return new F((function(){var n;return u||(n=a.map((function(e){return e.next()})),u=n.some((function(e){return e.done}))),u?q():z(e,i++,t.apply(null,n.map((function(e){return e.value}))))}))},o}function mn(e,t){return ae(e)?t:e.constructor(t)}function vn(e){if(e!==Object(e))throw new TypeError("Expected [K, V] tuple: "+e)}function gn(e){return Ve(e.size),A(e)}function yn(e){return u(e)?r:s(e)?o:a}function bn(e){return Object.create((u(e)?K:s(e)?Y:G).prototype)}function wn(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):J.prototype.cacheResult.call(this)}function xn(e,t){return e>t?1:e=0;n--)t={value:arguments[n],next:t};return this.__ownerID?(this.size=e,this._head=t,this.__hash=void 0,this.__altered=!0,this):Kn(e,t)},Vn.prototype.pushAll=function(e){if(0===(e=o(e)).size)return this;Ve(e.size);var t=this.size,n=this._head;return e.reverse().forEach((function(e){t++,n={value:e,next:n}})),this.__ownerID?(this.size=t,this._head=n,this.__hash=void 0,this.__altered=!0,this):Kn(t,n)},Vn.prototype.pop=function(){return this.slice(1)},Vn.prototype.unshift=function(){return this.push.apply(this,arguments)},Vn.prototype.unshiftAll=function(e){return this.pushAll(e)},Vn.prototype.shift=function(){return this.pop.apply(this,arguments)},Vn.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):Yn()},Vn.prototype.slice=function(e,t){if(j(e,t,this.size))return this;var n=T(e,this.size);if(I(t,this.size)!==this.size)return Se.prototype.slice.call(this,e,t);for(var r=this.size-n,o=this._head;n--;)o=o.next;return this.__ownerID?(this.size=r,this._head=o,this.__hash=void 0,this.__altered=!0,this):Kn(r,o)},Vn.prototype.__ensureOwner=function(e){return e===this.__ownerID?this:e?Kn(this.size,this._head,e,this.__hash):(this.__ownerID=e,this.__altered=!1,this)},Vn.prototype.__iterate=function(e,t){if(t)return this.reverse().__iterate(e);for(var n=0,r=this._head;r&&!1!==e(r.value,n++,this);)r=r.next;return n},Vn.prototype.__iterator=function(e,t){if(t)return this.reverse().__iterator(e);var n=0,r=this._head;return new F((function(){if(r){var t=r.value;return r=r.next,z(e,n++,t)}return q()}))},Vn.isStack=Wn;var Hn,$n="@@__IMMUTABLE_STACK__@@",Jn=Vn.prototype;function Kn(e,t,n,r){var o=Object.create(Jn);return o.size=e,o._head=t,o.__ownerID=n,o.__hash=r,o.__altered=!1,o}function Yn(){return Hn||(Hn=Kn(0))}function Gn(e,t){var n=function(n){e.prototype[n]=t[n]};return Object.keys(t).forEach(n),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(t).forEach(n),e}Jn[$n]=!0,Jn.withMutations=Ke.withMutations,Jn.asMutable=Ke.asMutable,Jn.asImmutable=Ke.asImmutable,Jn.wasAltered=Ke.wasAltered,n.Iterator=F,Gn(n,{toArray:function(){Ve(this.size);var e=new Array(this.size||0);return this.valueSeq().__iterate((function(t,n){e[n]=t})),e},toIndexedSeq:function(){return new Kt(this)},toJS:function(){return this.toSeq().map((function(e){return e&&"function"==typeof e.toJS?e.toJS():e})).__toJS()},toJSON:function(){return this.toSeq().map((function(e){return e&&"function"==typeof e.toJSON?e.toJSON():e})).__toJS()},toKeyedSeq:function(){return new Jt(this,!0)},toMap:function(){return We(this.toKeyedSeq())},toObject:function(){Ve(this.size);var e={};return this.__iterate((function(t,n){e[n]=t})),e},toOrderedMap:function(){return Ut(this.toKeyedSeq())},toOrderedSet:function(){return Ln(u(this)?this.valueSeq():this)},toSet:function(){return jn(u(this)?this.valueSeq():this)},toSetSeq:function(){return new Yt(this)},toSeq:function(){return s(this)?this.toIndexedSeq():u(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return Vn(u(this)?this.valueSeq():this)},toList:function(){return St(u(this)?this.valueSeq():this)},toString:function(){return"[Iterable]"},__toString:function(e,t){return 0===this.size?e+t:e+" "+this.toSeq().map(this.__toStringMapper).join(", ")+" "+t},concat:function(){return mn(this,un(this,e.call(arguments,0)))},includes:function(e){return this.some((function(t){return ge(t,e)}))},entries:function(){return this.__iterator(R)},every:function(e,t){Ve(this.size);var n=!0;return this.__iterate((function(r,o,a){if(!e.call(t,r,o,a))return n=!1,!1})),n},filter:function(e,t){return mn(this,en(this,e,t,!0))},find:function(e,t,n){var r=this.findEntry(e,t);return r?r[1]:n},forEach:function(e,t){return Ve(this.size),this.__iterate(t?e.bind(t):e)},join:function(e){Ve(this.size),e=void 0!==e?""+e:",";var t="",n=!0;return this.__iterate((function(r){n?n=!1:t+=e,t+=null!=r?r.toString():""})),t},keys:function(){return this.__iterator(P)},map:function(e,t){return mn(this,Zt(this,e,t))},reduce:function(e,t,n){var r,o;return Ve(this.size),arguments.length<2?o=!0:r=t,this.__iterate((function(t,a,i){o?(o=!1,r=t):r=e.call(n,r,t,a,i)})),r},reduceRight:function(e,t,n){var r=this.toKeyedSeq().reverse();return r.reduce.apply(r,arguments)},reverse:function(){return mn(this,Xt(this,!0))},slice:function(e,t){return mn(this,rn(this,e,t,!0))},some:function(e,t){return!this.every(tr(e),t)},sort:function(e){return mn(this,fn(this,e))},values:function(){return this.__iterator(M)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return void 0!==this.size?0===this.size:!this.some((function(){return!0}))},count:function(e,t){return A(e?this.toSeq().filter(e,t):this)},countBy:function(e,t){return tn(this,e,t)},equals:function(e){return ye(this,e)},entrySeq:function(){var e=this;if(e._cache)return new te(e._cache);var t=e.toSeq().map(er).toIndexedSeq();return t.fromEntrySeq=function(){return e.toSeq()},t},filterNot:function(e,t){return this.filter(tr(e),t)},findEntry:function(e,t,n){var r=n;return this.__iterate((function(n,o,a){if(e.call(t,n,o,a))return r=[o,n],!1})),r},findKey:function(e,t){var n=this.findEntry(e,t);return n&&n[0]},findLast:function(e,t,n){return this.toKeyedSeq().reverse().find(e,t,n)},findLastEntry:function(e,t,n){return this.toKeyedSeq().reverse().findEntry(e,t,n)},findLastKey:function(e,t){return this.toKeyedSeq().reverse().findKey(e,t)},first:function(){return this.find(C)},flatMap:function(e,t){return mn(this,cn(this,e,t))},flatten:function(e){return mn(this,sn(this,e,!0))},fromEntrySeq:function(){return new Gt(this)},get:function(e,t){return this.find((function(t,n){return ge(n,e)}),void 0,t)},getIn:function(e,t){for(var n,r=this,o=_n(e);!(n=o.next()).done;){var a=n.value;if((r=r&&r.get?r.get(a,b):b)===b)return t}return r},groupBy:function(e,t){return nn(this,e,t)},has:function(e){return this.get(e,b)!==b},hasIn:function(e){return this.getIn(e,b)!==b},isSubset:function(e){return e="function"==typeof e.includes?e:n(e),this.every((function(t){return e.includes(t)}))},isSuperset:function(e){return(e="function"==typeof e.isSubset?e:n(e)).isSubset(this)},keyOf:function(e){return this.findKey((function(t){return ge(t,e)}))},keySeq:function(){return this.toSeq().map(Xn).toIndexedSeq()},last:function(){return this.toSeq().reverse().first()},lastKeyOf:function(e){return this.toKeyedSeq().reverse().keyOf(e)},max:function(e){return pn(this,e)},maxBy:function(e,t){return pn(this,t,e)},min:function(e){return pn(this,e?nr(e):ar)},minBy:function(e,t){return pn(this,t?nr(t):ar,e)},rest:function(){return this.slice(1)},skip:function(e){return this.slice(Math.max(0,e))},skipLast:function(e){return mn(this,this.toSeq().reverse().skip(e).reverse())},skipWhile:function(e,t){return mn(this,an(this,e,t,!0))},skipUntil:function(e,t){return this.skipWhile(tr(e),t)},sortBy:function(e,t){return mn(this,fn(this,t,e))},take:function(e){return this.slice(0,Math.max(0,e))},takeLast:function(e){return mn(this,this.toSeq().reverse().take(e).reverse())},takeWhile:function(e,t){return mn(this,on(this,e,t))},takeUntil:function(e,t){return this.takeWhile(tr(e),t)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=ir(this))}});var Qn=n.prototype;Qn[f]=!0,Qn[B]=Qn.values,Qn.__toJS=Qn.toArray,Qn.__toStringMapper=rr,Qn.inspect=Qn.toSource=function(){return this.toString()},Qn.chain=Qn.flatMap,Qn.contains=Qn.includes,Gn(r,{flip:function(){return mn(this,Qt(this))},mapEntries:function(e,t){var n=this,r=0;return mn(this,this.toSeq().map((function(o,a){return e.call(t,[a,o],r++,n)})).fromEntrySeq())},mapKeys:function(e,t){var n=this;return mn(this,this.toSeq().flip().map((function(r,o){return e.call(t,r,o,n)})).flip())}});var Zn=r.prototype;function Xn(e,t){return t}function er(e,t){return[t,e]}function tr(e){return function(){return!e.apply(this,arguments)}}function nr(e){return function(){return-e.apply(this,arguments)}}function rr(e){return"string"==typeof e?JSON.stringify(e):String(e)}function or(){return k(arguments)}function ar(e,t){return et?-1:0}function ir(e){if(e.size===1/0)return 0;var t=l(e),n=u(e),r=t?1:0;return ur(e.__iterate(n?t?function(e,t){r=31*r+sr(Ce(e),Ce(t))|0}:function(e,t){r=r+sr(Ce(e),Ce(t))|0}:t?function(e){r=31*r+Ce(e)|0}:function(e){r=r+Ce(e)|0}),r)}function ur(e,t){return t=Ae(t,3432918353),t=Ae(t<<15|t>>>-15,461845907),t=Ae(t<<13|t>>>-13,5),t=Ae((t=(t+3864292196|0)^e)^t>>>16,2246822507),t=Oe((t=Ae(t^t>>>13,3266489909))^t>>>16)}function sr(e,t){return e^t+2654435769+(e<<6)+(e>>2)|0}return Zn[p]=!0,Zn[B]=Qn.entries,Zn.__toJS=Qn.toObject,Zn.__toStringMapper=function(e,t){return JSON.stringify(t)+": "+rr(e)},Gn(o,{toKeyedSeq:function(){return new Jt(this,!1)},filter:function(e,t){return mn(this,en(this,e,t,!1))},findIndex:function(e,t){var n=this.findEntry(e,t);return n?n[0]:-1},indexOf:function(e){var t=this.keyOf(e);return void 0===t?-1:t},lastIndexOf:function(e){var t=this.lastKeyOf(e);return void 0===t?-1:t},reverse:function(){return mn(this,Xt(this,!1))},slice:function(e,t){return mn(this,rn(this,e,t,!1))},splice:function(e,t){var n=arguments.length;if(t=Math.max(0|t,0),0===n||2===n&&!t)return this;e=T(e,e<0?this.count():this.size);var r=this.slice(0,e);return mn(this,1===n?r:r.concat(k(arguments,2),this.slice(e+t)))},findLastIndex:function(e,t){var n=this.findLastEntry(e,t);return n?n[0]:-1},first:function(){return this.get(0)},flatten:function(e){return mn(this,sn(this,e,!1))},get:function(e,t){return(e=O(this,e))<0||this.size===1/0||void 0!==this.size&&e>this.size?t:this.find((function(t,n){return n===e}),void 0,t)},has:function(e){return(e=O(this,e))>=0&&(void 0!==this.size?this.size===1/0||e1)try{return decodeURIComponent(t[1])}catch(e){console.error(e)}return null}function Ne(e){return t=e.replace(/\.[^./]*$/,""),Y()(J()(t));var t}function Pe(e,t,n,r,a){if(!t)return[];var u=[],s=t.get("nullable"),c=t.get("required"),f=t.get("maximum"),h=t.get("minimum"),d=t.get("type"),m=t.get("format"),g=t.get("maxLength"),b=t.get("minLength"),x=t.get("uniqueItems"),_=t.get("maxItems"),E=t.get("minItems"),S=t.get("pattern"),k=n||!0===c,A=null!=e;if(s&&null===e||!d||!(k||A&&"array"===d||!(!k&&!A)))return[];var O="string"===d&&e,C="array"===d&&l()(e)&&e.length,j="array"===d&&W.a.List.isList(e)&&e.count(),T=[O,C,j,"array"===d&&"string"==typeof e&&e,"file"===d&&e instanceof ue.a.File,"boolean"===d&&(e||!1===e),"number"===d&&(e||0===e),"integer"===d&&(e||0===e),"object"===d&&"object"===i()(e)&&null!==e,"object"===d&&"string"==typeof e&&e],I=N()(T).call(T,(function(e){return!!e}));if(k&&!I&&!r)return u.push("Required field is not provided"),u;if("object"===d&&(null===a||"application/json"===a)){var P,M=e;if("string"==typeof e)try{M=JSON.parse(e)}catch(e){return u.push("Parameter string value must be valid JSON"),u}if(t&&t.has("required")&&Ee(c.isList)&&c.isList()&&y()(c).call(c,(function(e){void 0===M[e]&&u.push({propKey:e,error:"Required property not found"})})),t&&t.has("properties"))y()(P=t.get("properties")).call(P,(function(e,t){var n=Pe(M[t],e,!1,r,a);u.push.apply(u,o()(p()(n).call(n,(function(e){return{propKey:t,error:e}}))))}))}if(S){var R=function(e,t){if(!new RegExp(t).test(e))return"Value must follow pattern "+t}(e,S);R&&u.push(R)}if(E&&"array"===d){var D=function(e,t){var n;if(!e&&t>=1||e&&e.lengtht)return v()(n="Array must not contain more then ".concat(t," item")).call(n,1===t?"":"s")}(e,_);L&&u.push({needRemove:!0,error:L})}if(x&&"array"===d){var B=function(e,t){if(e&&("true"===t||!0===t)){var n=Object(V.fromJS)(e),r=n.toSet();if(e.length>r.size){var o=Object(V.Set)();if(y()(n).call(n,(function(e,t){w()(n).call(n,(function(t){return Ee(t.equals)?t.equals(e):t===e})).size>1&&(o=o.add(t))})),0!==o.size)return p()(o).call(o,(function(e){return{index:e,error:"No duplicates allowed."}})).toArray()}}}(e,x);B&&u.push.apply(u,o()(B))}if(g||0===g){var F=function(e,t){var n;if(e.length>t)return v()(n="Value must be no longer than ".concat(t," character")).call(n,1!==t?"s":"")}(e,g);F&&u.push(F)}if(b){var z=function(e,t){var n;if(e.lengtht)return"Value must be less than ".concat(t)}(e,f);q&&u.push(q)}if(h||0===h){var U=function(e,t){if(e2&&void 0!==arguments[2]?arguments[2]:{},r=n.isOAS3,o=void 0!==r&&r,a=n.bypassRequiredCheck,i=void 0!==a&&a,u=e.get("required"),s=Object(le.a)(e,{isOAS3:o}),c=s.schema,l=s.parameterContentMediaType;return Pe(t,c,u,i,l)},Re=function(e,t,n){if(e&&(!e.xml||!e.xml.name)){if(e.xml=e.xml||{},!e.$$ref)return e.type||e.items||e.properties||e.additionalProperties?'\n\x3c!-- XML example cannot be generated; root element name is undefined --\x3e':null;var r=e.$$ref.match(/\S*\/(\S+)$/);e.xml.name=r[1]}return Object(ie.memoizedCreateXMLExample)(e,t,n)},De=[{when:/json/,shouldStringifyTypes:["string"]}],Le=["object"],Be=function(e,t,n,r){var a=Object(ie.memoizedSampleFromSchema)(e,t,r),u=i()(a),s=S()(De).call(De,(function(e,t){var r;return t.when.test(n)?v()(r=[]).call(r,o()(e),o()(t.shouldStringifyTypes)):e}),Le);return te()(s,(function(e){return e===u}))?M()(a,null,2):a},Fe=function(e,t,n,r){var o,a=Be(e,t,n,r);try{"\n"===(o=me.a.dump(me.a.load(a),{lineWidth:-1}))[o.length-1]&&(o=T()(o).call(o,0,o.length-1))}catch(e){return console.error(e),"error: could not generate yaml example"}return o.replace(/\t/g," ")},ze=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;return e&&Ee(e.toJS)&&(e=e.toJS()),r&&Ee(r.toJS)&&(r=r.toJS()),/xml/.test(t)?Re(e,n,r):/(yaml|yml)/.test(t)?Fe(e,n,t,r):Be(e,n,t,r)},qe=function(){var e={},t=ue.a.location.search;if(!t)return{};if(""!=t){var n=t.substr(1).split("&");for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(r=n[r].split("="),e[decodeURIComponent(r[0])]=r[1]&&decodeURIComponent(r[1])||"")}return e},Ue=function(t){return(t instanceof e?t:e.from(t.toString(),"utf-8")).toString("base64")},Ve={operationsSorter:{alpha:function(e,t){return e.get("path").localeCompare(t.get("path"))},method:function(e,t){return e.get("method").localeCompare(t.get("method"))}},tagsSorter:{alpha:function(e,t){return e.localeCompare(t)}}},We=function(e){var t=[];for(var n in e){var r=e[n];void 0!==r&&""!==r&&t.push([n,"=",encodeURIComponent(r).replace(/%20/g,"+")].join(""))}return t.join("&")},He=function(e,t,n){return!!X()(n,(function(n){return re()(e[n],t[n])}))};function $e(e){return"string"!=typeof e||""===e?"":Object(H.sanitizeUrl)(e)}function Je(e){return!(!e||D()(e).call(e,"localhost")>=0||D()(e).call(e,"127.0.0.1")>=0||"none"===e)}function Ke(e){if(!W.a.OrderedMap.isOrderedMap(e))return null;if(!e.size)return null;var t=B()(e).call(e,(function(e,t){return z()(t).call(t,"2")&&_()(e.get("content")||{}).length>0})),n=e.get("default")||W.a.OrderedMap(),r=(n.get("content")||W.a.OrderedMap()).keySeq().toJS().length?n:null;return t||r}var Ye=function(e){return"string"==typeof e||e instanceof String?U()(e).call(e).replace(/\s/g,"%20"):""},Ge=function(e){return ce()(Ye(e).replace(/%20/g,"_"))},Qe=function(e){return w()(e).call(e,(function(e,t){return/^x-/.test(t)}))},Ze=function(e){return w()(e).call(e,(function(e,t){return/^pattern|maxLength|minLength|maximum|minimum/.test(t)}))};function Xe(e,t){var n,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){return!0};if("object"!==i()(e)||l()(e)||null===e||!t)return e;var o=A()({},e);return y()(n=_()(o)).call(n,(function(e){e===t&&r(o[e],e)?delete o[e]:o[e]=Xe(o[e],t,r)})),o}function et(e){if("string"==typeof e)return e;if(e&&e.toJS&&(e=e.toJS()),"object"===i()(e)&&null!==e)try{return M()(e,null,2)}catch(t){return String(e)}return null==e?"":e.toString()}function tt(e){return"number"==typeof e?e.toString():e}function nt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.returnAll,r=void 0!==n&&n,o=t.allowHashes,a=void 0===o||o;if(!W.a.Map.isMap(e))throw new Error("paramToIdentifier: received a non-Im.Map parameter as input");var i,u,s,c=e.get("name"),l=e.get("in"),f=[];e&&e.hashCode&&l&&c&&a&&f.push(v()(i=v()(u="".concat(l,".")).call(u,c,".hash-")).call(i,e.hashCode()));l&&c&&f.push(v()(s="".concat(l,".")).call(s,c));return f.push(c),r?f:f[0]||""}function rt(e,t){var n,r=nt(e,{returnAll:!0});return w()(n=p()(r).call(r,(function(e){return t[e]}))).call(n,(function(e){return void 0!==e}))[0]}function ot(){return it(pe()(32).toString("base64"))}function at(e){return it(de()("sha256").update(e).digest("base64"))}function it(e){return e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}var ut=function(e){return!e||!(!ge(e)||!e.isEmpty())}}).call(this,n(132).Buffer)},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,n){var r=n(226);function o(e,t){for(var n=0;n1?t-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:r,n=null,a=null;return function(){return o(t,n,arguments)||(a=e.apply(null,arguments)),n=arguments,a}}))},function(e,t,n){(function(t){var n=function(e){return e&&e.Math==Math&&e};e.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof t&&t)||function(){return this}()||Function("return this")()}).call(this,n(57))},function(e,t,n){e.exports=n(385)},function(e,t,n){var r=n(166),o=n(515);function a(t){return"function"==typeof r&&"symbol"==typeof o?(e.exports=a=function(e){return typeof e},e.exports.default=e.exports,e.exports.__esModule=!0):(e.exports=a=function(e){return e&&"function"==typeof r&&e.constructor===r&&e!==r.prototype?"symbol":typeof e},e.exports.default=e.exports,e.exports.__esModule=!0),a(t)}e.exports=a,e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,n){e.exports=n(351)},function(e,t,n){e.exports=n(349)},function(e,t,n){"use strict";var r=n(17),o=n(93),a=n(27),i=n(41),u=n(111).f,s=n(331),c=n(34),l=n(84),f=n(85),p=n(44),h=function(e){var t=function(n,r,a){if(this instanceof t){switch(arguments.length){case 0:return new e;case 1:return new e(n);case 2:return new e(n,r)}return new e(n,r,a)}return o(e,this,arguments)};return t.prototype=e.prototype,t};e.exports=function(e,t){var n,o,d,m,v,g,y,b,w=e.target,x=e.global,_=e.stat,E=e.proto,S=x?r:_?r[w]:(r[w]||{}).prototype,k=x?c:c[w]||f(c,w,{})[w],A=k.prototype;for(d in t)n=!s(x?d:w+(_?".":"#")+d,e.forced)&&S&&p(S,d),v=k[d],n&&(g=e.noTargetGet?(b=u(S,d))&&b.value:S[d]),m=n&&g?g:t[d],n&&typeof v==typeof m||(y=e.bind&&n?l(m,r):e.wrap&&n?h(m):E&&i(m)?a(m):m,(e.sham||m&&m.sham||v&&v.sham)&&f(y,"sham",!0),f(k,d,y),E&&(p(c,o=w+"Prototype")||f(c,o,{}),f(c[o],d,m),e.real&&A&&!A[d]&&f(A,d,m)))}},function(e,t,n){e.exports=n(381)},function(e,t,n){e.exports=n(352)},function(e,t,n){var r=n(420),o=n(421),a=n(800),i=n(802),u=n(807),s=n(809),c=n(814),l=n(226),f=n(3);function p(e,t){var n=r(e);if(o){var u=o(e);t&&(u=a(u).call(u,(function(t){return i(e,t).enumerable}))),n.push.apply(n,u)}return n}e.exports=function(e){for(var t=1;t>",i=function(){invariant(!1,"ImmutablePropTypes type checking code is stripped in production.")};i.isRequired=i;var u=function(){return i};function s(e){var t=typeof e;return Array.isArray(e)?"array":e instanceof RegExp?"object":e instanceof o.Iterable?"Immutable."+e.toSource().split(" ")[0]:t}function c(e){function t(t,n,r,o,i,u){for(var s=arguments.length,c=Array(s>6?s-6:0),l=6;l4)}function l(e){var t=e.get("swagger");return"string"==typeof t&&i()(t).call(t,"2.0")}function f(e){return function(t,n){return function(r){return n&&n.specSelectors&&n.specSelectors.specJson?c(n.specSelectors.specJson())?s.a.createElement(e,o()({},r,n,{Ori:t})):s.a.createElement(t,r):(console.warn("OAS3 wrapper: couldn't get spec"),null)}}}},function(e,t,n){e.exports=n(535)},function(e,t,n){var r=n(17),o=n(212),a=n(44),i=n(171),u=n(210),s=n(329),c=o("wks"),l=r.Symbol,f=l&&l.for,p=s?l:l&&l.withoutSetter||i;e.exports=function(e){if(!a(c,e)||!u&&"string"!=typeof c[e]){var t="Symbol."+e;u&&a(l,e)?c[e]=l[e]:c[e]=s&&f?f(t):p(t)}return c[e]}},function(e,t,n){var r=n(242);e.exports=function(e,t,n){var o=null==e?void 0:r(e,t);return void 0===o?n:o}},function(e,t,n){e.exports=n(840)},function(e,t){e.exports=function(e){return"function"==typeof e}},function(e,t,n){var r=n(34);e.exports=function(e){return r[e+"Prototype"]}},function(e,t,n){var r=n(41);e.exports=function(e){return"object"==typeof e?null!==e:r(e)}},function(e,t,n){var r=n(27),o=n(62),a=r({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return a(o(e),t)}},function(e,t,n){var r=n(34),o=n(44),a=n(223),i=n(63).f;e.exports=function(e){var t=r.Symbol||(r.Symbol={});o(t,e)||i(t,e,{value:a.f(e)})}},function(e,t,n){"use strict";n.r(t),n.d(t,"UPDATE_SPEC",(function(){return ee})),n.d(t,"UPDATE_URL",(function(){return te})),n.d(t,"UPDATE_JSON",(function(){return ne})),n.d(t,"UPDATE_PARAM",(function(){return re})),n.d(t,"UPDATE_EMPTY_PARAM_INCLUSION",(function(){return oe})),n.d(t,"VALIDATE_PARAMS",(function(){return ae})),n.d(t,"SET_RESPONSE",(function(){return ie})),n.d(t,"SET_REQUEST",(function(){return ue})),n.d(t,"SET_MUTATED_REQUEST",(function(){return se})),n.d(t,"LOG_REQUEST",(function(){return ce})),n.d(t,"CLEAR_RESPONSE",(function(){return le})),n.d(t,"CLEAR_REQUEST",(function(){return fe})),n.d(t,"CLEAR_VALIDATE_PARAMS",(function(){return pe})),n.d(t,"UPDATE_OPERATION_META_VALUE",(function(){return he})),n.d(t,"UPDATE_RESOLVED",(function(){return de})),n.d(t,"UPDATE_RESOLVED_SUBTREE",(function(){return me})),n.d(t,"SET_SCHEME",(function(){return ve})),n.d(t,"updateSpec",(function(){return ge})),n.d(t,"updateResolved",(function(){return ye})),n.d(t,"updateUrl",(function(){return be})),n.d(t,"updateJsonSpec",(function(){return we})),n.d(t,"parseToJson",(function(){return xe})),n.d(t,"resolveSpec",(function(){return Ee})),n.d(t,"requestResolvedSubtree",(function(){return Ae})),n.d(t,"changeParam",(function(){return Oe})),n.d(t,"changeParamByIdentity",(function(){return Ce})),n.d(t,"updateResolvedSubtree",(function(){return je})),n.d(t,"invalidateResolvedSubtreeCache",(function(){return Te})),n.d(t,"validateParams",(function(){return Ie})),n.d(t,"updateEmptyParamInclusion",(function(){return Ne})),n.d(t,"clearValidateParams",(function(){return Pe})),n.d(t,"changeConsumesValue",(function(){return Me})),n.d(t,"changeProducesValue",(function(){return Re})),n.d(t,"setResponse",(function(){return De})),n.d(t,"setRequest",(function(){return Le})),n.d(t,"setMutatedRequest",(function(){return Be})),n.d(t,"logRequest",(function(){return Fe})),n.d(t,"executeRequest",(function(){return ze})),n.d(t,"execute",(function(){return qe})),n.d(t,"clearResponse",(function(){return Ue})),n.d(t,"clearRequest",(function(){return Ve})),n.d(t,"setScheme",(function(){return We}));var r=n(25),o=n.n(r),a=n(54),i=n.n(a),u=n(72),s=n.n(u),c=n(19),l=n.n(c),f=n(40),p=n.n(f),h=n(24),d=n.n(h),m=n(4),v=n.n(m),g=n(319),y=n.n(g),b=n(30),w=n.n(b),x=n(197),_=n.n(x),E=n(66),S=n.n(E),k=n(12),A=n.n(k),O=n(198),C=n.n(O),j=n(18),T=n.n(j),I=n(23),N=n.n(I),P=n(2),M=n.n(P),R=n(15),D=n.n(R),L=n(21),B=n.n(L),F=n(320),z=n.n(F),q=n(70),U=n(1),V=n(89),W=n.n(V),H=n(141),$=n(457),J=n.n($),K=n(458),Y=n.n(K),G=n(321),Q=n.n(G),Z=n(5),X=["path","method"],ee="spec_update_spec",te="spec_update_url",ne="spec_update_json",re="spec_update_param",oe="spec_update_empty_param_inclusion",ae="spec_validate_param",ie="spec_set_response",ue="spec_set_request",se="spec_set_mutated_request",ce="spec_log_request",le="spec_clear_response",fe="spec_clear_request",pe="spec_clear_validate_param",he="spec_update_operation_meta_value",de="spec_update_resolved",me="spec_update_resolved_subtree",ve="set_scheme";function ge(e){var t,n=(t=e,J()(t)?t:"").replace(/\t/g," ");if("string"==typeof e)return{type:ee,payload:n}}function ye(e){return{type:de,payload:e}}function be(e){return{type:te,payload:e}}function we(e){return{type:ne,payload:e}}var xe=function(e){return function(t){var n=t.specActions,r=t.specSelectors,o=t.errActions,a=r.specStr,i=null;try{e=e||a(),o.clear({source:"parser"}),i=q.a.load(e)}catch(e){return console.error(e),o.newSpecErr({source:"parser",level:"error",message:e.reason,line:e.mark&&e.mark.line?e.mark.line+1:void 0})}return i&&"object"===l()(i)?n.updateJsonSpec(i):{}}},_e=!1,Ee=function(e,t){return function(n){var r=n.specActions,o=n.specSelectors,a=n.errActions,i=n.fn,u=i.fetch,s=i.resolve,c=i.AST,l=void 0===c?{}:c,f=n.getConfigs;_e||(console.warn("specActions.resolveSpec is deprecated since v3.10.0 and will be removed in v4.0.0; use requestResolvedSubtree instead!"),_e=!0);var p=f(),h=p.modelPropertyMacro,m=p.parameterMacro,g=p.requestInterceptor,b=p.responseInterceptor;void 0===e&&(e=o.specJson()),void 0===t&&(t=o.url());var w=l.getLineNumberForPath?l.getLineNumberForPath:function(){},x=o.specStr();return s({fetch:u,spec:e,baseDoc:t,modelPropertyMacro:h,parameterMacro:m,requestInterceptor:g,responseInterceptor:b}).then((function(e){var t=e.spec,n=e.errors;if(a.clear({type:"thrown"}),d()(n)&&n.length>0){var o=v()(n).call(n,(function(e){return console.error(e),e.line=e.fullPath?w(x,e.fullPath):null,e.path=e.fullPath?e.fullPath.join("."):null,e.level="error",e.type="thrown",e.source="resolver",y()(e,"message",{enumerable:!0,value:e.message}),e}));a.newThrownErrBatch(o)}return r.updateResolved(t)}))}},Se=[],ke=Y()(s()(p.a.mark((function e(){var t,n,r,o,a,i,u,c,l,f,h,m,g,b,x,E,k,O;return p.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=Se.system){e.next=4;break}return console.error("debResolveSubtrees: don't have a system to operate on, aborting."),e.abrupt("return");case 4:if(n=t.errActions,r=t.errSelectors,o=t.fn,a=o.resolveSubtree,i=o.fetch,u=o.AST,c=void 0===u?{}:u,l=t.specSelectors,f=t.specActions,a){e.next=8;break}return console.error("Error: Swagger-Client did not provide a `resolveSubtree` method, doing nothing."),e.abrupt("return");case 8:return h=c.getLineNumberForPath?c.getLineNumberForPath:function(){},m=l.specStr(),g=t.getConfigs(),b=g.modelPropertyMacro,x=g.parameterMacro,E=g.requestInterceptor,k=g.responseInterceptor,e.prev=11,e.next=14,w()(Se).call(Se,function(){var e=s()(p.a.mark((function e(t,o){var u,c,f,g,w,O,j,T,I;return p.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t;case 2:return u=e.sent,c=u.resultMap,f=u.specWithCurrentSubtrees,e.next=7,a(f,o,{baseDoc:l.url(),modelPropertyMacro:b,parameterMacro:x,requestInterceptor:E,responseInterceptor:k});case 7:if(g=e.sent,w=g.errors,O=g.spec,r.allErrors().size&&n.clearBy((function(e){var t;return"thrown"!==e.get("type")||"resolver"!==e.get("source")||!_()(t=e.get("fullPath")).call(t,(function(e,t){return e===o[t]||void 0===o[t]}))})),d()(w)&&w.length>0&&(j=v()(w).call(w,(function(e){return e.line=e.fullPath?h(m,e.fullPath):null,e.path=e.fullPath?e.fullPath.join("."):null,e.level="error",e.type="thrown",e.source="resolver",y()(e,"message",{enumerable:!0,value:e.message}),e})),n.newThrownErrBatch(j)),!O||!l.isOAS3()||"components"!==o[0]||"securitySchemes"!==o[1]){e.next=15;break}return e.next=15,S.a.all(v()(T=A()(I=C()(O)).call(I,(function(e){return"openIdConnect"===e.type}))).call(T,function(){var e=s()(p.a.mark((function e(t){var n,r;return p.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n={url:t.openIdConnectUrl,requestInterceptor:E,responseInterceptor:k},e.prev=1,e.next=4,i(n);case 4:(r=e.sent)instanceof Error||r.status>=400?console.error(r.statusText+" "+n.url):t.openIdConnectData=JSON.parse(r.text),e.next=11;break;case 8:e.prev=8,e.t0=e.catch(1),console.error(e.t0);case 11:case"end":return e.stop()}}),e,null,[[1,8]])})));return function(t){return e.apply(this,arguments)}}()));case 15:return Q()(c,o,O),Q()(f,o,O),e.abrupt("return",{resultMap:c,specWithCurrentSubtrees:f});case 18:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),S.a.resolve({resultMap:(l.specResolvedSubtree([])||Object(U.Map)()).toJS(),specWithCurrentSubtrees:l.specJson().toJS()}));case 14:O=e.sent,delete Se.system,Se=[],e.next=22;break;case 19:e.prev=19,e.t0=e.catch(11),console.error(e.t0);case 22:f.updateResolvedSubtree([],O.resultMap);case 23:case"end":return e.stop()}}),e,null,[[11,19]])}))),35),Ae=function(e){return function(t){var n;T()(n=v()(Se).call(Se,(function(e){return e.join("@@")}))).call(n,e.join("@@"))>-1||(Se.push(e),Se.system=t,ke())}};function Oe(e,t,n,r,o){return{type:re,payload:{path:e,value:r,paramName:t,paramIn:n,isXml:o}}}function Ce(e,t,n,r){return{type:re,payload:{path:e,param:t,value:n,isXml:r}}}var je=function(e,t){return{type:me,payload:{path:e,value:t}}},Te=function(){return{type:me,payload:{path:[],value:Object(U.Map)()}}},Ie=function(e,t){return{type:ae,payload:{pathMethod:e,isOAS3:t}}},Ne=function(e,t,n,r){return{type:oe,payload:{pathMethod:e,paramName:t,paramIn:n,includeEmptyValue:r}}};function Pe(e){return{type:pe,payload:{pathMethod:e}}}function Me(e,t){return{type:he,payload:{path:e,value:t,key:"consumes_value"}}}function Re(e,t){return{type:he,payload:{path:e,value:t,key:"produces_value"}}}var De=function(e,t,n){return{payload:{path:e,method:t,res:n},type:ie}},Le=function(e,t,n){return{payload:{path:e,method:t,req:n},type:ue}},Be=function(e,t,n){return{payload:{path:e,method:t,req:n},type:se}},Fe=function(e){return{payload:e,type:ce}},ze=function(e){return function(t){var n,r,o=t.fn,a=t.specActions,i=t.specSelectors,u=t.getConfigs,c=t.oas3Selectors,l=e.pathName,f=e.method,h=e.operation,m=u(),g=m.requestInterceptor,y=m.responseInterceptor,b=h.toJS();h&&h.get("parameters")&&N()(n=A()(r=h.get("parameters")).call(r,(function(e){return e&&!0===e.get("allowEmptyValue")}))).call(n,(function(t){if(i.parameterInclusionSettingFor([l,f],t.get("name"),t.get("in"))){e.parameters=e.parameters||{};var n=Object(Z.B)(t,e.parameters);(!n||n&&0===n.size)&&(e.parameters[t.get("name")]="")}}));if(e.contextUrl=W()(i.url()).toString(),b&&b.operationId?e.operationId=b.operationId:b&&l&&f&&(e.operationId=o.opId(b,l,f)),i.isOAS3()){var w,x=M()(w="".concat(l,":")).call(w,f);e.server=c.selectedServer(x)||c.selectedServer();var _=c.serverVariables({server:e.server,namespace:x}).toJS(),E=c.serverVariables({server:e.server}).toJS();e.serverVariables=D()(_).length?_:E,e.requestContentType=c.requestContentType(l,f),e.responseContentType=c.responseContentType(l,f)||"*/*";var S,k=c.requestBodyValue(l,f),O=c.requestBodyInclusionSetting(l,f);if(k&&k.toJS)e.requestBody=A()(S=v()(k).call(k,(function(e){return U.Map.isMap(e)?e.get("value"):e}))).call(S,(function(e,t){return(d()(e)?0!==e.length:!Object(Z.q)(e))||O.get(t)})).toJS();else e.requestBody=k}var C=B()({},e);C=o.buildRequest(C),a.setRequest(e.pathName,e.method,C);var j=function(){var t=s()(p.a.mark((function t(n){var r,o;return p.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,g.apply(undefined,[n]);case 2:return r=t.sent,o=B()({},r),a.setMutatedRequest(e.pathName,e.method,o),t.abrupt("return",r);case 6:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}();e.requestInterceptor=j,e.responseInterceptor=y;var T=z()();return o.execute(e).then((function(t){t.duration=z()()-T,a.setResponse(e.pathName,e.method,t)})).catch((function(t){"Failed to fetch"===t.message&&(t.name="",t.message='**Failed to fetch.** \n**Possible Reasons:** \n - CORS \n - Network Failure \n - URL scheme must be "http" or "https" for CORS request.'),a.setResponse(e.pathName,e.method,{error:!0,err:Object(H.serializeError)(t)})}))}},qe=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.path,n=e.method,r=i()(e,X);return function(e){var a=e.fn.fetch,i=e.specSelectors,u=e.specActions,s=i.specJsonWithResolvedSubtrees().toJS(),c=i.operationScheme(t,n),l=i.contentTypeValues([t,n]).toJS(),f=l.requestContentType,p=l.responseContentType,h=/xml/i.test(f),d=i.parameterValues([t,n],h).toJS();return u.executeRequest(o()(o()({},r),{},{fetch:a,spec:s,pathName:t,method:n,parameters:d,requestContentType:f,scheme:c,responseContentType:p}))}};function Ue(e,t){return{type:le,payload:{path:e,method:t}}}function Ve(e,t){return{type:fe,payload:{path:e,method:t}}}function We(e,t,n){return{type:ve,payload:{scheme:e,path:t,method:n}}}},function(e,t,n){var r;!function(){"use strict";var n={}.hasOwnProperty;function o(){for(var e=[],t=0;t=e.length?{done:!0}:{done:!1,value:e[u++]}},e:function(e){throw e},f:s}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var c,l=!0,f=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return l=e.done,e},e:function(e){f=!0,c=e},f:function(){try{l||null==n.return||n.return()}finally{if(f)throw c}}}},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){var n=Function.prototype.call;e.exports=n.bind?n.bind(n):function(){return n.apply(n,arguments)}},function(e,t,n){var r=n(17),o=n(43),a=r.String,i=r.TypeError;e.exports=function(e){if(o(e))return e;throw i(a(e)+" is not an object")}},function(e,t){var n=Array.isArray;e.exports=n},function(e,t){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},function(e,t,n){var r=n(421),o=n(423),a=n(820);e.exports=function(e,t){if(null==e)return{};var n,i,u=a(e,t);if(r){var s=r(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(u[n]=e[n])}return u},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,n){"use strict";n.r(t),n.d(t,"UPDATE_SELECTED_SERVER",(function(){return r})),n.d(t,"UPDATE_REQUEST_BODY_VALUE",(function(){return o})),n.d(t,"UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG",(function(){return a})),n.d(t,"UPDATE_REQUEST_BODY_INCLUSION",(function(){return i})),n.d(t,"UPDATE_ACTIVE_EXAMPLES_MEMBER",(function(){return u})),n.d(t,"UPDATE_REQUEST_CONTENT_TYPE",(function(){return s})),n.d(t,"UPDATE_RESPONSE_CONTENT_TYPE",(function(){return c})),n.d(t,"UPDATE_SERVER_VARIABLE_VALUE",(function(){return l})),n.d(t,"SET_REQUEST_BODY_VALIDATE_ERROR",(function(){return f})),n.d(t,"CLEAR_REQUEST_BODY_VALIDATE_ERROR",(function(){return p})),n.d(t,"CLEAR_REQUEST_BODY_VALUE",(function(){return h})),n.d(t,"setSelectedServer",(function(){return d})),n.d(t,"setRequestBodyValue",(function(){return m})),n.d(t,"setRetainRequestBodyValueFlag",(function(){return v})),n.d(t,"setRequestBodyInclusion",(function(){return g})),n.d(t,"setActiveExamplesMember",(function(){return y})),n.d(t,"setRequestContentType",(function(){return b})),n.d(t,"setResponseContentType",(function(){return w})),n.d(t,"setServerVariableValue",(function(){return x})),n.d(t,"setRequestBodyValidateError",(function(){return _})),n.d(t,"clearRequestBodyValidateError",(function(){return E})),n.d(t,"initRequestBodyValidateError",(function(){return S})),n.d(t,"clearRequestBodyValue",(function(){return k}));var r="oas3_set_servers",o="oas3_set_request_body_value",a="oas3_set_request_body_retain_flag",i="oas3_set_request_body_inclusion",u="oas3_set_active_examples_member",s="oas3_set_request_content_type",c="oas3_set_response_content_type",l="oas3_set_server_variable_value",f="oas3_set_request_body_validate_error",p="oas3_clear_request_body_validate_error",h="oas3_clear_request_body_value";function d(e,t){return{type:r,payload:{selectedServerUrl:e,namespace:t}}}function m(e){var t=e.value,n=e.pathMethod;return{type:o,payload:{value:t,pathMethod:n}}}var v=function(e){var t=e.value,n=e.pathMethod;return{type:a,payload:{value:t,pathMethod:n}}};function g(e){var t=e.value,n=e.pathMethod,r=e.name;return{type:i,payload:{value:t,pathMethod:n,name:r}}}function y(e){var t=e.name,n=e.pathMethod,r=e.contextType,o=e.contextName;return{type:u,payload:{name:t,pathMethod:n,contextType:r,contextName:o}}}function b(e){var t=e.value,n=e.pathMethod;return{type:s,payload:{value:t,pathMethod:n}}}function w(e){var t=e.value,n=e.path,r=e.method;return{type:c,payload:{value:t,path:n,method:r}}}function x(e){var t=e.server,n=e.namespace,r=e.key,o=e.val;return{type:l,payload:{server:t,namespace:n,key:r,val:o}}}var _=function(e){var t=e.path,n=e.method,r=e.validationErrors;return{type:f,payload:{path:t,method:n,validationErrors:r}}},E=function(e){var t=e.path,n=e.method;return{type:p,payload:{path:t,method:n}}},S=function(e){var t=e.pathMethod;return{type:p,payload:{path:t[0],method:t[1]}}},k=function(e){var t=e.pathMethod;return{type:h,payload:{pathMethod:t}}}},function(e,t,n){e.exports=n(647)},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){var r=n(34),o=n(17),a=n(41),i=function(e){return a(e)?e:void 0};e.exports=function(e,t){return arguments.length<2?i(r[e])||i(o[e]):r[e]&&r[e][t]||o[e]&&o[e][t]}},function(e,t,n){"use strict";n.d(t,"b",(function(){return m})),n.d(t,"e",(function(){return v})),n.d(t,"c",(function(){return y})),n.d(t,"a",(function(){return b})),n.d(t,"d",(function(){return w}));var r=n(49),o=n.n(r),a=n(19),i=n.n(a),u=n(108),s=n.n(u),c=n(2),l=n.n(c),f=n(53),p=n.n(f),h=function(e){return String.prototype.toLowerCase.call(e)},d=function(e){return e.replace(/[^\w]/gi,"_")};function m(e){var t=e.openapi;return!!t&&s()(t).call(t,"3")}function v(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=r.v2OperationIdCompatibilityMode;if(!e||"object"!==i()(e))return null;var a=(e.operationId||"").replace(/\s/g,"");return a.length?d(e.operationId):g(t,n,{v2OperationIdCompatibilityMode:o})}function g(e,t){var n,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=r.v2OperationIdCompatibilityMode;if(o){var a,i,u=l()(a="".concat(t.toLowerCase(),"_")).call(a,e).replace(/[\s!@#$%^&*()_+=[{\]};:<>|./?,\\'""-]/g,"_");return(u=u||l()(i="".concat(e.substring(1),"_")).call(i,t)).replace(/((_){2,})/g,"_").replace(/^(_)*/g,"").replace(/([_])*$/g,"")}return l()(n="".concat(h(t))).call(n,d(e))}function y(e,t){var n;return l()(n="".concat(h(t),"-")).call(n,e)}function b(e,t){return e&&e.paths?function(e,t){return function(e,t,n){if(!e||"object"!==i()(e)||!e.paths||"object"!==i()(e.paths))return null;var r=e.paths;for(var o in r)for(var a in r[o])if("PARAMETERS"!==a.toUpperCase()){var u=r[o][a];if(u&&"object"===i()(u)){var s={spec:e,pathName:o,method:a.toUpperCase(),operation:u},c=t(s);if(n&&c)return s}}return}(e,t,!0)||null}(e,(function(e){var n=e.pathName,r=e.method,o=e.operation;if(!o||"object"!==i()(o))return!1;var a=o.operationId;return[v(o,n,r),y(n,r),a].some((function(e){return e&&e===t}))})):null}function w(e){var t=e.spec,n=t.paths,r={};if(!n||t.$$normalized)return e;for(var a in n){var i=n[a];if(p()(i)){var u=i.parameters,s=function(e){var n=i[e];if(!p()(n))return"continue";var s=v(n,a,e);if(s){r[s]?r[s].push(n):r[s]=[n];var c=r[s];if(c.length>1)c.forEach((function(e,t){var n;e.__originalOperationId=e.__originalOperationId||e.operationId,e.operationId=l()(n="".concat(s)).call(n,t+1)}));else if(void 0!==n.operationId){var f=c[0];f.__originalOperationId=f.__originalOperationId||n.operationId,f.operationId=s}}if("parameters"!==e){var h=[],d={};for(var m in t)"produces"!==m&&"consumes"!==m&&"security"!==m||(d[m]=t[m],h.push(d));if(u&&(d.parameters=u,h.push(d)),h.length){var g,y=o()(h);try{for(y.s();!(g=y.n()).done;){var b=g.value;for(var w in b)if(n[w]){if("parameters"===w){var x,_=o()(b[w]);try{var E=function(){var e=x.value;n[w].some((function(t){return t.name&&t.name===e.name||t.$ref&&t.$ref===e.$ref||t.$$ref&&t.$$ref===e.$$ref||t===e}))||n[w].push(e)};for(_.s();!(x=_.n()).done;)E()}catch(e){_.e(e)}finally{_.f()}}}else n[w]=b[w]}}catch(e){y.e(e)}finally{y.f()}}}};for(var c in i)s(c)}}return t.$$normalized=!0,e}},function(e,t,n){"use strict";n.r(t),n.d(t,"NEW_THROWN_ERR",(function(){return o})),n.d(t,"NEW_THROWN_ERR_BATCH",(function(){return a})),n.d(t,"NEW_SPEC_ERR",(function(){return i})),n.d(t,"NEW_SPEC_ERR_BATCH",(function(){return u})),n.d(t,"NEW_AUTH_ERR",(function(){return s})),n.d(t,"CLEAR",(function(){return c})),n.d(t,"CLEAR_BY",(function(){return l})),n.d(t,"newThrownErr",(function(){return f})),n.d(t,"newThrownErrBatch",(function(){return p})),n.d(t,"newSpecErr",(function(){return h})),n.d(t,"newSpecErrBatch",(function(){return d})),n.d(t,"newAuthErr",(function(){return m})),n.d(t,"clear",(function(){return v})),n.d(t,"clearBy",(function(){return g}));var r=n(141),o="err_new_thrown_err",a="err_new_thrown_err_batch",i="err_new_spec_err",u="err_new_spec_err_batch",s="err_new_auth_err",c="err_clear",l="err_clear_by";function f(e){return{type:o,payload:Object(r.serializeError)(e)}}function p(e){return{type:a,payload:e}}function h(e){return{type:i,payload:e}}function d(e){return{type:u,payload:e}}function m(e){return{type:s,payload:e}}function v(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{type:c,payload:e}}function g(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){return!0};return{type:l,payload:e}}},function(e,t,n){var r=n(168),o=n(113);e.exports=function(e){return r(o(e))}},function(e,t,n){var r=n(17),o=n(113),a=r.Object;e.exports=function(e){return a(o(e))}},function(e,t,n){var r=n(17),o=n(48),a=n(330),i=n(51),u=n(169),s=r.TypeError,c=Object.defineProperty;t.f=o?c:function(e,t,n){if(i(e),t=u(t),i(n),a)try{return c(e,t,n)}catch(e){}if("get"in n||"set"in n)throw s("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},function(e,t){"function"==typeof Object.create?e.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:e.exports=function(e,t){if(t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}}},function(e,t,n){var r=n(132),o=r.Buffer;function a(e,t){for(var n in e)t[n]=e[n]}function i(e,t,n){return o(e,t,n)}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?e.exports=r:(a(r,t),t.Buffer=i),a(o,i),i.from=function(e,t,n){if("number"==typeof e)throw new TypeError("Argument must not be a number");return o(e,t,n)},i.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError("Argument must be a number");var r=o(e);return void 0!==t?"string"==typeof n?r.fill(t,n):r.fill(t):r.fill(0),r},i.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return o(e)},i.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r.SlowBuffer(e)}},function(e,t,n){e.exports=n(424)},function(e,t,n){var r=n(17),o=n(75),a=r.String;e.exports=function(e){if("Symbol"===o(e))throw TypeError("Cannot convert a Symbol value to a string");return a(e)}},function(e,t,n){n(77);var r=n(507),o=n(17),a=n(75),i=n(85),u=n(130),s=n(38)("toStringTag");for(var c in r){var l=o[c],f=l&&l.prototype;f&&a(f)!==s&&i(f,s,c),u[c]=u.Array}},function(e,t,n){var r=n(355),o="object"==typeof self&&self&&self.Object===Object&&self,a=r||o||Function("return this")();e.exports=a},function(e,t,n){"use strict";function r(e){return null==e}var o={isNothing:r,isObject:function(e){return"object"==typeof e&&null!==e},toArray:function(e){return Array.isArray(e)?e:r(e)?[]:[e]},repeat:function(e,t){var n,r="";for(n=0;nu&&(t=r-u+(a=" ... ").length),n-r>u&&(n=r+u-(i=" ...").length),{str:a+e.slice(t,n).replace(/\t/g,"→")+i,pos:r-t+a.length}}function c(e,t){return o.repeat(" ",t-e.length)+e}var l=function(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),"number"!=typeof t.indent&&(t.indent=1),"number"!=typeof t.linesBefore&&(t.linesBefore=3),"number"!=typeof t.linesAfter&&(t.linesAfter=2);for(var n,r=/\r?\n|\r|\0/g,a=[0],i=[],u=-1;n=r.exec(e.buffer);)i.push(n.index),a.push(n.index+n[0].length),e.position<=n.index&&u<0&&(u=a.length-2);u<0&&(u=a.length-1);var l,f,p="",h=Math.min(e.line+t.linesAfter,i.length).toString().length,d=t.maxLength-(t.indent+h+3);for(l=1;l<=t.linesBefore&&!(u-l<0);l++)f=s(e.buffer,a[u-l],i[u-l],e.position-(a[u]-a[u-l]),d),p=o.repeat(" ",t.indent)+c((e.line-l+1).toString(),h)+" | "+f.str+"\n"+p;for(f=s(e.buffer,a[u],i[u],e.position,d),p+=o.repeat(" ",t.indent)+c((e.line+1).toString(),h)+" | "+f.str+"\n",p+=o.repeat("-",t.indent+h+3+f.pos)+"^\n",l=1;l<=t.linesAfter&&!(u+l>=i.length);l++)f=s(e.buffer,a[u+l],i[u+l],e.position-(a[u]-a[u+l]),d),p+=o.repeat(" ",t.indent)+c((e.line+l+1).toString(),h)+" | "+f.str+"\n";return p.replace(/\n$/,"")},f=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],p=["scalar","sequence","mapping"];var h=function(e,t){if(t=t||{},Object.keys(t).forEach((function(t){if(-1===f.indexOf(t))throw new u('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')})),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=function(e){var t={};return null!==e&&Object.keys(e).forEach((function(n){e[n].forEach((function(e){t[String(e)]=n}))})),t}(t.styleAliases||null),-1===p.indexOf(this.kind))throw new u('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')};function d(e,t){var n=[];return e[t].forEach((function(e){var t=n.length;n.forEach((function(n,r){n.tag===e.tag&&n.kind===e.kind&&n.multi===e.multi&&(t=r)})),n[t]=e})),n}function m(e){return this.extend(e)}m.prototype.extend=function(e){var t=[],n=[];if(e instanceof h)n.push(e);else if(Array.isArray(e))n=n.concat(e);else{if(!e||!Array.isArray(e.implicit)&&!Array.isArray(e.explicit))throw new u("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");e.implicit&&(t=t.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit))}t.forEach((function(e){if(!(e instanceof h))throw new u("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(e.loadKind&&"scalar"!==e.loadKind)throw new u("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(e.multi)throw new u("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")})),n.forEach((function(e){if(!(e instanceof h))throw new u("Specified list of YAML types (or a single Type object) contains a non-Type object.")}));var r=Object.create(m.prototype);return r.implicit=(this.implicit||[]).concat(t),r.explicit=(this.explicit||[]).concat(n),r.compiledImplicit=d(r,"implicit"),r.compiledExplicit=d(r,"explicit"),r.compiledTypeMap=function(){var e,t,n={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function r(e){e.multi?(n.multi[e.kind].push(e),n.multi.fallback.push(e)):n[e.kind][e.tag]=n.fallback[e.tag]=e}for(e=0,t=arguments.length;e=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),A=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var O=/^[-+]?[0-9]+e/;var C=new h("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(e){return null!==e&&!(!A.test(e)||"_"===e[e.length-1])},construct:function(e){var t,n;return n="-"===(t=e.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:n*parseFloat(t,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!=0||o.isNegativeZero(e))},represent:function(e,t){var n;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(o.isNegativeZero(e))return"-0.0";return n=e.toString(10),O.test(n)?n.replace("e",".e"):n},defaultStyle:"lowercase"}),j=w.extend({implicit:[x,_,k,C]}),T=j,I=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),N=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");var P=new h("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(e){return null!==e&&(null!==I.exec(e)||null!==N.exec(e))},construct:function(e){var t,n,r,o,a,i,u,s,c=0,l=null;if(null===(t=I.exec(e))&&(t=N.exec(e)),null===t)throw new Error("Date resolve error");if(n=+t[1],r=+t[2]-1,o=+t[3],!t[4])return new Date(Date.UTC(n,r,o));if(a=+t[4],i=+t[5],u=+t[6],t[7]){for(c=t[7].slice(0,3);c.length<3;)c+="0";c=+c}return t[9]&&(l=6e4*(60*+t[10]+ +(t[11]||0)),"-"===t[9]&&(l=-l)),s=new Date(Date.UTC(n,r,o,a,i,u,c)),l&&s.setTime(s.getTime()-l),s},instanceOf:Date,represent:function(e){return e.toISOString()}});var M=new h("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(e){return"<<"===e||null===e}}),R="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";var D=new h("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,n,r=0,o=e.length,a=R;for(n=0;n64)){if(t<0)return!1;r+=6}return r%8==0},construct:function(e){var t,n,r=e.replace(/[\r\n=]/g,""),o=r.length,a=R,i=0,u=[];for(t=0;t>16&255),u.push(i>>8&255),u.push(255&i)),i=i<<6|a.indexOf(r.charAt(t));return 0===(n=o%4*6)?(u.push(i>>16&255),u.push(i>>8&255),u.push(255&i)):18===n?(u.push(i>>10&255),u.push(i>>2&255)):12===n&&u.push(i>>4&255),new Uint8Array(u)},predicate:function(e){return"[object Uint8Array]"===Object.prototype.toString.call(e)},represent:function(e){var t,n,r="",o=0,a=e.length,i=R;for(t=0;t>18&63],r+=i[o>>12&63],r+=i[o>>6&63],r+=i[63&o]),o=(o<<8)+e[t];return 0===(n=a%3)?(r+=i[o>>18&63],r+=i[o>>12&63],r+=i[o>>6&63],r+=i[63&o]):2===n?(r+=i[o>>10&63],r+=i[o>>4&63],r+=i[o<<2&63],r+=i[64]):1===n&&(r+=i[o>>2&63],r+=i[o<<4&63],r+=i[64],r+=i[64]),r}}),L=Object.prototype.hasOwnProperty,B=Object.prototype.toString;var F=new h("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(e){if(null===e)return!0;var t,n,r,o,a,i=[],u=e;for(t=0,n=u.length;t>10),56320+(e-65536&1023))}for(var ae=new Array(256),ie=new Array(256),ue=0;ue<256;ue++)ae[ue]=re(ue)?1:0,ie[ue]=re(ue);function se(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||W,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function ce(e,t){var n={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return n.snippet=l(n),new u(t,n)}function le(e,t){throw ce(e,t)}function fe(e,t){e.onWarning&&e.onWarning.call(null,ce(e,t))}var pe={YAML:function(e,t,n){var r,o,a;null!==e.version&&le(e,"duplication of %YAML directive"),1!==n.length&&le(e,"YAML directive accepts exactly one argument"),null===(r=/^([0-9]+)\.([0-9]+)$/.exec(n[0]))&&le(e,"ill-formed argument of the YAML directive"),o=parseInt(r[1],10),a=parseInt(r[2],10),1!==o&&le(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=a<2,1!==a&&2!==a&&fe(e,"unsupported YAML version of the document")},TAG:function(e,t,n){var r,o;2!==n.length&&le(e,"TAG directive accepts exactly two arguments"),r=n[0],o=n[1],Y.test(r)||le(e,"ill-formed tag handle (first argument) of the TAG directive"),H.call(e.tagMap,r)&&le(e,'there is a previously declared suffix for "'+r+'" tag handle'),G.test(o)||le(e,"ill-formed tag prefix (second argument) of the TAG directive");try{o=decodeURIComponent(o)}catch(t){le(e,"tag prefix is malformed: "+o)}e.tagMap[r]=o}};function he(e,t,n,r){var o,a,i,u;if(t1&&(e.result+=o.repeat("\n",t-1))}function we(e,t){var n,r,o=e.tag,a=e.anchor,i=[],u=!1;if(-1!==e.firstTabInLine)return!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=i),r=e.input.charCodeAt(e.position);0!==r&&(-1!==e.firstTabInLine&&(e.position=e.firstTabInLine,le(e,"tab characters must not be used in indentation")),45===r)&&ee(e.input.charCodeAt(e.position+1));)if(u=!0,e.position++,ge(e,!0,-1)&&e.lineIndent<=t)i.push(null),r=e.input.charCodeAt(e.position);else if(n=e.line,Ee(e,t,3,!1,!0),i.push(e.result),ge(e,!0,-1),r=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==r)le(e,"bad indentation of a sequence entry");else if(e.lineIndentt?m=1:e.lineIndent===t?m=0:e.lineIndentt?m=1:e.lineIndent===t?m=0:e.lineIndentt)&&(g&&(i=e.line,u=e.lineStart,s=e.position),Ee(e,t,4,!0,o)&&(g?m=e.result:v=e.result),g||(me(e,p,h,d,m,v,i,u,s),d=m=v=null),ge(e,!0,-1),c=e.input.charCodeAt(e.position)),(e.line===a||e.lineIndent>t)&&0!==c)le(e,"bad indentation of a mapping entry");else if(e.lineIndent=0))break;0===a?le(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):l?le(e,"repeat of an indentation width identifier"):(f=t+a-1,l=!0)}if(X(i)){do{i=e.input.charCodeAt(++e.position)}while(X(i));if(35===i)do{i=e.input.charCodeAt(++e.position)}while(!Z(i)&&0!==i)}for(;0!==i;){for(ve(e),e.lineIndent=0,i=e.input.charCodeAt(e.position);(!l||e.lineIndentf&&(f=e.lineIndent),Z(i))p++;else{if(e.lineIndent0){for(o=i,a=0;o>0;o--)(i=ne(u=e.input.charCodeAt(++e.position)))>=0?a=(a<<4)+i:le(e,"expected hexadecimal character");e.result+=oe(a),e.position++}else le(e,"unknown escape sequence");n=r=e.position}else Z(u)?(he(e,n,r,!0),be(e,ge(e,!1,t)),n=r=e.position):e.position===e.lineStart&&ye(e)?le(e,"unexpected end of the document within a double quoted scalar"):(e.position++,r=e.position)}le(e,"unexpected end of the stream within a double quoted scalar")}(e,h)?g=!0:!function(e){var t,n,r;if(42!==(r=e.input.charCodeAt(e.position)))return!1;for(r=e.input.charCodeAt(++e.position),t=e.position;0!==r&&!ee(r)&&!te(r);)r=e.input.charCodeAt(++e.position);return e.position===t&&le(e,"name of an alias node must contain at least one character"),n=e.input.slice(t,e.position),H.call(e.anchorMap,n)||le(e,'unidentified alias "'+n+'"'),e.result=e.anchorMap[n],ge(e,!0,-1),!0}(e)?function(e,t,n){var r,o,a,i,u,s,c,l,f=e.kind,p=e.result;if(ee(l=e.input.charCodeAt(e.position))||te(l)||35===l||38===l||42===l||33===l||124===l||62===l||39===l||34===l||37===l||64===l||96===l)return!1;if((63===l||45===l)&&(ee(r=e.input.charCodeAt(e.position+1))||n&&te(r)))return!1;for(e.kind="scalar",e.result="",o=a=e.position,i=!1;0!==l;){if(58===l){if(ee(r=e.input.charCodeAt(e.position+1))||n&&te(r))break}else if(35===l){if(ee(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&ye(e)||n&&te(l))break;if(Z(l)){if(u=e.line,s=e.lineStart,c=e.lineIndent,ge(e,!1,-1),e.lineIndent>=t){i=!0,l=e.input.charCodeAt(e.position);continue}e.position=a,e.line=u,e.lineStart=s,e.lineIndent=c;break}}i&&(he(e,o,a,!1),be(e,e.line-u),o=a=e.position,i=!1),X(l)||(a=e.position+1),l=e.input.charCodeAt(++e.position)}return he(e,o,a,!1),!!e.result||(e.kind=f,e.result=p,!1)}(e,h,1===n)&&(g=!0,null===e.tag&&(e.tag="?")):(g=!0,null===e.tag&&null===e.anchor||le(e,"alias node should not have any properties")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===m&&(g=s&&we(e,d))),null===e.tag)null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);else if("?"===e.tag){for(null!==e.result&&"scalar"!==e.kind&&le(e,'unacceptable node kind for ! tag; it should be "scalar", not "'+e.kind+'"'),c=0,l=e.implicitTypes.length;c"),null!==e.result&&p.kind!==e.kind&&le(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+p.kind+'", not "'+e.kind+'"'),p.resolve(e.result,e.tag)?(e.result=p.construct(e.result,e.tag),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):le(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||g}function Se(e){var t,n,r,o,a=e.position,i=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);0!==(o=e.input.charCodeAt(e.position))&&(ge(e,!0,-1),o=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==o));){for(i=!0,o=e.input.charCodeAt(++e.position),t=e.position;0!==o&&!ee(o);)o=e.input.charCodeAt(++e.position);for(r=[],(n=e.input.slice(t,e.position)).length<1&&le(e,"directive name must not be less than one character in length");0!==o;){for(;X(o);)o=e.input.charCodeAt(++e.position);if(35===o){do{o=e.input.charCodeAt(++e.position)}while(0!==o&&!Z(o));break}if(Z(o))break;for(t=e.position;0!==o&&!ee(o);)o=e.input.charCodeAt(++e.position);r.push(e.input.slice(t,e.position))}0!==o&&ve(e),H.call(pe,n)?pe[n](e,n,r):fe(e,'unknown document directive "'+n+'"')}ge(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,ge(e,!0,-1)):i&&le(e,"directives end mark is expected"),Ee(e,e.lineIndent-1,4,!1,!0),ge(e,!0,-1),e.checkLineBreaks&&J.test(e.input.slice(a,e.position))&&fe(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&ye(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,ge(e,!0,-1)):e.position=55296&&r<=56319&&t+1=56320&&n<=57343?1024*(r-55296)+n-56320+65536:r}function Ue(e){return/^\n* /.test(e)}function Ve(e,t,n,r,o,a,i,u){var s,c,l=0,f=null,p=!1,h=!1,d=-1!==r,m=-1,v=Be(c=qe(e,0))&&c!==je&&!Le(c)&&45!==c&&63!==c&&58!==c&&44!==c&&91!==c&&93!==c&&123!==c&&125!==c&&35!==c&&38!==c&&42!==c&&33!==c&&124!==c&&61!==c&&62!==c&&39!==c&&34!==c&&37!==c&&64!==c&&96!==c&&function(e){return!Le(e)&&58!==e}(qe(e,e.length-1));if(t||i)for(s=0;s=65536?s+=2:s++){if(!Be(l=qe(e,s)))return 5;v=v&&ze(l,f,u),f=l}else{for(s=0;s=65536?s+=2:s++){if(10===(l=qe(e,s)))p=!0,d&&(h=h||s-m-1>r&&" "!==e[m+1],m=s);else if(!Be(l))return 5;v=v&&ze(l,f,u),f=l}h=h||d&&s-m-1>r&&" "!==e[m+1]}return p||h?n>9&&Ue(e)?5:i?2===a?5:2:h?4:3:!v||i||o(e)?2===a?5:2:1}function We(e,t,n,r,o){e.dump=function(){if(0===t.length)return 2===e.quotingType?'""':"''";if(!e.noCompatMode&&(-1!==Ie.indexOf(t)||Ne.test(t)))return 2===e.quotingType?'"'+t+'"':"'"+t+"'";var a=e.indent*Math.max(1,n),i=-1===e.lineWidth?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-a),s=r||e.flowLevel>-1&&n>=e.flowLevel;switch(Ve(t,s,e.indent,i,(function(t){return function(e,t){var n,r;for(n=0,r=e.implicitTypes.length;n"+He(t,e.indent)+$e(Re(function(e,t){var n,r,o=/(\n+)([^\n]*)/g,a=(u=e.indexOf("\n"),u=-1!==u?u:e.length,o.lastIndex=u,Je(e.slice(0,u),t)),i="\n"===e[0]||" "===e[0];var u;for(;r=o.exec(e);){var s=r[1],c=r[2];n=" "===c[0],a+=s+(i||n||""===c?"":"\n")+Je(c,t),i=n}return a}(t,i),a));case 5:return'"'+function(e){for(var t,n="",r=0,o=0;o=65536?o+=2:o++)r=qe(e,o),!(t=Te[r])&&Be(r)?(n+=e[o],r>=65536&&(n+=e[o+1])):n+=t||Pe(r);return n}(t)+'"';default:throw new u("impossible error: invalid scalar style")}}()}function He(e,t){var n=Ue(e)?String(t):"",r="\n"===e[e.length-1];return n+(r&&("\n"===e[e.length-2]||"\n"===e)?"+":r?"":"-")+"\n"}function $e(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function Je(e,t){if(""===e||" "===e[0])return e;for(var n,r,o=/ [^ ]/g,a=0,i=0,u=0,s="";n=o.exec(e);)(u=n.index)-a>t&&(r=i>a?i:u,s+="\n"+e.slice(a,r),a=r+1),i=u;return s+="\n",e.length-a>t&&i>a?s+=e.slice(a,i)+"\n"+e.slice(i+1):s+=e.slice(a),s.slice(1)}function Ke(e,t,n,r){var o,a,i,u="",s=e.tag;for(o=0,a=n.length;o tag resolver accepts not "'+c+'" style');r=s.represent[c](t,c)}e.dump=r}return!0}return!1}function Ge(e,t,n,r,o,a,i){e.tag=null,e.dump=n,Ye(e,n,!1)||Ye(e,n,!0);var s,c=Oe.call(e.dump),l=r;r&&(r=e.flowLevel<0||e.flowLevel>t);var f,p,h="[object Object]"===c||"[object Array]"===c;if(h&&(p=-1!==(f=e.duplicates.indexOf(n))),(null!==e.tag&&"?"!==e.tag||p||2!==e.indent&&t>0)&&(o=!1),p&&e.usedDuplicates[f])e.dump="*ref_"+f;else{if(h&&p&&!e.usedDuplicates[f]&&(e.usedDuplicates[f]=!0),"[object Object]"===c)r&&0!==Object.keys(e.dump).length?(!function(e,t,n,r){var o,a,i,s,c,l,f="",p=e.tag,h=Object.keys(n);if(!0===e.sortKeys)h.sort();else if("function"==typeof e.sortKeys)h.sort(e.sortKeys);else if(e.sortKeys)throw new u("sortKeys must be a boolean or a function");for(o=0,a=h.length;o1024)&&(e.dump&&10===e.dump.charCodeAt(0)?l+="?":l+="? "),l+=e.dump,c&&(l+=De(e,t)),Ge(e,t+1,s,!0,c)&&(e.dump&&10===e.dump.charCodeAt(0)?l+=":":l+=": ",f+=l+=e.dump));e.tag=p,e.dump=f||"{}"}(e,t,e.dump,o),p&&(e.dump="&ref_"+f+e.dump)):(!function(e,t,n){var r,o,a,i,u,s="",c=e.tag,l=Object.keys(n);for(r=0,o=l.length;r1024&&(u+="? "),u+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),Ge(e,t,i,!1,!1)&&(s+=u+=e.dump));e.tag=c,e.dump="{"+s+"}"}(e,t,e.dump),p&&(e.dump="&ref_"+f+" "+e.dump));else if("[object Array]"===c)r&&0!==e.dump.length?(e.noArrayIndent&&!i&&t>0?Ke(e,t-1,e.dump,o):Ke(e,t,e.dump,o),p&&(e.dump="&ref_"+f+e.dump)):(!function(e,t,n){var r,o,a,i="",u=e.tag;for(r=0,o=n.length;r",e.dump=s+" "+e.dump)}return!0}function Qe(e,t){var n,r,o=[],a=[];for(Ze(e,o,a),n=0,r=a.length;n=t.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:r,done:!1}:"values"==n?{value:t[r],done:!1}:{value:[r,t[r]],done:!1}}),"values"),a.Arguments=a.Array,o("keys"),o("values"),o("entries")},function(e,t){e.exports=function(e){return null!=e&&"object"==typeof e}},function(e,t,n){"use strict";(function(t){function n(e){return e instanceof t||e instanceof Date||e instanceof RegExp}function r(e){if(e instanceof t){var n=t.alloc?t.alloc(e.length):new t(e.length);return e.copy(n),n}if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e);throw new Error("Unexpected situation")}function o(e){var t=[];return e.forEach((function(e,a){"object"==typeof e&&null!==e?Array.isArray(e)?t[a]=o(e):n(e)?t[a]=r(e):t[a]=i({},e):t[a]=e})),t}function a(e,t){return"__proto__"===t?void 0:e[t]}var i=e.exports=function(){if(arguments.length<1||"object"!=typeof arguments[0])return!1;if(arguments.length<2)return arguments[0];var e,t,u=arguments[0],s=Array.prototype.slice.call(arguments,1);return s.forEach((function(s){"object"!=typeof s||null===s||Array.isArray(s)||Object.keys(s).forEach((function(c){return t=a(u,c),(e=a(s,c))===u?void 0:"object"!=typeof e||null===e?void(u[c]=e):Array.isArray(e)?void(u[c]=o(e)):n(e)?void(u[c]=r(e)):"object"!=typeof t||null===t||Array.isArray(t)?void(u[c]=i({},e)):void(u[c]=i(t,e))}))})),u}}).call(this,n(132).Buffer)},function(e,t,n){e.exports=n(619)},function(e,t,n){"use strict";var r=n(946),o=n(947);function a(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}t.parse=b,t.resolve=function(e,t){return b(e,!1,!0).resolve(t)},t.resolveObject=function(e,t){return e?b(e,!1,!0).resolveObject(t):t},t.format=function(e){o.isString(e)&&(e=b(e));return e instanceof a?e.format():a.prototype.format.call(e)},t.Url=a;var i=/^([a-z0-9.+-]+:)/i,u=/:[0-9]*$/,s=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,c=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),l=["'"].concat(c),f=["%","/","?",";","#"].concat(l),p=["/","?","#"],h=/^[+a-z0-9A-Z_-]{0,63}$/,d=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,m={javascript:!0,"javascript:":!0},v={javascript:!0,"javascript:":!0},g={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},y=n(948);function b(e,t,n){if(e&&o.isObject(e)&&e instanceof a)return e;var r=new a;return r.parse(e,t,n),r}a.prototype.parse=function(e,t,n){if(!o.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var a=e.indexOf("?"),u=-1!==a&&a127?P+="x":P+=N[M];if(!P.match(h)){var D=T.slice(0,O),L=T.slice(O+1),B=N.match(d);B&&(D.push(B[1]),L.unshift(B[2])),L.length&&(b="/"+L.join(".")+b),this.hostname=D.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),j||(this.hostname=r.toASCII(this.hostname));var F=this.port?":"+this.port:"",z=this.hostname||"";this.host=z+F,this.href+=this.host,j&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==b[0]&&(b="/"+b))}if(!m[_])for(O=0,I=l.length;O0)&&n.host.split("@"))&&(n.auth=j.shift(),n.host=n.hostname=j.shift());return n.search=e.search,n.query=e.query,o.isNull(n.pathname)&&o.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.href=n.format(),n}if(!E.length)return n.pathname=null,n.search?n.path="/"+n.search:n.path=null,n.href=n.format(),n;for(var k=E.slice(-1)[0],A=(n.host||e.host||E.length>1)&&("."===k||".."===k)||""===k,O=0,C=E.length;C>=0;C--)"."===(k=E[C])?E.splice(C,1):".."===k?(E.splice(C,1),O++):O&&(E.splice(C,1),O--);if(!x&&!_)for(;O--;O)E.unshift("..");!x||""===E[0]||E[0]&&"/"===E[0].charAt(0)||E.unshift(""),A&&"/"!==E.join("/").substr(-1)&&E.push("");var j,T=""===E[0]||E[0]&&"/"===E[0].charAt(0);S&&(n.hostname=n.host=T?"":E.length?E.shift():"",(j=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=j.shift(),n.host=n.hostname=j.shift()));return(x=x||n.host&&E.length)&&!T&&E.unshift(""),E.length?n.pathname=E.join("/"):(n.pathname=null,n.path=null),o.isNull(n.pathname)&&o.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.auth=e.auth||n.auth,n.slashes=n.slashes||e.slashes,n.href=n.format(),n},a.prototype.parseHost=function(){var e=this.host,t=u.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},function(e,t,n){"use strict";n.r(t),n.d(t,"SHOW_AUTH_POPUP",(function(){return h})),n.d(t,"AUTHORIZE",(function(){return d})),n.d(t,"LOGOUT",(function(){return m})),n.d(t,"PRE_AUTHORIZE_OAUTH2",(function(){return v})),n.d(t,"AUTHORIZE_OAUTH2",(function(){return g})),n.d(t,"VALIDATE",(function(){return y})),n.d(t,"CONFIGURE_AUTH",(function(){return b})),n.d(t,"RESTORE_AUTHORIZATION",(function(){return w})),n.d(t,"showDefinitions",(function(){return x})),n.d(t,"authorize",(function(){return _})),n.d(t,"authorizeWithPersistOption",(function(){return E})),n.d(t,"logout",(function(){return S})),n.d(t,"logoutWithPersistOption",(function(){return k})),n.d(t,"preAuthorizeImplicit",(function(){return A})),n.d(t,"authorizeOauth2",(function(){return O})),n.d(t,"authorizeOauth2WithPersistOption",(function(){return C})),n.d(t,"authorizePassword",(function(){return j})),n.d(t,"authorizeApplication",(function(){return T})),n.d(t,"authorizeAccessCodeWithFormParams",(function(){return I})),n.d(t,"authorizeAccessCodeWithBasicAuthentication",(function(){return N})),n.d(t,"authorizeRequest",(function(){return P})),n.d(t,"configureAuth",(function(){return M})),n.d(t,"restoreAuthorization",(function(){return R})),n.d(t,"persistAuthorizationIfNeeded",(function(){return D}));var r=n(19),o=n.n(r),a=n(32),i=n.n(a),u=n(21),s=n.n(u),c=n(89),l=n.n(c),f=n(26),p=n(5),h="show_popup",d="authorize",m="logout",v="pre_authorize_oauth2",g="authorize_oauth2",y="validate",b="configure_auth",w="restore_authorization";function x(e){return{type:h,payload:e}}function _(e){return{type:d,payload:e}}var E=function(e){return function(t){var n=t.authActions;n.authorize(e),n.persistAuthorizationIfNeeded()}};function S(e){return{type:m,payload:e}}var k=function(e){return function(t){var n=t.authActions;n.logout(e),n.persistAuthorizationIfNeeded()}},A=function(e){return function(t){var n=t.authActions,r=t.errActions,o=e.auth,a=e.token,u=e.isValid,s=o.schema,c=o.name,l=s.get("flow");delete f.a.swaggerUIRedirectOauth2,"accessCode"===l||u||r.newAuthErr({authId:c,source:"auth",level:"warning",message:"Authorization may be unsafe, passed state was changed in server Passed state wasn't returned from auth server"}),a.error?r.newAuthErr({authId:c,source:"auth",level:"error",message:i()(a)}):n.authorizeOauth2WithPersistOption({auth:o,token:a})}};function O(e){return{type:g,payload:e}}var C=function(e){return function(t){var n=t.authActions;n.authorizeOauth2(e),n.persistAuthorizationIfNeeded()}},j=function(e){return function(t){var n=t.authActions,r=e.schema,o=e.name,a=e.username,i=e.password,u=e.passwordType,c=e.clientId,l=e.clientSecret,f={grant_type:"password",scope:e.scopes.join(" "),username:a,password:i},h={};switch(u){case"request-body":!function(e,t,n){t&&s()(e,{client_id:t});n&&s()(e,{client_secret:n})}(f,c,l);break;case"basic":h.Authorization="Basic "+Object(p.a)(c+":"+l);break;default:console.warn("Warning: invalid passwordType ".concat(u," was passed, not including client id and secret"))}return n.authorizeRequest({body:Object(p.b)(f),url:r.get("tokenUrl"),name:o,headers:h,query:{},auth:e})}};var T=function(e){return function(t){var n=t.authActions,r=e.schema,o=e.scopes,a=e.name,i=e.clientId,u=e.clientSecret,s={Authorization:"Basic "+Object(p.a)(i+":"+u)},c={grant_type:"client_credentials",scope:o.join(" ")};return n.authorizeRequest({body:Object(p.b)(c),name:a,url:r.get("tokenUrl"),auth:e,headers:s})}},I=function(e){var t=e.auth,n=e.redirectUrl;return function(e){var r=e.authActions,o=t.schema,a=t.name,i=t.clientId,u=t.clientSecret,s=t.codeVerifier,c={grant_type:"authorization_code",code:t.code,client_id:i,client_secret:u,redirect_uri:n,code_verifier:s};return r.authorizeRequest({body:Object(p.b)(c),name:a,url:o.get("tokenUrl"),auth:t})}},N=function(e){var t=e.auth,n=e.redirectUrl;return function(e){var r=e.authActions,o=t.schema,a=t.name,i=t.clientId,u=t.clientSecret,s=t.codeVerifier,c={Authorization:"Basic "+Object(p.a)(i+":"+u)},l={grant_type:"authorization_code",code:t.code,client_id:i,redirect_uri:n,code_verifier:s};return r.authorizeRequest({body:Object(p.b)(l),name:a,url:o.get("tokenUrl"),auth:t,headers:c})}},P=function(e){return function(t){var n,r=t.fn,a=t.getConfigs,u=t.authActions,c=t.errActions,f=t.oas3Selectors,p=t.specSelectors,h=t.authSelectors,d=e.body,m=e.query,v=void 0===m?{}:m,g=e.headers,y=void 0===g?{}:g,b=e.name,w=e.url,x=e.auth,_=(h.getConfigs()||{}).additionalQueryStringParams;if(p.isOAS3()){var E=f.serverEffectiveValue(f.selectedServer());n=l()(w,E,!0)}else n=l()(w,p.url(),!0);"object"===o()(_)&&(n.query=s()({},n.query,_));var S=n.toString(),k=s()({Accept:"application/json, text/plain, */*","Content-Type":"application/x-www-form-urlencoded","X-Requested-With":"XMLHttpRequest"},y);r.fetch({url:S,method:"post",headers:k,query:v,body:d,requestInterceptor:a().requestInterceptor,responseInterceptor:a().responseInterceptor}).then((function(e){var t=JSON.parse(e.data),n=t&&(t.error||""),r=t&&(t.parseError||"");e.ok?n||r?c.newAuthErr({authId:b,level:"error",source:"auth",message:i()(t)}):u.authorizeOauth2WithPersistOption({auth:x,token:t}):c.newAuthErr({authId:b,level:"error",source:"auth",message:e.statusText})})).catch((function(e){var t=new Error(e).message;if(e.response&&e.response.data){var n=e.response.data;try{var r="string"==typeof n?JSON.parse(n):n;r.error&&(t+=", error: ".concat(r.error)),r.error_description&&(t+=", description: ".concat(r.error_description))}catch(e){}}c.newAuthErr({authId:b,level:"error",source:"auth",message:t})}))}};function M(e){return{type:b,payload:e}}function R(e){return{type:w,payload:e}}var D=function(){return function(e){var t=e.authSelectors;if((0,e.getConfigs)().persistAuthorization){var n=t.authorized();localStorage.setItem("authorized",i()(n.toJS()))}}}},function(e,t,n){var r=n(919);e.exports=function(e){for(var t=1;tS;S++)if((h||S in x)&&(b=_(y=x[S],S,w),e))if(t)A[S]=b;else if(b)switch(e){case 3:return!0;case 5:return y;case 6:return S;case 2:c(A,y)}else switch(e){case 4:return!1;case 7:c(A,y)}return f?-1:o||l?l:A}};e.exports={forEach:l(0),map:l(1),filter:l(2),some:l(3),every:l(4),find:l(5),findIndex:l(6),filterReject:l(7)}},function(e,t,n){"use strict";n.r(t),n.d(t,"lastError",(function(){return M})),n.d(t,"url",(function(){return R})),n.d(t,"specStr",(function(){return D})),n.d(t,"specSource",(function(){return L})),n.d(t,"specJson",(function(){return B})),n.d(t,"specResolved",(function(){return F})),n.d(t,"specResolvedSubtree",(function(){return z})),n.d(t,"specJsonWithResolvedSubtrees",(function(){return U})),n.d(t,"spec",(function(){return V})),n.d(t,"isOAS3",(function(){return W})),n.d(t,"info",(function(){return H})),n.d(t,"externalDocs",(function(){return $})),n.d(t,"version",(function(){return J})),n.d(t,"semver",(function(){return K})),n.d(t,"paths",(function(){return Y})),n.d(t,"operations",(function(){return G})),n.d(t,"consumes",(function(){return Q})),n.d(t,"produces",(function(){return Z})),n.d(t,"security",(function(){return X})),n.d(t,"securityDefinitions",(function(){return ee})),n.d(t,"findDefinition",(function(){return te})),n.d(t,"definitions",(function(){return ne})),n.d(t,"basePath",(function(){return re})),n.d(t,"host",(function(){return oe})),n.d(t,"schemes",(function(){return ae})),n.d(t,"operationsWithRootInherited",(function(){return ie})),n.d(t,"tags",(function(){return ue})),n.d(t,"tagDetails",(function(){return se})),n.d(t,"operationsWithTags",(function(){return ce})),n.d(t,"taggedOperations",(function(){return le})),n.d(t,"responses",(function(){return fe})),n.d(t,"requests",(function(){return pe})),n.d(t,"mutatedRequests",(function(){return he})),n.d(t,"responseFor",(function(){return de})),n.d(t,"requestFor",(function(){return me})),n.d(t,"mutatedRequestFor",(function(){return ve})),n.d(t,"allowTryItOutFor",(function(){return ge})),n.d(t,"parameterWithMetaByIdentity",(function(){return ye})),n.d(t,"parameterInclusionSettingFor",(function(){return be})),n.d(t,"parameterWithMeta",(function(){return we})),n.d(t,"operationWithMeta",(function(){return xe})),n.d(t,"getParameter",(function(){return _e})),n.d(t,"hasHost",(function(){return Ee})),n.d(t,"parameterValues",(function(){return Se})),n.d(t,"parametersIncludeIn",(function(){return ke})),n.d(t,"parametersIncludeType",(function(){return Ae})),n.d(t,"contentTypeValues",(function(){return Oe})),n.d(t,"currentProducesFor",(function(){return Ce})),n.d(t,"producesOptionsFor",(function(){return je})),n.d(t,"consumesOptionsFor",(function(){return Te})),n.d(t,"operationScheme",(function(){return Ie})),n.d(t,"canExecuteScheme",(function(){return Ne})),n.d(t,"validateBeforeExecute",(function(){return Pe})),n.d(t,"getOAS3RequiredRequestBodyContentType",(function(){return Me})),n.d(t,"isMediaTypeSchemaPropertiesEqual",(function(){return Re}));var r=n(13),o=n.n(r),a=n(14),i=n.n(a),u=n(2),s=n.n(u),c=n(20),l=n.n(c),f=n(23),p=n.n(f),h=n(18),d=n.n(h),m=n(4),v=n.n(m),g=n(12),y=n.n(g),b=n(56),w=n.n(b),x=n(30),_=n.n(x),E=n(196),S=n.n(E),k=n(71),A=n.n(k),O=n(24),C=n.n(O),j=n(16),T=n(5),I=n(1),N=["get","put","post","delete","options","head","patch","trace"],P=function(e){return e||Object(I.Map)()},M=Object(j.a)(P,(function(e){return e.get("lastError")})),R=Object(j.a)(P,(function(e){return e.get("url")})),D=Object(j.a)(P,(function(e){return e.get("spec")||""})),L=Object(j.a)(P,(function(e){return e.get("specSource")||"not-editor"})),B=Object(j.a)(P,(function(e){return e.get("json",Object(I.Map)())})),F=Object(j.a)(P,(function(e){return e.get("resolved",Object(I.Map)())})),z=function(e,t){var n;return e.getIn(s()(n=["resolvedSubtrees"]).call(n,i()(t)),void 0)},q=function e(t,n){return I.Map.isMap(t)&&I.Map.isMap(n)?n.get("$$ref")?n:Object(I.OrderedMap)().mergeWith(e,t,n):n},U=Object(j.a)(P,(function(e){return Object(I.OrderedMap)().mergeWith(q,e.get("json"),e.get("resolvedSubtrees"))})),V=function(e){return B(e)},W=Object(j.a)(V,(function(){return!1})),H=Object(j.a)(V,(function(e){return De(e&&e.get("info"))})),$=Object(j.a)(V,(function(e){return De(e&&e.get("externalDocs"))})),J=Object(j.a)(H,(function(e){return e&&e.get("version")})),K=Object(j.a)(J,(function(e){var t;return l()(t=/v?([0-9]*)\.([0-9]*)\.([0-9]*)/i.exec(e)).call(t,1)})),Y=Object(j.a)(U,(function(e){return e.get("paths")})),G=Object(j.a)(Y,(function(e){if(!e||e.size<1)return Object(I.List)();var t=Object(I.List)();return e&&p()(e)?(p()(e).call(e,(function(e,n){if(!e||!p()(e))return{};p()(e).call(e,(function(e,r){var o;d()(N).call(N,r)<0||(t=t.push(Object(I.fromJS)({path:n,method:r,operation:e,id:s()(o="".concat(r,"-")).call(o,n)})))}))})),t):Object(I.List)()})),Q=Object(j.a)(V,(function(e){return Object(I.Set)(e.get("consumes"))})),Z=Object(j.a)(V,(function(e){return Object(I.Set)(e.get("produces"))})),X=Object(j.a)(V,(function(e){return e.get("security",Object(I.List)())})),ee=Object(j.a)(V,(function(e){return e.get("securityDefinitions")})),te=function(e,t){var n=e.getIn(["resolvedSubtrees","definitions",t],null),r=e.getIn(["json","definitions",t],null);return n||r||null},ne=Object(j.a)(V,(function(e){var t=e.get("definitions");return I.Map.isMap(t)?t:Object(I.Map)()})),re=Object(j.a)(V,(function(e){return e.get("basePath")})),oe=Object(j.a)(V,(function(e){return e.get("host")})),ae=Object(j.a)(V,(function(e){return e.get("schemes",Object(I.Map)())})),ie=Object(j.a)(G,Q,Z,(function(e,t,n){return v()(e).call(e,(function(e){return e.update("operation",(function(e){if(e){if(!I.Map.isMap(e))return;return e.withMutations((function(e){return e.get("consumes")||e.update("consumes",(function(e){return Object(I.Set)(e).merge(t)})),e.get("produces")||e.update("produces",(function(e){return Object(I.Set)(e).merge(n)})),e}))}return Object(I.Map)()}))}))})),ue=Object(j.a)(V,(function(e){var t=e.get("tags",Object(I.List)());return I.List.isList(t)?y()(t).call(t,(function(e){return I.Map.isMap(e)})):Object(I.List)()})),se=function(e,t){var n,r=ue(e)||Object(I.List)();return w()(n=y()(r).call(r,I.Map.isMap)).call(n,(function(e){return e.get("name")===t}),Object(I.Map)())},ce=Object(j.a)(ie,ue,(function(e,t){return _()(e).call(e,(function(e,t){var n=Object(I.Set)(t.getIn(["operation","tags"]));return n.count()<1?e.update("default",Object(I.List)(),(function(e){return e.push(t)})):_()(n).call(n,(function(e,n){return e.update(n,Object(I.List)(),(function(e){return e.push(t)}))}),e)}),_()(t).call(t,(function(e,t){return e.set(t.get("name"),Object(I.List)())}),Object(I.OrderedMap)()))})),le=function(e){return function(t){var n,r=(0,t.getConfigs)(),o=r.tagsSorter,a=r.operationsSorter;return v()(n=ce(e).sortBy((function(e,t){return t}),(function(e,t){var n="function"==typeof o?o:T.H.tagsSorter[o];return n?n(e,t):null}))).call(n,(function(t,n){var r="function"==typeof a?a:T.H.operationsSorter[a],o=r?S()(t).call(t,r):t;return Object(I.Map)({tagDetails:se(e,n),operations:o})}))}},fe=Object(j.a)(P,(function(e){return e.get("responses",Object(I.Map)())})),pe=Object(j.a)(P,(function(e){return e.get("requests",Object(I.Map)())})),he=Object(j.a)(P,(function(e){return e.get("mutatedRequests",Object(I.Map)())})),de=function(e,t,n){return fe(e).getIn([t,n],null)},me=function(e,t,n){return pe(e).getIn([t,n],null)},ve=function(e,t,n){return he(e).getIn([t,n],null)},ge=function(){return!0},ye=function(e,t,n){var r,o,a=U(e).getIn(s()(r=["paths"]).call(r,i()(t),["parameters"]),Object(I.OrderedMap)()),u=e.getIn(s()(o=["meta","paths"]).call(o,i()(t),["parameters"]),Object(I.OrderedMap)()),c=v()(a).call(a,(function(e){var t,r,o,a=u.get(s()(t="".concat(n.get("in"),".")).call(t,n.get("name"))),i=u.get(s()(r=s()(o="".concat(n.get("in"),".")).call(o,n.get("name"),".hash-")).call(r,n.hashCode()));return Object(I.OrderedMap)().merge(e,a,i)}));return w()(c).call(c,(function(e){return e.get("in")===n.get("in")&&e.get("name")===n.get("name")}),Object(I.OrderedMap)())},be=function(e,t,n,r){var o,a,u=s()(o="".concat(r,".")).call(o,n);return e.getIn(s()(a=["meta","paths"]).call(a,i()(t),["parameter_inclusions",u]),!1)},we=function(e,t,n,r){var o,a=U(e).getIn(s()(o=["paths"]).call(o,i()(t),["parameters"]),Object(I.OrderedMap)()),u=w()(a).call(a,(function(e){return e.get("in")===r&&e.get("name")===n}),Object(I.OrderedMap)());return ye(e,t,u)},xe=function(e,t,n){var r,o=U(e).getIn(["paths",t,n],Object(I.OrderedMap)()),a=e.getIn(["meta","paths",t,n],Object(I.OrderedMap)()),i=v()(r=o.get("parameters",Object(I.List)())).call(r,(function(r){return ye(e,[t,n],r)}));return Object(I.OrderedMap)().merge(o,a).set("parameters",i)};function _e(e,t,n,r){var o;t=t||[];var a=e.getIn(s()(o=["meta","paths"]).call(o,i()(t),["parameters"]),Object(I.fromJS)([]));return w()(a).call(a,(function(e){return I.Map.isMap(e)&&e.get("name")===n&&e.get("in")===r}))||Object(I.Map)()}var Ee=Object(j.a)(V,(function(e){var t=e.get("host");return"string"==typeof t&&t.length>0&&"/"!==t[0]}));function Se(e,t,n){var r;t=t||[];var o=xe.apply(void 0,s()(r=[e]).call(r,i()(t))).get("parameters",Object(I.List)());return _()(o).call(o,(function(e,t){var r=n&&"body"===t.get("in")?t.get("value_xml"):t.get("value");return e.set(Object(T.A)(t,{allowHashes:!1}),r)}),Object(I.fromJS)({}))}function ke(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(I.List.isList(e))return A()(e).call(e,(function(e){return I.Map.isMap(e)&&e.get("in")===t}))}function Ae(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(I.List.isList(e))return A()(e).call(e,(function(e){return I.Map.isMap(e)&&e.get("type")===t}))}function Oe(e,t){var n,r;t=t||[];var o=U(e).getIn(s()(n=["paths"]).call(n,i()(t)),Object(I.fromJS)({})),a=e.getIn(s()(r=["meta","paths"]).call(r,i()(t)),Object(I.fromJS)({})),u=Ce(e,t),c=o.get("parameters")||new I.List,l=a.get("consumes_value")?a.get("consumes_value"):Ae(c,"file")?"multipart/form-data":Ae(c,"formData")?"application/x-www-form-urlencoded":void 0;return Object(I.fromJS)({requestContentType:l,responseContentType:u})}function Ce(e,t){var n,r;t=t||[];var o=U(e).getIn(s()(n=["paths"]).call(n,i()(t)),null);if(null!==o){var a=e.getIn(s()(r=["meta","paths"]).call(r,i()(t),["produces_value"]),null),u=o.getIn(["produces",0],null);return a||u||"application/json"}}function je(e,t){var n;t=t||[];var r=U(e),a=r.getIn(s()(n=["paths"]).call(n,i()(t)),null);if(null!==a){var u=t,c=o()(u,1)[0],l=a.get("produces",null),f=r.getIn(["paths",c,"produces"],null),p=r.getIn(["produces"],null);return l||f||p}}function Te(e,t){var n;t=t||[];var r=U(e),a=r.getIn(s()(n=["paths"]).call(n,i()(t)),null);if(null!==a){var u=t,c=o()(u,1)[0],l=a.get("consumes",null),f=r.getIn(["paths",c,"consumes"],null),p=r.getIn(["consumes"],null);return l||f||p}}var Ie=function(e,t,n){var r=e.get("url").match(/^([a-z][a-z0-9+\-.]*):/),o=C()(r)?r[1]:null;return e.getIn(["scheme",t,n])||e.getIn(["scheme","_defaultScheme"])||o||""},Ne=function(e,t,n){var r;return d()(r=["http","https"]).call(r,Ie(e,t,n))>-1},Pe=function(e,t){var n;t=t||[];var r=e.getIn(s()(n=["meta","paths"]).call(n,i()(t),["parameters"]),Object(I.fromJS)([])),o=!0;return p()(r).call(r,(function(e){var t=e.get("errors");t&&t.count()&&(o=!1)})),o},Me=function(e,t){var n,r,o={requestBody:!1,requestContentType:{}},a=e.getIn(s()(n=["resolvedSubtrees","paths"]).call(n,i()(t),["requestBody"]),Object(I.fromJS)([]));return a.size<1||(a.getIn(["required"])&&(o.requestBody=a.getIn(["required"])),p()(r=a.getIn(["content"]).entrySeq()).call(r,(function(e){var t=e[0];if(e[1].getIn(["schema","required"])){var n=e[1].getIn(["schema","required"]).toJS();o.requestContentType[t]=n}}))),o},Re=function(e,t,n,r){var o;if((n||r)&&n===r)return!0;var a=e.getIn(s()(o=["resolvedSubtrees","paths"]).call(o,i()(t),["requestBody","content"]),Object(I.fromJS)([]));if(a.size<2||!n||!r)return!1;var u=a.getIn([n,"schema","properties"],Object(I.fromJS)([])),c=a.getIn([r,"schema","properties"],Object(I.fromJS)([]));return!!u.equals(c)};function De(e){return I.Map.isMap(e)?e:new I.Map}},function(e,t,n){"use strict";(function(t){var r=n(847),o=n(848),a=/^[A-Za-z][A-Za-z0-9+-.]*:\/\//,i=/^([a-z][a-z0-9.+-]*:)?(\/\/)?([\\/]+)?([\S\s]*)/i,u=/^[a-zA-Z]:/,s=new RegExp("^[\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF]+");function c(e){return(e||"").toString().replace(s,"")}var l=[["#","hash"],["?","query"],function(e,t){return h(t.protocol)?e.replace(/\\/g,"/"):e},["/","pathname"],["@","auth",1],[NaN,"host",void 0,1,1],[/:(\d+)$/,"port",void 0,1],[NaN,"hostname",void 0,1,1]],f={hash:1,query:1};function p(e){var n,r=("undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{}).location||{},o={},i=typeof(e=e||r);if("blob:"===e.protocol)o=new m(unescape(e.pathname),{});else if("string"===i)for(n in o=new m(e,{}),f)delete o[n];else if("object"===i){for(n in e)n in f||(o[n]=e[n]);void 0===o.slashes&&(o.slashes=a.test(e.href))}return o}function h(e){return"file:"===e||"ftp:"===e||"http:"===e||"https:"===e||"ws:"===e||"wss:"===e}function d(e,t){e=c(e),t=t||{};var n,r=i.exec(e),o=r[1]?r[1].toLowerCase():"",a=!!r[2],u=!!r[3],s=0;return a?u?(n=r[2]+r[3]+r[4],s=r[2].length+r[3].length):(n=r[2]+r[4],s=r[2].length):u?(n=r[3]+r[4],s=r[3].length):n=r[4],"file:"===o?s>=2&&(n=n.slice(2)):h(o)?n=r[4]:o?a&&(n=n.slice(2)):s>=2&&h(t.protocol)&&(n=r[4]),{protocol:o,slashes:a||h(o),slashesCount:s,rest:n}}function m(e,t,n){if(e=c(e),!(this instanceof m))return new m(e,t,n);var a,i,s,f,v,g,y=l.slice(),b=typeof t,w=this,x=0;for("object"!==b&&"string"!==b&&(n=t,t=null),n&&"function"!=typeof n&&(n=o.parse),a=!(i=d(e||"",t=p(t))).protocol&&!i.slashes,w.slashes=i.slashes||a&&t.slashes,w.protocol=i.protocol||t.protocol||"",e=i.rest,("file:"===i.protocol&&(2!==i.slashesCount||u.test(e))||!i.slashes&&(i.protocol||i.slashesCount<2||!h(w.protocol)))&&(y[3]=[/(.*)/,"pathname"]);x=4?[t[0],t[1],t[2],t[3],"".concat(t[0],".").concat(t[1]),"".concat(t[0],".").concat(t[2]),"".concat(t[0],".").concat(t[3]),"".concat(t[1],".").concat(t[0]),"".concat(t[1],".").concat(t[2]),"".concat(t[1],".").concat(t[3]),"".concat(t[2],".").concat(t[0]),"".concat(t[2],".").concat(t[1]),"".concat(t[2],".").concat(t[3]),"".concat(t[3],".").concat(t[0]),"".concat(t[3],".").concat(t[1]),"".concat(t[3],".").concat(t[2]),"".concat(t[0],".").concat(t[1],".").concat(t[2]),"".concat(t[0],".").concat(t[1],".").concat(t[3]),"".concat(t[0],".").concat(t[2],".").concat(t[1]),"".concat(t[0],".").concat(t[2],".").concat(t[3]),"".concat(t[0],".").concat(t[3],".").concat(t[1]),"".concat(t[0],".").concat(t[3],".").concat(t[2]),"".concat(t[1],".").concat(t[0],".").concat(t[2]),"".concat(t[1],".").concat(t[0],".").concat(t[3]),"".concat(t[1],".").concat(t[2],".").concat(t[0]),"".concat(t[1],".").concat(t[2],".").concat(t[3]),"".concat(t[1],".").concat(t[3],".").concat(t[0]),"".concat(t[1],".").concat(t[3],".").concat(t[2]),"".concat(t[2],".").concat(t[0],".").concat(t[1]),"".concat(t[2],".").concat(t[0],".").concat(t[3]),"".concat(t[2],".").concat(t[1],".").concat(t[0]),"".concat(t[2],".").concat(t[1],".").concat(t[3]),"".concat(t[2],".").concat(t[3],".").concat(t[0]),"".concat(t[2],".").concat(t[3],".").concat(t[1]),"".concat(t[3],".").concat(t[0],".").concat(t[1]),"".concat(t[3],".").concat(t[0],".").concat(t[2]),"".concat(t[3],".").concat(t[1],".").concat(t[0]),"".concat(t[3],".").concat(t[1],".").concat(t[2]),"".concat(t[3],".").concat(t[2],".").concat(t[0]),"".concat(t[3],".").concat(t[2],".").concat(t[1]),"".concat(t[0],".").concat(t[1],".").concat(t[2],".").concat(t[3]),"".concat(t[0],".").concat(t[1],".").concat(t[3],".").concat(t[2]),"".concat(t[0],".").concat(t[2],".").concat(t[1],".").concat(t[3]),"".concat(t[0],".").concat(t[2],".").concat(t[3],".").concat(t[1]),"".concat(t[0],".").concat(t[3],".").concat(t[1],".").concat(t[2]),"".concat(t[0],".").concat(t[3],".").concat(t[2],".").concat(t[1]),"".concat(t[1],".").concat(t[0],".").concat(t[2],".").concat(t[3]),"".concat(t[1],".").concat(t[0],".").concat(t[3],".").concat(t[2]),"".concat(t[1],".").concat(t[2],".").concat(t[0],".").concat(t[3]),"".concat(t[1],".").concat(t[2],".").concat(t[3],".").concat(t[0]),"".concat(t[1],".").concat(t[3],".").concat(t[0],".").concat(t[2]),"".concat(t[1],".").concat(t[3],".").concat(t[2],".").concat(t[0]),"".concat(t[2],".").concat(t[0],".").concat(t[1],".").concat(t[3]),"".concat(t[2],".").concat(t[0],".").concat(t[3],".").concat(t[1]),"".concat(t[2],".").concat(t[1],".").concat(t[0],".").concat(t[3]),"".concat(t[2],".").concat(t[1],".").concat(t[3],".").concat(t[0]),"".concat(t[2],".").concat(t[3],".").concat(t[0],".").concat(t[1]),"".concat(t[2],".").concat(t[3],".").concat(t[1],".").concat(t[0]),"".concat(t[3],".").concat(t[0],".").concat(t[1],".").concat(t[2]),"".concat(t[3],".").concat(t[0],".").concat(t[2],".").concat(t[1]),"".concat(t[3],".").concat(t[1],".").concat(t[0],".").concat(t[2]),"".concat(t[3],".").concat(t[1],".").concat(t[2],".").concat(t[0]),"".concat(t[3],".").concat(t[2],".").concat(t[0],".").concat(t[1]),"".concat(t[3],".").concat(t[2],".").concat(t[1],".").concat(t[0])]:void 0),g[r]}function b(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0,r=e.filter((function(e){return"token"!==e})),o=y(r);return o.reduce((function(e,t){return p()({},e,n[t])}),t)}function w(e){return e.join(" ")}function x(e){var t=e.node,n=e.stylesheet,r=e.style,o=void 0===r?{}:r,a=e.useInlineStyles,i=e.key,u=t.properties,s=t.type,c=t.tagName,l=t.value;if("text"===s)return l;if(c){var f,h=function(e,t){var n=0;return function(r){return n+=1,r.map((function(r,o){return x({node:r,stylesheet:e,useInlineStyles:t,key:"code-segment-".concat(n,"-").concat(o)})}))}}(n,a);if(a){var m=Object.keys(n).reduce((function(e,t){return t.split(".").forEach((function(t){e.includes(t)||e.push(t)})),e}),[]),g=u.className&&u.className.includes("token")?["token"]:[],y=u.className&&g.concat(u.className.filter((function(e){return!m.includes(e)})));f=p()({},u,{className:w(y)||void 0,style:b(u.className,Object.assign({},u.style,o),n)})}else f=p()({},u,{className:w(u.className)});var _=h(t.children);return d.a.createElement(c,v()({key:i},f),_)}}var _=/\n/g;function E(e){var t=e.codeString,n=e.codeStyle,r=e.containerStyle,o=void 0===r?{float:"left",paddingRight:"10px"}:r,a=e.numberStyle,i=void 0===a?{}:a,u=e.startingLineNumber;return d.a.createElement("code",{style:Object.assign({},n,o)},function(e){var t=e.lines,n=e.startingLineNumber,r=e.style;return t.map((function(e,t){var o=t+n;return d.a.createElement("span",{key:"line-".concat(t),className:"react-syntax-highlighter-line-number",style:"function"==typeof r?r(o):r},"".concat(o,"\n"))}))}({lines:t.replace(/\n$/,"").split("\n"),style:i,startingLineNumber:u}))}function S(e,t){return{type:"element",tagName:"span",properties:{key:"line-number--".concat(e),className:["comment","linenumber","react-syntax-highlighter-line-number"],style:t},children:[{type:"text",value:e}]}}function k(e,t,n){var r,o={display:"inline-block",minWidth:(r=n,"".concat(r.toString().length,".25em")),paddingRight:"1em",textAlign:"right",userSelect:"none"},a="function"==typeof e?e(t):e;return p()({},o,a)}function A(e){var t=e.children,n=e.lineNumber,r=e.lineNumberStyle,o=e.largestLineNumber,a=e.showInlineLineNumbers,i=e.lineProps,u=void 0===i?{}:i,s=e.className,c=void 0===s?[]:s,l=e.showLineNumbers,f=e.wrapLongLines,h="function"==typeof u?u(n):u;if(h.className=c,n&&a){var d=k(r,n,o);t.unshift(S(n,d))}return f&l&&(h.style=p()({},h.style,{display:"flex"})),{type:"element",tagName:"span",properties:h,children:t}}function O(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],r=0;r2&&void 0!==arguments[2]?arguments[2]:[];return A({children:e,lineNumber:t,lineNumberStyle:u,largestLineNumber:i,showInlineLineNumbers:o,lineProps:n,className:a,showLineNumbers:r,wrapLongLines:s})}function m(e,t){if(r&&t&&o){var n=k(u,t,i);e.unshift(S(t,n))}return e}function v(e,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return t||r.length>0?d(e,n,r):m(e,n)}for(var g=function(){var e=l[h],t=e.children[0].value;if(t.match(_)){var n=t.split("\n");n.forEach((function(t,o){var i=r&&f.length+a,u={type:"text",value:"".concat(t,"\n")};if(0===o){var s=v(l.slice(p+1,h).concat(A({children:[u],className:e.properties.className})),i);f.push(s)}else if(o===n.length-1){if(l[h+1]&&l[h+1].children&&l[h+1].children[0]){var c=A({children:[{type:"text",value:"".concat(t)}],className:e.properties.className});l.splice(h+1,0,c)}else{var d=v([u],i,e.properties.className);f.push(d)}}else{var m=v([u],i,e.properties.className);f.push(m)}})),p=h}h++};h .hljs-title":{color:"#88C0D0"},"hljs-keyword":{color:"#81A1C1"},"hljs-literal":{color:"#81A1C1"},"hljs-symbol":{color:"#81A1C1"},"hljs-number":{color:"#B48EAD"},"hljs-regexp":{color:"#EBCB8B"},"hljs-string":{color:"#A3BE8C"},"hljs-title":{color:"#8FBCBB"},"hljs-params":{color:"#D8DEE9"},"hljs-bullet":{color:"#81A1C1"},"hljs-code":{color:"#8FBCBB"},"hljs-emphasis":{fontStyle:"italic"},"hljs-formula":{color:"#8FBCBB"},"hljs-strong":{fontWeight:"bold"},"hljs-link:hover":{textDecoration:"underline"},"hljs-quote":{color:"#4C566A"},"hljs-comment":{color:"#4C566A"},"hljs-doctag":{color:"#8FBCBB"},"hljs-meta":{color:"#5E81AC"},"hljs-meta-keyword":{color:"#5E81AC"},"hljs-meta-string":{color:"#A3BE8C"},"hljs-attr":{color:"#8FBCBB"},"hljs-attribute":{color:"#D8DEE9"},"hljs-builtin-name":{color:"#81A1C1"},"hljs-name":{color:"#81A1C1"},"hljs-section":{color:"#88C0D0"},"hljs-tag":{color:"#81A1C1"},"hljs-variable":{color:"#D8DEE9"},"hljs-template-variable":{color:"#D8DEE9"},"hljs-template-tag":{color:"#5E81AC"},"abnf .hljs-attribute":{color:"#88C0D0"},"abnf .hljs-symbol":{color:"#EBCB8B"},"apache .hljs-attribute":{color:"#88C0D0"},"apache .hljs-section":{color:"#81A1C1"},"arduino .hljs-built_in":{color:"#88C0D0"},"aspectj .hljs-meta":{color:"#D08770"},"aspectj > .hljs-title":{color:"#88C0D0"},"bnf .hljs-attribute":{color:"#8FBCBB"},"clojure .hljs-name":{color:"#88C0D0"},"clojure .hljs-symbol":{color:"#EBCB8B"},"coq .hljs-built_in":{color:"#88C0D0"},"cpp .hljs-meta-string":{color:"#8FBCBB"},"css .hljs-built_in":{color:"#88C0D0"},"css .hljs-keyword":{color:"#D08770"},"diff .hljs-meta":{color:"#8FBCBB"},"ebnf .hljs-attribute":{color:"#8FBCBB"},"glsl .hljs-built_in":{color:"#88C0D0"},"groovy .hljs-meta:not(:first-child)":{color:"#D08770"},"haxe .hljs-meta":{color:"#D08770"},"java .hljs-meta":{color:"#D08770"},"ldif .hljs-attribute":{color:"#8FBCBB"},"lisp .hljs-name":{color:"#88C0D0"},"lua .hljs-built_in":{color:"#88C0D0"},"moonscript .hljs-built_in":{color:"#88C0D0"},"nginx .hljs-attribute":{color:"#88C0D0"},"nginx .hljs-section":{color:"#5E81AC"},"pf .hljs-built_in":{color:"#88C0D0"},"processing .hljs-built_in":{color:"#88C0D0"},"scss .hljs-keyword":{color:"#81A1C1"},"stylus .hljs-keyword":{color:"#81A1C1"},"swift .hljs-meta":{color:"#D08770"},"vim .hljs-built_in":{color:"#88C0D0",fontStyle:"italic"},"yaml .hljs-meta":{color:"#D08770"}},obsidian:{hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#282b2e",color:"#e0e2e4"},"hljs-keyword":{color:"#93c763",fontWeight:"bold"},"hljs-selector-tag":{color:"#93c763",fontWeight:"bold"},"hljs-literal":{color:"#93c763",fontWeight:"bold"},"hljs-selector-id":{color:"#93c763"},"hljs-number":{color:"#ffcd22"},"hljs-attribute":{color:"#668bb0"},"hljs-code":{color:"white"},"hljs-class .hljs-title":{color:"white"},"hljs-section":{color:"white",fontWeight:"bold"},"hljs-regexp":{color:"#d39745"},"hljs-link":{color:"#d39745"},"hljs-meta":{color:"#557182"},"hljs-tag":{color:"#8cbbad"},"hljs-name":{color:"#8cbbad",fontWeight:"bold"},"hljs-bullet":{color:"#8cbbad"},"hljs-subst":{color:"#8cbbad"},"hljs-emphasis":{color:"#8cbbad"},"hljs-type":{color:"#8cbbad",fontWeight:"bold"},"hljs-built_in":{color:"#8cbbad"},"hljs-selector-attr":{color:"#8cbbad"},"hljs-selector-pseudo":{color:"#8cbbad"},"hljs-addition":{color:"#8cbbad"},"hljs-variable":{color:"#8cbbad"},"hljs-template-tag":{color:"#8cbbad"},"hljs-template-variable":{color:"#8cbbad"},"hljs-string":{color:"#ec7600"},"hljs-symbol":{color:"#ec7600"},"hljs-comment":{color:"#818e96"},"hljs-quote":{color:"#818e96"},"hljs-deletion":{color:"#818e96"},"hljs-selector-class":{color:"#A082BD"},"hljs-doctag":{fontWeight:"bold"},"hljs-title":{fontWeight:"bold"},"hljs-strong":{fontWeight:"bold"}},"tomorrow-night":{"hljs-comment":{color:"#969896"},"hljs-quote":{color:"#969896"},"hljs-variable":{color:"#cc6666"},"hljs-template-variable":{color:"#cc6666"},"hljs-tag":{color:"#cc6666"},"hljs-name":{color:"#cc6666"},"hljs-selector-id":{color:"#cc6666"},"hljs-selector-class":{color:"#cc6666"},"hljs-regexp":{color:"#cc6666"},"hljs-deletion":{color:"#cc6666"},"hljs-number":{color:"#de935f"},"hljs-built_in":{color:"#de935f"},"hljs-builtin-name":{color:"#de935f"},"hljs-literal":{color:"#de935f"},"hljs-type":{color:"#de935f"},"hljs-params":{color:"#de935f"},"hljs-meta":{color:"#de935f"},"hljs-link":{color:"#de935f"},"hljs-attribute":{color:"#f0c674"},"hljs-string":{color:"#b5bd68"},"hljs-symbol":{color:"#b5bd68"},"hljs-bullet":{color:"#b5bd68"},"hljs-addition":{color:"#b5bd68"},"hljs-title":{color:"#81a2be"},"hljs-section":{color:"#81a2be"},"hljs-keyword":{color:"#b294bb"},"hljs-selector-tag":{color:"#b294bb"},hljs:{display:"block",overflowX:"auto",background:"#1d1f21",color:"#c5c8c6",padding:"0.5em"},"hljs-emphasis":{fontStyle:"italic"},"hljs-strong":{fontWeight:"bold"}}},X=o()(Z),ee=function(e){return i()(X).call(X,e)?Z[e]:(console.warn("Request style '".concat(e,"' is not available, returning default instead")),Q)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.File=t.Blob=t.FormData=void 0;const r="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:window;t.FormData=r.FormData,t.Blob=r.Blob,t.File=r.File},function(e,t){var n=Function.prototype,r=n.apply,o=n.bind,a=n.call;e.exports="object"==typeof Reflect&&Reflect.apply||(o?a.bind(r):function(){return a.apply(r,arguments)})},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){var r=n(58);e.exports=r("navigator","userAgent")||""},function(e,t){e.exports=!0},function(e,t){},function(e,t,n){var r,o=n(51),a=n(218),i=n(221),u=n(150),s=n(335),c=n(214),l=n(173),f=l("IE_PROTO"),p=function(){},h=function(e){return" + - - - - \ No newline at end of file + + + \ No newline at end of file diff --git a/investAPI-main/src/docs/ws/websock-docs/output/js/asyncapi-ui.min.js b/investAPI-main/src/docs/ws/websock-docs/output/js/asyncapi-ui.min.js index 958dc08..d2d6d53 100644 --- a/investAPI-main/src/docs/ws/websock-docs/output/js/asyncapi-ui.min.js +++ b/investAPI-main/src/docs/ws/websock-docs/output/js/asyncapi-ui.min.js @@ -1,41 +1,14 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("AsyncApiStandalone",[],t):"object"==typeof exports?exports.AsyncApiStandalone=t():e.AsyncApiStandalone=t()}("undefined"!=typeof self?self:this,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)n.d(r,a,function(t){return e[t]}.bind(null,a));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=300)}({0:function(e,t,n){"use strict";e.exports=n(76)},1:function(e,t,n){"use strict";n.d(t,"a",(function(){return r})),n.d(t,"l",(function(){return a})),n.d(t,"j",(function(){return i})),n.d(t,"k",(function(){return o})),n.d(t,"c",(function(){return l})),n.d(t,"f",(function(){return u})),n.d(t,"i",(function(){return s})),n.d(t,"h",(function(){return c})),n.d(t,"e",(function(){return f})),n.d(t,"d",(function(){return d})),n.d(t,"g",(function(){return p})),n.d(t,"b",(function(){return m}));var r="https://www.iana.org/assignments/media-types",a="https://github.com/asyncapi/parser-js/validation-errors",i="Terms of service",o="Support",l="External Docs",u="PUB",s="SUB",c="Servers",f="Operations",d="Messages",p="Schemas",m="Error"},11:function(e,t,n){const{createMapOfType:r,getMapValueOfType:a,mix:i}=n(2),o=n(3),{xParserCircle:l,xParserCircleProps:u}=n(27),s=n(7),c=n(17),f=n(4);class d extends o{constructor(e,t){super(e),this.options=t||{}}uid(){return this.$id()||this.ext("x-parser-schema-id")}$id(){return this._json.$id}multipleOf(){return this._json.multipleOf}maximum(){return this._json.maximum}exclusiveMaximum(){return this._json.exclusiveMaximum}minimum(){return this._json.minimum}exclusiveMinimum(){return this._json.exclusiveMinimum}maxLength(){return this._json.maxLength}minLength(){return this._json.minLength}pattern(){return this._json.pattern}maxItems(){return this._json.maxItems}minItems(){return this._json.minItems}uniqueItems(){return!!this._json.uniqueItems}maxProperties(){return this._json.maxProperties}minProperties(){return this._json.minProperties}required(){return this._json.required}enum(){return this._json.enum}type(){return this._json.type}allOf(){return this._json.allOf?this._json.allOf.map(e=>new d(e,{parent:this})):null}oneOf(){return this._json.oneOf?this._json.oneOf.map(e=>new d(e,{parent:this})):null}anyOf(){return this._json.anyOf?this._json.anyOf.map(e=>new d(e,{parent:this})):null}not(){return this._json.not?new d(this._json.not,{parent:this}):null}items(){return this._json.items?Array.isArray(this._json.items)?this._json.items.map(e=>new d(e,{parent:this})):new d(this._json.items,{parent:this}):null}properties(){return r(this._json.properties,d,{parent:this})}property(e){return a(this._json.properties,e,d,{parent:this})}additionalProperties(){const e=this._json.additionalProperties;if(null!=e)return"boolean"==typeof e?e:new d(e,{parent:this})}additionalItems(){const e=this._json.additionalItems;if(null!=e)return new d(e,{parent:this})}patternProperties(){return r(this._json.patternProperties,d,{parent:this})}const(){return this._json.const}contains(){return this._json.contains?new d(this._json.contains,{parent:this}):null}dependencies(){if(!this._json.dependencies)return null;const e={};return Object.entries(this._json.dependencies).forEach(([t,n])=>{e[String(t)]=Array.isArray(n)?n:new d(n,{parent:this})}),e}propertyNames(){return this._json.propertyNames?new d(this._json.propertyNames,{parent:this}):null}if(){return this._json.if?new d(this._json.if,{parent:this}):null}then(){return this._json.then?new d(this._json.then,{parent:this}):null}else(){return this._json.else?new d(this._json.else,{parent:this}):null}format(){return this._json.format}contentEncoding(){return this._json.contentEncoding}contentMediaType(){return this._json.contentMediaType}definitions(){return r(this._json.definitions,d,{parent:this})}title(){return this._json.title}default(){return this._json.default}deprecated(){return this._json.deprecated}discriminator(){return this._json.discriminator}readOnly(){return!!this._json.readOnly}writeOnly(){return!!this._json.writeOnly}examples(){return this._json.examples}isBooleanSchema(){return"boolean"==typeof this._json}isCircular(){if(this.ext(l))return!0;let e=this.options.parent;for(;e;){if(e._json===this._json)return!0;e=e.options&&e.options.parent}return!1}circularSchema(){let e=this.options.parent;for(;e;){if(e._json===this._json)return e;e=e.options&&e.options.parent}}hasCircularProps(){return Array.isArray(this.ext(u))?this.ext(u).length>0:Object.entries(this.properties()||{}).map(([e,t])=>{if(t.isCircular())return e}).filter(Boolean).length>0}circularProps(){return Array.isArray(this.ext(u))?this.ext(u):Object.entries(this.properties()||{}).map(([e,t])=>{if(t.isCircular())return e}).filter(Boolean)}}e.exports=i(d,s,c,f)},13:function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},138:function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var r=n(25),a=n.n(r),i=function(){function e(){}return e.retrieveParsedSpec=function(e){if(e){if(e.constructor&&"AsyncAPIDocument"===e.constructor.name)return e;if("function"==typeof e.version&&e._json&&e._json.asyncapi)return e;if("string"==typeof e)try{e=JSON.parse(e)}catch(e){return}return"object"==typeof e&&!0===e["x-parser-spec-parsed"]?!0===e["x-parser-spec-stringified"]?a.a.parse(e):new a.a(e):void 0}},e.containTags=function(e,t){var n="function"==typeof e.tags?e.tags():void 0;return!(void 0===n||!Array.isArray(n))&&(t=Array.isArray(t)?t:[t],n.some((function(e){return t.some((function(t){return t.name()===e.name()}))})))},e.operationsTags=function(e){var t=new Map;return Object.entries(e.channels()).forEach((function(e){e[0];var n=e[1],r=n.publish();r&&r.hasTags()&&r.tags().forEach((function(e){return t.set(e.name(),e)}));var a=n.subscribe();a&&a.hasTags()&&a.tags().forEach((function(e){return t.set(e.name(),e)}))})),Array.from(t.values())},e.serversTags=function(e){var t={};return Object.entries(e.servers()).forEach((function(e){var n=e[0],r=e[1];r.hasTags()&&r.tags().forEach((function(e){t[e.name()]?t[e.name()]=[t[e.name()],n]:t[e.name()]=n}))})),t},e}()},16:function(e,t){function n(e){return e instanceof Map?e.clear=e.delete=e.set=function(){throw new Error("map is read-only")}:e instanceof Set&&(e.add=e.clear=e.delete=function(){throw new Error("set is read-only")}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach((function(t){var r=e[t];"object"!=typeof r||Object.isFrozen(r)||n(r)})),e}var r=n,a=n;r.default=a;class i{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function o(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function l(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t];return t.forEach((function(e){for(const t in e)n[t]=e[t]})),n}const u=e=>!!e.kind;class s{constructor(e,t){this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){this.buffer+=o(e)}openNode(e){if(!u(e))return;let t=e.kind;e.sublanguage||(t=`${this.classPrefix}${t}`),this.span(t)}closeNode(e){u(e)&&(this.buffer+="")}value(){return this.buffer}span(e){this.buffer+=``}}class c{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const t={kind:e,children:[]};this.add(t),this.stack.push(t)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){return"string"==typeof t?e.addText(t):t.children&&(e.openNode(t),t.children.forEach(t=>this._walk(e,t)),e.closeNode(t)),e}static _collapse(e){"string"!=typeof e&&e.children&&(e.children.every(e=>"string"==typeof e)?e.children=[e.children.join("")]:e.children.forEach(e=>{c._collapse(e)}))}}class f extends c{constructor(e){super(),this.options=e}addKeyword(e,t){""!==e&&(this.openNode(t),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,t){const n=e.root;n.kind=t,n.sublanguage=!0,this.add(n)}toHTML(){return new s(this,this.options).value()}finalize(){return!0}}function d(e){return e?"string"==typeof e?e:e.source:null}const p=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;const m="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",h={begin:"\\\\[\\s\\S]",relevance:0},g={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[h]},y={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[h]},b={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},v=function(e,t,n={}){const r=l({className:"comment",begin:e,end:t,contains:[]},n);return r.contains.push(b),r.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),r},x=v("//","$"),E=v("/\\*","\\*/"),w=v("#","$"),D={className:"number",begin:"\\b\\d+(\\.\\d+)?",relevance:0},k={className:"number",begin:m,relevance:0},C={className:"number",begin:"\\b(0b[01]+)",relevance:0},_={className:"number",begin:"\\b\\d+(\\.\\d+)?(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},A={begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[h,{begin:/\[/,end:/\]/,relevance:0,contains:[h]}]}]},S={className:"title",begin:"[a-zA-Z]\\w*",relevance:0},T={className:"title",begin:"[a-zA-Z_]\\w*",relevance:0},N={begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0};var O=Object.freeze({__proto__:null,MATCH_NOTHING_RE:/\b\B/,IDENT_RE:"[a-zA-Z]\\w*",UNDERSCORE_IDENT_RE:"[a-zA-Z_]\\w*",NUMBER_RE:"\\b\\d+(\\.\\d+)?",C_NUMBER_RE:m,BINARY_NUMBER_RE:"\\b(0b[01]+)",RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(e={})=>{const t=/^#![ ]*\//;return e.binary&&(e.begin=function(...e){return e.map(e=>d(e)).join("")}(t,/.*\b/,e.binary,/\b.*/)),l({className:"meta",begin:t,end:/$/,relevance:0,"on:begin":(e,t)=>{0!==e.index&&t.ignoreMatch()}},e)},BACKSLASH_ESCAPE:h,APOS_STRING_MODE:g,QUOTE_STRING_MODE:y,PHRASAL_WORDS_MODE:b,COMMENT:v,C_LINE_COMMENT_MODE:x,C_BLOCK_COMMENT_MODE:E,HASH_COMMENT_MODE:w,NUMBER_MODE:D,C_NUMBER_MODE:k,BINARY_NUMBER_MODE:C,CSS_NUMBER_MODE:_,REGEXP_MODE:A,TITLE_MODE:S,UNDERSCORE_TITLE_MODE:T,METHOD_GUARD:N,END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{t.data._beginMatch!==e[1]&&t.ignoreMatch()}})}});function F(e,t){"."===e.input[e.index-1]&&t.ignoreMatch()}function j(e,t){t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",e.__beforeBegin=F,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,void 0===e.relevance&&(e.relevance=0))}function P(e,t){Array.isArray(e.illegal)&&(e.illegal=function(...e){return"("+e.map(e=>d(e)).join("|")+")"}(...e.illegal))}function R(e,t){if(e.match){if(e.begin||e.end)throw new Error("begin & end are not supported with match");e.begin=e.match,delete e.match}}function B(e,t){void 0===e.relevance&&(e.relevance=1)}const I=["of","and","for","in","not","or","if","then","parent","list","value"];function M(e,t){return t?Number(t):function(e){return I.includes(e.toLowerCase())}(e)?0:1}function z(e,{plugins:t}){function n(t,n){return new RegExp(d(t),"m"+(e.case_insensitive?"i":"")+(n?"g":""))}class r{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,t){t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]),this.matchAt+=function(e){return new RegExp(e.toString()+"|").exec("").length-1}(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map(e=>e[1]);this.matcherRe=n(function(e,t="|"){let n=0;return e.map(e=>{n+=1;const t=n;let r=d(e),a="";for(;r.length>0;){const e=p.exec(r);if(!e){a+=r;break}a+=r.substring(0,e.index),r=r.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?a+="\\"+String(Number(e[1])+t):(a+=e[0],"("===e[0]&&n++)}return a}).map(e=>`(${e})`).join(t)}(e),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const t=this.matcherRe.exec(e);if(!t)return null;const n=t.findIndex((e,t)=>t>0&&void 0!==e),r=this.matchIndexes[n];return t.splice(0,n),Object.assign(t,r)}}class a{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const t=new r;return this.rules.slice(e).forEach(([e,n])=>t.addRule(e,n)),t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){this.rules.push([e,t]),"begin"===t.type&&this.count++}exec(e){const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex;let n=t.exec(e);if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)}return n&&(this.regexIndex+=n.position+1,this.regexIndex===this.count&&this.considerAll()),n}}if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return e.classNameAliases=l(e.classNameAliases||{}),function t(r,i){const o=r;if(r.isCompiled)return o;[R].forEach(e=>e(r,i)),e.compilerExtensions.forEach(e=>e(r,i)),r.__beforeBegin=null,[j,P,B].forEach(e=>e(r,i)),r.isCompiled=!0;let u=null;if("object"==typeof r.keywords&&(u=r.keywords.$pattern,delete r.keywords.$pattern),r.keywords&&(r.keywords=function e(t,n,r="keyword"){const a={};return"string"==typeof t?i(r,t.split(" ")):Array.isArray(t)?i(r,t):Object.keys(t).forEach((function(r){Object.assign(a,e(t[r],n,r))})),a;function i(e,t){n&&(t=t.map(e=>e.toLowerCase())),t.forEach((function(t){const n=t.split("|");a[n[0]]=[e,M(n[0],n[1])]}))}}(r.keywords,e.case_insensitive)),r.lexemes&&u)throw new Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return u=u||r.lexemes||/\w+/,o.keywordPatternRe=n(u,!0),i&&(r.begin||(r.begin=/\B|\b/),o.beginRe=n(r.begin),r.endSameAsBegin&&(r.end=r.begin),r.end||r.endsWithParent||(r.end=/\B|\b/),r.end&&(o.endRe=n(r.end)),o.terminatorEnd=d(r.end)||"",r.endsWithParent&&i.terminatorEnd&&(o.terminatorEnd+=(r.end?"|":"")+i.terminatorEnd)),r.illegal&&(o.illegalRe=n(r.illegal)),r.contains||(r.contains=[]),r.contains=[].concat(...r.contains.map((function(e){return function(e){e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((function(t){return l(e,{variants:null},t)})));if(e.cachedVariants)return e.cachedVariants;if(function e(t){return!!t&&(t.endsWithParent||e(t.starts))}(e))return l(e,{starts:e.starts?l(e.starts):null});if(Object.isFrozen(e))return l(e);return e}("self"===e?r:e)}))),r.contains.forEach((function(e){t(e,o)})),r.starts&&t(r.starts,i),o.matcher=function(e){const t=new a;return e.contains.forEach(e=>t.addRule(e.begin,{rule:e,type:"begin"})),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:"end"}),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t}(o),o}(e)}function L(e){const t={props:["language","code","autodetect"],data:function(){return{detectedLanguage:"",unknownLanguage:!1}},computed:{className(){return this.unknownLanguage?"":"hljs "+this.detectedLanguage},highlighted(){if(!this.autoDetect&&!e.getLanguage(this.language))return console.warn(`The language "${this.language}" you specified could not be found.`),this.unknownLanguage=!0,o(this.code);let t={};return this.autoDetect?(t=e.highlightAuto(this.code),this.detectedLanguage=t.language):(t=e.highlight(this.language,this.code,this.ignoreIllegals),this.detectedLanguage=this.language),t.value},autoDetect(){return!this.language||(e=this.autodetect,Boolean(e||""===e));var e},ignoreIllegals:()=>!0},render(e){return e("pre",{},[e("code",{class:this.className,domProps:{innerHTML:this.highlighted}})])}};return{Component:t,VuePlugin:{install(e){e.component("highlightjs",t)}}}}const U={"after:highlightElement":({el:e,result:t,text:n})=>{const r=H(e);if(!r.length)return;const a=document.createElement("div");a.innerHTML=t.value,t.value=function(e,t,n){let r=0,a="";const i=[];function l(){return e.length&&t.length?e[0].offset!==t[0].offset?e[0].offset"}function s(e){a+=""}function c(e){("start"===e.event?u:s)(e.node)}for(;e.length||t.length;){let t=l();if(a+=o(n.substring(r,t[0].offset)),r=t[0].offset,t===e){i.reverse().forEach(s);do{c(t.splice(0,1)[0]),t=l()}while(t===e&&t.length&&t[0].offset===r);i.reverse().forEach(u)}else"start"===t[0].event?i.push(t[0].node):i.pop(),c(t.splice(0,1)[0])}return a+o(n.substr(r))}(r,H(a),n)}};function $(e){return e.nodeName.toLowerCase()}function H(e){const t=[];return function e(n,r){for(let a=n.firstChild;a;a=a.nextSibling)3===a.nodeType?r+=a.nodeValue.length:1===a.nodeType&&(t.push({event:"start",offset:r,node:a}),r=e(a,r),$(a).match(/br|hr|img|input/)||t.push({event:"stop",offset:r,node:a}));return r}(e,0),t}const V={},W=e=>{console.error(e)},q=(e,...t)=>{console.log("WARN: "+e,...t)},Y=(e,t)=>{V[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),V[`${e}/${t}`]=!0)},Q=o,K=l,G=Symbol("nomatch");var Z=function(e){const t=Object.create(null),n=Object.create(null),a=[];let o=!0;const l=/(^(<[^>]+>|\t|)+|\n)/gm,u="Could not find the language '{}', did you forget to load/include a language module?",s={disableAutodetect:!0,name:"Plain text",contains:[]};let c={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:f};function d(e){return c.noHighlightRe.test(e)}function p(e,t,n,r){let a="",i="";"object"==typeof t?(a=e,n=t.ignoreIllegals,i=t.language,r=void 0):(Y("10.7.0","highlight(lang, code, ...args) has been deprecated."),Y("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),i=e,a=t);const o={code:a,language:i};_("before:highlight",o);const l=o.result?o.result:m(o.language,o.code,n,r);return l.code=o.code,_("after:highlight",l),l}function m(e,n,r,l){function s(e,t){const n=x.case_insensitive?t[0].toLowerCase():t[0];return Object.prototype.hasOwnProperty.call(e.keywords,n)&&e.keywords[n]}function f(){null!=k.subLanguage?function(){if(""===A)return;let e=null;if("string"==typeof k.subLanguage){if(!t[k.subLanguage])return void _.addText(A);e=m(k.subLanguage,A,!0,C[k.subLanguage]),C[k.subLanguage]=e.top}else e=h(A,k.subLanguage.length?k.subLanguage:null);k.relevance>0&&(S+=e.relevance),_.addSublanguage(e.emitter,e.language)}():function(){if(!k.keywords)return void _.addText(A);let e=0;k.keywordPatternRe.lastIndex=0;let t=k.keywordPatternRe.exec(A),n="";for(;t;){n+=A.substring(e,t.index);const r=s(k,t);if(r){const[e,a]=r;if(_.addText(n),n="",S+=a,e.startsWith("_"))n+=t[0];else{const n=x.classNameAliases[e]||e;_.addKeyword(t[0],n)}}else n+=t[0];e=k.keywordPatternRe.lastIndex,t=k.keywordPatternRe.exec(A)}n+=A.substr(e),_.addText(n)}(),A=""}function d(e){return e.className&&_.openNode(x.classNameAliases[e.className]||e.className),k=Object.create(e,{parent:{value:k}}),k}function p(e){return 0===k.matcher.regexIndex?(A+=e[0],1):(O=!0,0)}function g(e){const t=e[0],n=e.rule,r=new i(n),a=[n.__beforeBegin,n["on:begin"]];for(const n of a)if(n&&(n(e,r),r.isMatchIgnored))return p(t);return n&&n.endSameAsBegin&&(n.endRe=new RegExp(t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")),n.skip?A+=t:(n.excludeBegin&&(A+=t),f(),n.returnBegin||n.excludeBegin||(A=t)),d(n),n.returnBegin?0:t.length}function y(e){const t=e[0],r=n.substr(e.index),a=function e(t,n,r){let a=function(e,t){const n=e&&e.exec(t);return n&&0===n.index}(t.endRe,r);if(a){if(t["on:end"]){const e=new i(t);t["on:end"](n,e),e.isMatchIgnored&&(a=!1)}if(a){for(;t.endsParent&&t.parent;)t=t.parent;return t}}if(t.endsWithParent)return e(t.parent,n,r)}(k,e,r);if(!a)return G;const o=k;o.skip?A+=t:(o.returnEnd||o.excludeEnd||(A+=t),f(),o.excludeEnd&&(A=t));do{k.className&&_.closeNode(),k.skip||k.subLanguage||(S+=k.relevance),k=k.parent}while(k!==a.parent);return a.starts&&(a.endSameAsBegin&&(a.starts.endRe=a.endRe),d(a.starts)),o.returnEnd?0:t.length}let b={};function v(t,a){const i=a&&a[0];if(A+=t,null==i)return f(),0;if("begin"===b.type&&"end"===a.type&&b.index===a.index&&""===i){if(A+=n.slice(a.index,a.index+1),!o){const t=new Error("0 width match regex");throw t.languageName=e,t.badRule=b.rule,t}return 1}if(b=a,"begin"===a.type)return g(a);if("illegal"===a.type&&!r){const e=new Error('Illegal lexeme "'+i+'" for mode "'+(k.className||"")+'"');throw e.mode=k,e}if("end"===a.type){const e=y(a);if(e!==G)return e}if("illegal"===a.type&&""===i)return 1;if(N>1e5&&N>3*a.index){throw new Error("potential infinite loop, way more iterations than matches")}return A+=i,i.length}const x=D(e);if(!x)throw W(u.replace("{}",e)),new Error('Unknown language: "'+e+'"');const E=z(x,{plugins:a});let w="",k=l||E;const C={},_=new c.__emitter(c);!function(){const e=[];for(let t=k;t!==x;t=t.parent)t.className&&e.unshift(t.className);e.forEach(e=>_.openNode(e))}();let A="",S=0,T=0,N=0,O=!1;try{for(k.matcher.considerAll();;){N++,O?O=!1:k.matcher.considerAll(),k.matcher.lastIndex=T;const e=k.matcher.exec(n);if(!e)break;const t=v(n.substring(T,e.index),e);T=e.index+t}return v(n.substr(T)),_.closeAllNodes(),_.finalize(),w=_.toHTML(),{relevance:Math.floor(S),value:w,language:e,illegal:!1,emitter:_,top:k}}catch(t){if(t.message&&t.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:t.message,context:n.slice(T-100,T+100),mode:t.mode},sofar:w,relevance:0,value:Q(n),emitter:_};if(o)return{illegal:!1,relevance:0,value:Q(n),emitter:_,language:e,top:k,errorRaised:t};throw t}}function h(e,n){n=n||c.languages||Object.keys(t);const r=function(e){const t={relevance:0,emitter:new c.__emitter(c),value:Q(e),illegal:!1,top:s};return t.emitter.addText(e),t}(e),a=n.filter(D).filter(C).map(t=>m(t,e,!1));a.unshift(r);const i=a.sort((e,t)=>{if(e.relevance!==t.relevance)return t.relevance-e.relevance;if(e.language&&t.language){if(D(e.language).supersetOf===t.language)return 1;if(D(t.language).supersetOf===e.language)return-1}return 0}),[o,l]=i,u=o;return u.second_best=l,u}const g={"before:highlightElement":({el:e})=>{c.useBR&&(e.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n"))},"after:highlightElement":({result:e})=>{c.useBR&&(e.value=e.value.replace(/\n/g,"
"))}},y=/^(<[^>]+>|\t)+/gm,b={"after:highlightElement":({result:e})=>{c.tabReplace&&(e.value=e.value.replace(y,e=>e.replace(/\t/g,c.tabReplace)))}};function v(e){let t=null;const r=function(e){let t=e.className+" ";t+=e.parentNode?e.parentNode.className:"";const n=c.languageDetectRe.exec(t);if(n){const t=D(n[1]);return t||(q(u.replace("{}",n[1])),q("Falling back to no-highlight mode for this block.",e)),t?n[1]:"no-highlight"}return t.split(/\s+/).find(e=>d(e)||D(e))}(e);if(d(r))return;_("before:highlightElement",{el:e,language:r}),t=e;const a=t.textContent,i=r?p(a,{language:r,ignoreIllegals:!0}):h(a);_("after:highlightElement",{el:e,result:i,text:a}),e.innerHTML=i.value,function(e,t,r){const a=t?n[t]:r;e.classList.add("hljs"),a&&e.classList.add(a)}(e,r,i.language),e.result={language:i.language,re:i.relevance,relavance:i.relevance},i.second_best&&(e.second_best={language:i.second_best.language,re:i.second_best.relevance,relavance:i.second_best.relevance})}const x=()=>{if(x.called)return;x.called=!0,Y("10.6.0","initHighlighting() is deprecated. Use highlightAll() instead.");document.querySelectorAll("pre code").forEach(v)};let E=!1;function w(){if("loading"===document.readyState)return void(E=!0);document.querySelectorAll("pre code").forEach(v)}function D(e){return e=(e||"").toLowerCase(),t[e]||t[n[e]]}function k(e,{languageName:t}){"string"==typeof e&&(e=[e]),e.forEach(e=>{n[e.toLowerCase()]=t})}function C(e){const t=D(e);return t&&!t.disableAutodetect}function _(e,t){const n=e;a.forEach((function(e){e[n]&&e[n](t)}))}"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(function(){E&&w()}),!1),Object.assign(e,{highlight:p,highlightAuto:h,highlightAll:w,fixMarkup:function(e){return Y("10.2.0","fixMarkup will be removed entirely in v11.0"),Y("10.2.0","Please see https://github.com/highlightjs/highlight.js/issues/2534"),t=e,c.tabReplace||c.useBR?t.replace(l,e=>"\n"===e?c.useBR?"
":e:c.tabReplace?e.replace(/\t/g,c.tabReplace):e):t;var t},highlightElement:v,highlightBlock:function(e){return Y("10.7.0","highlightBlock will be removed entirely in v12.0"),Y("10.7.0","Please use highlightElement now."),v(e)},configure:function(e){e.useBR&&(Y("10.3.0","'useBR' will be removed entirely in v11.0"),Y("10.3.0","Please see https://github.com/highlightjs/highlight.js/issues/2559")),c=K(c,e)},initHighlighting:x,initHighlightingOnLoad:function(){Y("10.6.0","initHighlightingOnLoad() is deprecated. Use highlightAll() instead."),E=!0},registerLanguage:function(n,r){let a=null;try{a=r(e)}catch(e){if(W("Language definition for '{}' could not be registered.".replace("{}",n)),!o)throw e;W(e),a=s}a.name||(a.name=n),t[n]=a,a.rawDefinition=r.bind(null,e),a.aliases&&k(a.aliases,{languageName:n})},unregisterLanguage:function(e){delete t[e];for(const t of Object.keys(n))n[t]===e&&delete n[t]},listLanguages:function(){return Object.keys(t)},getLanguage:D,registerAliases:k,requireLanguage:function(e){Y("10.4.0","requireLanguage will be removed entirely in v11."),Y("10.4.0","Please see https://github.com/highlightjs/highlight.js/pull/2844");const t=D(e);if(t)return t;throw new Error("The '{}' language is required, but not loaded.".replace("{}",e))},autoDetection:C,inherit:K,addPlugin:function(e){!function(e){e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=t=>{e["before:highlightBlock"](Object.assign({block:t.el},t))}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=t=>{e["after:highlightBlock"](Object.assign({block:t.el},t))})}(e),a.push(e)},vuePlugin:L(e).VuePlugin}),e.debugMode=function(){o=!1},e.safeMode=function(){o=!0},e.versionString="10.7.3";for(const e in O)"object"==typeof O[e]&&r(O[e]);return Object.assign(e,O),e.addPlugin(g),e.addPlugin(U),e.addPlugin(b),e}({});e.exports=Z},17:function(e,t,n){const{getMapValueOfType:r}=n(2),a=n(85),i={hasExternalDocs(){return!(!this._json.externalDocs||!Object.keys(this._json.externalDocs).length)},externalDocs(){return r(this._json,"externalDocs",a)}};e.exports=i},2:function(e,t){const n=e.exports,r=(e,t,n,r)=>{if("string"!=typeof t||!e)return null;const a=e[String(t)];return void 0===a?null:n?new n(a,r):a};n.createMapOfType=(e,t,n)=>{const r={};return e?(Object.entries(e).forEach(([e,a])=>{r[String(e)]=new t(a,n)}),r):r},n.getMapValueOfType=(e,t,n,a)=>r(e,t,n,a),n.getMapValueByKey=(e,t)=>r(e,t),n.mix=(e,...t)=>{let n=!1;if(t.some((function(t){return e===t||(n=Object.keys(t).some(t=>e.prototype.hasOwnProperty(t)),n)})))throw n?new Error(`invalid mix function: model ${e.name} has at least one method that it is trying to replace by mixin`):new Error(`invalid mix function: cannot use the model ${e.name} as a mixin`);return t.forEach(t=>Object.assign(e.prototype,t)),e}},21:function(e,t,n){const{getMapValueByKey:r}=n(2),a={hasBindings(){return!(!this._json.bindings||!Object.keys(this._json.bindings).length)},bindings(){return this.hasBindings()?this._json.bindings:{}},bindingProtocols(){return Object.keys(this.bindings())},hasBinding(e){return this.hasBindings()&&!!this._json.bindings[String(e)]},binding(e){return r(this._json.bindings,e)}};e.exports=a},22:function(e,t,n){const r=n(84),a={hasTags(){return!(!Array.isArray(this._json.tags)||!this._json.tags.length)},tags(){return this.hasTags()?this._json.tags.map(e=>new r(e)):[]},tagNames(){return this.hasTags()?this._json.tags.map(e=>e.name):[]},hasTag(e){return this.hasTags()&&this._json.tags.some(t=>t.name===e)},tag(e){const t=this.hasTags()&&this._json.tags.find(t=>t.name===e);return t?new r(t):null}};e.exports=a},25:function(e,t,n){const{createMapOfType:r,getMapValueOfType:a,mix:i}=n(2),o=n(3),l=n(80),u=n(40),s=n(42),c=n(91),f=n(17),d=n(22),p=n(4),{xParserSpecParsed:m,xParserSpecStringified:h,xParserCircle:g}=n(27),{assignNameToAnonymousMessages:y,assignNameToComponentMessages:b,assignUidToComponentSchemas:v,assignUidToParameterSchemas:x,assignIdToAnonymousSchemas:E,assignUidToComponentParameterSchemas:w}=n(94),{traverseAsyncApiDocument:D}=n(50);class k extends o{constructor(...e){super(...e),!0!==this.ext(m)&&(b(this),y(this),v(this),w(this),x(this),E(this),this.json()[String(m)]=!0)}version(){return this._json.asyncapi}info(){return new l(this._json.info)}id(){return this._json.id}hasServers(){return!!this._json.servers}servers(){return r(this._json.servers,u)}serverNames(){return this._json.servers?Object.keys(this._json.servers):[]}server(e){return a(this._json.servers,e,u)}hasDefaultContentType(){return!!this._json.defaultContentType}defaultContentType(){return this._json.defaultContentType||null}hasChannels(){return!!this._json.channels}channels(){return r(this._json.channels,s,this)}channelNames(){return this._json.channels?Object.keys(this._json.channels):[]}channel(e){return a(this._json.channels,e,s,this)}hasComponents(){return!!this._json.components}components(){return this._json.components?new c(this._json.components):null}hasMessages(){return!!this.allMessages().size}allMessages(){const e=new Map;return this.hasChannels()&&this.channelNames().forEach(t=>{const n=this.channel(t);n.hasPublish()&&n.publish().messages().forEach(t=>{e.set(t.uid(),t)}),n.hasSubscribe()&&n.subscribe().messages().forEach(t=>{e.set(t.uid(),t)})}),this.hasComponents()&&Object.values(this.components().messages()).forEach(t=>{e.set(t.uid(),t)}),e}allSchemas(){const e=new Map;return D(this,t=>{t.uid()&&e.set(t.uid(),t)}),e}hasCircular(){return!!this._json[String(g)]}traverseSchemas(e,t){D(this,e,t)}static stringify(e,t){const n={...e.json()};return n[String(h)]=!0,JSON.stringify(n,function(){const e=new Map,t=new Map;let n=null;return function(r,a){const i=e.get(this)+(Array.isArray(this)?`[${r}]`:"."+r),o=a===Object(a);o&&e.set(a,i);const l=t.get(a)||"";if(!l&&o){const e=i.replace(/undefined\.\.?/,"");t.set(a,e)}const u="["===l[0]?"$":"$.";let s=l?`$ref:${u}${l}`:a;return null===n?n=a:s===n&&(s="$ref:$"),s}}(),t)}static parse(e){let t=e;if("string"==typeof e?t=JSON.parse(e):"object"==typeof e&&(t={...t}),"object"!=typeof t||!t[String(m)])throw new Error("Cannot parse invalid AsyncAPI document");if(!t[String(h)])return new k(t);delete t[String(h)];return function e(t,n,r,a,i){let o=t,l="$ref:$";if(void 0!==n){o=t[String(n)];const e=n?"."+n:"";l=a.get(t)+(Array.isArray(t)?`[${n}]`:e)}a.set(o,l),i.set(l,o);const u=i.get(o);u&&(t[String(n)]=u);"$ref:$"!==o&&"$ref:$"!==u||(t[String(n)]=r);if(o===Object(o))for(const t in o)e(o,t,r,a,i)}(t,void 0,t,new Map,new Map),new k(t)}}e.exports=i(k,d,f,p)},26:function(e,t){const n=(e,t)=>(t.type=e.type.startsWith("https://github.com/asyncapi/parser-js/")?e.type:"https://github.com/asyncapi/parser-js/"+e.type,t.title=e.title,e.detail&&(t.detail=e.detail),e.validationErrors&&(t.validationErrors=e.validationErrors),e.parsedJSON&&(t.parsedJSON=e.parsedJSON),e.location&&(t.location=e.location),e.refs&&(t.refs=e.refs),t);class r extends Error{constructor(e){super(),n(e,this),this.message=e.title}toJS(){return n(this,{})}}e.exports=r},27:function(e,t){e.exports={xParserSpecParsed:"x-parser-spec-parsed",xParserSpecStringified:"x-parser-spec-stringified",xParserMessageName:"x-parser-message-name",xParserSchemaId:"x-parser-schema-id",xParserCircle:"x-parser-circular",xParserCircleProps:"x-parser-circular-props"}},3:function(e,t,n){const r=n(26);e.exports=class{constructor(e){if(null==e)throw new r(`Invalid JSON to instantiate the ${this.constructor.name} object.`);this._json=e}json(e){return void 0===e?this._json:this._json?this._json[String(e)]:void 0}}},30:function(e,t,n){"use strict";n.d(t,"b",(function(){return l})),n.d(t,"a",(function(){return u}));var r=n(0),a=n.n(r),i=n(31);function o(e){return"undefined"!=typeof document?document.querySelector(e):null}function l(e){return function(t,n,r){null!==(n=n||o("asyncapi"))&&Object(i.render)(a.a.createElement(e,t),n,r)}}function u(e){return function(t,n,r){null!==(n=n||o("asyncapi"))&&Object(i.hydrate)(a.a.createElement(e,t),n,r)}}},300:function(e,t,n){"use strict";n.r(t);var r=n(39),a=n(30),i=n(16),o=n.n(i);t.default={render:Object(a.b)(r.a),hydrate:Object(a.a)(r.a),hljs:o.a}},31:function(e,t,n){"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE){0;try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}}(),e.exports=n(77)},32:function(e,t,n){"use strict"; -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/var r=Object.getOwnPropertySymbols,a=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;function o(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,l,u=o(e),s=1;s1)||(this._json.message,!1)}traits(){const e=this._json["x-parser-original-traits"]||this._json.traits;return e?e.map(e=>new i(e)):[]}hasTraits(){return!!this._json["x-parser-original-traits"]||!!this._json.traits}messages(){return this._json.message?this._json.message.oneOf?this._json.message.oneOf.map(e=>new a(e)):[new a(this._json.message)]:[]}message(e){return this._json.message?this._json.message.oneOf&&1===this._json.message.oneOf.length?new a(this._json.message.oneOf[0]):this._json.message.oneOf?"number"!=typeof e||e>this._json.message.oneOf.length-1?null:new a(this._json.message.oneOf[+e]):new a(this._json.message):null}security(){return this._json.security?this._json.security.map(e=>new o(e)):null}}},39:function(e,t,n){"use strict";var r=n(0),a=n.n(r),i=n(138),o=n(1),l={schemaID:"",show:{sidebar:!1,info:!0,servers:!0,operations:!0,messages:!0,schemas:!0,errors:!0},expand:{messageExamples:!1},sidebar:{showServers:"byDefault",showOperations:"byDefault"},publishLabel:o.f,subscribeLabel:o.i};var u=function(e,t,n){return e[t]?e[t][0]?e[t][0][n]:e[t][n]:"contentBoxSize"===t?e.contentRect["inlineSize"===n?"width":"height"]:void 0};function s(e){void 0===e&&(e={});var t=e.onResize,n=Object(r.useRef)(void 0);n.current=t;var a=e.round||Math.round,i=Object(r.useRef)(),o=Object(r.useState)({width:void 0,height:void 0}),l=o[0],s=o[1],c=Object(r.useRef)(!1);Object(r.useEffect)((function(){return function(){c.current=!0}}),[]);var f,d,p,m,h,g,y=Object(r.useRef)({width:void 0,height:void 0}),b=(f=Object(r.useCallback)((function(t){return i.current&&i.current.box===e.box&&i.current.round===a||(i.current={box:e.box,round:a,instance:new ResizeObserver((function(t){var r=t[0],i="border-box"===e.box?"borderBoxSize":"device-pixel-content-box"===e.box?"devicePixelContentBoxSize":"contentBoxSize",o=u(r,i,"inlineSize"),l=u(r,i,"blockSize"),f=o?a(o):void 0,d=l?a(l):void 0;if(y.current.width!==f||y.current.height!==d){var p={width:f,height:d};y.current.width=f,y.current.height=d,n.current?n.current(p):c.current||s(p)}}))}),i.current.instance.observe(t,{box:e.box}),function(){i.current&&i.current.instance.unobserve(t)}}),[e.box,a]),d=e.ref,p=Object(r.useRef)(null),m=Object(r.useRef)(null),h=Object(r.useRef)(),g=Object(r.useCallback)((function(){var e=null;p.current?e=p.current:d&&(e=d instanceof HTMLElement?d:d.current),m.current&&m.current.element===e&&m.current.reporter===g||(h.current&&(h.current(),h.current=null),m.current={reporter:g,element:e},e&&(h.current=f(e)))}),[d,f]),Object(r.useEffect)((function(){g()}),[g]),Object(r.useCallback)((function(e){p.current=e,g()}),[g]));return Object(r.useMemo)((function(){return{ref:b,width:l.width,height:l.height}}),[b,l?l.width:null,l?l.height:null])}var c=function(){return(c=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&a.a.createElement("li",{className:"mb-3 mt-9"},a.a.createElement("a",{className:"text-xs uppercase text-gray-700 mt-10 mb-4 font-thin hover:text-gray-900",href:"#messages",onClick:function(){return n(!1)}},"Messages"),a.a.createElement("ul",{className:"text-sm mt-2"},Object.entries(s).map((function(e){var t=e[0],r=e[1];return a.a.createElement("li",{key:t},a.a.createElement("a",{className:"flex break-words no-underline text-gray-700 mt-2 hover:text-gray-900",href:"#message-".concat(t),onClick:function(){return n(!1)}},a.a.createElement("div",{className:"break-all inline-block"},r.uid())))})))),p=c&&Object.keys(c).length>0&&a.a.createElement("li",{className:"mb-3 mt-9"},a.a.createElement("a",{className:"text-xs uppercase text-gray-700 mt-10 mb-4 font-thin hover:text-gray-900",href:"#schemas",onClick:function(){return n(!1)}},"Schemas"),a.a.createElement("ul",{className:"text-sm mt-2"},Object.keys(c).map((function(e){return a.a.createElement("li",{key:e},a.a.createElement("a",{className:"flex break-words no-underline text-gray-700 mt-2 hover:text-gray-900",href:"#schema-".concat(e),onClick:function(){return n(!1)}},a.a.createElement("div",{className:"break-all inline-block"},e)))}))));return a.a.createElement(v.Provider,{value:{setShowSidebar:n}},a.a.createElement("div",{className:"burger-menu rounded-full h-16 w-16 bg-white fixed bottom-16 right-8 flex items-center justify-center z-30 cursor-pointer shadow-md bg-teal-500",onClick:function(){return n((function(e){return!e}))},"data-lol":t},a.a.createElement("svg",{viewBox:"0 0 100 70",width:"40",height:"30",className:"fill-current text-gray-200"},a.a.createElement("rect",{width:"100",height:"10"}),a.a.createElement("rect",{y:"30",width:"100",height:"10"}),a.a.createElement("rect",{y:"60",width:"100",height:"10"}))),a.a.createElement("div",{className:"".concat(t?"block fixed w-full":"hidden"," sidebar relative w-64 max-h-screen h-full bg-gray-200 shadow z-20")},a.a.createElement("div",{className:"".concat(t?"w-full":""," block fixed max-h-screen h-full font-sans px-4 pt-8 pb-16 overflow-y-auto bg-gray-200")},a.a.createElement("div",{className:"sidebar--content"},a.a.createElement("div",null,l?a.a.createElement("img",{src:l,alt:"".concat(o.title()," logo, ").concat(o.version()," version")}):a.a.createElement("h1",{className:"text-2xl font-light"},o.title()," ",o.version())),a.a.createElement("ul",{className:"text-sm mt-10 relative"},a.a.createElement("li",{className:"mb-3"},a.a.createElement("a",{className:"text-gray-700 no-underline hover:text-gray-900",href:"#introduction",onClick:function(){return n(!1)}},"Introduction")),i.hasServers()&&a.a.createElement("li",{className:"mb-3 mt-9"},a.a.createElement("a",{className:"text-xs uppercase text-gray-700 mt-10 mb-4 font-thin hover:text-gray-900",href:"#servers",onClick:function(){return n(!1)}},"Servers"),a.a.createElement(w,null)),f&&a.a.createElement(a.a.Fragment,null,a.a.createElement("li",{className:"mb-3 mt-9"},a.a.createElement("a",{className:"text-xs uppercase text-gray-700 mt-10 mb-4 font-thin hover:text-gray-900",href:"#operations",onClick:function(){return n(!1)}},"Operations"),a.a.createElement(D,null)),d,p))))))};function E(e,t){var n=new Set,r=new Map;e.forEach((function(e){var a=[];t.forEach((function(t){var r=t.object;"function"==typeof r.tags&&((r.tags()||[]).map((function(e){return e.name()})).includes(e)&&(a.push(t),n.add(t)))})),r.set(e,a)}));var a=[];return t.forEach((function(e){n.has(e)||a.push(e)})),{tagged:r,untagged:a}}var w=function(){var e,t=y().sidebar,n=h(),r=n.servers(),i=(null==t?void 0:t.showServers)||"byDefault";if("byDefault"===i)return a.a.createElement("ul",{className:"text-sm mt-2"},Object.keys(r).map((function(e){return a.a.createElement(C,{serverName:e,key:e})})));if("bySpecTags"===i)e=(n.tags()||[]).map((function(e){return e.name()}));else{var o=new Set;Object.values(r).forEach((function(e){"function"==typeof e.tags&&e.tags().forEach((function(e){return o.add(e.name())}))})),e=Array.from(o)}var l=E(e,Object.entries(r).map((function(e){return{name:e[0],object:e[1],data:{}}}))),u=l.tagged,s=l.untagged;return a.a.createElement("ul",{className:"text-sm mt-2"},Array.from(u.entries()).map((function(e){var t=e[0],n=e[1];return a.a.createElement("li",{key:t},a.a.createElement(_,{tagName:t},n.map((function(e){var t=e.name;return a.a.createElement(C,{serverName:t,key:t})}))))})),s.length>0?a.a.createElement("li",null,a.a.createElement(_,{tagName:"Untagged"},s.map((function(e){var t=e.name;return a.a.createElement(C,{serverName:t,key:t})})))):null)},D=function(){var e,t=y().sidebar,n=h(),r=n.channels(),i=(null==t?void 0:t.showOperations)||"byDefault",o=[];if(Object.entries(r).forEach((function(e){var t=e[0],n=e[1];if(n.hasPublish()){var r=n.publish();o.push({name:"publish-".concat(t),object:r,data:{channelName:t,kind:"publish",summary:r.summary()}})}if(n.hasSubscribe()){r=n.subscribe();o.push({name:"subscribe-".concat(t),object:r,data:{channelName:t,kind:"subscribe",summary:r.summary()}})}})),"byDefault"===i)return a.a.createElement("ul",{className:"text-sm mt-2"},o.map((function(e){var t=e.name,n=e.data;return a.a.createElement(k,b({key:t},n))})));if("bySpecTags"===i)e=(n.tags()||[]).map((function(e){return e.name()}));else{var l=new Set;Object.values(o).forEach((function(e){var t=e.object;"function"==typeof t.tags&&t.tags().forEach((function(e){return l.add(e.name())}))})),e=Array.from(l)}var u=E(e,o),s=u.tagged,c=u.untagged;return a.a.createElement("ul",{className:"text-sm mt-2"},Array.from(s.entries()).map((function(e){var t=e[0],n=e[1];return a.a.createElement("li",{key:t},a.a.createElement(_,{tagName:t},n.map((function(e){var t=e.name,n=e.data;return a.a.createElement(k,b({key:t},n))}))))})),c.length>0?a.a.createElement("li",null,a.a.createElement(_,{tagName:"Untagged"},c.map((function(e){var t=e.name,n=e.data;return a.a.createElement(k,b({key:t},n))})))):null)},k=function(e){var t=e.channelName,n=e.summary,i=e.kind,l=y(),u=Object(r.useContext)(v).setShowSidebar,s="publish"===i,c="";return c=s?l.publishLabel||o.f:l.subscribeLabel||o.i,a.a.createElement("li",null,a.a.createElement("a",{className:"flex no-underline text-gray-700 mb-2 hover:text-gray-900",href:"#operation-".concat(i,"-").concat(t),onClick:function(){return u(!1)}},a.a.createElement("span",{className:"".concat(s?"bg-blue-600":"bg-green-600"," font-bold h-6 no-underline text-white uppercase p-1 mr-2 rounded text-xs"),title:s?"Publish":"Subscribe"},c),a.a.createElement("span",{className:"break-all inline-block"},n||t)))},C=function(e){var t=e.serverName,n=Object(r.useContext)(v).setShowSidebar;return a.a.createElement("li",null,a.a.createElement("a",{className:"flex no-underline text-gray-700 mb-2 hover:text-gray-900",href:"#server-".concat(t),onClick:function(){return n(!1)}},a.a.createElement("span",{className:"break-all inline-block"},t)))},_=function(e){var t=e.tagName,n=e.children,i=Object(r.useState)(!1),o=i[0],l=i[1];return a.a.createElement("div",null,a.a.createElement(p,{onClick:function(){return l((function(e){return!e}))},chevronProps:{className:o?"-rotate-180":"-rotate-90"}},a.a.createElement("span",{className:"text-sm inline-block mt-1 font-extralight"},t)),a.a.createElement("ul",{className:"".concat(o?"block":"hidden"," text-sm mt-2 font-light")},n))},A=function(e){var t=e.href,n=e.title,r=e.className,i=e.children;return a.a.createElement("a",{href:t,title:n,className:r,target:"_blank",rel:"nofollow noopener noreferrer"},i)},S=n(59),T=n(60),N=n(16),O=n.n(N),F=n(61),j=n.n(F),P=n(62),R=n.n(P),B=n(63),I=n.n(B);O.a.registerLanguage("json",j.a),O.a.registerLanguage("yaml",R.a),O.a.registerLanguage("bash",I.a);var M={langPrefix:"hljs language-",highlight:function(e,t){if(!O.a.getLanguage(t))return e;try{return O.a.highlight(e,{language:t}).value}catch(t){return e}}};var z=function(e){var t,n=e.children;return n?"string"!=typeof n?a.a.createElement(a.a.Fragment,null,n):a.a.createElement("div",{className:"prose max-w-none text-sm",dangerouslySetInnerHTML:{__html:Object(S.sanitize)((t=n,Object(T.marked)(t,M)))}}):null},L=function(e){var t=e.tag,n="#".concat(t.name()),r=t.description()||"",i=t.externalDocs(),o=a.a.createElement("div",{title:r,className:"border border-solid border-blue-300 hover:bg-blue-300 hover:text-blue-600 text-blue-500 font-bold no-underline text-xs rounded px-3 py-1"},a.a.createElement("span",{className:i?"underline":""},n));return i?a.a.createElement(A,{href:i.url(),title:r},o):o},U=function(e){var t=e.tags;return t&&t.length?a.a.createElement("ul",{className:"flex flex-wrap leading-normal"},t.map((function(e){return a.a.createElement("li",{className:"inline-block mt-2 mr-2",key:e.name()},a.a.createElement(L,{tag:e}))}))):null},$=function(){var e=h(),t=e.info();if(!t)return null;var n=e.id(),r=e.externalDocs(),i=t.license(),l=t.termsOfService(),u=e.defaultContentType(),s=t.contact(),c=i||l||u||s||r;return a.a.createElement("div",{className:"panel-item"},a.a.createElement("div",{className:"panel-item--center px-8 text-left",id:"introduction"},a.a.createElement("div",{className:"text-4xl"},t.title()," ",t.version()),c&&a.a.createElement("ul",{className:"flex flex-wrap mt-2 leading-normal"},i&&a.a.createElement("li",{className:"inline-block mt-2 mr-2"},i.url()?a.a.createElement(A,{className:"border border-solid border-orange-300 hover:bg-orange-300 hover:text-orange-600 text-orange-500 font-bold no-underline text-xs uppercase rounded px-3 py-1",href:i.url()},a.a.createElement("span",null,i.name())):a.a.createElement("span",{className:"border border-solid border-orange-300 hover:bg-orange-300 hover:text-orange-600 text-orange-500 font-bold no-underline text-xs uppercase rounded px-3 py-1"},i.name())),l&&a.a.createElement("li",{className:"inline-block mt-2 mr-2"},a.a.createElement(A,{className:"border border-solid border-orange-300 hover:bg-orange-300 hover:text-orange-600 text-orange-500 font-bold no-underline text-xs uppercase rounded px-3 py-1",href:l},a.a.createElement("span",null,o.j))),u&&a.a.createElement("li",{className:"inline-block mt-2 mr-2"},a.a.createElement(A,{className:"border border-solid border-orange-300 hover:bg-orange-300 hover:text-orange-600 text-orange-500 font-bold no-underline text-xs uppercase rounded px-3 py-1",href:"".concat(o.a,"/").concat(u)},a.a.createElement("span",null,u))),r&&a.a.createElement("li",{className:"inline-block mt-2 mr-2"},a.a.createElement(A,{className:"border border-solid border-orange-300 hover:bg-orange-300 hover:text-orange-600 text-orange-500 font-bold no-underline text-xs uppercase rounded px-3 py-1",href:r.url()},a.a.createElement("span",null,o.c))),s&&a.a.createElement(a.a.Fragment,null,s.url()&&a.a.createElement("li",{className:"inline-block mt-2 mr-2"},a.a.createElement(A,{className:"border border-solid border-purple-300 hover:bg-purple-300 hover:text-purple-600 text-purple-500 font-bold no-underline text-xs uppercase rounded px-3 py-1",href:s.url()},a.a.createElement("span",null,s.name()||o.k))),s.email()&&a.a.createElement("li",{className:"inline-block mt-2 mr-2"},a.a.createElement(A,{className:"border border-solid border-purple-300 hover:bg-purple-300 hover:text-purple-600 text-purple-500 font-bold no-underline text-xs uppercase rounded px-3 py-1",href:"mailto:".concat(s.email())},a.a.createElement("span",null,s.email())))),n&&a.a.createElement("li",{className:"inline-block mt-2 mr-2"},a.a.createElement("span",{className:"border border-solid border-blue-300 hover:bg-blue-300 hover:text-blue-600 text-blue-500 font-bold no-underline text-xs uppercase rounded px-3 py-1"},"ID: ",n))),t.hasDescription()&&a.a.createElement("div",{className:"mt-4"},a.a.createElement(z,null,t.description())),e.hasTags()&&a.a.createElement("div",{className:"mt-4"},a.a.createElement(U,{tags:e.tags()}))),a.a.createElement("div",{className:"panel-item--right"}))},H=function(){function e(){}return e.securityType=function(e){switch(e){case"apiKey":return"API key";case"oauth2":return"OAuth2";case"openIdConnect":return"Open ID";case"http":return"HTTP";case"userPassword":return"User/Password";case"X509":return"X509:";case"symmetricEncryption":return"Symmetric Encription";case"asymmetricEncryption":return"Asymmetric Encription";case"httpApiKey":return"HTTP API key";case"scramSha256":return"ScramSha256";case"scramSha512":return"ScramSha512";case"gssapi":return"GSSAPI";default:return"API key"}},e.flowName=function(e){switch(e){case"implicit":return"Implicit";case"password":return"Password";case"clientCredentials":return"Client credentials";case"authorizationCode":return"Authorization Code";default:return"Implicit"}},e.getKafkaSecurity=function(e,t){var n,r;if(n="kafka"===e?t?"SASL_PLAINTEXT":"PLAINTEXT":t?"SASL_SSL":"SSL",t)switch(t.type()){case"plain":r="PLAIN";break;case"scramSha256":r="SCRAM-SHA-256";break;case"scramSha512":r="SCRAM-SHA-512";break;case"oauth2":r="OAUTHBEARER";break;case"gssapi":r="GSSAPI";break;case"X509":n="SSL"}return{securityProtocol:n,saslMechanism:r}},e}(),V=function(e){var t,n=e.security,r=void 0===n?[]:n,i=e.protocol,o=void 0===i?"":i,l=e.header,u=void 0===l?"Security":l,s=h(),c=s.hasComponents()&&s.components().securitySchemes();if(r&&r.length&&c&&Object.keys(c).length){var f=r.map((function(e){var t=e.json(),n=Object.keys(t)[0],r=c[String(n)],i=t[String(n)];return r?a.a.createElement(q,{protocol:o,securitySchema:r,requiredScopes:i,key:r.type()}):null})).filter(Boolean);t=a.a.createElement("ul",null,f.map((function(e,t){return a.a.createElement("li",{className:"mt-2",key:t},e)})))}else"kafka"!==o&&"kafka-secure"!==o||(t=a.a.createElement(q,{protocol:o,securitySchema:null}));return t?a.a.createElement("div",{className:"text-sm mt-4"},a.a.createElement("h5",{className:"text-gray-800"},u,":"),t):null};var W,q=function(e){var t,n=e.securitySchema,r=e.protocol,i=function(e,t){void 0===t&&(t=[]);var n=[];return e&&(e.name()&&n.push(a.a.createElement("span",null,"Name: ",e.name())),e.in()&&n.push(a.a.createElement("span",null,"In: ",e.in())),e.scheme()&&n.push(a.a.createElement("span",null,"Scheme: ",e.scheme())),e.bearerFormat()&&n.push(a.a.createElement("span",null,"Bearer format: ",e.bearerFormat())),e.openIdConnectUrl()&&n.push(a.a.createElement(A,{href:e.openIdConnectUrl(),className:"underline"},"Connect URL")),t.length&&n.push(a.a.createElement("span",null,"Required scopes: ",t.join(", ")))),n}(n,e.requiredScopes);if(["kafka","kafka-secure"].includes(r)){var o=H.getKafkaSecurity(r,n),l=o.securityProtocol,u=o.saslMechanism;t=a.a.createElement("div",{className:"px-4 py-2 ml-2 mb-2 border border-gray-400 bg-gray-100 rounded"},l&&a.a.createElement("div",{className:"mt-1"},a.a.createElement("span",{className:"text-xs font-bold text-gray-600 mt-1 mr-1 uppercase"},"security.protocol:"),a.a.createElement("span",{className:"inline-block font-bold no-underline bg-indigo-400 text-white text-xs rounded py-0 px-1 ml-1"},l)),u&&a.a.createElement("div",{className:"mt-1"},a.a.createElement("span",{className:"text-xs font-bold text-gray-600 mt-1 mr-1 uppercase"},"sasl.mechanism:"),a.a.createElement("span",{className:"inline-block font-bold no-underline bg-indigo-400 text-white text-xs rounded py-0 px-1 ml-1"},u)))}var s=n&&n.flows(),c=s&&Object.entries(s).map((function(e){var t=e[0],n=e[1],r=n.authorizationUrl(),i=n.tokenUrl(),o=n.refreshUrl(),l=n.scopes();return a.a.createElement("div",{className:"px-4 py-2 ml-2 mb-2 border border-gray-400 bg-gray-100 rounded",key:t},a.a.createElement("div",null,a.a.createElement("span",{className:"text-xs font-bold text-gray-600 mt-1 mr-1 uppercase"},"Flow:"),a.a.createElement("span",{className:"text-xs font-bold text-gray-600 mt-1 mr-1 uppercase"},H.flowName(t))),r&&a.a.createElement("div",{className:"mt-1"},a.a.createElement("span",{className:"text-xs font-bold text-gray-600 mt-1 mr-1 uppercase"},"Auth URL:"),a.a.createElement(A,{href:r,className:"underline"},r)),i&&a.a.createElement("div",{className:"mt-1"},a.a.createElement("span",{className:"text-xs font-bold text-gray-600 mt-1 mr-1 uppercase"},"Token URL:"),a.a.createElement(A,{href:i,className:"underline"},i)),o&&a.a.createElement("div",{className:"mt-1"},a.a.createElement("span",{className:"text-xs font-bold text-gray-600 mt-1 mr-1 uppercase"},"Refresh URL:"),a.a.createElement(A,{href:o,className:"underline"},o)),l&&a.a.createElement("div",{className:"mt-1"},a.a.createElement("span",{className:"text-xs font-bold text-gray-600 mt-1 mr-1 uppercase"},"Scopes:"),a.a.createElement("ul",{className:"inline-block"},l&&Object.entries(l).map((function(e){var t=e[0],n=e[1];return a.a.createElement("li",{className:"inline-block font-bold no-underline bg-indigo-400 text-white text-xs rounded py-0 px-1 ml-1",title:n,key:t},t)})))))}));return a.a.createElement("div",null,n&&i&&a.a.createElement("div",null,a.a.createElement("span",null,H.securityType(n.type()),i.length>0&&a.a.createElement("ul",{className:"inline-block ml-2"},i.map((function(e,t){return a.a.createElement("li",{className:"inline-block font-bold no-underline bg-blue-400 text-white text-xs uppercase rounded px-2 py-0 ml-1",key:t},e)}))))),n&&n.hasDescription()&&a.a.createElement("div",null,a.a.createElement(z,null,n.description())),c&&c.length>0&&a.a.createElement("ul",{className:"my-2"},a.a.createElement("li",null,c)),t&&a.a.createElement("div",null,t))},Y=n(11),Q=n.n(Y);!function(e){e.ANY="any",e.RESTRICTED_ANY="restricted any",e.NEVER="never",e.UNKNOWN="unknown"}(W||(W={}));var K=["string","number","integer","boolean","array","object","null"],G=Object.keys({maxLength:"string",minLength:"string",pattern:"string",contentMediaType:"string",contentEncoding:"string",multipleOf:"number",maximum:"number",exclusiveMaximum:"number",minimum:"number",exclusiveMinimum:"number",items:"array",maxItems:"array",minItems:"array",uniqueItems:"array",contains:"array",additionalItems:"array",maxProperties:"object",minProperties:"object",required:"object",properties:"object",patternProperties:"object",propertyNames:"object",dependencies:"object",additionalProperties:"object"}),Z=function(){function e(){}return e.toSchemaType=function(e){var t=this;if(!e||"function"!=typeof e.json)return W.UNKNOWN;if(e.isBooleanSchema())return!0===e.json()?W.ANY:W.NEVER;if(0===Object.keys(e.json()).length)return W.ANY;var n=e.not();if(n&&this.inferType(n)===W.ANY)return W.NEVER;var r=this.inferType(e);if(Array.isArray(r))return r.map((function(n){return t.toType(n,e)})).join(" | ");r=this.toType(r,e);var a=this.toCombinedType(e);return r&&a?"".concat(r," ").concat(a):a||r},e.prettifyValue=function(e,t){void 0===t&&(t=!0);var n=typeof e;return"string"===n?t?'"'.concat(e,'"'):e:"number"===n||"bigint"===n||"boolean"===n?"".concat(e):Array.isArray(e)?"[".concat(e.toString(),"]"):JSON.stringify(e)},e.humanizeConstraints=function(e){var t=[],n=this.humanizeNumberRangeConstraint(e.minimum(),e.exclusiveMinimum(),e.maximum(),e.exclusiveMaximum());void 0!==n&&t.push(n);var r=this.humanizeMultipleOfConstraint(e.multipleOf());void 0!==r&&t.push(r);var a=this.humanizeRangeConstraint("characters",e.minLength(),e.maxLength());void 0!==a&&t.push(a);var i=e.uniqueItems(),o=this.humanizeRangeConstraint(i?"unique items":"items",e.minItems(),e.maxItems());void 0!==o&&t.push(o);var l=this.humanizeRangeConstraint("properties",e.minProperties(),e.maxProperties());return void 0!==l&&t.push(l),t},e.isExpandable=function(e){var t=this.inferType(e);if((t=Array.isArray(t)?t:[t]).includes("object")||t.includes("array"))return!0;if(e.oneOf()||e.anyOf()||e.allOf()||Object.keys(e.properties()).length||e.items()||e.not()||e.if()||e.then()||e.else())return!0;var n=this.getCustomExtensions(e);return!(!n||!Object.keys(n).length)},e.serverVariablesToSchema=function(e){var t;if(e&&Object.keys(e).length){var n=((t={type:"object",properties:Object.entries(e).reduce((function(e,t){var n=t[0],r=t[1];return e[n]=Object.assign({},r.json()||{}),e[n].type="string",e}),{}),required:Object.keys(e)})[this.extRenderType]=!1,t[this.extRenderAdditionalInfo]=!1,t);return new Q.a(n)}},e.parametersToSchema=function(e){var t,n=this;if(e&&Object.keys(e).length){var r=((t={type:"object",properties:Object.entries(e).reduce((function(e,t){var r=t[0],a=t[1],i=a.schema();return e[r]=Object.assign({},i?i.json():{}),e[r].description=a.description()||e[r].description,e[r][n.extParameterLocation]=a.location(),e}),{}),required:Object.keys(e)})[this.extRenderType]=!1,t[this.extRenderAdditionalInfo]=!1,t);return new Q.a(r)}},e.jsonToSchema=function(e){var t=this.jsonFieldToSchema(e);return new Q.a(t)},e.getCustomExtensions=function(e){if(e&&"function"==typeof e.extensions)return Object.entries(e.extensions()||{}).reduce((function(e,t){var n=t[0],r=t[1];return n.startsWith("x-parser-")||n.startsWith("x-schema-private-")||(e[n]=r),e}),{})},e.getDependentRequired=function(e,t){var n=[],r=t.dependencies();if(r){for(var a=0,i=Object.entries(r);a")}return e},e.toItemsType=function(e,t){var n=this,r=e.map((function(e){return n.toSchemaType(e)})).join(", "),a=t.additionalItems();if(void 0===a||a.json()){var i=void 0===a||!0===a.json()?W.ANY:this.toSchemaType(a);return"tuple<".concat(r||W.UNKNOWN,", ...optional<").concat(i,">>")}return"tuple<".concat(r||W.UNKNOWN,">")},e.toCombinedType=function(e){return e.oneOf()?"oneOf":e.anyOf()?"anyOf":e.allOf()?"allOf":void 0},e.inferType=function(e){var t=e.type();if(void 0!==t)return Array.isArray(t)?(t.includes("integer")&&t.includes("number")&&(t=t.filter((function(e){return"integer"!==e}))),1===t.length?t[0]:t):t;var n=e.const();if(void 0!==n)return typeof n;var r=e.enum();if(Array.isArray(r)&&r.length){var a=Array.from(new Set(r.map((function(e){return typeof e}))));return 1===a.length?a[0]:a}var i=Object.keys(e.json()||{})||[];return!0===G.some((function(e){return i.includes(e)}))?W.RESTRICTED_ANY:this.toCombinedType(e)?"":W.ANY},e.humanizeNumberRangeConstraint=function(e,t,n,r){var a,i=void 0!==t,o=void 0!==e||i,l=void 0!==r,u=void 0!==n||l;return o&&u?(a=i?"( ":"[ ",a+=i?t:e,a+=" .. ",a+=l?r:n,a+=l?" )":" ]"):o?(a=i?"> ":">= ",a+=i?t:e):u&&(a=l?"< ":"<= ",a+=l?r:n),a},e.humanizeMultipleOfConstraint=function(e){if(void 0!==e){var t=e.toString(10);return/^0\.0*1$/.test(t)?"decimal places <= ".concat(t.split(".")[1].length):"multiple of ".concat(t)}},e.humanizeRangeConstraint=function(e,t,n){var r;return void 0!==t&&void 0!==n?r=t===n?"".concat(t," ").concat(e):"[ ".concat(t," .. ").concat(n," ] ").concat(e):void 0!==n?r="<= ".concat(n," ").concat(e):void 0!==t&&(r=1===t?"non-empty":">= ".concat(t," ").concat(e)),r},e.jsonFieldToSchema=function(e){var t,n,r,a,i=this;return null==e?((t={type:"string",const:""})[this.extRawValue]=!0,t):"object"!=typeof e?((n={type:"string",const:"function"==typeof e.toString?e.toString():e})[this.extRawValue]=!0,n):this.isJSONSchema(e)?e:Array.isArray(e)?((r={type:"array",items:e.map((function(e){return i.jsonFieldToSchema(e)}))})[this.extRenderType]=!1,r[this.extRenderAdditionalInfo]=!1,r):((a={type:"object",properties:Object.entries(e).reduce((function(e,t){var n=t[0],r=t[1];return e[n]=i.jsonFieldToSchema(r),e}),{})})[this.extRenderType]=!1,a[this.extRenderAdditionalInfo]=!1,a)},e.isJSONSchema=function(e){return!(!e||"object"!=typeof e||!(K.includes(e.type)||Array.isArray(e.type)&&e.type.some((function(e){return!K.includes(e)}))))},e.extRenderType="x-schema-private-render-type",e.extRenderAdditionalInfo="x-schema-private-render-additional-info",e.extRawValue="x-schema-private-raw-value",e.extParameterLocation="x-schema-private-parameter-location",e}(),X=function(e){var t=e.name,n=void 0===t?"Extensions":t,r=e.item,i=Z.getCustomExtensions(r);if(!i||!Object.keys(i).length)return null;var o=Z.jsonToSchema(i);return o&&a.a.createElement("div",{className:"mt-2"},a.a.createElement(ee,{schemaName:n,schema:o,onlyTitle:!0}))},J=a.a.createContext({reverse:!1,deepExpanded:!1}),ee=function(e){var t=e.schemaName,n=e.schema,i=e.required,o=void 0!==i&&i,l=e.isPatternProperty,u=void 0!==l&&l,s=e.isProperty,c=void 0!==s&&s,f=e.isCircular,d=void 0!==f&&f,m=e.dependentRequired,h=e.expanded,g=void 0!==h&&h,y=e.onlyTitle,b=void 0!==y&&y,v=Object(r.useContext)(J),x=v.reverse,E=v.deepExpanded,w=Object(r.useState)(g),D=w[0],k=w[1],C=Object(r.useState)(!1),_=C[0],S=C[1];if(Object(r.useEffect)((function(){S(E)}),[E,S]),Object(r.useEffect)((function(){k(_)}),[_,k]),!n||"string"==typeof t&&((null==t?void 0:t.startsWith("x-parser-"))||(null==t?void 0:t.startsWith("x-schema-private-"))))return null;var T=Z.getDependentSchemas(n),N=Z.humanizeConstraints(n),O=n.externalDocs(),F=!1!==n.ext(Z.extRenderType),j=!0===n.ext(Z.extRawValue),P=n.ext(Z.extParameterLocation),R=Z.isExpandable(n)||T,B=Z.toSchemaType(n);d=d||n.isCircular()||n.ext("x-parser-circular")||!1;var I=n.uid(),M=n.items();M&&!Array.isArray(M)?(d=d||M.isCircular()||M.ext("x-parser-circular")||!1)&&"function"==typeof M.circularSchema&&(B=Z.toSchemaType(M.circularSchema())):d&&"function"==typeof n.circularSchema&&(B=Z.toSchemaType(n.circularSchema()));var L=c?"italic":"",U="string"==typeof t?a.a.createElement("span",{className:"break-words text-sm ".concat(L)},t):t;return a.a.createElement(J.Provider,{value:{reverse:!x,deepExpanded:_}},a.a.createElement("div",null,a.a.createElement("div",{className:"flex py-2"},a.a.createElement("div",{className:"".concat(b?"":"min-w-1/4"," mr-2")},R&&!d?a.a.createElement(a.a.Fragment,null,a.a.createElement(p,{onClick:function(){return k((function(e){return!e}))},expanded:D},U),a.a.createElement("button",{type:"button",onClick:function(){return S((function(e){return!e}))},className:"ml-1 text-sm text-gray-500"},_?"Collapse all":"Expand all")):a.a.createElement("span",{className:"break-words text-sm ".concat(c?"italic":"")},t),u&&a.a.createElement("div",{className:"text-gray-500 text-xs italic"},"(pattern property)"),o&&a.a.createElement("div",{className:"text-red-600 text-xs"},"required"),m&&a.a.createElement(a.a.Fragment,null,a.a.createElement("div",{className:"text-gray-500 text-xs"},"required when defined:"),a.a.createElement("div",{className:"text-red-600 text-xs"},m.join(", "))),n.deprecated()&&a.a.createElement("div",{className:"text-red-600 text-xs"},"deprecated"),n.writeOnly()&&a.a.createElement("div",{className:"text-gray-500 text-xs"},"write-only"),n.readOnly()&&a.a.createElement("div",{className:"text-gray-500 text-xs"},"read-only")),j?a.a.createElement("div",null,a.a.createElement("div",{className:"text-sm"},Z.prettifyValue(n.const(),!1))):a.a.createElement("div",null,a.a.createElement("div",null,F&&a.a.createElement("div",{className:"capitalize text-sm text-teal-500 font-bold inline-block mr-2"},d?"".concat(B," [CIRCULAR]"):B),a.a.createElement("div",{className:"inline-block"},n.format()&&a.a.createElement("span",{className:"bg-yellow-600 font-bold no-underline text-white rounded lowercase mr-2 p-1 text-xs"},"format: ",n.format()),void 0!==n.pattern()&&a.a.createElement("span",{className:"bg-yellow-600 font-bold no-underline text-white rounded mr-2 p-1 text-xs"},"must match: ",n.pattern()),void 0!==n.contentMediaType()&&a.a.createElement("span",{className:"bg-yellow-600 font-bold no-underline text-white rounded lowercase mr-2 p-1 text-xs"},"media type: ",n.contentMediaType()),void 0!==n.contentEncoding()&&a.a.createElement("span",{className:"bg-yellow-600 font-bold no-underline text-white rounded lowercase mr-2 p-1 text-xs"},"encoding: ",n.contentEncoding()),!!N.length&&N.map((function(e){return a.a.createElement("span",{className:"bg-purple-600 font-bold no-underline text-white rounded lowercase mr-2 p-1 text-xs",key:e},e)})),I&&!I.startsWith("e.length?e.repeat(Math.trunc(t/e.length)+1).substring(0,t):e}function de(...e){const t=e=>e&&"object"==typeof e;return e.reduce((e,n)=>(Object.keys(n).forEach(r=>{const a=e[r],i=n[r];t(a)&&t(i)?e[r]=de(a,i):e[r]=i}),e),Array.isArray(e[e.length-1])?[]:{})}function pe(e){return{value:"object"===e?{}:"array"===e?[]:void 0}}function me(e,t){t&&e.pop()}const he={multipleOf:"number",maximum:"number",exclusiveMaximum:"number",minimum:"number",exclusiveMinimum:"number",maxLength:"string",minLength:"string",pattern:"string",items:"array",maxItems:"array",minItems:"array",uniqueItems:"array",additionalItems:"array",maxProperties:"object",minProperties:"object",required:"object",additionalProperties:"object",properties:"object",patternProperties:"object",dependencies:"object"};function ge(e){if(void 0!==e.type)return Array.isArray(e.type)?0===e.type.length?null:e.type[0]:e.type;const t=Object.keys(he);for(var n=0;nt.maxSampleDepth)return me(xe,r),pe(ge(e));if(e.$ref){if(!n)throw new Error("Your schema contains $ref. You must provide full specification in the third parameter.");let a=decodeURIComponent(e.$ref);a.startsWith("#")&&(a=a.substring(1));const i=be.a.get(n,a);let o;if(!0!==ve[a])ve[a]=!0,o=De(i,t,n,r),ve[a]=!1;else{o=pe(ge(i))}return me(xe,r),o}if(void 0!==e.example)return me(xe,r),{value:e.example,readOnly:e.readOnly,writeOnly:e.writeOnly,type:e.type};if(void 0!==e.allOf)return me(xe,r),we(e)||function(e,t,n,r,a){let i=De(e,n,r);const o=[];for(let e of t){const{type:t,readOnly:l,writeOnly:u,value:s}=De({type:i.type,...e},n,r,a);i.type&&t&&t!==i.type&&(console.warn("allOf: schemas with different types can't be merged"),i.type=t),i.type=i.type||t,i.readOnly=i.readOnly||l,i.writeOnly=i.writeOnly||u,null!=s&&o.push(s)}if("object"===i.type)return i.value=de(i.value||{},...o.filter(e=>"object"==typeof e)),i;{"array"===i.type&&(n.quiet||console.warn('OpenAPI Sampler: found allOf with "array" type. Result may be incorrect'));const e=o[o.length-1];return i.value=null!=e?e:i.value,i}}({...e,allOf:void 0},e.allOf,t,n,r);if(e.oneOf&&e.oneOf.length){e.anyOf&&(t.quiet||console.warn("oneOf and anyOf are not supported on the same level. Skipping anyOf")),me(xe,r);const a=Object.assign({readOnly:e.readOnly,writeOnly:e.writeOnly},e.oneOf[0]);return we(e)||De(a,t,n,r)}if(e.anyOf&&e.anyOf.length)return me(xe,r),we(e)||De(e.anyOf[0],t,n,r);if(e.if&&e.then)return me(xe,r),we(e)||De(de(e.if,e.then),t,n,r);let a=Ee(e),i=null;if(void 0===a){a=null,i=e.type,Array.isArray(i)&&e.type.length>0&&(i=e.type[0]),i||(i=ge(e));let o=Se[i];o&&(a=o(e,t,n,r))}return me(xe,r),{value:a,readOnly:e.readOnly,writeOnly:e.writeOnly,type:i}}function ke(e){let t=0;if("boolean"==typeof e.exclusiveMinimum||"boolean"==typeof e.exclusiveMaximum){if(e.maximum&&e.minimum)return t=e.exclusiveMinimum?Math.floor(e.minimum)+1:e.minimum,(e.exclusiveMaximum&&t>=e.maximum||!e.exclusiveMaximum&&t>e.maximum)&&(t=(e.maximum+e.minimum)/2),t;if(e.minimum)return e.exclusiveMinimum?Math.floor(e.minimum)+1:e.minimum;if(e.maximum)return e.exclusiveMaximum?e.maximum>0?0:Math.floor(e.maximum)-1:e.maximum>0?0:e.maximum}else{if(e.minimum)return e.minimum;e.exclusiveMinimum?(t=Math.floor(e.exclusiveMinimum)+1,t===e.exclusiveMaximum&&(t=(t+Math.floor(e.exclusiveMaximum)-1)/2)):e.exclusiveMaximum?t=Math.floor(e.exclusiveMaximum)-1:e.maximum&&(t=e.maximum)}return t}function Ce({min:e,max:t,omitTime:n,omitDate:r}){let a=function(e,t,n,r){var a=n?"":e.getUTCFullYear()+"-"+ce(e.getUTCMonth()+1)+"-"+ce(e.getUTCDate());return t||(a+="T"+ce(e.getUTCHours())+":"+ce(e.getUTCMinutes())+":"+ce(e.getUTCSeconds())+(r?"."+(e.getUTCMilliseconds()/1e3).toFixed(3).slice(2,5):"")+"Z"),a}(new Date("2019-08-24T14:15:22.123Z"),n,r,!1);return a.lengtht&&console.warn(`Using maxLength = ${t} is incorrect with format "date-time"`),a}function _e(e,t){let n=fe("string",e);return t&&n.length>t&&(n=n.substring(0,t)),n}const Ae={email:function(){return"user@example.com"},"idn-email":function(){return"пошта@укр.нет"},password:function(e,t){let n="pa$$word";return e>n.length&&(n+="_",n+=fe("qwerty!@#$%^123456",e-n.length).substring(0,e-n.length)),n},"date-time":function(e,t){return Ce({min:e,max:t,omitTime:!1,omitDate:!1})},date:function(e,t){return Ce({min:e,max:t,omitTime:!0,omitDate:!1})},time:function(e,t){return Ce({min:e,max:t,omitTime:!1,omitDate:!0}).slice(1)},ipv4:function(){return"192.168.0.1"},ipv6:function(){return"2001:0db8:85a3:0000:0000:8a2e:0370:7334"},hostname:function(){return"example.com"},"idn-hostname":function(){return"приклад.укр"},iri:function(){return"http://example.com"},"iri-reference":function(){return"../словник"},uri:function(){return"http://example.com"},"uri-reference":function(){return"../dictionary"},"uri-template":function(){return"http://example.com/{endpoint}"},uuid:function(e,t,n){return l=function(e){var t=0;if(0==e.length)return t;for(var n=0;n>>5)|0;return r=a^((i|=0)<<17|i>>>15),a=i+(o|=0)|0,i=o+e|0,((o=r+e|0)>>>0)/4294967296},"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{var t=16*u()%16|0;return("x"==e?t:3&t|8).toString(16)});var r,a,i,o,l,u},default:_e,"json-pointer":function(){return"/json/pointer"},"relative-json-pointer":function(){return"1/relative/json/pointer"},regex:function(){return"/regex/"}};var Se={};const Te={skipReadOnly:!1,maxSampleDepth:15};function Ne(e,t,n){let r=Object.assign({},Te,t);return ve={},xe=[],De(e,r,n).value}function Oe(e,t){Se[e]=t}Oe("array",(function(e,t={},n,r){const a=r&&r.depth||1;let i=Math.min(null!=e.maxItems?e.maxItems:1/0,e.minItems||1);const o=e.items||e.contains;Array.isArray(o)&&(i=Math.max(i,o.length));let l=[];if(!o)return l;for(let r=0;r(e[t]=!0,e),{});Object.keys(e.properties).forEach(o=>{if(t.skipNonRequired&&!r.hasOwnProperty(o))return;const l=De(e.properties[o],t,n,{propertyName:o,depth:i+1});t.skipReadOnly&&l.readOnly||t.skipWriteOnly&&l.writeOnly||(a[o]=l.value)})}if(e&&"object"==typeof e.additionalProperties){const r=e.additionalProperties["x-additionalPropertiesName"]||"property";a[String(r)+"1"]=De(e.additionalProperties,t,n,{depth:i+1}).value,a[String(r)+"2"]=De(e.additionalProperties,t,n,{depth:i+1}).value}return a})),Oe("string",(function(e,t,n,r){let a=e.format||"default",i=Ae[a]||_e,o=r&&r.propertyName;return i(0|e.minLength,e.maxLength,o)}));var Fe,je=function(){function e(){}return e.generateExample=function(e,t){void 0===t&&(t={});try{return this.sanitizeExample(Ne(e,t))||""}catch(e){return""}},e.sanitizeExample=function(e){var t=this;return"object"==typeof e&&e&&!Array.isArray(e)?Object.entries(e).reduce((function(e,n){var r=n[0],a=n[1];return r.startsWith("x-parser-")||r.startsWith("x-schema-private-")||(e[r]=t.sanitizeExample(a)),e}),{}):e},e.getPayloadExamples=function(e){var t=e.examples();if(Array.isArray(t)&&t.some((function(e){return e.payload}))){var n=t.flatMap((function(e){if(e.payload)return{name:e.name,summary:e.summary,example:e.payload}})).filter(Boolean);if(n.length>0)return n}var r=e.payload();if(r&&r.examples())return r.examples().map((function(e){return{example:e}}))},e.getHeadersExamples=function(e){var t=e.examples();if(Array.isArray(t)&&t.some((function(e){return e.headers}))){var n=t.flatMap((function(e){if(e.headers)return{name:e.name,summary:e.summary,example:e.headers}})).filter(Boolean);if(n.length>0)return n}var r=e.headers();if(r&&r.examples())return r.examples().map((function(e){return{example:e}}))},e}(),Pe=function(e){var t=e.message;if(!t)return null;var n=t.payload(),r=t.headers();return a.a.createElement("div",{className:"bg-gray-800 px-8 py-4 mt-4 -mx-8 2xl:mx-0 2xl:px-4 2xl:rounded examples"},a.a.createElement("h4",{className:"text-white text-lg"},"Examples"),n&&a.a.createElement(Re,{type:"Payload",schema:n,examples:je.getPayloadExamples(t)}),r&&a.a.createElement(Re,{type:"Headers",schema:r,examples:je.getHeadersExamples(t)}))},Re=function(e){var t=e.type,n=void 0===t?"Payload":t,i=e.schema,o=e.examples,l=void 0===o?[]:o,u=y(),s=Object(r.useState)(u&&u.expand&&u.expand.messageExamples||!1),c=s[0],f=s[1];return Object(r.useEffect)((function(){f(u&&u.expand&&u.expand.messageExamples||!1)}),[u.expand]),a.a.createElement("div",{className:"mt-4"},a.a.createElement("div",null,a.a.createElement(p,{onClick:function(){return f((function(e){return!e}))},expanded:c,chevronProps:{className:"fill-current text-gray-200"}},a.a.createElement("span",{className:"inline-block w-20 py-0.5 mr-1 text-gray-200 text-sm border text-center rounded focus:outline-none"},n))),a.a.createElement("div",{className:c?"block":"hidden"},l&&l.length>0?a.a.createElement("ul",null,l.map((function(e,t){return a.a.createElement("li",{className:"mt-4",key:t},a.a.createElement("h5",{className:"text-xs font-bold text-gray-500"},e.name?"#".concat(t+1," Example - ").concat(e.name):"#".concat(t+1," Example")),e.summary&&a.a.createElement("p",{className:"text-xs font-bold text-gray-500"},e.summary),a.a.createElement("div",{className:"mt-1"},a.a.createElement(se,{snippet:je.sanitizeExample(e.example)})))}))):a.a.createElement("div",{className:"mt-4"},a.a.createElement(se,{snippet:je.generateExample(i.json())}),a.a.createElement("h6",{className:"text-xs font-bold text-gray-600 italic mt-2"},"This example has been generated automatically."))))},Be=function(e){var t=e.message,n=e.messageName,r=e.index,i=e.showExamples,l=void 0!==i&&i,u=y();if(!t)return null;var s="function"==typeof t.id&&t.id(),c=t.title(),f=t.summary(),d=t.payload(),p=t.headers(),m=t.correlationId(),h=t.contentType(),g=t.externalDocs(),b=h||g;return a.a.createElement("div",{className:"panel-item"},a.a.createElement("div",{className:"panel-item--center px-8"},a.a.createElement("div",{className:"shadow rounded bg-gray-200 p-4 border"},a.a.createElement("div",null,void 0!==r&&a.a.createElement("span",{className:"text-gray-700 font-bold mr-2"},"#",r),c&&a.a.createElement("span",{className:"text-gray-700 mr-2"},c),a.a.createElement("span",{className:"border text-orange-600 rounded text-xs py-0 px-2"},t.uid())),f&&a.a.createElement("p",{className:"text-gray-600 text-sm"},f),b&&a.a.createElement("ul",{className:"leading-normal mt-2 mb-4 space-x-2 space-y-2"},h&&a.a.createElement("li",{className:"inline-block"},a.a.createElement(A,{className:"border border-solid border-orange-300 hover:bg-orange-300 hover:text-orange-600 text-orange-500 font-bold no-underline text-xs uppercase rounded px-3 py-1",href:"".concat(o.a,"/").concat(h)},a.a.createElement("span",null,h))),g&&a.a.createElement("li",{className:"inline-block"},a.a.createElement(A,{className:"border border-solid border-orange-300 hover:bg-orange-300 hover:text-orange-600 text-orange-500 font-bold no-underline text-xs uppercase rounded px-3 py-1",href:g.url()},a.a.createElement("span",null,o.c)))),s&&a.a.createElement("div",{className:"border bg-gray-100 rounded px-4 py-2 mt-2"},a.a.createElement("div",{className:"text-sm text-gray-700"},"Message ID",a.a.createElement("span",{className:"border text-orange-600 rounded text-xs ml-2 py-0 px-2"},s))),m&&a.a.createElement("div",{className:"border bg-gray-100 rounded px-4 py-2 mt-2"},a.a.createElement("div",{className:"text-sm text-gray-700"},"Correlation ID",a.a.createElement("span",{className:"border text-orange-600 rounded text-xs ml-2 py-0 px-2"},m.location())),m.hasDescription()&&a.a.createElement("div",{className:"mt-2"},a.a.createElement(z,null,m.description()))),t.hasDescription()&&a.a.createElement("div",{className:"mt-2"},a.a.createElement(z,null,t.description())),d&&a.a.createElement("div",{className:"mt-2",id:n?oe.getIdentifier("message-".concat(n,"-payload"),u):void 0},a.a.createElement(ee,{schemaName:"Payload",schema:d})),p&&a.a.createElement("div",{className:"mt-2",id:n?oe.getIdentifier("message-".concat(n,"-headers"),u):void 0},a.a.createElement(ee,{schemaName:"Headers",schema:p})),t.hasBindings()&&a.a.createElement("div",{className:"mt-2"},a.a.createElement(ie,{name:"Message specific information",bindings:t.bindings()})),a.a.createElement(X,{item:t}),t.hasTags()&&a.a.createElement("div",{className:"mt-2"},a.a.createElement(U,{tags:t.tags()})))),l&&a.a.createElement("div",{className:"panel-item--right px-8"},a.a.createElement(Pe,{message:t})))},Ie=n(9),Me=function(){return(Me=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0?a.a.createElement("div",{className:"mt-2 text-sm"},a.a.createElement("p",null,"Available only on servers:"),a.a.createElement("ul",{className:"flex flex-wrap leading-normal"},u.map((function(e){return a.a.createElement("li",{className:"inline-block mt-2 mr-2",key:e},a.a.createElement("a",{href:"#".concat(oe.getIdentifier("server-"+e,t)),className:"border border-solid border-blue-300 hover:bg-blue-300 hover:text-blue-600 text-blue-500 font-bold no-underline text-xs rounded px-3 py-1 cursor-pointer"},a.a.createElement("span",{className:"underline"},e)))})))):null,c&&a.a.createElement("div",{className:"mt-2",id:oe.getIdentifier("operation-".concat(r,"-").concat(o,"-parameters"),t)},a.a.createElement(ee,{schemaName:"Parameters",schema:c,expanded:!0})),s&&a.a.createElement("div",{className:"mt-2",id:oe.getIdentifier("operation-".concat(r,"-").concat(o,"-security"),t)},a.a.createElement(V,{security:s,header:"Additional security requirements"})),l.hasBindings()&&a.a.createElement("div",{className:"mt-2"},a.a.createElement(ie,{name:"Channel specific information",bindings:l.bindings()})),a.a.createElement(X,{name:"Channel Extensions",item:l}),i.hasBindings()&&a.a.createElement("div",{className:"mt-2"},a.a.createElement(ie,{name:"Operation specific information",bindings:i.bindings()})),a.a.createElement(X,{name:"Operation Extensions",item:i}),i.hasTags()&&a.a.createElement("div",{className:"mt-2"},a.a.createElement(U,{tags:i.tags()}))),a.a.createElement("div",{className:"w-full mt-4",id:oe.getIdentifier("operation-".concat(r,"-").concat(o,"-message"),t)},i.hasMultipleMessages()?a.a.createElement("div",{className:"mt-2"},a.a.createElement("p",{className:"px-8"},"Accepts ",a.a.createElement("strong",null,"one of")," the following messages:"),a.a.createElement("ul",null,i.messages().map((function(e,t){return a.a.createElement("li",{className:"mt-4",key:t},a.a.createElement(Be,{message:e,index:t,showExamples:!0}))})))):a.a.createElement("div",{className:"mt-2"},a.a.createElement("p",{className:"px-8"},"Accepts the following message:"),a.a.createElement("div",{className:"mt-2"},a.a.createElement(Be,{message:i.message(0),showExamples:!0})))))},Le=function(e){var t=e.type,n=void 0===t?Ie.a.PUBLISH:t,r=e.operation,i=e.channelName,l=e.channel,u=y(),s=r.summary(),c=r.externalDocs(),f=r.id();return a.a.createElement(a.a.Fragment,null,a.a.createElement("div",{className:"mb-4"},a.a.createElement("h3",null,a.a.createElement("span",{className:"font-mono border uppercase p-1 rounded mr-2 ".concat(n===Ie.a.PUBLISH?"border-blue-600 text-blue-500":"border-green-600 text-green-600"),title:n},n===Ie.a.PUBLISH?u.publishLabel||o.f:u.subscribeLabel||o.i)," ",a.a.createElement("span",{className:"font-mono text-base"},i))),l.hasDescription()&&a.a.createElement("div",{className:"mt-2"},a.a.createElement(z,null,l.description())),s&&a.a.createElement("p",{className:"text-gray-600 text-sm mt-2"},s),r.hasDescription()&&a.a.createElement("div",{className:"mt-2"},a.a.createElement(z,null,r.description())),c&&a.a.createElement("ul",{className:"leading-normal mt-2 mb-4 space-x-2 space-y-2"},c&&a.a.createElement("li",{className:"inline-block"},a.a.createElement(A,{className:"border border-solid border-orange-300 hover:bg-orange-300 hover:text-orange-600 text-orange-500 font-bold no-underline text-xs uppercase rounded px-3 py-1",href:c.url()},a.a.createElement("span",null,o.c)))),f&&a.a.createElement("div",{className:"border bg-gray-100 rounded px-4 py-2 mt-2"},a.a.createElement("div",{className:"text-sm text-gray-700"},"Operation ID",a.a.createElement("span",{className:"border text-orange-600 rounded text-xs ml-2 py-0 px-2"},f))))},Ue=function(){var e=h().channels(),t=y();if(!Object.keys(e).length)return null;var n=[];return Object.entries(e).forEach((function(e){var r=e[0],i=e[1];i.hasPublish()&&n.push(a.a.createElement("li",{className:"mb-12",key:"pub-".concat(r),id:oe.getIdentifier("operation-".concat(Ie.a.PUBLISH,"-").concat(r),t)},a.a.createElement(ze,{type:Ie.a.PUBLISH,operation:i.publish(),channelName:r,channel:i}))),i.hasSubscribe()&&n.push(a.a.createElement("li",{className:"mb-12",key:"sub-".concat(r),id:oe.getIdentifier("operation-".concat(Ie.a.SUBSCRIBE,"-").concat(r),t)},a.a.createElement(ze,{type:Ie.a.SUBSCRIBE,operation:i.subscribe(),channelName:r,channel:i})))})),a.a.createElement("section",{id:"".concat(oe.getIdentifier("operations",t)),className:"mt-16"},a.a.createElement("h2",{className:"2xl:w-7/12 text-3xl font-light mb-4 px-8"},o.e),a.a.createElement("ul",null,n))},$e=function(){var e=h(),t=y(),n=e.hasComponents()&&e.components().messages();return n&&0!==Object.keys(n).length?a.a.createElement("section",{id:"".concat(oe.getIdentifier("messages",t)),className:"mt-16"},a.a.createElement("h2",{className:"2xl:w-7/12 text-3xl font-light mb-4 px-8"},o.d),a.a.createElement("ul",null,Object.entries(n).map((function(e,n){var r=e[0],i=e[1];return a.a.createElement("li",{className:"mb-4",key:r,id:oe.getIdentifier("message-".concat(r),t)},a.a.createElement(Be,{messageName:r,message:i,index:n+1,key:r}))})))):null},He=function(e){var t=e.schemaName,n=e.schema;return n?a.a.createElement("div",null,a.a.createElement("div",{className:"panel-item--center px-8"},a.a.createElement("div",{className:"shadow rounded px-4 py-2 border bg-gray-200"},a.a.createElement(ee,{schemaName:t,schema:n}))),a.a.createElement("div",{className:"w-full mt-4"})):null},Ve=function(){var e=h(),t=y(),n=e.hasComponents()&&e.components().schemas();return n&&0!==Object.keys(n).length?a.a.createElement("section",{id:"".concat(oe.getIdentifier("schemas",t)),className:"mt-16"},a.a.createElement("h2",{className:"2xl:w-7/12 text-3xl font-light mb-4 px-8"},o.g),a.a.createElement("ul",null,Object.entries(n).map((function(e){var n=e[0],r=e[1];return a.a.createElement("li",{className:"mb-4",key:n,id:oe.getIdentifier("schema-".concat(n),t)},a.a.createElement(He,{schemaName:n,schema:r}))})))):null},We=function(e){var t=e.error;if(!t)return null;var n,r=t.title,i=t.validationErrors;return a.a.createElement("div",{className:"panel-item"},a.a.createElement("div",{className:"panel-item--center p-8"},a.a.createElement("section",{className:"shadow rounded bg-gray-200 border-red-500 border-l-8"},a.a.createElement("h2",{className:"p-2"},r?"".concat(o.b,": ").concat(r):o.b),i&&i.length?a.a.createElement("div",{className:"bg-gray-800 text-white text-xs p-2"},a.a.createElement("pre",null,(n=i)?n.map((function(e,t){return e&&e.title&&e.location?a.a.createElement("div",{key:t,className:"flex"},a.a.createElement("span",null,"".concat(e.location.startLine,".")),a.a.createElement("code",{className:"whitespace-pre-wrap break-all ml-2"},e.title)):null})).filter(Boolean):null)):null)),a.a.createElement("div",{className:"panel-item--right"}))},qe=function(e){var t=e.asyncapi,n=e.config,i=e.error,o=void 0===i?null:i,l=Object(r.useState)("container:xl"),u=l[0],c=l[1],f=s({onResize:function(e){var t=e.width;requestAnimationFrame((function(){if(void 0!==t){var e=t<=1280?"container:xl":"container:base";e!==u&&c(e)}}))}}).ref,d=n.show||{};return a.a.createElement(g.Provider,{value:n},a.a.createElement(m.Provider,{value:t},a.a.createElement("section",{className:"aui-root"},a.a.createElement("div",{className:"".concat(u," relative md:flex bg-white leading-normal"),id:n.schemaID||void 0,ref:f},d.sidebar&&a.a.createElement(x,null),a.a.createElement("div",{className:"panel--center relative py-8 flex-1"},a.a.createElement("div",{className:"relative z-10"},d.errors&&o&&a.a.createElement(We,{error:o}),d.info&&a.a.createElement($,null),d.servers&&a.a.createElement(ue,null),d.operations&&a.a.createElement(Ue,null),d.messages&&a.a.createElement($e,null),d.schemas&&a.a.createElement(Ve,null)),a.a.createElement("div",{className:"panel--right absolute top-0 right-0 h-full bg-gray-800"}))))))},Ye=(Fe=function(e,t){return(Fe=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}Fe(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),Qe=function(){return(Qe=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&a[a.length-1])||6!==i[0]&&2!==i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]{/^x-[\w\d\.\-\_]+$/.test(t)&&(e[String(t)]=n)}),e},extensionKeys(){return Object.keys(this.extensions())},extKeys(){return this.extensionKeys()},hasExtension(e){return!!e.startsWith("x-")&&!!this._json[String(e)]},extension(e){return e.startsWith("x-")?this._json[String(e)]:null},hasExt(e){return this.hasExtension(e)},ext(e){return this.extension(e)}};e.exports=n},40:function(e,t,n){const{createMapOfType:r,getMapValueOfType:a,mix:i}=n(2),o=n(3),l=n(41),u=n(83),s=n(7),c=n(21),f=n(4),d=n(22);e.exports=i(class extends o{url(){return this._json.url}protocol(){return this._json.protocol}protocolVersion(){return this._json.protocolVersion}variables(){return r(this._json.variables,l)}variable(e){return a(this._json.variables,e,l)}hasVariables(){return!!this._json.variables}security(){return this._json.security?this._json.security.map(e=>new u(e)):null}},s,c,f,d)},41:function(e,t,n){const{mix:r}=n(2),a=n(3),i=n(7),o=n(4);e.exports=r(class extends a{allowedValues(){return this._json.enum}allows(e){return void 0===this._json.enum||this._json.enum.includes(e)}hasAllowedValues(){return void 0!==this._json.enum}defaultValue(){return this._json.default}hasDefaultValue(){return void 0!==this._json.default}examples(){return this._json.examples}},i,o)},42:function(e,t,n){const{createMapOfType:r,getMapValueOfType:a,mix:i}=n(2),o=n(3),l=n(43),u=n(86),s=n(90),c=n(7),f=n(21),d=n(4);e.exports=i(class extends o{parameters(){return r(this._json.parameters,l)}parameter(e){return a(this._json.parameters,e,l)}hasParameters(){return!!this._json.parameters}hasServers(){return!!this._json.servers}servers(){return this._json.servers?this._json.servers:[]}server(e){return this._json.servers?"number"!=typeof e||e>this._json.servers.length-1?null:this._json.servers[+e]:null}publish(){return this._json.publish?new u(this._json.publish):null}subscribe(){return this._json.subscribe?new s(this._json.subscribe):null}hasPublish(){return!!this._json.publish}hasSubscribe(){return!!this._json.subscribe}},c,f,d)},43:function(e,t,n){const{mix:r}=n(2),a=n(3),i=n(11),o=n(7),l=n(4);e.exports=r(class extends a{location(){return this._json.location}schema(){return this._json.schema?new i(this._json.schema):null}},o,l)},44:function(e,t,n){const{mix:r}=n(2),a=n(3),i=n(7),o=n(22),l=n(17),u=n(21),s=n(4);e.exports=r(class extends a{id(){return this._json.operationId}summary(){return this._json.summary}},i,o,l,u,s)},45:function(e,t,n){(function(t){const r=n(46),a=n(47),i=n(11);e.exports=class extends a{uid(){return this.id()||this.name()||this.ext("x-parser-message-name")||t.from(JSON.stringify(this._json)).toString("base64")}payload(){return this._json.payload?new i(this._json.payload):null}traits(){const e=this._json["x-parser-original-traits"]||this._json.traits;return e?e.map(e=>new r(e)):[]}hasTraits(){return!!this._json["x-parser-original-traits"]||!!this._json.traits}originalPayload(){return this._json["x-parser-original-payload"]||this.payload()}originalSchemaFormat(){return this._json["x-parser-original-schema-format"]||this.schemaFormat()}}}).call(this,n(6).Buffer)},46:function(e,t,n){const r=n(47);e.exports=class extends r{}},47:function(e,t,n){const{getMapValueOfType:r,mix:a}=n(2),i=n(3),o=n(11),l=n(48),u=n(7),s=n(17),c=n(22),f=n(21),d=n(4);e.exports=a(class extends i{headers(){return this._json.headers?new o(this._json.headers):null}header(e){return this._json.headers?r(this._json.headers.properties,e,o):null}id(){return this._json.messageId}correlationId(){return this._json.correlationId?new l(this._json.correlationId):null}schemaFormat(){return this._json.schemaFormat}contentType(){return this._json.contentType}name(){return this._json.name}title(){return this._json.title}summary(){return this._json.summary}examples(){return this._json.examples}},u,c,s,f,d)},48:function(e,t,n){const{mix:r}=n(2),a=n(3),i=n(7),o=n(4);e.exports=r(class extends a{location(){return this._json.location}},o,i)},49:function(e,t,n){const r=n(44);e.exports=class extends r{}},50:function(e,t){const n=Object.freeze({NEW_SCHEMA:"NEW_SCHEMA",END_SCHEMA:"END_SCHEMA"}),r=Object.freeze({parameters:"parameters",payloads:"payloads",headers:"headers",components:"components",objects:"objects",arrays:"arrays",oneOfs:"oneOfs",allOfs:"allOfs",anyOfs:"anyOfs",nots:"nots",propertyNames:"propertyNames",patternProperties:"patternProperties",contains:"contains",ifs:"ifs",thenes:"thenes",elses:"elses",dependencies:"dependencies",definitions:"definitions"});function a(e,t,i){if(!e)return;const{callback:o,schemaTypesToIterate:l,seenSchemas:u}=i,s=e.json();if(u.has(s))return;u.add(s);let c=e.type()||[];Array.isArray(c)||(c=[c]),!l.includes(r.objects)&&c.includes("object")||!l.includes(r.arrays)&&c.includes("array")||!1!==o(e,t,n.NEW_SCHEMA)&&(l.includes(r.objects)&&c.includes("object")&&function(e,t){Object.entries(e.properties()||{}).forEach(([e,n])=>{a(n,e,t)});const n=e.additionalProperties();"object"==typeof n&&a(n,null,t);const i=t.schemaTypesToIterate;i.includes(r.propertyNames)&&e.propertyNames()&&a(e.propertyNames(),null,t);i.includes(r.patternProperties)&&Object.entries(e.patternProperties()||{}).forEach(([e,n])=>{a(n,e,t)})}(e,i),l.includes(r.arrays)&&c.includes("array")&&function(e,t){const n=e.items();n&&(Array.isArray(n)?n.forEach((e,n)=>{a(e,n,t)}):a(n,null,t));const i=e.additionalItems();"object"==typeof i&&a(i,null,t);t.schemaTypesToIterate.includes(r.contains)&&e.contains()&&a(e.contains(),null,t)}(e,i),l.includes(r.oneOfs)&&(e.oneOf()||[]).forEach((e,t)=>{a(e,t,i)}),l.includes(r.anyOfs)&&(e.anyOf()||[]).forEach((e,t)=>{a(e,t,i)}),l.includes(r.allOfs)&&(e.allOf()||[]).forEach((e,t)=>{a(e,t,i)}),l.includes(r.nots)&&e.not()&&a(e.not(),null,i),l.includes(r.ifs)&&e.if()&&a(e.if(),null,i),l.includes(r.thenes)&&e.then()&&a(e.then(),null,i),l.includes(r.elses)&&e.else()&&a(e.else(),null,i),l.includes(r.dependencies)&&Object.entries(e.dependencies()||{}).forEach(([e,t])=>{t&&!Array.isArray(t)&&a(t,e,i)}),l.includes(r.definitions)&&Object.entries(e.definitions()||{}).forEach(([e,t])=>{a(t,e,i)}),o(e,t,n.END_SCHEMA),u.delete(s))}function i(e,t){if(!e)return;const{schemaTypesToIterate:n}=t;n.includes(r.headers)&&a(e.headers(),null,t),n.includes(r.payloads)&&a(e.payload(),null,t)}e.exports={SchemaIteratorCallbackType:n,SchemaTypesToIterate:r,traverseAsyncApiDocument:function(e,t,n){n||(n=Object.values(r));const o={callback:t,schemaTypesToIterate:n,seenSchemas:new Set};if(e.hasChannels()&&Object.values(e.channels()).forEach(e=>{!function(e,t){if(!e)return;const{schemaTypesToIterate:n}=t;n.includes(r.parameters)&&Object.values(e.parameters()||{}).forEach(e=>{a(e.schema(),null,t)});e.hasPublish()&&e.publish().messages().forEach(e=>{i(e,t)});e.hasSubscribe()&&e.subscribe().messages().forEach(e=>{i(e,t)})}(e,o)}),n.includes(r.components)&&e.hasComponents()){const t=e.components();Object.values(t.messages()||{}).forEach(e=>{i(e,o)}),Object.values(t.schemas()||{}).forEach(e=>{a(e,null,o)}),n.includes(r.parameters)&&Object.values(t.parameters()||{}).forEach(e=>{a(e.schema(),null,o)}),Object.values(t.messageTraits()||{}).forEach(e=>{!function(e,t){if(!e)return;const{schemaTypesToIterate:n}=t;n.includes(r.headers)&&a(e.headers(),null,t)}(e,o)})}}}},51:function(e,t,n){ -/*! @license DOMPurify 2.3.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.3.6/LICENSE */ -e.exports=function(){"use strict";var e=Object.hasOwnProperty,t=Object.setPrototypeOf,n=Object.isFrozen,r=Object.getPrototypeOf,a=Object.getOwnPropertyDescriptor,i=Object.freeze,o=Object.seal,l=Object.create,u="undefined"!=typeof Reflect&&Reflect,s=u.apply,c=u.construct;s||(s=function(e,t,n){return e.apply(t,n)}),i||(i=function(e){return e}),o||(o=function(e){return e}),c||(c=function(e,t){return new(Function.prototype.bind.apply(e,[null].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1?n-1:0),a=1;a/gm),z=o(/^data-[\-\w.\u00B7-\uFFFF]/),L=o(/^aria-[\-\w]+$/),U=o(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),$=o(/^(?:\w+script|data):/i),H=o(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),V=o(/^html$/i),W="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:Y(),n=function(t){return e(t)};if(n.version="2.3.6",n.removed=[],!t||!t.document||9!==t.document.nodeType)return n.isSupported=!1,n;var r=t.document,a=t.document,o=t.DocumentFragment,l=t.HTMLTemplateElement,u=t.Node,s=t.Element,c=t.NodeFilter,f=t.NamedNodeMap,w=void 0===f?t.NamedNodeMap||t.MozNamedAttrMap:f,K=t.HTMLFormElement,G=t.DOMParser,Z=t.trustedTypes,X=s.prototype,J=C(X,"cloneNode"),ee=C(X,"nextSibling"),te=C(X,"childNodes"),ne=C(X,"parentNode");if("function"==typeof l){var re=a.createElement("template");re.content&&re.content.ownerDocument&&(a=re.content.ownerDocument)}var ae=Q(Z,r),ie=ae?ae.createHTML(""):"",oe=a,le=oe.implementation,ue=oe.createNodeIterator,se=oe.createDocumentFragment,ce=oe.getElementsByTagName,fe=r.importNode,de={};try{de=k(a).documentMode?a.documentMode:{}}catch(e){}var pe={};n.isSupported="function"==typeof ne&&le&&void 0!==le.createHTMLDocument&&9!==de;var me=I,he=M,ge=z,ye=L,be=$,ve=H,xe=U,Ee=null,we=D({},[].concat(q(_),q(A),q(S),q(N),q(F))),De=null,ke=D({},[].concat(q(j),q(P),q(R),q(B))),Ce=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),_e=null,Ae=null,Se=!0,Te=!0,Ne=!1,Oe=!1,Fe=!1,je=!1,Pe=!1,Re=!1,Be=!1,Ie=!1,Me=!0,ze=!0,Le=!1,Ue={},$e=null,He=D({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),Ve=null,We=D({},["audio","video","img","source","image","track"]),qe=null,Ye=D({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Qe="http://www.w3.org/1998/Math/MathML",Ke="http://www.w3.org/2000/svg",Ge="http://www.w3.org/1999/xhtml",Ze=Ge,Xe=!1,Je=void 0,et=["application/xhtml+xml","text/html"],tt="text/html",nt=void 0,rt=null,at=a.createElement("form"),it=function(e){return e instanceof RegExp||e instanceof Function},ot=function(e){rt&&rt===e||(e&&"object"===(void 0===e?"undefined":W(e))||(e={}),e=k(e),Ee="ALLOWED_TAGS"in e?D({},e.ALLOWED_TAGS):we,De="ALLOWED_ATTR"in e?D({},e.ALLOWED_ATTR):ke,qe="ADD_URI_SAFE_ATTR"in e?D(k(Ye),e.ADD_URI_SAFE_ATTR):Ye,Ve="ADD_DATA_URI_TAGS"in e?D(k(We),e.ADD_DATA_URI_TAGS):We,$e="FORBID_CONTENTS"in e?D({},e.FORBID_CONTENTS):He,_e="FORBID_TAGS"in e?D({},e.FORBID_TAGS):{},Ae="FORBID_ATTR"in e?D({},e.FORBID_ATTR):{},Ue="USE_PROFILES"in e&&e.USE_PROFILES,Se=!1!==e.ALLOW_ARIA_ATTR,Te=!1!==e.ALLOW_DATA_ATTR,Ne=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Oe=e.SAFE_FOR_TEMPLATES||!1,Fe=e.WHOLE_DOCUMENT||!1,Re=e.RETURN_DOM||!1,Be=e.RETURN_DOM_FRAGMENT||!1,Ie=e.RETURN_TRUSTED_TYPE||!1,Pe=e.FORCE_BODY||!1,Me=!1!==e.SANITIZE_DOM,ze=!1!==e.KEEP_CONTENT,Le=e.IN_PLACE||!1,xe=e.ALLOWED_URI_REGEXP||xe,Ze=e.NAMESPACE||Ge,e.CUSTOM_ELEMENT_HANDLING&&it(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Ce.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&it(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Ce.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(Ce.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Je=Je=-1===et.indexOf(e.PARSER_MEDIA_TYPE)?tt:e.PARSER_MEDIA_TYPE,nt="application/xhtml+xml"===Je?function(e){return e}:h,Oe&&(Te=!1),Be&&(Re=!0),Ue&&(Ee=D({},[].concat(q(F))),De=[],!0===Ue.html&&(D(Ee,_),D(De,j)),!0===Ue.svg&&(D(Ee,A),D(De,P),D(De,B)),!0===Ue.svgFilters&&(D(Ee,S),D(De,P),D(De,B)),!0===Ue.mathMl&&(D(Ee,N),D(De,R),D(De,B))),e.ADD_TAGS&&(Ee===we&&(Ee=k(Ee)),D(Ee,e.ADD_TAGS)),e.ADD_ATTR&&(De===ke&&(De=k(De)),D(De,e.ADD_ATTR)),e.ADD_URI_SAFE_ATTR&&D(qe,e.ADD_URI_SAFE_ATTR),e.FORBID_CONTENTS&&($e===He&&($e=k($e)),D($e,e.FORBID_CONTENTS)),ze&&(Ee["#text"]=!0),Fe&&D(Ee,["html","head","body"]),Ee.table&&(D(Ee,["tbody"]),delete _e.tbody),i&&i(e),rt=e)},lt=D({},["mi","mo","mn","ms","mtext"]),ut=D({},["foreignobject","desc","title","annotation-xml"]),st=D({},A);D(st,S),D(st,T);var ct=D({},N);D(ct,O);var ft=function(e){var t=ne(e);t&&t.tagName||(t={namespaceURI:Ge,tagName:"template"});var n=h(e.tagName),r=h(t.tagName);if(e.namespaceURI===Ke)return t.namespaceURI===Ge?"svg"===n:t.namespaceURI===Qe?"svg"===n&&("annotation-xml"===r||lt[r]):Boolean(st[n]);if(e.namespaceURI===Qe)return t.namespaceURI===Ge?"math"===n:t.namespaceURI===Ke?"math"===n&&ut[r]:Boolean(ct[n]);if(e.namespaceURI===Ge){if(t.namespaceURI===Ke&&!ut[r])return!1;if(t.namespaceURI===Qe&&!lt[r])return!1;var a=D({},["title","style","font","a","script"]);return!ct[n]&&(a[n]||!st[n])}return!1},dt=function(e){m(n.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){try{e.outerHTML=ie}catch(t){e.remove()}}},pt=function(e,t){try{m(n.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){m(n.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!De[e])if(Re||Be)try{dt(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},mt=function(e){var t=void 0,n=void 0;if(Pe)e=""+e;else{var r=g(e,/^[\r\n\t ]+/);n=r&&r[0]}"application/xhtml+xml"===Je&&(e=''+e+"");var i=ae?ae.createHTML(e):e;if(Ze===Ge)try{t=(new G).parseFromString(i,Je)}catch(e){}if(!t||!t.documentElement){t=le.createDocument(Ze,"template",null);try{t.documentElement.innerHTML=Xe?"":i}catch(e){}}var o=t.body||t.documentElement;return e&&n&&o.insertBefore(a.createTextNode(n),o.childNodes[0]||null),Ze===Ge?ce.call(t,Fe?"html":"body")[0]:Fe?t.documentElement:o},ht=function(e){return ue.call(e.ownerDocument||e,e,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT,null,!1)},gt=function(e){return e instanceof K&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||!(e.attributes instanceof w)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore)},yt=function(e){return"object"===(void 0===u?"undefined":W(u))?e instanceof u:e&&"object"===(void 0===e?"undefined":W(e))&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName},bt=function(e,t,r){pe[e]&&d(pe[e],(function(e){e.call(n,t,r,rt)}))},vt=function(e){var t=void 0;if(bt("beforeSanitizeElements",e,null),gt(e))return dt(e),!0;if(g(e.nodeName,/[\u0080-\uFFFF]/))return dt(e),!0;var r=nt(e.nodeName);if(bt("uponSanitizeElement",e,{tagName:r,allowedTags:Ee}),!yt(e.firstElementChild)&&(!yt(e.content)||!yt(e.content.firstElementChild))&&x(/<[/\w]/g,e.innerHTML)&&x(/<[/\w]/g,e.textContent))return dt(e),!0;if("select"===r&&x(/