NAV Navbar
shell

История изменений

Дата Описание
26.09.2018 Первая версия документации
01.10.2018 Добавлен раздел "История операций"
06.10.2018 Дополнен раздел "История операций"
06.10.2018 Добавлен раздел "Вывод средств"
11.10.2018 Изменен формат поля accountRequests в сущности UserDto
11.10.2018 Изменен формат ответа истории операций - ticker и boardId вместо instrumentId
12.10.2018 Переименовано поле supportedTradeFloorTypes в supportedBoardTypes в сущности OpenedAccountDto
12.10.2018 Добавлено поле id и убрано поле agreementDate в сущности OpenRequestDto
16.10.2018 Изменен тип поля id на String в сущности OpenRequestDto
16.10.2018 Добавлено поле creationDate в сущности OpenRequestDto
16.10.2018 Добавлено в разделе "Авторизация": запрос email-кода для установки email/пароля, установка email/пароля, вход по паролю, изменение пароля, установка/проверка ПИН-кода, выход из аккаунта
17.10.2018 Переименовано поле profileType в type в сущности OpenedAccountDto
22.10.2018 Убран тип ошибки withdrawal.external_error
22.10.2018 Добавлен раздел "Ошибки"
07.11.2018 Добавлен раздел "Инструменты и котировки"
01.02.2019 Обновлен раздел "История операций". Изменена логика работы метода получения истории операций

Параметры работы с API

Общий вид шаблона ответа сервера:

{  
   "status":200,
   "data":{},
   "error":{  
      "code":"string",
      "text":"string description"
   }
}

Примеры успешного ответа:

{  
   "status":200
}
{  
   "status":200,
   "data":{
      "some_field":"some_data"
   }
}

Пример ответа с ошибкой:

{  
   "status":500,
   "error":{  
      "code":"validate.phone",
      "text":"Invalid phone number!"
   }
}

Параметры работы с API:
Content-Type: application/json
Encoding: UTF-8
Date format: ISO 8601 (yyyy-MM-dd'T'HH:mm:ss.SSSZ)
Соединение с сервером защищено самоподписанными сертификатами.
Файл CA (Certification Authority): скачать ca.crt - корневой сертификат.

Требования

При работе с API в каждом запросе нужно передавать Header 'Partner-Id'.
Для тестового окружения Partner-Id: test.
Получить Partner-Id для боевого окружения можно связавшись с нами любым удобным способом.

Ниже в документации приведены примеры shell вызовов API.
В коде Shell необходимо заменить переменные $PARTNER_ID и $API_ENDPOINT на соотвествующие.

Эндпоинт тестового окружения:
https://sandbox.simple-invest.mobi/api/v1

Боевого окружения:
https://prod.simple-invest.mobi/api/v1

Пример shell вызова:

curl -X POST --cacert ca.crt \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
-d "{\"phoneNumber\":\"70000000000\"}" \
$API_ENDPOINT/auth/requestAuthorizationByPhoneCode

Для удобства можно экспортировать переменные в shell:
export PARTNER_ID=test
export API_ENDPOINT=https://sandbox.simple-invest.mobi/api/v1
Теперь можно копировать и выполнять shell запросы из документации 'как есть'.

Авторизация

Пример генерации приватного ключа (private.pem) и CSR (request.csr):

openssl req -nodes -newkey rsa:2048 -sha256 \
-keyout private.pem  \ #куда сохранить файл приватного ключа
-out request.csr \ #куда сохранить файл CSR
-subj /CN=SIMPLE-INVEST.MOBI/OU=HL/O=HL/L=MSK/ST=MSK/C=RU

API Simple Invest использует авторизацию на основе клиентских сертификатов (Client Certificate Authentication).

Алгоритм авторизации клиента:
1) Клиент делает запрос на получение СМС кода на свой номер телефона (см. пункт "Запрос СМС кода") для подтверждения владения номером;
2) Клиент генерирует RSA приватный ключ;
3) На основе приватного ключа клиент создает CSR (Certificate Signing Request) - запрос на подпись сертификата;
4) Клиент передает полученный СМС код и CSR в формате PEM, в ответ получает подписанный запрос в формате PEM (см. пункт "Вход по смс коду");
5) Имея приватный ключ из шага 2 и подписанный CSR клиент создает и сохраняет сертификат

Полученный сертификат используется при установке https соединения ко всем методам, требующим авторизации. По данному сертификату сервер понимает какой именно клиент вызывает метод API.

Далее в документации методы, разрешенные для вызова только авторизованным пользователем, помечены баннером:

Авторизация по номеру телефона и коду СМС является обязательным шагом и иного способа получить подписанный клиентский сертификат не предусмотрено.

Запрос СМС кода

PHONE=70000000000

curl -X POST --cacert ca.crt \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
-d "{\"phoneNumber\":\"$PHONE\"}" \
$API_ENDPOINT/auth/requestAuthorizationByPhoneCode

Успешный ответ:

{  
   "status":200
}

Запрос СМС кода для авторизации по номеру телефона. Также используется для повторного запроса СМС кода. Запрашивать код для одного номера телефона можно не чаще 1 раза в 60 секунд и не более 5 раз за пол часа без попытки его использования в методе authorizeByPhone. Формат кода, отправляемого по СМС: XXXX - 4 цифровых символа, может начинаться с нуля.

HTTP Request

POST /auth/requestAuthorizationByPhoneCode

Параметры запроса

Параметр Обязательный Описание
phoneNumber да Номер телефона в формате 71231231212

Параметры ответа

Нет

Возможные коды ошибок

Код Описание
validate.phone Номер телефона не прошел валидацию
internal.error.sms.sending Внутренняя ошибка. Проблема с СМС провайдером
internal.error.uncaught Внутренняя ошибка сервера
internal.error.sms.sending.too_often СМС запрашивается чаще чем один раз в минуту
internal.error.sms.sending.denied За пол часа было запрошено более 5 СМС без попытки ввода

Вход по смс коду

PHONE=70000000000
SMS_CODE=0000
CSR="-----BEGIN CERTIFICATE REQUEST-----\nMIICpTCCAY0CAQAwYDEbMBkGA1UEAxMSU0lNUExFLUlOVkVTVC5NT0JJMQswCQYD\nVQQLEwJITDELMAkGA1UEChMCSEwxDDAKBgNVBAcTA01TSzEMMAoGA1UECBMDTVNL\nMQswCQYDVQQGEwJSVTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALLI\nNLAlU3N7TAY1kUpCmPk5fKqEvWIDumEzOvAjCNy4sBlPOzAvdTWOPgEZYgDvsS2M\nJdKXFIIcsgaKSh182JmynuY411AH9+LehllrbY59xA0FD3Gh2VSaNJiC0kvj2w8k\npoNHmZB0ho4U6sEjadJQwTP+08KUO2u334jHvWUHGL8Tk5h41uvz/JJiGpyrJlDn\nMho7vm8+jT9jBt6RIzBSVHP1zXAU1WEYYObpkaFxraf3dNeMm3R8lv+yTUVWMZ+P\nMf4957GjfRkq5ELdgK8QI4uWMv62H0afNjd7156/1hhA0RHf6wohwYqu0W2hW3G1\no1IlGQ2CbJVTCftareECAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQAnVe95kbS2\nQWbgkp/PbS+n6ReBaRoYnJV5LvXCaK4llpaXzV8MIPsQsJ67oPho2Cyv8ZhNJOCk\nzkLtKCGsPLOsH0Z23lV5pM46l3aI9O9b7VD3eSr5NBo0OnPEBMOjJzicq3Kt8iYp\njeIRWVtxu6VYaN3ZUhiuIf49LijFDTPo13Jk4DdKQt+H+3j3+dO+IhUrjGFZ24nG\ndwAkyfLZq9e9xaPDszJ1udaGWduIH8trh00njWBqNyDuhwWjCFweiWd37sfF1Cde\nVil/OEHu84Edm+2w6D+JHgSTtolfSKWNa6q7PwTT16/P+ppP5cduX+5rRS5wHEpT\niR8X7g9p0oH0\n-----END CERTIFICATE REQUEST-----\n"
FAVORITES=\"AAPL_TQBR\",\"GAZP_TQBR\"

curl -X POST --cacert ca.crt \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
-d "{\"authorizationCode\":\"$SMS_CODE\", \"certificateRequest\":\"$CSR\", \"favoriteInstruments\":[ $FAVORITES ], \"phoneNumber\":\"$PHONE\"}" \
$API_ENDPOINT/auth/authorizeByPhone

Успешный ответ:

{
   "status":200,
   "data":{
      "userCertificate":"-----BEGIN CERTIFICATE-----\nMIIEkjCCAnqgAwIBAgIQAgxiIMFfEeiEL/1jUj45AzANBgkqhkiG9w0BAQUFADCB\nmDELMAkGA1UEBhMCUlUxCzAJBgNVBAgTAk1PMQ8wDQYDVQQHEwZNb3Njb3cxFTAT\nBgNVBAoTDFNpbXBsZUludmVzdDEVMBMGA1UECxMMU2ltcGxlSW52ZXN0MRgwFgYD\nVQQDEw9TaW1wbGVJbnZlc3QgQ0ExIzAhBgkqhkiG9w0BCQEWFGluZm9Ac2ltcGxl\naW52ZXN0LnJ1MB4XDTE4MDkyNjA3MzcyM1oXDTE5MDkyNjA3MzcyM1owYDEbMBkG\nA1UEAxMSU0lNUExFLUlOVkVTVC5NT0JJMQswCQYDVQQLEwJITDELMAkGA1UEChMC\nSEwxDDAKBgNVBAcTA01TSzEMMAoGA1UECBMDTVNLMQswCQYDVQQGEwJSVTCCASIw\nDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALLINLAlU3N7TAY1kUpCmPk5fKqE\nvWIDumEzOvAjCNy4sBlPOzAvdTWOPgEZYgDvsS2MJdKXFIIcsgaKSh182JmynuY4\n11AH9+LehllrbY59xA0FD3Gh2VSaNJiC0kvj2w8kpoNHmZB0ho4U6sEjadJQwTP+\n08KUO2u334jHvWUHGL8Tk5h41uvz/JJiGpyrJlDnMho7vm8+jT9jBt6RIzBSVHP1\nzXAU1WEYYObpkaFxraf3dNeMm3R8lv+yTUVWMZ+PMf4957GjfRkq5ELdgK8QI4uW\nMv62H0afNjd7156/1hhA0RHf6wohwYqu0W2hW3G1o1IlGQ2CbJVTCftareECAwEA\nAaMPMA0wCwYDVR0PBAQDAgSwMA0GCSqGSIb3DQEBBQUAA4ICAQBeXmTQmbZvPa6j\nY7SC+NDWa2otxTT/fYaP6fhxw/QkBrdnIJ/L52Cq35Eqcr2wEkUPPwOLUV0r8cj+\nxjGZ1FGQkn07tsqBowrWF0f8WJRSpT+usU09E7IH85MoYpVeKmY8RHkCom29D5+D\nBW1ECojbhJZFFb/qkNcgjwYY6hCpmvRujVA0eHVQ2u9pkb6jYNV8KY4jnRqS/tDJ\nkqqUl7gidIZWcgTihIALnEtRhtDmArhaaB8/p1/PymrQxMMzM6NamF1okuDPMjly\n43GijPyyU+H35RV5MGXNla0KXGzqzn75rXNMvrXwjWVBfORxRJExb0ZkPDw++IOq\nlU8wqniPwnztlq8fO6uSAkH9eaInWDk3JTukBo9Ft9kNXeQgyjWtMY2K4ibbfglm\n4nEn8sOKBm3ZaGj3A/YSw5W4jRwdsd/5sveMNuDFHecuh2I59mdsTYympA9O69jh\nVtB2P+WuX4z+y4MCjuHeJw4fHyi9YY3P435gz2v0OQgNJgXUhG+ZA80DS6/7Arqt\n0gt15DWAUUFsbf1CnKcZmq9M6rq+XRQepCITy64Eqdvex/7JuLxtiglufqU2L/Ry\nKYxb6XjscK3sJQqtCZPseulCZWaYMjdcDO5xczbTiKuHVFidhH56WmyyDPKA6klY\nNYwfr0M705gu3Vecs0gQzYkaqd5lsg==\n-----END CERTIFICATE-----",
      "user":{
         "phoneNumber":"70000000000",
         "firstName":"МИХАИЛ",
         "lastName":"ТЕТЕРИН",
         "patronymic":"ВИКТОРОВИЧ",
         "creationDate":"2018-03-01T15:27:48.497+0000",
         "registrationDate":"2018-03-01T15:27:52.015+0000",
         "email":"skwmium@gmail.com",
         "authorizationLevel":"notAuthorizedByEmailOrPassword",
         "passwordSet":true,
         "fullName":"ТЕТЕРИН МИХАИЛ ВИКТОРОВИЧ",
         "accounts":[
            {
               "id":"47180520_",
               "name":"Брокерский",
               "supportedBoardTypes":[
                  "COR",
                  "VSM"
               ]
            },
            {
               "id":"47180521_VSM",
               "name":"Брокерский  (валютный)",
               "supportedBoardTypes":[
                  "VSM"
               ]
            },
            {
               "id":"47180521_COR",
               "name":"Брокерский  (фондовый)",
               "supportedBoardTypes":[
                  "COR"
               ]
            }
         ],
         "accountRequests":[
            {
               "openAccountSessionId":2359148650,
               "id":"2359148650",
               "state":"signInProgress",
               "name":"Заявка на открытие счета",
               "creationDate":"2018-10-10T10:35:03.870+0300",
               "accounts":[
                  {
                     "id":"47182975_",
                     "name":"ИИС 57685 (в процессе)",
                     "type":"iis"
                  },
                  {
                     "id":"47182974_",
                     "name":"Брокерский 57684 (в процессе)",
                     "type":"dbo"
                  }
               ]
            }
         ]
      }
   }
}

