Создать контракт абонента
JSON API v3
POST /api/v3/projects/{projectId}/contracts
Инициирует привязку абонента (как правило, номера мобильного телефона) для повторных платежей в рамках проекта.
Payload подписи v4:
{merchant_contract_id}{customerPayload}{pin_code}{client_ip}
Параметры запроса
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
projectId | integer (int32) | да |
Тело запроса
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
client_ip | string | — | |
customer | object | — | Полиморфный блок клиента. Фактический набор полей зависит от type: - mobile_phone: msisdn, email - bank_card: source, country, merchant_customer_id, email и — только на хосте контура PCI DSS — bank_card с реквизитами карты - undefined_bank_card: те же поля, что у bank_card, без реквизитов Как выбрать между карточными типами. Это разные платёжные маршруты, поэтому тип указывается явно и никогда не выводится из других полей: - undefined_bank_card — плательщик вводит карту на платёжной странице; - bank_card — реквизиты собирает мерчант (контур PCI DSS) либо списание идёт по контракту. |
customer. | mobile_phone · bank_card · undefined_bank_card | — | |
customer. | string | — | MSISDN абонента в международном формате E.164 (без +). Обязателен для mobile_phone. |
customer. | string (email) | — | Email клиента |
customer. | string | — | Код страны (ISO 3166-1 alpha-2). Обязателен для bank_card. |
customer. | object | — | |
customer. | integer (int32) | — | ID сети (см. справочник операторов) |
customer. | string | — | |
customer. | object | — | |
customer. | integer (int32) | — | ID оператора (см. справочник операторов) |
customer. | string | — | |
customer. | string | — | Имя источника в системе продавца (уникально в рамках партнёра). Обязателен для bank_card. |
customer. | string | — | Уникальный ID клиента в системе продавца. Обязателен для bank_card. |
customer. | object | — | |
merchant_contract_id | string | — | ID контракта в системе продавца. Контракт создаётся по ключу клиент + merchant_contract_id. |
Пример запроса — Mobile phone (DCB)
{
"client_ip": "10.20.30.40",
"customer": {
"type": "mobile_phone",
"msisdn": "79600000000"
},
"merchant_contract_id": "1234567890"
}Пример запроса — Bank card with card details (PCI DSS contour host only)
{
"client_ip": "10.20.30.40",
"customer": {
"type": "bank_card",
"source": "my_app",
"country": "RU",
"merchant_customer_id": "client_12345",
"email": "test@test.com",
"bank_card": {
"pan": "4111111111111111",
"expiration_month": "12",
"expiration_year": "2030",
"security_code": "123",
"cardholder": "IVAN IVANOV"
}
},
"merchant_contract_id": "1234567890"
}Пример запроса — Contracts_Create / duplicate (HTTP 409)
{
"client_ip": "127.0.0.1",
"customer": {
"type": "bank_card",
"source": "app",
"country": "RU",
"merchant_customer_id": "CUSTOMER-000000001",
"email": "test@test.com",
"bank_card": {
"pan": "1111222233334444",
"expiration_month": "12",
"expiration_year": "2030",
"security_code": "123",
"cardholder": "IVAN IVANOV"
}
},
"contract": {
"merchant_contract_id": "CONTRACT-000000001"
}
}Пример запроса — Contracts_Create / mobile_phone (HTTP 201)
{
"merchant_contract_id": "CONTRACT-000000001",
"customer": {
"type": "mobile_phone",
"msisdn": "79600000000"
},
"client_ip": "127.0.0.1"
}Пример ответа
{
"success": true,
"data": {
"contract_id": "0d0f3c58-9b1e-4a77-9a0c-000000000002",
"authorization_type": "SMS_PIN",
"expires_at": "2026-09-21T12:00:00Z",
"merchant_contract_id": "CONTRACT-000000001",
"customer": {
"type": "mobile_phone",
"msisdn": "79600000000"
}
}
}Коды ответов
| Код | Описание |
|---|---|
201 | Контракт создан |
400 | Ошибка валидации или бизнес-ошибка запроса |
401 | Ошибка аутентификации (отсутствует/неверна подпись или временная метка) |
403 | Доступ к проекту запрещён или IP не в белом списке |
409 | Контракт уже существует или уже существует черновик контракта |
422 | Ошибка бизнес-валидации |
500 | Непредвиденная ошибка платформы |
503 | Сервис временно недоступен |