К содержанию

Разработчикам

Счёт создаётся одним запросом к REST API, а о каждом платеже и выплате ваш сервер узнаёт из подписанного вебхука.

Подключение за три шага

  • В кабинете откройте магазин и выпустите ключ API в разделе «API». Для счетов хватит доступа «Только счета», полный нужен для выплат. Ключ покажут один раз, храните его на сервере.
  • Укажите адрес вебхука в разделе «Вебхук» и сохраните ключ подписи.
  • Выставьте счёт и отправьте покупателя по ссылке pay_url из ответа.

Счёт одним запросом

curl
curl -X POST https://<домен>/api/v1/invoices \
  -H "Authorization: Bearer cpk_…" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-1042" \
  -d '{"currency": "USD", "amount": "49.90", "reference": "order-1042"}'

Если запрос повторится с тем же Idempotency-Key, второго счёта не будет. Суммы передаются строками, время в UTC.

События

  • payment.seen, payment.detected, payment.confirmed, payment.orphaned: платёж замечен, найден в блоке, зачислен, откатился
  • invoice.paid, invoice.partially_paid, invoice.expired, invoice.cancelled: состояние счёта
  • payout.broadcast, payout.confirmed, payout.failed: выплата отправлена, подтверждена, не удалась

Событие принято, если ваш сервер ответил кодом 2xx за 10 секунд. Иначе CoinsPay повторит его с растущей паузой: 20 попыток примерно за сутки.

Проверка подписи

Node.js
import crypto from 'node:crypto';

// rawBody — тело запроса ровно как пришло, до JSON.parse.
function verify(rawBody, header, secret) {
  const parts = Object.fromEntries(header.split(',').map((p) => p.split('=')));
  const expected = crypto
    .createHmac('sha256', secret)
    .update(`${parts.t}.${rawBody}`)
    .digest('hex');
  const fresh = Math.abs(Date.now() / 1000 - Number(parts.t)) <= 300;
  return fresh && crypto.timingSafeEqual(Buffer.from(parts.v1), Buffer.from(expected));
}

Примеры на Go, PHP и Python есть в кабинете, в разделе «Вебхук», и в документации API.

Ограничения

  • До 600 запросов в минуту с одного IP.
  • До 60 запросов в минуту на магазин, отдельно для адресов, счетов и выплат.
  • Все методы и поля описаны в документации API.

Начните принимать криптовалюту сегодня

Регистрация займёт минуту, настройка магазина ещё пять. За подключение платить не нужно.