T-Invest API: Выставить заявку и проверить исполнение

Сценарий из mcp-everything. Актуально на 2026-10-24.

Торговый робот или кнопка «Купить» в своём интерфейсе.

  1. Нужен токен Full-access (или с доступом к конкретному счёту), функция «Подтверждение сделок кодом» должна быть выключена. Сначала отладь робота в песочнице.
  2. Проверь, сколько лотов можно купить: POST /tinkoff.public.invest.api.contract.v1.OrdersService/GetMaxLots с accountId и instrumentId.
  3. Выстави заявку: POST /tinkoff.public.invest.api.contract.v1.OrdersService/PostOrder с accountId, instrumentId, quantity (в лотах), direction (ORDER_DIRECTION_BUY или SELL), orderType (LIMIT или MARKET), price для лимитной заявки и orderId — UUID для идемпотентности: повтор с тем же orderId не создаст вторую заявку.
  4. Проверь статус: 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.
  5. Цена передаётся объектом Quotation: units — целая часть строкой, nano — дробная.
import uuid

order = requests.post(f"{API}.OrdersService/PostOrder", headers=H, json={
    "accountId": "<id счёта>",
    "instrumentId": "<uid инструмента>",
    "quantity": "1",
    "direction": "ORDER_DIRECTION_BUY",
    "orderType": "ORDER_TYPE_LIMIT",
    "price": {"units": "280", "nano": 500000000},  # 280,5 ₽
    "orderId": str(uuid.uuid4()),
}).json()
state = requests.post(f"{API}.OrdersService/GetOrderState", headers=H,
                      json={"accountId": "<id счёта>", "orderId": order["orderId"]}).json()
print(state["executionReportStatus"])

Базовые URL

Авторизация

Тип: Bearer-токен

Токен выпускается в настройках профиля Т-Инвестиций (https://www.tbank.ru/invest/settings/). Функция «Подтверждение сделок кодом» должна быть отключена. Токен показывается один раз, выпускать можно неограниченное количество. Виды токенов: Readonly (только чтение), Full-access (все методы), токен с доступом к конкретному счёту и Sandbox token (только для песочницы; для обычных методов вернёт ошибку). Токен передаётся в заголовке Authorization в формате Bearer t.QtEo8ahkNFX4RTpbqp0u4z4GDZq27HzUp6AotJASBx7_DVqmqZMHfM2Cy7JmUjS80boI9eVg, в gRPC — в metadata каждого запроса и стрима.

Срок жизни токена — три месяца с даты последнего использования. Неактуальный токен даёт ошибку:

"code": "40003"
"message": "authentication token is missing or invalid"

Методы сценария

POST /tinkoff.public.invest.api.contract.v1.OrdersService/PostOrder — Выставить заявку

Параметр Где Тип Обяз. Описание
quantity body string да Количество лотов
price body v1Quotation нет Цена (для лимитной заявки)
price.units body string нет Целая часть суммы
price.nano body integer нет Дробная часть суммы
direction body v1OrderDirection да ORDER_DIRECTION_BUY или ORDER_DIRECTION_SELL
accountId body string да Номер счёта
orderType body v1OrderType да ORDER_TYPE_LIMIT, ORDER_TYPE_MARKET, ORDER_TYPE_BESTPRICE
orderId body string да Идентификатор запроса для идемпотентности в формате UID, до 36 символов
instrumentId body string нет Figi или Instrument_uid
timeInForce body v1TimeInForceType нет Срок действия заявки
priceType body v1PriceType нет Тип цены
confirmMarginTrade body boolean нет Согласие на заявку, которая может привести к непокрытой позиции; по умолчанию false

POST /tinkoff.public.invest.api.contract.v1.OrdersService/ReplaceOrder — Изменить выставленную заявку

Параметр Где Тип Обяз. Описание
accountId body string да Номер счёта
orderId body string да Идентификатор заявки на бирже
idempotencyKey body string да Новый ключ идемпотентности, до 36 символов; перезатирает старый
quantity body string да Количество лотов
price body v1Quotation нет Цена
priceType body v1PriceType нет Тип цены
confirmMarginTrade body boolean нет Согласие на непокрытую позицию

POST /tinkoff.public.invest.api.contract.v1.OrdersService/CancelOrder — Отменить заявку

Параметр Где Тип Обяз. Описание
accountId body string да Номер счёта
orderId body string да Идентификатор заявки
orderIdType body v1OrderIdType нет Тип идентификатора заявки

POST /tinkoff.public.invest.api.contract.v1.OrdersService/GetOrderState — Статус торгового поручения

Параметр Где Тип Обяз. Описание
accountId body string да Номер счёта
orderId body string да Идентификатор заявки
priceType body v1PriceType нет Тип цены
orderIdType body v1OrderIdType нет Тип идентификатора заявки

POST /tinkoff.public.invest.api.contract.v1.OrdersService/GetMaxLots — Доступное количество лотов

Параметр Где Тип Обяз. Описание
accountId body string да Номер счёта
instrumentId body string да Идентификатор инструмента
price body v1Quotation нет Цена

Нюансы

Другие сценарии


Если этого недостаточно — официальная документация: https://developer.tbank.ru/invest/intro/intro/ Вся интеграция одним документом: https://mcp-everything.ru/integrations/t-invest.md