Skip to content

Integration through the 1Payment payment form is the simplest way to start accepting bank card payments.

How it works

The card payment process consists of four steps:

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

Technical information

Endpointhttps://api.1payment.com/init_form
MethodsGET, POST
Response formatJSON

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 in the project currency (for example, 50.00).
user_dataStringYour internal order ID for matching the payment.
shop_urlStringURL of the website where the payment originates.
signStringRequest signature (see the "Signature" section).

Optional

Allow you to configure form behavior and pass customer data.

ParameterTypeDescription
descriptionStringPayment description for the customer on the payment form.
success_urlStringURL to redirect the customer after successful payment.
failure_urlStringURL to redirect the customer after an error.
subscriptionIntegerFor subscription payments only: pass 1 to receive a token for recurring charges.
tokenStringToken ID to display a saved card (contact your account manager to enable this feature).
langStringForm language (for example, ru, en).
user_idStringInternal payer ID in your system.

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=50&description=test_payment&partner_id=1234&project_id=5678secret_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=50&description=test_payment&partner_id=1234&project_id=5678&shop_url=https://test.com&user_data=order_777
String for MD5: init_formamount=50&description=test_payment&partner_id=1234&project_id=5678&shop_url=https://test.com&user_data=order_777
Expected signature: 8772da4f4ce287912769b3b36fce48ba
Signature does not match

Request examples

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

async function createCardForm(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: 1234,
  project_id: 5678,
  amount: '50.00',
  user_data: 'order_777',
  shop_url: 'https://test.com',
  description: 'test_payment',
};

createCardForm(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 which you must redirect the payer.

Request error (400):

{
  "error_code": 2
}

Testing

You can use the following data to test card payments:

ResultCard numberCARDHOLDEREXPCVC
Successful payment4111111111111111TEST01/01123
Failed payment4111111111111112TEST01/01123

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 (card).
order_idStringYesPayment ID in the 1Payment system.
project_idIntegerYesYour project ID.
statusIntegerYesStatus: 2 (pending), 3 (success), 4 (declined).
status_descriptionStringYesPENDING, SUCCESS, or FAILURE.
init_timeStringYesPayment creation time.
status_timeStringYesTime the final status was received.
merchant_priceNumberYesAmount charged to the payer.
init_priceNumberNoAmount at initialization.
user_priceNumberYesPartner payout amount.
currencyStringYesPayment currency (ISO 4217).
accountStringYesMasked card number.
user_dataStringYesTransaction ID passed at creation.
signStringYesCallback signature.
tokenStringNoSaved card identifier after successful payment (if enabled).
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 with & + API_KEY (without the init_form prefix). For details, see API request format.

Was this article helpful?