---
slug: "cloudpayments"
name: "CloudPayments API"
vendor: "CloudPayments"
industry: "finance"
docsUrl: "https://developers.cloudpayments.ru/#api"
version: 2
updatedAt: "2026-10-24"
---

# CloudPayments API

Отрасль: Платежи и финансы. Актуально на 2026-10-24.

Программный интерфейс платёжного сервиса CloudPayments для приёма карточных платежей. Через API проводят оплату по криптограмме карты и по сохранённому токену (рекуррентные платежи), подтверждают, отменяют и возвращают платежи, управляют подписками и выставляют счета со ссылкой на оплату. О результатах платежей сервис сообщает уведомлениями (вебхуками) на сайт магазина.

## Сценарии

### Принять оплату картой на сайте

Одностадийная оплата: данные карты шифрует скрипт CloudPayments на странице, сервер магазина проводит платёж по криптограмме.

1. На странице оплаты подключи скрипт Checkout: он принимает данные карты и отдаёт криптограмму — сами данные карты на твой сервер не попадают.
2. С сервера проведи платёж: POST /payments/cards/charge с Amount, Currency, IpAddress плательщика, CardCryptogramPacket, InvoiceId (номер заказа) и AccountId. Авторизация — Basic: Public ID и API Secret. Передай заголовок X-Request-ID, чтобы повтор запроса не создал второй платёж.
3. Если банку нужна 3-D Secure, ответ придёт с Success: false и Model с AcsUrl, PaReq и TransactionId. Отправь покупателя POST-формой на AcsUrl с MD = TransactionId, PaReq и TermUrl — адресом возврата на твой сайт.
4. Когда покупатель вернётся на TermUrl с MD и PaRes, заверши оплату: POST /payments/cards/post3ds с TransactionId и PaRes.
5. Успех запроса (Success) — не то же самое, что успех оплаты: статус транзакции смотри в Model.Status, причину отказа — в коде ошибки (например, 5051 — недостаточно средств).

```bash
curl -X POST https://api.cloudpayments.ru/payments/cards/charge \
  -u '<Public ID>:<API Secret>' \
  -H 'Content-Type: application/json' \
  -H 'X-Request-ID: order-1042-try-1' \
  -d '{
        "Amount": 1500.00,
        "Currency": "RUB",
        "IpAddress": "203.0.113.7",
        "CardCryptogramPacket": "<криптограмма из Checkout>",
        "InvoiceId": "1042",
        "AccountId": "user_42",
        "Description": "Оплата заказа № 1042",
        "Email": "buyer@example.ru"
      }'
```

### Двухстадийная оплата: заблокировать и списать позже

Деньги замораживаются при заказе и списываются после сборки — или возвращаются на карту, если товара нет.

1. Проведи авторизацию вместо списания: POST /payments/cards/auth с теми же параметрами, что и одностадийная оплата. Деньги заблокируются на карте.
2. Когда заказ собран, подтверди списание: POST /payments/confirm с TransactionId и Amount. Сумма может быть меньше заблокированной — например, если часть товара закончилась.
3. Если заказ отменён, сними блокировку: POST /payments/void с TransactionId.
4. Для оплат по сохранённой карте в двухстадийной схеме — /payments/tokens/auth, подтверждение тем же /payments/confirm.

```bash
# Подтвердить списание (сумма — не больше заблокированной)
curl -X POST https://api.cloudpayments.ru/payments/confirm \
  -u '<Public ID>:<API Secret>' \
  -H 'Content-Type: application/json' \
  -d '{"TransactionId": 455, "Amount": 65.98}'

# Или отменить блокировку
curl -X POST https://api.cloudpayments.ru/payments/void \
  -u '<Public ID>:<API Secret>' \
  -H 'Content-Type: application/json' \
  -d '{"TransactionId": 455}'
```

### Подписка и списания по сохранённой карте

Ежемесячная оплата сервиса или списание без участия покупателя по карте, сохранённой при первой оплате.

1. Первая оплата — обычная, по криптограмме, обязательно с AccountId (идентификатором пользователя у тебя). После успешной оплаты CloudPayments вернёт токен карты в данных транзакции и в Pay-уведомлении — сохрани его.
2. Для регулярных списаний создай подписку: POST /subscriptions/create с Token, AccountId, Description, Amount, Currency, RequireConfirmation, StartDate (в UTC, в будущем), Interval (Day, Week, Month) и Period. Сохрани Id подписки из ответа.
3. Для разовых списаний без подписки используй POST /payments/tokens/charge с Token, AccountId, Amount и TrInitiatorCode = 0 (списание инициирует магазин); для оплаты по расписанию — PaymentScheduled = 1.
4. Отключить подписку: POST /subscriptions/cancel с Id.
5. Токен работает только на том терминале (Public ID), где был получен.

