Raise and manage card transaction disputes, including submission via Dynamic Flow or direct API, file uploads, and dispute lifecycle tracking.
For implementation details, see:
- Disputes via Dynamic Flow — build a dispute UI using the Dynamic Flow framework
- Disputes via API — submit disputes directly, with per-reason request body details
- Dispute management — track and withdraw disputes
Dispute sub-statuses
The possible subStatus values are:
SUBMITTED— Initial statusIN_REVIEW— The dispute is under review or requires additional informationREFUNDED— The refund has been processedREJECTED— The dispute is invalidWITHDRAWN— The customer has withdrawn the disputeCONFIRMED— The dispute has been reviewed but a refund is not applicableREFUND_IN_PROGRESS— A refund is being processedATTEMPTING_RECOVERY— A chargeback request has been submittedRECOVERY_UNSUCCESSFUL— The chargeback attempt was unsuccessful
The status transition diagram may undergo modifications in the future and only covers regular pathways.

Retrieves the JSON for initiating the dispute flow. Use this endpoint with Wise's Dynamic Flow framework.
The JSON response must be passed into the Dynamic Flow framework, which handles the multi-step dispute submission including the generation of subsequent pages and the creation of the dispute.
Setting up the API
You will need to implement a GET API with the following format: GET https://{{yourApiUrl}}/v3/spend/profiles/{{profileId}}/dispute-form/flows/step/{{scheme}}/{{reason}}?transactionId={{transactionId}}
This API should forward the call to: POST https://{{wiseUrl}}/v3/spend/profiles/{{profileId}}/dispute-form/flows/step/{{scheme}}/{{reason}}?transactionId={{transactionId}}
This is required as the dynamic flow returned by Wise will automatically be configured to call your GET API. Use baseUrl or fetcher as part of the dynamic flow setup to redirect the Dynamic Flow JavaScript library to your domain.
For a full integration guide, including example backend implementation and styling, see Disputes via Dynamic Flow.
Dispute reason code supplied by the dispute reasons endpoint.
Optional UUID for correlating requests across systems. If provided, Wise echoes it back in the response. Maximum 36 characters. Learn more.
- Production Environmenthttps://api.wise.com/2026Q3/spend/profiles/{profileId}/dispute-form/flows/step/{scheme}/{reason}
- Sandbox Environmenthttps://api.wise-sandbox.com/2026Q3/spend/profiles/{profileId}/dispute-form/flows/step/{scheme}/{reason}
curl -i -X POST \
'https://api.wise.com/2026Q3/spend/profiles/14547572/dispute-form/flows/step/VISA/TROUBLE_WITH_GOODS_SERVICES?transactionId=6789' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-H 'X-External-Correlation-Id: f47ac10b-58cc-4372-a567-0e02b2c3d479' \
-d '{
"email": "support@partner.com"
}'Returns information required to populate the form with the correct information. Note how the action field contains the URL and method to the next step.
Echoed back when X-External-Correlation-Id was included in the request. Learn more.
Dynamic Flow JSON object. Pass this to the Dynamic Flow framework to render the dispute form.
{ "key": "TROUBLE_WITH_GOODS_SERVICES", "type": "form", "title": "There's a problem with the goods or service I ordered", "actions": [], "schemas": [], "layout": [ { "type": "decision", "options": [ … ] } ] }