Skip to content

Integration via the 1Payment payment form is the simplest way to start accepting payments through the Faster Payments System (SBP). You do not need to generate QR codes or integrate with bank APIs yourself — 1Payment handles the technical side.

How it works

The SBP payment flow consists of four steps:

  1. Initialization — your server sends a request with order parameters to the 1Payment endpoint.
  2. Receiving the link — the system returns a unique URL of the payment page.
  3. Payment — you redirect the user to the received address; there they select a bank, open the mobile app, and confirm the payment.
  4. Notification (callback) — after the transaction completes, we send a payment status notification to your notify_url.

Technical details

Endpointhttps://api.1payment.com/init_form
MethodsGET, POST
Response formatJSON
Payment typeThe request must include payment_type=sbp

Request parameters

Required

These fields are required to create the payment form correctly.

ParameterTypeDescription
partner_idIntegerYour unique identifier in the 1Payment system.
project_idIntegerYour project identifier.
amountNumberPayment amount (for example, 100.00).
payment_typeStringFor SBP payments, always pass sbp.
user_dataStringYour internal order ID for payment matching.
shop_urlStringURL of the site where the purchase is made.
signStringRequest signature (see the "Signature" section).

Optional

Configure form behavior and pass customer data.

ParameterTypeDescription
descriptionStringPurchase description shown to the customer on the payment form.
success_urlStringURL to redirect the customer after successful payment.
failure_urlStringURL to redirect the customer on error.
user_idStringInternal payer ID in your system.
langStringForm language (for example, ru, en).

Signature generation (sign)

Signature: MD5, lowercase (hex). General rules — API request format.

Formula:

MD5(init_form + <параметры_без_sign_в_алфавитном_порядке_через_&> + <API_KEY>)

Example string before hashing:

init_formamount=100.00&partner_id=123&payment_type=sbp&project_id=456&shop_url=myshop.ru&user_data=order_777secret_key

Signature verification in the documentation

Signature check for {{method}}

Paste the request parameters (JSON), API key, and signature. The widget verifies them automatically.

Parameter string: amount=100.00&partner_id=123&payment_type=sbp&project_id=456&shop_url=myshop.ru&user_data=order_777
String for MD5: init_formamount=100.00&partner_id=123&payment_type=sbp&project_id=456&shop_url=myshop.ru&user_data=order_777
Expected signature: 6f92ce341c2b161fad0444ca5a1ef82b
Signature does not match

Request examples

const crypto = require('crypto');
const axios = require('axios');

async function createSbpForm(apiKey, params) {
  // 1. Сортируем параметры по алфавиту
  const sortedKeys = Object.keys(params).sort();
  const queryString = sortedKeys.map((key) => `${key}=${params[key]}`).join('&');

  // 2. Генерируем подпись с префиксом init_form
  const baseString = `init_form${queryString}${apiKey}`;
  params.sign = crypto.createHash('md5').update(baseString).digest('hex');

  // 3. Отправляем POST-запрос
  try {
    const response = await axios.post('https://api.1payment.com/init_form', params);
    return response.data; // в ответе поле url — ссылка на форму
  } catch (error) {
    console.error('Ошибка:', error.message);
  }
}

// Пример данных запроса
const mockApiKey = process.env.ONEPAYMENT_API_KEY;
const mockData = {
  partner_id: 123,
  project_id: 456,
  amount: '100.00',
  payment_type: 'sbp',
  user_data: 'order_777',
  shop_url: 'myshop.ru',
};

createSbpForm(mockApiKey, mockData).then(console.log);

API response

Successful response (200):

{
  "url": "https://merchant.1payment.com/xZ5g7F"
}

The url field is the payment page address to redirect the payer to.

Request error (400):

{
  "error_code": 2
}

Status notifications (callbacks)

After the transaction status changes, our server sends a POST request in JSON format to your notify_url.

ParameterTypeReq.Description
payment_typeStringYesPayment type (sbp).
order_idStringYesPayment ID in the 1Payment system.
project_idIntegerYesYour project ID.
statusIntegerYesStatus: 2 (pending), 3 (success), 4 (failure).
status_descriptionStringYesPENDING, SUCCESS, or FAILURE.
init_timeStringYesPayment creation time.
status_timeStringYesTime the final status was received.
merchant_priceNumberYesPayment amount.
user_priceNumberYesFinal amount charged to the payer.
currencyStringYesPayment currency (ISO 4217).
user_dataStringYesTransaction ID passed at creation.
accountStringYesSBP account details (value sbp).
signStringYesCallback signature.
testIntegerNo1 for test payments.
status_codeStringNoAdditional decline reason code.

Important: your server must return HTTP 200 OK. Otherwise the system retries the callback once per minute for 10 minutes.

Callback signature verification: MD5 of all parameters in alphabetical order joined by & + API_KEY (without the init_form prefix). See API request format.

Was this article helpful?