ENTWICKLER

API für Kontovorgänge

Lesen Sie das Guthaben, beantragen Sie Rückerstattungen und Auszahlungen, beantworten Sie Streitfälle und verwalten Sie Webhook-Zustellungen. Signieren Sie jede Anfrage wie unter Authentifizierung beschrieben.

  • Basis-URLhttps://www.manuellsolutions.com/api/v3
  • API-Version3.0.0

Zu den Vorgängen

Umgebung

Testen Sie, ohne echtes Geld zu bewegen.

Echte Zahlungen. Ein Live-Schlüssel ist erforderlich.

Guthaben

Lesen Sie Ihr verfügbares und auszahlbares Guthaben.

Das Sandbox-Guthaben ist virtuell. Sandbox-Zahlungen wechseln sofort zu available_amount, ohne ein Wertstellungsdatum abzuwarten, sodass Sie Auszahlungen gleich testen können.

Das Live-Guthaben besteht aus echten Zahlungseingängen. Eine Zahlung wartet in pending_settlement_amount bis zu ihrem Wertstellungsdatum und wechselt dann zu available_amount.

GET/api/v3/balance

Guthaben abrufen

Antwort · 200

Guthabenübersicht.

Balance

FeldTypErforderlichBeschreibung
currency_codestringErforderlichKonfigurierte Basiswährung der Plattform.
USDEURAEDTRY
available_amountstringErforderlichGesamtes verfügbares Guthaben über die Link-, API- und Shop-Wallets. Ein Sandbox-Schlüssel liest stattdessen das isolierte virtuelle API-Wallet.
pending_settlement_amountstringErforderlichEingezogen, aber noch nicht gutgeschrieben (Wertstellungsdatum steht aus). Mit einem Sandbox-Schlüssel immer 0.00, da Sandbox-Zahlungen nicht auf ein Wertstellungsdatum warten.
environmentstringErforderlichUmgebung, zu der die Werte gehören (die Umgebung des Signaturschlüssels).
livesandbox

Antwort · Beispiel

{
  "currency_code": "USD",
  "available_amount": "48200.00",
  "pending_settlement_amount": "250.00",
  "environment": "live"
}

Mögliche Fehler

GET/api/v3/balance/withdrawable

Auszahlbares Guthaben abrufen

Antwort · 200

Übersicht des auszahlbaren Guthabens.

WithdrawableBalance

FeldTypErforderlichBeschreibung
currency_codestringErforderlichKonfigurierte Basiswährung der Plattform.
USDEURAEDTRY
withdrawable_amountstringErforderlichGesamtes verfügbares Link-, API- und Shop-Guthaben; POST /withdrawals kann nur das API-Wallet belasten und wendet zusätzliche Prüfungen an. Ein Sandbox-Schlüssel liest das isolierte virtuelle API-Wallet.
can_withdrawbooleanErforderlichDer Wert ist false, wenn ein Teilsaldo eines Wallets negativ ist.
environmentstringErforderlichUmgebung, zu der die Werte gehören (die Umgebung des Signaturschlüssels).
livesandbox

Antwort · Beispiel

{
  "currency_code": "USD",
  "withdrawable_amount": "48200.00",
  "can_withdraw": true,
  "environment": "live"
}

Mögliche Fehler

Rückerstattungen

Fordern Sie eine Rückerstattung oder Stornierung an und verfolgen Sie sie.

In Live gilt: HTTP 202 bedeutet, dass die Anfrage entgegengenommen wurde, nicht dass die Rückerstattung abgeschlossen ist. Verfolgen Sie das Ergebnis über die Status-Endpunkte: requested, dann awaiting_provider_manual, dann completed; oder rejected / cancelled.

In der Sandbox wird eine Anfrage sofort abgeschlossen (standardmäßig completed). Senden Sie X-CAV-Sandbox-Scenario: rejected, um eine abgelehnte Rückerstattung zu testen.

Live-Anfragen werden geprüft. Verfolgen Sie die Rückabwicklung bis completed, rejected oder cancelled. Nur ein abgeschlossener refund sendet payment.refunded; einen void verfolgen Sie mit GET.

POST/api/v3/refundsIdempotency-Key erforderlich

Rückerstattung oder Stornierung beantragen

Parameter

FeldTypErforderlichBeschreibung
X-CAV-Sandbox-Scenariostring · headerOptionalNur für Sandbox-Schlüssel. Wählt das simulierte Ergebnis: completed (Standard) oder rejected (ohne Wirkung auf das virtuelle Wallet). Ein Live-Schlüssel, der diesen Header sendet, oder ein beliebiger Schlüssel, der einen anderen Wert sendet, erhält 422 1000001. Der Header ist nicht Teil der signierten Zeichenkette, aber Teil des Fingerabdrucks des Idempotency-Key; die Wiederverwendung eines Schlüssels mit einem anderen Szenario liefert daher 9000010. Das angewendete Szenario wird im gleichnamigen Antwort-Header zurückgegeben.
completedrejected

Anfrage-Body

