# Подтверждение платежа

> Подтверждайте токен и сеть для инвойса с ценой в фиате или в токене прямо из своего интерфейса оплаты и показывайте вернувшийся адрес для зачисления.

`POST /v1/invoices/:invoice_id/confirm-payment`

:::endpoint
POST /v1/invoices/:invoice_id/confirm-payment
:::

**API-ключ:** `Payment`

Подтверждает стейблкоин и сеть для инвойса, пока он в статусе `awaiting_client`. Вызов назначает адрес для зачисления и переводит инвойс в `awaiting_payment` — и для инвойса с ценой в фиате, и для инвойса с ценой в токене. У фиатного инвойса в этот же момент фиксируется курс. Если цена уже указана в токене, фиксировать нечего: токен, который вы подтверждаете, должен совпасть с запрошенным при создании, а сеть — только если её тогда же закрепили.

Используйте, когда делаете собственный интерфейс оплаты и принимаете выбор токена на своём сервере. Интерфейсы оплаты, которые Paymos показывает сам, — платёжная страница, куда ведёт `payment_url`, встраивание в iframe, [Low-Code SDK](/ru/docs/widget-sdk.md) и бот Paymos, которого вместо неё открывает `payment_url` проекта «Telegram-бот», — подтверждают выбор сами, поэтому вызывать для них этот эндпоинт не нужно. Канал проекта на этот вызов не влияет: подтвердить выбор на своём сервере можно и в проекте «Telegram-бот» — тогда плательщик по ссылке сразу увидит адрес для зачисления, без шага выбора.

Речь именно об эндпоинте, а не о готовой странице под вашим брендом. Он позволяет собрать оплату у себя и на своём домене, но ничего не меняет на страницах, которые показывает Paymos: там при любой теме и в любом режиме встраивания остаётся подпись «Secured by Paymos», а свой домен для платёжной страницы Paymos не подключает.

## Тело запроса

| Параметр | Тип | Обязателен | Описание |
|----------|-----|------------|----------|
| `currency` | string | Да | Стейблкоин, которым клиент решил платить (например, `USDT`, `USDC`). Должен быть включён в проекте инвойса |
| `network` | string | Да | Сеть, в которой клиент решил платить (например, `TRC20`, `BASE`) — должна быть сетью, где этот токен включён. Выключенная на вкладке «Валюты» проекта сеть не пройдёт: API ответит `400 field_invalid_enum` по полю `network` |

```json
{
  "currency": "USDT",
  "network": "TRC20"
}
```

## Ответ (200 OK)

Возвращает инвойс целиком с заполненной секцией `payment` — выбранные `currency` / `network`, назначенный адрес `address`, зафиксированный у фиатного инвойса `exchange_rate` и ожидаемую сумму `expected`. Поскольку вызов аутентифицирован ключом мерчанта, в ответе также есть поля мерчанта `fee` и `net`. Структура — как у [Получения инвойса](/ru/docs/invoices/get.md).

## Ошибки

См. [Коды ошибок](/ru/docs/errors/codes.md) — полный каталог. URI в поле `type` каждой ошибки ведёт сразу на нужную строку. Подтверждение чужого инвойса возвращает `404` — как и инвойса из архивного или приостановленного проекта: ключ подтверждает платежи только в активных проектах. Инвойс в `expired` или `cancelled` — `410`; любой другой статус после `awaiting_client` — `409`, включая терминальные `paid`, `paid_over` и `underpaid`.
