API Documentation

Programmatic access to ALPI's foreclosure intelligence feed. All endpoints return JSON and follow REST conventions.

Overview

The ALPI API provides read access to the auction_cases_enriched dataset — select states, updated continuously throughout the business day. The API supports expressive filtering out of the box.

Access is paid only. To request access, submit an inquiry and specify that your that you're interested in API access. We'll follow up to discuss your use case and provide pricing details. Your endpoint URL and key will be provided upon approval.

Authentication

All requests must include your API key as a Bearer token in the Authorization header:

Authorization: Bearer YOUR_API_KEY

Requests without a valid key will receive a 401 Unauthorized response.

Base URL

Your base URL is issued when access is approved. All endpoints are relative to it:

https://<your-alpi-endpoint>/v1

Endpoints

GET /cases

Returns a JSON array of foreclosure cases matching the specified filters. Defaults to the 100 most recently updated cases if no filters are applied. Supports all fields in the Data Catalog as filter targets.

Query parameters

Filters follow the pattern field=operator.value. Multiple filters are combined with AND logic. Common operators: eq (equal), gte (≥), lte (≤), in (list match).

Parameter Operator(s) Description Example
county eq Filter by county name (lowercase, no spaces). county=eq.hamilton
auction_date eq, gte, lte Filter by scheduled auction date. Combine gte and lte for a date range. auction_date=gte.2026-03-01&auction_date=lte.2026-03-31
auction_status eq, in Filter by auction lifecycle status. auction_status=eq.Scheduled
foreclosure_type eq Filter by foreclosure filing type. foreclosure_type=eq.Mortgage
order Sort field. Append .asc or .desc. order=auction_date.asc
limit Maximum records to return. Default 100, maximum 1000. limit=50
offset Records to skip. Use with limit for pagination. offset=100

Example requests

All scheduled cases in Hamilton County, sorted by date

GET /cases?county=eq.hamilton&auction_status=eq.Scheduled&order=auction_date.asc

Cases with auctions during March 2026

GET /cases?auction_date=gte.2026-03-01&auction_date=lte.2026-03-31&order=auction_date.asc&limit=500

All sold cases statewide

GET /cases?auction_status=eq.Sold&order=date_of_sale.desc

cURL

curl "https://<your-alpi-endpoint>/v1/cases?county=eq.hamilton&auction_status=eq.Scheduled" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Accept: application/json"

Python

import httpx response = httpx.get( "https://<your-alpi-endpoint>/v1/cases", params={ "county": "eq.hamilton", "auction_status": "eq.Scheduled", "order": "auction_date.asc", "limit": "100", }, headers={"Authorization": "Bearer YOUR_API_KEY"}, ) cases = response.json() # list of case dicts

JavaScript (fetch)

const params = new URLSearchParams({ county: "eq.hamilton", auction_status: "eq.Scheduled", order: "auction_date.asc", limit: "100", }); const res = await fetch( `https://<your-alpi-endpoint>/v1/cases?${params}`, { headers: { Authorization: "Bearer YOUR_API_KEY" } } ); const cases = await res.json();

Response format

All responses are JSON arrays. Each element is one case record. Fields with null values are present in the response as null.

[ { "case_number": "A250288311499", "county": "hamilton", "auction_date": "2026-03-25", "auction_status": "Scheduled", "defendant_name": "JENNIFER ROLLINGER", "address": "3389 GLENMORE AVE", "city": "CINCINNATI", "state": "OH", "zip": "45211", "foreclosure_type": "Mortgage", "sale_type": "NON-TAX SALE", "sale_amount": null, "date_of_sale": null, "arv": 218000.00, "loan_balance_est": 110000.00, "estimated_equity": 108000.00, "post_sale_surplus": null, "phone_numbers": ["+15134820000"], "emails": ["jane.rollinger@example.com"], "scraped_at": "2026-03-07T14:32:11Z", "updated_at": "2026-03-07T14:32:11Z", "enriched_at": "2026-03-07T14:34:58Z" } ]

Pagination

Use limit and offset to paginate through large result sets. An empty array indicates you have reached the end of the results.

# Page 1 GET /cases?county=eq.cuyahoga&limit=100&offset=0 # Page 2 GET /cases?county=eq.cuyahoga&limit=100&offset=100

Rate limits

Rate limits are enforced per API key. Standard access allows up to 60 requests per minute. Contact ALPI if your integration requires higher throughput.

Field reference

For a complete description of every response field — including types, value enumerations, and data quality notes — see the Data Catalog.