Disputes

Every request goes to https://api.lemak.cash. About the reference.

List disputes

GET /v1/disputes

Authentication

Bearer key. The merchant API key, sk_live_ or sk_test_. It reaches /v1 alone. A test key works from the moment the merchant exists. A live key answers 403 live_not_enabled until the merchant's review opens live mode, before any rate limit is spent.

Parameters

NameInTypeDescription
Api-Version optionalheaderstringThe version this request is answered at. Absent, the account's pinned version applies, and an account is pinned to info.version on its first request. A version this service does not render is refused with 400 invalid_api_version. api/CHANGELOG.md lists every version. Pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$.
limit optionalqueryintegerMinimum 1. Maximum 100. Default 20.
starting_after optionalquerystringThe id of the last object on the previous page.
status optionalquerystringOne of opened, under_review, won, lost.

Responses

200

A page of disputes, newest first.

application/json

DisputeList

FieldTypeDescription
object requiredlist
data requiredarray of Dispute
Fields of data
FieldTypeDescription
id requiredstring
object requireddispute
payment_intent requiredstring
status requiredstringOne of opened, under_review, won, lost.
amount requiredinteger (int64)What the channel claims back, in the currency the payer paid in.
currency requiredstringPattern ^[A-Z]{3}$.
held optionalMoneyThe settlement currency frozen while the dispute is open.
Fields of held
FieldTypeDescription
amount requiredinteger (int64)Minor units. Never a decimal.
currency requiredstringPattern ^[A-Z]{3}$.
fee optionalMoneyWhat a lost dispute costs on top of the claim.
Fields of fee
FieldTypeDescription
amount requiredinteger (int64)Minor units. Never a decimal.
currency requiredstringPattern ^[A-Z]{3}$.
reason optionalstring
evidence optionalobject
due_by optionalstring (date-time)
opened_at requiredstring (date-time)
closed_at optionalstring (date-time)
has_more requiredboolean

Errors

Every error answers with the error object.

StatusWhen
Other400 bad parameter, 401 authentication, 402 payment failed, 403 forbidden, 404 not found, 409 conflict, 413 request_too_large (a body over 64 KiB), 422 idempotency key reused, 429 rate limited, 5xx api error.

Example

curl https://api.lemak.cash/v1/disputes \
  -H "Authorization: Bearer sk_test_..." \
  -H "Api-Version: 2026-09-01"

Dispute

GET /v1/disputes/{id}

Authentication

Bearer key. The merchant API key, sk_live_ or sk_test_. It reaches /v1 alone. A test key works from the moment the merchant exists. A live key answers 403 live_not_enabled until the merchant's review opens live mode, before any rate limit is spent.

Parameters

NameInTypeDescription
id requiredpathstringPattern ^dp_[0-9A-Za-z]+$.
Api-Version optionalheaderstringThe version this request is answered at. Absent, the account's pinned version applies, and an account is pinned to info.version on its first request. A version this service does not render is refused with 400 invalid_api_version. api/CHANGELOG.md lists every version. Pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$.

Responses

200

The dispute.

application/json

Dispute

FieldTypeDescription
id requiredstring
object requireddispute
payment_intent requiredstring
status requiredstringOne of opened, under_review, won, lost.
amount requiredinteger (int64)What the channel claims back, in the currency the payer paid in.
currency requiredstringPattern ^[A-Z]{3}$.
held optionalMoneyThe settlement currency frozen while the dispute is open.
Fields of held
FieldTypeDescription
amount requiredinteger (int64)Minor units. Never a decimal.
currency requiredstringPattern ^[A-Z]{3}$.
fee optionalMoneyWhat a lost dispute costs on top of the claim.
Fields of fee
FieldTypeDescription
amount requiredinteger (int64)Minor units. Never a decimal.
currency requiredstringPattern ^[A-Z]{3}$.
reason optionalstring
evidence optionalobject
due_by optionalstring (date-time)
opened_at requiredstring (date-time)
closed_at optionalstring (date-time)

Errors

Every error answers with the error object.

StatusWhen
Other400 bad parameter, 401 authentication, 402 payment failed, 403 forbidden, 404 not found, 409 conflict, 413 request_too_large (a body over 64 KiB), 422 idempotency key reused, 429 rate limited, 5xx api error.

Example

curl https://api.lemak.cash/v1/disputes/dp_123 \
  -H "Authorization: Bearer sk_test_..." \
  -H "Api-Version: 2026-09-01"

Submit dispute evidence

POST /v1/disputes/{id}/evidence

Merge evidence into the dispute. The platform forwards it to the channel and rules on the outcome; a dispute that already carries a ruling accepts none.

Authentication

Bearer key. The merchant API key, sk_live_ or sk_test_. It reaches /v1 alone. A test key works from the moment the merchant exists. A live key answers 403 live_not_enabled until the merchant's review opens live mode, before any rate limit is spent.

Parameters

NameInTypeDescription
id requiredpathstringPattern ^dp_[0-9A-Za-z]+$.
Idempotency-Key requiredheaderstringAt most 255 characters.
Api-Version optionalheaderstringThe version this request is answered at. Absent, the account's pinned version applies, and an account is pinned to info.version on its first request. A version this service does not render is refused with 400 invalid_api_version. api/CHANGELOG.md lists every version. Pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$.

Request body

application/json

DisputeEvidence

FieldTypeDescription
evidence requiredobjectMerged into the evidence already on the dispute, key by key.

Responses

200

The dispute, with the evidence merged in.

application/json

Dispute

FieldTypeDescription
id requiredstring
object requireddispute
payment_intent requiredstring
status requiredstringOne of opened, under_review, won, lost.
amount requiredinteger (int64)What the channel claims back, in the currency the payer paid in.
currency requiredstringPattern ^[A-Z]{3}$.
held optionalMoneyThe settlement currency frozen while the dispute is open.
Fields of held
FieldTypeDescription
amount requiredinteger (int64)Minor units. Never a decimal.
currency requiredstringPattern ^[A-Z]{3}$.
fee optionalMoneyWhat a lost dispute costs on top of the claim.
Fields of fee
FieldTypeDescription
amount requiredinteger (int64)Minor units. Never a decimal.
currency requiredstringPattern ^[A-Z]{3}$.
reason optionalstring
evidence optionalobject
due_by optionalstring (date-time)
opened_at requiredstring (date-time)
closed_at optionalstring (date-time)

Errors

Every error answers with the error object.

StatusWhen
Other400 bad parameter, 401 authentication, 402 payment failed, 403 forbidden, 404 not found, 409 conflict, 413 request_too_large (a body over 64 KiB), 422 idempotency key reused, 429 rate limited, 5xx api error.

Example

curl -X POST https://api.lemak.cash/v1/disputes/dp_123/evidence \
  -H "Authorization: Bearer sk_test_..." \
  -H "Idempotency-Key: <Idempotency-Key>" \
  -H "Api-Version: 2026-09-01" \
  -H "Content-Type: application/json" \
  -d '{
  "evidence": {
    "key": "value"
  }
}'