FeldTypErforderlichBeschreibung
payment_codestringErforderlichCode der erfolgreich bezahlten Zahlung, die rückabgewickelt werden soll.
maxLength 16
operation_typestringErforderlichrefund erstattet eine endgültig verbuchte Zahlung; void storniert eine Kartenzahlung, die noch nicht endgültig verbucht ist. Beide eröffnen eine Rückabwicklungsanfrage (Status requested). Ein Operator prüft sie; nach der Genehmigung wird der Betrag auf Ihrem Guthaben reserviert und der Status lautet awaiting_provider_manual, bis die Rückerstattungsreferenz des Anbieters erfasst ist (completed); andernfalls endet die Anfrage mit rejected oder cancelled (die Reservierung wird aufgehoben). Dieser Endpunkt ruft den Anbieter nicht auf.
refundvoid
reasonstringErforderlichGrund für die Rückabwicklung.
minLength 3maxLength 500

Anfrage-Body · Beispiel

{
  "payment_code": "ab34cdef",
  "operation_type": "refund",
  "reason": "Customer cancelled the order."
}

Antwort · 202

Rückabwicklung angefordert. Sie wird geprüft und von Hand an den Anbieter übermittelt. Mit einem Sandbox-Schlüssel wird das simulierte Ergebnis zurückgegeben (environment sandbox); auch eine idempotente Wiederholung liefert 202.

Reversal

FeldTypErforderlichBeschreibung
idstringErforderlichKennung der Rückabwicklungsanfrage (UUID).
operationstringErforderlichArt des Vorgangs.
refundvoid
statusstringErforderlichLebenszyklus der Rückabwicklung: requested (wartet auf einen Operator) → awaiting_provider_manual (genehmigt; der Betrag wird reserviert, bis die Rückerstattungsreferenz des Anbieters erfasst ist) → completed, oder rejected / cancelled (die Reservierung wird aufgehoben). processing und failed sind reservierte Werte, die derzeit für Zahlungsrückabwicklungen nicht verwendet werden. Mit einem Sandbox-Schlüssel steht der Status sofort fest: completed (Standard) oder rejected.
requestedprocessingcompletedrejectedfailedawaiting_provider_manualcancelled
amountstringErforderlichVollständiger Betrag der rückabgewickelten Zahlung in der Währung der Zahlung selbst (derselbe Betrag und dieselbe Währung wie bei der Zahlung und ihrem Webhook payment.refunded), als Dezimalzeichenkette mit 2 Nachkommastellen. Der Status requested bedeutet nicht, dass Geld bewegt wurde.
currencystringErforderlichWährung von amount: der currency_code der rückabgewickelten Zahlung.
reasonstringErforderlichVon Ihnen angegebener Grund.
provider_referencestring | nullErforderlichRückerstattungsreferenz des Anbieters, die eingetragen wird, sobald die Rückerstattung über das echte POS abgeschlossen ist. In der Sandbox wird beim Abschluss der simulierten Rückabwicklung eine synthetische Referenz mit dem Präfix SBX- zurückgegeben; sie ist kein Datensatz des Anbieters.
provider_refunded_atstring · date-time | nullErforderlichZeitpunkt, zu dem die Rückerstattung des Anbieters erfasst wurde (UTC). Bis zum manuellen Abschluss null.
created_atstring · date-timeErforderlichZeitpunkt der Anfrage (UTC).
updated_atstring · date-time | nullErforderlichLetzte Statusänderung (UTC).
payment_codestring | nullErforderlichCode der Zahlung, zu der diese Rückabwicklung gehört (der beim Erstellen der Zahlung zurückgegebene code).
environmentstringErforderlichUmgebung der Rückabwicklung (die Umgebung des Signaturschlüssels).
livesandbox

Antwort · Beispiel

{
  "id": "9B2E6F3A-0C1D-4E5F-8A7B-000000000001",
  "operation": "refund",
  "status": "requested",
  "amount": "250.00",
  "currency": "USD",
  "reason": "Customer cancelled the order.",
  "provider_reference": "string",
  "provider_refunded_at": "2026-09-26T09:00:00.000Z",
  "created_at": "2026-09-26T09:00:00.000Z",
  "updated_at": "2026-09-26T09:00:00.000Z",
  "payment_code": "ab34cdef",
  "environment": "live"
}

Mögliche Fehler

GET/api/v3/refunds

Rückerstattungen auflisten

Parameter

FeldTypErforderlichBeschreibung
pageinteger · queryOptionalSeitennummer.
minimum 1
per_pageinteger · queryOptionalEinträge pro Seite.
minimum 1maximum 100
statusstring · queryOptionalNach Status filtern.
requestedprocessingawaiting_provider_manualcompletedrejectedfailedcancelled
operation_typestring · queryOptionalNach Vorgang filtern.
refundvoid

Antwort · 200

Paginierte Rückerstattungen.

FeldTypBeschreibung
dataReversal[]
metaPaginationMeta

Antwort · Beispiel

{
  "data": [
    {
      "id": "9B2E6F3A-0C1D-4E5F-8A7B-000000000001",
      "operation": "refund",
      "status": "requested",
      "amount": "250.00",
      "currency": "USD",
      "reason": "Customer cancelled the order.",
      "provider_reference": "string",
      "provider_refunded_at": "2026-09-26T09:00:00.000Z",
      "created_at": "2026-09-26T09:00:00.000Z",
      "updated_at": "2026-09-26T09:00:00.000Z",
      "payment_code": "ab34cdef",
      "environment": "live"
    }
  ],
  "meta": {
    "page": 1,
    "per_page": 20,
    "total": 1,
    "total_pages": 1
  }
}

Mögliche Fehler

GET/api/v3/refunds/{id}

Status einer Rückerstattung abrufen

Parameter

