Счета
Создание, получение и удаление счетов на оплату в PS Wallet Pay API: createInvoice, getInvoices, deleteInvoice.
На этой странице
Счёт — запрос на оплату, который пользователь открывает по ссылке и оплачивает в PS Wallet. Сумма оплаты за вычетом комиссии зачисляется на баланс приложения, а на ваш сервер приходит вебхук invoice_paid.
Счёт можно выставить в монете (USDT, USDT-TRC20, TRX и т. д.) или в фиате (USD, RUB) — тогда пользователь выберет монету для оплаты сам. Коды монет и правила записи сумм — в разделе Монеты и суммы.
Статусы счёта
| Статус | Что значит |
|---|---|
active | Счёт ждёт оплаты. |
paid | Счёт оплачен, деньги зачислены на баланс приложения. |
expired | Истёк срок действия (expires_in), оплатить счёт больше нельзя. |
Удалённый через deleteInvoice счёт оплатить нельзя, и он пропадает из getInvoices.
createInvoice
Создать счёт на оплату. Только POST. Возвращает Invoice.
| Параметр | Тип | Описание |
|---|---|---|
currency_type | String | Необязательно. crypto (по умолчанию) или fiat. |
asset | String | Обязательно при currency_type=crypto. Монета счёта: USDT (любая сеть), USDT-TRC20, USDT-BEP20, USDT-ERC20, USDT-TON, XAUT, TRX, BNB, ETH, GRAM. |
fiat | String | Обязательно при currency_type=fiat. Валюта суммы: USD или RUB. |
accepted_assets | String | Необязательно, только для fiat. Монеты для оплаты через запятую, например USDT,TRX. В JSON можно передать и массив. По умолчанию — USDT,TRX,BNB,ETH,GRAM,RUB (из них — доступные сейчас). |
amount | String | Обязательно. Сумма в монете asset или в фиате fiat, например 125.50. |
description | String | Необязательно. Описание, которое увидит пользователь. До 1024 символов. |
hidden_message | String | Необязательно. Сообщение, которое пользователь увидит после оплаты. До 2048 символов. |
paid_btn_name | String | Необязательно. Кнопка на экране после оплаты: viewItem, openChannel, openBot или callback (см. ниже). |
paid_btn_url | String | Обязательно, если указан paid_btn_name. Ссылка кнопки, начинается с https:// или http://, до 512 символов. |
payload | String | Необязательно. Любые ваши данные (например, номер заказа), до 4 КБ. Вернутся в счёте и в вебхуке. |
allow_comments | Boolean | Необязательно. Разрешить пользователю оставить комментарий к оплате. По умолчанию true. |
allow_anonymous | Boolean | Необязательно. Разрешить оплатить анонимно: имя плательщика не будет видно в истории приложения. По умолчанию true. |
expires_in | Number | Необязательно. Время жизни счёта в секундах, от 1 до 2678400 (31 день). По умолчанию счёт бессрочный. |
Логические параметры принимают true/false, а также 1/0 — удобно для application/x-www-form-urlencoded.
Пример запроса
curl https://pay.pswallet.org/api/createInvoice \
-H "PSWallet-Pay-API-Token: $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"asset": "USDT",
"amount": "12.5",
"description": "Подписка на месяц",
"payload": "order-1042",
"expires_in": 3600
}'// Node.js 18+ (встроенный fetch)
const response = await fetch("https://pay.pswallet.org/api/createInvoice", {
method: "POST",
headers: {
"PSWallet-Pay-API-Token": process.env.PSWALLET_PAY_TOKEN,
"Content-Type": "application/json",
},
body: JSON.stringify({
asset: "USDT",
amount: "12.5",
description: "Подписка на месяц",
payload: "order-1042",
expires_in: 3600,
}),
});
const data = await response.json();
if (!data.ok) throw new Error(data.error.name);
const invoice = data.result;
// сохраните invoice.invoice_id рядом с заказом и отправьте ссылку пользователю
console.log(invoice.bot_invoice_url);import os
import requests
response = requests.post(
"https://pay.pswallet.org/api/createInvoice",
headers={"PSWallet-Pay-API-Token": os.environ["PSWALLET_PAY_TOKEN"]},
json={
"asset": "USDT",
"amount": "12.5",
"description": "Подписка на месяц",
"payload": "order-1042",
"expires_in": 3600,
},
timeout=15,
)
data = response.json()
if not data["ok"]:
raise RuntimeError(data["error"]["name"])
invoice = data["result"]
# сохраните invoice["invoice_id"] рядом с заказом и отправьте ссылку пользователю
print(invoice["bot_invoice_url"])Ответ:
{
"ok": true,
"result": {
"invoice_id": 528,
"hash": "IVq3Lm9TzR4wXkPa",
"currency_type": "crypto",
"asset": "USDT",
"amount": "12.5",
"bot_invoice_url": "https://t.me/pswallet?start=IVq3Lm9TzR4wXkPa",
"mini_app_invoice_url": "https://t.me/pswallet?startapp=IVq3Lm9TzR4wXkPa",
"web_app_invoice_url": "https://t.me/pswallet?startapp=IVq3Lm9TzR4wXkPa",
"pay_url": "https://t.me/pswallet?start=IVq3Lm9TzR4wXkPa",
"description": "Подписка на месяц",
"status": "active",
"created_at": "2026-10-28T15:51:21.000+00:00",
"allow_comments": true,
"allow_anonymous": true,
"expiration_date": "2026-10-28T16:51:21.000+00:00",
"payload": "order-1042",
"paid_anonymously": false
}
}Отправьте пользователю bot_invoice_url (счёт откроется в чате бота с кнопкой оплаты) или mini_app_invoice_url (сразу экран оплаты в мини-приложении).
Передавайте в payload номер заказа: он вернётся в вебхуке invoice_paid, и заказ будет легко найти без отдельной таблицы соответствий.
Счёт в долларах или рублях
Чтобы выставить счёт в фиате, передайте currency_type=fiat, валюту fiat и, если нужно, список монет accepted_assets:
{
"currency_type": "fiat",
"fiat": "USD",
"amount": "9.99",
"accepted_assets": "USDT,TRX",
"description": "Премиум на месяц"
}Пользователь выберет монету из разрешённых, а сумма пересчитается по курсу в момент оплаты. Подробнее — в разделе Монеты и суммы.
Если в accepted_assets есть монета, которая сейчас недоступна, вернётся ошибка PARAM_ACCEPTED_ASSETS_INVALID. Рубли (RUB) при оплате сейчас не учитываются, а список только из RUB тоже вернёт эту ошибку.
Кнопка после оплаты
После оплаты пользователь увидит экран с сообщением hidden_message (если задано) и кнопкой, которая ведёт на paid_btn_url:
paid_btn_name | Текст кнопки |
|---|---|
viewItem | «Открыть товар» |
openChannel | «Открыть канал» |
openBot | «Открыть бота» |
callback | «Вернуться» |
Ошибки createInvoice
Код ответа — 400, если не указан другой.
PARAM_CURRENCY_TYPE_INVALID—currency_typeнеcryptoи неfiat.PARAM_ASSET_REQUIRED,PARAM_ASSET_INVALID— не передана, неизвестна или сейчас недоступна монетаasset.PARAM_FIAT_REQUIRED,PARAM_FIAT_INVALID— не передана или неизвестна валютаfiat.PARAM_ACCEPTED_ASSETS_INVALID— неверный списокaccepted_assets.PARAM_AMOUNT_REQUIRED,PARAM_AMOUNT_INVALID— нет суммы, она не больше нуля или в ней больше знаков, чем у монеты.PARAM_DESCRIPTION_INVALID,PARAM_HIDDEN_MESSAGE_INVALID,PARAM_PAYLOAD_INVALID— текст длиннее допустимого.PARAM_PAID_BTN_NAME_INVALID,PARAM_PAID_BTN_URL_REQUIRED,PARAM_PAID_BTN_URL_INVALID— неверная кнопка после оплаты.PARAM_ALLOW_COMMENTS_INVALID,PARAM_ALLOW_ANONYMOUS_INVALID— не логическое значение.PARAM_EXPIRES_IN_INVALID—expires_inне целое число от 1 до 2678400.403 APP_FROZEN— приложение заморожено.
getInvoices
Список счетов приложения, сначала новые. Удалённые счета не возвращаются. Возвращает объект { "items": [Invoice, …] }.
| Параметр | Тип | Описание |
|---|---|---|
asset | String | Необязательно. Только счета в этой монете (по полю asset счёта, а не по монете оплаты). |
fiat | String | Необязательно. Только счета в этой фиатной валюте. |
invoice_ids | String | Необязательно. ID счетов через запятую (учитываются первые 1000). |
status | String | Необязательно. active, paid или expired. По умолчанию — все. |
offset | Number | Необязательно. Сколько счетов пропустить. По умолчанию 0. |
count | Number | Необязательно. Сколько вернуть, от 1 до 1000. По умолчанию 100. |
curl "https://pay.pswallet.org/api/getInvoices?status=paid&count=10" \
-H "PSWallet-Pay-API-Token: $TOKEN"Ответ:
{
"ok": true,
"result": {
"items": [
{
"invoice_id": 528,
"hash": "IVq3Lm9TzR4wXkPa",
"currency_type": "crypto",
"asset": "USDT",
"amount": "12.5",
"status": "paid",
"paid_asset": "USDT-TRC20",
"paid_amount": "12.5",
"paid_usd_rate": "1",
"fee_asset": "USDT-TRC20",
"fee_amount": 0.375,
"paid_at": "2026-10-28T15:51:22.000+00:00",
"paid_anonymously": false,
"payload": "order-1042"
}
]
}
}В примере показана часть полей. Полный список — в описании типа Invoice.
Ошибки (код 400): PARAM_ASSET_INVALID, PARAM_FIAT_INVALID, PARAM_INVOICE_IDS_INVALID, PARAM_STATUS_INVALID, PARAM_OFFSET_INVALID, PARAM_COUNT_INVALID.
deleteInvoice
Удалить счёт. Только POST. После удаления оплатить его нельзя, и он пропадает из getInvoices. Оплаченный счёт удалить нельзя.
| Параметр | Тип | Описание |
|---|---|---|
invoice_id | Number | Обязательно. ID счёта. |
Возвращает true.
curl https://pay.pswallet.org/api/deleteInvoice \
-H "PSWallet-Pay-API-Token: $TOKEN" \
-H "Content-Type: application/json" \
-d '{"invoice_id": 528}'Ошибки (код 400, если не указан другой):
PARAM_INVOICE_ID_REQUIRED,PARAM_INVOICE_ID_INVALID— не передан или неверныйinvoice_id.404 INVOICE_NOT_FOUND— счёт не найден или уже удалён.INVOICE_PAID— счёт уже оплачен.