Запросы API v1.1.0
Кошелёк Pay API
Документация перемещена
Информация на этой странице не обновляется и может быть устаревшей.
Наиболее полная и актуальная версия документации для разработчиков доступна по новому адресу:
В следующих версиях документа в запросы и/или ответы могут быть добавлены новые необязательные поля.
Для обеспечения обратной совместимости необходимо игнорировать их при формировании запросов и при приеме ответов от сервера до внесения соответствующих изменений в ПО, работающее на стороне ТСП.
HTTP-метод: POST
URL:
/api/v1/merchant/availability-info/task
ТСП передает Кошельку информацию о счете к оплате и создает задачу на получение данных о провайдерах платежей.
В зависимости от кода ответа на запрос определяется способ получения списка провайдеров платежей:
1) Синхронный: ответ на вызов содержит HTTP Status Code
200
. При этом в теле ответа содержатся непосредственно запрашиваемые данные о провайдерах платежей.2) Асинхронный: ответ на вызов содержит HTTP Status Code
201
. При этом в теле ответа будет содержаться поле availabilityInfoId
, а в HTTP-заголовке Location — URL, который необходимо периодически опрашивать для получения данных о провайдере, используя запрос /api/v1/merchant/availability-info/{availabilityInfoId}
.Принципы получения списка доступных провайдеров платежей