```bash
curl -X POST https://api.cloudpayments.ru/subscriptions/create \
  -u '<Public ID>:<API Secret>' \
  -H 'Content-Type: application/json' \
  -d '{
        "Token": "<токен карты>",
        "AccountId": "user_42",
        "Description": "Подписка на сервис example.ru",
        "Email": "user@example.ru",
        "Amount": 399,
        "Currency": "RUB",
        "RequireConfirmation": false,
        "StartDate": "2026-11-01T09:00:00",
        "Interval": "Month",
        "Period": 1
      }'
```

### Вернуть деньги покупателю

Полный или частичный возврат по заказу.

1. Найди платёж по номеру заказа: POST /v2/payments/find с InvoiceId. Если по заказу было несколько операций, вернётся последняя — возьми TransactionId оплаты.
2. Сделай возврат: POST /payments/refund с TransactionId и Amount — суммой возврата (можно меньше суммы оплаты). Если магазин отправляет чеки через CloudPayments, передай состав чека возврата в JsonData.
3. В ответе — TransactionId операции возврата; сохрани его рядом с заказом.
4. Возвраты по транзакциям старше года не проводятся.

```bash
curl -X POST https://api.cloudpayments.ru/v2/payments/find \
  -u '<Public ID>:<API Secret>' -H 'Content-Type: application/json' \
  -d '{"InvoiceId": "1042"}'

curl -X POST https://api.cloudpayments.ru/payments/refund \
  -u '<Public ID>:<API Secret>' -H 'Content-Type: application/json' \
  -d '{"TransactionId": 455, "Amount": 500}'
```

### Выставить счёт ссылкой на оплату

Оплата без корзины на сайте: отправить клиенту ссылку в мессенджер, по почте или SMS.

1. Создай счёт: POST /orders/create с Amount, Description, Email и InvoiceId. Чтобы CloudPayments сам отправил ссылку, добавь SendEmail = true (или Phone и SendSms).
2. В ответе Model.Url — ссылка на страницу оплаты, её можно отправить клиенту самостоятельно.
3. SuccessRedirectUrl и FailRedirectUrl вернут клиента на твой сайт после оплаты.
4. Об оплате узнавай из Pay-уведомления: по InvoiceId найди счёт у себя.

```bash
curl -X POST https://api.cloudpayments.ru/orders/create \
  -u '<Public ID>:<API Secret>' \
  -H 'Content-Type: application/json' \
  -d '{
        "Amount": 4900.0,
        "Currency": "RUB",
        "Description": "Консультация 24 октября",
        "Email": "client@example.ru",
        "InvoiceId": "INV-305",
        "SendEmail": true,
        "SuccessRedirectUrl": "https://example.ru/paid"
      }'
```

### Принимать уведомления об оплате и сверять платежи

Pay-, Fail- и Check-уведомления сообщают о результате оплаты; сверка за период ловит то, что могло потеряться.

1. Укажи адреса уведомлений в личном кабинете. Проверяй подлинность каждого: HMAC-SHA256 от тела запроса с ключом API Secret, в base64, должен совпасть с заголовком Content-HMAC (или X-Content-HMAC).
2. На Check-уведомление (до списания) отвечай {"code":0}, чтобы принять платёж, или кодом 10–13, 20, чтобы отклонить (неверный заказ, сумма и т. д.). На Pay и Fail тоже отвечай {"code":0}, иначе CloudPayments будет повторять уведомление до 100 раз.
3. Сомневаешься в статусе — запроси транзакцию: POST /payments/get с TransactionId.
4. Раз в день сверяй операции за период: POST /v2/payments/list с CreatedDateGte, CreatedDateLte и PageNumber — 100 записей на страницу.

```python
import base64, hashlib, hmac

def is_valid(body: bytes, header_hmac: str, api_secret: str) -> bool:
    digest = hmac.new(api_secret.encode(), body, hashlib.sha256).digest()
    return hmac.compare_digest(base64.b64encode(digest).decode(), header_hmac)

# В обработчике: if not is_valid(request.body, request.headers["Content-HMAC"], API_SECRET): вернуть 403
# Затем обновить заказ по InvoiceId и ответить {"code": 0}
```

## Базовые URL

