---
title: "City construction snapshot"
method: GET
path: "/api/v1/snapshot"
---

# City construction snapshot

`GET /api/v1/snapshot`

## Request

- Base URL: `https://fronterasignal.com`
- URL: `https://fronterasignal.com/api/v1/snapshot`
- Auth: none required

Use to size up the construction market in one Rio Grande Valley city (McAllen, Edinburg, Mission, Pharr, San Juan, Weslaco, Donna, Mercedes, Brownsville, Harlingen) or the whole Valley before you lend, build, buy or sell there: permits, housing units by type, sales-tax trend, months of supply, home values, input and material prices, mortgage rate, labor. Every value is dated. Example: "Is McAllen's housing market oversupplied and are building costs rising this week?"

Returns: One Valley city's (or the whole Valley's) latest permits, monthly housing permits by structure type, sales-tax receipts, housing supply, building-input and material prices, labor conditions, newest commercial projects and this morning's mortgage rate, 10-year yield and diesel price, every value dated.

Free sample (a real answer to /api/v1/snapshot?city=McAllen): https://fronterasignal.com/data/v1/samples/snapshot.json

GET /api answers exactly like this endpoint: same parameters, same price, same answer.

## Query parameters

- `city` 'McAllen' | 'Edinburg' | 'Mission' | 'Pharr' | 'San Juan' | 'Weslaco' | 'Donna' | 'Mercedes' | 'Brownsville' | 'Harlingen'

## Response `200`

One Valley city's (or the whole Valley's) latest permits, monthly housing permits by structure type, sales-tax receipts, housing supply, building-input and material prices, labor conditions, newest commercial projects and this morning's mortgage rate, 10-year yield and diesel price, every value dated.

- object
  - `publisher` string, required
  - `place` object, required
    - `city` string
    - `county` string
    - `metro` string
    - `region` string
  - `data_through_week` string, required
  - `generated_at` string, required
  - `permits` object, required
    - `latest_week` string, required
    - `latest` object[], required
      - `week_id` string, required
      - `measure` string, required
      - `count` integer, nullable, required
      - `status` string, required
      - `value_usd` integer, nullable, required
      - `as_of` string, required
      - `age_days` integer, required
      - `cadence` string, required
      - `stale` boolean, required
      - `source` string, required
      - `city` string
    - `history` object[], required
      - `week_id` string, required
      - `measure` string, required
      - `count` integer, nullable, required
      - `status` string, required
      - `value_usd` integer, nullable, required
      - `as_of` string, required
      - `age_days` integer, nullable, required
      - `cadence` string, required
      - `stale` boolean, required
      - `source` string, required
      - `backfill` boolean
      - `city` string
    - `note` string, required
  - `housing_supply` object[], required
    - `geo` string, required
    - `measure` string, required
    - `value` union, required
      - object
        - `low` integer, required
        - `high` integer, required
        - `unit` string, required
      - number
    - `unit` string, nullable, required
    - `value_type` string, required
    - `value_text` string
    - `as_of` string, required
    - `age_days` integer, required
    - `cadence` string, required
    - `stale` boolean, required
    - `source` string, required
  - `construction_costs` object[], required
    - `measure` string, required
    - `direction` string, nullable, required
    - `direction_detail` string
    - `value` union, required
      - number
      - string
    - `unit` string, nullable, required
    - `value_type` string, nullable, required
    - `approx` boolean
    - `value_text` string
    - `as_of` string, required
    - `age_days` integer, required
    - `cadence` string, required
    - `stale` boolean, required
    - `source` string, required
  - `labor` object[], required
    - `measure` string, required
    - `value` object, required
      - `low` integer, required
      - `high` integer, required
      - `unit` string, required
    - `unit` string, nullable, required
    - `value_type` string, required
    - `value_text` string
    - `as_of` string, required
    - `age_days` integer, required
    - `cadence` string, required
    - `stale` boolean, required
    - `source` string, required
  - `housing_permits_monthly` object, required
    - `source` string, required
    - `latest` object[], required
      - `place` string
      - `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
      - `places_reporting` integer
    - `note` string
  - `sales_tax` object, required
    - `source` string, required
    - `latest` object[], required
      - `city` string, required
      - `county` string, required
      - `month` string, required
      - `net_payment_usd` number, required
      - `prior_year_payment_usd` number, required
      - `yoy_pct` number, required
      - `payments_to_date_usd` number, required
      - `to_date_yoy_pct` number, required
      - `as_of` string, required
      - `age_days` integer, required
      - `cadence` string, required
      - `stale` boolean, required
      - `source` string, required
    - `note` string, required
  - `material_prices` object, required
    - `source` string, required
    - `latest` object[], required
      - `item_key` string, required
      - `item` string, required
      - `low_usd` number, required
      - `high_usd` number, required
      - `unit` string, required
      - `stores` integer, required
      - `as_of` string, required
      - `age_days` integer, required
      - `cadence` string, required
      - `stale` boolean, required
      - `source` string, required
    - `note` string, required
  - `new_commercial_projects` object, required
    - `source` string, required
    - `as_of` string, required
    - `cadence` string, required
    - `matched` integer, required
    - `latest` object[], required
      - `id` string, required
      - `name` string, required
      - `facility` string, required
      - `address` string, required
      - `city` string, required
      - `county` string, required
      - `zip` string, required
      - `owner` string, required
      - `design_firm` string, nullable, required
      - `estimated_cost_usd` integer, required
      - `square_feet` integer, required
      - `estimated_start` string, required
      - `estimated_end` string, required
      - `status` string, required
      - `type_of_work` string, required
      - `scope_of_work` string, required
      - `funding` string, required
      - `registered` string, required
      - `source` string, required
  - `latest_issue` object, required
    - `week_id` string, required
    - `title` string, required
    - `url` 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)
