Entwickler/Erste Schritte

CardV Merchant API

CardV verkauft digitale Prepaid-Produkte an Unternehmen, zum Beispiel Geschenkkarten, Spielguthaben und eSIMs. Mit der Merchant API kauft Ihr Server diese Produkte automatisch ein. Sie prüfen Ihr Guthaben, suchen ein Produkt, fragen den Preis ab, bestellen und rufen die Codes ab. Bezahlt wird aus Ihrer CardV-Wallet, die Sie vorab aufladen. Alles andere, etwa Guthaben aufladen oder frühere Bestellungen ansehen, erledigen Sie im Merchant Portal.

#Dokumentation

DokumentInhalt
AuthentifizierungHeader, Anfragen signieren, API-Keys einrichten
Produkte und BestellungenGuthaben, Wechselkurs, Produkte, Preise, Bestellungen, Codes
Handy-AufladungTelefone aufladen: Anbieter, Preise, Aufladungsbestellungen
GrundregelnBeträge, Zeitangaben, IDs, Anfragelimit, Fehler
WebhooksBenachrichtigungen zu Bestellungen an Ihren Server
SandboxTesten und Checkliste für den Livegang
SicherheitAPI-Keys und Codes schützen

#Umgebungen

LiveSandbox
API-Basis-URLhttps://b2b.cardv.net/api/v1https://sandbox.cardv.net/api/v1
Merchant Portalhttps://b2b.cardv.net/portal/Dasselbe Portal, oben auf Sandbox umschalten

Die Sandbox ist eine eigene Testkopie von CardV mit Testgeld. API-Keys, Guthaben, Bestellungen und Produkt-IDs sind in beiden Umgebungen verschieden.

#Schnellstart

  1. Registrieren. Beantragen Sie im Portal ein Händlerkonto und bestätigen Sie Ihre E-Mail-Adresse.

  2. Freigabe abwarten. CardV prüft Ihr Unternehmen. Danach erhalten Sie eine Merchant ID (Ihre Händlernummer), zum Beispiel M00000001.

  3. Sandbox öffnen. Melden Sie sich im Portal an und wählen Sie oben Sandbox. Sie erhalten 1.000 USD Testgeld.

  4. API-Key erstellen. Gehen Sie im Portal zu Integrations → API keys. Erstellen Sie einen Key. Das Portal zeigt die Key-ID und das Signing Secret einmal an. Speichern Sie das Secret in Ihrem Secret Store.

  5. Guthaben prüfen:

    Shell
    export CARDV_BASE=https://sandbox.cardv.net
    export CARDV_KEY_ID=ck_test_...            # shown in the Portal
    export CARDV_SIGNING_SECRET=cs_test_...    # from your secret store
    
    cardv_get() {  # every call is signed, see Authentication
      local ts nonce sig
      ts=$(date +%s); nonce=$(openssl rand -hex 16)
      sig=$(printf 'GET\n%s\n%s\n%s\n%s' "$1" "$ts" "$nonce" \
        e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 \
        | openssl dgst -sha256 -hmac "$CARDV_SIGNING_SECRET" -hex | sed 's/^.*= //')
      curl -sS "$CARDV_BASE$1" -H "X-Key-Id: $CARDV_KEY_ID" \
        -H "X-Timestamp: $ts" -H "X-Nonce: $nonce" -H "X-Signature: $sig"
    }
    
    cardv_get "/api/v1/balance"
  6. Produkt suchen:

    Shell
    cardv_get "/api/v1/skus?search=steam&limit=20"

    Wählen Sie ein Produkt mit "availability": "available" und notieren Sie seine sku_id.

  7. Preis abfragen:

    Shell
    cardv_get "/api/v1/skus/S000001/quote?quantity=1"

    Notieren Sie merchant_price. Das ist Ihr Preis pro Stück.

  8. Bestellen. Signieren Sie die Anfrage wie jede andere. Nehmen Sie ein Beispiel aus Authentifizierung und diesen Body:

    JSON
    {
      "external_order_id": "TEST-0001",
      "items": [
        {"sku_id": "S000001", "quantity": 1, "expected_unit_price": "9.25"}
      ]
    }

    Sie erhalten HTTP 201 und eine CardV-Bestell-ID wie O-00001234.

  9. Codes abrufen. Rufen Sie GET/api/v1/orders/O-00001234 auf, bis der Status succeeded ist. Die Codes stehen in items[].deliveries[]: card_number, pin_code und redeem_url. Sie können sich auch per Webhook benachrichtigen lassen, sobald die Bestellung fertig ist.

  10. Live gehen, sobald die Sandbox-Checkliste erledigt ist.