- Боевой: `https://api.cloudpayments.ru`

## Авторизация

Тип: Basic Auth

HTTP Basic Auth: логин — Public ID, пароль — API Secret. Оба значения есть в личном кабинете. Без заголовка авторизации или с неверными данными API возвращает HTTP 401 Unauthorized. API Secret нужно хранить в защищённом месте.

Параметры передаются методом POST в теле запроса: `application/x-www-form-urlencoded` («ключ=значение») или `application/json`. Ответ всегда JSON и содержит как минимум `Success` и `Message`.

```
{ "Success": false, "Message": "Invalid Amount value" }
```

## Методы

### POST /test — Тестовый метод

Проверка взаимодействия с API. Параметров нет, в ответ возвращается статус запроса.

Пример ответа:

```json
{"Success":true,"Message":"bd6353c3-0ed6-4a65-946f-083664bf8dbd"}
```

### POST /payments/cards/charge — Оплата по криптограмме (одностадийная)

Оплата по криптограмме платёжных данных, сформированной скриптом Checkout. Для двухстадийной схемы тот же набор параметров отправляется на `/payments/cards/auth`. Если нужна 3-D Secure аутентификация, в ответе будет `Success: false` и в `Model` — `AcsUrl`, `PaReq`, `TransactionId`.

Пример ответа (некорректный запрос):

Пример ответа (требуется 3-D Secure):

Пример ответа (транзакция принята, сокращён):

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `Amount` | body | Number | да | Сумма платежа, разделитель точка, не больше 2 знаков после точки; не меньше 0.01 |
| `Currency` | body | String | нет | Валюта: RUB/USD/EUR/GBP, по умолчанию RUB |
| `IpAddress` | body | String | да | IP-адрес плательщика |
| `CardCryptogramPacket` | body | String | да | Криптограмма платёжных данных |
| `Name` | body | String | нет | Имя держателя карты латиницей |
| `PaymentUrl` | body | String | нет | Адрес сайта, с которого вызывается скрипт checkout |
| `InvoiceId` | body | String | нет | Номер счёта или заказа |
| `Description` | body | String | нет | Описание оплаты в свободной форме |
| `CultureName` | body | String | нет | Язык уведомлений: ru-RU, en-US |
| `AccountId` | body | String | нет | Идентификатор пользователя; нужен для создания подписки и получения токена |
| `Email` | body | String | нет | E-mail для квитанции об оплате |
| `Payer` | body | Object | нет | Данные плательщика: FirstName, LastName, MiddleName, Birth, Street, Address, City, Country, Phone, Postcode |
| `JsonData` | body | Json | нет | Произвольные данные транзакции; инструкции для подписки или онлайн-чека оборачиваются в объект cloudpayments |
| `SaveCard` | body | bool | нет | Вернуть карточный токен после успешной оплаты (работает при включённой настройке «Сохранение токена карты» в ЛК) |
| `X-Request-ID` | header | String | нет | Уникальный ключ для идемпотентности |

Пример запроса:

```
{
    "Amount":10,
    "Currency":"RUB",
    "InvoiceId":"1234567",
    "IpAddress": "123.123.123.123",
    "Description":"Оплата товаров в example.com",
    "AccountId":"user_x",
    "Name":"CARDHOLDER NAME",
    "CardCryptogramPacket":"01492500008719030128SM...",
    "Payer":
      {
        "FirstName":"Тест",
        "LastName":"Тестов",
        "Phone":"+71234567890"
    }
}
```

Пример ответа:

```json
{"Success":false,"Message":"Amount is required"}
```

### POST /payments/cards/auth — Оплата по криптограмме (двухстадийная)

Те же параметры и ответы, что у `/payments/cards/charge`. Деньги блокируются и списываются только после вызова `/payments/confirm`.

### POST /payments/cards/post3ds — Завершение оплаты после 3-D Secure

Плательщика отправляют POST-формой на `AcsUrl` с параметрами `MD` (= `TransactionId`), `PaReq` и `TermUrl`. После аутентификации он возвращается на `TermUrl` с `MD` и `PaRes`, после чего вызывается этот метод. В ответ приходит информация об успешной или отклонённой транзакции.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `TransactionId` | body | Long | да | Значение параметра MD |
| `PaRes` | body | String | да | Значение одноимённого параметра |

### POST /payments/tokens/charge — Оплата по токену (рекарринг)