FeldTypErforderlichBeschreibung
idstring · uuid · pathErforderlichDie ID der Rückabwicklung.

Antwort · 200

Die Rückabwicklung.

Objekt: Reversal (Felder siehe Rückerstattung oder Stornierung beantragen).

Antwort · Beispiel

{
  "id": "9B2E6F3A-0C1D-4E5F-8A7B-000000000001",
  "operation": "refund",
  "status": "requested",
  "amount": "250.00",
  "currency": "USD",
  "reason": "Customer cancelled the order.",
  "provider_reference": "string",
  "provider_refunded_at": "2026-09-26T09:00:00.000Z",
  "created_at": "2026-09-26T09:00:00.000Z",
  "updated_at": "2026-09-26T09:00:00.000Z",
  "payment_code": "ab34cdef",
  "environment": "live"
}

Mögliche Fehler

Benachrichtigung

Wird eine Rückerstattung abgeschlossen, geht eine signierte Benachrichtigung payment.refunded an die Webhook-URL der Zahlung. Header, Signatur und Wiederholungen entsprechen den Webhooks. Ein void sendet keine Benachrichtigung.

POSTpayment.refunded

Signierte Benachrichtigung payment.refunded an die Händler-URL

Anfrage-Body

FeldTypErforderlichBeschreibung
event_idstring · uuidErforderlich
event_typestringErforderlich
payment.refunded
environmentstringErforderlich
sandboxlive
occurred_atstring · date-timeErforderlich
refundobjectErforderlich
refund.public_idstring · uuidErforderlich
refund.statusstringErforderlich
completed
refund.amountstringErforderlichPositiver Betrag als Dezimalzeichenkette mit fester Skala und 2 Nachkommastellen. "0.00" wird nicht akzeptiert.
refund.currency_codestringErforderlichFiat-Währungscode, beschränkt auf die vier unterstützten Währungen.
USDEURAEDTRY
refund.completed_atstring · date-timeErforderlichDerselbe Zeitpunkt wie occurred_at.
paymentobjectErforderlich
payment.public_idstring · uuidErforderlich
payment.codestringErforderlich
minLength 1maxLength 16
payment.merchant_referencestring | nullErforderlich
maxLength 64
orderobjectErforderlich
order.public_idstring · uuidErforderlich

Anfrage-Body · Beispiel

{
  "event_id": "B5D4E456-EFC1-4EC2-A613-D64A16E45BD5",
  "event_type": "payment.refunded",
  "environment": "sandbox",
  "occurred_at": "2026-09-28T12:00:00.000Z",
  "refund": {
    "public_id": "A1B2C3D4-E5F6-4789-8ABC-DEF012345678",
    "status": "completed",
    "amount": "100.00",
    "currency_code": "USD",
    "completed_at": "2026-09-28T12:00:00.000Z"
  },
  "payment": {
    "public_id": "11111111-2222-4333-8444-555555555555",
    "code": "ab34cdef",
    "merchant_reference": "SIP-2026-0001"
  },
  "order": {
    "public_id": "66666666-7777-4888-8999-AAAAAAAAAAAA"
  }
}

Auszahlungen

Fordern Sie eine USDT-Auszahlung (TRC20) an und verfolgen Sie sie.

In Live gilt: HTTP 201 bedeutet, dass die Anfrage angenommen und der Betrag reserviert wurde, nicht dass die USDT gesendet wurden. Prüfen Sie status und tx_hash und kontrollieren Sie die Adresse doppelt: Eine Überweisung auf der Chain lässt sich nicht rückgängig machen.

Eine Sandbox-Auszahlung belastet das virtuelle Guthaben und sendet nie etwas auf die Chain. Es gelten dieselben Regeln wie in der Live-Umgebung, einschließlich Mindestbetrag, Tageslimit und Umrechnungskurs. Senden Sie X-CAV-Sandbox-Scenario: rejected, um eine Ablehnung zu testen. Die Sandbox akzeptiert die TRON-Nulladresse als Ziel; die Live-Umgebung lehnt Burn-Adressen mit 1000030 ab.

Mindestbetrag und Tageslimit werden von Manuell pro Konto festgelegt; unterhalb des Mindestbetrags liefert die API 9000019, oberhalb des Limits 9000021. In der Live-Umgebung sendet ein Operator von Manuell die USDT und trägt tx_hash ein (sent) oder lehnt die Anfrage mit einer Begründung ab (rejected); der Betrag geht dann an Ihr Guthaben zurück.

POST/api/v3/withdrawalsIdempotency-Key erforderlich

USDT-Auszahlung beantragen

Parameter

FeldTypErforderlichBeschreibung
X-CAV-Sandbox-Scenariostring · headerOptionalNur für Sandbox-Schlüssel. Wählt das simulierte Ergebnis: sent (Standard) oder rejected (ohne Wirkung auf das virtuelle Wallet). Ein Live-Schlüssel, der diesen Header sendet, oder ein beliebiger Schlüssel, der einen anderen Wert sendet, erhält 422 1000001. Der Header ist nicht Teil der signierten Zeichenkette, aber Teil des Fingerabdrucks des Idempotency-Key; die Wiederverwendung eines Schlüssels mit einem anderen Szenario liefert daher 9000010. Das angewendete Szenario wird im gleichnamigen Antwort-Header zurückgegeben.
sentrejected

Anfrage-Body

