Документация S1qwyPay API
Полное руководство по интеграции платежной системы. REST API для приема платежей через СБП, банковские карты, криптовалюты и Telegram Stars с фиксацией способа оплаты.
https://pay.s1qwy.ru
Введение
S1qwyPay API — это современный RESTful API для приема платежей. Все запросы и ответы используют формат JSON. API поддерживает множество способов оплаты и автоматически обрабатывает платежи в реальном времени. Добавлена возможность фиксации способа оплаты при создании платежа.
Аутентификация
Для работы с API необходим API-ключ. Передавайте его в заголовке X-API-KEY или в query-параметре api_key. Рекомендуется использовать заголовок для большей безопасности.
Формат API-ключа
sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Пример запроса
curl -X POST https://pay.s1qwy.ru/create_payment \
-H "Content-Type: application/json" \
-H "X-API-KEY: sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-d '{"amount": 100, "description": "Оплата заказа"}'
Создание платежа
/create_payment
Создает новый платеж и возвращает ссылку для оплаты. При указании payment_method способ оплаты будет зафиксирован и пользователь сразу перейдет на оплату без выбора.
Заголовки запроса
| Заголовок | Тип | Описание |
|---|---|---|
| X-API-KEYОбязательно | string | Ваш API-ключ для аутентификации |
| Content-TypeОбязательно | string | Должен быть application/json |
Параметры запроса (JSON body)
| Параметр | Тип | Описание |
|---|---|---|
| amountОбязательно | number | Сумма платежа в рублях. Минимум 10, максимум 1 000 000 |
| descriptionОбязательно | string | Описание платежа (отображается пользователю). Максимум 500 символов |
| payment_methodОпционально | string | Фиксированный способ оплаты. Допустимые значения: sbp, card, cryptobot, xrocket, ton, stars. Если указан, метод будет зафиксирован и пользователь не сможет его изменить |
Примеры запроса
curl -X POST https://pay.s1qwy.ru/create_payment \
-H "Content-Type: application/json" \
-H "X-API-KEY: sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-d '{
"amount": 250,
"description": "Подписка Premium на 1 месяц"
}'
curl -X POST https://pay.s1qwy.ru/create_payment \
-H "Content-Type: application/json" \
-H "X-API-KEY: sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-d '{
"amount": 250,
"description": "Подписка Premium на 1 месяц",
"payment_method": "sbp"
}'
import requests
response = requests.post(
"https://pay.s1qwy.ru/create_payment",
headers={
"Content-Type": "application/json",
"X-API-KEY": "sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
json={
"amount": 250,
"description": "Подписка Premium на 1 месяц",
"payment_method": "card"
}
)
data = response.json()
if data["success"]:
print(f"Ссылка для оплаты: {data['payment_url']}")
else:
print(f"Ошибка: {data['error']}")
const response = await fetch('https://pay.s1qwy.ru/create_payment', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-KEY': 'sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
},
body: JSON.stringify({
amount: 250,
description: 'Подписка Premium на 1 месяц',
payment_method: 'ton'
})
});
const data = await response.json();
if (data.success) {
console.log('Ссылка для оплаты:', data.payment_url);
} else {
console.error('Ошибка:', data.error);
}
Успешный ответ
{
"success": true,
"payment_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"payment_url": "https://pay.s1qwy.ru/payment?payment_id=a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"payment_method": "sbp",
"expires_at": 1736956234
}
Описание полей ответа
| Поле | Тип | Описание |
|---|---|---|
| success | boolean | Статус выполнения запроса |
| payment_id | string | Уникальный идентификатор платежа (UUID v4) |
| payment_url | string | Ссылка на страницу оплаты для перенаправления пользователя |
| payment_method | string|null | Выбранный/фиксированный метод оплаты. Null если не указан |
| expires_at | number | Unix timestamp истечения срока платежа (10 минут с момента создания) |
payment_method, пользователь сразу увидит инструкцию для этого способа оплаты без возможности выбрать другой. Требуется согласие с правилами перед оплатой.Проверка статуса
/check_payment
Проверяет текущий статус платежа. Не требует аутентификации по API-ключу. Кешируется на 30 секунд для оплаченных платежей.
Параметры запроса
| Параметр | Тип | Описание |
|---|---|---|
| payment_idОбязательно | string | UUID платежа для проверки |
Пример запроса
import requests
import time
def wait_for_payment(payment_id, timeout=600):
url = "https://pay.s1qwy.ru/check_payment"
start_time = time.time()
while time.time() - start_time < timeout:
response = requests.post(url, json={"payment_id": payment_id})
data = response.json()
if not data["success"]:
return {"status": "error", "message": data.get("error")}
status = data["status"]
if status == "paid":
return {
"status": "paid",
"receipt_link": data.get("receipt_link"),
"paid_at": data.get("paid_at")
}
elif status in ["expired", "canceled"]:
return {"status": status}
time.sleep(3)
return {"status": "timeout"}
result = wait_for_payment("a1b2c3d4-e5f6-7890-abcd-ef1234567890")
print(result)
Возможные статусы
| Статус | Описание | Дополнительные поля |
|---|---|---|
| pending | Платеж ожидает оплаты | time_left — секунд до истечения |
| paid | Платеж успешно оплачен | paid_at, receipt_link |
| expired | Срок платежа истек (10 минут) | — |
| canceled | Платеж отменен | — |
Примеры ответов
{
"success": true,
"status": "pending",
"time_left": 487
}
{
"success": true,
"status": "paid",
"paid_at": "2026-01-23 14:32:18",
"receipt_link": "https://pay.s1qwy.ru/receipt?payment_id=a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
Отмена платежа
/cancel_payment
Отменяет платеж, если он еще не был оплачен. Не требует аутентификации. После отмены платеж нельзя восстановить.
Параметры запроса
| Параметр | Тип | Описание |
|---|---|---|
| payment_idОбязательно | string | UUID платежа для отмены |
Пример запроса
import requests
response = requests.post(
"https://pay.s1qwy.ru/cancel_payment",
json={"payment_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"}
)
data = response.json()
if data["success"]:
print("Платеж успешно отменен")
else:
print("Не удалось отменить платеж")
Ответ
{
"success": true
}
paid, expired или canceled. В этих случаях вернется {"success": false}.Информация о комиссии
/get_commission_rate
Возвращает текущую ставку комиссии для вашего API-ключа и оборот за последние 7 дней. Комиссия автоматически уменьшается при увеличении оборота.
Шкала комиссий
| Оборот за 7 дней | Комиссия | Вы получаете |
|---|---|---|
| до 750 ₽ | 10% | 90% от платежа |
| 751 — 1 000 ₽ | 7% | 93% от платежа |
| 1 001 — 2 500 ₽ | 5% | 95% от платежа |
| 2 501 — 5 000 ₽ | 4% | 96% от платежа |
| более 5 000 ₽ | 3% | 97% от платежа |
Пример запроса
import requests
response = requests.post(
"https://pay.s1qwy.ru/get_commission_rate",
headers={"X-API-KEY": "sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
)
data = response.json()
if data["success"]:
print(f"Комиссия: {data['commission_percent']}%")
print(f"Оборот за 7 дней: {data['weekly_turnover']:.2f} ₽")
Ответ
{
"success": true,
"commission_rate": 0.05,
"commission_percent": 5,
"weekly_turnover": 1834.50
}
Коды ошибок
При ошибке API возвращает JSON с полем success: false и описанием ошибки в поле error.
HTTP статус коды
| Код | Статус | Описание |
|---|---|---|
| 200 | OK | Запрос выполнен успешно |
| 400 | Bad Request | Неверные параметры запроса, отсутствует JSON или обязательное поле |
| 401 | Unauthorized | API-ключ отсутствует или имеет неверный формат |
| 403 | Forbidden | API-ключ недействителен или деактивирован |
| 404 | Not Found | Платеж с указанным ID не найден |
| 429 | Too Many Requests | Превышен лимит запросов (rate limit) |
| 500 | Server Error | Внутренняя ошибка сервера |
Примеры ошибок
{
"success": false,
"error": "Valid API key required"
}
{
"success": false,
"error": "Amount must be 10-1000000 RUB"
}
{
"success": false,
"error": "Payment method 'stars' is disabled"
}
{
"success": false,
"error": "Too many requests, please slow down",
"code": "rate_limited"
}
success в ответе. При success: false не пытайтесь обрабатывать другие поля.Поддержка
Если у вас возникли вопросы по интеграции или работе API, наша техническая поддержка готова помочь 24/7.