Авторизация
Базовый URL: https://api.crystal-pay.net.
Все запросы требуют заголовок:
Crypto-Pay-API-Token:
Токен выдаётся в боте после создания мерчанта («Merchant API → Регистрация»).
Создание счета
Эндпоинт
POST /api/v1/createInvoice
Параметры
| Параметр | Тип | Описание |
|---|---|---|
amount |
число | Сумма (крипта) |
asset |
строка | USDT, TON, TRX, APT |
payload |
строка | ID заказа магазина (опционально) |
Пример ответа
{
"ok": true,
"result": {
"invoice_id": 123,
"pay_url": "https://t.me/Bot?start=inv_hash"
}
}
Python (requests)
import requests
r = requests.post("https://api.crystal-pay.net/api/v1/createInvoice",
headers={"Crypto-Pay-API-Token": "TOKEN"},
json={"asset": "USDT",
"amount": 10.5,
"payload": "order_1"})
print(r.json())
PHP (cURL)
$ch = curl_init("https://api.crystal-pay.net/api/v1/createInvoice");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Crypto-Pay-API-Token: TOKEN",
"Content-Type: application/json",
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
"asset" => "USDT",
"amount" => 10.5,
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
echo curl_exec($ch);
Webhooks (уведомления об оплате)
При успешной оплате сервер отправляет POST на webhook-url магазина:
{
"invoice_id": 123,
"status": "paid",
"amount": 10.5,
"asset": "USDT",
"payload": "order_1"
}
Безопасность: проверка подписи
Критично. Всегда проверяйте подпись заголовка X-Signature:
HMAC-SHA256 от тела запроса с вашим API-токеном. Это гарантирует,
что запрос пришёл именно от Crystal Pay.
import hashlib, hmac, json
# raw_body — сырое тело запроса (bytes)
# signature — значение заголовка X-Signature
expected = hmac.new(
TOKEN.encode(), raw_body, hashlib.sha256
).hexdigest()
if not hmac.compare_digest(expected, signature):
raise PermissionError("Invalid signature")
data = json.loads(raw_body)
# -> обрабатываем оплату