FeldTypErforderlichBeschreibung
amountstringErforderlichAus dem API-Wallet zu reservierender Betrag in der konfigurierten Basiswährung der Plattform, als Dezimalzeichenkette mit 2 Nachkommastellen. Mindestbetrag und Tageslimit legt der Plattformbetreiber pro Konto fest: Ein Betrag unter dem Mindestbetrag liefert 9000019, ein Betrag über dem Tageslimit 9000021. Ihre Limits erfahren Sie bei Ihrem Account-Manager.
addressstringErforderlichIhre eigene, geprüfte TRON-Adresse für eine USDT-TRC20-Auszahlung. Das Beispiel ist ein Platzhalter und wird unverändert abgelehnt.
maxLength 64
address_acknowledgedbooleanErforderlichMuss true sein – Sie bestätigen, dass die Zieladresse korrekt ist und die Überweisung nicht rückgängig gemacht werden kann.

Anfrage-Body · Beispiel

{
  "amount": "250.00",
  "address": "REPLACE_WITH_YOUR_TRON_ADDRESS",
  "address_acknowledged": true
}

Antwort · 201

Auszahlung angefordert. Das Guthaben wird reserviert; der On-Chain-Versand erfolgt von Hand. Mit einem Sandbox-Schlüssel wird das simulierte Ergebnis zurückgegeben (environment sandbox); auch eine idempotente Wiederholung liefert 201.

Withdrawal

FeldTypErforderlichBeschreibung
idstringErforderlichKennung der Auszahlungsanfrage (UUID).
statusstringErforderlichLebenszyklusstatus der Auszahlung: requested → sent oder rejected. Den On-Chain-Versand führt der Plattformbetreiber von Hand durch. Mit einem Sandbox-Schlüssel steht der Status sofort fest: sent (Standard) oder rejected.
requestedsentrejected
amountstringErforderlichAngeforderter und aus dem API-Wallet reservierter Betrag in der Basiswährung der Plattform, als Dezimalzeichenkette mit 2 Nachkommastellen; es ist kein USDT-Betrag.
currencystringErforderlichBasiswährung, in der der Betrag angegeben ist.
assetstringErforderlichAuszahlungs-Asset (USDT).
networkstringErforderlichAuszahlungsnetzwerk (TRC20).
addressstringErforderlichVon Ihnen angegebene Zieladresse.
usdt_amountstringErforderlichBeim Annehmen der Anfrage berechneter USDT-Betrag als Dezimalzeichenkette mit fester Skala und 6 Nachkommastellen. Dieses Feld allein bestätigt keine Überweisung auf der Chain.
tx_hashstring | nullErforderlichOn-Chain-Transaktions-Hash, der nach dem Versand eingetragen wird. In der Sandbox wird für eine Auszahlung mit sent ein synthetischer 64-stelliger Hash zurückgegeben; es findet keine Überweisung auf der Chain statt.
rejection_reasonstring | nullErforderlichBegründung, die bei Ablehnung eingetragen wird. In der Sandbox enthält eine abgelehnte Auszahlung Sandbox scenario: rejected.
requested_atstring · date-timeErforderlichZeitpunkt der Anfrage (UTC).
processed_atstring · date-time | nullErforderlichZeitpunkt des Versands oder der Ablehnung (UTC).
created_atstring · date-timeErforderlichErstellungszeitpunkt des Datensatzes (UTC).
environmentstringErforderlichUmgebung der Auszahlung (die Umgebung des Signaturschlüssels).
livesandbox

Antwort · Beispiel

{
  "id": "7F0C2A94-3B1E-4D58-9A6F-1C2D3E4F5A6B",
  "status": "requested",
  "amount": "250.00",
  "currency": "USD",
  "asset": "USDT",
  "network": "TRC20",
  "address": "REPLACE_WITH_YOUR_TRON_ADDRESS",
  "usdt_amount": "249.000000",
  "tx_hash": null,
  "rejection_reason": null,
  "requested_at": "2026-09-26T09:30:00.000Z",
  "processed_at": null,
  "created_at": "2026-09-26T09:30:00.000Z",
  "environment": "live"
}

Mögliche Fehler

GET/api/v3/withdrawals

Auszahlungen auflisten

Parameter

FeldTypErforderlichBeschreibung
pageinteger · queryOptionalSeitennummer.
minimum 1
per_pageinteger · queryOptionalEinträge pro Seite.
minimum 1maximum 100
statusstring · queryOptionalNach Status filtern.
requestedsentrejected

Antwort · 200

Paginierte Auszahlungen.

FeldTypBeschreibung
dataWithdrawal[]
metaPaginationMeta

Antwort · Beispiel

{
  "data": [
    {
      "id": "7F0C2A94-3B1E-4D58-9A6F-1C2D3E4F5A6B",
      "status": "requested",
      "amount": "250.00",
      "currency": "USD",
      "asset": "USDT",
      "network": "TRC20",
      "address": "REPLACE_WITH_YOUR_TRON_ADDRESS",
      "usdt_amount": "249.000000",
      "tx_hash": null,
      "rejection_reason": null,
      "requested_at": "2026-09-26T09:30:00.000Z",
      "processed_at": null,
      "created_at": "2026-09-26T09:30:00.000Z",
      "environment": "live"
    }
  ],
  "meta": {
    "page": 1,
    "per_page": 20,
    "total": 1,
    "total_pages": 1
  }
}

Mögliche Fehler

GET/api/v3/withdrawals/{id}

Status einer Auszahlung abrufen