Авторизация по номеру телефона и коду СМС, получение подписанного сертификата и сущности пользователя (UserDto). Количество попыток авторизоваться с одним СМС кодом ограничено, максимум возможно 10 попыток, далее нужно запросить новый СМС код. Время жизни одного кода - 10 минут.

HTTP Request

POST /auth/authorizeByPhone

Параметры запроса

Параметр Обязательный Описание
phoneNumber да Номер телефона в формате 71231231212
authorizationCode да Код СМС, отправленный на предыдущем шаге
certificateRequest да Запрос на подпись SSL сертификата (CSR)
favoriteInstruments нет Массив id инструментов для сохранение в "избранное" в профиль пользователя. Полезно если пользователю разрешается просматривать инструменты и добавлять их в избранное до авторизации.

Параметры ответа

Параметр Тип Описание
userCertificate String Подписанный CSR в формате PEM
user UserDto Сущность пользователя (см. пункт "Пользователь - Профиль")

Возможные коды ошибок

Код Описание
validate.phone Номер телефона не прошел валидацию
validate.smscode СМС код не прошел валидацию
sms.code.invalid СМС код введен не верно
sms.code.expired Время жизни СМС кода истекло
sms.code.attempts.limit.exceeded Превышено количество попыток ввода кода из СМС
register.csr.error.unknown Ошибка при работе с CSR, передан не валидный запрос на подпись
internal.error.uncaught Внутренняя ошибка сервера

Запрос Email кода

curl -X POST --cacert ca.crt --cert cert.pem \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
$API_ENDPOINT/auth/requestAuthorizationByEmailCode

Успешный ответ:

{  
   "status":200
}

Запрос email кода для второго фактора авторизации. Также используется для повторного запроса email кода. Запрашивать код для одного email можно не чаще 1 раза в 60 секунд. Формат кода, отправляемого на email: XXXX - 4 цифровых символа, может начинаться с нуля.

HTTP Request

POST /auth/requestAuthorizationByEmailCode

Параметры запроса

Нет

Параметры ответа

Нет

Возможные коды ошибок

Код Описание
internal.error.email.not_found У пользователя нет email адреса
internal.error.email.sending Ошибка при отправке email кода
internal.error.uncaught Внутренняя ошибка сервера

Вход по email коду

EMAIL_CODE=0000

curl -X POST --cacert ca.crt --cert cert.pem \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
-d "{\"code\":\"$EMAIL_CODE\"}" \
$API_ENDPOINT/auth/authorizeByEmail

Успешный ответ:

{
   "status":200,
   "data":{
      "user":{
         "phoneNumber":"70000000000",
         "firstName":"МИХАИЛ",
         "lastName":"ТЕТЕРИН",
         "patronymic":"ВИКТОРОВИЧ",
         "fullName":"ТЕТЕРИН МИХАИЛ ВИКТОРОВИЧ",
         "email":"example@gmail.com",
         "authorizationLevel":"authorized",
         "passwordSet":true,
         "accounts":[
            {
               "id":"47180520_",
               "type":"dbo",
               "agreementDate":"2007-05-03T00:00:00.000+0000",
               "name":"Брокерский test3",
               "supportedBoardTypes":[
                  "COR",
                  "VSM"
               ],
               "currencyPositions":[
                  {
                     "positionType":"currencyPosition",
                     "amount":10030474.66000000,
                     "currency":"RUR"
                  }
               ],
               "instrumentPositions":[
                  {
                     "instrumentId":"GAZP_TQBR",
                     "positionType":"instrumentPosition",
                     "amount":-90.00000000,
                     "avgCostPrice":148.58000000
                  }
               ]
            }
         ],
         "accountRequests":[
            {
               "openAccountSessionId":2359148650,
               "id":"2359148250",
               "state":"signInProgress",
               "name":"Заявка на открытие счета",
               "creationDate":"2018-10-10T10:35:03.870+0300",
               "accounts":[
                  {
                     "id":"47182975_",
                     "name":"ИИС 57685 (в процессе)",
                     "type":"iis"
                  },
                  {
                     "id":"47182974_",
                     "name":"Брокерский 57684 (в процессе)",
                     "type":"dbo"
                  }
               ]
            }
         ]
      }
   }
}

Второй фактор авторизация по email коду. Количество попыток авторизоваться с одним email кодом ограничено, максимум возможно 10 попыток, далее нужно запросить новый СМС код. Время жизни одного кода - 10 минут. При успешном вызове уровень авторизации меняется на authorized.

HTTP Request

POST /auth/authorizeByEmail

Параметры запроса

Параметр Обязательный Описание
code да Код из email, отправленный на предыдущем шаге

Параметры ответа

Параметр Тип Описание
user UserDto Сущность пользователя (см. пункт "Пользователь - Профиль")

Возможные коды ошибок

Код Описание
validate.emailcode Код email не прошел валидацию
email.code.attempts.limit.exceeded Превышено количество попыток ввода кода из email
email.code.invalid Код из email введен не верно
email.code.expired Время жизни email кода истекло
internal.error.access.denied Метод вызван с недопустимым уровнем авторизации
internal.error.email.not_found У пользователя нет email адреса
internal.error.uncaught Внутренняя ошибка сервера

Запрос email-кода для установки пароля

curl -X POST --cacert ca.crt --cert cert.pem \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
$API_ENDPOINT/auth/requestPasswordSetupByEmailCode

Успешный ответ:

{  
   "status":200
}

На email отправляется код подтверждения установки пароля. Запрашивать код для одного email можно не чаще 1 раза в 60 секунд. Формат кода, отправляемого на email: XXXX - 4 цифровых символа, может начинаться с нуля.

HTTP Request

POST /auth/requestPasswordSetupByEmailCode

Параметры запроса

нет

Параметры ответа

нет

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера
internal.error.email.not_found Email отсутствует
internal.error.email.sending Ошибка при отправке email кода

Установка пароля по email-коду

EMAIL_CODE=0000
PASSWORD=QWERTY12345

curl -X POST --cacert ca.crt --cert cert.pem \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
-d "{\"code\":\"$EMAIL_CODE\", \"password\":\"$PASSWORD\"}" \
$API_ENDPOINT/auth/setupPasswordByEmail

Успешный ответ:

{
   "status":200,
   "data":{
      "user":{
         "phoneNumber":"70000000000",
         "firstName":"МИХАИЛ",
         "lastName":"ТЕТЕРИН",
         "patronymic":"ВИКТОРОВИЧ",
         "fullName":"ТЕТЕРИН МИХАИЛ ВИКТОРОВИЧ",
         "email":"example@gmail.com",
         "authorizationLevel":"authorized",
         "passwordSet":true,
         "accounts":[
            {
               "id":"47180520_",
               "type":"dbo",
               "agreementDate":"2007-05-03T00:00:00.000+0000",
               "name":"Брокерский test3",
               "supportedBoardTypes":[
                  "COR",
                  "VSM"
               ],
               "currencyPositions":[
                  {
                     "positionType":"currencyPosition",
                     "amount":10030474.66000000,
                     "currency":"RUR"
                  }
               ],
               "instrumentPositions":[
                  {
                     "instrumentId":"GAZP_TQBR",
                     "positionType":"instrumentPosition",
                     "amount":-90.00000000,
                     "avgCostPrice":148.58000000
                  }
               ]
            }
         ],
         "accountRequests":[
            {
               "openAccountSessionId":2359148650,
               "id":"2359148250",
               "state":"signInProgress",
               "name":"Заявка на открытие счета",
               "creationDate":"2018-10-10T10:35:03.870+0300",
               "accounts":[
                  {
                     "id":"47182975_",
                     "name":"ИИС 57685 (в процессе)",
                     "type":"iis"
                  },
                  {
                     "id":"47182974_",
                     "name":"Брокерский 57684 (в процессе)",
                     "type":"dbo"
                  }
               ]
            }
         ]
      }
   }
}

Пользователь вводит код из email, отправленного на предыдущем шаге, и задает новый пароль, passwordSet становится TRUE. Требования к паролю: от 6 до 36 символов, должен содержать цифры и буквы латинского и/или русского алфавита Если пользователь неправильно ввел код из email, он может попробовать снова, максимальное количество попыток - 10, далее необходимо запросить новый email-код. Время жизни одного кода - 10 минут.

HTTP Request

POST /auth/setupPasswordByEmail

Параметры запроса

Параметр Обязательный Описание
code да Код из email, отправленный на предыдущем шаге
password да Новый пароль

Параметры ответа

