Cryptomus-kompatible API
Mit blockwallets nehmen Sie USDT und USDC an, dazu BTC, LTC, DOGE, BCH und native Coins (gutgeschrieben in US-Dollar zu einem fixierten Kurs): Der Kunde zahlt, wir bestätigen es on-chain, dann benachrichtigen wir Sie. API, Signaturen und Webhooks sind dieselben wie bei Cryptomus – wenn Sie Cryptomus schon integriert haben, ändern Sie die Domain und sind fertig. Zuerst die Funktionsweise, dann die API.
Zwei Wege zum Geld
Beide nehmen jeden Betrag an: Bestellungen zum Festpreis und Aufladungen, bei denen der Kunde den Betrag selbst eingibt. Nach der Zahlung versenden Sie die Ware oder schreiben dem Kunden Guthaben gut. Der einzige Unterschied ist, ob jede Zahlung eine neue Adresse bekommt.
Der Kunde wählt auf Ihrer Seite ein Produkt oder gibt einen Betrag ein, Sie erstellen eine Rechnung, und er sendet den auf der Zahlungsseite angezeigten Betrag. Jede Rechnung hat eine neue Adresse und einen Countdown; kommt das Geld an, benachrichtigen wir Sie mit dem tatsächlich erhaltenen Betrag.
POST /v1/payment → Webhook type: payment
Kein Betrag im Voraus: Jeder Kunde bekommt pro Netzwerk eine dauerhafte Adresse, die er in seiner Wallet speichert und jederzeit nutzt. Jede Überweisung löst einen eigenen Webhook aus.
POST /v1/wallet → Webhook type: wallet
Im Zweifel nehmen Sie Rechnungen. Ohne Code sind die Zahlungslinks im Dashboard Rechnungen, die für Sie erstellt werden. Noch kein Händler? Beantragen Sie den Zugang auf der Startseite; nach der Freigabe melden Sie sich im Händler-Dashboard an und probieren auf der Startseite des Dashboards zuerst „Zahlung ausprobieren“ mit einem kleinen Betrag aus (das Geld geht auf Ihr eigenes Guthaben).
Wie eine Rechnung abläuft
An einer Zahlung wirken vier Parteien mit: der Kunde, Ihre Website, blockwallets und die Blockchain. Das Diagramm läuft zeitlich von oben nach unten; die rechte Spalte ist der Status der Rechnung in jedem Schritt.
Das Diagramm ist breit – seitlich scrollen.
Kurz in fünf Schritten:
- Sie erstellen eine Rechnung (ein Zahlungslink erledigt das für Sie, oder Ihr Server ruft
/v1/paymentauf), erhalten dieurlder Zahlungsseite und leiten den Kunden dorthin weiter. - Auf der Zahlungsseite wählt der Kunde Coin und Netzwerk, erhält eine eigene Adresse samt Betrag und zahlt aus einer Wallet oder von einer Börse.
- Wir sehen die Überweisung on-chain, warten auf genug Bestätigungen und prüfen sie dann gegen einen zweiten Node-Anbieter (damit ein Node sie nicht fälschen kann).
- Die Rechnung wird
paid, und wir senden sofort einen signierten Webhook per POST an Ihreurl_callback; wenige Sekunden später schickt die Zahlungsseite den Kunden zurück zu Ihrerurl_success. - Das Geld wird Ihrem Guthaben gutgeschrieben; zahlen Sie es im Händler-Dashboard auf Ihre eigene Wallet aus.
Rechnungsstatus
| status | Bedeutung | Was Sie tun |
|---|---|---|
check | Wartet auf Zahlung | — |
confirm_check | Überweisung gesehen, wartet auf Bestätigungen | — |
wrong_amount_waiting | Erhalten, aber zu wenig; der Kunde kann an dieselbe Adresse nachzahlen (wenn is_payment_multiple true ist; einmal benachrichtigt) | — (nach der Nachzahlung erhalten Sie paid) |
paid | Bezahlt | Versenden / gutschreiben nach payment_amount_usd |
paid_over | Bezahlt und überzahlt | Dasselbe (payment_amount_usd ist der erhaltene Betrag) |
wrong_amount | Mit weniger als dem vollen Betrag abgelaufen (bei is_payment_multiple false: die erste zu geringe Überweisung) | Aufladungsgeschäfte können den erhaltenen payment_amount_usd gutschreiben; Shops bitten den Kunden, den Rest zu zahlen |
cancel | Abgelaufen, ohne dass etwas eingegangen ist | — (später eingehendes Geld wird trotzdem gutgeschrieben und gemeldet) |
Wenn is_final true ist, ändert sich der Status nicht mehr (außer bei verspäteten Zahlungen).
Zahlungslinks (ohne Code)
Händler-Dashboard → „Zahlungen › Zahlungslinks“ → Beschreibung und Betrag eingeben (ein Netzwerk festlegen oder den Kunden wählen lassen) → erstellen. Jeder Link hat eine URL und einen QR-Code.
- Jedes Mal, wenn jemand den Link öffnet, wird eine neue Rechnung erstellt, ein Link ist also wiederverwendbar (z. B. „Mitgliedschaft $99“).
- Jede Zahlung erscheint unter „Zahlungen › Zahlungseingänge“; zahlen Sie sie unter „Finanzen › Guthaben & Auszahlung“ auf Ihre Wallet aus.
- Wenn Sie unter „Entwickler › Integration & Keys“ Zugangsdaten und eine Webhook-URL angelegt haben, werden auch Zahlungen über Links im unten beschriebenen Format gemeldet.
- Um nichts mehr anzunehmen, klicken Sie auf „Deaktivieren“, und der Link funktioniert sofort nicht mehr.
API-Integration
1. Zugangsdaten und Signatur
Händler-Dashboard → „Entwickler › Integration & Keys“ → einen merchant (UUID) und einen API key erzeugen. Es gibt je einen Satz für Live und für Test: Live nimmt echtes Geld an, Test läuft auf Testnets. Tragen Sie außerdem Ihre Website-Domains ein: url_callback, url_return und url_success müssen darauf liegen. Der API key wird nur einmal angezeigt – bewahren Sie ihn sicher und nur auf Ihrem Server auf.
Base-URL https://blockwallets.io. Jeder Endpoint ist POST + JSON, mit diesen Headern:
merchant: Ihre merchant-UUID (sie entscheidet über Live oder Test)sign:md5(base64(Request-Body) + API key), wobei der Body genau der JSON-String ist, den Sie senden
Erfolg liefert {"state": 0, "result": {…}}, ein Fehler {"state": 1, "message": "…"} (siehe Fehler).
Die wichtigsten Endpoints unten haben ein Panel „Ausprobieren“: Geben Sie Ihren Test-merchant und API key ein, und die Seite signiert die Anfrage in Ihrem Browser, ruft den Endpoint auf und zeigt vollständige Anfrage und Antwort (die Zugangsdaten bleiben im Speicher der Seite). Wenn eine Signatur nicht passt, vergleichen Sie sie Schritt für Schritt mit dem Signaturprüfer.
import crypto from "node:crypto";
async function call(path, data) {
const body = JSON.stringify(data);
const sign = crypto.createHash("md5").update(Buffer.from(body).toString("base64") + process.env.BW_API_KEY).digest("hex");
const res = await fetch("https://blockwallets.io" + path, {
method: "POST",
headers: { merchant: process.env.BW_MERCHANT, sign, "Content-Type": "application/json" },
body,
});
return res.json();
}function bw_call(string $path, array $data): array {
$body = json_encode($data, JSON_UNESCAPED_UNICODE);
$sign = md5(base64_encode($body) . getenv('BW_API_KEY'));
$ch = curl_init('https://blockwallets.io' . $path);
curl_setopt_array($ch, [
CURLOPT_POST => true, CURLOPT_POSTFIELDS => $body, CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['merchant: ' . getenv('BW_MERCHANT'), 'sign: ' . $sign, 'Content-Type: application/json'],
]);
return json_decode(curl_exec($ch), true);
}import base64, hashlib, json, os, requests
def bw_call(path: str, data: dict) -> dict:
body = json.dumps(data, separators=(",", ":"), ensure_ascii=False)
sign = hashlib.md5((base64.b64encode(body.encode()).decode() + os.environ["BW_API_KEY"]).encode()).hexdigest()
headers = {"merchant": os.environ["BW_MERCHANT"], "sign": sign, "Content-Type": "application/json"}
return requests.post("https://blockwallets.io" + path, data=body.encode(), headers=headers).json()2. Rechnung erstellen POST /v1/payment
Wenn der Kunde eine Bestellung aufgibt oder auf Ihrer Aufladeseite einen Betrag eingibt, rufen Sie https://blockwallets.io/v1/payment auf und leiten ihn zur zurückgegebenen result.url weiter.
{
"amount": "42.00",
"currency": "USD",
"order_id": "order_1042",
"url_callback": "https://shop.example/webhooks/crypto",
"url_return": "https://shop.example/cart",
"url_success": "https://shop.example/thanks?order=1042"
}| Parameter | Pflicht | Beschreibung |
|---|---|---|
amount | Ja | Betrag als String mit bis zu zwei Nachkommastellen: "42.00". Ihr Preis oder eine vom Kunden eingegebene Zahl; nicht unter dem Mindestbetrag des gewählten Netzwerks (siehe Netzwerke) |
currency | Ja | USD, USDT oder USDC, alle 1:1 |
order_id | Ja | Ihre Bestellnummer: Buchstaben, Ziffern, -, _, ≤ 100 Zeichen. Ein erneuter Aufruf mit derselben order_id liefert die bestehende Rechnung (keine doppelten Bestellungen) |
url_callback | Nein | Webhook-URL. Ohne sie wird kein Webhook gesendet |
url_return | Nein | Wohin „Zurück“ vor der Zahlung führt |
url_success | Nein | Wohin der Kunde nach der Zahlung geht |
network | Nein | Ein Netzwerk vorauswählen: tron / bsc / eth / base / polygon / arbitrum / optimism / avalanche / xlayer / btc / ltc / doge / bch / sol / ton; weglassen, damit der Kunde auf der Zahlungsseite wählt |
to_currency | Nein | Coin in diesem Netzwerk: USDT / USDC; bei btc / ltc / doge / bch ist es BTC / LTC / DOGE / BCH (optional) |
lifetime | Nein | Lebensdauer der Rechnung in Sekunden, 300 – 43200, Standard 3600; alles unter 600 zählt als 600 |
accuracy_payment_percent | Nein | Wie viel Unterzahlung noch als bezahlt gilt, 0 – 5, Standard 0. 100 = alles akzeptieren, was ankommt: paid sobald bestätigt (paid_over bei mehr), im Webhook nach payment_amount_usd gutschreiben – gut für Aufladungen. Wenn weggelassen, gilt im Dashboard die „Betragsregel“ unter „Einstellungen › Zahlungsregeln & Gebühren“: „Gutschreiben, was ankommt“ bedeutet 100 |
subtract | Nein | Anteil der Plattformgebühr, den der Kunde zahlt, 0 – 100, zu payer_amount addiert (die Plattformgebühr beträgt 1%, bei höherem Volumen weniger; bei 1% kostet eine Rechnung über $100 den Kunden mit 100 genau $101.00; siehe Preise). Wenn weggelassen, gilt im Dashboard die Einstellung „Gebühren und Unterzahlung“ unter „Einstellungen › Zahlungsregeln & Gebühren“ (Standard 0) |
is_payment_multiple | Nein | Ob eine Unterzahlung nachgezahlt werden kann, Standard true: Status wrong_amount_waiting, zahlt der Kunde den Rest an dieselbe Adresse, wird es paid (bleiben bei der ersten Unterzahlung weniger als 30 Minuten, verschiebt sich die Frist auf 30 Minuten später). false: Die erste zu geringe Überweisung ergibt wrong_amount. Wenn weggelassen, gilt die Dashboard-Einstellung |
additional_data | Nein | Ein beliebiger String (≤ 255), der in Abfragen und Webhooks unverändert zurückgegeben wird |
{
"state": 0,
"result": {
"uuid": "6f1c2a7e-…",
"order_id": "order_1042",
"amount": "42.00",
"currency": "USD",
"network": null,
"address": null,
"payer_amount": null,
"payment_amount": null,
"url": "https://blockwallets.io/pay/inv_01J8…",
"expired_at": 1760965200,
"status": "check",
"is_final": false
}
}network, address und payer_amount werden gefüllt, sobald der Kunde ein Netzwerk wählt.
3. Rechnungen abfragen
POST /v1/payment/info{"order_id": "…"}oder{"uuid": "…"}: eine Rechnung abrufen und dabei die Chain prüfen (höchstens einmal pro 10 Sekunden).POST /v1/payment/list: Liste, 15 pro Seite, optionaldate_from/date_to; nächste Seite über das zurückgegebenepaginate.nextCursor(?cursor=…).POST /v1/payment/services: verfügbare Netzwerke und der Mindestbetrag jedes Netzwerks.POST /v1/payment/resend{"order_id": "…"}: den Webhook einer bezahlten / unterzahlten Rechnung erneut senden.
Webhooks sind der Hauptkanal; Abfragen sind die Reserve (zum Beispiel, wenn Ihr Server ausgefallen war und einen Webhook verpasst hat).
4. Statische Wallets POST /v1/wallet
Öffnet für einen Kunden in einem Netzwerk eine dauerhafte Adresse. Dieselbe order_id (meist Ihre Nutzer-ID) + Netzwerk ergibt immer dieselbe Adresse; alle EVM-Chains (BNB Chain, Ethereum, Base, Polygon, Arbitrum, Optimism, Avalanche, X Layer) teilen sich eine Adresse, während TRON, BTC, LTC, DOGE, BCH, Solana und TON jeweils eine eigene haben. Alles, was der Kunde sendet, wird gutgeschrieben, mit einem Webhook pro Überweisung; Überweisungen in BTC / LTC / DOGE / BCH / TRX / BNB / ETH / POL / AVAX / OKB / SOL / TON werden zum Kurs des Moments, in dem sie gesehen wurden, in US-Dollar umgerechnet (payment_amount_usd).
{
"order_id": "user_42",
"currency": "USDT",
"network": "tron",
"url_callback": "https://shop.example/webhooks/crypto"
}{
"state": 0,
"result": {
"wallet_uuid": "0b9d…",
"uuid": "5e2f…",
"order_id": "user_42",
"currency": "USDT",
"network": "tron",
"address": "TXy4…8kQ2",
"url": "https://blockwallets.io/deposit/dac_01J8…"
}
}result.url ist eine gehostete Einzahlungsseite (Adresse + QR-Code + letzte Einzahlungen), die Sie dem Kunden geben können. Überweisungen unter dem Mindestbetrag des Netzwerks (meist $1, BTC $5) werden nicht automatisch gutgeschrieben; kontaktieren Sie uns, damit sie gutgeschrieben werden. Das Sperren von Adressen (/v1/wallet/block-address) wird noch nicht unterstützt.
Webhooks
Wenn sich der Status einer Rechnung ändert (paid, paid_over, wrong_amount_waiting, wrong_amount, cancel) und bei jeder Überweisung an eine statische Wallet, senden wir JSON per POST an url_callback. Eine 2xx-Antwort gilt als zugestellt; andernfalls wiederholen wir nach 1 Minute, 5 Minuten, 30 Minuten, 2 Stunden, 12 Stunden, 24 Stunden und 24 Stunden. Sie können auch im Dashboard oder mit /v1/payment/resend erneut senden.
{
"type": "payment",
"uuid": "6f1c2a7e-…",
"order_id": "order_1042",
"amount": "42.00",
"payment_amount": "42",
"payment_amount_usd": "42.00",
"merchant_amount": "41.58",
"commission": "0.42",
"is_final": true,
"status": "paid",
"from": "TQ8m…",
"wallet_address_uuid": null,
"network": "tron",
"currency": "USD",
"payer_currency": "USDT",
"payer_amount": "42",
"payer_amount_exchange_rate": "1",
"additional_data": null,
"txid": "9c1e…",
"sign": "5f0c9b…"
}| type | Wann | Gutschrift |
|---|---|---|
payment | Der Status einer Rechnung hat sich geändert – siehe status | payment_amount_usd bei paid / paid_over gutschreiben; über uuid deduplizieren |
wallet | Eine Überweisung ist bei einer statischen Wallet eingegangen (status ist immer paid; order_id ist die, mit der Sie die Wallet geöffnet haben) | payment_amount_usd gutschreiben; jede Überweisung hat eine eigene uuid – darüber deduplizieren |
Signatur prüfen (Pflicht)
Die Signatur ist das Feld sign im Webhook-Body: Entfernen Sie sign, kodieren Sie den Rest so neu wie PHP json_encode (kompakt, / als \/ escaped, Nicht-ASCII nicht escaped), und md5(base64(encoded) + API key) muss sign entsprechen. Verwenden Sie den API key im selben Modus. Derselbe Webhook kann mehrfach eintreffen – deduplizieren Sie über uuid + status.
Schlägt die Prüfung fehl, fügen Sie den rohen Webhook-Body in den Signaturprüfer ein: Er zeigt das Ergebnis jedes Schritts und markiert, wo Ihres abweicht (alles läuft in Ihrem Browser; der API key wird nie hochgeladen). Jeder Webhook unter „Entwickler › Webhook-Protokoll“ im Dashboard öffnet sich mit einem Klick im Prüfer.
import crypto from "node:crypto";
function verify(rawBody, apiKey) {
const { sign, ...data } = JSON.parse(rawBody);
const json = JSON.stringify(data).replaceAll("/", "\\/");
const expected = crypto.createHash("md5").update(Buffer.from(json).toString("base64") + apiKey).digest("hex");
return typeof sign === "string" && sign.length === expected.length && crypto.timingSafeEqual(Buffer.from(sign), Buffer.from(expected));
}$data = json_decode(file_get_contents('php://input'), true);
$sign = $data['sign'] ?? '';
unset($data['sign']);
$expected = md5(base64_encode(json_encode($data, JSON_UNESCAPED_UNICODE)) . $apiKey);
if (!hash_equals($expected, $sign)) {
http_response_code(401); exit;
}import base64, hashlib, hmac, json
def verify(raw_body: bytes, api_key: str) -> bool:
data = json.loads(raw_body)
sign = data.pop("sign", "")
encoded = json.dumps(data, separators=(",", ":"), ensure_ascii=False).replace("/", "\\/")
expected = hashlib.md5((base64.b64encode(encoded.encode()).decode() + api_key).encode()).hexdigest()
return hmac.compare_digest(expected, sign)Testmodus
Rechnungen, die mit dem Test-merchant und API key erstellt werden, laufen auf Testnets, ganz ohne echtes Geld. Die Zahlungsseite zeigt eine Schaltfläche „Zahlung simulieren“ (voll / halb / überzahlt), sodass Sie Statuswechsel und Webhooks sehen, ohne Testnet-Coins zu besorgen.
POST /v1/test-webhook/payment,/v1/test-webhook/wallet: einen signierten Beispiel-Webhook anurl_callbacksenden (übergeben Sieurl_callback– Pflicht, auf einer Ihrer registrierten Website-Domains – sowiecurrency,network, optionalstatus,order_id), um Ihren Prüfcode zu debuggen.- Dashboard „Entwickler › Integration & Keys“ → „Testbenachrichtigung senden“: sendet ein Beispiel an Ihre Webhook-URL.
- Dashboard „Entwickler › Webhook-Protokoll“: jeder Zustellversuch mit Zeit, Ziel-URL, HTTP-Status, Dauer, Request-Body und der Antwort Ihres Servers (erste 4 KB); nach Bestellung oder Status filtern und mit einem Klick erneut senden. 30 Tage aufbewahrt.
Wechsel von Cryptomus
- Dashboard „Entwickler › Integration & Keys“ → merchant und API key erzeugen.
- Ersetzen Sie
https://api.cryptomus.comin Ihrem Code durchhttps://blockwallets.iound verwenden Sie den neuen merchant und API key. - Tragen Sie Ihre Domains unter „Website-Domains“ ein (
url_callback/url_return/url_successakzeptieren nur diese).
Unterstützt: /v1/payment, /v1/payment/info, /v1/payment/list, /v1/payment/services, /v1/payment/resend, /v1/wallet, /v1/test-webhook/payment, /v1/test-webhook/wallet.
Unterschiede: Rechnungen werden nur in USD / USDT / USDC berechnet (alle 1:1, kein Wechselkursaufschlag); commission ist unsere Plattformgebühr (der erhaltene Betrag × der Satz des Händlers bei Erstellung der Rechnung – Standard 1%, je nach Volumen bis 0.5%; auf den Teil, den der Kunde übernimmt, wird nichts doppelt berechnet) und merchant_amount = erhalten − commission; zahlt der Kunde in BTC / LTC / DOGE / BCH / TRX / BNB / ETH / POL / AVAX / OKB / SOL / TON, nennen wir den Median mehrerer Börsen, 30 Minuten fixiert – payer_amount ist die zu sendende Coin-Menge, payer_amount_exchange_rate der USD-Wert eines Coins, und die Zahlung wird zum fixierten Kurs in payment_amount_usd umgerechnet (die Coins bleiben bei uns, es wird nichts getauscht); Netzwerke tron / bsc / eth / base / polygon / arbitrum / optimism / avalanche / xlayer / btc / ltc / doge / bch / sol / ton; Mindestlebensdauer einer Rechnung 10 Minuten; kein is_refresh und kein Sperren statischer Wallets; Webhooks kommen standardmäßig von wechselnden IPs; wenn Sie per IP freigeben, aktivieren Sie im Dashboard unter „Entwickler › Integration & Keys“ die Option „Webhooks von fester IP“, dann kommen Webhooks nur von 18.163.145.41 – eine Freigabeliste ist eine zusätzliche Schicht, prüfen Sie weiterhin sign.
Sie kommen von NOWPayments oder Coinbase Commerce? Für beide haben wir kompatible APIs – ändern Sie Base-URL und Schlüssel; siehe die Migrationsanleitung.
Netzwerke und Beträge
| Coin | Netzwerk | network-Parameter | Minimum | Eingang |
|---|---|---|---|---|
| USDT | TRON | tron | $1 | ~1 Min. |
| USDT | BNB Chain | bsc | $1 | ~1 Min. |
| USDC | BNB Chain | bsc | $1 | ~1 Min. |
| USDT | Ethereum | eth | $5 | ~1 Min. |
| USDC | Ethereum | eth | $5 | ~1 Min. |
| USDC | Base | base | $1 | ~1 Min. |
| USDT | Polygon | polygon | $1 | ~1 Min. |
| USDC | Polygon | polygon | $1 | ~1 Min. |
| USDT | Arbitrum | arbitrum | $1 | ~1 Min. |
| USDC | Arbitrum | arbitrum | $1 | ~1 Min. |
| USDT | Optimism | optimism | $1 | ~1 Min. |
| USDC | Optimism | optimism | $1 | ~1 Min. |
| USDT | Avalanche | avalanche | $1 | ~1 Min. |
| USDC | Avalanche | avalanche | $1 | ~1 Min. |
| USDT | X Layer | xlayer | $1 | ~1 Min. |
| USDC | X Layer | xlayer | $1 | ~1 Min. |
| USD1 | BNB Chain | bsc | $1 | ~1 Min. |
| FDUSD | BNB Chain | bsc | $1 | ~1 Min. |
| DAI | Ethereum | eth | $5 | ~1 Min. |
| DAI | Arbitrum | arbitrum | $1 | ~1 Min. |
| DAI | Base | base | $1 | ~1 Min. |
| BTC | Bitcoin | btc | $5 | ~10 Min. |
| LTC | Litecoin | ltc | $1 | ~3 Min. |
| DOGE | Dogecoin | doge | $1 | ~1 Min. |
| BCH | Bitcoin Cash | bch | $1 | ~10 Min. |
| TRX | TRON | tron | $1 | ~1 Min. |
| BNB | BNB Chain | bsc | $1 | ~1 Min. |
| ETH | Ethereum | eth | $5 | ~1 Min. |
| ETH | Base | base | $1 | ~1 Min. |
| ETH | Arbitrum | arbitrum | $1 | ~1 Min. |
| ETH | Optimism | optimism | $1 | ~1 Min. |
| POL | Polygon | polygon | $1 | ~1 Min. |
| AVAX | Avalanche | avalanche | $1 | ~1 Min. |
| OKB | X Layer | xlayer | $1 | ~1 Min. |
| USDT | Solana | sol | $1 | ~1 Min. |
| USDC | Solana | sol | $1 | ~1 Min. |
| SOL | Solana | sol | $1 | ~1 Min. |
| USDT | TON | ton | $1 | ~1 Min. |
| TON | TON | ton | $1 | ~1 Min. |
ERC-20-Gebühren sind hoch, daher beträgt das Minimum $5; auch die Bitcoin-Gebühren sind nicht niedrig, Minimum $5; alles andere $1. Kunden müssen im auf der Zahlungsseite gezeigten Netzwerk senden – Geld, das in einem anderen Netzwerk gesendet wird, wird nicht automatisch gutgeschrieben.
BTC / LTC / DOGE / BCH zeigen „erkannt“, sobald sie im Mempool sind, und zählen, sobald sie genug Bestätigungen haben; ersetzte (RBF) oder verworfene Transaktionen zählen nicht.
Native Coins (TRX, BNB, ETH, POL, AVAX, OKB, SOL, TON) werden zu einem fixierten Kurs angeboten und wie BTC / LTC / DOGE / BCH in US-Dollar gutgeschrieben; geben Sie Netzwerk und Coin an: bei Rechnungen network: "bsc", to_currency: "BNB", bei statischen Wallets network: "bsc", currency: "BNB". Ein Netzwerk allein steht standardmäßig für USDT in dieser Chain (USDC auf Base).
Überweisungen von Verträgen (Multisig, Sammelauszahlungen) werden ebenfalls empfangen; bei manchen Chains ist ihr Transaktions-Hash nicht verfügbar, und txid im Webhook ist null.
Fehler
{ "state": 1, "message": "amount must be a number like 10.28" }| HTTP | Häufige Ursachen |
|---|---|
| 422 | Fehlende oder fehlerhafte Parameter; Betrag unter dem Netzwerk-Minimum; Callback- / Weiterleitungs-URL nicht auf Ihren registrierten Domains; nicht unterstützter Coin / nicht unterstütztes Netzwerk bei /v1/payment |
| 401 | Falscher merchant, falsches sign (Invalid Sign.) oder ein rotierter API key |
| 404 | Die Rechnung existiert nicht oder gehört Ihnen nicht (Payment not found); bei /v1/wallet nicht unterstützte Kombination aus Coin und Netzwerk (The service was not found) |
| 503 | Das Netzwerk ist vorübergehend nicht verfügbar – wählen Sie ein anderes oder wählen Sie keines vor |
Ist die Signatur falsch (Invalid Sign.), enthält die Antwort ein Objekt debug: body_base64 ist das base64 des Request-Bodys, den wir empfangen haben (Ihr eigener Inhalt, niemals der API key), und body_bytes seine Länge. Vergleichen Sie es mit dem base64, das Sie signiert haben: Weichen sie ab, ist der gesendete Body nicht der signierte String (Ihr Framework hat ihn neu serialisiert, ein Proxy hat die Kodierung geändert, ein abschließender Zeilenumbruch); stimmen sie überein, ist der API key falsch. Fügen Sie es in den Signaturprüfer ein, um die erste Abweichung zu sehen.
{
"state": 1,
"message": "Invalid Sign.",
"debug": {
"body_base64": "eyJhbW91bnQiOiI0Mi4wMCIsImN1cnJlbmN5IjoiVVNEIiwi…",
"body_bytes": 158,
"sign_formula": "md5(body_base64 + API key)"
}
}FAQ
Kunden laden beliebige Beträge auf – welcher Modus?
Rechnungen. Lassen Sie den Kunden auf Ihrer Aufladeseite einen Betrag eingeben, erstellen Sie dafür eine Rechnung und schreiben Sie payment_amount_usd gut, wenn sie ankommt. Nutzen Sie statische Wallets nur, wenn Kunden eine Adresse speichern und wiederholt dorthin senden sollen.
Was, wenn ein Kunde zu wenig zahlt?
Vor Ablauf kann der Kunde die Differenz auf der Zahlungsseite nachsenden (sie zeigt, wie viel noch offen ist; Status wrong_amount_waiting, und bleiben bei der ersten Unterzahlung weniger als 30 Minuten, verschiebt sich die Frist auf 30 Minuten später). Fehlt bei Ablauf noch etwas, wird die Rechnung wrong_amount, und payment_amount_usd im Webhook ist der erhaltene Betrag; Aufladungsgeschäfte können diesen einfach gutschreiben.
Was, wenn ein Kunde zu spät oder doppelt zahlt?
Geld, das nach Ablauf eintrifft, wird trotzdem gutgeschrieben und gemeldet; Geld, das nach vollständiger Bezahlung einer Rechnung eintrifft, wird ebenfalls erfasst und ist im Dashboard sichtbar.
Was, wenn ein Kunde im falschen Netzwerk sendet?
Zum Beispiel ist die Rechnung auf TRON und er sendet von BNB Chain: Es wird nicht automatisch gutgeschrieben – kontaktieren Sie uns, dann bearbeiten wir es manuell.
Was kostet es?
1% jeder erhaltenen Zahlung, automatisch gesenkt nach dem Volumen des Vormonats (0.9% ab $50,000, 0.8% ab $100,000, 0.7% ab $250,000, 0.6% ab $500,000 und 0.5% ab $1,000,000), ohne monatliche oder Einrichtungsgebühren. Der Kunde zahlt beim Senden die Netzwerkgebühr; um die Gebühr an den Kunden weiterzugeben, setzen Sie subtract beim Erstellen einer Rechnung oder als Standard im Dashboard. Auszahlungen kosten nichts extra. Siehe Preise.
Wann kommt das Geld bei mir an?
Es wird Ihrem Guthaben gutgeschrieben, sobald die Zahlung bestätigt ist. Fordern Sie unter „Finanzen › Guthaben & Auszahlung“ eine Auszahlung auf Ihre eigene Wallet an; nach unserer Freigabe zahlen wir aus, und die On-Chain-Transaktion erscheint in Ihrem Auszahlungsverlauf.
Sie können auch die automatische Auszahlung aktivieren: Sobald Ihr verfügbares Guthaben einen von Ihnen festgelegten Betrag erreicht oder einmal täglich um 00:00 UTC, wird das gesamte verfügbare Guthaben ausgezahlt. Automatische Auszahlungen werden genauso geprüft, und jede Änderung der Einstellungen sendet eine Mitteilung an Ihre E-Mail.