Parameter

FeldTypErforderlichBeschreibung
idstring · uuid · pathErforderlichDie ID der Auszahlung.

Antwort · 200

Die Auszahlung.

Objekt: Withdrawal (Felder siehe USDT-Auszahlung beantragen).

Antwort · Beispiel

{
  "id": "7F0C2A94-3B1E-4D58-9A6F-1C2D3E4F5A6B",
  "status": "requested",
  "amount": "250.00",
  "currency": "USD",
  "asset": "USDT",
  "network": "TRC20",
  "address": "REPLACE_WITH_YOUR_TRON_ADDRESS",
  "usdt_amount": "249.000000",
  "tx_hash": null,
  "rejection_reason": null,
  "requested_at": "2026-09-26T09:30:00.000Z",
  "processed_at": null,
  "created_at": "2026-09-26T09:30:00.000Z",
  "environment": "live"
}

Mögliche Fehler

Rückbuchungen

Listen Sie Rückbuchungen auf und reichen Sie Ihre Nachweise ein.

Streitfälle kommen von den Kartennetzwerken, daher legen Sie in der Sandbox selbst einen Test-Streitfall mit POST /api/v3/sandbox/disputes an. Siehe Kontovorgänge testen.

Manuell erfasst einen Streitfall, sobald die Bank ihn meldet. Der strittige Betrag wird von Ihrem Guthaben abgezogen (das Guthaben kann negativ werden, und can_withdraw wird false) und wieder gutgeschrieben, wenn Sie gewinnen. Senden Sie Ihre Nachweise vor evidence_due_at; ein neuer Idempotency-Key ersetzt Ihre frühere Notiz, solange der Streitfall offen ist.

GET/api/v3/disputes

Streitfälle auflisten

Parameter

FeldTypErforderlichBeschreibung
pageinteger · queryOptionalSeitennummer.
minimum 1
per_pageinteger · queryOptionalEinträge pro Seite.
minimum 1maximum 100
statusstring · queryOptionalNach Status filtern.
openunder_reviewwonlost

Antwort · 200

Paginierte Streitfälle.

FeldTypBeschreibung
dataDispute[]
metaPaginationMeta

Dispute

FeldTypErforderlichBeschreibung
idstringErforderlichKennung des Streitfalls (UUID).
servicestringErforderlichDienst, zu dem die strittige Zahlung gehört: api für eine über diese API erstellte Zahlung, link für einen Zahlungslink.
amountstringErforderlichStrittiger Betrag (Dezimalzeichenkette).
currencystringErforderlichWährung des Streitfalls.
statusstringErforderlichStatus des Streitfalls.
openunder_reviewwonlost
reasonstringErforderlichKategorie des Streitfallgrunds.
fraudunauthorizedproduct_not_deliveredduplicateamount_mismatchother
reason_notestring | nullErforderlichBegründung der Bank, wörtlich übernommen.
occurred_onstring · dateErforderlichDatum, an dem der Streitfall eröffnet wurde (YYYY-MM-DD).
evidence_due_atstring · date-time | nullErforderlichFrist für die Einreichung von Nachweisen (UTC). Ein Sandbox-Streitfall bleibt nach der Erstellung 7 Tage lang für Nachweise offen.
evidence_submitted_atstring · date-time | nullErforderlichZeitpunkt, zu dem die Plattform die Verteidigung bei der Bank eingereicht hat.
merchant_evidence_notestring | nullErforderlichDie von Ihnen eingereichte Notiz.
merchant_evidence_submitted_atstring · date-time | nullErforderlichZeitpunkt, zu dem Sie Ihre Notiz eingereicht haben.
resolved_atstring · date-time | nullErforderlichZeitpunkt des Abschlusses des Streitfalls.
created_atstring · date-timeErforderlichErstellungszeitpunkt des Datensatzes (UTC).
payment_codestring | nullErforderlichCode der API-Zahlung, zu der der Streitfall gehört (der beim Erstellen der Zahlung zurückgegebene code); null, wenn der Streitfall keiner API-Zahlung zugeordnet ist.
environmentstringErforderlichUmgebung des Streitfalls (die Umgebung des Signaturschlüssels).
livesandbox

Antwort · Beispiel

{
  "data": [
    {
      "id": "9B2E6F3A-0C1D-4E5F-8A7B-000000000001",
      "service": "api",
      "amount": "250.00",
      "currency": "USD",
      "status": "open",
      "reason": "fraud",
      "reason_note": "string",
      "occurred_on": "2026-09-26",
      "evidence_due_at": "2026-09-26T09:00:00.000Z",
      "evidence_submitted_at": "2026-09-26T09:00:00.000Z",
      "merchant_evidence_note": "string",
      "merchant_evidence_submitted_at": "2026-09-26T09:00:00.000Z",
      "resolved_at": "2026-09-26T09:00:00.000Z",
      "created_at": "2026-09-26T09:00:00.000Z",
      "payment_code": "ab34cdef",
      "environment": "live"
    }
  ],
  "meta": {
    "page": 1,
    "per_page": 20,
    "total": 1,
    "total_pages": 1
  }
}

Mögliche Fehler

GET/api/v3/disputes/{id}

Streitfall abrufen

Parameter

FeldTypErforderlichBeschreibung
idstring · uuid · pathErforderlichDie ID des Streitfalls.

Antwort · 200

Der Streitfall.

Objekt: Dispute (Felder siehe Streitfälle auflisten).