Параметр Тип Описание
user UserDto Сущность пользователя (см. пункт "Пользователь - Профиль")

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера
internal.error.email.not_found Email отсутствует
email.code.invalid Email-код введен не верно
email.code.expired Время жизни email-кода истекло
email.code.attempts.limit.exceeded Превышено количество попыток ввода кода из email
validate.password Ошибка валидации пароля
validate.emailcode Ошибка валидации email-кода

Запрос email-кода для установки email

EMAIL=qwerty@mail.com

curl -X POST --cacert ca.crt --cert cert.pem \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
-d "{\"email\":\"$EMAIL\"} \
$API_ENDPOINT/auth/requestEmailSetupCode

Успешный ответ:

{  
   "status":200
}

На email отправляется код подтверждения установки email. Запрашивать код для одного email можно не чаще 1 раза в 60 секунд. Формат кода, отправляемого на email: XXXX - 4 цифровых символа, может начинаться с нуля.

HTTP Request

POST /auth/requestEmailSetupCode

Параметры запроса

Параметр Обязательный Описание
email да Новый email

Параметры ответа

нет

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера
validate.email Ошибка валидации email
internal.error.access.denied Ошибка доступа - у пользователя есть счета или заявки на открытие счета
internal.error.email.sending Ошибка при отправке email

Установка email

CODE=0000

curl -X POST --cacert ca.crt --cert cert.pem \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
-d "{\"code\":\"$CODE\"} \
$API_ENDPOINT/auth/setupEmail

Успешный ответ:

{
   "status":200,
   "data":{
      "user":{
         "phoneNumber":"70000000000",
         "firstName":"МИХАИЛ",
         "lastName":"ТЕТЕРИН",
         "patronymic":"ВИКТОРОВИЧ",
         "fullName":"ТЕТЕРИН МИХАИЛ ВИКТОРОВИЧ",
         "email":"example@gmail.com",
         "authorizationLevel":"authorized",
         "passwordSet":true,
         "accounts":[
            {
               "id":"47180520_",
               "type":"dbo",
               "agreementDate":"2007-05-03T00:00:00.000+0000",
               "name":"Брокерский test3",
               "supportedBoardTypes":[
                  "COR",
                  "VSM"
               ],
               "currencyPositions":[
                  {
                     "positionType":"currencyPosition",
                     "amount":10030474.66000000,
                     "currency":"RUR"
                  }
               ],
               "instrumentPositions":[
                  {
                     "instrumentId":"GAZP_TQBR",
                     "positionType":"instrumentPosition",
                     "amount":-90.00000000,
                     "avgCostPrice":148.58000000
                  }
               ]
            }
         ],
         "accountRequests":[
            {
               "openAccountSessionId":2359148650,
               "id":"2359148250",
               "state":"signInProgress",
               "name":"Заявка на открытие счета",
               "creationDate":"2018-10-10T10:35:03.870+0300",
               "accounts":[
                  {
                     "id":"47182975_",
                     "name":"ИИС 57685 (в процессе)",
                     "type":"iis"
                  },
                  {
                     "id":"47182974_",
                     "name":"Брокерский 57684 (в процессе)",
                     "type":"dbo"
                  }
               ]
            }
         ]
      }
   }
}

Пользователю устанавливается email. Уровень авторизации меняется на authorized. Если Email уже был установлен ранее, то все сертификаты кроме текущего полностью разлогиниваются. Если пользователь неправильно ввел код из email, он может попробовать снова, максимальное количество попыток - 10, далее необходимо запросить новый email-код. Время жизни одного кода - 10 минут.

HTTP Request

POST /auth/setupEmail

Параметры запроса

Параметр Обязательный Описание
code да Код из email, отправленный на предыдущем шаге

Параметры ответа

Параметр Тип Описание
user UserDto Сущность пользователя (см. пункт "Пользователь - Профиль")

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера
internal.error.access.denied Ошибка доступа - у пользователя есть счета или заявки на открытие счета
internal.error.email.not_found Email отсутствует
email.code.invalid Email-код введен не верно
email.code.expired Время жизни email-кода истекло
email.code.attempts.limit.exceeded Превышено количество попыток ввода кода из email
validate.emailcode Ошибка валидации email-кода

Установка пароля

PASSWORD=QWERTY12345

curl -X POST --cacert ca.crt --cert cert.pem \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
-d "{\"password\":\"$PASSWORD\"}" \
$API_ENDPOINT/auth/setupPassword

Успешный ответ:

{
   "status":200,
   "data":{
      "user":{
         "phoneNumber":"70000000000",
         "firstName":"МИХАИЛ",
         "lastName":"ТЕТЕРИН",
         "patronymic":"ВИКТОРОВИЧ",
         "fullName":"ТЕТЕРИН МИХАИЛ ВИКТОРОВИЧ",
         "email":"example@gmail.com",
         "authorizationLevel":"authorized",
         "passwordSet":true,
         "accounts":[
            {
               "id":"47180520_",
               "type":"dbo",
               "agreementDate":"2007-05-03T00:00:00.000+0000",
               "name":"Брокерский test3",
               "supportedBoardTypes":[
                  "COR",
                  "VSM"
               ],
               "currencyPositions":[
                  {
                     "positionType":"currencyPosition",
                     "amount":10030474.66000000,
                     "currency":"RUR"
                  }
               ],
               "instrumentPositions":[
                  {
                     "instrumentId":"GAZP_TQBR",
                     "positionType":"instrumentPosition",
                     "amount":-90.00000000,
                     "avgCostPrice":148.58000000
                  }
               ]
            }
         ],
         "accountRequests":[
            {
               "openAccountSessionId":2359148650,
               "id":"2359148250",
               "state":"signInProgress",
               "name":"Заявка на открытие счета",
               "creationDate":"2018-10-10T10:35:03.870+0300",
               "accounts":[
                  {
                     "id":"47182975_",
                     "name":"ИИС 57685 (в процессе)",
                     "type":"iis"
                  },
                  {
                     "id":"47182974_",
                     "name":"Брокерский 57684 (в процессе)",
                     "type":"dbo"
                  }
               ]
            }
         ]
      }
   }
}

Пользователю устанавливается пароль, passwordSet становится TRUE. Требования к паролю: от 6 до 36 символов, должен содержать цифры и буквы латинского и/или русского алфавита.

HTTP Request

POST /auth/setupPassword

Параметры запроса

Параметр Обязательный Описание
password да Пароль

Параметры ответа

Параметр Тип Описание
user UserDto Сущность пользователя (см. пункт "Пользователь - Профиль")

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера
internal.error.access.denied Ошибка доступа - у пользователя есть пароль
validate.password Ошибка валидации пароля

Вход по паролю

PASSWORD=QWERTY12345

curl -X POST --cacert ca.crt --cert cert.pem \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
-d "{\"password\":\"$PASSWORD\"}" \
$API_ENDPOINT/auth/authorizeByPassword

Успешный ответ:

{
   "status":200,
   "data":{
      "user":{
         "phoneNumber":"70000000000",
         "firstName":"МИХАИЛ",
         "lastName":"ТЕТЕРИН",
         "patronymic":"ВИКТОРОВИЧ",
         "fullName":"ТЕТЕРИН МИХАИЛ ВИКТОРОВИЧ",
         "email":"example@gmail.com",
         "authorizationLevel":"authorized",
         "passwordSet":true,
         "accounts":[
            {
               "id":"47180520_",
               "type":"dbo",
               "agreementDate":"2007-05-03T00:00:00.000+0000",
               "name":"Брокерский test3",
               "supportedBoardTypes":[
                  "COR",
                  "VSM"
               ],
               "currencyPositions":[
                  {
                     "positionType":"currencyPosition",
                     "amount":10030474.66000000,
                     "currency":"RUR"
                  }
               ],
               "instrumentPositions":[
                  {
                     "instrumentId":"GAZP_TQBR",
                     "positionType":"instrumentPosition",
                     "amount":-90.00000000,
                     "avgCostPrice":148.58000000
                  }
               ]
            }
         ],
         "accountRequests":[
            {
               "openAccountSessionId":2359148650,
               "id":"2359148250",
               "state":"signInProgress",
               "name":"Заявка на открытие счета",
               "creationDate":"2018-10-10T10:35:03.870+0300",
               "accounts":[
                  {
                     "id":"47182975_",
                     "name":"ИИС 57685 (в процессе)",
                     "type":"iis"
                  },
                  {
                     "id":"47182974_",
                     "name":"Брокерский 57684 (в процессе)",
                     "type":"dbo"
                  }
               ]
            }
         ]
      }
   }
}

Пользователь авторизуется по паролю. Уровень авторизации меняется на authorized. Максимальное количество попыток ввода пароля - 10.

HTTP Request

POST /auth/authorizeByPassword

Параметры запроса

Параметр Обязательный Описание
password да Пароль

Параметры ответа

Параметр Тип Описание
user UserDto Сущность пользователя (см. пункт "Пользователь - Профиль")

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера
internal.error.access.denied Ошибка доступа - у пользователя нет пароля или несоответствующий уровень авторизации
auth.password.attempts.limit.exceeded Превышено количество попыток ввода пароля
auth.password.invalid Пароль введен неверно

Изменение пароля

CURRENT_PASSWORD=QWERTY12345
NEW_PASSWORD=ASDF5678

curl -X POST --cacert ca.crt --cert cert.pem \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
-d "{\"currentPassword\":\"$CURRENT_PASSWORD\",\"newPassword\":\"$NEW_PASSWORD\"}" \
$API_ENDPOINT/auth/changePassword

Успешный ответ:

{  
   "status":200
}

Изменение пароля пользователя. Если пользователь ввел текущий пароль неправильно, он может попробовать снова, максимальное количество попыток - 10.

HTTP Request

POST /auth/changePassword

Параметры запроса

Параметр Обязательный Описание
currentPassword да Текущий пароль
newPassword да Новый пароль

Параметры ответа

нет

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера
internal.error.access.denied Ошибка доступа - у пользователя нет пароля или несоответствующий уровень авторизации
auth.password.attempts.limit.exceeded Превышено количество попыток ввода пароля
auth.password.invalid Текущий пароль введен неверно
validate.password Ошибка валидации нового пароля

Установка пин-кода

PIN_HASH=40bd001563085fc35165329ea1ff5c5ecbdbbeef

curl -X POST --cacert ca.crt --cert cert.pem \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
-d "{\"pinHash\":\"$PIN_HASH\"}" \
$API_ENDPOINT/auth/setupPinCode

Успешный ответ:

{  
   "status":200
}

Связать хэш PIN-кода с авторизационной сессией. Нужно при использовании функционала защиты входа в сервис PIN-кодом.

HTTP Request

POST /auth/setupPinCode

Параметры запроса

Параметр Обязательный Описание
pinHash да SHA-1-хэш пинкода

Параметры ответа

нет

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера
internal.error.access.denied Метод вызван с недопустимым уровнем авторизации
pin.code.already.set Пин-код уже установлен

Проверка пин-кода

PIN_HASH=40bd001563085fc35165329ea1ff5c5ecbdbbeef

curl -X GET --cacert ca.crt --cert cert.pem \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
$API_ENDPOINT/auth/verifyPinCode?pinHash=$PIN_HASH

Успешный ответ:

{  
   "status":200
}

Проверить правильность хэша PIN-кода. Нужно при использовании функционала защиты входа в сервис PIN-кодом. Максимальное количество попыток ввода ПИН-кода - 5, после этого авторизационный сертификат пользователя становится недействительным, FCM-токены данной сессии очищаются.

