---
title: "Housing permits by month"
method: GET
path: "/api/v1/series/permits-monthly"
---

# Housing permits by month

`GET /api/v1/series/permits-monthly`

## Request

- Base URL: `https://fronterasignal.com`
- URL: `https://fronterasignal.com/api/v1/series/permits-monthly`
- Auth: none required

Use to track new housing permits month by month in Rio Grande Valley cities and county areas (Hidalgo, Cameron, Starr, Willacy counties): units and buildings by structure type and valuation since January 2024, with year-to-date totals. Filter by place, county, from and to (YYYY-MM). Covers cities that publish no weekly permits. Example: "How many single-family homes did Brownsville permit each month this year?"

Returns: New housing units and buildings authorized by permit each month, by structure type (single-family, 2 units, 3-4 units, 5 or more) with valuation, for Valley cities and unincorporated county areas, plus each year-to-date total.

Free sample (a real answer to /api/v1/series/permits-monthly?place=Brownsville&from=2026-01): https://fronterasignal.com/data/v1/samples/series-permits-monthly.json

## Query parameters

- `place` 'Alamo' | 'Alton' | 'Bayview' | 'Brownsville' | 'Cameron County (unincorporated)' | 'Combes' | 'Donna' | 'Edcouch' | 'Edinburg' | 'Elsa' | 'Escobares' | 'Granjeno' | 'Harlingen' | 'Hidalgo' | 'Hidalgo County (unincorporated)' | 'Indian Lake' | 'La Feria' | 'La Joya' | 'La Villa' | 'Laguna Vista' | 'Los Fresnos' | 'Los Indios' | 'Lyford' | 'McAllen' | 'Mercedes' | 'Mission' | 'Palm Valley' | 'Palmhurst' | 'Palmview' | 'Penitas' | 'Pharr' | 'Port Isabel' | 'Primera' | 'Progreso' | 'Progreso Lakes' | 'Rancho Viejo' | 'Raymondville' | 'Rio Hondo' | 'San Benito' | 'San Juan' | 'Santa Rosa' | 'South Padre Island' | 'Starbase' | 'Sullivan City' | 'Weslaco' | 'Willacy County (unincorporated)'
- `county` 'Hidalgo' | 'Cameron' | 'Starr' | 'Willacy'
- `from` string
- `to` string

## Response `200`

New housing units and buildings authorized by permit each month, by structure type (single-family, 2 units, 3-4 units, 5 or more) with valuation, for Valley cities and unincorporated county areas, plus each year-to-date total.

- object
  - `publisher` string, required
  - `series` string, required
  - `title` string, required
  - `query` object, required
    - `place` string
    - `from` string, required
    - `county` string
  - `source` string, required
  - `cadence` string, required
  - `months_available` string[], required
  - `fields` string[], required
  - `returned` integer, required
  - `rows` object[], required
    - `place` string, required
    - `county` string, required
    - `month` string, required
    - `units_total` integer, required
    - `buildings_total` integer, required
    - `valuation_usd` integer, required
    - `single_family_units` integer, required
    - `two_unit_units` integer, required
    - `three_four_unit_units` integer, required
    - `five_plus_unit_units` integer, required
    - `single_family_buildings` integer, required
    - `two_unit_buildings` integer, required
    - `three_four_unit_buildings` integer, required
    - `five_plus_unit_buildings` integer, required
    - `status` string, required
    - `as_of` string, required
    - `age_days` integer, required
    - `cadence` string, required
    - `stale` boolean, required
    - `source` string, required
  - `year_to_date` object[], required
    - `place` string, required
    - `county` string, required
    - `year` integer, required
    - `through` string, required
    - `units_total` integer, required
    - `buildings_total` integer, required
    - `valuation_usd` integer, required
    - `single_family_units` integer, required
    - `two_unit_units` integer, required
    - `three_four_unit_units` integer, required
    - `five_plus_unit_units` integer, required
    - `single_family_buildings` integer, required
    - `two_unit_buildings` integer, required
    - `three_four_unit_buildings` integer, required
    - `five_plus_unit_buildings` integer, required
    - `as_of` string, required
    - `age_days` integer, required
    - `cadence` string, required
    - `stale` boolean, required
    - `source` string, required
  - `year_to_date_differs` object[], required
    - `place` string, required
    - `year` integer, required
    - `through` string, required
    - `monthly_rows` integer, required
    - `sum_of_months_units` integer, required
    - `year_to_date_units` integer, required
  - `note` string, required
  - `disclaimer` string, required

## Other responses

- `400`: Bad or unknown parameters. Free, before any payment; allowed lists the valid ones. unknown_param (400): A query parameter this endpoint does not take. allowed lists the ones it does. repeated_param (400): The same parameter was sent twice. missing_param (400): A required parameter is missing. bad_param (400): A value in the wrong format (date, ISO week, number, length). The message names the parameter. unknown_value (400): A value outside the list we cover (city, county, item, store, type of work, language). allowed lists the valid ones. unknown_week (400): No issue was published for that week in that language. allowed.week lists the ones we have. bad_range (400): from is after to. no_house_number (400): nearby and parcel need a house number and street; an intersection or a street alone has no single place. not_covered (400): The place is outside what the endpoint covers. parcel covers Hidalgo County only for now.
- `402`: Payment required. Free of charge to receive. The PAYMENT-REQUIRED header (base64 JSON, x402 v2) lists price, network, asset and payTo; retry with a PAYMENT-SIGNATURE header.
- `404`: A valid query with nothing to return, or no such endpoint. Free: before any payment, or for nearby and parcel after the payment is verified and never settled. no_results (404): The query is valid but nothing matches it. Free. no_readings (404): Rows exist for that range but every one is dark or no_reading. Free. no_match (404): No owner or design firm contains that name. Free. too_few_projects (404): Fewer than 5 usable filings in every group, so there is no statistic to sell. Free; counts are in the body. not_found (404): No such endpoint or series. address_not_found (404): nearby and parcel: the address could not be placed on the map or matched to a parcel. Found after the payment is verified; the payment is not settled. ambiguous (404): nearby and parcel: the address fits several different places or parcels. Add the direction (N, S, E, W). Not settled. outside_coverage (404): nearby: the address is outside Hidalgo, Cameron, Starr and Willacy counties. Not settled. not_available (404): parcel: this record is not available from this API. Not settled.
- `503`: The payment service is starting (retry after the Retry-After header), payments are off, or a live public-records lookup did not answer in time. Never settled. upstream_unavailable (503): nearby and parcel read public records at request time, and that service did not answer in time. Retry in a minute. Not settled. payment_service_starting (503): The payment service is starting. Retry after the Retry-After header (2 s). Never charged. payments_not_configured (503): Payments are not switched on for this deployment.

---

[API](https://skmtc.dev/fronterasignal/apis/frontera-signal-api.md) · [All operations](https://skmtc.dev/fronterasignal/apis/frontera-signal-api/llms.txt) · [OpenAPI document](https://skmtc.dev/fronterasignal/apis/frontera-signal-api/revisions/39e3fa496b3f?raw)