Оплата по токену, полученному при оплате по криптограмме или через Pay-уведомление. Для двухстадийной схемы — `/payments/tokens/auth`. Токен работает только на том терминале (publicId), где был получен.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `Amount` | body | Number | да | Сумма платежа, не больше 2 знаков после точки |
| `Currency` | body | String | нет | Валюта, по умолчанию RUB |
| `AccountId` | body | String | да | Идентификатор пользователя |
| `TrInitiatorCode` | body | Int | да | Инициатор списания: 0 — ТСП, 1 — держатель карты |
| `PaymentScheduled` | body | Int | нет | Оплата по расписанию: 0 — без расписания (по умолчанию), 1 — по расписанию |
| `Token` | body | String | да | Токен |
| `InvoiceId` | body | String | нет | Номер счёта или заказа |
| `Description` | body | String | нет | Назначение платежа |
| `IpAddress` | body | String | нет | IP-адрес плательщика |
| `Email` | body | String | нет | E-mail для квитанции |
| `Payer` | body | Object | нет | Данные плательщика |
| `JsonData` | body | Json | нет | Произвольные данные транзакции |

Пример запроса:

```
{
    "Amount":59,
    "Currency":"RUB",
    "InvoiceId":"1234567",
    "Description":"Оплата товаров в example.com",
    "AccountId":"user_x",
    "TrInitiatorCode": 0,
    "PaymentScheduled": 1,
    "Token":"success_1111a3e0-2428-48fb-a530-12815d90d0e8"
}
```

### POST /payments/tokens/auth — Оплата по токену (двухстадийная)

Те же параметры, что у `/payments/tokens/charge`; требует последующего подтверждения через `/payments/confirm`.

### POST /payments/confirm — Подтверждение оплаты

Подтверждение платежа, проведённого по двухстадийной схеме.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `TransactionId` | body | Long | да | Номер транзакции в системе |
| `Amount` | body | Number | да | Сумма подтверждения в валюте транзакции |
| `JsonData` | body | Json | нет | Данные транзакции, в том числе для онлайн-чека |

Пример запроса:

```
{"TransactionId":455,"Amount":65.98}
```

Пример ответа:

```json
{"Success":true,"Message":null}
```

### POST /payments/void — Отмена оплаты

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `TransactionId` | body | Long | да | Номер транзакции в системе |

Пример запроса:

```
{"TransactionId":455}
```

Пример ответа:

```json
{"Success":true,"Message":null}
```

### POST /payments/refund — Возврат денег

Возвраты по транзакциям старше года не проводятся.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `TransactionId` | body | Long | да | Номер транзакции оплаты |
| `Amount` | body | Number | да | Сумма возврата в валюте транзакции |
| `JsonData` | body | Json | нет | Данные транзакции, в том числе для онлайн-чека |

Пример запроса:

```
{"TransactionId":455, "Amount": 100}
```

Пример ответа:

```json
{
    "Model": {
        "TransactionId": 568
    },
    "Success": true,
    "Message": null
}
```

### POST /payments/get — Просмотр транзакции

Детализация транзакции по номеру.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `TransactionId` | body | Long | да | Номер транзакции |

Пример запроса:

```
{"TransactionId":897749645}
```

### POST /v2/payments/find — Проверка статуса платежа

Поиск платежа по номеру заказа. Если найдено несколько платежей, возвращается последняя операция. Новый метод ищет по всем операциям, включая возвраты и выплаты на карту; старый адрес — `/payments/find`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `InvoiceId` | body | String | да | Номер заказа |

Пример запроса:

```
{"InvoiceId":"123456789"}
```

Пример ответа:

```json
{"Success":false,"Message":"Not found"}
```

### POST /payments/list — Список транзакций за день

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `Date` | body | String | да | Дата создания операций |
| `TimeZone` | body | String | нет | Код временной зоны, по умолчанию UTC |

Пример запроса:

```
{"Date":"2014-08-09", "TimeZone": "MSK"}
```

### POST /v2/payments/list — Список транзакций за период

Результат сортируется по CreatedDate от старых к новым, 100 записей на страницу.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `CreatedDateGte` | body | Date | да | Начальная дата создания операций |
| `CreatedDateLte` | body | Date | да | Конечная дата создания операций |
| `PageNumber` | body | Number | да | Номер страницы, от 1 |
| `TimeZone` | body | String | нет | Код временной зоны, по умолчанию UTC |
| `Statuses` | body | String Array | нет | Статусы: Authorized, Completed, Cancelled, Declined; по умолчанию все |

Пример запроса:

```
{
    "PageNumber": 1,
    "CreatedDateGte":"2021-03-09T00:00:00+03:00",
    "CreatedDateLte":"2021-03-10T00:00:00+03:00",
    "TimeZone": "MSK",
    "Statuses": ["Authorized", "Completed", "Cancelled", "Declined"]
}
```

### POST /subscriptions/create — Создание подписки

Подписка на рекуррентные платежи по токену карты. В ответ возвращается идентификатор подписки.

Пример ответа (сокращён):

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `Token` | body | String | да | Токен карты, выданный после первого платежа |
| `AccountId` | body | String | да | Идентификатор пользователя |
| `Description` | body | String | да | Назначение платежа |
| `Email` | body | String | нет | E-mail плательщика |
| `Amount` | body | Number | да | Сумма платежа |
| `Currency` | body | String | да | Валюта: RUB/USD/EUR/GBP |
| `RequireConfirmation` | body | Bool | да | true — платежи по двухстадийной схеме |
| `StartDate` | body | DateTime | да | Дата и время первого платежа в UTC, в будущем |
| `Interval` | body | String | да | Интервал: Day, Week, Month |
| `Period` | body | Int | да | Период; вместе с интервалом: 1 Month — раз в месяц, 2 Week — раз в две недели |
| `MaxPeriods` | body | Int | нет | Максимальное количество платежей |
| `CustomerReceipt` | body | json | нет | Состав онлайн-чека |

Пример запроса:

```
{
   "token": "477BBA133C182267FE5F086924ABDC5DB71F77BFC27F01F2843F2CDC69D89F05",
   "accountId": "user_x",
   "description": "Ежемесячная подписка на сервис example.com",
   "email": "user@example.com",
   "amount": 399,
   "currency": "RUB",
   "requireConfirmation": false,
   "startDate": "2021-11-02T21:00:00",
   "interval": "Day",
   "period": 5
}
```

Пример ответа:

```json
{
    "Model": {
        "Id": "sc_221da6421dc44dbd2cc3464f6f083",
        "AccountId": "user_x",
        "Amount": 399,
        "Currency": "RUB",
        "Interval": "Day",
        "Period": 5
    },
    "Success": true,
    "Message": null
}
```

### POST /subscriptions/cancel — Отмена подписки

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `Id` | body | String | да | Идентификатор подписки |

Пример запроса:

```
{"Id":"sc_cc673fdc50b3577e60eee9081e440"}
```

Пример ответа:

```json
{"Success":true,"Message":null}
```

### POST /orders/create — Создание счёта со ссылкой на оплату

Формирует ссылку на оплату и при необходимости отправляет её плательщику по e-mail, SMS или Viber.

Пример ответа (сокращён):

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `Amount` | body | Number | да | Сумма платежа |
| `Currency` | body | String | нет | Валюта, по умолчанию RUB |
| `Description` | body | String | да | Назначение платежа |
| `Email` | body | String | нет | E-mail плательщика |
| `RequireConfirmation` | body | Bool | нет | true — двухстадийная схема |
| `SendEmail` | body | Bool | нет | Отправить письмо со ссылкой |
| `InvoiceId` | body | String | нет | Номер заказа |
| `AccountId` | body | String | нет | Идентификатор пользователя |
| `OfferUri` | body | String | нет | Ссылка на оферту |
| `Phone` | body | String | нет | Телефон плательщика |
| `SendSms` | body | Bool | нет | Отправить SMS со ссылкой |
| `SendViber` | body | Bool | нет | Отправить сообщение в Viber |
| `CultureName` | body | String | нет | Язык уведомлений |
| `SubscriptionBehavior` | body | String | нет | Платёж с подпиской: CreateWeekly, CreateMonthly |
| `SuccessRedirectUrl` | body | String | нет | Редирект при успешной оплате |
| `FailRedirectUrl` | body | String | нет | Редирект при неуспешной оплате |
| `JsonData` | body | Json | нет | Данные транзакции, в том числе для онлайн-чека |

Пример запроса:

```
{
    "Amount":10.0,
    "Currency":"RUB",
    "Description":"Оплата на сайте example.com",
    "Email":"client@test.local",
    "RequireConfirmation":true,
    "SendEmail":false
}
```

Пример ответа:

```json
{
    "Model": {
        "Id": "gASGZVgUN21hcpPF",
        "Number": 2130,
        "Amount": 10.0,
        "Currency": "RUB",
        "Url": "https://orders.cloudpayments.ru/d/gASGZVgUN21hcpPF"
    },
    "Success": true,
    "Message": null
}
```

