avin_connect 0.2.6

Open source cross-platform trading system
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
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 "common.proto";

service OperationsService {/*Сервис предназначен для получения:</br> **1**.  списка операций по счёту;</br> **2**.
                              портфеля по счёту;</br> **3**. позиций ценных бумаг на счёте;</br> **4**.
                              доступного остатка для вывода средств;</br> **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) с данным методом.
  rpc GetOperationsByCursor(GetOperationsByCursorRequest) returns (GetOperationsByCursorResponse);
}

service OperationsStreamService {
  //Server-side stream обновлений портфеля
  rpc PortfolioStream(PortfolioStreamRequest) returns (stream PortfolioStreamResponse);

  //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-идентификатор инструмента для фильтрации.
}

//Список операций.
message OperationsResponse {
  repeated Operation operations = 1; //Массив операций.
}

//Данные по операции.
message Operation {
  string id = 1; //Идентификатор операции.
  string parent_operation_id = 2; //Идентификатор родительской операции.
  string currency = 3; //Валюта операции.
  MoneyValue payment = 4; //Сумма операции.
  MoneyValue price = 5; //Цена операции за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента.
  OperationState state = 6; //Статус операции.
  int64 quantity = 7; //Количество единиц инструмента.
  int64 quantity_rest = 8; //Неисполненный остаток по сделке.
  string figi = 9; //Figi-идентификатор инструмента, связанного с операцией.
  string instrument_type = 10;  //Тип инструмента. Возможные значения: </br>**bond** — облигация; </br>**share** — акция; </br>**currency** — валюта; </br>**etf** — фонд; </br>**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 instrument_uid	= 18; //Уникальный идентификатор инструмента.
}

//Сделка по операции.
message OperationTrade {
  string trade_id = 1; //Идентификатор сделки.
  google.protobuf.Timestamp date_time = 2; //Дата и время сделки в часовом поясе UTC.
  int64 quantity = 3; //Количество инструментов.
  MoneyValue price = 4; //Цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента.
}

//Запрос получения текущего портфеля по счёту.
message PortfolioRequest {
  string account_id = 1; //Идентификатор счёта пользователя.
  CurrencyRequest currency = 2; //Валюта, в которой требуется рассчитать портфель
  enum CurrencyRequest {
    RUB = 0; //Рубли
    USD = 1; //Доллары
    EUR = 2; //Евро
  }
}

//Текущий портфель по счёту.
message PortfolioResponse {
  MoneyValue total_amount_shares = 1; //Общая стоимость акций в портфеле.
  MoneyValue total_amount_bonds = 2; //Общая стоимость облигаций в портфеле.
  MoneyValue total_amount_etf = 3; //Общая стоимость фондов в портфеле.
  MoneyValue total_amount_currencies = 4; //Общая стоимость валют в портфеле.
  MoneyValue total_amount_futures = 5; //Общая стоимость фьючерсов в портфеле.
  Quotation expected_yield = 6; //Текущая относительная доходность портфеля, в %.
  repeated PortfolioPosition positions = 7; //Список позиций портфеля.
  string account_id = 8; //Идентификатор счёта пользователя.

  MoneyValue total_amount_options = 9; //Общая стоимость опционов в портфеле.
  MoneyValue total_amount_sp = 10; //Общая стоимость структурных нот в портфеле.
  MoneyValue total_amount_portfolio = 11; //Общая стоимость портфеля.
  repeated VirtualPortfolioPosition virtual_positions = 12; //Массив виртуальных позиций портфеля.
}

//Запрос позиций портфеля по счёту.
message PositionsRequest {
  string account_id = 1; //Идентификатор счёта пользователя.
}

//Список позиций по счёту.
message PositionsResponse {
  repeated MoneyValue money = 1;  //Массив валютных позиций портфеля.
  repeated MoneyValue blocked = 2;  //Массив заблокированных валютных позиций портфеля.
  repeated PositionsSecurities securities = 3;  //Список ценно-бумажных позиций портфеля.
  bool limits_loading_in_progress = 4;  //Признак идущей в данный момент выгрузки лимитов.
  repeated PositionsFutures futures = 5;  //Список фьючерсов портфеля.
  repeated PositionsOptions options = 6;  //Список опционов портфеля.
}

//Запрос доступного для вывода остатка.
message WithdrawLimitsRequest {
  string account_id = 1; //Идентификатор счёта пользователя.
}

//Доступный для вывода остаток.
message WithdrawLimitsResponse {
  repeated MoneyValue money = 1; //Массив валютных позиций портфеля.
  repeated MoneyValue blocked = 2; //Массив заблокированных валютных позиций портфеля.
  repeated MoneyValue blocked_guarantee = 3; //Заблокировано под гарантийное обеспечение фьючерсов.
}

//Позиции портфеля.
message PortfolioPosition {
  string figi = 1; //Figi-идентификатора инструмента.
  string instrument_type = 2; //Тип инструмента.
  Quotation quantity = 3; //Количество инструмента в портфеле в штуках.
  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 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; //Вариационная маржа
  Quotation expected_yield_fifo = 27; //Текущая рассчитанная доходность позиции.
}

message VirtualPortfolioPosition {
  string position_uid = 1; //position_uid-идентификатора инструмента
  string instrument_uid = 2; //instrument_uid-идентификатора инструмента
  string figi = 3; //Figi-идентификатора инструмента.
  string instrument_type = 4; //Тип инструмента.
  Quotation quantity = 5; //Количество инструмента в портфеле в штуках.
  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. **Возможна задержка до секунды для пересчёта**.
}

//Баланс позиции ценной бумаги.
message PositionsSecurities {
  string figi = 1; //Figi-идентификатор бумаги.
  int64 blocked = 2; //Количество бумаг заблокированных выставленными заявками.
  int64 balance = 3;  //Текущий незаблокированный баланс.
  string position_uid = 4; //Уникальный идентификатор позиции.
  string instrument_uid = 5; //Уникальный идентификатор  инструмента.
  bool exchange_blocked = 11; //Заблокировано на бирже.
  string instrument_type = 16; //Тип инструмента.
}

//Баланс фьючерса.
message PositionsFutures {
  string figi = 1; //Figi-идентификатор фьючерса.
  int64 blocked = 2; //Количество бумаг заблокированных выставленными заявками.
  int64 balance = 3;  //Текущий незаблокированный баланс.
  string position_uid = 4; //Уникальный идентификатор позиции.
  string instrument_uid = 5; //Уникальный идентификатор  инструмента.
}

//Баланс опциона.
message PositionsOptions {
  string position_uid = 1; //Уникальный идентификатор позиции опциона.
  string instrument_uid = 2; //Уникальный идентификатор  инструмента.
  int64 blocked = 11; //Количество бумаг заблокированных выставленными заявками.
  int64 balance = 21;  //Текущий незаблокированный баланс.
}

message BrokerReportRequest {
  oneof payload {
    GenerateBrokerReportRequest generate_broker_report_request = 1;
    GetBrokerReportRequest get_broker_report_request = 2;
  }
}

message BrokerReportResponse {
  oneof payload {
    GenerateBrokerReportResponse generate_broker_report_response = 1;
    GetBrokerReportResponse get_broker_report_response = 2;
  }
}

message GenerateBrokerReportRequest {
  string account_id = 1; //Идентификатор счёта клиента.
  google.protobuf.Timestamp from = 2; //Начало периода в часовом поясе UTC.
  google.protobuf.Timestamp to = 3; //Окончание периода в часовом поясе UTC.
}

message GenerateBrokerReportResponse {
  string task_id = 1; //Идентификатор задачи формирования брокерского отчёта.
}

message GetBrokerReportRequest {
  string task_id = 1; //Идентификатор задачи формирования брокерского отчёта.
  int32 page = 2; //Номер страницы отчета (начинается с 1), значение по умолчанию: 0.
}

message GetBrokerReportResponse {
  repeated BrokerReport broker_report = 1;
  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 execute_sign = 4; //Признак исполнения.
  google.protobuf.Timestamp trade_datetime = 5; //Дата и время заключения в часовом поясе UTC.
  string exchange = 6; //Торговая площадка.
  string class_code = 7; //Режим торгов.
  string direction = 8; //Вид сделки.
  string name = 9; //Сокращённое наименование актива.
  string ticker = 10; //Код актива.
  MoneyValue price = 11; //Цена за единицу.
  int64 quantity = 12; //Количество.
  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.
  string broker_status = 23; //Статус брокера.
  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_CANCELED = 2; //Отменена.
  OPERATION_STATE_PROGRESS = 3; //Исполняется.
}

//Тип операции.
enum OperationType {
  OPERATION_TYPE_UNSPECIFIED = 0; //Тип операции не определён.
  OPERATION_TYPE_INPUT = 1; //Пополнение брокерского счёта.
  OPERATION_TYPE_BOND_TAX = 2; //Удержание НДФЛ по купонам.
  OPERATION_TYPE_OUTPUT_SECURITIES = 3; //Вывод ЦБ.
  OPERATION_TYPE_OVERNIGHT = 4; //Доход по сделке РЕПО овернайт.
  OPERATION_TYPE_TAX = 5; //Удержание налога.
  OPERATION_TYPE_BOND_REPAYMENT_FULL = 6; //Полное погашение облигаций.
  OPERATION_TYPE_SELL_CARD = 7; //Продажа ЦБ с карты.
  OPERATION_TYPE_DIVIDEND_TAX = 8; //Удержание налога по дивидендам.
  OPERATION_TYPE_OUTPUT = 9; //Вывод денежных средств.
  OPERATION_TYPE_BOND_REPAYMENT = 10; //Частичное погашение облигаций.
  OPERATION_TYPE_TAX_CORRECTION = 11; //Корректировка налога.
  OPERATION_TYPE_SERVICE_FEE = 12; //Удержание комиссии за обслуживание брокерского счёта.
  OPERATION_TYPE_BENEFIT_TAX = 13; //Удержание налога за материальную выгоду.
  OPERATION_TYPE_MARGIN_FEE = 14; //Удержание комиссии за непокрытую позицию.
  OPERATION_TYPE_BUY = 15; //Покупка ЦБ.
  OPERATION_TYPE_BUY_CARD = 16; //Покупка ЦБ с карты.
  OPERATION_TYPE_INPUT_SECURITIES = 17; //Перевод ценных бумаг из другого депозитария.
  OPERATION_TYPE_SELL_MARGIN = 18; //Продажа в результате Margin-call.
  OPERATION_TYPE_BROKER_FEE = 19; //Удержание комиссии за операцию.
  OPERATION_TYPE_BUY_MARGIN = 20; //Покупка в результате Margin-call.
  OPERATION_TYPE_DIVIDEND = 21; //Выплата дивидендов.
  OPERATION_TYPE_SELL = 22; //Продажа ЦБ.
  OPERATION_TYPE_COUPON = 23; //Выплата купонов.
  OPERATION_TYPE_SUCCESS_FEE = 24; //Удержание комиссии SuccessFee.
  OPERATION_TYPE_DIVIDEND_TRANSFER = 25; //Передача дивидендного дохода.
  OPERATION_TYPE_ACCRUING_VARMARGIN = 26; //Зачисление вариационной маржи.
  OPERATION_TYPE_WRITING_OFF_VARMARGIN = 27; //Списание вариационной маржи.
  OPERATION_TYPE_DELIVERY_BUY = 28; //Покупка в рамках экспирации фьючерсного контракта.
  OPERATION_TYPE_DELIVERY_SELL = 29; //Продажа в рамках экспирации фьючерсного контракта.
  OPERATION_TYPE_TRACK_MFEE = 30; //Комиссия за управление по счёту автоследования.
  OPERATION_TYPE_TRACK_PFEE = 31; //Комиссия за результат по счёту автоследования.
  OPERATION_TYPE_TAX_PROGRESSIVE = 32; //Удержание налога по ставке 15%.
  OPERATION_TYPE_BOND_TAX_PROGRESSIVE = 33; //Удержание налога по купонам по ставке 15%.
  OPERATION_TYPE_DIVIDEND_TAX_PROGRESSIVE = 34; //Удержание налога по дивидендам по ставке 15%.
  OPERATION_TYPE_BENEFIT_TAX_PROGRESSIVE = 35; //Удержание налога за материальную выгоду по ставке 15%.
  OPERATION_TYPE_TAX_CORRECTION_PROGRESSIVE = 36; //Корректировка налога по ставке 15%.
  OPERATION_TYPE_TAX_REPO_PROGRESSIVE = 37; //Удержание налога за возмещение по сделкам РЕПО по ставке 15%.
  OPERATION_TYPE_TAX_REPO = 38; //Удержание налога за возмещение по сделкам РЕПО.
  OPERATION_TYPE_TAX_REPO_HOLD = 39; //Удержание налога по сделкам РЕПО.
  OPERATION_TYPE_TAX_REPO_REFUND = 40; //Возврат налога по сделкам РЕПО.
  OPERATION_TYPE_TAX_REPO_HOLD_PROGRESSIVE = 41; //Удержание налога по сделкам РЕПО по ставке 15%.
  OPERATION_TYPE_TAX_REPO_REFUND_PROGRESSIVE = 42; //Возврат налога по сделкам РЕПО по ставке 15%.
  OPERATION_TYPE_DIV_EXT = 43; //Выплата дивидендов на карту.
  OPERATION_TYPE_TAX_CORRECTION_COUPON = 44; //Корректировка налога по купонам.
  OPERATION_TYPE_CASH_FEE = 45; //Комиссия за валютный остаток.
  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;	// Экспирация
}

message GetDividendsForeignIssuerRequest {
  oneof payload {
    GenerateDividendsForeignIssuerReportRequest generate_div_foreign_issuer_report = 1; //Объект запроса формирования отчёта.
    GetDividendsForeignIssuerReportRequest get_div_foreign_issuer_report = 2; //Объект запроса сформированного отчёта.
  }
}

message GetDividendsForeignIssuerResponse {
  oneof payload {
    GenerateDividendsForeignIssuerReportResponse generate_div_foreign_issuer_report_response = 1; //Объект результата задачи запуска формирования отчёта.
    GetDividendsForeignIssuerReportResponse div_foreign_issuer_report = 2; //Отчёт "Справка о доходах за пределами РФ".
  }
}

//Объект запроса формирования отчёта "Справка о доходах за пределами РФ".
message GenerateDividendsForeignIssuerReportRequest {
  string account_id = 1; //Идентификатор счёта клиента.
  google.protobuf.Timestamp from = 2; //Начало периода (по UTC).
  google.protobuf.Timestamp to = 3; //Окончание периода (по UTC).
}

// Объект запроса сформированного отчёта "Справка о доходах за пределами РФ".
message GetDividendsForeignIssuerReportRequest {
  string task_id = 1; //Идентификатор задачи формирования отчёта.
  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).
}

// Отчёт "Справка о доходах за пределами РФ".
message DividendsForeignIssuerReport {
  google.protobuf.Timestamp record_date = 1; //Дата фиксации реестра.
  google.protobuf.Timestamp payment_date = 2; //Дата выплаты.
  string security_name = 3; //Наименование ценной бумаги.
  string isin = 4; //ISIN-идентификатор ценной бумаги.
  string issuer_country = 5; //Страна эмитента. Для депозитарных расписок указывается страна эмитента базового актива.
  int64 quantity = 6; //Количество ценных бумаг.
  Quotation dividend = 7; //Выплаты на одну бумагу
  Quotation external_commission = 8; //Комиссия внешних платёжных агентов.
  Quotation dividend_gross = 9; //Сумма до удержания налога.
  Quotation tax = 10; //Сумма налога, удержанного агентом.
  Quotation dividend_amount = 11; //Итоговая сумма выплаты.
  string currency = 12; //Валюта.
}

//Запрос установки stream-соединения.
message PortfolioStreamRequest {
  repeated string accounts = 1; //Массив идентификаторов счётов пользователя
}

//Информация по позициям и доходностям портфелей.
message PortfolioStreamResponse {
  oneof payload {
    PortfolioSubscriptionResult subscriptions = 1; //Объект результата подписки.
    PortfolioResponse portfolio = 2; //Объект стриминга портфеля.
    Ping ping = 3; //Проверка активности стрима.
  }
}

//Объект результата подписки.
message PortfolioSubscriptionResult {
  repeated AccountSubscriptionStatus accounts = 1; //Массив счетов клиента.
}

//Счет клиента.
message AccountSubscriptionStatus {
  string account_id = 1; //Идентификатор счёта
  PortfolioSubscriptionStatus subscription_status = 6; //Результат подписки.
}

//Результат подписки.
enum PortfolioSubscriptionStatus {
  PORTFOLIO_SUBSCRIPTION_STATUS_UNSPECIFIED = 0; //Тип не определён.
  PORTFOLIO_SUBSCRIPTION_STATUS_SUCCESS = 1; //Успешно.
  PORTFOLIO_SUBSCRIPTION_STATUS_ACCOUNT_NOT_FOUND = 2; //Счёт не найден или недостаточно прав.
  PORTFOLIO_SUBSCRIPTION_STATUS_INTERNAL_ERROR = 3; //Произошла ошибка.
}

//Запрос списка операций по счёту с пагинацией.
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 операций.
}

//Список операций по счёту с пагинацией.
message GetOperationsByCursorResponse {
  bool has_next = 1; //Признак, есть ли следующий элемент.
  string next_cursor = 2; //Следующий курсор.
  repeated OperationItem items = 6; //Список операций.
}

//Данные об операции.
message OperationItem {
  string cursor = 1; //Курсор.
  string broker_account_id = 6; //Номер счета клиента.
  string id = 16; //Идентификатор операции, может меняться с течением времени.
  string parent_operation_id = 17; //Идентификатор родительской операции, может измениться, если изменился id родительской операции.
  string name = 18; //Название операции.
  google.protobuf.Timestamp	date = 21; //Дата поручения.
  OperationType type = 22; //Тип операции.
  string description = 23; //Описание операции.
  OperationState state = 24; //Статус поручения.
  string instrument_uid = 31; //Уникальный идентификатор инструмента.
  string figi = 32; //Figi.
  string instrument_type = 33; //Тип инструмента.
  InstrumentType instrument_kind	= 34; //Тип инструмента.
  string position_uid	= 35; //position_uid-идентификатора инструмента.
  MoneyValue payment = 41; //Сумма операции.
  MoneyValue price = 42; //Цена операции за 1 инструмент.
  MoneyValue commission = 43; //Комиссия.
  MoneyValue yield = 44; //Доходность.
  Quotation yield_relative = 45; //Относительная доходность.
  MoneyValue accrued_int = 46; //Накопленный купонный доход.
  int64 quantity = 51; //Количество единиц инструмента.
  int64 quantity_rest = 52; //Неисполненный остаток по сделке.
  int64 quantity_done = 53; //Исполненный остаток.
  google.protobuf.Timestamp cancel_date_time = 56; //Дата и время снятия заявки.
  string cancel_reason = 57; //Причина отмены операции.
  OperationItemTrades trades_info = 61; //Массив сделок.
  string asset_uid = 64;	//Идентификатор актива
}

//Массив с информацией о сделках.
message OperationItemTrades {
  repeated OperationItemTrade trades = 6;
}

//Сделка по операции.
message OperationItemTrade {
  string num = 1; //Номер сделки
  google.protobuf.Timestamp date = 6; //Дата сделки
  int64 quantity = 11; //Количество в единицах.
  MoneyValue price = 16; //Цена.
  MoneyValue yield = 21; //Доходность.
  Quotation yield_relative = 22; //Относительная доходность.
}

//Запрос установки stream-соединения позиций.
message PositionsStreamRequest {
  repeated string accounts = 1; //Массив идентификаторов счётов пользователя
}

//Информация по изменению позиций портфеля.
message PositionsStreamResponse {
  oneof payload {
    PositionsSubscriptionResult subscriptions = 1; //Объект результата подписки.
    PositionData position = 2; //Объект стриминга позиций.
    Ping ping = 3; //Проверка активности стрима.
  }
}

//Объект результата подписки.
message PositionsSubscriptionResult {
  repeated PositionsSubscriptionStatus accounts = 1; //Массив счетов клиента.
}

//Счет клиента.
message PositionsSubscriptionStatus {
  string account_id = 1; //Идентификатор счёта
  PositionsAccountSubscriptionStatus subscription_status = 6; //Результат подписки.
}

//Результат подписки.
enum PositionsAccountSubscriptionStatus {
  POSITIONS_SUBSCRIPTION_STATUS_UNSPECIFIED = 0; //Тип не определён.
  POSITIONS_SUBSCRIPTION_STATUS_SUCCESS = 1; //Успешно.
  POSITIONS_SUBSCRIPTION_STATUS_ACCOUNT_NOT_FOUND = 2; //Счёт не найден или недостаточно прав.
  POSITIONS_SUBSCRIPTION_STATUS_INTERNAL_ERROR = 3; //Произошла ошибка.
}

//Данные о позиции портфеля.
message PositionData {
  string account_id = 1; //Идентификатор счёта.
  repeated PositionsMoney money = 2; //Массив валютных позиций портфеля.
  repeated PositionsSecurities securities = 3; //Список ценно-бумажных позиций портфеля.
  repeated PositionsFutures futures = 4; //Список фьючерсов портфеля.
  repeated PositionsOptions options = 5; //Список опционов портфеля.
  google.protobuf.Timestamp date = 6; //Дата и время операции в формате UTC.
}

//Валютная позиция портфеля.
message PositionsMoney {
  MoneyValue available_value = 1; //Доступное количество валютный позиций.
  MoneyValue blocked_value = 2; //Заблокированное количество валютный позиций.
}