Dokumentacja API Crynova
REST API do przyjmowania płatności krypto. Twórz faktury w krypto lub fiacie, odbieraj webhooki płatności i sprawdzaj statusy — w kilka minut.
Bezpieczne
Webhooki podpisane HMAC, uprawnienia kluczy, biała lista IP.
Krypto + fiat
Wycena w fiacie — klient wybiera krypto na checkoucie.
Webhooki
Natychmiastowe powiadomienia o statusie z ponawianiem.
Wprowadzenie
API Crynova pozwala przyjmować płatności krypto programowo. Wszystkie żądania używają HTTPS, a odpowiedzi są w JSON. Podstawowy przepływ: utwórz fakturę, przekieruj klienta na checkout, odbierz webhook płatności.
8+ kryptowalut i sieci: BTC, ETH, LTC, DOGE, TRON, USDT (TRC20/ERC20/BEP20).
Faktury w 26 walutach fiat z automatyczną konwersją na krypto po aktualnym kursie.
Podpisane webhooki dla invoice.created/paid/expired i innych.
Klucze idempotencji, uprawnienia per klucz i ochrona IP.
Bazowy URL
Wszystkie punkty końcowe zaczynają się od bazowego URL. Każda odpowiedź jest w JSON.
https://crynova.io/api/v1
- Tylko HTTPS. Żądania HTTP są odrzucane.
- Wszystkie kwoty są przekazywane jako ciągi znaków do 18 miejsc po przecinku — bez liczb zmiennoprzecinkowych.
Uwierzytelnianie
Przekaż klucz API w nagłówku Authorization (Bearer) lub X-Api-Key. Utwórz klucz w panelu projektu.
Authorization: Bearer cryn_xxxxxxxxxxxxxxxx
# lub przez nagłówek
X-Api-Key: cryn_xxxxxxxxxxxxxxxx
Nigdy nie przekazuj klucza w parametrach zapytania ani w treści żądania — trafia do logów i nagłówków Referer. Używaj wyłącznie nagłówka.
Konfiguracja
-
1
Zarejestruj się i utwórz projekt w panelu Crynova.
-
2
Włącz potrzebne waluty w ustawieniach projektu.
-
3
Utwórz klucz API: Projekt, Klucze API, Utwórz nowy klucz. Skopiuj go od razu — pokazywany tylko raz.
-
4
Ustaw URL webhooka w ustawieniach, aby odbierać powiadomienia o płatnościach.
Uprawnienia klucza API
| Permission | Dostęp |
|---|---|
| currencies.read | Odczyt listy walut |
| invoices.create | Tworzenie faktur |
| invoices.read | Odczyt faktur i statusów |
| invoices.cancel | Anulowanie faktur |
Jeśli przy tworzeniu klucza nie wybrano uprawnień, klucz ma pełny dostęp.
/api/v1/currencies
Zwraca aktywne kryptowaluty (z sieciami, min/max, opłatami) oraz listę kodów fiat dostępnych dla faktur.
curl https://crynova.io/api/v1/currencies \
-H "Authorization: Bearer cryn_xxx"
Odpowiedź
{
"data": [
{
"code": "USDT_TRC20",
"name": "Tether USD (TRC-20)",
"network": "tron",
"contract_address": "TR7NHq...",
"decimals": 6,
"confirmations_required": 20,
"min_amount": "1",
"max_amount": null,
"estimated_fee": "1.4",
"supports_memo": false
}
],
"fiat": ["USD","EUR","GBP","JPY","CNY","RUB", ...]
}
/api/v1/balance
Zwraca salda sprzedawcy dla każdej waluty: dostępne (available), zablokowane (locked) i łącznie (total). Wymaga uprawnienia balance.read.
curl https://crynova.io/api/v1/balance \
-H "Authorization: Bearer cryn_xxx"
Odpowiedź
{
"data": [
{
"currency": "USDT_TRC20",
"network": "tron",
"available": "152.40",
"locked": "0",
"total": "152.40"
},
{
"currency": "BTC",
"network": "bitcoin",
"available": "0.0123",
"locked": "0",
"total": "0.0123"
}
]
}
/api/v1/invoices
Tworzy fakturę płatności. W polu currency podaj kod krypto (płatność bezpośrednia) lub kod fiat (klient wybiera krypto na checkoucie).
Parametry
| Pole | Typ | Wymagane | Opis |
|---|---|---|---|
| currency | string | tak | Kod krypto z /currencies (np. USDT_TRC20) lub kod fiat (USD, EUR, UAH). |
| amount | string|number | tak | Kwota w podanej walucie. |
| order_id | string | nie | Twój identyfikator zamówienia (do 255). |
| description | string | nie | Opis (do 1000). |
| expires_in | integer | nie | Czas życia faktury w minutach (5–1440). |
| metadata | object | nie | Dowolne pary ciągów znaków, zwracane w webhooku. |
Przykład: bezpośrednia faktura krypto
curl -X POST https://crynova.io/api/v1/invoices \
-H "Authorization: Bearer cryn_xxx" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-1048" \
-d '{
"currency": "USDT_TRC20",
"amount": "25.00",
"order_id": "ORD-1048",
"description": "Order #1048",
"expires_in": 30,
"metadata": { "customer_id": "42" }
}'
Odpowiedź
{
"invoice_id": "9ae4cd13-...",
"order_id": "ORD-1048",
"status": "pending",
"price_amount": "25",
"price_currency": "USDT_TRC20",
"pay_currency": "USDT_TRC20",
"currency": "USDT_TRC20",
"amount": "25.000000000000000000",
"amount_received": "0",
"pay_address": "TR7NHq...",
"pay_memo": null,
"expires_at": "2026-06-11T12:30:00+00:00",
"checkout_url": "https://crynova.io/pay/9ae4cd13-...",
"transactions": []
}
Faktury w fiacie
Podaj kod fiat w polu currency — faktura jest wyceniana w fiacie, a klient wybiera krypto na checkoucie. Kwota jest przeliczana po aktualnym kursie (oficjalne źródła) i blokowana po wyborze.
Obsługiwane waluty fiat:
USD, EUR, GBP, JPY, CNY, RUB, INR, AUD, CAD, SGD, HKD, TRY, AED, THB, MYR, PHP, IDR, VND, KZT, UAH, BYN, UZS, KGS, AMD, AZN, PLN
Żądanie
{
"currency": "UAH",
"amount": "499.00",
"order_id": "ORD-1001"
}
Odpowiedź
{
"status": "pending",
"price_amount": "499",
"price_currency": "UAH",
"pay_currency": null,
"amount": null,
"pay_address": null,
"checkout_url": "https://crynova.io/pay/..."
}
- 1 Utwórz fakturę z walutą fiat — otrzymasz checkout_url.
- 2 Przekieruj klienta na checkout_url — wybierze krypto i zobaczy przeliczoną kwotę.
- 3 Po płatności webhook zawiera pay_currency, amount, pay_address.
/api/v1/invoices/{invoice_id}
Zwraca pełne informacje o fakturze według jej UUID.
curl https://crynova.io/api/v1/invoices/9ae4cd13-... \
-H "Authorization: Bearer cryn_xxx"
/api/v1/invoices/{invoice_id}/status
Lekki punkt końcowy do odpytywania statusu płatności.
{
"invoice_id": "9ae4cd13-...",
"status": "paid",
"is_final": true,
"amount": "25.0",
"amount_received": "25.0",
"currency": "USDT_TRC20",
"confirmations": 20,
"confirmations_required": 20,
"paid_at": "2026-06-11T12:31:00+00:00"
}
Możliwe statusy: pending, waiting_confirmations, paid, underpaid, overpaid, expired, refunded.
/api/v1/invoices
Zwraca stronicowaną, filtrowalną listę Twoich faktur.
curl "https://crynova.io/api/v1/invoices?status=paid&per_page=50" \
-H "Authorization: Bearer cryn_xxx"
Filtry: status, order_id, currency, per_page (1–100).
/api/v1/invoices/{invoice_id}/cancel
Anuluje fakturę. Tylko pending/waiting_confirmations bez otrzymanych środków.
curl -X POST https://crynova.io/api/v1/invoices/9ae4cd13-.../cancel \
-H "Authorization: Bearer cryn_xxx"
/api/v1/statistics
Zagregowane statystyki faktur za okres: utworzone, opłacone, konwersja i obrót. Filtry: date_from, date_to, currency. Wymaga uprawnienia statistics.read.
curl "https://crynova.io/api/v1/statistics?date_from=2026-01-01&date_to=2026-06-30" \
-H "Authorization: Bearer cryn_xxx"
Odpowiedź
{
"data": {
"invoices_total": 1280,
"invoices_paid": 1190,
"invoices_pending": 14,
"invoices_expired": 76,
"conversion": 92.97,
"paid_volume": [{ "currency": "USD", "amount": "84210.50" }],
"period": { "from": "2026-01-01", "to": "2026-06-30" }
}
}
/api/v1/withdrawals
Tworzy żądanie wypłaty. Kwota jest rezerwowana na saldzie. Wymaga uprawnienia withdrawals.create.
curl -X POST https://crynova.io/api/v1/withdrawals \
-H "Authorization: Bearer cryn_xxx" \
-H "Content-Type: application/json" \
-d '{"currency":"USDT_TRC20","amount":"50","to_address":"TR7NHq...","memo":null}'
Odpowiedź
{
"withdrawal_id": "0c3f...",
"status": "pending",
"currency": "USDT_TRC20",
"amount": "50",
"to_address": "TR7NHq...",
"tx_hash": null,
"created_at": "2026-06-19T10:00:00+00:00"
}
Wypłaty są tworzone jako pending i realizowane po zatwierdzeniu w panelu admina. Lista i szczegóły przez metody GET (uprawnienie withdrawals.read).
/api/v1/withdrawals
·
GET
/api/v1/withdrawals/{id}
/api/v1/static-wallets
Wydaje stały (statyczny) adres do wpłat dla waluty — pobierz-lub-utwórz. Potwierdzone wpłaty są automatycznie księgowane na saldzie i wyzwalają webhook wallet.deposit. Wymaga uprawnień wallets.read / wallets.create.
curl -X POST https://crynova.io/api/v1/static-wallets \
-H "Authorization: Bearer cryn_xxx" \
-H "Content-Type: application/json" \
-d '{"currency":"BTC"}'
Odpowiedź
{
"currency": "BTC",
"network": "bitcoin",
"address": "bc1q...",
"memo": null
}
H2H (host-to-host)
Bezpośredni przepływ krypto bez przekierowania: utwórz fakturę z walutą krypto (np. BTC), a odpowiedź od razu zwróci pay_address i pay_memo, które możesz pokazać we własnym interfejsie. Potwierdzenie płatności przychodzi webhookiem.
curl -X POST https://crynova.io/api/v1/invoices \
-H "Authorization: Bearer cryn_xxx" \
-H "Content-Type: application/json" \
-d '{"currency":"BTC","amount":"0.0025","order_id":"H2H-1"}'
Odpowiedź
{
"invoice_id": "8a1c...",
"status": "pending",
"pay_currency": "BTC",
"amount": "0.0025",
"pay_address": "bc1q...",
"pay_memo": null,
"expires_at": "2026-06-19T10:30:00+00:00"
}
Osadzanie checkoutu (iframe)
Wyświetlaj checkout Crynova bezpośrednio na swojej stronie — bez przekierowania. Dołącz loader embed.js, zamontuj fakturę, a Twoja strona zostanie powiadomiona w czasie rzeczywistym o opłaceniu lub wygaśnięciu. Osadzanie jest włączone na wszystkich stronach /pay/*.
Osadzenie inline
<div id="crynova-checkout"></div>
<script src="https://crynova.io/embed.js"></script>
<script>
Crynova.checkout({
uuid: 'INVOICE_UUID',
mount: '#crynova-checkout',
onPaid: function () { window.location = '/thank-you'; },
onExpired: function () { alert('Payment expired'); }
});
</script>
Tryb modalny (popup)
Crynova.open({ uuid: 'INVOICE_UUID', onPaid: fn });
Zdarzenia
Iframe wysyła do Twojej strony komunikaty (ready, resize, status). SDK zamienia je na callbacki onReady, onResize, onStatus, onPaid i onExpired. Przy ręcznym nasłuchu zawsze sprawdzaj, czy event.origin równa się Twojemu hostowi Crynova.
{ "source": "crynova", "type": "status", "uuid": "9ae4...", "status": "paid", "is_final": true }
onPaid w przeglądarce służy tylko do UX (przekierowanie, potwierdzenie). Zawsze realizuj zamówienie na podstawie podpisanego webhooka — to on jest źródłem prawdy. Twórz fakturę po stronie serwera; nigdy nie ujawniaj klucza API w przeglądarce.
Webhooki
Crynova wysyła żądanie POST na Twój URL webhooka, gdy zmienia się status faktury. Każde żądanie jest podpisane HMAC-SHA256.
| Zdarzenie | Kiedy |
|---|---|
| invoice.created | Faktura utworzona. |
| invoice.waiting_confirmations | Transakcja wykryta, oczekiwanie na potwierdzenia. |
| invoice.paid | Opłacono w całości. |
| invoice.underpaid | Otrzymano mniej niż kwota. |
| invoice.overpaid | Otrzymano więcej niż kwota. |
| invoice.expired | Czas upłynął lub anulowano. |
| invoice.refunded | Wykonano zwrot. |
| wallet.deposit | Potwierdzony depozyt na portfel statyczny (zaksięgowany na saldzie). |
Przykład ładunku
POST {your_webhook_url}
X-Crynova-Event: invoice.paid
X-Crynova-Sig: sha256=hmac(secret, body)
X-Crynova-Delivery: 123
{
"event": "invoice.paid",
"invoice_id": "9ae4cd13-...",
"order_id": "ORD-1048",
"status": "paid",
"price_amount": "499",
"price_currency": "UAH",
"pay_currency": "USDT_TRC20",
"amount": "12.5",
"received": "12.5",
"metadata": { "customer_id": "42" }
}
Weryfikacja podpisu (PHP)
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_CRYNOVA_SIG'] ?? '';
$expected = 'sha256=' . hash_hmac('sha256', $payload, $YOUR_WEBHOOK_SECRET);
if (! hash_equals($expected, $signature)) {
http_response_code(403);
exit('Invalid signature');
}
// trusted — process the event
http_response_code(200);
Ponawianie dostarczania przy błędzie: 5m, 30m, 2h, 8h, 24h. Odpowiedz kodem 2xx, aby potwierdzić.
Kody błędów
| HTTP | Znaczenie |
|---|---|
| 200 | OK — sukces. |
| 401 | Nieprawidłowy lub brakujący klucz API. |
| 403 | Brak uprawnień / IP niedozwolone / sprzedawca nieaktywny. |
| 404 | Nie znaleziono faktury. |
| 422 | Błąd walidacji lub nieprawidłowa akcja. |
| 429 | Przekroczono limit żądań. |
Limity i bezpieczeństwo
Limit żądań: 60 żądań/min na klucz (nagłówki X-RateLimit-*).
Idempotency-Key: nagłówek sprawia, że powtórny POST jest bezpieczny — zwraca pierwszą odpowiedź w ciągu 24 godzin.
Biała lista IP: ogranicz klucz do listy IP/CIDR w ustawieniach klucza.
Uprawnienia: nadaj kluczowi tylko potrzebne zakresy.
Gotowy do integracji?
Utwórz projekt, pobierz klucz API i przyjmij pierwszą płatność w kilka minut.