API Documentation v2.1

Документация S1qwyPay API

Полное руководство по интеграции платежной системы. REST API для приема платежей через СБП, банковские карты, криптовалюты и Telegram Stars с фиксацией способа оплаты.

Base URL: https://pay.s1qwy.ru
Обновлено: 26 января 2026

Введение

S1qwyPay API — это современный RESTful API для приема платежей. Все запросы и ответы используют формат JSON. API поддерживает множество способов оплаты и автоматически обрабатывает платежи в реальном времени. Добавлена возможность фиксации способа оплаты при создании платежа.

Важно
Все запросы должны отправляться по HTTPS. HTTP-запросы будут отклонены. Время жизни платежа — 10 минут. При фиксации способа оплаты пользователь сразу перейдет на оплату без выбора метода.
6 способов оплаты
СБП, банковские карты, CryptoBot, xRocket, TON и Telegram Stars
Защита платежей
Автоматическая защита от дублирования и мошенничества
Электронные чеки
Автоматическая генерация чеков с НДС 3%
Гибкие комиссии
Прогрессивная шкала от 3% до 10% в зависимости от оборота
Фиксация способа
Возможность зафиксировать метод оплаты при создании

Аутентификация

Для работы с API необходим API-ключ. Передавайте его в заголовке X-API-KEY или в query-параметре api_key. Рекомендуется использовать заголовок для большей безопасности.

Безопасность
Никогда не передавайте API-ключ в клиентском коде (JavaScript на фронтенде). Используйте его только на сервере.

Формат API-ключа

Format
sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Пример запроса

cURL
curl -X POST https://pay.s1qwy.ru/create_payment \
  -H "Content-Type: application/json" \
  -H "X-API-KEY: sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -d '{"amount": 100, "description": "Оплата заказа"}'
Получение API-ключа
Для получения API-ключа свяжитесь с поддержкой: @Super_SupportBot

Создание платежа

POST

/create_payment

Создает новый платеж и возвращает ссылку для оплаты. При указании payment_method способ оплаты будет зафиксирован и пользователь сразу перейдет на оплату без выбора.

POST https://pay.s1qwy.ru/create_payment

Заголовки запроса

Заголовок Тип Описание
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
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 с фиксацией способа
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"
  }'
Python
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']}")
JavaScript
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);
}

Успешный ответ

200 OK
JSON Response
{
  "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, пользователь сразу увидит инструкцию для этого способа оплаты без возможности выбрать другой. Требуется согласие с правилами перед оплатой.

Проверка статуса

POST

/check_payment

Проверяет текущий статус платежа. Не требует аутентификации по API-ключу. Кешируется на 30 секунд для оплаченных платежей.

POST https://pay.s1qwy.ru/check_payment

Параметры запроса

Параметр Тип Описание
payment_idОбязательно string UUID платежа для проверки

Пример запроса

Python
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 Платеж отменен

Примеры ответов

Ожидание оплаты
JSON
{
  "success": true,
  "status": "pending",
  "time_left": 487
}
Платеж оплачен
JSON
{
  "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"
}
Рекомендация
Проверяйте статус платежа не чаще 1 раза в 3 секунды. Лимит: 120 запросов в минуту.

Отмена платежа

POST

/cancel_payment

Отменяет платеж, если он еще не был оплачен. Не требует аутентификации. После отмены платеж нельзя восстановить.

POST https://pay.s1qwy.ru/cancel_payment

Параметры запроса

Параметр Тип Описание
payment_idОбязательно string UUID платежа для отмены

Пример запроса

Python
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("Не удалось отменить платеж")

Ответ

Успешная отмена
JSON
{
  "success": true
}
Ограничения
Нельзя отменить платеж со статусом paid, expired или canceled. В этих случаях вернется {"success": false}.

Информация о комиссии

POST

/get_commission_rate

Возвращает текущую ставку комиссии для вашего API-ключа и оборот за последние 7 дней. Комиссия автоматически уменьшается при увеличении оборота.

POST https://pay.s1qwy.ru/get_commission_rate

Шкала комиссий

Оборот за 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% от платежа

Пример запроса

Python
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} ₽")

Ответ

JSON
{
  "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 Внутренняя ошибка сервера

Примеры ошибок

401 — Нет API-ключа
JSON
{
  "success": false,
  "error": "Valid API key required"
}
400 — Неверная сумма
JSON
{
  "success": false,
  "error": "Amount must be 10-1000000 RUB"
}
400 — Отключенный метод оплаты
JSON
{
  "success": false,
  "error": "Payment method 'stars' is disabled"
}
429 — Слишком много запросов
JSON
{
  "success": false,
  "error": "Too many requests, please slow down",
  "code": "rate_limited"
}
Обработка ошибок
Всегда проверяйте поле success в ответе. При success: false не пытайтесь обрабатывать другие поля.

Поддержка

Если у вас возникли вопросы по интеграции или работе API, наша техническая поддержка готова помочь 24/7.

Telegram бот
Время работы
24 часа / 7 дней
Среднее время ответа
до 15 минут
Готовы начать?
Напишите в поддержку для получения API-ключа и начните принимать платежи уже сегодня!