Zum Hauptinhalt springen
POST
curl

Selbstverwahrte Wallets

Wurde die Wallet der Gegenpartei als selbstverwahrt deklariert (counterparty.payment_method.method_type: "unhosted_wallet"), wartet der Transfer im Status UNCONFIRMED_OWNERSHIP. Wenn Sie diesen Endpoint mit confirmed: true aufrufen, wird erfasst, dass Ihr Kunde verifiziert hat, wer diese Wallet kontrolliert, und der Transfer wird abgeschlossen (COMPLETED). Das gilt sowohl für ausgehende Auszahlungen als auch für eingehende Einzahlungen. Bei einer eingehenden Einzahlung, deren On-Chain-Hash bereits bekannt ist, wechselt der Transfer zu FINISHED. Die verifizierte Wallet gehört der Gegenpartei: Bei einer ausgehenden Auszahlung ist es das Ziel, bei einer eingehenden Einzahlung die Quelle (die Wallet des Auftraggebers). Didit fügt sie dem Wallet-Adressbuch als hinsichtlich der Inhaberschaft verifiziertes Wallet unter dem Namen der Gegenpartei hinzu. Sie wird daher mit dem Namen der Gegenpartei abgeglichen, bei einer Einzahlung mit dem Namen des Auftraggebers. Ist im Adressbuch für diese Wallet bereits ein anderer Inhabername hinterlegt, wechselt der Transfer stattdessen zu COUNTERPARTY_MISMATCHED_DATA. Nennt der Transfer überhaupt keine Wallet der Gegenpartei, übergeben Sie wallet_address im Anfragekörper. Enthalten weder der Transfer noch die Anfrage eine Adresse, wird die Anfrage mit 400 abgelehnt. Mit confirmed: false wird der Transfer abgelehnt (COUNTERPARTY_VASP_GENERAL_DECLINE).

Autorisierungen

x-api-key
string
header
erforderlich

Der API-Schlüssel Ihrer Anwendung, aus Entwickler -> API-Schlüssel in der Business Console. Der Primärschlüssel hat Vollzugriff. Ein benannter Schlüssel kann im Geltungsbereich eingeschränkt werden: keine, Lese- oder Schreibberechtigung pro Ressource, beschränkt auf bestimmte Workflows oder genehmigte Sitzungen, auf eine Liste von IP-Adressen und auf ein Ablaufdatum. 401 bedeutet, dass der Schlüssel falsch, widerrufen oder abgelaufen ist; 403 bedeutet, dass kein Schlüssel gesendet wurde, der Schlüssel keinen Zugriff auf diese Ressource oder Aktion hat oder die Anfrage von einer Adresse außerhalb seiner IP-Liste stammte; 404 bei einer Sitzungsroute bedeutet, dass die Sitzung außerhalb der Workflows oder Status des Schlüssels liegt. Ein Schlüssel ohne Medienzugriff erhält Bild-, Video- und PDF-URLs als null, und ein Schlüssel ohne Schreibberechtigung für Sitzungen erhält Sitzungslinks und Token als null. Siehe https://docs.didit.me/console/api-keys.

Pfadparameter

transaction_id
string<uuid>
erforderlich

Stabile UUID von Didit der Transaktion, die Ihre Anwendung für diesen Transfer hält: die Transaktion der Begünstigtenseite bei einem Transfer über die Schiene INTERNAL oder die von Ihnen erstellte Transaktion (ausgehend oder eingehend), wenn die Wallet der Gegenpartei als selbstverwahrt deklariert wurde.

Body

application/json
confirmed
boolean
erforderlich

true, um die Inhaberschaft zu bestätigen, false, um sie abzulehnen.

wallet_address
string
Standard:""

Eingehende TRP-Transfers: die Zahlungsadresse, die Didit an das auftraggebende VASP zurückgibt, wenn Sie genehmigen. Standardmäßig die Adresse des übereinstimmenden Adressbucheintrags, danach beneficiary_data.wallet_address. Bei einem deklarierten Transfer mit selbstverwahrter Wallet, der keine Wallet der Gegenpartei benennt, die Wallet, deren Eigentümerschaft Sie verifiziert haben; ohne diese wird die Anfrage mit 400 abgelehnt. Bei anderen Transfers ignoriert.

