Refund a payment
curl --request POST \
--url https://demo-api-harmony.compago.com/api/payment-method/{id}/payment/{paymentId}/refund \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"reason": "Customer requested cancellation"
}
'import requests
url = "https://demo-api-harmony.compago.com/api/payment-method/{id}/payment/{paymentId}/refund"
payload = { "reason": "Customer requested cancellation" }
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({reason: 'Customer requested cancellation'})
};
fetch('https://demo-api-harmony.compago.com/api/payment-method/{id}/payment/{paymentId}/refund', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://demo-api-harmony.compago.com/api/payment-method/{id}/payment/{paymentId}/refund",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'reason' => 'Customer requested cancellation'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://demo-api-harmony.compago.com/api/payment-method/{id}/payment/{paymentId}/refund"
payload := strings.NewReader("{\n \"reason\": \"Customer requested cancellation\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://demo-api-harmony.compago.com/api/payment-method/{id}/payment/{paymentId}/refund")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"reason\": \"Customer requested cancellation\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://demo-api-harmony.compago.com/api/payment-method/{id}/payment/{paymentId}/refund")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"reason\": \"Customer requested cancellation\"\n}"
response = http.request(request)
puts response.read_body{
"id": "11111111-2222-3333-4444-555555555555",
"status": "REFUNDED",
"amount": 123,
"currency": "MXN",
"externalId": "invoice-2025-01-8842"
}Saved cards
Refund Charge
POST
/
payment-method
/
{id}
/
payment
/
{paymentId}
/
refund
Refund a payment
curl --request POST \
--url https://demo-api-harmony.compago.com/api/payment-method/{id}/payment/{paymentId}/refund \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"reason": "Customer requested cancellation"
}
'import requests
url = "https://demo-api-harmony.compago.com/api/payment-method/{id}/payment/{paymentId}/refund"
payload = { "reason": "Customer requested cancellation" }
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({reason: 'Customer requested cancellation'})
};
fetch('https://demo-api-harmony.compago.com/api/payment-method/{id}/payment/{paymentId}/refund', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://demo-api-harmony.compago.com/api/payment-method/{id}/payment/{paymentId}/refund",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'reason' => 'Customer requested cancellation'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://demo-api-harmony.compago.com/api/payment-method/{id}/payment/{paymentId}/refund"
payload := strings.NewReader("{\n \"reason\": \"Customer requested cancellation\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://demo-api-harmony.compago.com/api/payment-method/{id}/payment/{paymentId}/refund")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"reason\": \"Customer requested cancellation\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://demo-api-harmony.compago.com/api/payment-method/{id}/payment/{paymentId}/refund")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"reason\": \"Customer requested cancellation\"\n}"
response = http.request(request)
puts response.read_body{
"id": "11111111-2222-3333-4444-555555555555",
"status": "REFUNDED",
"amount": 123,
"currency": "MXN",
"externalId": "invoice-2025-01-8842"
}Authorizations
Path Parameters
The unique identifier of the payment method
The unique identifier of the payment to refund
Body
application/json
Request body for refunding a payment. Refunds are always for the full charge amount.
Reason for the refund. Useful for accounting and auditing purposes.
Example:
"Customer requested cancellation"
Response
Payment refunded successfully
Response after refunding a payment
Unique identifier of the payment
Example:
"11111111-2222-3333-4444-555555555555"
Payment status after refund
Available options:
REFUNDED The refunded amount
Example:
"MXN"
The idempotency key supplied when the payment was created, echoed back so you can map this payment id to your own order reference. Null when none was supplied. Not to be confused with the payment method externalId, which identifies the saved card.
Example:
"invoice-2025-01-8842"