FlexPoint Docs
EngineeringAPI Reference

GET /api/programs/{slug}/matrix

Full matrix guidelines (LTV grid, eligibility rules, overlays, fees, notes) for a single program.

Endpoint

GET /api/programs/{slug}/matrix
Authorization: Bearer <FLEXRATE_INTERNAL_TOKEN>

Path parameters

ParamDescription
slugProgram slug from /api/programs (data[].slug).

Query parameters

ParamTypeRequiredDescription
doc_typestringnoFilter ltv_matrix, eligibility_rules, overlays, and matrix_documents to a single doc type.
lenderstringnoDisambiguates if a slug were to collide across lenders. Almost never needed in practice.

Returns 404 when the slug isn't on the most recent rate sheet of any lender (or the filtered lender, if provided).


Response

{
  "data": {
    "slug": "full_doc",
    "name": "Full Doc",
    "sheet_title": "Full Doc",
    "lender": { "slug": "non-qm", "name": "Non-QM" },
    "rate_sheet": {
      "rate_sheet_id": "G5202026NQM",
      "effective_at": "2026-05-20T08:27:53+00:00",
      "effective_date": "2026-05-20",
      "extracted_at": "2026-05-21T01:14:02+00:00"
    },
    "doc_types": [
      { "doc_type": "full_doc", "label": "Full Doc", "source_url": null }
    ],
    "filter": { "doc_type": null },
    "ltv_matrix": [
      {
        "doc_type": "full_doc",
        "occupancy": "owner_occupied",
        "property_type": "sfr",
        "purpose": "purchase",
        "fico_min": 740, "fico_max": 850,
        "loan_amount_min": "0.00", "loan_amount_max": null,
        "max_ltv": "90.00", "max_cltv": "90.00",
        "reserves_months": null,
        "dscr_ratio_min": null, "dscr_ratio_max": null,
        "source_page": 1
      }
    ],
    "eligibility_rules": [
      { "doc_type": "full_doc", "key": "min_credit_score", "op": "gte",
        "value_numeric": 680, "value_text": null, "value_json": null,
        "source_page": 1, "source_excerpt": null }
    ],
    "overlays": [
      { "doc_type": "full_doc", "key": "min_reserves",
        "condition": { "loan_amount_gt": 1500000 },
        "value":     { "reserves_months": 12 },
        "source_page": 1 }
    ],
    "matrix_documents": [
      { "doc_type": "full_doc",
        "url": "https://example.com/full-doc-matrix.pdf",
        "effective_date": "2026-05-20",
        "fetched_at": "2026-05-21T01:14:02+00:00",
        "parser_status": "parsed",
        "parser_version": "v1" }
    ],
    "attributes": {
      "fees": [
        { "key": "Underwriting Fee", "value": null, "numeric_value": 1495, "is_na": false, "position": 0 },
        { "key": "Collateral Review", "value": null, "numeric_value": 300,  "is_na": false, "position": 1 }
      ],
      "pricing_limits": [
        { "key": "Minimum Price", "value": null, "numeric_value": 98, "is_na": false, "position": 0 }
      ]
    },
    "notes": [
      { "position": 0, "note": "* Prepayment penalties only allowed in certain states." }
    ]
  }
}

Response Fields

FieldTypeDescription
data.lender, data.rate_sheetobjectSame shapes as /api/programs.
data.doc_types[]arrayAll doc types registered for the program (not filtered).
data.filter.doc_typestring|nullEcho of the query filter, or null when unfiltered.
data.ltv_matrix[]arrayFICO / LTV / loan-amount eligibility bands. Filtered by ?doc_type when provided.
data.eligibility_rules[]arrayKey/op/value rules (e.g. min_credit_score gte 680). Filtered by ?doc_type (rules with doc_type = null always included as program-wide rules).
data.overlays[]arrayConditional overlays — JSON condition + JSON value. Filtered by ?doc_type (program-wide overlays always included).
data.matrix_documents[]arraySource matrix PDFs that backed the parsed data. Filtered by ?doc_type.
data.attributesobjectPolymorphic key/value buckets grouped by group (e.g. fees, pricing_limits, lock_information, arm_requirements). Program-wide — never filtered by doc_type.
data.notes[]arrayFootnotes / disclosures in source order. Program-wide — never filtered.

Programs without seeded matrix data (ces_oo, ces_noo, jumbo today) return the program scaffolding with empty ltv_matrix, eligibility_rules, overlays, and matrix_documents arrays. Use /api/programs counts to detect this up-front.


Usage

# Full payload
curl https://api.example.com/api/programs/full_doc/matrix \
  -H "Authorization: Bearer <token>"

# Filtered to a single doc type
curl 'https://api.example.com/api/programs/expanded_doc/matrix?doc_type=bank_statements' \
  -H "Authorization: Bearer <token>"

On this page