Skip to content

Шаг 1. Распознавание QR‑кода и расчёт стоимости

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

Пример QR-кода:

API Payler One (modern)

Запрос:

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