Antwort · Beispiel

{
  "id": "9B2E6F3A-0C1D-4E5F-8A7B-000000000001",
  "service": "api",
  "amount": "250.00",
  "currency": "USD",
  "status": "open",
  "reason": "fraud",
  "reason_note": "string",
  "occurred_on": "2026-09-26",
  "evidence_due_at": "2026-09-26T09:00:00.000Z",
  "evidence_submitted_at": "2026-09-26T09:00:00.000Z",
  "merchant_evidence_note": "string",
  "merchant_evidence_submitted_at": "2026-09-26T09:00:00.000Z",
  "resolved_at": "2026-09-26T09:00:00.000Z",
  "created_at": "2026-09-26T09:00:00.000Z",
  "payment_code": "ab34cdef",
  "environment": "live"
}

Mögliche Fehler

POST/api/v3/disputes/{id}/evidenceIdempotency-Key erforderlich

Nachweis zum Streitfall einreichen

Parameter

FeldTypErforderlichBeschreibung
idstring · uuid · pathErforderlichDie ID des Streitfalls.

Anfrage-Body

FeldTypErforderlichBeschreibung
notestringErforderlichIhr Nachweistext zum Streitfall.
minLength 3maxLength 4000

Anfrage-Body · Beispiel

{
  "note": "Order 4821 was delivered on 2026-09-25. Carrier reference ABC123."
}

Antwort · 200

Nachweis erfasst; der Status des Streitfalls ändert sich nicht. Eine identische idempotente Wiederholung liefert den ursprünglichen Antwort-Body.

Objekt: Dispute (Felder siehe Streitfälle auflisten).

Antwort · Beispiel

{
  "id": "9B2E6F3A-0C1D-4E5F-8A7B-000000000001",
  "service": "api",
  "amount": "250.00",
  "currency": "USD",
  "status": "open",
  "reason": "fraud",
  "reason_note": "string",
  "occurred_on": "2026-09-26",
  "evidence_due_at": "2026-09-26T09:00:00.000Z",
  "evidence_submitted_at": "2026-09-26T09:00:00.000Z",
  "merchant_evidence_note": "string",
  "merchant_evidence_submitted_at": "2026-09-26T09:00:00.000Z",
  "resolved_at": "2026-09-26T09:00:00.000Z",
  "created_at": "2026-09-26T09:00:00.000Z",
  "payment_code": "ab34cdef",
  "environment": "live"
}

Mögliche Fehler

Zustellungen verwalten

Prüfen Sie Webhook-Zustellungen und wiederholen Sie fehlgeschlagene.

Die Adresse für Benachrichtigungen wird je Umgebung unter “API-Schlüssel und Integration” festgelegt. Die folgenden Endpunkte listen Zustellungen auf und reihen fehlgeschlagene erneut ein.

GET/api/v3/webhooks/deliveries

Webhook-Zustellungen auflisten

Parameter

FeldTypErforderlichBeschreibung
pageinteger · queryOptionalSeitennummer.
minimum 1
per_pageinteger · queryOptionalEinträge pro Seite.
minimum 1maximum 100
statusstring · queryOptionalNach Status filtern.
pendingdeliveredfailed

Antwort · 200

Paginierte Zustellungen.

FeldTypBeschreibung
dataWebhookDelivery[]
metaPaginationMeta

WebhookDelivery

FeldTypBeschreibung
idstringKennung der Zustellung (UUID).
eventstringEreignistyp der Zustellung: payment.paid, payment.refunded oder payment.failed. Ein fehlgeschlagener Versuch ist nicht endgültig; die Zahlung bleibt created und kann später bezahlt werden.
statusstringStatus der Zustellung.
pendingdeliveredfailed
payment_codestring | nullZugehöriger Zahlungscode, falls vorhanden.
attempt_countintegerBisherige Anzahl der Zustellversuche.
last_status_codeinteger | nullHTTP-Status des letzten Versuchs.
last_errorstring | nullLegacy-Rohfehler der Zustellung; verwenden Sie last_error_code und last_error_message.
last_error_codestring | nullStabiler maschinenlesbarer Fehlercode für die Zustellung.
invalid_webhook_targetwebhook_target_private_networkwebhook_environment_invalidwebhook_signing_unavailablewebhook_response_unsuccessfulwebhook_egress_proxy_unreachablewebhook_unreachablewebhook_delivery_failed
last_error_messagestring | nullKurze lesbare Fehlermeldung zur Zustellung, ausgewählt über Accept-Language.
next_attempt_atstring · date-time | nullZeitpunkt des nächsten geplanten Wiederholungsversuchs (UTC).
delivered_atstring · date-time | nullZeitpunkt der Zustellung (UTC).
created_atstring · date-timeErstellungszeitpunkt des Datensatzes (UTC).

Antwort · Beispiel

{
  "data": [
    {
      "id": "9B2E6F3A-0C1D-4E5F-8A7B-000000000001",
      "event": "payment.paid",
      "status": "pending",
      "payment_code": null,
      "attempt_count": 1,
      "last_status_code": null,
      "last_error": null,
      "last_error_code": null,
      "last_error_message": null,
      "next_attempt_at": null,
      "delivered_at": null,
      "created_at": "2026-09-26T09:00:00.000Z"
    }
  ],
  "meta": {
    "page": 1,
    "per_page": 20,
    "total": 1,
    "total_pages": 1
  }
}

