BorderLive API
Read-only JSON for ports, current waits, observations, and hourly averages.
Authentication
Pass your key as the x-api-key header. Keys are issued to Business-tier accounts.
Default rate limit is 60 requests per minute per key.
Without a key you can make rate-limited public requests by IP — fine for prototypes and open-source projects that link back.
Endpoints
GET /api/v1/ports
All land ports of entry. Optional `?border=mx|ca`.
curl https://borderlive.us/api/v1/ports?border=mx
GET /api/v1/port-current
Latest wait per port and lane. `?include=ports` joins port metadata.
curl 'https://borderlive.us/api/v1/port-current?include=ports'
GET /api/v1/wait-observations
Time-series of observations. `?port_id=...&hours=24`.
curl 'https://borderlive.us/api/v1/wait-observations?port_id=PORT_ID&hours=24'
GET /api/v1/port-hourly-averages
Hour-of-day × day-of-week averages. `?port_id=...`.
curl 'https://borderlive.us/api/v1/port-hourly-averages?port_id=PORT_ID'
JavaScript example
const res = await fetch(
"https://borderlive.us/api/v1/port-current?include=ports"
);
const { ports } = await res.json();
const sanYsidro = ports.find((p) => p.slug === "san-ysidro");
console.log(sanYsidro.current);Attribution
Data comes from the public U.S. Customs and Border Protection (CBP) feed. If you publish anything built on this API, a link back to borderlive.us is appreciated.