## TL;DR

eligibility_check_failed means Affirm declined the shopper in its underwriting check; Affirm intentionally shows no error to the shopper, so your checkout must handle the silent cancel. Listen for the checkout cancel or the failed eligibility callback, keep the cart intact, and immediately offer another payment method. Retrying the same Affirm checkout will fail again.

```text
affirm eligibility_check_failed: checkout canceled with no error to the shopper
```

## Use this when

- Affirm checkout cancels silently with eligibility_check_failed
- Shoppers report Affirm not working with no error
- You need fallback logic for failed BNPL eligibility checks

## Not for this skill when

- The Affirm API returns an authentication or integration error
- The loan was approved but capture failed
- You are servicing an existing Affirm loan (refunds, disputes)

## Steps

1. Detect the failed state: the Affirm checkout callback reports cancellation or the eligibility check returns eligibility_check_failed.
   Expected: Your code knows the Affirm attempt ended without payment.
2. Preserve the cart contents and the shopper's entered details.
   Expected: The shopper does not lose their order progress.
3. Display a neutral message and alternative payment methods; do not show Affirm's internal decline reason.
   Expected: The shopper can complete the purchase another way.
4. Log the event with order value and timestamp for funnel analysis.
   Expected: You can measure Affirm decline rates over time.
5. If decline rates spike, verify the data you send Affirm: correct currency, item prices, and customer fields.
   Expected: Data errors are ruled out as the cause.

## Tool compatibility

Affirm Checkout API and Affirm's eligibility check endpoints; behavior is defined by Affirm's underwriting, not the SDK version.

## Variant phrasings

### affirm checkout canceled no error shopper

The shopper-visible symptom of the silent eligibility failure.

### affirm not eligible at checkout

Common paraphrase of eligibility_check_failed.

### affirm loan declined silently

What the outcome means in lending terms.

## Why it happens

Affirm underwrites each checkout in real time and, like other lenders, does not disclose decline reasons to applicants at the point of sale. The checkout is canceled without a shopper-facing error by design. Because the inputs to the decision do not change on retry, immediate retries fail the same way. A good integration treats this as a normal branch of the checkout flow and routes the shopper to another method.

## Edge cases / pitfalls

- Prequalification widgets can reduce surprise declines: shoppers who prequalify rarely hit this at checkout.
- Test-mode declines do not predict live underwriting; do not tune fallback copy on test data.
- Never promise the shopper that Affirm will work next time; offer the alternative method as the primary path.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_5XdjFp4Kg8eYq4_Qt15iJA