Mögliche Fehler

GET/api/v3/webhooks/deliveries/{id}

Webhook-Zustellung abrufen

Parameter

FeldTypErforderlichBeschreibung
idstring · uuid · pathErforderlichDie ID der Zustellung.

Antwort · 200

Die Zustellung, einschließlich URL und Payload.

WebhookDeliveryDetail

FeldTypBeschreibung
idstringKennung der Zustellung (UUID).
eventstringEreignistyp der Zustellung: payment.paid, payment.refunded oder payment.failed. Ein fehlgeschlagener Versuch ist nicht endgültig; die Zahlung bleibt created und kann später bezahlt werden.
statusstringStatus der Zustellung.
pendingdeliveredfailed
payment_codestring | nullZugehöriger Zahlungscode, falls vorhanden.
attempt_countintegerBisherige Anzahl der Zustellversuche.
last_status_codeinteger | nullHTTP-Status des letzten Versuchs.
last_errorstring | nullLegacy-Rohfehler der Zustellung; verwenden Sie last_error_code und last_error_message.
last_error_codestring | nullStabiler maschinenlesbarer Fehlercode für die Zustellung.
invalid_webhook_targetwebhook_target_private_networkwebhook_environment_invalidwebhook_signing_unavailablewebhook_response_unsuccessfulwebhook_egress_proxy_unreachablewebhook_unreachablewebhook_delivery_failed
last_error_messagestring | nullKurze lesbare Fehlermeldung zur Zustellung, ausgewählt über Accept-Language.
next_attempt_atstring · date-time | nullZeitpunkt des nächsten geplanten Wiederholungsversuchs (UTC).
delivered_atstring · date-time | nullZeitpunkt der Zustellung (UTC).
created_atstring · date-timeErstellungszeitpunkt des Datensatzes (UTC).
urlstringIhre Webhook-URL für diese Zustellung.
payloadobject | nullDer gesendete JSON-Body.

Antwort · Beispiel

{
  "id": "9B2E6F3A-0C1D-4E5F-8A7B-000000000001",
  "event": "payment.paid",
  "status": "pending",
  "payment_code": null,
  "attempt_count": 1,
  "last_status_code": null,
  "last_error": null,
  "last_error_code": null,
  "last_error_message": null,
  "next_attempt_at": null,
  "delivered_at": null,
  "created_at": "2026-09-26T09:00:00.000Z",
  "url": "string",
  "payload": null
}

Mögliche Fehler

POST/api/v3/webhooks/deliveries/{id}/retryIdempotency-Key erforderlich

Fehlgeschlagene Zustellung erneut versuchen

Parameter

FeldTypErforderlichBeschreibung
idstring · uuid · pathErforderlichDie ID der Zustellung.

Antwort · 200

Fehlgeschlagene Zustellung erneut eingereiht. Eine identische idempotente Wiederholung liefert die ursprüngliche Antwort zur Einreihung, ohne einen weiteren Versuch auszulösen.

Objekt: WebhookDeliveryDetail (Felder siehe Webhook-Zustellung abrufen).

Antwort · Beispiel

{
  "id": "9B2E6F3A-0C1D-4E5F-8A7B-000000000001",
  "event": "payment.paid",
  "status": "pending",
  "payment_code": null,
  "attempt_count": 1,
  "last_status_code": null,
  "last_error": null,
  "last_error_code": null,
  "last_error_message": null,
  "next_attempt_at": null,
  "delivered_at": null,
  "created_at": "2026-09-26T09:00:00.000Z",
  "url": "string",
  "payload": null
}

Mögliche Fehler

Zustellfehler

last_error ist ein Legacy-Feld; verwenden Sie in neuen Integrationen last_error_code.

FeldBeschreibung
invalid_webhook_targetDas Webhook-Ziel ist ungültig.
webhook_target_private_networkDas Webhook-Ziel wird zu einem privaten Netzwerk aufgelöst.
webhook_environment_invalidDie Webhook-Umgebung ist ungültig.
webhook_signing_unavailableDas Webhook konnte nicht signiert werden.
webhook_response_unsuccessfulDas Ziel hat keine 2xx-Antwort gegeben.
webhook_egress_proxy_unreachableDer Ausgangs-Proxy für die Zustellung ist nicht erreichbar.
webhook_unreachableDas Webhook-Ziel ist nicht erreichbar.
webhook_delivery_failedDie Webhook-Zustellung ist fehlgeschlagen.

Dienststatus und Wartung

Einzelne Dienste können vorübergehend in Wartung genommen werden. Betroffen sind nur neue Vorgänge; dieser Abschnitt zeigt, was stoppt, was weiterläuft und wie Sie den Status abfragen.

GET/api/v3/service-statusÖffentlich

Dienststatus abrufen

Antwort · 200

Dienste in Wartung (die Liste kann leer sein).

FeldTypErforderlichBeschreibung
dataServiceStatusItem[]ErforderlichDienste, die sich gerade in Wartung befinden; eine leere Liste bedeutet, dass keiner betroffen ist.

ServiceStatusItem