HTTP Request

GET /auth/verifyPinCode

Параметры запроса

Параметр Обязательный Описание
pinHash да SHA-1-хэш пинкода

Параметры ответа

нет

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера
internal.error.access.denied Метод вызван с недопустимым уровнем авторизации
pin.code.not_setup_yet Пин-код не установлен
pin.code.attempts.limit.exceeded Превышено допустимое количество попыток проверки хэша ПИН-кода
pin.code.invalid Хэш пин-кода указан неверно

Выход из аккаунта

curl -X POST --cacert ca.crt --cert cert.pem \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
$API_ENDPOINT/auth/logout

Успешный ответ:

{  
   "status":200
}

Выйти из аккаунта. Авторизационный сертификат пользователя становится недействительным, FCM-токены данной сессии очищаются.

HTTP Request

POST /auth/logout

Параметры запроса

нет

Параметры ответа

нет

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера
internal.error.access.denied Метод вызван с недопустимым уровнем авторизации

Пользователь

Профиль

curl -X GET --cacert ca.crt --cert cert.pem \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
$API_ENDPOINT/user/profile

Успешный ответ:

{
   "status":200,
   "data":{
      "phoneNumber":"70000000000",
      "firstName":"МИХАИЛ",
      "lastName":"ТЕТЕРИН",
      "patronymic":"ВИКТОРОВИЧ",
      "creationDate":"2018-03-01T15:27:48.497+0000",
      "registrationDate":"2018-03-01T15:27:52.015+0000",
      "email":"example@gmail.com",
      "authorizationLevel":"authorized",
      "passwordSet":true,
      "fullName":"ТЕТЕРИН МИХАИЛ ВИКТОРОВИЧ",
      "accounts":[
         {
            "id":"47180520_",
            "type":"dbo",
            "agreementDate":"2007-05-03T00:00:00.000+0000",
            "name":"Брокерский test3",
            "supportedBoardTypes":[
               "COR",
               "VSM"
            ],
            "currencyPositions":[
               {
                  "positionType":"currencyPosition",
                  "amount":10030474.66000000,
                  "currency":"RUR"
               }
            ],
            "instrumentPositions":[
               {
                  "instrumentId":"GAZP_TQBR",
                  "positionType":"instrumentPosition",
                  "amount":-90.00000000,
                  "avgCostPrice":148.58000000
               }
            ]
         }
      ],
      "accountRequests":[
         {
            "openAccountSessionId":2359148650,
            "id":"2359148650",
            "state":"signInProgress",
            "name":"Заявка на открытие счета",
            "creationDate":"2018-10-10T10:35:03.870+0300",
            "accounts":[
               {
                  "id":"47182975_",
                  "name":"ИИС 57685 (в процессе)",
                  "type":"iis"
               },
               {
                  "id":"47182974_",
                  "name":"Брокерский 57684 (в процессе)",
                  "type":"dbo"
               }
            ]
         },
         {
            "openAccountSessionId":2359148250,
            "id":"2359148250",
            "state":"signInProgress",
            "name":"Заявка на открытие счета",
            "creationDate":"2018-10-10T11:35:03.870+0300",
            "accounts":[
               {
                  "id":"47182967_",
                  "name":"ИИС 57681 (в процессе)",
                  "type":"iis"
               },
               {
                  "id":"47182966_",
                  "name":"Брокерский 57679 (в процессе)",
                  "type":"dbo"
               }
            ]
         }
      ]
   }
}

Получение сущности пользователя (UserDto).
В зависимости от того авторизовался пользователь только по первому либо по второму фактору поле authorizationLevel может принимать значения:
notAuthorizedByEmailOrPassword - вход выполнен только по первому фактору авторизации (номер телефона и код СМС). В этом состоянии пользователю не разрешено выставлять ордера, заводить и выводить средства, просматривать персональные данные.
authorized - вход выполнен по второму фактору авторизации (с подтверждением кода по email, либо с помощью пароля).

HTTP Request

GET /user/profile

Параметры запроса

Нет

Параметры ответа

Параметр Тип Описание
authorizationLevel String Уровень авторизации сессии пользователя. Может принимать значения: notAuthorizedByEmailOrPassword, authorized
accounts OpenedAccountDto[] Массив счетов пользователя (см. описание ниже)
accountRequests OpenRequestDto[] Массив заявок на открытие счета(-ов) (см. описание ниже)
phoneNumber String Номер телефона пользователя
email String Email пользователя
firstName String Имя
lastName String Фамилия
patronymic String Отчество
fullName String ФИО
passwordSet Boolean Флаг наличия у пользователя установленного пароля

Параметры сущности OpenedAccountDto

Параметр Тип Описание
id String Id сущности
type String Тип счета. Может быть: dbo, iis
agreementDate Date Дата заключения договора. Отсутствует если уровень авторизации ниже чем authorized
name String Имя сущности. Содержит номер ДБО если уровень авторизации authorized
supportedBoardTypes String[] Массив поддерживаемых площадок для выставления ордеров
currencyPositions PositionDto[] Массив денежных позиций данного счета (см. пункт "//TODO")
instrumentPositions PositionDto[] Массив позиций данного счета (см. пункт "//TODO")

Параметры сущности OpenRequestDto

Параметр Тип Описание
openAccountSessionId Long Id сессии открытия счета
id String Id сессии открытия счета
state String Статус сессии открытия счета (см. пункт "//TODO")
name String Имя сущности в виде "Заявка на открытие счета от 10.10.2018"
accounts OpenAccountDetailsDto[] Массив счетов, открываемых в рамках сессии
creationDate Date Дата создания заявки

Параметры сущности OpenAccountDetailsDto

Параметр Тип Описание
id String Идентификатор счета
name String Имя сущности в формате "ИИС 57685 (в процессе)"
type String Тип счета. Может быть: dbo, iis

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера

Вывод средств

Создание заявки на вывод

Пример shell вызова №1

AMOUNT=100.0
ACCOUNT_ID=47180521_
TEMPLATE_ID=36

curl -X POST --cacert ca.crt \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
-d "{\"amount\":\"$AMOUNT\", \"accountId\":\"$ACCOUNT_ID\", \"templateId\":\"$TEMPLATE_ID\"}" \
$API_ENDPOINT/withdrawal/bankTransfer/init

Пример shell вызова №2

AMOUNT=100.0
ACCOUNT_ID=47180521_
BIK=044525974
BANK_NAME=АО\ ТИНЬКОФФ\ БАНК
ACCOUNT=40817810400003255000
CORR_ACCOUNT=30101810145250000974
CURRENCY=RUR

curl -X POST --cacert ca.crt \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
-d "{\"amount\":\"$AMOUNT\", \"accountId\":\"$ACCOUNT_ID\", \"bik\":\"$BIK\", \"bankName\":\"$BANK_NAME\", \"account\":\"$ACCOUNT\", \"corrAccount\":\"$CORR_ACCOUNT\", \"currency\":\"$CURRENCY\"}" \
$API_ENDPOINT/withdrawal/bankTransfer/init

Успешный ответ:

{
   "status":200,
   "data":{
      "withdrawalRequestId":54
   }
}

Создание заявки на вывод средств по указанным банковским реквизитам. При создании заявки пользователю отправляется смс-сообщение с кодом подтверждения, который используется далее на шаге подтверждения вывода. Исключением является тестовое окружение, где реальная отправка смс не осуществляется, а код для подтверждения операции вывода всегда "1111". В качестве банковских реквизитов можно использовать данные из шаблона реквизитов, созданного ранее.

HTTP Request

POST /withdrawal/bankTransfer/init

Параметры запроса

Параметр Обязательный Описание
amount да Сумма операции
isRest нет Вывести весь доступный остаток. Если true, то поле amount игнорируется
accountId да Счет, с которого производится вывод средств
templateId нет Идентификатор шаблона реквизитов. Если указан, в качестве реквизитов вывода используется данный шаблон
bik да, если templateId не задан Реквизит вывода: БИК банка-получателя
bankName да, если templateId не задан Реквизит вывода: Имя банка-получателя
account да, если templateId не задан Реквизит вывода: Номер счета получателя
corrAccount да, если templateId не задан Реквизит вывода: Корр. счет банка получателя
currency да, если templateId не задан Реквизит вывода: Валюта
inn нет Реквизит вывода: ИНН получателя
paymentDetail нет Реквизит вывода: Детали платежа
beneficiaryName нет Реквизит вывода: Имя получателя платежа

Параметры ответа

Параметр Тип Описание
withdrawalRequestId Long Идентификатор заявки на вывод средств

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера
internal.error.access.denied Метод вызван с недопустимым уровнем авторизации
validate.order.amount Ошибка валидации суммы операции
validate.bank.requisites Ошибка валидации реквизитов вывода
withdrawal.template.not_found Шаблон с указанным templateId не найден
withdrawal.money.not_enough Недостаточно средств на счете
withdrawal.verify.sms_timeout Ошибка при отправке смс-сообщения с кодом подтверждения: интервал между отправками смс должен составлять не менее 15 секунд

Подтверждение вывода

Пример shell вызова

CODE=1111
WITHDRAWAL_REQUEST_ID=54

curl -X POST --cacert ca.crt \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
-d "{\"smsCode\":\"$CODE\"}" \
$API_ENDPOINT/withdrawal/bankTransfer/$WITHDRAWAL_REQUEST_ID/confirm

Успешный ответ:

{
   "status":200
}

Пользователь вводит 4-х значный код из смс-сообщения, которое было отправлено на шаге создания заявки на вывод средств, тем самым подтверждая операцию вывода. В тестовом окружении код для подтверждения вывода всегда "1111".

HTTP Request

POST /withdrawal/bankTransfer/{withdrawalRequestId}/confirm

Параметры запроса

Параметр Обязательный Описание
smsCode да Код подтверждения из смс-сообщения

Параметры ответа

Нет

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера
internal.error.access.denied Метод вызван с недопустимым уровнем авторизации
withdrawal.order.already_confirmed Заявка на вывод уже подтверждена
sms.code.attempts.limit.exceeded Превышено количество попыток ввода кода из СМС
sms.code.expired Время жизни СМС кода истекло
sms.code.invalid Код из СМС введен не верно

Повторная отправка смс-кода

Пример shell вызова

WITHDRAWAL_REQUEST_ID=54

curl -X POST --cacert ca.crt \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
$API_ENDPOINT/withdrawal/bankTransfer/$WITHDRAWAL_REQUEST_ID/requestConfirmationSms

Успешный ответ:

{
   "status":200
}

В случае, если истекло максимальное количество попыток ввода кода подтверждения, или если время жизни СМС-кода истекло, пользователь может сделать запрос на повторную отправку смс-сообщения с новым кодом подтверждения.

HTTP Request

POST /withdrawal/bankTransfer/{withdrawalRequestId}/requestConfirmationSms

Параметры запроса

Параметр Обязательный Описание
withdrawalRequestId да Идентификатор заявки на вывод средств

Параметры ответа

Нет

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера
internal.error.access.denied Метод вызван с недопустимым уровнем авторизации
withdrawal.verify.sms_timeout Ошибка при отправке смс-сообщения с кодом подтверждения: интервал между отправками смс должен составлять не менее 15 секунд
withdrawal.order.already_confirmed Заявка на вывод уже подтверждена