Параметр | Тип | Обязательно | Значение |
---|---|---|---|
token | String | Да | Состоит из значения параметра cashFingerPrint и парольной части TOTP.
Значение получается от модуля Кошелёк TOTP, развернутого на кассовом сервере ТСП (см. Модуль Кошелёк TOTP). |
token: SW50ZWwoUikgQ29yZShUTSkgaTUtNzIwMFUgQ1BVIEAgMi41MEdIejtDUFUWO1RpbWk7TU1HNVMwMDAwMDEwNzc5TFAwMzFaOzE2MTcyNzYxNzk2MjA7MTkyLjE2OC4xLjEwMztVU0IgUm9vdCBIdWIgKFVTQiAzLjApI1VTQiBDb21wb3NpdGUgRGV2aWNlI1hpYW9NaSBVU0IgMi4wIFdlYmNhbSNJbnRLbChSKSBXaXJLbGVzcyBCbHVLdG9vdGgoUikjRUxBTiBXQkYgRmluZ2VycHJpbnQgU2Vuc29yI1VTQiBJbnB1dCBEZXZpY2UjSElELWNvbXBsaWFudCBtb3VzZQ==967
Параметры тела запроса
Тело запроса передается в виде объекта JSON следующей структуры:
Поле | Тип | Обязательно | Значение |
---|---|---|---|
requestId | String | Да | Уникальный идентификатор запроса (GUID, 36 символов). Если по каким-либо причинам ответ на запрос не получен от Кошелька, то можно отправить этот запрос повторно, используя то же самое значение параметра requestId (действует правило идемпотентности). |
cardSession | String | Да | Идентификатор сессии, извлеченный ТСП из штрихкода при сканировании карты или с информацией о QR-коде
(не более 32 символов, латинские буквы и цифры, либо 6 символов для одномерных штрихкодов). |
storeId | String | Да | Идентификтор ТСП, выданный Cardsmobile при его подключении (GUID, 36 символов). |
terminalId | String | Да | Идентификатор кассы (256 символов). |
checkoutInvoice | Да | Информация о пречеке. | |
user | Да | Информация о пользователе. |
{
"requestId": "1624931549080",
"cardsession": "123456",
"storeId": "ac99f4c8-1a8e-4b60-8aeb-fe20220f1b99",
"terminalId": "mip9e26ay3z2s0oh",
"checkoutInvoice": {
"orderId": "ac99e4c8-1a7e-4b60-8aeb-fe10110f1b99",
"totalAmount": 20,
"discountAmount": 5,
"subTotalAmount": 20,
"items": [
{
"name": "testName",
"article": "1111111",
"price": null,
"quantity": 1,
"totalAmount": 20,
"discountAmount": 5,
"subTotalAmount": 100,
"tax": "none"
}
],
},
"user": {
"loyaltyId": "000022"
},
}
Запрос выполнен успешно, ответ содержит сведения о списке провайдеров платежей (используется синхронный режим).
Тело ответа — объект JSON следующей структуры:
Пoле | Тип | Обязательно | Значение |
---|---|---|---|
koshelekPayIsDefault | Boolean | Да | Флаг автоматического выбора и запуска на кассе оплаты через Кошелёк Pay по умолчанию. Если true , то в списке провайдеров платежей paymentTypeAvailabilityInfoList всегда будет хотя бы один доступный (available = true ). |
paymentTypeAvailabilityInfoList | Да | Массив, содержащий в себе список доступных провайдеров платежей. |
Запрос выполнен успешно, ответ содержит сведения для отдельного запроса на получение списка доступных провайдеров платежей (используется асинхронный режим).
Заголовок ответа:
Location: /api/v1/merchant/availability-info/{availabilityInfoId}
Тело ответа — объект JSON следующей структуры:
Поле | Тип | Обязательно | Значение |
---|---|---|---|
availabilityInfoId | String | Да | Идентификатор, по которому можно запросить информацию о списке доступных провайдеров платежей. |
timeout | Integer | Да | Время, через которое необходимо осуществить первую проверку статуса готовности в запросе /availability-info/{availabilityInfoId} |
Запрос не выполнен. Тело ответа — объект JSON, описывающий ошибку.
HTTP-метод: GET
URL:
/api/v1/merchant/availability-info/{availabilityInfoId}
ТСП запрашивает у Кошелька список доступных провайдеров платежей в асинхронном режиме, т. е. если запрос
/api/v1/merchant/availability-info/task
вернул HTTP Status Code 201
.В этом случае методы
/api/v1/merchant/availability-info/task
и /api/v1/merchant/availability-info/{availabilityInfoId}
используются в паре (принцип периодического опроса — поллинга).Необходимо последовательно:
1) вызвать
api/v1/merchant/availability-info/task
, получить availabilityInfoId
__ (идентификатор, используя который, можно будет впоследствии получить данные), и timeout
__ (время, через которое необходимо осуществить первую проверку статуса готовности)2) вызывать метод
api/v1/merchant/availability-info/{availabilityInfoId}
с периодом ожидания, равным timeout
для первого вызова и pollingTimeout
для последующих вызовов до тех пор, пока в ответе поле computationComplete
не будет содержать значение true
).Отсутствуют.
Запрос выполнен успешно. Тело ответа — объект JSON следующей структуры:
Поле | Тип | Обязательно | Значение |
---|---|---|---|
availabilityInfoId | String | Да | Идентификатор, полученный в запросе. |
computationComplete | Boolean | Да | Готовность результата запроса: true — готов;false — не готов. |
pollingTimeout | Long | Да | Инструкция от сервера: отправить повторный запрос через указанное время (в миллисекундах). Передается, если computationComplete = false . |
koshelekPayIsDefault | Boolean | Да | Флаг автоматического выбора и запуска на кассе оплаты через Кошелёк Pay по умолчанию. Если true , то в списке провайдеров платежей paymentTypeAvailabilityInfoList всегда будет хотя бы один доступный (available = true ). |
paymentTypeAvailabilityInfoList | Да | Массив, содержащий в себе список доступных провайдеров платежей. |
{
"availabilityInfoId": "ecda679e-f5ab-4250-b622-2a429d714b21",
"computationComplete": true,
"koshelekPayIsDefault": true,
"paymentTypeAvailabilityInfoList": [
{
"paymentType": "SBP",
"available": true,
"message": ""
},
{
"paymentType": "DOLYAME",
"available": false,
"message": "Недоступно по причине низкого кредитного рейтинга: score < 0.2"
}
]
}
Запрос не выполнен.
Тело ответа — объект JSON, описывающий ошибку.
HTTP-метод: POST
URL:
/api/v1/merchant/checkout
ТСП передает Кошельку информацию о счёте к оплате и значение
cardSession
пользователя, который должен оплатить этот счёт.Параметр | Тип | Обязательно | Значение |
---|---|---|---|
token | String | Да | Состоит из значения параметра cashFingerPrint и парольной части TOTP.
Значение получается от модуля Кошелёк TOTP, развернутого на кассовом сервере ТСП (см. Модуль Кошелёк TOTP). |
token: SW50ZWwoUikgQ29yZShUTSkgaTUtNzIwMFUgQ1BVIEAgMi41MEdIejtDUFUWO1RpbWk7TU1HNVMwMDAwMDEwNzc5TFAwMzFaOzE2MTcyNzYxNzk2MjA7MTkyLjE2OC4xLjEwMztVU0IgUm9vdCBIdWIgKFVTQiAzLjApI1VTQiBDb21wb3NpdGUgRGV2aWNlI1hpYW9NaSBVU0IgMi4wIFdlYmNhbSNJbnRLbChSKSBXaXJLbGVzcyBCbHVLdG9vdGgoUikjRUxBTiBXQkYgRmluZ2VycHJpbnQgU2Vuc29yI1VTQiBJbnB1dCBEZXZpY2UjSElELWNvbXBsaWFudCBtb3VzZQ==967
Параметры тела запроса
Тело запроса передается в виде объекта JSON следующей структуры:
Поле | Тип | Обязательно | Значение |
---|---|---|---|
requestId | String | Да | Уникальный идентификатор запроса (GUID, не более 36 символов). Если по каким-либо причинам ответ на запрос не получен от Кошелька, то можно отправить этот запрос повторно, используя то же самое значение параметра requestId (действует правило идемпотентности). |
cardSession | String | Да | Идентификатор сессии, извлеченный ТСП из штрихкода при сканировании карты или с информацией о QR-коде
(не более 32 символов, латинские буквы и цифры, либо 6 символов для одномерных штрихкодов). |
storeId | String | Да | Идентификтор ТСП, выданный Cardsmobile при его подключении (GUID, 36 символов). |
terminalId | String | Да | Идентификатор кассы (256 символов). |
checkoutInvoice | Да | Информация о пречеке. | |
user | Да | Информация о пользователе. | |
paymentMethods | Да | Массив объектов, содержащий в себе информацию о способах оплаты, поддерживаемых ТСП. |
{
"requestId": "4ee64eb1-0012-4cd0-aefe-966d48ea7b71",
"cardSession": "A1G97N",
"storeId": "ac99f4c8-1a8e-4b60-8aeb-fe20220f1b99",
"terminalId": "mip9e26ay3z2s0oh",
"checkoutInvoice": {
"orderId": "12345",
"totalAmount": "14245",
"discountAmount": "100",
"subTotalAmount": "14345",
"items": [
{
"name": "Товар 1",
"article": "1111111",
"price": 10000,
"currency": "RUB",
"quantity": 1125.0,
"measure": "GRAM",
"totalAmount": 1900,
"discountAmount": 100,
"subTotalAmount": 2000,
"tax": "vat10"
},
{
"name": "Товар 2",
"article": "2222222",
"price": 12345,
"quantity": 1,
"totalAmount": 12345,
"discountAmount": 15,
"subTotalAmount": 3000,
"tax": "vat20"
}
]
},
"user": {
"loyaltyId": "1234567891011"
},
"paymentMethods": [
{
"type": "SBP"
}
]
}
Запрос выполнен успешно.
Тело ответа — объект JSON следующей структуры:
Поле | Тип | Обязательно | Значение |
---|---|---|---|
requestId | String | Да | Уникальный идентификатор запроса. |
transactionId | String | Да | Идентификатор транзакции. |
status | Enum | Да | Статус транзакции: new canceled pending rejected accepted refunding refunded partial_refunded |
slip | Зависит от значения поля status | Объект Slip, содержащий данные о проведенной банковской операции. Будет возвращен, если операция оплаты была проведена через банк (статусы accepted , rejected ), или если был проведен возврат оплаты (статусы refunded , partial_refunded ). |
{
"requestId": "314b0613-ae21-438c-b538-6b965e85d644",
"transactionId": "f9a59682-3d05-4af6-8308-2c1f1665d733",
"status": "new",
"slip": {
"id": "d95d9f7d-cea2-47c0-b9b5-4e7ad3ee4c63",
"paymentTransactionId": "48f62a99-50a2-4e0c-a883-4be0a7c62dd7",
"paymentType": "DOLYAME",
"terminalId": "20210510T120700",
"storeId": "KOSHELEK-42",
"orderId": "9d913e76-24d9-468d-6c6d-2a41bcfb8d81",
"operationDateTime": "2022-01-19T11:56:34.323Z",
"totalAmount": 15000,
"currency": "RUB"
}
}
Запрос не выполнен. Тело ответа — объект JSON, описывающий ошибку.
HTTP-метод: POST
URL:
/api/v1/merchant/transaction/status
Ответ со статусами платежной транзакции и транзакции отмены.
a. Реализация приема postback/callback ответов от Кошелька
ТСП необходимо реализовать на своей стороне метод, который будет вызывать сервер Кошелька для передачи ТСП статуса платежа. Этот способ получения статуса является предпочтительным, т.к. в данном случае сервер Кошелька сразу передает ТСП ответ, и ТСП не нужно работать в режиме polling c сервером Кошелька с запросом b в ожидании ответа с финальным статусом транзакции.
Сервер Кошелька должен передавать при вызове метода тот же объект, который возвращает в response на вызов b.
Схема работы через периодические вызовы метода b со стороны ТСП должна использоваться в случае технической невозможности подключения сервера Кошелька к серверу ТСП (или напрямую к кассам) для передачи ответов через postback.
Request body: см. Response body в пункте b.
b. Реализация подключения к методу получения статуса от сервера Кошелька.
Рекомендации по вызову метода
Статус транзакции необходимо запрашивать:
- 1.В первый раз: не раньше чем через 250 мс и не позже чем через 500 мс.
- 2.Дальнейшие вызовы должны быть не чаще чем раз в 250 мс.
- 3.Касса должна ожидать статус не дольше, чем 30 секунд, и вызывать отмену оплаты, если время ожидания превышено.
Конкретная реализация остается на усмотрение ТСП, но важно убедиться, что не остается никакого потока, который продолжает опрашивать серверы Кошелька.
Тело запроса передается в виде объекта JSON следующей структуры:
Поле | Тип | Обязательно | Значение |
---|---|---|---|
requestId | String | Да | Уникальный идентификатор запроса (GUID, не более 36 символов). Если по каким-либо причинам ответ на запрос не получен от Кошелька, то можно отправить этот запрос повторно, используя то же самое значение пар аметра requestId (действует правило идемпотентности). |
transactionId | String | Нет | Идентификатор транзакции оплаты (GUID, 36 символов). Необязателен, если передается refTransactionId . |
refTransactionId | String | Нет | Идентификатор транзакции отмены (GUID, 36 символов). Необязателен, если передается transactionId . |
Запрос выполнен успешно.
Тело ответа — объект JSON следующей структуры:
Поле | Тип | Обязательно | Значение |
---|---|---|---|
requestId | String | Да | Уникальный идентификатор запроса. |
transactionId | String | Да | Идентификатор транзакции оплаты. |
refTransactionId | String | Нет | Идентификатор транзакции отмены. |
status | Enum | Да | Статус транзакции: new canceled pending rejected accepted refunding refunded partial_refunded — или пустое значение, если указанный в запросе transactionId не найден. |
paymentGroup | Enum | Да | Категория оплат: INSTALLMENT — в рассрочку / частями.SBP — через Систему быстрых платежей. |
paymentProvider | Enum | Да | Тип провайдера: DOLYAME — "Тинькофф Долями".
SBP — СБП. |
slip | Зависит от значения поля status | Объект Slip, содержащий данные о проведенной банковской операции. Будет возвращен, если операция оплаты была проведена через банк (статусы accepted и rejected ), или если был проведен возврат оплаты (статусы refunded и partial_refunded ). | |
refStatus | Enum | Нет | Статус транзакции отмены: new rejected — отмена отклонена, оплата не возвращена покупателю.accepted — отмена одобрена. |
errorCode | Enum | Нет | Код ошибки, возникшей при выполнении операции оплаты или возврата. Параметр передается только для status или refStatus = "rejected" .
Описание возможных значений см. ниже. |
1. Для сценария оплаты:
Значение | Описание |
---|---|
NOT_ENOUGH_LIMIT_TO_PAY | Превышен лимит для совершения операции. |
TOTAL_AMOUNT_IS_TOO_SMALL | Сумма покупки ниже установленного лимита (составляет 4 рубля). |
EXTERNAL_PROVIDER_ERROR | Общий код ошибки провайдера платежей. |
SUBSCRIPTION_IS_NOT_FOUND | Привязанный счет пользователя не найден (платеж через СБП с привязанного счета пользователя). |
PAYMENT_DECLINED_BY_EXTERNAL_PROVIDER | Платеж отклонен банком (платеж через СБП с привязанного счета пользователя). |
2. Для сценария возврата:
Значение | Описание |
---|---|
PAYMENT_TRANSACTION_IS_NOT_PAID | Возврат отклонен, т.к. транзакция оплаты с данным transactionId не была завершена, списание средств не выполнялось. |
TERMINAL_STATE_OF_PAYMENT_TRANSACTION | Возврат отклонен по одной из причин:
|
PAYMENT_TRANSACTION_IS_BEING_REFUNDED_ALREADY | Возврат отклонен, т.к. есть незавершенная транзакция отмены. Дождитесь завершения процесса возврата по транзакции отмены с refTransactionId незавершенной предыдущей транзакции отмены. |
REQUESTED_REFUND_AMOUNT_IS_GREATER_THAN_AVAILABLE | Возврат отклонен, т.к. запрошенная сумма к возврату превышает сумму оплаты по транзакции оплаты с данным transactionId . |
EXTERNAL_PROVIDER_ERROR | Общий код ошибки провайдера платежей. |
UNEXPECTED_REFUND_AMOUNT_LEFT_FROM_EXTERNAL_PROVIDER | Возврат отклонен, т.к. транзакция оплаты с данным transactionId не была завершена, списание средств не выполнялось. |
PAYMENT_ORDER_IS_NOT_FOUND | Только для транзакций СБП. Не найдено платежное поручение в банке ТСП при выполнении операции возврата. |
Запрос не выполнен. Тело ответа — объект JSON, описывающий ошибку.
HTTP-метод: POST
URL:
/api/v1/merchant/transaction/receipt
ТСП передает Кошельку информацию о фискальном чеке для его отображения пользователю в Кошельке.
Тело запроса передается в виде объекта JSON следующей структуры:
Поле | Тип | Обязательно | Значение |
---|---|---|---|
requestId | String | Да | Уникальный идентификатор запроса (GUID, не более 36 символов). Если по каким-либо причинам ответ на запрос не получен от Кошелька, то можно отправить этот запрос повторно, используя то же самое значение параметра requestId (действует правило идемпотентности). |
transactionId | String | Да | Идентификатор транзакции оплаты (GUID, 36 символов). |
storeId | String | Да | Идентификтор ТСП, выданный Cardsmobile при его подключении (GUID, 36 символов). |
terminalId | String | Да | Идентификатор кассы (256 символов). |
invoice | Object Invoice | Да | |
meta | Object | Нет | Объект, содержащий дополнительные поля, например: скидки, бонусы и т.д. (набор пар "ключ-значение"). |
{
"requestId": "045b22e0-9c5b-11ea-ab12-0800200c9a66",
"transactionId": "9dcc19d0-9c5a-11ea-ab12-0800200c9a66",
"invoice": {
"orderId": "12345",
"receiptId": "6789",
"merchantName": "ООО Торговая сеть №1",
"merchantAddress": "198000 г. Санкт-Петербург, ул.Ленина д.1 пом.123",
"inn": "001234567891",
"dateTime": "2020-05-20T20:50:00+03:00",
"shift": "5",
"cashier": "Иванов Иван Иванович",
"taxation": "osn",
"kktRegNumber": "0004147503041443",
"fnNumber": "9280440300387752",
"fdNumber": "0000010272",
"fpd": "2374313442",
"website": "nalog.ru",
"receiptType": "debit",
"qr": "t=20200520T2050&s=859.00&fn=9280440300387752&i=10272&fp=2374313442&n=1",
"totalAmount": "14245",
"currency": "RUB",
"discountAmount": "100",
"subTotalAmount": "14345",
"items": [
{
"name": "Товар 1",
"price": 1000,
"currency": "RUB",
"quantity": 2.0,
"measure": "GRAM",
"totalAmount": 1900,
"discountAmount": 100,
"subTotalAmount": 2000,
"tax": "vat10",
"article": "1111111"
},
{
"name": "товар 2",
"price": 12345,
"quantity": 1.0,
"totalAmount": 12345,
"tax": "vat20"
}
]
}
}
Запрос выполнен успешно. Тело ответа — пустое.
Запрос не выполнен. Тело ответа — объект JSON, описывающий ошибку.
HTTP-метод: POST
URL:
/api/v1/merchant/transaction/cancel
ТСП передает Кошельку запрос на отмену транзакции оплаты.
В запросе не указывается сумма отмены, т.к. операция отмены проводится на полную сумму, указанную в транзакции оплаты.
Тело запроса передается в виде объекта JSON следующей структуры:
Поле | Тип | Обязательно | Значение |
---|---|---|---|
requestId | String | Да | Уникальный идентификатор запроса (GUID, не более 36 символов). Если по каким-либо причинам ответ на запрос не получен от Кошелька, то можно отправить этот запрос повторно, используя то же самое значение параметра requestId (действует правило идемпотентности). |
storeId | String | Да | Идентификтор ТСП, выданный Cardsmobile при его подключении (GUID, 36 символов). |
terminalId | String | Да | Идентификатор кассы (256 символов). |
transactionId | String | Да | Идентификатор транзакции оплаты (GUID, 36 символов). |
Запрос выполнен успешно.
Тело ответа — объект JSON следующей структуры:
Поле | Тип | Обязательно | Значение |
---|---|---|---|