Эндпоинты API v3 и базовые операции
Ниже — основные операции над ресурсом payments. Базовый URL: https api yookassa ru v3 payments.
| Метод |
Путь |
Назначение |
| POST |
/v3/payments |
Создать платеж |
| GET |
/v3/payments/{payment_id} |
Получить платеж по идентификатору |
| POST |
/v3/payments/{payment_id}/capture |
Подтвердить (списать) платеж, если при создании capture=false |
| POST |
/v3/payments/{payment_id}/cancel |
Отменить платеж до списания |
| GET |
/v3/payments |
Список платежей с фильтрами (по дате, статусу и т. п.) |
Замечания:
- Аутентификация — HTTP Basic с вашим идентификатором магазина и секретным ключом. Храните ключи только на сервере.
- Идемпотентность — используйте заголовок Idempotence-Key для всех операций, которые могут быть повторно отправлены клиентом или ретраями.
Быстрый старт: создать платеж (API v3)
Создание платежа — это HTTP POST к /v3/payments. Минимально указываются amount, confirmation и способ оплаты. В большинстве сценариев вы задаете confirmation.type=redirect для перенаправления клиента и capture=true для авто-списания после успешной аутентификации.
Пример тела запроса (карта, редирект):
POST /v3/payments
Idempotence-Key: 8b95c3e1-...-4a67
Content-Type: application/json
{
"amount": { "value": "1490.00", "currency": "RUB" },
"capture": true,
"confirmation": {
"type": "redirect",
"return_url": "https://example.com/return"
},
"payment_method_data": { "type": "bank_card" },
"description": "Заказ №72",
"metadata": { "order_id": "72" },
"receipt": {
"customer": { "email": "[email protected]" },
"items": [
{ "description": "Подписка", "quantity": "1.00", "amount": { "value": "1490.00", "currency": "RUB" }, "vat_code": 1 }
]
}
}
В ответ вы получите объект платежа с полем confirmation.confirmation_url. Направьте пользователя по этой ссылке для завершения шага банка/3‑D Secure. После успешной авторизации платеж перейдет в статус waiting_for_capture (если capture=false) или сразу succeeded (если capture=true).
Советы по созданию:
- Для СБП используйте payment_method_data.type="sbp"; для других способов — соответствующий type.
- Значение metadata помогает связать платеж с заказом в вашей системе.
- Чек (receipt) добавляйте при необходимости фискализации.
Подтверждение платежа: клиентское и серверное
Слово «подтверждение» в YooKassa встречается в двух смыслах:
Клиентское подтверждение (3‑D Secure, SberPay и т. д.) — происходит автоматически после редиректа по confirmation_url. Это часть пути клиента. Вы управляете только параметрами confirmation при создании платежа.
Серверное подтверждение списания (capture) — ваш явный вызов POST /v3/payments/{payment_id}/capture, если при создании capture=false (предавторизация). Этот шаг списывает средства и завершает платеж.
Пример capture:
POST /v3/payments/2f9ab4d5-.../capture
Idempotence-Key: 3f2e...
Content-Type: application/json
{
"amount": { "value": "1490.00", "currency": "RUB" },
"transfers": [
{ "account_id": "partner_1", "amount": { "value": "200.00", "currency": "RUB" } }
]
}
Если вы решили не списывать средства, отмените платеж:
POST /v3/payments/{payment_id}/cancel
Когда использовать capture=false:
- резервирование на складе и финальная проверка перед отгрузкой;
- платежи с переменной конечной суммой (добавление доставки, модификации заказа);
- антифрод‑проверки.
Статусы платежей и жизненный цикл
Платеж проходит несколько стадий. Ниже — краткий обзор. Детально статусы разъяснены на странице Статусы платежей.
| Статус |
Когда возникает |
Что делать вам |
| pending |
Платеж создан, клиент еще не подтвердил |
Ожидать, держать заказ в состоянии «ожидание оплаты» |
| waiting_for_capture |
Клиент подтвердил, средства предавторизованы (если capture=false) |
Вызвать capture или cancel в течение срока жизни платежа |
| succeeded |
Средства списаны |
Отдавать товар/услугу, подтверждать заказ |
| canceled |
Платеж отменен (вами или системой/банком) |
Сообщить клиенту, предложить повторить оплату |
Получить текущий статус можно запросом:
GET /v3/payments/{payment_id}
Списки платежей и фильтры помогут вам строить отчеты и дашборды:
GET /v3/payments?created_at.gte=2025-01-01T00:00:00Z&status=succeeded&limit=50
Webhooks YooKassa Payments
Чтобы не опрашивать API по таймеру, подписывайтесь на webhook‑уведомления по ключевым событиям. Типичные события:
- payment.waiting_for_capture
- payment.succeeded
- payment.canceled
Сценарии обработки:
- При payment.waiting_for_capture создавайте резервацию заказа и запускайте бек‑процессы проверки.
- При payment.succeeded доставляйте цифровой товар, подтверждайте заказ, отправляйте чек клиенту.
- При payment.canceled освобождайте резерв, показывайте пользователю возможность переоплаты.
Рекомендации по безопасности вебхуков:
- Проверяйте подпись уведомления из заголовков (сравнивайте вычисленную подпись по телу запроса и вашему секретному ключу).
- Обрабатывайте уведомления идемпотентно (по payment_id и event_id), чтобы повторные доставки не приводили к дублям.
- Возвращайте 2xx при успешной обработке, иначе YooKassa может повторно отправить уведомление.
Если ваш сервер за балансерами/фаерволами, добавьте доверенные домены в список разрешенных: см. Домены и зеркала.
Ошибки и коды ответов
Ошибки делятся на клиентские (4xx) и серверные (5xx). Ниже — ориентиры и что проверять.
- 400 Bad Request — некорректный запрос. Проверьте обязательные поля (amount, confirmation.type и т. д.), формат суммы (строка с двумя знаками после запятой), валидность JSON.
- 401 Unauthorized — неверные учетные данные. Обновите Basic‑авторизацию, убедитесь, что используете рабочий ключ из ЛК.
- 403 Forbidden — операция не разрешена магазину или способ отключен. Проверьте подключенные методы оплаты в ЛК.
- 404 Not Found — неверный payment_id или ресурс не существует.
- 409 Conflict — нарушение идемпотентности или конфликт состояния (например, повторный capture). Проверяйте текущий статус перед операцией.
- 429 Too Many Requests — снизьте частоту запросов, реализуйте экспоненциальный бэкофф.
- 500/502/504 — временные проблемы. Ретраи с идемпотентностью.
Типовая структура ошибки в ответе содержит код, сообщение и, возможно, поле parameter для указания ошибочного поля. Логируйте целиком тело ответа и заголовки корреляции, чтобы быстрее находить проблемы.
Подробнее о причинах отклонений и что делать бизнесу — в разделе Безопасность платежей.
Безопасность и лучшие практики
- Идемпотентность везде, где возможны повторы: Idempotence-Key на создание, capture, cancel.
- Не храните и не проксируйте карточные данные через ваш бэкенд. Используйте confirmation и метод оплаты, соответствующие требованиям PCI DSS.
- Валидируйте суммы на сервере: сверяйте сумму из платежа, заказа и чеков.
- Используйте webhooks как «источник истины» для финализации заказа.
- Тайминги: не блокируйте UI в ожидании статуса. Показывайте «мы обрабатываем» и дождитесь webhook или результат запроса.
- Логи и трассировка: сохраняйте payment_id, idempotence key, корреляционные идентификаторы.
- Переподключение и актуализация методов: если вы расширяете список способов оплаты (например, СБП, кошельки, платежные ссылки), смотрите Ссылки, MY и счета и фронтовые сценарии Оплата на сайтах.
FAQ и советы по интеграции
- Как понять, что клиент завершил оплату? — Отслеживайте webhooks и проверяйте GET /payments/{id}. Не полагайтесь только на возврат на return_url.
- Нужно ли всегда делать capture? — Нет. Если capture=true при создании, списание произойдет автоматически. capture=false — для предавторизации и ручного списания.
- Сколько живет предавторизация? — Зависит от способа оплаты и банка. Не откладывайте capture надолго; автоматическая отмена приведет к статусу canceled.
- Как делать частичный возврат? — Возвраты работают через отдельный ресурс. См. подробности: Справка по возвратам.
- Как увидеть платежи в ЛК? — Проверьте раздел «Платежи» в личном кабинете. См. Личный кабинет — возможности и вход: Вход в личный кабинет. Если есть сложности с доступом — Проблемы со входом.
- Где пользователю проверить оплату? — Дайте ссылку на «Мои платежи», подробнее: My payments.
Полезные ссылки и что дальше
Заключение и CTA
Интеграция с https://api.yookassa.ru/v3/payments дает вам гибкий контроль над приемом оплат: от простых редирект‑сценариев до предавторизации и распределения переводов. Стройте логику вокруг статусов и webhook‑уведомлений, используйте идемпотентность и не забывайте о безопасности — и ваш процессинг будет стабильным и прогнозируемым.
Готовы подключиться или расширить текущую интеграцию? Войдите в ЛК: Вход в личный кабинет и изучите инструменты: Личный кабинет — возможности. Если вы только планируете разработку — начните с API v3: обзор и вернитесь к этому руководству для реализации /payments.