Создание шаблона вывода

Пример shell вызова

BIK=044525974
BANK_NAME=АО\ ТИНЬКОФФ\ БАНК
ACCOUNT=40817810400003255000
CORR_ACCOUNT=30101810145250000974
CURRENCY=RUR

curl -X POST --cacert ca.crt \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
-d "{\"bik\":\"BIK\", \"bankName\":\"$BANK_NAME\", \"account\":\"$ACCOUNT\", \"corrAccount\":\"$CORR_ACCOUNT\", \"currency\":\"$CURRENCY\"}" \
$API_ENDPOINT/withdrawal/bankTransfer/template

Успешный ответ:

{
   "status":200,
   "data":{
      "templateId":123
   }
}

Чтобы пользователь каждый раз не вводил реквизиты вывода заново, он может сохранить их в виде шаблона.

HTTP Request

POST /withdrawal/bankTransfer/template

Параметры запроса

Параметр Обязательный Описание
bik да Реквизит вывода: БИК банка-получателя
bankName да Реквизит вывода: Имя банка-получателя
account да Реквизит вывода: Номер счета получателя
corrAccount да Реквизит вывода: Корр. счет банка получателя
currency да Реквизит вывода: Валюта
inn нет Реквизит вывода: ИНН получателя
paymentDetail нет Реквизит вывода: Детали платежа
beneficiaryName нет Реквизит вывода: Имя получателя платежа

Параметры ответа

Параметр Тип Описание
templateId Long Идентификатор шаблона

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера
internal.error.access.denied Метод вызван с недопустимым уровнем авторизации
validate.bank.requisites Ошибка валидации реквизитов вывода

Редактирование шаблона

Пример shell вызова

TEMPLATE_ID=123
BIK=044525974
BANK_NAME=АО\ ТИНЬКОФФ\ БАНК
ACCOUNT=40817810400003255000
CORR_ACCOUNT=30101810145250000974
CURRENCY=RUR


curl -X POST --cacert ca.crt \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
-d "{\"bik\":\"BIK\", \"bankName\":\"$BANK_NAME\", \"account\":\"$ACCOUNT\", \"corrAccount\":\"$CORR_ACCOUNT\", \"currency\":\"$CURRENCY\"}" \
$API_ENDPOINT/withdrawal/bankTransfer/templates/$TEMPLATE_ID/update

Успешный ответ:

{
   "status":200
}

Редактирование шаблона реквизитов, созданного ранее.

HTTP Request

POST /withdrawal/bankTransfer/templates/{templateId}/update

Параметры запроса

Параметр Обязательный Описание
templateId да Идентификатор шаблона вывода
bik да Реквизит вывода: БИК банка-получателя
bankName да Реквизит вывода: Имя банка-получателя
account да Реквизит вывода: Номер счета получателя
corrAccount да Реквизит вывода: Корр. счет банка получателя
currency да Реквизит вывода: Валюта
inn нет Реквизит вывода: ИНН получателя
paymentDetail нет Реквизит вывода: Детали платежа
beneficiaryName нет Реквизит вывода: Имя получателя платежа

Параметры ответа

нет

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера
internal.error.access.denied Метод вызван с недопустимым уровнем авторизации
validate.bank.requisites Ошибка валидации реквизитов вывода
withdrawal.template.not_found Шаблон с указанным templateId не найден

Удаление шаблона

Пример shell вызова

TEMPLATE_ID=123

curl -X POST --cacert ca.crt \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
$API_ENDPOINT/withdrawal/bankTransfer/templates/$TEMPLATE_ID/delete

Успешный ответ:

{
   "status":200
}

Удаление шаблона реквизитов, созданного ранее.

HTTP Request

POST /withdrawal/bankTransfer/templates/{templateId}/delete

Параметры запроса

Параметр Обязательный Описание
templateId да Идентификатор шаблона вывода

Параметры ответа

нет

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера
internal.error.access.denied Метод вызван с недопустимым уровнем авторизации
withdrawal.template.not_found Шаблон с указанным templateId не найден

Получение шаблонов

Пример shell вызова


curl -X GET --cacert ca.crt \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
$API_ENDPOINT/withdrawal/bankTransfer/templates

Успешный ответ:

{
   "status":200,
   "data":[
      {
         "bankLogo":"http://sandbox.simple-invest.mobi/api/v1/img/55cd3b60-a62e-11e8-9a2e-4bbb6e97d38a",
         "bankColor":"#39a0dc",
         "currency":"RUR",
         "templateId":46,
         "lastUseDate":"2018-09-05T08:13:05.075+0000",
         "bik":"044525187",
         "bankName":"БАНК ВТБ (ПАО)",
         "corrAccount":"30101810700000000187",
         "account":"11112222333344444444"
      },
      {
         "bankLogo":"http://sandbox.simple-invest.mobi/api/v1/img/54d3e740-a62e-11e8-9a2e-4bbb6e97d38a",
         "bankColor":"#2f9d47",
         "currency":"RUR",
         "templateId":51,
         "lastUseDate":"2018-09-06T07:44:48.401+0000",
         "bik":"043601607",
         "bankName":"ПОВОЛЖСКИЙ БАНК ПАО СБЕРБАНК",
         "corrAccount":"30101810200000000607",
         "account":"10000000000000000000"
      }
   ]
}

Получение всех сохраненных шаблонов пользователя.

HTTP Request

GET /withdrawal/bankTransfer/templates

Параметры запроса

нет

Параметры ответа

Параметр Тип Описание
templateId Long Идентификатор шаблона
lastUseDate Date Дата последнего использования
bik String БИК банка-получателя
bankName String Имя банка-получателя
corrAccount String Корр. счет банка получателя
account String Номер счета получателя
currency String Валюта
bankLogo String Логотип банка-получателя, может отсутствовать
bankColor String Цвет банка-получателя в формате, может отсутствовать
inn String ИНН получателя, может отсутствовать
paymentDetail String Детали платежа, может отсутствовать
beneficiaryName String Имя получателя платежа, может отсутствовать

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера
internal.error.access.denied Метод вызван с недопустимым уровнем авторизации

Инструменты и котировки

Инструменты из категории

Пример shell вызова:

CATEGORY_ID=BONDS
SORTS=PRICE
CURRENCY=RUR
BOND_MATURITY_DATE=2035-08-15T00%3A00%3A00.000%2B0400
BOND_YEILD_FROM=1.0
OFFSET=5
LIMIT=2

curl -X GET --cacert ca.crt --cert cert.pem \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
"$API_ENDPOINT/instruments/group/$CATEGORY_ID?sorts=$SORTS&f_currency=$CURRENCY&f_early_redemption&f_bond_maturity_date=$BOND_MATURITY_DATE&f_bond_yeild_from=$BOND_YEILD_FROM&offset=$OFFSET&limit=$LIMIT"

Успешный ответ:

{
   "status":200,
   "data":{
      "categoryId":"BONDS",
      "instruments":[
         {
            "ticker":"RU000A0JXTG4",
            "title":"Открытие Холдинг",
            "fullTitle":"Открытие Холдинг",
            "logo":"http://sandbox.simple-invest.mobi/api/v1/img/5412e130-a62e-11e8-9a2e-4bbb6e97d38a",
            "color":"#3bbfe6",
            "quoteCurrency":"RUR",
            "decimalScale":2,
            "lotSize":1,
            "priceStep":0.01,
            "type":"bond",
            "boardId":"EQOB",
            "exchangeCode":"MOEX",
            "exchangeTitle":"Московская Биржа",
            "listLevel":3,
            "issuerId":"2450",
            "accumulatedCouponIncome":135,
            "faceValue":1000,
            "faceValueCurrency":"RUR",
            "issueValue":35000000000,
            "couponValue":149.24,
            "couponPeriodInDays":455,
            "issueDate":"2017-06-14T00:00:00.000+0300",
            "maturityDate":"2032-05-26T00:00:00.000+0300",
            "daysToMaturity":4957,
            "daysToBuyBack":43,
            "buyBackPrice":100,
            "buyBackDate":"2018-12-12T00:00:00.000+0300",
            "buyBackAvailable":true,
            "instrumentDefault":false,
            "daysToNextCoupon":43,
            "nextCouponDate":"2018-12-12T00:00:00.000+0300",
            "couponsToMaturity":11,
            "couponsToBuyBack":1,
            "couponPercent":12.09,
            "couponFrequency":4,
            "price":26.38,
            "subtitle":"До 26 мая 2032",
            "fullSubtitle":"Погашение 26 мая 2032",
            "subtype":"etb",
            "subtypeTitle":"Биржевые облигации",
            "settlementCode":"t0",
            "boards":[
               {
                  "id":"EQOB",
                  "primary":true
               }
            ]
         },
         {
            "ticker":"RU000A0JU0N7",
            "title":"Бинбанк",
            "fullTitle":"Бинбанк",
            "logo":"http://sandbox.simple-invest.mobi/api/v1/img/51ecf3f0-a62e-11e8-9a2e-4bbb6e97d38a",
            "color":"#003284",
            "quoteCurrency":"RUR",
            "decimalScale":2,
            "lotSize":1,
            "priceStep":0.01,
            "type":"bond",
            "boardId":"EQOB",
            "exchangeCode":"MOEX",
            "exchangeTitle":"Московская Биржа",
            "listLevel":2,
            "issuerId":"1993",
            "accumulatedCouponIncome":0.01,
            "faceValue":1000,
            "faceValueCurrency":"RUR",
            "issueValue":24000000000,
            "couponValue":0.05,
            "couponPeriodInDays":181,
            "issueDate":"2013-09-24T00:00:00.000+0400",
            "maturityDate":"2025-09-24T00:00:00.000+0300",
            "daysToMaturity":2521,
            "daysToBuyBack":-36,
            "buyBackPrice":100,
            "buyBackDate":"2018-09-24T00:00:00.000+0300",
            "buyBackAvailable":true,
            "instrumentDefault":false,
            "daysToNextCoupon":145,
            "nextCouponDate":"2019-03-24T00:00:00.000+0300",
            "couponsToMaturity":14,
            "couponsToBuyBack":0,
            "couponPercent":0.01,
            "couponFrequency":2,
            "price":59.21,
            "subtitle":"До 24 сентября 2025",
            "fullSubtitle":"Погашение 24 сентября 2025",
            "subtype":"etb",
            "subtypeTitle":"Биржевые облигации",
            "settlementCode":"t0",
            "boards":[
               {
                  "id":"EQOB",
                  "primary":true
               }
            ]
         }
      ]
   }
}

Получить список инструментов из категории. Поддерживается фильтрация, сортировка, пагинация.

HTTP Request

GET /instruments/group/{categoryId}

Параметры запроса

Параметр Обязательный Описание
categoryId да Категория инструментов, см. возможные значения ниже
sorts нет Список режимов сортировки, разделенных запятой. Подробнее о сортировке см. ниже
f_currency нет Код валюты
f_early_redemption нет Наличие оферты
f_bond_issue_date нет Дата оферты
f_bond_maturity_date нет Дата погашения
f_bond_yeild_from нет Минимальная эффективная доходность к оферте
f_bond_yeild_to нет Максимальная ффективная доходность к оферте
offset нет Параметр пагинации "смещение", значение по-умолчанию 0
limit нет Параметр пагинации "лимит", значение по-умолчанию 30

