Шаг 1. Распознавание QR‑кода и расчёт стоимости
На этом шаге ваш сервер передаёт строку, содержащую данные QR‑кода, в API. Система анализирует информацию, вычисляет сумму в локальной валюте и рассчитывает эквивалент в валюте расчета.
Пример QR-кода:

Запрос:
curl -X POST https://api.payler.one/v2/qr \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"tlv": "<СТРОКА_ИЗ_QR_КОДА>",
"amountTo": 369,
"metadata": {
"personal": {
"name": "Иванов Иван Иванович",
"phone": "79998765432",
"account": "123219873",
"birthday": "04.06.1986",
"passportType": "21",
"country": "RU",
"countryCode": "RUS",
"city": "Moscow",
"passportSeries": "1234",
"passport": "567890",
"passportIssuerCode": "123-000",
"dateOfIssue": "12.12.2000",
"issueDate": "12.12.2030",
"address": "г. Москва, ул. Тверская, д. 1, кв. 10",
"ip": "127.0.0.1",
"email": "example@gmail.com"}
}
Описание полей:
access_token: string (required) - Authorization: Bearer;
tlv: string (required) - Расшифрованная строка из QR-кода;
amountTo: int (optional) - Сумма к оплате;
metadata: Массив с метаданными к платежу;
personal: Массив с информацией о плательщике;
name: string (required) - ФИО плательщика. Для оплаты по СБП - только кириллица, отчество обязательно;
phone: string (required) - Номер телефона плательщика;
account: string (optional) - Номер счета плательщика;
birthday: string (required) - Дата рождения плательщика;
passportType: string (optional) - Код документа (2 символа). Обязательно для оплаты по СБП;
country: string (optional) - ISO-код страны (2 символа). Обязательно для оплаты по СБП;
countryCode: string (optional) - ISO-код страны (3 символа). Обязательно для оплаты по СБП;
city: string (optional) - Город. Обязательно для оплаты по СБП;
passportSeries: string (optional) - Серия паспорта (4 символа). Обязательно для оплаты по СБП;
passport: string (optional) - Номер паспорта (6 символов). Обязательно для оплаты по СБП;
passportIssuerCode: string (optional) - Код подразделения (7 символов). Обязательно для оплаты по СБП;
dateOfIssue: string (optional) - Дата выдачи. Обязательно для оплаты по СБП;
issueDate: string (optional) - Срок действия. Обязательно для оплаты по СБП;
address: string (optional)- Полный адрес прописки. Обязательно для оплаты по СБП;
ip: string (optional) - IP-адрес;
email: string (optional) - Электронная почта.
Note
Если массив metadata не передаётся на текущем этапе, его потребуется передать на шаге выплаты (/pay).
Разбор ответа:
- Status 200:
In response, information about the QR code itself is sent, along with the request ID and a cost estimate.
{ "_id": "38f5461b-ff45-4c1e-84b3-9f6a782294b0", "status": "calculated", "amountFrom": 345.52, "amountTo": 369, "currencyFrom": { "_id": "6e65cf3c-c39d-4c5d-9fb0-159a1c054f2d", "type": "FIAT", "code": "RUB", "symbol": "₽", "label": "рубль", "decimal": 2, "countryName": "Russia", "countryCode": "RU" }, "currencyTo": { "_id": "9db8bdc0-fcba-46fb-8934-f7cada5be30c", "type": "FIAT", "code": "INR", "symbol": "₹", "label": "Rs", "decimal": 2, "countryName": "India", "countryCode": "IN" }, "rate": 1.06795554, "reverseRate": 0.93636856, "isCustomAmount": true, "merchant": { "country": "IN", "name": "name", "accountNumber": "accountNumber", "mcc": "5399" }, "metadata": { "personal": { "name": "Иванов Иван Иванович", "phone": "79998765432", "account": "123219873", "birthday": "04.06.1986", "passportType": "21", "countryCode": "RUS", "passportSeries": "1234", "passport": "567890", "passportIssuerCode": "123-000", "dateOfIssue": "12.12.2000", "issueDate": "12.12.2030", "address": "г. Москва, ул. Тверская, д. 1, кв. 10", "ip": "127.0.0.1", "email": "example@gmail.com" } }, "createdAt": "2026-09-13T06:08:49.907Z", "expiredAt": "2026-09-13T06:13:49.907Z", "minLimit": 100, "maxLimit": 50000, "rates": [ { "amountFrom": 100, "amountTo": 50000, "rate": 1.06795554, "reverseRate": 0.93636856 } ] }
Описание полей:
_id (uuid): Уникальный ID запроса, используется в следующем шаге оплаты;
status (string): Текущий статус платежа — может принимать значения paid, completed или canceled;
Note
Paid — оплата прошла успешно, терминал принял средства. Нефинальный статус, может измениться в течение 10 минут.
Completed — оплата прошла успешно (финальный статус).
Canceled — оплата не прошла (финальный статус).
amountFrom (number): Сумма списания (в исходной валюте);
amountTo (number): Сумма зачисления (в целевой валюте);
currencyFrom (object) : Данные исходной валюты;
currencyTo (object) : Данные целевой валюты;
_id (uuid): Уникальный ID валюты списания;
type (string): Тип валюты;
code (string): Код валюты;
symbol (string): Символ валюты;
label (string): Название или краткая метка валюты;
decimal (number): Количество знаков после запятой;
countryName (string): Название страны;
countryCode (string): Код страны;
rate (number): Курс обмена;
reverseRate (number): Обратный курс обмена;
isCustomAmount (bool) : Флаг, указывающий, была ли сумма введена пользователем вручную (false, если расчет произведен автоматически);
merchant (object) : Данные продавца;
country (string): Код страны регистрации или нахождения продавца;
name (string): Название продавца;
metadata (object) : Дополнительные метаданные;
createdAt (string): Дата и время создания расчета (в формате ISO 8601);
expiredAt (string): Дата и время истечения срока действия данного расчета/курса
- Status 400:
Authentication failed. Access token is invalid.
{ "error": "ERROR_ACCESS_TOKEN_INVALID", "message": "Access token is invalid.", "statusCode": 400 }
error: string (required)
message: string (required)
statusCode: number
-
Status 401: Authentication failed. Access token has expired.
{ "error": "ERROR_TOKEN_EXPIRED", "message": "Access token has expired.", "statusCode": 401 } -
Status 403: QR code format is not supported right now.
{ "error": "ERROR_QR_CODE_NOT_SUPPORTED", "message": "This QR code not supported.", "statusCode": 403 }
error: string (required)
message: string (required)
statusCode: number
- Status 404:
QR code expired.
{ "error": "ERROR_QR_CODE_EXPIRED", "message": "This QR code is expired.", "statusCode": 404 }
error: string (required)
message: string (required)
statusCode: number
- Status 405:
No route found for this QR code.
{ "error": "ERROR_QR_NO_ROUTE_FOUND", "message": "Routing for this currency not set.", "statusCode": 405 }
error: string (required)
message: string (required)
statusCode: number
- Status 500:
Project tariff not configured, pls contact with our support.
{ "error": "TARIFF_NO_FOUND", "message": "Project tariff not configured, pls contact with our support.", "statusCode": 500 }
error: string (required)
message: string (required)
statusCode: number
- Status 501:
Requested quote not found, pls contact with our support.
{ "error": "QUOTE_NOT_FOUND", "message": "Requested quote not found, pls contact with our support", "statusCode": 501 }
error: string (required)
message: string (required)
statusCode: number