EngineeringAPI Reference
GET /api/programs
Cross-lender program catalog with high-level metadata and matrix child counts.
Endpoint
GET /api/programs
Authorization: Bearer <FLEXRATE_INTERNAL_TOKEN>Query parameters
| Param | Type | Required | Description |
|---|---|---|---|
lender | string | no | Filter to a single lender slug (non-qm, flexpoint). |
Returns programs from the most recent rate sheet of each lender. When lender is supplied it must exist in the lenders table (422 otherwise).
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 }
],
"counts": {
"ltv_matrix": 24,
"eligibility_rules": 6,
"overlays": 3,
"matrix_documents": 1,
"notes": 12
}
}
],
"meta": {
"rate_sheets": [
{ "lender": "non-qm", "rate_sheet_id": "G5202026NQM", "effective_at": "2026-05-20T08:27:53+00:00", "effective_date": "2026-05-20" },
{ "lender": "flexpoint", "rate_sheet_id": null, "effective_at": "2026-05-21T00:00:00+00:00", "effective_date": "2026-05-21" }
]
}
}Response Fields
| Field | Type | Description |
|---|---|---|
data[].slug | string | Program identifier (unique per rate sheet). |
data[].name | string | Display name. |
data[].lender | object | { slug, name } for the owning lender. |
data[].rate_sheet | object | Summary of the rate sheet this program belongs to. |
data[].doc_types[] | array | Doc types registered for the program (may be empty for rate-only programs). |
data[].counts | object | Aggregate counts of matrix children — quick way to see if /matrix will return useful data. |
meta.rate_sheets[] | array | The latest rate sheet effective dates per lender included in the response. |
Programs with counts.ltv_matrix === 0 (e.g. ces_oo, ces_noo, jumbo) are rate-only — they ship in the catalog but /matrix will return empty arrays.
Usage
curl https://api.example.com/api/programs \
-H "Authorization: Bearer <token>"
curl 'https://api.example.com/api/programs?lender=non-qm' \
-H "Authorization: Bearer <token>"The catalog is derived from the live database — it reflects whatever was seeded by the most recent php artisan rates:daily run.