Параметр categoryId задает категорию инструментов и может принимать одно из значений:

Категория Описание
TEST Категория для отладки, доступна только в тестовом окружении
RUS_STOCK Акции РФ
FOREX Валюта
STOCKS Акции
BONDS Облигации
FUNDS Фонды

Для осуществления сортировки используется параметр sorts, который может состоять из одного или нескольких режимов сортировки, разделенных запятой. Пример: "PRICE,VOLUME,TITLE". В настоящий момент, если указано более одного режима сортировки, будет применен первый существующий режим из данного списка. Список возможных режимов сортировки:

Режим сортировки Описание
LOT_PRICE Цена за лот
PRICE_CHANGE_BY_LAST_YEAR Изменение цены за год
PRICE_CHANGE_BY_LAST_FIVE_YEARS Изменение цены за 5 лет
PRICE_CHANGE_BY_LAST_HALF_YEAR Изменение цены за полгода
PRICE_CHANGE_BY_LAST_MONTH Изменение цены за месяц
PRICE_CHANGE_BY_LAST_WEEK Изменение цены за неделю
PRICE_CHANGE_BY_LAST_DAY Изменение цены за день
PRICE Цена
TITLE Название
POPULARITY Популярность ( = объем торгов)
VOLUME Объем торгов
BUY_BACK_DATE Дата оферты
BOND_YIELD Эффективная доходность к оферте
MATURITY_DATE Дата погашения

Параметры ответа

В качестве ответа возвращается объект типа InstrumentCategoryDto, описание типа см. ниже.

Описание типа InstrumentCategoryDto:

Параметр Тип Описание
categoryId String ID категории
title String Название категории
description String Описание категории
tickers String[] Массив тикеров инстурментов данной категории
instruments InstrumentDto[] Список инструментов, см. описание типа InstrumentDto ниже

Описание типа InstrumentDto:

Параметр Тип Описание
ticker String Тикер
title String Название инструмента
fullTitle String Полное название инструмента
description String Описание инструмента
logo String Ссылка на иконку инструмента
logoBig String Ссылка на логотип инструмента
color String Основной цвет логотипа (используется для стилизации UI)
quoteCurrency String Код валюты инструмента (валюта, за которую можно купить инструмент)
baseCurrency String Код базовой валюты. Поле заполняется для валютных пар. Означает код валюты, которая попадет в портфель при покупке
decimalScale Integer Точность. Количество знаков после запятой при отображении цены
lotSize Integer Количество инструментов в одном лоте
priceStep BigDecimal Шаг цены
shortSubtitle String Короткий подзаголовок
fullSubtitle String Полный подзаголовок
type String Тип инструмента, см. возможные значения ниже
subType String Подтип инструмента, см. возможные значения ниже
subTypeTitle String Понятное название подтипа на русском
boardId String Класс инструмента
exchangeCode String Код биржи
exchangeTitle String Название биржи
listLevel Integer Уровень листинга
issuerId String Идентификатор эмитента
accumulatedCouponIncome BigDecimal Накопленный купонный доход. Только для облигаций.
faceValue BigDecimal Номинал. Только для облигаций.
faceValueCurrency String Валюта номинала.
issueValue Long Объем выпуска в валюте номинала. Только для облигаций.
couponValue BigDecimal Размер купона в валюте номинала. Только для облигаций.
couponPeriodInDays Integer Периодичность купонов в днях. Только для облигаций.
issueDate Date Дата выпуска. Только для облигаций.
maturityDate Date Дата погашения. Только для облигаций.
daysToMaturity Long Количество дней до погашения. Только для облигаций.
daysToBuyBack Long Количество дней до оферты. Только для облигаций.
buyBackPrice BigDecimal Цена оферты в валюте номинала.
buyBackDate Date Дата оферты (если есть оферта).
buyBackAvailable Boolean Возможен досрочный выкуп.
instrumentDefault Boolean Допущен дефолт по инструменту
daysToNextCoupon Long Количество дней до выплаты купона. Только для облигаций.
nextCouponDate Date Дата следующего купона. Только для облигаций.
couponsToMaturity Long Количество купонов до погашения. Только для облигаций.
couponsToBuyBack Long Количество купонов до оферты. Только для облигаций.
couponPercent BigDecimal Ставка купона (размер купона в процентах). Только для облигаций.
couponFrequency Integer Количество купонов в год. Только для облигаций.
priceChange BigDecimal Изменение цены в валюте инструмента за период, указанный в фильтре при запросе инструментов. Поле заполняется при запросе инструментов с фильтром по изменению цены, например: 'PRICE_CHANGE_BY_LAST_DAY'
price BigDecimal Цена за 1 единицу инструмента (не лот) на момент вызова. Поле заполняется при запросе инструментов с фильтром по цене за единицу инструмента: 'PRICE'
volume BigDecimal Объем торгов на момент вызова по инструменту за последнюю неделю в валюте инструмента. Поле заполняется при запросе инструментов с фильтром по объему: 'VOLUME'
lotPrice BigDecimal Цена за 1 лот инструмента в валюте инструмента. Поле заполняется при запросе инструментов с фильтром по цене за лот: 'LOT_PRICE'
effectiveYieldToBuyBack BigDecimal Эффективная доходность облигаций к оферте в валюте инструмента. Поле заполняется при запросе инструментов с фильтром по доходности облигаций: 'BOND_YIELD'. Если поле не заполнено, нужно использовать effectiveYieldToMaturity
effectiveYieldToMaturity BigDecimal Эффективная доходность облигаций к погашению в валюте инструмента. Поле заполняется при запросе инструментов с фильтром по доходности облигаций: 'BOND_YIELD'.
settlementCode String Код расчетов
boards InstrumentBoardDto[] Доступные режимы для инструмента

Параметр type описывает тип инструмента и может содержать одно из следующих значений:

Значение Описание
unknown Неизвестный тип
stock Акции
currency Валюта
bond Облигации
futures Фьючерсы
fund Фонды

Параметр subType описывает подтип инструмента и может содержать одно из следующих значений:

Значение Описание
unknown Неизвестный тип
ordinaryShare Обыкновенные акции
preferredShare Привилегированные акции
depositoryReciept Депозитарная расписка
corporateBond Корпоративные облигации
etb Биржевые облигации
governmentBond Государственные облигации
ifiBond Облигации МеждФинОрг
municipalBond Муниципальные облигации
subFederalBond Облигации регионов РФ
currencySpot
currencyNotTradable
futures
centralBanksBond Облигации Центрального Банка
openMF Открытый паевой инвест фонд
intervalMF Интервальный паевой инвест фонд
closeMF Закрытый паевой инвест фонд
ETF Бумаги иностранных инвестиционных фондов
MPP Ипотечный сертификат участия

Параметр settlementCode описывает код расчетов инструмента и может содержать одно из следующих значений:

Значение Описание
t0 Код расчетов "сегодня"
t1 Код расчетов "завтра"
tx Код расчетов T+ (T2 и далее)

Описание типа InstrumentBoardDto

Параметр Тип Описание
id String Идентификатор режима торгов инструмента
primary Boolean Основной режим для инструмента

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера
internal.error.not_found Заданная категория не существует или неактивна

Категории инструментов

Пример shell вызова:

curl -X GET --cacert ca.crt --cert cert.pem \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
"$API_ENDPOINT/instruments/groups

Успешный ответ:

{
   "status":200,
   "data":[
      {
         "categoryId":"FOREX",
         "title":"Валюта",
         "description":"Валюта",
         "instruments":[
            {
               "ticker":"USD000UTSTOM",
               "title":"Доллар США",
               "fullTitle":"Доллар США",
               "logo":"http://sandbox.simple-invest.mobi/api/v1/img/ee17f1e0-8b3e-11e8-ada3-559fc85a8840",
               "color":"#ffffff",
               "quoteCurrency":"RUR",
               "baseCurrency":"USD",
               "decimalScale":4,
               "lotSize":1000,
               "priceStep":0.0025,
               "type":"currency",
               "boardId":"CETS",
               "exchangeCode":"MOEX",
               "exchangeTitle":"Московская Биржа",
               "faceValueCurrency":"USD",
               "buyBackAvailable":false,
               "instrumentDefault":false,
               "volume":999884503115,
               "subtitle":"USD/RUR",
               "fullSubtitle":"USD/RUR",
               "subtype":"currencySpot",
               "settlementCode":"t1",
               "boards":[
                  {
                     "id":"CETS",
                     "primary":true
                  }
               ]
            }
         ],
         "instrumentTickers":[
            "USD000UTSTOM",
            "EUR_RUB__TOM",
            "EURUSD000TOM",
            "CNYRUB_TOM",
            "GBPRUB_TOM",
            "CHFRUB_TOM"
         ]
      },
      {
         "categoryId":"STOCKS",
         "title":"Акции",
         "description":"Акции",
         "instruments":[
            {
               "ticker":"SBER",
               "title":"Сбербанк",
               "fullTitle":"Сбербанк России",
               "logo":"http://sandbox.simple-invest.mobi/api/v1/img/54d3e740-a62e-11e8-9a2e-4bbb6e97d38a",
               "logoBig":"http://sandbox.simple-invest.mobi/api/v1/img/ee54fae0-8b3e-11e8-ada3-559fc85a8840",
               "color":"#2f9d47",
               "quoteCurrency":"RUR",
               "decimalScale":2,
               "lotSize":10,
               "priceStep":0.01,
               "type":"stock",
               "boardId":"TQBR",
               "exchangeCode":"MOEX",
               "exchangeTitle":"Московская Биржа",
               "listLevel":1,
               "issuerId":"1199",
               "faceValueCurrency":"RUR",
               "buyBackAvailable":false,
               "instrumentDefault":false,
               "volume":79004450768,
               "subtitle":"Обыкновенные",
               "fullSubtitle":"Обыкновенные акции",
               "subtype":"ordinaryShare",
               "subtypeTitle":"Обыкновенные акции",
               "settlementCode":"tx",
               "boards":[
                  {
                     "id":"TQBR",
                     "primary":true
                  }
               ]
            }
         ],
         "instrumentTickers":[
            "SBER",
            "LKOH",
            "GAZP",
            "GMKN",
            "ALRS",
            "ROSN",
            "MGNT",
            "YNDX",
            "GAZC",
            "NVTK",
            "MOEX",
            "TATN",
            "CHMF",
            "SBERP",
            "VTBR",
            "SNGSP",
            "NLMK",
            "AFLT",
            "HYDR",
            "SNGS",
            "MAGN",
            "MTSS",
            "IRAO",
            "RTKM",
            "PLZL",
            "FIVE",
            "FEES",
            "POLY",
            "TRNFP",
            "RASP"
         ]
      }
   ]
}

Получение списка категорий инструментов.

HTTP Request

GET /instruments/groups

Параметры запроса

нет

Параметры ответа

В качестве ответа возвращается список объектов типа InstrumentCategoryDto, описание типа см. выше

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера

Инструменты по тикеру или паре тикер:площадка

Пример shell вызова:

TICKERS=GMKN,ACKO:TQBR

