Crynova API v1

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.

HTTP
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.

HTTP
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. 1

    Zarejestruj się i utwórz projekt w panelu Crynova.

  2. 2

    Włącz potrzebne waluty w ustawieniach projektu.

  3. 3

    Utwórz klucz API: Projekt, Klucze API, Utwórz nowy klucz. Skopiuj go od razu — pokazywany tylko raz.

  4. 4

    Ustaw URL webhooka w ustawieniach, aby odbierać powiadomienia o płatnościach.

Uprawnienia klucza API

PermissionDostęp
currencies.readOdczyt listy walut
invoices.createTworzenie faktur
invoices.readOdczyt faktur i statusów
invoices.cancelAnulowanie faktur

Jeśli przy tworzeniu klucza nie wybrano uprawnień, klucz ma pełny dostęp.

GET /api/v1/currencies

Zwraca aktywne kryptowaluty (z sieciami, min/max, opłatami) oraz listę kodów fiat dostępnych dla faktur.

cURL
curl https://crynova.io/api/v1/currencies \
  -H "Authorization: Bearer cryn_xxx"

Odpowiedź

JSON
{
  "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", ...]
}
GET /api/v1/balance

Zwraca salda sprzedawcy dla każdej waluty: dostępne (available), zablokowane (locked) i łącznie (total). Wymaga uprawnienia balance.read.

cURL
curl https://crynova.io/api/v1/balance \
  -H "Authorization: Bearer cryn_xxx"

Odpowiedź

JSON
{
  "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"
    }
  ]
}
POST /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

PoleTypWymaganeOpis
currencystringtakKod krypto z /currencies (np. USDT_TRC20) lub kod fiat (USD, EUR, UAH).
amountstring|numbertakKwota w podanej walucie.
order_idstringnieTwój identyfikator zamówienia (do 255).
descriptionstringnieOpis (do 1000).
expires_inintegernieCzas życia faktury w minutach (5–1440).
metadataobjectnieDowolne pary ciągów znaków, zwracane w webhooku.

Przykład: bezpośrednia faktura krypto

cURL
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ź

JSON
{
  "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

JSON
{
  "currency": "UAH",
  "amount": "499.00",
  "order_id": "ORD-1001"
}

Odpowiedź

JSON
{
  "status": "pending",
  "price_amount": "499",
  "price_currency": "UAH",
  "pay_currency": null,
  "amount": null,
  "pay_address": null,
  "checkout_url": "https://crynova.io/pay/..."
}
  1. 1 Utwórz fakturę z walutą fiat — otrzymasz checkout_url.
  2. 2 Przekieruj klienta na checkout_url — wybierze krypto i zobaczy przeliczoną kwotę.
  3. 3 Po płatności webhook zawiera pay_currency, amount, pay_address.
GET /api/v1/invoices/{invoice_id}

Zwraca pełne informacje o fakturze według jej UUID.

cURL
curl https://crynova.io/api/v1/invoices/9ae4cd13-... \
  -H "Authorization: Bearer cryn_xxx"
GET /api/v1/invoices/{invoice_id}/status

Lekki punkt końcowy do odpytywania statusu płatności.

JSON
{
  "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.

GET /api/v1/invoices

Zwraca stronicowaną, filtrowalną listę Twoich faktur.

cURL
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).

POST /api/v1/invoices/{invoice_id}/cancel

Anuluje fakturę. Tylko pending/waiting_confirmations bez otrzymanych środków.

cURL
curl -X POST https://crynova.io/api/v1/invoices/9ae4cd13-.../cancel \
  -H "Authorization: Bearer cryn_xxx"
GET /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
curl "https://crynova.io/api/v1/statistics?date_from=2026-01-01&date_to=2026-06-30" \
  -H "Authorization: Bearer cryn_xxx"

Odpowiedź

JSON
{
  "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" }
  }
}
POST /api/v1/withdrawals

Tworzy żądanie wypłaty. Kwota jest rezerwowana na saldzie. Wymaga uprawnienia withdrawals.create.

cURL
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ź

JSON
{
  "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).

GET /api/v1/withdrawals · GET /api/v1/withdrawals/{id}
POST /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
curl -X POST https://crynova.io/api/v1/static-wallets \
  -H "Authorization: Bearer cryn_xxx" \
  -H "Content-Type: application/json" \
  -d '{"currency":"BTC"}'

Odpowiedź

JSON
{
  "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
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ź

JSON
{
  "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

HTML
<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)

JS
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.

JSON
{ "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.

ZdarzenieKiedy
invoice.createdFaktura utworzona.
invoice.waiting_confirmationsTransakcja wykryta, oczekiwanie na potwierdzenia.
invoice.paidOpłacono w całości.
invoice.underpaidOtrzymano mniej niż kwota.
invoice.overpaidOtrzymano więcej niż kwota.
invoice.expiredCzas upłynął lub anulowano.
invoice.refundedWykonano zwrot.
wallet.depositPotwierdzony depozyt na portfel statyczny (zaksięgowany na saldzie).

Przykład ładunku

HTTP
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)

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

HTTPZnaczenie
200OK — sukces.
401Nieprawidłowy lub brakujący klucz API.
403Brak uprawnień / IP niedozwolone / sprzedawca nieaktywny.
404Nie znaleziono faktury.
422Błąd walidacji lub nieprawidłowa akcja.
429Przekroczono 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.

Używamy plików cookie, aby strona działała poprawnie i aby ulepszać Twoje doświadczenie. Kontynuując korzystanie ze strony, zgadzasz się z naszą Polityką prywatności.