Frontera Signal Nearby API
The Nearby API from Frontera Signal — 1 operation(s) for nearby.
The Nearby API from Frontera Signal — 1 operation(s) for nearby.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/fronterasignal-com:fronterasignal-com-nearby-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Frontera Signal Nearby API
version: 1.8.0
description: 'Market data for the Rio Grande Valley, Texas, paid per call. Construction: weekly permits, building-input prices, housing supply and labor for Hidalgo and Cameron counties; commercial projects, projects near an address, company track records with trade licenses, monthly housing permits and filed cost per square foot for Hidalgo, Cameron, Starr and Willacy; Hidalgo County parcel records; shelf prices for common building materials. Border and trade: bridge wait times now and by hour of week at the 11 Valley crossings, monthly crossings by port, the peso and Gulf Coast diesel. Local business: city sales tax by month, new business outlets by city and industry, bar and restaurant alcohol sales by location, home health agencies with star ratings, and a snapshot per industry. Ask the Valley answers one plain question in English or Spanish from all of it. Every value carries as_of, age_days, cadence and stale (weekly measures go stale after 14 days, monthly measures after 90). dark = the source published nothing that week; no_reading = we have no reading for it. Ranges are {low, high, unit}; approx marks a rounded reading. Not a quote, bid or appraisal. Terms: https://fronterasignal.com/terms/'
termsOfService: https://fronterasignal.com/terms/
contact:
name: Frontera Signal
email: hello@fronterasignal.com
url: https://fronterasignal.com/contact/
license:
name: Frontera Signal terms of use
url: https://fronterasignal.com/terms/
x-guidance: 'Frontera Signal sells Rio Grande Valley (South Texas) market data per call over x402: construction, border crossings and bridge waits, peso and diesel, city sales tax, new businesses, alcohol sales and home health. USDC on Base, no account, no API key.
1. Read the free catalog first: GET https://fronterasignal.com/api/v1 lists every paid endpoint, its price, what it returns, its parameters and a free sample.
2. Free samples: https://fronterasignal.com/data/v1/samples/<endpoint>.json is one real answer per paid endpoint. https://fronterasignal.com/data/v1/index.json carries the latest 4 weeks of each weekly series.
3. Call a paid endpoint without payment: it answers 402 with a JSON body (price, returns, sample, docs, how_to_pay) and a PAYMENT-REQUIRED header (base64 JSON, x402 v2). Sign and retry with a PAYMENT-SIGNATURE header; a 200 carries PAYMENT-RESPONSE with the settlement.
4. Bad or unknown parameters get a free 400 and a valid query with nothing to return gets a free 404, before any payment, as {ok, error, message, docs, allowed}. allowed lists every parameter and its valid values. A payment is never settled on a 4xx or 5xx. nearby and parcel look the address up after the payment is verified, so an address they cannot place is a 404 that is not settled; GET /api/v1/parcel/match checks a parcel address for free first.
Border and local business: bridge waits now -> /api/v1/bridge-wait; typical wait by hour of week -> /api/v1/bridge-hourly; monthly trucks, cars and pedestrians by port -> /api/v1/crossings; pesos per dollar -> /api/v1/peso; Gulf Coast diesel -> /api/v1/diesel; city sales tax -> /api/v1/sales-tax; new businesses by city and industry -> /api/v1/new-outlets; bar and restaurant alcohol sales -> /api/v1/alcohol-sales; home health agencies and ratings -> /api/v1/home-health; one industry in one call -> /api/v1/industry.
Which endpoint: one city or the whole Valley this week -> /api/v1/snapshot. New commercial projects with owner, cost and dates -> /api/v1/projects. Projects within a radius of an address -> /api/v1/nearby. A company track record and its trade licenses -> /api/v1/companies. The Hidalgo County parcel record for an address -> /api/v1/parcel. Filed cost per square foot by county and type of work -> /api/v1/cost-per-sqft. Shelf prices for building materials -> /api/v1/materials. Monthly housing permits by structure type -> /api/v1/series/permits-monthly. Weekly history of permits, input prices, housing supply, labor or forecast grades -> /api/v1/series/<name>. The written weekly issue -> /api/v1/issue.
A question in plain English or Spanish -> /api/v1/ask?q=...&lang=en|es ($0.25): one call reads the right endpoints and answers with the numbers used (data), the endpoints read (sources) and the newest date (as_of). A question outside the data is answered with in_scope false and the closest endpoint.
Every value carries as_of, age_days, cadence and stale. dark and no_reading rows say a week has no reading; nothing is filled with guesses.
MCP clients: https://fronterasignal.com/mcp (Streamable HTTP) serves the catalog, the free samples, the paid URL and price for your parameters and the free series as free, read-only tools.
A2A clients: https://fronterasignal.com/a2a (JSON-RPC, A2A-Version 1.0) answers a message that names an endpoint or a Valley city with the paid URL and price. Free and read-only.'
x-mcp:
url: https://fronterasignal.com/mcp
transport: streamable-http
price: free
tools:
- list_endpoints
- get_sample
- how_to_pay
- get_free_series
about: 'Free and read-only: the paid endpoints and prices, a real sample per endpoint, the exact paid URL for your parameters and the free latest-4-weeks series. Payment stays on the HTTP API.'
x-a2a:
url: https://fronterasignal.com/a2a
protocol_binding: JSONRPC
protocol_version: '1.0'
price: free
agent_card: https://fronterasignal.com/.well-known/agent-card.json
about: 'Free and read-only: send a message that names an endpoint or a Valley city and get the exact paid URL and price back. Send the header A2A-Version: 1.0.'
servers:
- url: https://fronterasignal.com
tags:
- name: Nearby
paths:
/api/v1/nearby:
get:
operationId: nearby
summary: Projects near an address
description: 'Use to size competing or neighboring construction around one Rio Grande Valley address before you buy, lend, lease or build there: count, summed filed cost and each commercial project within radius_mi (default 1, max 5), nearest first. Hidalgo, Cameron, Starr and Willacy counties; about 68% of filings have a map point. An address we cannot place is a free 404. Example: "How many commercial projects were filed within two miles of 1201 E Capote Central Ave, Pharr, and what are they worth?"
Returns: Filed commercial projects within a radius of a Valley street address: how many, their summed and largest filed cost, a split by type of work, and each project with its distance and map point, nearest first.
Free sample (a real answer to /api/v1/nearby?address=1201+E+Capote+Central+Ave&city=Pharr&radius_mi=2): https://fronterasignal.com/data/v1/samples/nearby.json'
externalDocs:
description: 'Free sample: a real answer to /api/v1/nearby?address=1201+E+Capote+Central+Ave&city=Pharr&radius_mi=2'
url: https://fronterasignal.com/data/v1/samples/nearby.json
x-payment-info:
protocols:
- x402: {}
price:
mode: fixed
currency: USD
amount: '0.03'
network: eip155:8453
asset: USDC
security: []
parameters:
- name: address
in: query
required: true
description: Street address with house number, e.g. 800 S 10th St. A suite or unit is ignored.
schema:
type: string
minLength: 5
maxLength: 120
example: 800 S 10th St
- name: city
in: query
required: true
description: The city or town on the address, e.g. McAllen, Brownsville, Rio Grande City.
schema:
type: string
minLength: 2
maxLength: 40
example: McAllen
- name: radius_mi
in: query
required: false
description: Radius in miles, 0.1 to 5. Default 1.
schema:
type: number
minimum: 0.1
maximum: 5
default: 1
example: 1
responses:
'200':
description: 'Filed commercial projects within a radius of a Valley street address: how many, their summed and largest filed cost, a split by type of work, and each project with its distance and map point, nearest first.'
content:
application/json:
schema:
type: object
properties:
publisher:
type: string
dataset:
type: string
query:
type: object
properties:
address:
type: string
city:
type: string
radius_mi:
type: integer
required:
- address
- city
- radius_mi
location:
type: object
properties:
matched_address:
type: string
lat:
type: number
lon:
type: number
county:
type: string
placed_by:
type: string
required:
- matched_address
- lat
- lon
- county
- placed_by
radius_mi:
type: integer
source:
type: string
as_of:
type: string
cadence:
type: string
coverage:
type: object
properties:
counties:
type: array
items:
type: string
registered_since:
type: string
filings:
type: integer
located:
type: integer
located_pct:
type: number
note:
type: string
required:
- counties
- registered_since
- filings
- located
- located_pct
- note
count:
type: integer
total_estimated_cost_usd:
type: integer
projects_with_cost:
type: integer
largest_project_cost_usd:
type: integer
newest_registration:
type: string
by_type_of_work:
type: array
items:
type: object
properties:
type_of_work:
type: string
count:
type: integer
total_estimated_cost_usd:
type: integer
required:
- type_of_work
- count
- total_estimated_cost_usd
returned:
type: integer
projects:
type: array
items:
type: object
properties:
distance_mi:
type: number
id:
type: string
name:
type: string
facility:
type: string
address:
type: string
city:
type: string
county:
type: string
zip:
type: string
owner:
type: string
design_firm:
type:
- 'null'
- string
estimated_cost_usd:
type: integer
square_feet:
type: integer
estimated_start:
type: string
estimated_end:
type: string
status:
type: string
type_of_work:
type: string
scope_of_work:
type: string
funding:
type: string
registered:
type: string
source:
type: string
lat:
type: number
lon:
type: number
geo_precision:
type: string
required:
- distance_mi
- id
- name
- facility
- address
- city
- county
- zip
- owner
- design_firm
- estimated_cost_usd
- square_feet
- estimated_start
- estimated_end
- status
- type_of_work
- scope_of_work
- funding
- registered
- source
- lat
- lon
- geo_precision
note:
type: string
disclaimer:
type: string
required:
- publisher
- dataset
- query
- location
- radius_mi
- source
- as_of
- cadence
- coverage
- count
- total_estimated_cost_usd
- projects_with_cost
- largest_project_cost_usd
- newest_registration
- by_type_of_work
- returned
- projects
- note
- disclaimer
example:
publisher: Frontera Signal
dataset: nearby
query:
address: 1201 E Capote Central Ave
city: Pharr
radius_mi: 2
location:
matched_address: 1201 E CAPOTE CENTRAL AVE, PHARR TX
lat: 26.089523
lon: -98.189325
county: Hidalgo County, Texas
placed_by: parcel_centroid
radius_mi: 2
source: public state construction filing
as_of: '2026-11-08'
cadence: daily
coverage:
counties:
- Cameron
- Hidalgo
- Starr
- Willacy
registered_since: '2024-10-01'
filings: 1527
located: 999
located_pct: 65.4
note: 65.4% of the filings we hold have a map point. The rest (intersections, addresses with no house number, addresses not on the map yet) cannot be counted by distance, so treat count as a floor.
count: 11
total_estimated_cost_usd: 44131468
projects_with_cost: 11
largest_project_cost_usd: 12156468
newest_registration: '2026-09-14'
by_type_of_work:
- type_of_work: Additions to Existing Building
count: 4
total_estimated_cost_usd: 13750000
- type_of_work: New Construction
count: 4
total_estimated_cost_usd: 29356468
- type_of_work: Renovation/Alteration
count: 3
total_estimated_cost_usd: 1025000
returned: 11
projects:
- distance_mi: 0
id: FSP-83c0e15113
name: Building "H"
facility: Building "H"
address: 1201 E Capote Central Ave ste 400 bldg H
city: Pharr
county: Hidalgo
zip: '78577'
owner: OCP Capote 2023 LP
design_firm: null
estimated_cost_usd: 100000
square_feet: 3300
estimated_start: '2026-09-21'
estimated_end: '2026-12-23'
status: Review Complete
type_of_work: Renovation/Alteration
scope_of_work: Renovation / Alteration to existing building
funding: private
registered: '2026-09-14'
source: public state construction filing
lat: 26.08952
lon: -98.18932
geo_precision: parcel_centroid
- distance_mi: 0
id: FSP-4e6d8fe1b5
name: Capote Building H - Suite 200
facility: Capote Building H
address: 1201 E Capote Central
city: Pharr
county: Hidalgo
zip: '78577'
owner: OCP Capote 2023 LP
design_firm: null
estimated_cost_usd: 250000
square_feet: 59448
estimated_start: '2026-04-01'
estimated_end: '2026-05-29'
status: Inspection Complete
type_of_work: Additions to Existing Building
scope_of_work: Architectural Services.
funding: private
registered: '2026-04-28'
source: public state construction filing
lat: 26.08952
lon: -98.18932
geo_precision: parcel_centroid
- distance_mi: 0.7
id: FSP-c246e5d9b4
name: FARMER'S BEST PHASE II
facility: FARMER'S BEST
address: 1460 E. HI LINE RD.
city: Pharr
county: Hidalgo
zip: '78577'
owner: CEUTA PROPERTIES, INC.
design_firm: MEMBER CONSTRUCTION, LLC.
estimated_cost_usd: 7000000
square_feet: 40685
estimated_start: '2025-07-01'
estimated_end: '2026-01-30'
status: Inspection Complete
type_of_work: Additions to Existing Building
scope_of_work: ADDITIONS OF 40,685 SQ.FT. COLD STORAGE TO AN EXISTING COLD STORAGE WAREHOUSE.
funding: private
registered: '2025-06-25'
source: public state construction filing
lat: 26.09891
lon: -98.1849
geo_precision: parcel_centroid
note: 'Nearest first, up to 100 projects; count and the totals cover every project in the radius. Distance is straight-line miles from the address to the project point: the filed street address (street_address) or the center of its parcel (parcel_centroid). Costs are the estimates owners filed with the state, summed as filed.'
disclaimer: 'Every value carries as_of, age_days, cadence and stale (weekly measures go stale after 14 days, monthly measures after 90). dark = the source published nothing that week; no_reading = we have no reading for it. Ranges are {low, high, unit}; approx marks a rounded reading. Not a quote, bid or appraisal. Terms: https://fronterasignal.com/terms/'
'400':
$ref: '#/components/responses/BadRequest'
'402':
description: 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.
headers:
PAYMENT-REQUIRED:
description: Base64 JSON payment requirements (x402 v2).
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentRequired'
example:
error: payment_required
price: $0.03
returns: 'Filed commercial projects within a radius of a Valley street address: how many, their summed and largest filed cost, a split by type of work, and each project with its distance and map point, nearest first.'
sample: https://fronterasignal.com/data/v1/samples/nearby.json
docs: https://fronterasignal.com/openapi.json
how_to_pay: x402 v2, USDC on Base; retry with PAYMENT-SIGNATURE
'404':
$ref: '#/components/responses/NotFound'
'503':
$ref: '#/components/responses/ServiceUnavailable'
tags:
- Nearby
components:
responses:
BadRequest:
description: '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.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
ok: false
error: unknown_value
message: city must be one of McAllen, Edinburg, Mission, Pharr, San Juan, Weslaco, Donna, Mercedes, Brownsville, Harlingen (got "Laredo").
param: city
docs: https://fronterasignal.com/openapi.json
allowed:
city:
type: enum
description: A Valley city. Omit for the whole Valley.
ServiceUnavailable:
description: '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.
ask_not_configured (503): ask: the answering service is not switched on for this deployment. Never charged.
ask_unavailable (503): ask: the answer could not be written in time. Retry in a minute. Never settled.
data_warming_up (503): A self-updating dataset (bridge waits, crossings, peso, diesel, sales tax, new outlets, alcohol sales, home health) has not been stored yet. Retry after the next refresh. Never settled.'
headers:
Retry-After:
description: Seconds to wait before retrying.
schema:
type: integer
example: 2
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
ok: false
error: payment_service_starting
message: The payment service is starting. Retry in 2 seconds.
docs: https://fronterasignal.com/openapi.json
retry_after_seconds: 2
NotFound:
description: '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.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
ok: false
error: no_results
message: No filed projects match city=McAllen, since=2026-10-03. Widen the filters; filings go back to 2024-10-01.
docs: https://fronterasignal.com/openapi.json
allowed: {}
schemas:
Error:
type: object
required:
- ok
- error
- message
- docs
description: 'One error shape for every refusal. 400 and 404 come before any payment and are free.
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.
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.
rate_limited (429): parcel/match: too many free lookups from one IP address. Retry after the Retry-After header.
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.
ask_not_configured (503): ask: the answering service is not switched on for this deployment. Never charged.
ask_unavailable (503): ask: the answer could not be written in time. Retry in a minute. Never settled.
data_warming_up (503): A self-updating dataset (bridge waits, crossings, peso, diesel, sales tax, new outlets, alcohol sales, home health) has not been stored yet. Retry after the next refresh. Never settled.'
properties:
ok:
type: boolean
const: false
error:
type: string
enum:
- unknown_param
- repeated_param
- missing_param
- bad_param
- unknown_value
- unknown_week
- bad_range
- no_house_number
- not_covered
- no_results
- no_readings
- no_match
- too_few_projects
- not_found
- address_not_found
- ambiguous
- outside_coverage
- not_available
- rate_limited
- upstream_unavailable
- payment_service_starting
- payments_not_configured
- ask_not_configured
- ask_unavailable
- data_warming_up
message:
type: string
description: What was wrong, in a sentence.
param:
type: string
description: The parameter at fault, when there is one.
docs:
type: string
format: uri
const: https://fronterasignal.com/openapi.json
allowed:
type: object
description: Every parameter this endpoint takes, with its type and valid values.
additionalProperties:
type: object
groups:
type: array
description: 'too_few_projects only: the count in each county and type of work.'
items:
type: object
location:
type: object
description: 'nearby no_results only: where the address was placed.'
coverage:
type: object
description: 'nearby no_results only: how many filings have a map point.'
retry_after_seconds:
type: integer
description: payment_service_starting only.
PaymentRequired:
type: object
required:
- error
- price
- returns
- sample
- docs
- how_to_pay
properties:
error:
type: string
const: payment_required
price:
type: string
description: USD per call, paid in USDC.
example: $0.02
returns:
type: string
description: What the paid call answers with, in one line.
sample:
type: string
format: uri
description: A real answer to this endpoint, free.
docs:
type: string
format: uri
how_to_pay:
type: string
const: x402 v2, USDC on Base; retry with PAYMENT-SIGNATURE