curl -X GET --cacert ca.crt --cert cert.pem \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
"$API_ENDPOINT/instruments?tickers=$TICKERS"

Успешный ответ:

{
   "status":200,
   "data":[
      {
         "ticker":"GMKN",
         "title":"Норильский никель",
         "fullTitle":"Горно-металлургическая компания Норильский никель",
         "logo":"http://sandbox.simple-invest.mobi/api/v1/img/52635c70-a62e-11e8-9a2e-4bbb6e97d38a",
         "logoBig":"http://sandbox.simple-invest.mobi/api/v1/img/ee6af3e0-8b3e-11e8-ada3-559fc85a8840",
         "color":"#bfc0bf",
         "quoteCurrency":"RUR",
         "decimalScale":0,
         "lotSize":1,
         "priceStep":1,
         "type":"stock",
         "boardId":"TQBR",
         "exchangeCode":"MOEX",
         "exchangeTitle":"Московская Биржа",
         "listLevel":1,
         "issuerId":"1840",
         "faceValueCurrency":"RUR",
         "buyBackAvailable":false,
         "instrumentDefault":false,
         "subtitle":"Обыкновенные",
         "fullSubtitle":"Обыкновенные акции",
         "subtype":"ordinaryShare",
         "subtypeTitle":"Обыкновенные акции",
         "settlementCode":"tx",
         "boards":[
            {
               "id":"TQBR",
               "primary":true
            }
         ]
      },
      {
         "ticker":"ACKO",
         "title":"СК ЮЖУРАЛ-АСКО",
         "fullTitle":"Страховая компания ЮЖУРАЛ-АСКО",
         "logo":"http://sandbox.simple-invest.mobi/api/v1/img/edb38770-a79d-11e8-8e8f-4bbb6e97d38a",
         "color":"#003b86",
         "quoteCurrency":"RUR",
         "decimalScale":2,
         "lotSize":1000,
         "priceStep":0.02,
         "type":"stock",
         "boardId":"TQBR",
         "exchangeCode":"MOEX",
         "exchangeTitle":"Московская Биржа",
         "listLevel":3,
         "issuerId":"1098705",
         "faceValueCurrency":"RUR",
         "buyBackAvailable":false,
         "instrumentDefault":false,
         "subtitle":"Обыкновенные",
         "fullSubtitle":"Обыкновенные акции",
         "subtype":"ordinaryShare",
         "subtypeTitle":"Обыкновенные акции",
         "settlementCode":"unknown"
      }
   ]
}

Получить список инструментов по тикеру или паре тикер:площадка

HTTP Request

GET /instruments

Параметры запроса

Параметр Обязательный Описание
tickers String Тикеры или/и пары тикер:площадка, разделенные запятой

Параметры ответа

В качестве ответа возвращается список объектов типа InstrumentDto, см. описание типа выше

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера

Поиск инструментов

Пример shell вызова:

QUERY=SBER

curl -X GET --cacert ca.crt --cert cert.pem \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
"$API_ENDPOINT/instruments/search?query=$QUERY"

Успешный ответ:

{
   "status":200,
   "data":[
      {
         "ticker":"SBERP",
         "title":"Сбербанк",
         "fullTitle":"Сбербанк России",
         "logo":"http://sandbox.simple-invest.mobi/api/v1/img/4e588290-a62e-11e8-9a2e-4bbb6e97d38a",
         "color":"#2f9d47",
         "quoteCurrency":"RUR",
         "decimalScale":2,
         "lotSize":100,
         "priceStep":0.01,
         "type":"stock",
         "boardId":"TQBR",
         "exchangeCode":"MOEX",
         "exchangeTitle":"Московская Биржа",
         "listLevel":1,
         "issuerId":"1199",
         "faceValueCurrency":"RUR",
         "buyBackAvailable":false,
         "instrumentDefault":false,
         "volume":4169874605,
         "subtitle":"Привилегированные",
         "fullSubtitle":"Привилегированные акции",
         "subtype":"preferredShare",
         "subtypeTitle":"Привилегированные акции",
         "settlementCode":"tx",
         "boards":[
            {
               "id":"TQBR",
               "primary":true
            }
         ]
      },
      {
         "ticker":"SBER",
         "title":"Сбербанк",
         "fullTitle":"Сбербанк России",
         "logo":"http://sandbox.simple-invest.mobi/api/v1/img/54d3e740-a62e-11e8-9a2e-4bbb6e97d38a",
         "logoBig":"http://sandbox.simple-invest.mobi/api/v1/img/ee54fae0-8b3e-11e8-ada3-559fc85a8840",
         "color":"#2f9d47",
         "quoteCurrency":"RUR",
         "decimalScale":2,
         "lotSize":10,
         "priceStep":0.01,
         "type":"stock",
         "boardId":"TQBR",
         "exchangeCode":"MOEX",
         "exchangeTitle":"Московская Биржа",
         "listLevel":1,
         "issuerId":"1199",
         "faceValueCurrency":"RUR",
         "buyBackAvailable":false,
         "instrumentDefault":false,
         "volume":79004450768,
         "subtitle":"Обыкновенные",
         "fullSubtitle":"Обыкновенные акции",
         "subtype":"ordinaryShare",
         "subtypeTitle":"Обыкновенные акции",
         "settlementCode":"tx",
         "boards":[
            {
               "id":"TQBR",
               "primary":true
            }
         ]
      }
   ]
}

Поиск инструментов. Ищет по тикеру, названию, данным эмитента. Можно вводить часть слова

HTTP Request

GET /instruments/search

Параметры запроса

Параметр Обязательный Описание
query да Запрос для поиска

Параметры ответа

В качестве ответа возвращается список объектов типа InstrumentDto, описание типа см. выше

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера

Котировки для инструментов

Пример shell вызова:

TICKERS=SBERP

curl -X GET --cacert ca.crt --cert cert.pem \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
"$API_ENDPOINT/quotes?tickers=$TICKERS"

Успешный ответ:

{
   "status":200,
   "data":[
      {
         "ticker":"SBERP",
         "boardId":"TQBR",
         "lastPrice":160.17,
         "bid":160.17,
         "ask":160.25,
         "change":-0.28,
         "updated":"2018-10-30T13:44:18.000+0300"
      }
   ]
}

Получение котировок для запрошенных инстурментов. Отдает реалтайм котировки для запросов с уровнем авторизации authorized, для остальных запросов отдает котировки с 15-ти минутной задержкой.

HTTP Request

GET /quotes

Параметры запроса

Параметр Обязательный Описание
tickers нет Один или несколько тикеров, разделенных запятой
tickerBoardIdPairs нет Одна или несколько пар тикер:площадка, разделенных запятой

Параметры ответа

В качестве ответа возвращается список объектов типа QuoteDto, описание типа см. ниже

Описание типа QuoteDto

Параметр Тип Описание
ticker String Тикер
boardId String Режим торгов
lastPrice BigDecimal Цена последней сделки в валюте инструмента (кроме облигаций, для них в процентах)
bid BigDecimal Цена спроса в валюте инструмента (кроме облигаций, для них в процентах)
ask BigDecimal Цена предложения в валюте инструмента (кроме облигаций, для них в процентах)
change BigDecimal Изменение цены в валюте инструмента (кроме облигаций, для них в процентах)
updated Date Время последнего обновления котировки
baseCurrency String Код базовой валюты (валюта, из которой конвертируем). Используется при получении котировки для конвертации валют
quoteCurrency String Код котируемой валюты (валюта, в которую конвертируем). Используется при получении котировки для конвертации валют
accumulatedCouponIncome BigDecimal Накопленный купонный доход (для облигаций)
currentYield BigDecimal Текущая доходность (для облигаций)
simpleYieldToMaturity BigDecimal Простая доходность к погашению (для облигаций)
simpleYieldToBuyBack BigDecimal Простая доходность к оферте (для облигаций)
effectiveYieldToMaturity BigDecimal Эффективная доходность к погашению (для облигаций)
effectiveYieldToBuyBack BigDecimal Эффективная доходность к оферте (для облигаций)
minLimit BigDecimal Минимальная цена для выставления заявки
maxLimit BigDecimal Максимальная цена для выставления заявки

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера
validate.instrument.identifiers Не указан ни один из входных параметров

Котировки для конвертации валют

Пример shell вызова:

PAIRS=USD:RUR,EUR:RUR

curl -X GET --cacert ca.crt --cert cert.pem \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
"$API_ENDPOINT/currencyQuotes?pairs=$PAIRS"

Успешный ответ:

{
   "status":200,
   "data":[
      {
         "lastPrice":65.625,
         "bid":65.615,
         "ask":65.625,
         "change":-0.1275,
         "updated":"2018-10-30T14:19:24.000+0300",
         "baseCurrency":"USD",
         "quoteCurrency":"RUR"
      },
      {
         "lastPrice":74.58,
         "bid":74.5725,
         "ask":74.585,
         "change":-0.26,
         "updated":"2018-10-30T14:19:24.000+0300",
         "baseCurrency":"EUR",
         "quoteCurrency":"RUR"
      }
   ]
}

HTTP Request

GET /currencyQuotes

Параметры запроса

Параметр Обязательный Описание
pairs да Одна или несколько пар валют, разделенных запятой

Параметры ответа

В качестве ответа возвращается список объектов типа QuoteDto, описание типа см. выше

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера
validate.instrument.identifiers Не указан ни один из входных параметров

Получение валютного инструмента

Пример shell вызова:

CODES=USD,RUR

curl -X GET --cacert ca.crt --cert cert.pem \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
"$API_ENDPOINT/currencies?codes=%CODES"

Успешный ответ:

{
   "status":200,
   "data":[
      {
         "code":"RUR",
         "title":"Рубль",
         "logoUrl":"http://sandbox.simple-invest.mobi/api/v1/img/f5698f00-a79d-11e8-8e8f-4bbb6e97d38a",
         "decimalScale":4,
         "subtitle":"RUR"
      },
      {
         "code":"USD",
         "title":"Доллар США",
         "logoUrl":"http://sandbox.simple-invest.mobi/api/v1/img/ec72a650-8b3e-11e8-ada3-559fc85a8840",
         "tradingInstrumentTicker":"USD000UTSTOM",
         "decimalScale":4,
         "subtitle":"USD"
      }
   ]
}

HTTP Request

GET /currencies

Параметры запроса

Параметр Обязательный Описание
codes да Один или несколько кодов валют, разделенных запятой

Параметры ответа

В качестве ответа возвращается список объектов типа CurrencyDto, описание типа см. ниже

Описание типа CurrencyDto:

Параметр Тип Описание
code String Код валюты (USD, EUR, etc.)
title String Название валюты
subTitle String
logoUrl String Ссылка на иконку
tradingInstrumentTicker String Тикер инструмента связанной торгуемой пары
decimalScale Integer Точность. Количество знаков после запятой при отображении цены

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера

История операций

Получение истории

Пример shell вызова:

ACCOUNT_ID=47180520_
START_DATE=2019-01-01T00%3A00%3A00.000%2B0300
END_DATE=2019-01-31T23%3A59%3A59.000%2B0300
TYPES=buy,sell,deposit,withdrawal,fee,dividend,coupon,tax
SEARCH_QUERY=газп
LIMIT=30
OFFSET=0

