curl https://api.kwugwo.africa/v1/refunds/rfd.VCvr.Hs7dQmXk2LpRvN9tYbCwZaEf \
-H "Authorization: Bearer $KWUGWO_SECRET_KEY"
const refund = await fetch(
`https://api.kwugwo.africa/v1/refunds/${refundUid}`,
{ headers: { Authorization: `Bearer ${process.env.KWUGWO_SECRET_KEY}` } }
).then(r => r.json());
<?php
$ch = curl_init("https://api.kwugwo.africa/v1/refunds/{$refundUid}");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('KWUGWO_SECRET_KEY')],
]);
$refund = json_decode(curl_exec($ch), true);
curl_close($ch);
import os, requests
refund = requests.get(
f"https://api.kwugwo.africa/v1/refunds/{refund_uid}",
headers={"Authorization": f"Bearer {os.environ['KWUGWO_SECRET_KEY']}"},
).json()
url := fmt.Sprintf("https://api.kwugwo.africa/v1/refunds/%s", refundUid)
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KWUGWO_SECRET_KEY"))
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
{
"uid": "rfd.VCvr.Hs7dQmXk2LpRvN9tYbCwZaEf",
"psp_external_ref": "3018284",
"ref": "order_4719_refund_1",
"reason": "Customer returned the notebook",
"amount": 200000,
"status": "successful",
"error": null,
"created_at": "2026-08-12T10:04:11+00:00",
"updated_at": "2026-08-12T14:31:07+00:00",
"ugwo": {
"uid": "ugw.VCvr.7K2qPmRtV9xLnQ8sD1cYwHfE",
"currency": "NGN"
},
"ugwo_activity": {
"uid": "act.VCvr.qnbBJaElzSTHOcaTzxbuDlIs",
"activity_type": "charge",
"status": "partially_refunded",
"psp": "paystack_ng",
"psp_external_id": "5kfxw34ugz",
"amount": 500000,
"charged_amount": 500000,
"refunded_amount": 200000,
"error": null,
"created_at": "2026-08-11T19:55:50+00:00",
"updated_at": "2026-08-12T10:04:11+00:00"
},
"nzube_psp": null
}
{
"code": 404,
"message": "nzube.refund.error.not_found"
}
Refunds
Get a refund
Fetch a single refund by ID.
GET
/
v1
/
refunds
/
{refundUid}
curl https://api.kwugwo.africa/v1/refunds/rfd.VCvr.Hs7dQmXk2LpRvN9tYbCwZaEf \
-H "Authorization: Bearer $KWUGWO_SECRET_KEY"
const refund = await fetch(
`https://api.kwugwo.africa/v1/refunds/${refundUid}`,
{ headers: { Authorization: `Bearer ${process.env.KWUGWO_SECRET_KEY}` } }
).then(r => r.json());
<?php
$ch = curl_init("https://api.kwugwo.africa/v1/refunds/{$refundUid}");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('KWUGWO_SECRET_KEY')],
]);
$refund = json_decode(curl_exec($ch), true);
curl_close($ch);
import os, requests
refund = requests.get(
f"https://api.kwugwo.africa/v1/refunds/{refund_uid}",
headers={"Authorization": f"Bearer {os.environ['KWUGWO_SECRET_KEY']}"},
).json()
url := fmt.Sprintf("https://api.kwugwo.africa/v1/refunds/%s", refundUid)
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KWUGWO_SECRET_KEY"))
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
{
"uid": "rfd.VCvr.Hs7dQmXk2LpRvN9tYbCwZaEf",
"psp_external_ref": "3018284",
"ref": "order_4719_refund_1",
"reason": "Customer returned the notebook",
"amount": 200000,
"status": "successful",
"error": null,
"created_at": "2026-08-12T10:04:11+00:00",
"updated_at": "2026-08-12T14:31:07+00:00",
"ugwo": {
"uid": "ugw.VCvr.7K2qPmRtV9xLnQ8sD1cYwHfE",
"currency": "NGN"
},
"ugwo_activity": {
"uid": "act.VCvr.qnbBJaElzSTHOcaTzxbuDlIs",
"activity_type": "charge",
"status": "partially_refunded",
"psp": "paystack_ng",
"psp_external_id": "5kfxw34ugz",
"amount": 500000,
"charged_amount": 500000,
"refunded_amount": 200000,
"error": null,
"created_at": "2026-08-11T19:55:50+00:00",
"updated_at": "2026-08-12T10:04:11+00:00"
},
"nzube_psp": null
}
{
"code": 404,
"message": "nzube.refund.error.not_found"
}
Returns the refund. Use it to confirm the outcome of a refund when
you can’t rely on webhooks, or as the source of truth after a
refund.updated delivery.
You don’t need to call this on a timer. Kwugwo pushes every status
change to your webhook endpoint. Fetch when
you’ve lost a delivery or you’re reconciling.
Path parameters
string
required
The refund ID,
rfd.XXXX.YYYY....Response
The Refund object. Refunds are scoped to the workspace that owns the secret key. A refund belonging to another workspace, or a live ID used against the sandbox, returns404 rather than 403.
curl https://api.kwugwo.africa/v1/refunds/rfd.VCvr.Hs7dQmXk2LpRvN9tYbCwZaEf \
-H "Authorization: Bearer $KWUGWO_SECRET_KEY"
const refund = await fetch(
`https://api.kwugwo.africa/v1/refunds/${refundUid}`,
{ headers: { Authorization: `Bearer ${process.env.KWUGWO_SECRET_KEY}` } }
).then(r => r.json());
<?php
$ch = curl_init("https://api.kwugwo.africa/v1/refunds/{$refundUid}");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('KWUGWO_SECRET_KEY')],
]);
$refund = json_decode(curl_exec($ch), true);
curl_close($ch);
import os, requests
refund = requests.get(
f"https://api.kwugwo.africa/v1/refunds/{refund_uid}",
headers={"Authorization": f"Bearer {os.environ['KWUGWO_SECRET_KEY']}"},
).json()
url := fmt.Sprintf("https://api.kwugwo.africa/v1/refunds/%s", refundUid)
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KWUGWO_SECRET_KEY"))
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
{
"uid": "rfd.VCvr.Hs7dQmXk2LpRvN9tYbCwZaEf",
"psp_external_ref": "3018284",
"ref": "order_4719_refund_1",
"reason": "Customer returned the notebook",
"amount": 200000,
"status": "successful",
"error": null,
"created_at": "2026-08-12T10:04:11+00:00",
"updated_at": "2026-08-12T14:31:07+00:00",
"ugwo": {
"uid": "ugw.VCvr.7K2qPmRtV9xLnQ8sD1cYwHfE",
"currency": "NGN"
},
"ugwo_activity": {
"uid": "act.VCvr.qnbBJaElzSTHOcaTzxbuDlIs",
"activity_type": "charge",
"status": "partially_refunded",
"psp": "paystack_ng",
"psp_external_id": "5kfxw34ugz",
"amount": 500000,
"charged_amount": 500000,
"refunded_amount": 200000,
"error": null,
"created_at": "2026-08-11T19:55:50+00:00",
"updated_at": "2026-08-12T10:04:11+00:00"
},
"nzube_psp": null
}
{
"code": 404,
"message": "nzube.refund.error.not_found"
}