Form payment creation
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:
- Initialization — your server sends a request with order parameters to the 1Payment endpoint.
- Receiving the link — the system returns a unique URL of the payment page.
- Payment — you redirect the user to the received address; there they select a bank, open the mobile app, and confirm the payment.
- Notification (callback) — after the transaction completes, we send a payment status notification to your
notify_url.
Technical details
| Endpoint | https://api.1payment.com/init_form |
| Methods | GET, POST |
| Response format | JSON |
| Payment type | The request must include payment_type=sbp |
Request parameters
Required
These fields are required to create the payment form correctly.
| Parameter | Type | Description |
|---|---|---|
partner_id | Integer | Your unique identifier in the 1Payment system. |
project_id | Integer | Your project identifier. |
amount | Number | Payment amount (for example, 100.00). |
payment_type | String | For SBP payments, always pass sbp. |
user_data | String | Your internal order ID for payment matching. |
shop_url | String | URL of the site where the purchase is made. |
sign | String | Request signature (see the "Signature" section). |
Optional
Configure form behavior and pass customer data.
| Parameter | Type | Description |
|---|---|---|
description | String | Purchase description shown to the customer on the payment form. |
success_url | String | URL to redirect the customer after successful payment. |
failure_url | String | URL to redirect the customer on error. |
user_id | String | Internal payer ID in your system. |
lang | String | Form 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_keySignature verification in the documentation
Signature check for {{method}}
Paste the request parameters (JSON), API key, and signature. The widget verifies them automatically.
amount=100.00&partner_id=123&payment_type=sbp&project_id=456&shop_url=myshop.ru&user_data=order_777init_formamount=100.00&partner_id=123&payment_type=sbp&project_id=456&shop_url=myshop.ru&user_data=order_7776f92ce341c2b161fad0444ca5a1ef82bRequest 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.
| Parameter | Type | Req. | Description |
|---|---|---|---|
payment_type | String | Yes | Payment type (sbp). |
order_id | String | Yes | Payment ID in the 1Payment system. |
project_id | Integer | Yes | Your project ID. |
status | Integer | Yes | Status: 2 (pending), 3 (success), 4 (failure). |
status_description | String | Yes | PENDING, SUCCESS, or FAILURE. |
init_time | String | Yes | Payment creation time. |
status_time | String | Yes | Time the final status was received. |
merchant_price | Number | Yes | Payment amount. |
user_price | Number | Yes | Final amount charged to the payer. |
currency | String | Yes | Payment currency (ISO 4217). |
user_data | String | Yes | Transaction ID passed at creation. |
account | String | Yes | SBP account details (value sbp). |
sign | String | Yes | Callback signature. |
test | Integer | No | 1 for test payments. |
status_code | String | No | Additional 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.