curl -X GET --cacert ca.crt --cert cert.pem \
-H "Content-Type: application/json" \
-H "Partner-Id: $PARTNER_ID" \
"$API_ENDPOINT/user/operationsHistory?f_accountId=$ACCOUNT_ID&f_searchQuery=$SEARCH_QUERY&f_startDate=$START_DATE&f_endDate=$END_DATE&f_types=$TYPES&limit=$LIMIT&offset=$OFFSET"

Успешный ответ:

{  
   "status":200,
   "data":[  
      {  
         "ticker":"GAZP",
         "boardId":"TQBR",
         "creationDate":"2019-02-07T10:44:25.896+0300",
         "type":"sell",
         "typeDescription":"Сделка",
         "amount":-10.00000000,
         "price":162.87000000,
         "volume":-1628.7000000000000000,
         "currency":"RUR"
      },
      {  
         "ticker":"GAZP",
         "boardId":"TQBR",
         "creationDate":"2019-02-07T10:44:25.469+0300",
         "type":"buy",
         "typeDescription":"Сделка",
         "amount":10.00000000,
         "price":162.90000000,
         "volume":1629.0000000000000000,
         "currency":"RUR"
      },
      {  
         "ticker":"GAZP",
         "creationDate":"2019-02-06T10:44:43.000+0300",
         "type":"sell",
         "typeDescription":"Сделка",
         "amount":-10.000000,
         "price":163.880000,
         "volume":-1638.800000000000,
         "currency":"RUR",
         "relatedOperations":[  
            {  
               "creationDate":"2019-02-06T10:44:43.000+0300",
               "type":"fee",
               "typeDescription":"Комиссия торговой системы",
               "amount":0.150000,
               "price":1.000000,
               "currency":"RUR"
            },
            {  
               "creationDate":"2019-02-06T10:44:43.000+0300",
               "type":"fee",
               "typeDescription":"Комиссия брокера, торговые операции",
               "amount":0.790000,
               "price":1.000000,
               "currency":"RUR"
            }
         ]
      }
   ]
}

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

HTTP Request

GET /user/operationsHistory

Параметры запроса

Параметр Обязательный Описание
f_accountId да Идентификатор счета
f_searchQuery нет Поисковый запрос. Ввывод попадут только операции, название операции или инфо о связанном инструменте которых сожержит поисковую фразу
f_startDate нет Нижняя граница временного диапазона в формате 2019-01-01T15:27:48.497+0000
f_endDate нет Верхняя граница временного диапазона в формате 2019-03-01T15:27:48.497+0000
f_types нет Типы операций. Может принимать одно или нескольких значений через запятую (см. таблицу "Типы операций" ниже). Если не указан, возвращаются операции всех типов
offset нет Параметр пагинации "смещение", значение по-умолчанию 0
limit нет Параметр пагинации "лимит", значение по-умолчанию 30, может быть не более 500

Типы операций:

Значение Описание
buy Покупка
sell Продажа
deposit Пополнение
withdrawal Списание
fee Комиссия
dividend Дивиденды
coupon Купон
tax Налог

Параметры ответа

В качестве ответа возвращается массив объектов HistoryOperationDto.

Параметры сущности HistoryOperationDto

Параметр Тип Описание
ticker String Тикер. Выводится когда есть связанный с операцией инструмент (при типах: buy, sell, dividend, coupon, tax)
boardId String Режим торгов. Выводится только для операций buy, sell с открытия торгов до текущего времени внутри торгового дня
creationDate Date Дата и время операции в формате 2018-03-01T15:27:48.497+0000
type String Типы операции (см. таблицу "Типы операций")
typeDescription String Текстовое название типа операции (для показа в ui)
status String Статус неторговой операции (см. таблицу ниже)
amount BigDecimal Количество. В торговых операциях - количество инструмента, в неторговых - количество налога/комиссии/etc в валюте currency. Для расходных операций значение отрицательное
price BigDecimal Средняя цена единицы инструмента в валюте currency. Выводится при типах: buy, sell
volume BigDecimal Объем сделки в валюте currency. Выводится при типах: buy, sell. Считается как (price + accumulatedCouponIncome) * amount
currency String Валюта, в которой совершена операция
accumulatedCouponIncome BigDecimal Накопленный купонный доход (при сделках с облигациями)
relatedOperations HistoryOperationDto[] Массив дочерних операции - налог, комиссия, и т.д.

Параметр status определяет статус неторговой операции и может принимать следующие значения:

Значение Описание
accepted Принято
processed Исполнено
cancelled Отмена
denied Отказ
cancelledMistaken Отмена ошибочного

Возможные коды ошибок

Код Описание
internal.error.uncaught Внутренняя ошибка сервера
internal.error.access.denied Метод вызван с недопустимым уровнем авторизации или попытка получить доступ к чужому счету
validate.pagination.offset Ошибка валидации входного параметра offset
validate.pagination.limit Ошибка валидации входного параметра limit
validate.time.format Ошибка валидации входных параметров f_startDate и/или f_endDate

Ошибки

Формат ответа

Пример ответа с ошибкой:

{  
   "status":500,
   "error":{  
      "code":"validate.phone",
      "text":"Invalid phone number!"
   }
}

В случае возникновения ошибки в ходе работы с АПИ возвращается ответ, состоящий из полей, описанных ниже.

Параметры ответа в случае ошибки

Параметр Тип Описание
status Integer HTML-код ответа сервера
error Error Сущность, позволяющая определить причину ошибки (см. ниже)

Параметры сущности Error

Параметр Тип Описание
code String Код ошибки, позволяющий установить причину ошибки (см. возможные коды ошибок ниже)
text String Описание, содержащее дополнительную информацию об ошибке, может отсутствовать

Ниже приведен список кодов возможных ошибок.

Коды ошибок

Ошибки проверки пароля или кода из СМС или EMAIL

Код Описание
auth.password.invalid Пароль введен неверно
auth.password.attempts.limit.exceeded Превышено количество попыток ввода пароля
sms.code.invalid СМС-код введен не верно
sms.code.expired Время жизни СМС-кода истекло
sms.code.attempts.limit.exceeded Превышено количество попыток ввода кода из СМС
email.code.invalid Email-код введен не верно
email.code.expired Время жизни email-кода истекло
email.code.attempts.limit.exceeded Превышено количество попыток ввода кода из email

Технические внутренние ошибки

Код Описание
internal.error.sms.sending.denied За пол часа было запрошено более 5 СМС без попытки ввода
internal.error.sms.sending.too_often СМС запрашивается чаще чем один раз в минуту
internal.error.uncaught Внутренняя ошибка сервера
internal.error.sms.sending Внутренняя ошибка. Проблема с СМС провайдером
internal.error.email.sending Ошибка при отправке email кода
internal.error.not_found Объект не найден
internal.error.access.denied Ошибка доступа
internal.error.email.not_found Email отсутствует

Общие ошибки валидации

Код Описание
validate.phone Ошибка валидации номера телефона
validate.email Ошибка валидации email
validate.inn Ошибка валидации ИНН
validate.snils Ошибка валидации СНИЛС
validate.address Ошибка валидации адреса
validate.smscode Ошибка валидации СМС-кода
validate.emailcode Ошибка валидации Email-кода
validate.board.id Ошибка валидации идентификатора класса
validate.instrument.id Ошибка валидации идентификатора инструмента
validate.instrument.identifiers Ошибка валидации идентификаторов инструмента
validate.instrument.ticker Ошибка валидации тикера
validate.currency.code Ошибка валидации кода валюты
validate.tradefloor.id Ошибка валидации идентификатора торговой площадки
validate.cert Ошибка валидации сертификата
validate.order.side Ошибка валидации направления ордера
validate.order.type Ошибка валидации типа ордера
validate.order.price Ошибка валидации цены ордера
validate.order.amount Ошибка валидации суммы операции
validate.chart.period Ошибка валидации периода
validate.fcm.token Ошибка валидации токена Firebase Cloud Message
validate.pin_code Ошибка валидации ПИН-кода
validate.password Ошибка валидации пароля
validate.kit.agreement.number Ошибка валидации номера договора
validate.kit.agreement.type Ошибка валидации типа договора
validate.refill.bankCard.account.type.invalid Ошибка валидации типа счета для пополнения
validate.refill.bankCard.amount.invalid Ошибка валидации суммы операции пополнения
validate.refill.bankCard.currency.invalid Ошибка валидации валюты пополнения
validate.passport.photos Ошибка валидации фотографии
validate.passport.first_name Ошибка валидации имени
validate.passport.last_name Ошибка валидации фамилии
validate.passport.gender Ошибка валидации пола
validate.passport.birth_date Ошибка валидации даты рождения
register.passport.not_adult Ошибка валидации возраста
validate.passport.birth_place Ошибка валидации места рождения
validate.passport.series Ошибка валидации серии паспорта
validate.passport.number Ошибка валидации номера паспорта
validate.passport.issuer Ошибка валидации органа, выдавшего паспорт
validate.passport.issue.date Ошибка валидации даты выдачи паспорта
validate.broker.profile.id Ошибка валидации идентификатора счета
validate.bank.requisites Ошибка валидации банковских реквизитов
validate.time.format Ошибка валидации даты
validate.pagination.limit Ошибка валидации лимита пагинации
validate.pagination.offset Ошибка валидации смещения пагинации
validate.history.operation.category Ошибка валидации категории операций
register.agreement.invalid Ошибка валидации номера счета
register.csr.error.unknown Ошибка при работе с CSR, передан не валидный запрос на подпись

Ошибки установки/проверки ПИН-кода

Код Описание
pin.code.invalid Хэш пин-кода указан неверно
pin.code.already.set Пин-код уже установлен
pin.code.not_setup_yet Пин-код не установлен
pin.code.attempts.limit.exceeded Превышено допустимое количество попыток проверки хэша ПИН-кода

Торговые ошибки

Код Описание
trading.order.not_found Ордер не найден
trading.order.execute.not_accepted Возникла ошибка при исполнении ордера
trading.order.execute.timeout Не исполнено ничего за отведенный период
trading.order.execute.status.unknown Текущий статус ордера неизвестен
trading.order.money.not_enough Недостаточно средств
trading.order.account.instrument.not_supported Невозможно разместить ордер для данного типа счета
trading.order.price_not_in_limits Указанная цена выходит за рамки допустимого диапазона

Ошибки при выводе средств

Код Описание
withdrawal.money.not_enough Недостаточно средств для вывода
withdrawal.verify.sms_timeout Ошибка при отправке смс-сообщения с кодом подтверждения
withdrawal.external_error Ошибка во внешней системе
withdrawal.template.not_found Шаблон реквизитов не найден
withdrawal.account.type.invalid Вывод не поддерживается для данного типа счета
withdrawal.order.already_confirmed Заявка на вывод уже подтверждена

Другие ошибки

Код Описание
user.bcsprofile.not_found Не найден указанный договор
user.favorite.instrument.not_found Указанный тикер отсутствует в избранных
open.account.state.invalid Ошибка состояния счета
instrument.not_found Инструмент не найден
instrument.chart.not_found Ошибка получения данных для построения графика
issuer.not_found Эмитент не найден
inn.not_found ИНН не найден
client.app.outdated Необходимо установить новую версию клиента
refill.bankCard.invalid_broker_response Внешняя ошибка при пополнении счета
account.not.loaded Ошибка загрузки счетов