---
title: "Eligibility Check"
method: GET
path: "/v1/disputes/eligibility"
tags: ["Disputes"]
---

# Eligibility Check

`GET /v1/disputes/eligibility`

Mandatory gate between the transaction selection screen and the dispute reasons screen. Validates two things: each selected transaction is individually eligible for self-service dispute submission, and all selected transactions share the same payment rail — ACH and Debit cannot be mixed in a single dispute. On failure, returns one structured error per failed rule, each with a machine-readable code and a human-readable message, that the partner UI surfaces inline on the transaction selection screen; the member stays in the flow and can adjust their selection. Transaction-scoped codes (RAIL_MISMATCH, TRANSACTION_NOT_FOUND, TRANSACTION_NOT_SETTLED, TRANSACTION_ALREADY_DISPUTED, TRANSACTION_OUTSIDE_ELIGIBILITY_WINDOW) mean there is no disputable transaction behind one or more selected ids for that specific reason; MEMBER_INELIGIBLE means the member is not allowed to dispute at all right now, independent of the selection.

## Query parameters

- `customerUuid` string
- `accountUuid` string
- `transactionIds` string[]
- `transactionDates` string[]

## Response `200`

A successful response.

- V1CheckDisputeEligibilityResponse — CheckDisputeEligibilityResponse reports whether the member may file the dispute. eligible is true only when errors is empty; otherwise errors carries one entry per distinct failure reason (see EligibilityErrorCode), each with a machine-readable code, default customer-facing copy, and (for transaction-scoped codes) the offending transaction ids. A selection can fail more than one way at once — e.g. a rail mismatch plus one transaction that is already disputed — in which case errors carries one entry for each.
  - `eligible` boolean
  - `errors` DtoEligibilityError[]
    - `code` 'ELIGIBILITY_ERROR_CODE_UNKNOWN' | 'RAIL_MISMATCH' | 'TRANSACTION_INELIGIBLE' | 'MEMBER_INELIGIBLE' | 'TRANSACTION_NOT_FOUND' | 'TRANSACTION_NOT_SETTLED' | 'TRANSACTION_ALREADY_DISPUTED' | 'TRANSACTION_OUTSIDE_ELIGIBILITY_WINDOW' | 'CARD_MISMATCH' — EligibilityErrorCode is the machine-readable classification of a single eligibility failure returned by a Transaction Eligibility Check (CheckDisputeEligibility). A response may carry more than one error; each one identifies the rule that failed. Values are reserved for future rules (duplicate, account-age, window). The codes fall into two families, and the family is the first thing a client should branch on: - Transaction-scoped codes (RAIL_MISMATCH, CARD_MISMATCH, and every TRANSACTION_* value) describe a problem with the specific transaction(s) selected: there is currently no disputable transaction behind the selected id(s). The member can typically resolve this by picking a different transaction or selection, or by waiting (e.g. for settlement). - MEMBER_INELIGIBLE is member-scoped: the member themself is not allowed to dispute right now, independent of which transaction they picked. There is no selection change that resolves this; the member should be directed to support. buf:lint:ignore ENUM_VALUE_PREFIX - RAIL_MISMATCH: RAIL_MISMATCH: the selection mixes transaction rails (e.g. ACH and Debit) that cannot be disputed together. Transaction-scoped. - TRANSACTION_INELIGIBLE: TRANSACTION_INELIGIBLE is no longer returned by CheckDisputeEligibility. It used to cover every reason a selected transaction could fail (unknown id, unsettled, already disputed, or outside the age window) under one generic code and message. It has been superseded by the more specific TRANSACTION_NOT_FOUND, TRANSACTION_NOT_SETTLED, TRANSACTION_ALREADY_DISPUTED, and TRANSACTION_OUTSIDE_ELIGIBILITY_WINDOW codes below. The value is retained, unused, so it is never repurposed; new integrations should match on the specific codes instead. - MEMBER_INELIGIBLE: MEMBER_INELIGIBLE: the member is not eligible to file this dispute (e.g. classified as a dispute abuser). Member-scoped: this is the "member is not allowed to dispute" case, and is unrelated to which transaction(s) were selected. - TRANSACTION_NOT_FOUND: TRANSACTION_NOT_FOUND: a selected transaction id does not match any transaction on the member's account, so there is no disputable transaction behind it (e.g. a stale, mistyped, or already-superseded id). Transaction-scoped. - TRANSACTION_NOT_SETTLED: TRANSACTION_NOT_SETTLED: a selected transaction exists but has not yet settled. Transaction-scoped; resolvable by waiting for settlement and retrying. - TRANSACTION_ALREADY_DISPUTED: TRANSACTION_ALREADY_DISPUTED: a selected transaction is already attached to an open dispute, so there is no new disputable transaction to file. Transaction-scoped. - TRANSACTION_OUTSIDE_ELIGIBILITY_WINDOW: TRANSACTION_OUTSIDE_ELIGIBILITY_WINDOW: a selected transaction falls outside the org's configured age window for self-service disputes (too old to dispute). Transaction-scoped. - CARD_MISMATCH: CARD_MISMATCH: the selection spans more than one card. Transaction-scoped.
    - `message` string
    - `transactionIds` string[]

## Other responses

- `default` — An unexpected error response.

---

[API](https://skmtc.net/casaphq/apis/casap-api.md) · [All operations](https://skmtc.net/casaphq/apis/casap-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/casaphq/casap-api/revisions/fe77c76cdc4a/schema)
