PS Wallet Справка
RUEN
Открыть кошелёк

Счета

Создание, получение и удаление счетов на оплату в 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_typeStringНеобязательно. crypto (по умолчанию) или fiat.
assetStringОбязательно при currency_type=crypto. Монета счёта: USDT (любая сеть), USDT-TRC20, USDT-BEP20, USDT-ERC20, USDT-TON, XAUT, TRX, BNB, ETH, GRAM.
fiatStringОбязательно при currency_type=fiat. Валюта суммы: USD или RUB.
accepted_assetsStringНеобязательно, только для fiat. Монеты для оплаты через запятую, например USDT,TRX. В JSON можно передать и массив. По умолчанию — USDT,TRX,BNB,ETH,GRAM,RUB (из них — доступные сейчас).
amountStringОбязательно. Сумма в монете asset или в фиате fiat, например 125.50.
descriptionStringНеобязательно. Описание, которое увидит пользователь. До 1024 символов.
hidden_messageStringНеобязательно. Сообщение, которое пользователь увидит после оплаты. До 2048 символов.
paid_btn_nameStringНеобязательно. Кнопка на экране после оплаты: viewItem, openChannel, openBot или callback (см. ниже).
paid_btn_urlStringОбязательно, если указан paid_btn_name. Ссылка кнопки, начинается с https:// или http://, до 512 символов.
payloadStringНеобязательно. Любые ваши данные (например, номер заказа), до 4 КБ. Вернутся в счёте и в вебхуке.
allow_commentsBooleanНеобязательно. Разрешить пользователю оставить комментарий к оплате. По умолчанию true.
allow_anonymousBooleanНеобязательно. Разрешить оплатить анонимно: имя плательщика не будет видно в истории приложения. По умолчанию true.
expires_inNumberНеобязательно. Время жизни счёта в секундах, от 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"])

Ответ:

json
{
  "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:

json
{
  "currency_type": "fiat",
  "fiat": "USD",
  "amount": "9.99",
  "accepted_assets": "USDT,TRX",
  "description": "Премиум на месяц"
}

Пользователь выберет монету из разрешённых, а сумма пересчитается по курсу в момент оплаты. Подробнее — в разделе Монеты и суммы.

i

Если в 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, …] }.

ПараметрТипОписание
assetStringНеобязательно. Только счета в этой монете (по полю asset счёта, а не по монете оплаты).
fiatStringНеобязательно. Только счета в этой фиатной валюте.
invoice_idsStringНеобязательно. ID счетов через запятую (учитываются первые 1000).
statusStringНеобязательно. active, paid или expired. По умолчанию — все.
offsetNumberНеобязательно. Сколько счетов пропустить. По умолчанию 0.
countNumberНеобязательно. Сколько вернуть, от 1 до 1000. По умолчанию 100.
cURL
curl "https://pay.pswallet.org/api/getInvoices?status=paid&count=10" \
  -H "PSWallet-Pay-API-Token: $TOKEN"

Ответ:

json
{
  "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_idNumberОбязательно. ID счёта.

Возвращает true.

cURL
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 — счёт уже оплачен.
Обновлено 9 ноября 2026 г.