curl --request GET \
--url https://api.bachs.io/v1/disputes/{dispute_id} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.bachs.io/v1/disputes/{dispute_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.bachs.io/v1/disputes/{dispute_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/disputes/{dispute_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))
}{
"dispute_id": "dsp_3e7b1c9a2f48",
"charge_id": "ch_8f3a1c9b4e72",
"amount": "75.00",
"currency": "USD",
"status": "under_review",
"is_response_editable": false,
"reason": "fraudulent",
"response_deadline_at": "2026-03-23T23:59:59.000Z",
"evidence": {
"customer_name": "Amara Osei",
"customer_email_address": "customer@example.com",
"product_description": "Annual SaaS subscription, plan ID PLAN-PRO-001",
"service_date": "2026-03-01",
"notes": "Customer confirmed delivery via email on March 5.",
"customer_communication_attachment_id": "upl_9f2c7b3d1e45"
},
"latest_submission": {
"submission_id": "dse_a1b2c3d4e5f6",
"status": "submitted",
"trigger_source": "merchant_submit",
"submitted_at": "2026-03-10T09:15:00.000Z",
"failed_at": null,
"attempt_sequence": 1
},
"created_at": "2026-03-09T08:00:00.000Z",
"updated_at": "2026-03-10T09:15:00.000Z"
}{
"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"
}Get Dispute
Retrieve full details for a single dispute, including the current evidence draft and latest submission metadata.
curl --request GET \
--url https://api.bachs.io/v1/disputes/{dispute_id} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.bachs.io/v1/disputes/{dispute_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.bachs.io/v1/disputes/{dispute_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/disputes/{dispute_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))
}{
"dispute_id": "dsp_3e7b1c9a2f48",
"charge_id": "ch_8f3a1c9b4e72",
"amount": "75.00",
"currency": "USD",
"status": "under_review",
"is_response_editable": false,
"reason": "fraudulent",
"response_deadline_at": "2026-03-23T23:59:59.000Z",
"evidence": {
"customer_name": "Amara Osei",
"customer_email_address": "customer@example.com",
"product_description": "Annual SaaS subscription, plan ID PLAN-PRO-001",
"service_date": "2026-03-01",
"notes": "Customer confirmed delivery via email on March 5.",
"customer_communication_attachment_id": "upl_9f2c7b3d1e45"
},
"latest_submission": {
"submission_id": "dse_a1b2c3d4e5f6",
"status": "submitted",
"trigger_source": "merchant_submit",
"submitted_at": "2026-03-10T09:15:00.000Z",
"failed_at": null,
"attempt_sequence": 1
},
"created_at": "2026-03-09T08:00:00.000Z",
"updated_at": "2026-03-10T09:15:00.000Z"
}{
"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.
Path Parameters
Unique identifier for the dispute.
Response
Dispute retrieved successfully.
Detailed dispute payload including evidence and latest submission metadata.
Unique dispute identifier.
Disputed amount as a decimal string.
ISO 4217 currency code for the disputed amount.
The current state of the dispute. A flat dispute fee is debited from your balance as soon as the dispute record is created, whichever of these states it starts in, and it is not charged again or refunded at resolution. needs_response: the dispute is open against you and you must submit evidence before response_deadline_at; no further funds have moved beyond that fee. under_review: your evidence has been submitted and the outcome is being decided; no further funds have moved beyond that fee. won: the dispute was decided in your favour and you keep the funds, and this state is terminal. lost: the dispute was decided against you, and the disputed amount is additionally debited from your balance, and this state is terminal. closed: the dispute was closed with no further action available to you, and this state is terminal.
needs_response, under_review, won, lost, closed "under_review"
Whether evidence is still editable for this dispute.
Evidence fields attached to a dispute response.
Show child attributes
Show child attributes
Dispute creation timestamp.
Most recent update timestamp.
Associated payment/charge identifier, if linked.
Dispute reason code reported by the payment network.
Evidence submission deadline in ISO 8601 format.
Most recent submission attempt for this dispute.
Show child attributes
Show child attributes

