Skip to main content
Search

Refund API Overview

The Refund API lets a BeneficiaryVASP request the return of a received virtual-asset transfer and coordinate the refund with the OriginatorVASP through GTR.

Required implementation roles: OriginatorVASP and BeneficiaryVASP

The requestId identifies the refund throughout the complete flow. If the original transfer was processed by GTR, use that transfer's requestId; GTR checks that the caller is the recorded BeneficiaryVASP and that the original transaction ID and beneficiary address match. A refund can also be opened without a prior GTR Travel Rule record by identifying the OriginatorVASP in originatorVaspInfo.vaspCode.

Roles and responsibilities

StepActorResponsibility
Submit refundBeneficiaryVASPIdentify the original transfer, amount, reason, and OriginatorVASP.
Review refundOriginatorVASPAccept the request and provide a refund destination, or reject it with a reason.
Execute refundBeneficiaryVASPAfter acceptance, transfer the assets to the supplied address.
Notify refund transactionBeneficiaryVASPSend the refund transaction ID and actual refunded value to GTR.
CancelBeneficiaryVASPCancel a refund that should no longer proceed.

Standard flow

Cancellation flow

The BeneficiaryVASP may cancel a non-terminal refund. GTR then sends callback type 22 to the OriginatorVASP with decision: CANCEL and the cancellation reason.

API and callback list

DirectionNameEndpoint or callback typeReceiving/acting role
VASP to GTRSubmit refundPOST /api/verify/v3/refund/submitBeneficiaryVASP
VASP to GTRSubmit decisionPOST /api/verify/v3/refund/decisionOriginatorVASP
VASP to GTRNotify refund TXIDPOST /api/verify/v3/refund/notify-txBeneficiaryVASP
VASP to GTRCancel refundPOST /api/verify/v3/refund/cancelBeneficiaryVASP
GTR to VASPRefund request querycallbackType: 21OriginatorVASP
GTR to VASPRefund decision/cancellationcallbackType: 22BeneficiaryVASP for a decision; OriginatorVASP for a cancellation
GTR to VASPRefund TXID notificationcallbackType: 23OriginatorVASP

State rules

  • requestId is limited to 128 characters and must remain unchanged across all steps.
  • A decision can be submitted only for a pending refund request.
  • A refund transaction can be notified only after an ACCEPT decision.
  • REJECT, successful TXID notification, and cancellation are terminal outcomes.
  • Reusing a requestId for another refund is rejected. Safe retries of an already completed identical action may return success without repeating the callback.