Antwort

Der aktualisierte Transfer. Bei einem eingehenden Transfer bleiben die originator_data/beneficiary_data der Gegenpartei maskiert (data_masked: true), bis die Eigentümerstruktur bestätigt ist; danach zeichnet data_unmasked auf, wann, warum und durch wen dies geschah.

Vollständiges Transfer-Objekt, das von den Endpoints zur Eigentümerbestätigung und zum Abschließen/Abbrechen zurückgegeben wird. Solange das Wallet-Eigentum eines eingehenden Transfers unbestätigt ist, werden originator_data und beneficiary_data der Gegenpartei maskiert zurückgegeben (der erste Buchstabe jedes Wortes bleibt erhalten; Wallet, Chain und VASP-Routing bleiben lesbar) und data_masked ist true.

uuid
string<uuid>
status
enum<string>
Verfügbare Optionen:
AWAITING_COUNTERPARTY,
ON_HOLD,
COMPLETED,
FINISHED,
CANCELLED,
EXPIRED,
COUNTERPARTY_MISMATCHED_DATA,
COUNTERPARTY_VASP_NOT_FOUND,
COUNTERPARTY_VASP_NOT_REACHABLE,
UNCONFIRMED_OWNERSHIP,
COUNTERPARTY_VASP_GENERAL_DECLINE,
NOT_ENOUGH_COUNTERPARTY_DATA,
NOT_APPLICABLE
direction
enum<string>
Verfügbare Optionen:
INBOUND,
OUTBOUND
rail
enum<string> | null

Die Schiene (Rail), über die der Transfer geroutet wurde, oder null, wenn keine Schiene ausgewählt wurde (z. B. unterhalb des Schwellenwerts, eine selbstverwahrte Gegenpartei-Wallet, eine Registrierung nach Einzahlung oder keine erreichbare Gegenpartei). INTERNAL bedeutet, dass beide Seiten Didit-Anwendungen sind; EMAIL bedeutet, dass die Gegenpartei über einen per E-Mail gesendeten Abhol-Link erreicht wurde. TEST_VASP bedeutet, dass der Didit Test VASP den Sandbox-Transfer beantwortet hat. Über GTR, VERIFYVASP und SYGNA liest Didit die Antwort der Gegenpartei aus der Antwort des Netzwerks oder durch Abrufen alle 5 Minuten. TRUST sendet nur, sodass ein TRUST-Transfer auf AWAITING_COUNTERPARTY bleibt, bis er abläuft. Eine Netzwerk-Schiene wird nur verwendet, wenn Sie Ihre eigene Mitgliedschaft für dieses Netzwerk verknüpft haben. Sie wird nach der Rückgabe der Antwort auf die Transaktionserstellung ausgewählt, weshalb sie in dieser Antwort null ist.

Verfügbare Optionen:
INTERNAL,
TRP,
GTR,
TRUST,
VERIFYVASP,
SYGNA,
EMAIL,
TEST_VASP,
null
protocol
string | null
ivms_version
string
Beispiel:

"ivms101.2023"

required
boolean
ownership_confirmed
boolean | null
deadline_at
string<date-time> | null
timeline
object[]
counterparty_vasp
object | null
originator_data
object

Auftraggeber-Partei. Bei einer eingehenden Überweisung werden die Werte der Gegenpartei maskiert, bis die Eigentümerstruktur bestätigt ist.

beneficiary_data
object

Begünstigter. Bei eingehenden Übertragungen werden die Werte der Gegenpartei maskiert, bis die Eigentümerschaft bestätigt ist.

name_match
object · null · null

Der Namensabgleich, der über die Überweisung entschieden hat, oder null, bis einer ausgeführt wurde. Solange die Parteien maskiert sind und auf der Kopie des anderen Kunden eines INTERNAL-Austauschs, werden transfer_name, compared_name, matched_names und mismatched_names ausgeblendet. score und matched können voneinander abweichen: matched richtet sich nach der Strenge, score ist die Ähnlichkeit der beiden vollständigen Namen.