FeldTypErforderlichBeschreibung
servicestringErforderlichDienstcode: api_collection (über die API erstellte Zahlungen und deren Zahlungsseiten), withdrawals (Auszahlungsanfragen) oder einer der Werte link_collection, storefront, usdt_sales und balance_load (weitere Dienste der Plattform).
api_collectionlink_collectionwithdrawalsstorefrontusdt_salesbalance_load
untilstring · date-time | nullErforderlichVoraussichtlicher Zeitpunkt der Rückkehr (UTC, ISO-8601) oder null. Es ist nur eine Schätzung: Die Wartung endet nicht von selbst, und nach Ablauf dieses Zeitpunkts ist das Feld null.
notestring | nullErforderlichKurze Klartextnachricht des Plattformbetreibers oder null.
maxLength 240

Antwort · Beispiel

{
  "data": [
    {
      "service": "api_collection",
      "until": "2026-10-01T12:00:00Z",
      "note": "Planned maintenance."
    }
  ]
}

Weitere Antworten

  • 429Anfragelimit überschritten.

Mögliche Fehler

Paginierung

Listen-Endpunkte akzeptieren page (Standard 1) und per_page (Standard 20, maximal 100) und liefern data und meta.

PaginationMeta

FeldTypErforderlichBeschreibung
pageintegerErforderlichSeitennummer, beginnend bei 1.
per_pageintegerErforderlichEinträge pro Seite (1–100).
totalintegerErforderlichGesamtzahl der passenden Datensätze.
total_pagesintegerErforderlichceil(total / per_page).

Kontovorgänge testen

Guthaben, Rückerstattungen, Auszahlungen und Streitfälle funktionieren in der Sandbox mit denselben Endpunkten, Bodys und Fehlercodes wie live.

  • Sandbox-Zahlungen wechseln sofort zu available_amount, ohne ein Wertstellungsdatum abzuwarten.
  • Rückerstattungs- und Auszahlungsanfragen werden sofort abgeschlossen. Der Header X-CAV-Sandbox-Scenario wählt das Ergebnis.
  • Streitfälle kommen von der Bank, daher legen Sie in der Sandbox einen mit POST /api/v3/sandbox/disputes an.

Prüfen Sie Tests zu Rückerstattungen, Auszahlungen und Streitfällen unter “Sandbox-Vorgänge”.

Ergebnis wählen

Rückerstattungs- und Auszahlungsanfragen verwenden dieselben Endpunkte und Bodys wie in der Live-Umgebung. Um das Ergebnis zu wählen, fügen Sie den optionalen Header X-CAV-Sandbox-Scenario hinzu. Er ist nicht Teil der Signatur. Mit einem Live-Schlüssel wird der Header mit 422 (1000001) abgelehnt, damit aus einem Test nie eine echte Anfrage werden kann.

X-CAV-Sandbox-Scenario

X-CAV-Sandbox-Scenario: rejected
EndpunktHeader-WerteStandardWirkung
POST /api/v3/refundscompleted rejectedcompletedcompleted schließt die Rückerstattung ab und belastet das virtuelle Guthaben; rejected erfasst die Ablehnung und ändert nichts.
POST /api/v3/withdrawalssent rejectedsentsent belastet das virtuelle Guthaben und füllt tx_hash mit einem Platzhalterwert; rejected gibt den Betrag frei.
POST /api/v3/sandbox/disputesopen won lostopenWird im Request-Body angegeben, nicht in einem Header. open, won oder lost.

Test-Streitfall

Streitfälle kommen von den Kartenorganisationen und können live nicht von Ihrer Seite ausgelöst werden. Dies ist der einzige reine Sandbox-Endpunkt: Er erstellt einen Test-Streitfall für eine bezahlte Sandbox-Zahlung und gibt dasselbe Dispute-Objekt zurück wie die Live-Umgebung.

POST/api/v3/sandbox/disputesIdempotency-Key erforderlich

Sandbox-Streitfall für eine bezahlte Sandbox-Zahlung erstellen

Anfrage-Body

FeldTypErforderlichBeschreibung
payment_codestringErforderlichErsetzen Sie dies durch den Code einer bezahlten Zahlung, die Sie mit Ihrem eigenen Sandbox-Schlüssel erstellt haben.
maxLength 16
scenariostringOptionalZu erfassendes Ergebnis: open (Standard) bleibt für Nachweise offen; won und lost sind bereits abgeschlossen.
openwonlost
reasonstringErforderlichKategorie des Streitfallgrunds; dieselben Werte wie Dispute.reason.
fraudunauthorizedproduct_not_deliveredduplicateamount_mismatchother

Anfrage-Body · Beispiel

{
  "payment_code": "ab34cdef",
  "scenario": "open",
  "reason": "fraud"
}

Antwort · 201

Streitfall erfasst; eine idempotente Wiederholung liefert denselben Streitfall.

Objekt: Dispute (Felder siehe Streitfälle auflisten).

Antwort · Beispiel

{
  "id": "B5D4E456-EFC1-4EC2-A613-D64A16E45BD5",
  "service": "api",
  "amount": "250.00",
  "currency": "USD",
  "status": "open",
  "reason": "fraud",
  "reason_note": null,
  "occurred_on": "2026-09-30",
  "evidence_due_at": "2026-10-07T09:00:00.000Z",
  "evidence_submitted_at": null,
  "merchant_evidence_note": null,
  "merchant_evidence_submitted_at": null,
  "resolved_at": null,
  "created_at": "2026-09-30T09:00:00.000Z",
  "payment_code": "ab34cdef",
  "environment": "sandbox"
}

Mögliche Fehler

Sprechen Sie mit Ihrem Account-Manager über das Live-Terminal und den abschließenden Ende-zu-Ende-Test. Kontakt