Submit evidence for a payment dispute
curl --request POST \
--url https://merchant-demo.zahlo.eu/api/v1/disputes/{id}/respond \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"evidence": {
"defenseReasonCode": "GoodsOrServicesProvided",
"documents": [
{
"defenseDocumentTypeCode": "DeliveryConfirmation",
"fileName": "delivery.pdf",
"contentType": "application/pdf",
"contentBase64": "JVBERi0xLjQK"
}
]
}
}
'import requests
url = "https://merchant-demo.zahlo.eu/api/v1/disputes/{id}/respond"
payload = { "evidence": {
"defenseReasonCode": "GoodsOrServicesProvided",
"documents": [
{
"defenseDocumentTypeCode": "DeliveryConfirmation",
"fileName": "delivery.pdf",
"contentType": "application/pdf",
"contentBase64": "JVBERi0xLjQK"
}
]
} }
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
evidence: {
defenseReasonCode: 'GoodsOrServicesProvided',
documents: [
{
defenseDocumentTypeCode: 'DeliveryConfirmation',
fileName: 'delivery.pdf',
contentType: 'application/pdf',
contentBase64: 'JVBERi0xLjQK'
}
]
}
})
};
fetch('https://merchant-demo.zahlo.eu/api/v1/disputes/{id}/respond', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "PSP-DEMO-1001",
"paymentId": "pay_demo_1001",
"status": "needs_response",
"amount": {
"amountMinor": 4990,
"currency": "EUR"
},
"reason": "Goods not received",
"evidenceDueAt": "2026-08-05T00:00:00"
}{
"error": "invalid_request",
"message": "amountMinor must be positive",
"requestId": "req_demo_1001"
}{
"error": "invalid_request",
"message": "amountMinor must be positive",
"requestId": "req_demo_1001"
}{
"error": "invalid_request",
"message": "amountMinor must be positive",
"requestId": "req_demo_1001"
}{
"error": "invalid_request",
"message": "amountMinor must be positive",
"requestId": "req_demo_1001"
}Payments
Submit evidence for a payment dispute
Submit evidence for a payment dispute. Use the response status and request ID to decide whether to retry, reconcile, or ask the customer for action.
POST
/
api
/
v1
/
disputes
/
{id}
/
respond
Submit evidence for a payment dispute
curl --request POST \
--url https://merchant-demo.zahlo.eu/api/v1/disputes/{id}/respond \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"evidence": {
"defenseReasonCode": "GoodsOrServicesProvided",
"documents": [
{
"defenseDocumentTypeCode": "DeliveryConfirmation",
"fileName": "delivery.pdf",
"contentType": "application/pdf",
"contentBase64": "JVBERi0xLjQK"
}
]
}
}
'import requests
url = "https://merchant-demo.zahlo.eu/api/v1/disputes/{id}/respond"
payload = { "evidence": {
"defenseReasonCode": "GoodsOrServicesProvided",
"documents": [
{
"defenseDocumentTypeCode": "DeliveryConfirmation",
"fileName": "delivery.pdf",
"contentType": "application/pdf",
"contentBase64": "JVBERi0xLjQK"
}
]
} }
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
evidence: {
defenseReasonCode: 'GoodsOrServicesProvided',
documents: [
{
defenseDocumentTypeCode: 'DeliveryConfirmation',
fileName: 'delivery.pdf',
contentType: 'application/pdf',
contentBase64: 'JVBERi0xLjQK'
}
]
}
})
};
fetch('https://merchant-demo.zahlo.eu/api/v1/disputes/{id}/respond', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "PSP-DEMO-1001",
"paymentId": "pay_demo_1001",
"status": "needs_response",
"amount": {
"amountMinor": 4990,
"currency": "EUR"
},
"reason": "Goods not received",
"evidenceDueAt": "2026-08-05T00:00:00"
}{
"error": "invalid_request",
"message": "amountMinor must be positive",
"requestId": "req_demo_1001"
}{
"error": "invalid_request",
"message": "amountMinor must be positive",
"requestId": "req_demo_1001"
}{
"error": "invalid_request",
"message": "amountMinor must be positive",
"requestId": "req_demo_1001"
}{
"error": "invalid_request",
"message": "amountMinor must be positive",
"requestId": "req_demo_1001"
}Authorizations
Server-side merchant API key. Never expose it in browser code.
Headers
Retry-safe key for create operations.
Path Parameters
The resource identifier returned by the merchant API.
Body
application/json
Show child attributes
Show child attributes