{"publisher":"Frontera Signal","version":"1.8.0","policy":"From 2026-10-03, v1 changes are additive: fields and endpoints may be added, none renamed or removed. A breaking change would ship under a new version path.","entries":[{"date":"2026-11-03","version":"1.8.0","changes":[{"type":"added","text":"Every catalog entry carries freshness: as_of (the newest data behind the endpoint), cadence, refreshed (how often we read the source), next_check and next_expected (as_of plus one cadence period). /api/v1/health adds data_as_of per daily dataset."},{"type":"changed","text":"projects, companies, nearby and cost-per-sqft refresh nightly (cadence daily); materials publish the night of each shelf check; monthly housing permits, trade licenses and city sales tax refresh nightly as their sources publish. Weekly series and the issue still update on Sunday."}]},{"date":"2026-11-03","version":"1.7.0","changes":[{"type":"added","text":"/api/v1/ask ($0.25): ask one question in plain English or Spanish (q, up to 300 characters; lang en or es) and get a short answer written from Frontera Signal data, with the numbers used (data), the endpoints read (sources) and the newest date behind them (as_of). A question the data cannot answer gets in_scope false and the closest endpoint, and is charged like any answer. When no answer can be written in time the call answers 503 ask_unavailable and the payment is not settled."},{"type":"added","text":"Error codes ask_not_configured and ask_unavailable (503, never settled)."}]},{"date":"2026-10-28","version":"1.6.0","changes":[{"type":"added","text":"/api/v1/series/labor-ranges is on sale again and the snapshot carries its labor block again. The newest labor reading is from 2026-W30 (as of 2026-07-24). While the newest reading is older than its cadence allows (90 days for a monthly series), the catalog entry, the paid series answer and each snapshot labor row carry a note field with its date."}]},{"date":"2026-10-28","version":"1.5.0","changes":[{"type":"removed","text":"/api/v1/series/labor-ranges is off sale and the snapshot no longer carries a labor block. The series has no monthly source; its newest reading is from 2026-W30. A call to the old path gets a free 404."}]},{"date":"2026-10-26","version":"1.4.0","changes":[{"type":"added","text":"Six Valley industries beyond construction, from datasets the Worker refreshes on its own: /api/v1/bridge-wait ($0.01) and /api/v1/bridge-hourly ($0.03), wait times at the 11 Valley crossings now and by hour of week; /api/v1/crossings ($0.03), monthly trucks, cars and pedestrians by port; /api/v1/peso ($0.01); /api/v1/diesel ($0.01); /api/v1/sales-tax ($0.02), city sales tax by month; /api/v1/new-outlets ($0.05), new businesses by city and industry; /api/v1/alcohol-sales ($0.05), bar and restaurant sales by location; /api/v1/home-health ($0.03), agencies with star ratings; /api/v1/industry ($0.02), a snapshot per industry."},{"type":"added","text":"Free /data/v1/industries/<industry>.json summaries and /data/v1/live.json with every live value formatted in English and Spanish."},{"type":"added","text":"Error code data_warming_up (503, never settled) for a self-updating dataset that has not been stored yet."}]},{"date":"2026-10-03","version":"1.3.0","changes":[{"type":"added","text":"snapshot adds a markets block, refreshed every morning: the 30 year mortgage rate (Freddie Mac), the 10-year yield and the Gulf Coast diesel price. Each rate carries value, unit, direction, as_of, age_days, cadence (daily or weekly), stale and source. Daily rates go stale after 5 days, weekly rates after 14. The block is left out when no morning reading is on hand."}]},{"date":"2026-10-03","version":"1.2.0","changes":[{"type":"added","text":"New endpoints: /api/v1/nearby ($0.03), filed projects within a radius of an address; /api/v1/parcel ($0.04), the Hidalgo County parcel record for an address; /api/v1/series/permits-monthly ($0.05), housing units authorized by permit each month by structure type. Free /api/v1/parcel/match says whether parcel will match before you pay."},{"type":"added","text":"companies carries state trade licenses held by each business (type, current or expired, expiry, county) and answers for a licensed business that filed no project."},{"type":"added","text":"snapshot adds the newest monthly housing permits by structure type, the city sales-tax allocation with its year over year change, and the newest shelf prices of six core materials."},{"type":"added","text":"nearby and parcel place the address after the payment is verified. A miss, an ambiguous address or an address outside coverage is a 404 and the payment is not settled."}]},{"date":"2026-10-03","version":"1.1.0","changes":[{"type":"breaking","text":"Series rows use one vocabulary per measure (series schema 2.0). A week with nothing to report is an explicit row with status no_reading; a source that published nothing is status dark. The desk-name raw_* fields and the freshness field are gone from paid rows."},{"type":"breaking","text":"Values are typed: a range is {low, high, unit}, a rounded reading is a number with approx: true, a percent is a number with a pct unit. value_text keeps the original wording."},{"type":"breaking","text":"stale follows each measure's cadence: weekly measures go stale after 14 days, monthly measures after 90. Every row states its cadence."},{"type":"breaking","text":"Project ids are opaque and stable (FSP- plus 10 hex characters); project rows credit \"public state construction filing\". Material prices name the store type (big box or local yard) and city, with an outlet_id."},{"type":"breaking","text":"The permit measure for state commercial project filings is commercial_projects_registered_state."},{"type":"added","text":"New endpoints: /api/v1/projects ($0.03), /api/v1/companies ($0.02), /api/v1/cost-per-sqft ($0.03), /api/v1/materials ($0.01)."},{"type":"changed","text":"Prices: series full history $0.25 to $0.05, weekly issue $0.50 to $0.25. Snapshot stays $0.02."},{"type":"added","text":"The 402 body states the price, what the call returns, a free sample URL, the docs URL and how to pay."},{"type":"added","text":"Every parameter is checked before payment. Bad or unknown parameters get a free 400; valid queries with nothing to return get a free 404. Both use one error shape: {ok, error, message, docs, allowed}."},{"type":"added","text":"A free sample of every paid endpoint at /data/v1/samples/<endpoint>.json, built from real data."},{"type":"added","text":"Free /api/v1/health, /api/v1/changelog.json and /.well-known/agent-card.json."},{"type":"removed","text":"The confidence field. Earlier docs promised it on every row; it was never there."}]}]}