{"openapi":"3.1.0","info":{"title":"USBorderWait.com Public Border Wait API","version":"0.1.0","description":"Public read-only border wait feeds, widget contracts, and Agent Connect discovery. Private implementation surfaces are intentionally excluded."},"servers":[{"url":"https://usborderwait.com"}],"tags":[{"name":"Crossings","description":"Public crossing registry and current wait data."},{"name":"Widgets","description":"Attribution-required widget config and embed outputs."},{"name":"Discovery","description":"Public dataset, OpenAPI, and agent discovery."}],"paths":{"/api/public/sites/{siteKey}/crossings":{"get":{"tags":["Crossings"],"summary":"List public crossings for one site.","parameters":[{"name":"siteKey","in":"path","required":true,"schema":{"type":"string","enum":["usborderwait","tiemposdegarita"]}}],"responses":{"200":{"description":"Public crossing list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrossingListResponse"}}}}}}},"/api/public/crossings/{slug}/latest":{"get":{"tags":["Crossings"],"summary":"Read latest public wait snapshot for one crossing.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Latest public wait snapshot.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LatestWaitResponse"}}}}}}},"/api/public/crossings/{slug}/history":{"get":{"tags":["Crossings"],"summary":"Read public wait history for one crossing within entitlement limits.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"range","in":"query","required":false,"schema":{"type":"string","enum":["24h","7d","30d","1y","5y","all"],"default":"24h"}},{"name":"lane_type","in":"query","required":false,"schema":{"type":"string","enum":["general","ready","sentri","nexus","commercial","pedestrian"],"default":"general"}}],"responses":{"200":{"description":"Wait history points and coverage context.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryResponse"}}}}}}},"/api/public/crossings/{slug}/nearby":{"get":{"tags":["Crossings"],"summary":"Read nearby public crossing alternatives.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Nearby crossing alternatives.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NearbyResponse"}}}}}}},"/api/public/widgets/config":{"get":{"tags":["Widgets"],"summary":"Read widget controls, free limits, paid entitlement names, sites, and crossing slugs.","parameters":[{"name":"site_key","in":"query","required":false,"schema":{"type":"string","enum":["usborderwait","tiemposdegarita"]}}],"responses":{"200":{"description":"Widget configuration contract.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetConfigResponse"}}}}}}},"/api/public/widgets/wait-card":{"get":{"tags":["Widgets"],"summary":"Generate current-wait widget output with required attribution.","parameters":[{"name":"crossing_slug","in":"query","required":true,"schema":{"type":"string"}},{"name":"site_key","in":"query","required":true,"schema":{"type":"string","enum":["usborderwait","tiemposdegarita"]}}],"responses":{"200":{"description":"Wait card widget JSON/HTML contract.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetResponse"}}}}}}},"/api/public/widgets/history-chart":{"get":{"tags":["Widgets"],"summary":"Generate historical chart widget output within entitlement limits.","parameters":[{"name":"crossing_slug","in":"query","required":true,"schema":{"type":"string"}},{"name":"site_key","in":"query","required":true,"schema":{"type":"string","enum":["usborderwait","tiemposdegarita"]}},{"name":"range","in":"query","required":false,"schema":{"type":"string","enum":["24h","7d","30d","1y","5y","all"],"default":"7d"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["json","html","csv"],"default":"json"}}],"responses":{"200":{"description":"Historical chart widget output.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetResponse"}},"text/html":{"schema":{"type":"string"}},"text/csv":{"schema":{"type":"string"}}}},"402":{"description":"Paid entitlement required for this range or format."}}}},"/api/public/datasets/catalog":{"get":{"tags":["Discovery"],"summary":"Read public dataset catalog.","responses":{"200":{"description":"Public dataset catalog.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetCatalogResponse"}}}}}}},"/api/public/reports/daily":{"get":{"tags":["Discovery"],"summary":"Read daily regional public border report.","parameters":[{"name":"site_key","in":"query","required":false,"schema":{"type":"string","enum":["usborderwait","tiemposdegarita"]}},{"name":"region","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Daily public regional report with source/freshness context.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DailyReportResponse"}}}}}}},"/api/public/seo-pages":{"get":{"tags":["Discovery"],"summary":"Read published public SEO page registry.","parameters":[{"name":"site_key","in":"query","required":false,"schema":{"type":"string","enum":["usborderwait","tiemposdegarita"]}}],"responses":{"200":{"description":"Public SEO page registry with private routes excluded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeoPageRegistryResponse"}}}}}}},"/api/public/agent/catalog":{"get":{"tags":["Discovery"],"summary":"Read Agent Connect catalog and source contracts.","responses":{"200":{"description":"Agent Connect public source contracts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentCatalogResponse"}}}}}}},"/openapi.json":{"get":{"tags":["Discovery"],"summary":"Read public OpenAPI document.","responses":{"200":{"description":"OpenAPI 3.1 document.","content":{"application/json":{"schema":{"type":"object"}}}}}}}},"x-border-times-agent-connect":{"catalog_url":"https://usborderwait.com/api/public/agent/catalog","tools":[{"id":"latest_wait","endpoint":"/api/public/crossings/san-ysidro/latest","entitlement":"free","coverage_fields":["source","updated_at","is_stale","coverage.caveat","coverage.latest_age_minutes"]},{"id":"wait_history","endpoint":"/api/public/crossings/san-ysidro/history?range=24h","entitlement":"free","coverage_fields":["source","oldest","newest","row_count","latest_age_minutes","caveat"]},{"id":"nearby_crossings","endpoint":"/api/public/crossings/san-ysidro/nearby","entitlement":"free","coverage_fields":["source","updated_at","coverage.caveat","nearby.source","nearby.updated_at","nearby.is_stale"]},{"id":"crossing_list","endpoint":"/api/public/sites/usborderwait/crossings","entitlement":"free","coverage_fields":["source","updated_at","coverage.caveat"]},{"id":"widget_config","endpoint":"/api/public/widgets/config?site_key=usborderwait","entitlement":"free","coverage_fields":["attribution","limits","entitlements"]},{"id":"wait_card_widget","endpoint":"/api/public/widgets/wait-card?crossing_slug=san-ysidro&site_key=usborderwait","entitlement":"free","coverage_fields":["source","updated_at","is_stale","coverage.caveat","coverage.latest_age_minutes"]},{"id":"history_chart_widget","endpoint":"/api/public/widgets/history-chart?crossing_slug=san-ysidro&site_key=usborderwait&range=7d&lane_type=general","entitlement":"paid","coverage_fields":["source","coverage.oldest_timestamp","coverage.newest_timestamp","coverage.row_count","coverage.caveat"]}],"attribution_required":true,"coverage_policy":{"current_wait_claims_require":["updated_at","is_stale=false","source","coverage.latest_age_minutes"],"historical_claims_require":["range","lane_type","oldest","newest","row_count","caveat"],"widget_claims_require":["coverage","attribution","backlink_url","license_url"]},"live_mcp_runtime_enabled":false,"private_route_inventory_exposed":false},"components":{"schemas":{"CrossingListResponse":{"type":"object","additionalProperties":true},"LatestWaitResponse":{"type":"object","additionalProperties":true},"HistoryResponse":{"type":"object","additionalProperties":true},"NearbyResponse":{"type":"object","additionalProperties":true},"WidgetConfigResponse":{"type":"object","additionalProperties":true},"WidgetResponse":{"type":"object","additionalProperties":true},"DatasetCatalogResponse":{"type":"object","additionalProperties":true},"DailyReportResponse":{"type":"object","additionalProperties":true},"SeoPageRegistryResponse":{"type":"object","additionalProperties":true},"AgentCatalogResponse":{"type":"object","additionalProperties":true}}}}