> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bridgelinepf.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Eligibility

> Whether we can finance a deal, every rule we checked, and why a deal failed. An ineligible deal is an answer, not an error.

Every quote carries an `eligibility` object:

```json theme={null}
"eligibility": {
  "status": "ineligible",
  "checks": [
    {"code": "INSURED_STATE", "passed": true, "limit": "TX", "actual": "TX"},
    {"code": "PREMIUM_MIN", "passed": true, "limit": "4500.00", "actual": "240000.00"},
    {"code": "PREMIUM_MAX", "passed": false, "limit": "175000.00", "actual": "240000.00"},
    {"code": "AM_BEST_MIN", "passed": true, "limit": "A-"}
  ],
  "reasons": [
    {
      "code": "PREMIUM_TOO_HIGH",
      "param": "policies",
      "message": "The total to finance ($240000.00) is above the $175000.00 maximum. Contact Bridgeline about larger deals."
    }
  ]
}
```

* **`status`** is `eligible` or `ineligible`.
* **`checks`** lists the rules we ran, each with `passed`, and usually the `limit` and the deal's `actual` value. `basis: "partially_assumed"` means the check relied on an assumption, such as an assumed AM Best rating.
* **`reasons`** explains an ineligible result, each with a `param` pointing at the field to look at. It's empty when the deal is eligible.

An ineligible deal still returns `201 Created` with a stored quote and **no options**, so you can show your producer why. A `422` is only for a malformed request.

## The rules

The limits below are today's program settings. They can change, and every check returns the limit it used, so read `limit` rather than hard-coding these figures.

| Check | Rule today | Reason when it fails |
| - | - | - |
| `INSURED_STATE` | The insured is in Texas (`insured.address.state` is `TX`) | `INSURED_STATE_NOT_ELIGIBLE` |
| `PREMIUM_MIN` | The total to finance (premium plus taxes and fees) is at least \$4,500 | `PREMIUM_TOO_LOW` |
| `PREMIUM_MAX` | The total to finance is at most \$175,000 | `PREMIUM_TOO_HIGH` |
| `AM_BEST_MIN` | Every carrier is rated A- or better. NR, E, F and S ratings are never financed | `CARRIER_RATING_TOO_LOW`, `CARRIER_NOT_FINANCEABLE` |
| `ISSUER` | The policy isn't from an issuer we can't finance, such as the Texas Windstorm Insurance Association | `ISSUER_NOT_FINANCEABLE` |
| `COVERAGE` | No coverage is a line we can't finance, such as surety bonds | `COVERAGE_NOT_FINANCEABLE` |
| `POLICY_BACKDATE` | The effective date is no more than 30 days ago | `POLICY_TOO_OLD` |
| `DATE_UNIFORMITY` | Every policy has the same effective and expiration dates | `DATES_NOT_UNIFORM` |
| `POLICY_TERM` | Every policy has dates, and the policy period is at least 3 months | `MISSING_DATES`, `POLICY_TERM_TOO_SHORT` |
| `MINIMUM_EARNED_MAX` | Less than 90% of the total would stay with the carrier on cancellation | `MINIMUM_EARNED_TOO_HIGH` |

### Insured state

`insured.address.state` must be a two-letter USPS code: one of the 50 states, `DC`, `PR`, `GU`, `VI`, `AS` or `MP`. What happens depends on what you send:

| You send | You get |
| - | - |
| `TX` | A quote, eligible as far as the state goes |
| Another valid code, such as `OK` | `201 Created`: an ineligible quote, with `INSURED_STATE_NOT_ELIGIBLE` |
| A full state name, such as `Texas` | [`422 VALIDATION_FAILED`](/errors/VALIDATION_FAILED), detail code `INVALID_FORMAT`: `Use the two-letter state code, e.g. "TX" for Texas.` |
| Anything else, such as `Tex` or `ZZ` | `422 VALIDATION_FAILED`, detail code `INVALID_FORMAT`: `Must be a two-letter US state code, e.g. "TX".` |

A state outside the program is an answer about the deal, so it's an ineligible quote. A value that isn't a state code at all is a malformed request, so it's a `422`.

### Minimum earned

The `MINIMUM_EARNED_MAX` figure counts the minimum earned rate applied to the premium and to any refundable taxes and fees, plus every tax and fee marked earned. Because unmarked taxes and fees are assumed earned, marking the refundable ones `earned: false` can bring a deal under the limit; when it would, the reason's message says so.

New checks and reason codes can be added. Show the `message` for any you don't recognize.

## Eligible, but no options

Rarely, an eligible deal still has no options: every option would exceed the state's APR limit, or the policy period leaves no room for a loan term. The quote then has `options: []`, `recommended_option_id: null`, and a warning saying why (`APR_CAP_EXCEEDED` or `POLICY_TERM_TOO_SHORT`).

## Outside the program?

For a deal outside these rules, such as a larger premium, contact Bridgeline.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.