{"name":"T-Invest API","vendor":"Т-Банк","industry":"finance","summary":"Интерфейс для работы с торговой платформой Т-Инвестиции: поиск инструментов и их параметров, исторические и текущие котировки, выставление и отмена заявок, портфель и операции по счёту, расписания торгов. Основной протокол — gRPC, для REST есть прокси с OpenAPI-спецификацией, для потоков данных — WebSocket. Есть песочница для тестирования роботов на реальных рыночных данных без изменения реального счёта.","docsUrl":"https://developer.tbank.ru/invest/intro/intro/","coverage":{"included":[],"excluded":[]},"scenarios":[{"id":"posmotret-scheta-i-portfel","title":"Посмотреть счета и портфель","summary":"Сводка по брокерским счетам: стоимость портфеля, позиции, доходность — для своего дашборда или отчёта.","steps":["Выпусти токен в настройках Т-Инвестиций: для чтения хватит Readonly. Передавай его в заголовке Authorization: Bearer <токен>. REST-адрес — https://invest-public-api.tbank.ru/rest/<сервис>/<метод>, все методы — POST с JSON.","Получи счета: POST /tinkoff.public.invest.api.contract.v1.UsersService/GetAccounts — в ответе id каждого счёта.","Получи портфель: POST /tinkoff.public.invest.api.contract.v1.OperationsService/GetPortfolio с accountId. Позиции без оценки — POST /tinkoff.public.invest.api.contract.v1.OperationsService/GetPositions.","Суммы приходят объектами MoneyValue и Quotation: целая часть в units (строкой), дробная — в nano (миллиардные доли). Значение = units + nano / 1 000 000 000."],"code":"import requests\n\nAPI = \"https://invest-public-api.tbank.ru/rest/tinkoff.public.invest.api.contract.v1\"\nH = {\"Authorization\": \"Bearer <токен>\"}\nq = lambda m: int(m[\"units\"]) + m[\"nano\"] / 1e9\n\naccounts = requests.post(f\"{API}.UsersService/GetAccounts\", headers=H, json={}).json()[\"accounts\"]\nfor acc in accounts:\n    p = requests.post(f\"{API}.OperationsService/GetPortfolio\", headers=H, json={\"accountId\": acc[\"id\"], \"currency\": \"RUB\"}).json()\n    print(acc[\"name\"], q(p[\"totalAmountPortfolio\"]))","language":"python","methods":["POST /tinkoff.public.invest.api.contract.v1.UsersService/GetAccounts","POST /tinkoff.public.invest.api.contract.v1.OperationsService/GetPortfolio","POST /tinkoff.public.invest.api.contract.v1.OperationsService/GetPositions"]},{"id":"nayti-instrument-i-uznat-ego-tsenu","title":"Найти инструмент и узнать его цену","summary":"Получить идентификатор бумаги по тикеру, последнюю цену и свечи для графика.","steps":["Найди инструмент: POST /tinkoff.public.invest.api.contract.v1.InstrumentsService/FindInstrument с query — тикером или названием (например, SBER). Для торговли передай apiTradeAvailableFlag = true. Сохрани uid инструмента.","Последняя цена: POST /tinkoff.public.invest.api.contract.v1.MarketDataService/GetLastPrices с instrumentId — массивом uid (или тикер_класс, например SBER_TQBR).","Свечи: POST /tinkoff.public.invest.api.contract.v1.MarketDataService/GetCandles с instrumentId, from и to в UTC и interval, например CANDLE_INTERVAL_HOUR.","Стакан, если нужен, — POST /tinkoff.public.invest.api.contract.v1.MarketDataService/GetOrderBook с depth."],"code":"API=https://invest-public-api.tbank.ru/rest/tinkoff.public.invest.api.contract.v1\ncurl -X POST \"$API.InstrumentsService/FindInstrument\" -H \"Authorization: Bearer $TINVEST_TOKEN\" \\\n  -H 'Content-Type: application/json' -d '{\"query\": \"SBER\", \"apiTradeAvailableFlag\": true}'\n\ncurl -X POST \"$API.MarketDataService/GetLastPrices\" -H \"Authorization: Bearer $TINVEST_TOKEN\" \\\n  -H 'Content-Type: application/json' -d '{\"instrumentId\": [\"SBER_TQBR\"]}'","language":"bash","methods":["POST /tinkoff.public.invest.api.contract.v1.InstrumentsService/FindInstrument","POST /tinkoff.public.invest.api.contract.v1.MarketDataService/GetCandles","POST /tinkoff.public.invest.api.contract.v1.MarketDataService/GetLastPrices","POST /tinkoff.public.invest.api.contract.v1.MarketDataService/GetOrderBook"]},{"id":"vystavit-zayavku-i-proverit-ispolnenie","title":"Выставить заявку и проверить исполнение","summary":"Торговый робот или кнопка «Купить» в своём интерфейсе.","steps":["Нужен токен Full-access (или с доступом к конкретному счёту), функция «Подтверждение сделок кодом» должна быть выключена. Сначала отладь робота в песочнице.","Проверь, сколько лотов можно купить: POST /tinkoff.public.invest.api.contract.v1.OrdersService/GetMaxLots с accountId и instrumentId.","Выстави заявку: POST /tinkoff.public.invest.api.contract.v1.OrdersService/PostOrder с accountId, instrumentId, quantity (в лотах), direction (ORDER_DIRECTION_BUY или SELL), orderType (LIMIT или MARKET), price для лимитной заявки и orderId — UUID для идемпотентности: повтор с тем же orderId не создаст вторую заявку.","Проверь статус: POST /tinkoff.public.invest.api.contract.v1.OrdersService/GetOrderState. Отменить — POST /tinkoff.public.invest.api.contract.v1.OrdersService/CancelOrder, изменить — POST /tinkoff.public.invest.api.contract.v1.OrdersService/ReplaceOrder с новым idempotencyKey.","Цена передаётся объектом Quotation: units — целая часть строкой, nano — дробная."],"code":"import uuid\n\norder = requests.post(f\"{API}.OrdersService/PostOrder\", headers=H, json={\n    \"accountId\": \"<id счёта>\",\n    \"instrumentId\": \"<uid инструмента>\",\n    \"quantity\": \"1\",\n    \"direction\": \"ORDER_DIRECTION_BUY\",\n    \"orderType\": \"ORDER_TYPE_LIMIT\",\n    \"price\": {\"units\": \"280\", \"nano\": 500000000},  # 280,5 ₽\n    \"orderId\": str(uuid.uuid4()),\n}).json()\nstate = requests.post(f\"{API}.OrdersService/GetOrderState\", headers=H,\n                      json={\"accountId\": \"<id счёта>\", \"orderId\": order[\"orderId\"]}).json()\nprint(state[\"executionReportStatus\"])","language":"python","methods":["POST /tinkoff.public.invest.api.contract.v1.OrdersService/PostOrder","POST /tinkoff.public.invest.api.contract.v1.OrdersService/ReplaceOrder","POST /tinkoff.public.invest.api.contract.v1.OrdersService/CancelOrder","POST /tinkoff.public.invest.api.contract.v1.OrdersService/GetOrderState","POST /tinkoff.public.invest.api.contract.v1.OrdersService/GetMaxLots"]},{"id":"proverit-robota-v-pesochnitse","title":"Проверить робота в песочнице","summary":"Тестировать стратегию на реальных рыночных данных, не трогая настоящий счёт.","steps":["Выпусти отдельный Sandbox token — обычный токен в песочнице не работает, и наоборот. Адрес песочницы — https://sandbox-invest-public-api.tbank.ru/rest.","Открой счёт: POST /tinkoff.public.invest.api.contract.v1.SandboxService/OpenSandboxAccount.","Пополни его: POST /tinkoff.public.invest.api.contract.v1.SandboxService/SandboxPayIn с accountId и amount.","Дальше вызывай те же методы, что и в бою, — заявки, портфель, котировки — на адресе песочницы. Стоп-заявки и часть отчётов в песочнице недоступны."],"code":"SB=https://sandbox-invest-public-api.tbank.ru/rest/tinkoff.public.invest.api.contract.v1\nACC=$(curl -s -X POST \"$SB.SandboxService/OpenSandboxAccount\" -H \"Authorization: Bearer $SANDBOX_TOKEN\" \\\n  -H 'Content-Type: application/json' -d '{\"name\": \"robot-test\"}' | jq -r .accountId)\n\ncurl -X POST \"$SB.SandboxService/SandboxPayIn\" -H \"Authorization: Bearer $SANDBOX_TOKEN\" \\\n  -H 'Content-Type: application/json' -d \"{\\\"accountId\\\": \\\"$ACC\\\", \\\"amount\\\": {\\\"units\\\": \\\"100000\\\", \\\"nano\\\": 0, \\\"currency\\\": \\\"rub\\\"}}\"","language":"bash","methods":["POST /tinkoff.public.invest.api.contract.v1.SandboxService/OpenSandboxAccount","POST /tinkoff.public.invest.api.contract.v1.SandboxService/SandboxPayIn"]},{"id":"vygruzit-operatsii-po-schetu","title":"Выгрузить операции по счёту","summary":"Сделки, комиссии, дивиденды и пополнения — для учёта и налоговых расчётов.","steps":["Запроси операции: POST /tinkoff.public.invest.api.contract.v1.OperationsService/GetOperationsByCursor с accountId, from и to в UTC и limit (до 1000).","Если в ответе hasNext = true, повтори запрос с cursor = nextCursor из ответа.","Отфильтровать можно по типам операций (operationTypes), инструменту (instrumentId) и статусу (state).","Лимит сервиса операций — 200 запросов в минуту; при превышении придёт 429."],"code":"ops, cursor = [], \"\"\nwhile True:\n    r = requests.post(f\"{API}.OperationsService/GetOperationsByCursor\", headers=H, json={\n        \"accountId\": \"<id счёта>\", \"from\": \"2026-01-01T00:00:00Z\", \"to\": \"2026-10-24T00:00:00Z\",\n        \"limit\": 1000, \"cursor\": cursor}).json()\n    ops += r[\"items\"]\n    if not r.get(\"hasNext\"):\n        break\n    cursor = r[\"nextCursor\"]","language":"python","methods":["POST /tinkoff.public.invest.api.contract.v1.OperationsService/GetOperationsByCursor"]}],"baseUrls":[{"label":"Боевой (REST)","url":"https://invest-public-api.tbank.ru/rest"},{"label":"Тестовый (REST, песочница)","url":"https://sandbox-invest-public-api.tbank.ru/rest"},{"label":"Боевой (gRPC)","url":"invest-public-api.tinkoff.ru:443"},{"label":"Тестовый (gRPC, песочница)","url":"sandbox-invest-public-api.tinkoff.ru:443"}],"auth":{"type":"bearer","description":"Токен выпускается в настройках профиля Т-Инвестиций (https://www.tbank.ru/invest/settings/). Функция «Подтверждение сделок кодом» должна быть отключена. Токен показывается один раз, выпускать можно неограниченное количество. Виды токенов: Readonly (только чтение), Full-access (все методы), токен с доступом к конкретному счёту и Sandbox token (только для песочницы; для обычных методов вернёт ошибку). Токен передаётся в заголовке `Authorization` в формате `Bearer t.QtEo8ahkNFX4RTpbqp0u4z4GDZq27HzUp6AotJASBx7_DVqmqZMHfM2Cy7JmUjS80boI9eVg`, в gRPC — в metadata каждого запроса и стрима.\n\nСрок жизни токена — три месяца с даты последнего использования. Неактуальный токен даёт ошибку:","example":"\"code\": \"40003\"\n\"message\": \"authentication token is missing or invalid\""},"methods":[{"id":"POST /tinkoff.public.invest.api.contract.v1.UsersService/GetAccounts","title":"Счета пользователя","httpMethod":"POST","path":"/tinkoff.public.invest.api.contract.v1.UsersService/GetAccounts","description":"","params":[{"name":"status","in":"body","type":"v1AccountStatus","required":false,"description":"Фильтр по статусу счёта"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /tinkoff.public.invest.api.contract.v1.UsersService/GetInfo","title":"Информация о пользователе","httpMethod":"POST","path":"/tinkoff.public.invest.api.contract.v1.UsersService/GetInfo","description":"Тело запроса пустое.","params":[],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /tinkoff.public.invest.api.contract.v1.InstrumentsService/FindInstrument","title":"Найти инструмент","httpMethod":"POST","path":"/tinkoff.public.invest.api.contract.v1.InstrumentsService/FindInstrument","description":"","params":[{"name":"query","in":"body","type":"string","required":true,"description":"Строка поиска"},{"name":"instrumentKind","in":"body","type":"v1InstrumentType","required":false,"description":"Тип инструмента"},{"name":"apiTradeAvailableFlag","in":"body","type":"boolean","required":false,"description":"Показывать только торговые инструменты"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /tinkoff.public.invest.api.contract.v1.InstrumentsService/GetInstrumentBy","title":"Основная информация об инструменте","httpMethod":"POST","path":"/tinkoff.public.invest.api.contract.v1.InstrumentsService/GetInstrumentBy","description":"","params":[{"name":"idType","in":"body","type":"v1InstrumentIdType","required":true,"description":"Тип идентификатора"},{"name":"classCode","in":"body","type":"string","required":false,"description":"Идентификатор class_code; обязателен, если id_type = ticker"},{"name":"id","in":"body","type":"string","required":true,"description":"Идентификатор запрашиваемого инструмента"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /tinkoff.public.invest.api.contract.v1.InstrumentsService/Shares","title":"Список акций","httpMethod":"POST","path":"/tinkoff.public.invest.api.contract.v1.InstrumentsService/Shares","description":"","params":[{"name":"instrumentStatus","in":"body","type":"v1InstrumentStatus","required":false,"description":"Статус инструмента"},{"name":"instrumentExchange","in":"body","type":"v1InstrumentExchangeType","required":false,"description":"Площадка"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /tinkoff.public.invest.api.contract.v1.MarketDataService/GetCandles","title":"Исторические свечи","httpMethod":"POST","path":"/tinkoff.public.invest.api.contract.v1.MarketDataService/GetCandles","description":"","params":[{"name":"from","in":"body","type":"string","required":true,"description":"Начало периода по UTC"},{"name":"to","in":"body","type":"string","required":true,"description":"Окончание периода по UTC"},{"name":"interval","in":"body","type":"v1CandleInterval","required":true,"description":"Интервал свечей, например CANDLE_INTERVAL_1_MIN, CANDLE_INTERVAL_HOUR, CANDLE_INTERVAL_DAY"},{"name":"instrumentId","in":"body","type":"string","required":false,"description":"figi, instrument_uid или ticker + '_' + class_code"},{"name":"candleSourceType","in":"body","type":"v1GetCandlesRequestCandleSource","required":false,"description":"Источник свечей"},{"name":"limit","in":"body","type":"integer","required":false,"description":"Максимальное количество свечей в ответе"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /tinkoff.public.invest.api.contract.v1.MarketDataService/GetLastPrices","title":"Цены последних сделок","httpMethod":"POST","path":"/tinkoff.public.invest.api.contract.v1.MarketDataService/GetLastPrices","description":"","params":[{"name":"instrumentId","in":"body","type":"string","required":false,"description":"Массив идентификаторов: figi, instrument_uid или ticker + '_' + class_code"},{"name":"lastPriceType","in":"body","type":"v1LastPriceType","required":false,"description":"Тип цены"},{"name":"instrumentStatus","in":"body","type":"v1InstrumentStatus","required":false,"description":"Статус инструмента"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /tinkoff.public.invest.api.contract.v1.MarketDataService/GetOrderBook","title":"Стакан по инструменту","httpMethod":"POST","path":"/tinkoff.public.invest.api.contract.v1.MarketDataService/GetOrderBook","description":"","params":[{"name":"depth","in":"body","type":"integer","required":true,"description":"Глубина стакана"},{"name":"instrumentId","in":"body","type":"string","required":false,"description":"figi, instrument_uid или ticker + '_' + class_code"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /tinkoff.public.invest.api.contract.v1.OperationsService/GetPortfolio","title":"Портфель по счёту","httpMethod":"POST","path":"/tinkoff.public.invest.api.contract.v1.OperationsService/GetPortfolio","description":"","params":[{"name":"accountId","in":"body","type":"string","required":true,"description":"Идентификатор счёта пользователя"},{"name":"currency","in":"body","type":"PortfolioRequestCurrencyRequest","required":false,"description":"Валюта расчёта"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /tinkoff.public.invest.api.contract.v1.OperationsService/GetPositions","title":"Позиции по счёту","httpMethod":"POST","path":"/tinkoff.public.invest.api.contract.v1.OperationsService/GetPositions","description":"","params":[{"name":"accountId","in":"body","type":"string","required":true,"description":"Идентификатор счёта пользователя"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /tinkoff.public.invest.api.contract.v1.OperationsService/GetOperationsByCursor","title":"Операции по счёту с пагинацией","httpMethod":"POST","path":"/tinkoff.public.invest.api.contract.v1.OperationsService/GetOperationsByCursor","description":"","params":[{"name":"accountId","in":"body","type":"string","required":true,"description":"Идентификатор счёта клиента"},{"name":"instrumentId","in":"body","type":"string","required":false,"description":"FIGI или UID инструмента"},{"name":"from","in":"body","type":"string","required":false,"description":"Начало периода по UTC"},{"name":"to","in":"body","type":"string","required":false,"description":"Окончание периода по UTC"},{"name":"cursor","in":"body","type":"string","required":false,"description":"Идентификатор элемента, с которого начать ответ"},{"name":"limit","in":"body","type":"integer","required":false,"description":"Лимит операций: по умолчанию 100, максимум 1000"},{"name":"operationTypes","in":"body","type":"array","required":false,"description":"Типы операций из списка OperationType"},{"name":"state","in":"body","type":"v1OperationState","required":false,"description":"Статус операции"},{"name":"withoutCommissions","in":"body","type":"boolean","required":false,"description":"Флаг возврата комиссии, по умолчанию false"},{"name":"withoutTrades","in":"body","type":"boolean","required":false,"description":"Ответ без массива сделок"},{"name":"withoutOvernights","in":"body","type":"boolean","required":false,"description":"Флаг показа overnight-операций"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /tinkoff.public.invest.api.contract.v1.OrdersService/PostOrder","title":"Выставить заявку","httpMethod":"POST","path":"/tinkoff.public.invest.api.contract.v1.OrdersService/PostOrder","description":"","params":[{"name":"quantity","in":"body","type":"string","required":true,"description":"Количество лотов"},{"name":"price","in":"body","type":"v1Quotation","required":false,"description":"Цена (для лимитной заявки)"},{"name":"price.units","in":"body","type":"string","required":false,"description":"Целая часть суммы"},{"name":"price.nano","in":"body","type":"integer","required":false,"description":"Дробная часть суммы"},{"name":"direction","in":"body","type":"v1OrderDirection","required":true,"description":"ORDER_DIRECTION_BUY или ORDER_DIRECTION_SELL"},{"name":"accountId","in":"body","type":"string","required":true,"description":"Номер счёта"},{"name":"orderType","in":"body","type":"v1OrderType","required":true,"description":"ORDER_TYPE_LIMIT, ORDER_TYPE_MARKET, ORDER_TYPE_BESTPRICE"},{"name":"orderId","in":"body","type":"string","required":true,"description":"Идентификатор запроса для идемпотентности в формате UID, до 36 символов"},{"name":"instrumentId","in":"body","type":"string","required":false,"description":"Figi или Instrument_uid"},{"name":"timeInForce","in":"body","type":"v1TimeInForceType","required":false,"description":"Срок действия заявки"},{"name":"priceType","in":"body","type":"v1PriceType","required":false,"description":"Тип цены"},{"name":"confirmMarginTrade","in":"body","type":"boolean","required":false,"description":"Согласие на заявку, которая может привести к непокрытой позиции; по умолчанию false"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /tinkoff.public.invest.api.contract.v1.OrdersService/ReplaceOrder","title":"Изменить выставленную заявку","httpMethod":"POST","path":"/tinkoff.public.invest.api.contract.v1.OrdersService/ReplaceOrder","description":"","params":[{"name":"accountId","in":"body","type":"string","required":true,"description":"Номер счёта"},{"name":"orderId","in":"body","type":"string","required":true,"description":"Идентификатор заявки на бирже"},{"name":"idempotencyKey","in":"body","type":"string","required":true,"description":"Новый ключ идемпотентности, до 36 символов; перезатирает старый"},{"name":"quantity","in":"body","type":"string","required":true,"description":"Количество лотов"},{"name":"price","in":"body","type":"v1Quotation","required":false,"description":"Цена"},{"name":"priceType","in":"body","type":"v1PriceType","required":false,"description":"Тип цены"},{"name":"confirmMarginTrade","in":"body","type":"boolean","required":false,"description":"Согласие на непокрытую позицию"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /tinkoff.public.invest.api.contract.v1.OrdersService/CancelOrder","title":"Отменить заявку","httpMethod":"POST","path":"/tinkoff.public.invest.api.contract.v1.OrdersService/CancelOrder","description":"","params":[{"name":"accountId","in":"body","type":"string","required":true,"description":"Номер счёта"},{"name":"orderId","in":"body","type":"string","required":true,"description":"Идентификатор заявки"},{"name":"orderIdType","in":"body","type":"v1OrderIdType","required":false,"description":"Тип идентификатора заявки"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /tinkoff.public.invest.api.contract.v1.OrdersService/GetOrders","title":"Активные заявки по счёту","httpMethod":"POST","path":"/tinkoff.public.invest.api.contract.v1.OrdersService/GetOrders","description":"","params":[{"name":"accountId","in":"body","type":"string","required":true,"description":"Номер счёта"},{"name":"advancedFilters","in":"body","type":"GetOrdersRequestGetOrdersRequestFilters","required":false,"description":"Дополнительные фильтры"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /tinkoff.public.invest.api.contract.v1.OrdersService/GetOrderState","title":"Статус торгового поручения","httpMethod":"POST","path":"/tinkoff.public.invest.api.contract.v1.OrdersService/GetOrderState","description":"","params":[{"name":"accountId","in":"body","type":"string","required":true,"description":"Номер счёта"},{"name":"orderId","in":"body","type":"string","required":true,"description":"Идентификатор заявки"},{"name":"priceType","in":"body","type":"v1PriceType","required":false,"description":"Тип цены"},{"name":"orderIdType","in":"body","type":"v1OrderIdType","required":false,"description":"Тип идентификатора заявки"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /tinkoff.public.invest.api.contract.v1.OrdersService/GetMaxLots","title":"Доступное количество лотов","httpMethod":"POST","path":"/tinkoff.public.invest.api.contract.v1.OrdersService/GetMaxLots","description":"","params":[{"name":"accountId","in":"body","type":"string","required":true,"description":"Номер счёта"},{"name":"instrumentId","in":"body","type":"string","required":true,"description":"Идентификатор инструмента"},{"name":"price","in":"body","type":"v1Quotation","required":false,"description":"Цена"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /tinkoff.public.invest.api.contract.v1.StopOrdersService/PostStopOrder","title":"Выставить стоп-заявку","httpMethod":"POST","path":"/tinkoff.public.invest.api.contract.v1.StopOrdersService/PostStopOrder","description":"","params":[{"name":"quantity","in":"body","type":"string","required":true,"description":"Количество лотов"},{"name":"price","in":"body","type":"v1Quotation","required":false,"description":"Цена"},{"name":"stopPrice","in":"body","type":"v1Quotation","required":false,"description":"Стоп-цена"},{"name":"direction","in":"body","type":"v1StopOrderDirection","required":true,"description":"Направление"},{"name":"accountId","in":"body","type":"string","required":true,"description":"Номер счёта"},{"name":"expirationType","in":"body","type":"v1StopOrderExpirationType","required":true,"description":"Тип срока действия"},{"name":"stopOrderType","in":"body","type":"v1StopOrderType","required":true,"description":"Тип стоп-заявки"},{"name":"expireDate","in":"body","type":"string","required":false,"description":"Окончание действия по UTC; обязательно для GoodTillDate"},{"name":"instrumentId","in":"body","type":"string","required":true,"description":"figi или instrument_uid"},{"name":"orderId","in":"body","type":"string","required":true,"description":"Ключ идемпотентности в формате UID, до 36 символов"},{"name":"confirmMarginTrade","in":"body","type":"boolean","required":false,"description":"Согласие на непокрытую позицию"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /tinkoff.public.invest.api.contract.v1.SandboxService/OpenSandboxAccount","title":"Открыть счёт в песочнице","httpMethod":"POST","path":"/tinkoff.public.invest.api.contract.v1.SandboxService/OpenSandboxAccount","description":"","params":[{"name":"name","in":"body","type":"string","required":false,"description":"Название счёта"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /tinkoff.public.invest.api.contract.v1.SandboxService/SandboxPayIn","title":"Пополнить счёт в песочнице","httpMethod":"POST","path":"/tinkoff.public.invest.api.contract.v1.SandboxService/SandboxPayIn","description":"","params":[{"name":"accountId","in":"body","type":"string","required":true,"description":"Номер счёта в песочнице"},{"name":"amount","in":"body","type":"v1MoneyValue","required":true,"description":"Сумма пополнения"}],"requestExample":"","responseExample":"","docsUrl":""}],"codeExamples":[],"errors":[{"code":"400","description":"INVALID_ARGUMENT — запрос составлен неверно"},{"code":"401","description":"UNAUTHENTICATED — токен не найден или не активен"},{"code":"403","description":"PERMISSION_DENIED — недостаточно прав; проверьте соответствие токена и счёта"},{"code":"404","description":"Неверный URL запроса"},{"code":"408","description":"Превышено время ожидания ответа"},{"code":"415","description":"Неверный тип данных"},{"code":"429","description":"RESOURCE_EXHAUSTED — превышен лимит запросов в минуту"},{"code":"500","description":"Внутренняя ошибка сервера"},{"code":"503","description":"Сервис временно недоступен"},{"code":"504","description":"DEADLINE_EXCEEDED — нет ответа от шлюза"},{"code":"30011","description":"interval is invalid (пример из спецификации, HTTP 400)"},{"code":"40002","description":"insufficient privileges (HTTP 403)"},{"code":"40003","description":"authentication token is missing or invalid (HTTP 401)"},{"code":"50004","description":"account not found (HTTP 404)"}],"limits":"Лимиты unary-запросов в минуту:\n\n- Сервис инструментов — 200\n- Сервис счетов — 100\n- Сервис операций — 200 (формирование отчётов — 5)\n- Сервис котировок — 600\n- Сервис стоп-ордеров — 50\n- Песочница — 200\n- Сервис ордеров — 100; отдельно `getOrders` — 200, `postOrder` — 300, `cancelOrder` — 100, `postOrderAsync` — 450\n- `getHistory` (REST) — 30\n\nВ одном stream-соединении сервиса котировок — до 300 одновременных подписок на свечи, стаканы и ленту сделок суммарно. `GetOperationsByCursor` отдаёт до 1000 операций за запрос.","gotchas":["Для `PostOrder` и `PostStopOrder` обязателен `orderId` — ключ идемпотентности в формате UID до 36 символов; у `ReplaceOrder` новый ключ передаётся в `idempotencyKey`.","Суммы и цены передаются не числом, а объектом Quotation/MoneyValue: целая часть в `units` (строка) и дробная в `nano`.","Песочница работает почти со всеми теми же методами, но в ней недоступны `GetBrokerReport`, `GetDividendsForeignIssuer` и сервис стоп-заявок; для неё нужен отдельный Sandbox token.","Сделки на сумму больше 30 000 000 рублей требуют подтверждения и через API недоступны.","Лимиты считаются суммарно по всем счетам пользователя; с одного адреса рекомендуется не больше 50 запросов в секунду по всем счетам и токенам.","Разработчикам публичного ПО нужно зарегистрировать название приложения через invest-public-api@tbank.ru."],"slug":"t-invest","version":2,"updatedAt":"2026-10-24T17:05:37.521Z","sources":[{"title":"OpenAPI-спецификация (GitHub)","url":"https://github.com/RussianInvestments/investAPI/blob/main/src/docs/swagger-ui/openapi.yaml","kind":"research","addedAt":"2026-10-12T08:18:26.721Z"},{"title":"Токен","url":"https://github.com/RussianInvestments/investAPI/blob/main/src/docs/token.md","kind":"research","addedAt":"2026-10-12T08:18:26.721Z"},{"title":"Песочница и прод","url":"https://github.com/RussianInvestments/investAPI/blob/main/src/docs/url_difference.md","kind":"research","addedAt":"2026-10-12T08:18:26.721Z"},{"title":"HTTP-коды ответа","url":"https://github.com/RussianInvestments/investAPI/blob/main/src/docs/http_errors.md","kind":"research","addedAt":"2026-10-12T08:18:26.721Z"},{"title":"Лимиты","url":"https://github.com/RussianInvestments/investAPI/blob/main/src/docs/limits.md","kind":"research","addedAt":"2026-10-12T08:18:26.721Z"},{"title":"Вставленный текст","url":"","kind":"import","addedAt":"2026-10-12T08:18:26.721Z"},{"title":"scenarios-t-invest.md","url":"","kind":"import","addedAt":"2026-10-24T17:05:27.551Z"}],"logoUrl":null}