data_match
object | null

Feldweiser Abgleich der Daten der an der Übertragung beteiligten Partei mit den Informationen der Gegenseite über den Wallet-Inhaber. Nennt Felder und Ergebnisse, niemals Werte, damit die Lesbarkeit erhalten bleibt, während die Daten der Gegenpartei maskiert sind. Null, bis ein Abgleich ausgeführt wurde.

mismatched_fields
string[]

Kürzel für data_match.mismatched_fields. Leer, wenn keine Unterschiede vorliegen.

data_unmasked
object | null

Audit-Eintrag des Zeitpunkts, zu dem die Daten der Gegenpartei demaskiert wurden. Null, solange die Daten noch maskiert sind, sowie bei ausgehenden Überweisungen.

data_masked
boolean

Wahr, solange die personenbezogenen Daten der Gegenpartei in dieser Antwort maskiert sind.

created_at
string<date-time>
delivery
object | null

Status der neuesten Nachricht, die dieser Transfer der anderen Seite schuldet. Null, wenn der Transfer nie eine geschuldet hat (zum Beispiel bei einem Wert unter threshold_amount, bei einer deklarierten selbstverwahrten Wallet oder bei einer Sunrise-Registrierung).

discovery
object[]

Wie Didit nach der Gegenpartei gesucht hat, ein Eintrag pro ausgeführtem Schritt. Leer, wenn keine Ermittlung stattgefunden hat, beispielsweise bei einem eingehenden Transfer.

reason
string

Warum ein Transfer mit COUNTERPARTY_VASP_NOT_FOUND oder COUNTERPARTY_VASP_NOT_REACHABLE feststeckt; "" für jeden anderen Status. Eine fehlgeschlagene Zustellung bestimmt dies zuerst, ausschließlich bei COUNTERPARTY_VASP_NOT_REACHABLE: email_undeliverable (der E-Mail-Provider hat die Compliance-E-Mail abgelehnt und es bleibt keine Adresse mehr zum Ausprobieren: beim Senden, bei einer Erinnerung oder als später gemeldeter permanenter Bounce) oder delivery_failed (die zustellende Schiene ist endgültig fehlgeschlagen: eine Netzwerkschiene hat die Nachricht abgelehnt oder keine Wiederholungsversuche mehr übrig, ein TRP-Identitäts-Host hat nicht geantwortet oder der TRP-Host der Gegenpartei hat die Anfrage nicht akzeptiert). Andernfalls bestimmt es der discovery-Trace: awaiting_end_user (kein Schritt hat eine Gegenpartei benannt, die Didit erreichen kann), directory_match_no_route (ein Schritt hat einen Verzeichnis-VASP benannt, der keine Route hat), picked_member_without_proven_wallet (der Endbenutzer hat einen Didit-Kunden ausgewählt, der die Kontrolle über die Wallet nicht nachgewiesen hat) oder no_directory_match, wenn der Trace keinen anderen Grund liefert. Ein erneutes Senden bringt den Transfer voran, sodass der Grund zurückgesetzt wird. Siehe Warum ein Transfer feststeckt.

next_actions
object[]

Was den Transfer voranbringt; [] für jeden Status außer COUNTERPARTY_VASP_NOT_FOUND oder COUNTERPARTY_VASP_NOT_REACHABLE. email_undeliverable bietet update_compliance_email, dann resend. delivery_failed bietet resend. Ein Discovery-Grund bietet select_counterparty_vasp, declare_self_hosted, add_vasp_hint und resend.

chain_details
object

Wie die Blockchain des Transfers ihre beiden Wallets benennt, wenn mehr als eine Adresse eine andere bezahlt. Leer ({}) bei einem Account-Chain-Transfer (EVM, Solana, Tron), bei dem die beiden Adressen die Wallets sind. Abgleich, Weiterleitung und das Adressbuch lesen die Wallets zuerst von hier aus.

Zuletzt geändert am 7. November 2026