Retrieve a refund
curl --request GET \
--url https://api.bachs.io/v1/refunds/{refund_id} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.bachs.io/v1/refunds/{refund_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.bachs.io/v1/refunds/{refund_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.bachs.io/v1/refunds/{refund_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"refund_id": "b7f2c41a-9d38-4e6b-8c15-2a7d0e934f61",
"charge_id": "ch_9f4c1d2e7b6a4f8e9c0d1a2b3c4d5e6f",
"reference": "RF-20260713-0042",
"status": "success",
"requested_amount": "29.00",
"refunded_amount": "29.00",
"refund_fee_amount": "0.00",
"fee_bearer": "org",
"reason": "Customer requested cancellation",
"created_at": "2026-07-13T14:20:00.000Z",
"updated_at": "2026-07-13T14:26:41.220Z",
"completed_at": "2026-07-13T14:26:41.220Z"
}{
"detail": "Invalid request parameters",
"error_code": "VALIDATION_ERROR",
"errors": [
{
"field": "amount",
"message": "Amount must be a positive decimal string",
"type": "value_error"
}
]
}{
"detail": "Invalid API key",
"error_code": "UNAUTHORIZED"
}{
"detail": "API key does not have permission for this operation",
"error_code": "FORBIDDEN"
}{
"detail": "Resource not found",
"error_code": "NOT_FOUND"
}{
"detail": "Rate limit exceeded. Please retry after a few seconds.",
"error_code": "TOO_MANY_REQUESTS"
}{
"detail": "An unexpected error occurred. Please try again later.",
"error_code": "INTERNAL_SERVER_ERROR"
}Refunds
Retrieve a refund
Retrieve a single refund by its ID.
GET
/
v1
/
refunds
/
{refund_id}
Retrieve a refund
curl --request GET \
--url https://api.bachs.io/v1/refunds/{refund_id} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.bachs.io/v1/refunds/{refund_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.bachs.io/v1/refunds/{refund_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.bachs.io/v1/refunds/{refund_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"refund_id": "b7f2c41a-9d38-4e6b-8c15-2a7d0e934f61",
"charge_id": "ch_9f4c1d2e7b6a4f8e9c0d1a2b3c4d5e6f",
"reference": "RF-20260713-0042",
"status": "success",
"requested_amount": "29.00",
"refunded_amount": "29.00",
"refund_fee_amount": "0.00",
"fee_bearer": "org",
"reason": "Customer requested cancellation",
"created_at": "2026-07-13T14:20:00.000Z",
"updated_at": "2026-07-13T14:26:41.220Z",
"completed_at": "2026-07-13T14:26:41.220Z"
}{
"detail": "Invalid request parameters",
"error_code": "VALIDATION_ERROR",
"errors": [
{
"field": "amount",
"message": "Amount must be a positive decimal string",
"type": "value_error"
}
]
}{
"detail": "Invalid API key",
"error_code": "UNAUTHORIZED"
}{
"detail": "API key does not have permission for this operation",
"error_code": "FORBIDDEN"
}{
"detail": "Resource not found",
"error_code": "NOT_FOUND"
}{
"detail": "Rate limit exceeded. Please retry after a few seconds.",
"error_code": "TOO_MANY_REQUESTS"
}{
"detail": "An unexpected error occurred. Please try again later.",
"error_code": "INTERNAL_SERVER_ERROR"
}Authorizations
Bearer token authentication. Pass your API key as Authorization: Bearer sk_.... See Authentication for keys, scopes, and sandbox vs production.
Response
Success - Refund retrieved
Where the refund has reached. processing: the return has been accepted and your balance is already reserved, but the outcome is not yet known. success: the funds have reached the customer; this is final and cannot be reversed. failed: the return did not go through and the reserved balance has been released. This is final for this refund, but it moved no money, so the payment becomes refundable again and you can create a new refund for it.
Available options:
processing, success, failed Example:
"processing"