## Нюансы

- `Success` в ответе показывает только успешность запроса, а не статус транзакции. Статус транзакции смотрят в поле `Model.Status` или в уведомлениях.
- Идемпотентность включается заголовком `X-Request-ID` с уникальным значением; результат хранится 1 час, новый запрос требует нового значения.
- Если в целочисленное поле передать дробное число, ошибки не будет: значение математически округлится.
- Токен работает только на том терминале (publicId), где был получен.
- Финальный статус оплаты по токену СБП приходит только в Pay- и Fail-уведомлениях, а не в ответе на запрос.
- Для ТСП с MCC 4814 обязателен телефон плательщика в `Payer.Phone` (только цифры, например `+71234567890`), иначе банки отклоняют операции.
- Pay, Fail, Recurrent, Cancel, Confirm, Refund-уведомления повторяются до 100 раз (интервалы 1, 2, 5, 10, 30 минут), если сервер магазина недоступен или ответил кодом, отличным от нуля; таймаут ответа — 30 секунд.
- Подлинность уведомлений проверяют по заголовкам `X-Content-HMAC` и `Content-HMAC`: HMAC-SHA256 от тела запроса (для GET — от строки параметров) в UTF-8, ключ — API Secret, результат в base64.
- Уведомления приходят с адресов 185.98.81.0/28, 87.251.91.160/27, 46.46.175.96/27, 46.46.168.160/27, 162.55.174.97/32, 91.216.178.243/32.
- Ответ на Check-уведомление: `{"code":0}` — принять платёж; коды 10, 11, 12, 13, 20 отклоняют его (неверный InvoiceId, AccountId, сумма, платёж не принят, просрочен).

## Ошибки

| Код | Описание |
|---|---|
| `401` | Нет заголовка аутентификации или неверные данные |
| `429` | Превышено число одновременных запросов |
| `5001` | Refer To Card Issuer — отказ эмитента проводить онлайн-операцию |
| `5005` | Do Not Honor — отказ эмитента без объяснения причин |
| `5006` | Error — отказ сети или неправильный CVV-код |
| `5012` | Invalid Transaction — карта не предназначена для онлайн-платежей |
| `5013` | Amount Error — слишком маленькая или слишком большая сумма |
| `5014` | Invalid Card Number — некорректный номер карты |
| `5030` | Format Error — неверно сформирована транзакция на стороне эквайера |
| `5034` | Suspected Fraud — подозрение на мошенничество |
| `5041` | Lost Card — карта потеряна |
| `5043` | Stolen Card — карта украдена |
| `5051` | Insufficient Funds — недостаточно средств |
| `5054` | Expired Card — карта просрочена или неверный срок действия |
| `5057` | Transaction Not Permitted — ограничение на карте |
| `5061` | Exceeds Approval Amount — превышена сумма по карте |
| `5065` | Exceed Withdrawal Frequency — превышен лимит операций |
| `5082` | Incorrect CVV — неверный CVV-код |
| `5091` | Timeout — эмитент недоступен |
| `5096` | System Error — ошибка банка-эквайера или сети |
| `5204` | Unable To Process — операция не может быть обработана |
| `5206` | Authentication failed — 3-D Secure авторизация не пройдена |
| `5207` | Authentication unavailable — 3-D Secure авторизация недоступна |

## Ограничения

- Не больше 150 000 полей в одном запросе.
- Таймаут ответа API — 5 минут.
- Одновременных запросов: до 5 для тестовых терминалов, до 30 для боевых; сверх лимита — HTTP 429.
- `Amount` не меньше 0.01.
- `/v2/payments/list` — 100 записей на страницу.

## Источники

- [API](https://developers.cloudpayments.ru/#api)
- [Идемпотентность API](https://developers.cloudpayments.ru/#idempotentnost-api)
- [Оплата по криптограмме](https://developers.cloudpayments.ru/#oplata-po-kriptogramme)
- [Оплата по токену](https://developers.cloudpayments.ru/#oplata-po-tokenu-rekarring)
- [Уведомления](https://developers.cloudpayments.ru/#uvedomleniya)
- [Проверка уведомлений](https://developers.cloudpayments.ru/#proverka-uvedomleniy)
- [Коды ошибок](https://developers.cloudpayments.ru/#kody-oshibok)

---

Если этого недостаточно — официальная документация: https://developers.cloudpayments.ru/#api
JSON: https://mcp-everything.ru/api/integrations/cloudpayments. MCP: https://mcp-everything.ru/mcp