Die IDs und Preise oben sind Beispiele. Verwenden Sie die Werte aus Ihrem eigenen Katalog.

#Die API im Überblick

Es gibt sechzehn Endpunkte. Alle Pfade beginnen mit /api/v1.

EndpunktWofürSigniert
GET/accountIhre Firmendaten und der API-StatusNein
GET/balanceWie viel Guthaben Sie ausgeben könnenNein
GET/fx-ratesWechselkurs ab USD für Shops in anderen WährungenNein
GET/productsProdukte, jeweils mit allen SKUsNein
GET/products/{product_id}Ein Produkt mit SKUs und vollständigen TextenNein
GET/skusProdukte, die Sie kaufen können, mit Ihrem PreisNein
GET/skus/{sku_id}Ein einzelnes ProduktNein
GET/skus/{sku_id}/quoteAktueller Preis für eine MengeNein
POST/ordersBestellen, bezahlt aus Ihrer WalletJa
GET/orders/{order_id}Bestellstatus und CodesNein
GET/recharge/countriesLänder, die Sie aufladen könnenNein
GET/recharge/operatorsMobilfunkanbieter und Beträge eines LandesNein
POST/recharge/quotePreis für eine Handy-AufladungJa
POST/recharge/ordersEin Telefon aufladen, bezahlt aus Ihrer WalletJa
GET/recharge/ordersIhre Aufladungsbestellungen auflistenNein
GET/recharge/orders/{order_id}Status einer AufladungsbestellungNein

Alle anderen Endpunkte antworten mit HTTP 403, wenn Sie sie mit einem API-Key aufrufen:

JSON
{"detail": "This operation is only available in the Merchant Portal."}

Handy-Aufladungen sind unter Handy-Aufladung beschrieben.

#IDs

WasBeispielHinweis
Merchant IDM00000001Ihre Händlernummer. Ändert sich nie.
SKU (ein Produkt, das Sie kaufen können)S000456Für Preisabfrage und Bestellung.
CardV-Bestell-IDO-00001234Speichern Sie sie zu Ihrer Bestellung.
Ihre BestellnummerSHOP-10001Legen Sie selbst fest (external_order_id).

Speichern Sie IDs als Text und zerlegen Sie sie nicht. Siehe Grundregeln.

#Im Merchant Portal

  • Wallet aufladen und E-Mail-Warnung bei niedrigem Guthaben
  • Bestellverlauf, Suche und CSV-Export
  • Rechnungen zu Bestellungen
  • Wallet-Buchungen und Abgleich
  • Webhooks einrichten, Zustellverlauf ansehen und erneut senden
  • API-Keys
  • IP-Allowlist
  • Teammitglieder und Rollen
  • Audit-Log
  • Zwei-Faktor-Authentifizierung (2FA)
  • Wechsel zwischen Live und Sandbox

#Kompatibilität und Support

Wir können jederzeit neue Felder und neue Statuswerte in Antworten ergänzen. Ignorieren Sie Felder, die Sie nicht kennen. Behandeln Sie einen unbekannten Bestellstatus als „noch nicht fertig“. Verlassen Sie sich nicht auf den Wortlaut von Fehlermeldungen.

Schreiben Sie an [email protected] und nennen Sie Ihre Merchant ID, die Umgebung, die Bestell-IDs, die Uhrzeit (UTC) und den HTTP-Status. Schicken Sie nie API-Keys, Signaturen, Webhook-Secrets oder Kartencodes.

Fragen zur Integration? Schreiben Sie an [email protected] und nennen Sie Ihre Merchant ID sowie die Bestell- oder Request-ID.