You need live navigation data you can trust: incidents, road closures, jams, and practical routes with ETAs. By the end of this guide you will query Waze’s alerts and traffic jams for a bounding box, retrieve driving directions between two coordinates, and ship these results into your app using the Waze Data API on Zyla API Hub.
What you can build with Waze Data API
The Waze Data API exposes two core navigation capabilities:
- Real-time alerts and jams within a geographic rectangle (accidents, road blocks, hazards, traffic jams, police, and more).
- Driving directions between two coordinates, including alerts along each route and flags like “is_fastest” and toll/HOV indicators.
Teams use this to power driver apps, dispatch dashboards, operations tooling, and safety overlays. You get a single account, one API key, and a subscription + quota model via Zyla API Hub, which hosts more than 10,000 public APIs. The Waze Data API listing offers a 7-day trial or 50 requests for first-time Zyla users; check the API page for current access options and pricing.
Getting started on Zyla API Hub
- Open the Waze Data API page and start your trial: Start 7-day trial on Waze Data API.
- Click Subscribe or Start Free Trial (when available) to get your API key.
- Send requests with the header Authorization: Bearer YOUR_API_KEY to the exact Hub URLs below.
If you’re exploring other categories later, you can reuse the same key across APIs in your plan on Zyla API Hub.
Endpoint: Alerts and Jams
Get real-time alerts and jams inside a bounding box, specified by bottom-left and top-right latitude,longitude pairs. Useful for map overlays, driver warnings, or geofenced notifications.
- Method: GET
- URL: https://zylalabs.com/api/4814/waze-data-api/6003/alerts-and-jams
- Required params:
- bottom_left (string): 51.2800,-0.5100
- top_right (string): 51.5000,-0.0800
- Optional params:
- max_alerts (string)
- max_jams (string)
cURL
curl -s -X GET "https://zylalabs.com/api/4814/waze-data-api/6003/alerts-and-jams?bottom_left=51.2800%2C-0.5100&top_right=51.5000%2C-0.0800&max_alerts=100&max_jams=0" \
-H "Authorization: Bearer YOUR_API_KEY"
Official example response
{
"status": "OK",
"request_id": "86b7f40f-b386-4aee-af95-274974d93184",
"parameters": {
"bottom_left": [
"51.2800",
"-0.5100"
],
"top_right": [
"51.5000",
"-0.0800"
],
"max_alerts": 100,
"max_jams": 0
},
"data": {
"alerts": [
{
"alert_id": "alert-1851823848/7b5e52cb-9549-4955-a117-ce19dd01fe9b",
"type": "HAZARD",
"subtype": "HAZARD_ON_ROAD_CONSTRUCTION",
"reported_by": "Causeway one.network",
"description": ".",
"image": null,
"publish_datetime_utc": "2026-07-22T08:30:00.000Z",
"country": "GB",
"city": "Mole Valley",
"street": null,
"latitude": 51.281508,
"longitude": -0.369863,
"num_thumbs_up": 7,
"alert_reliability": 0,
"alert_confidence": 0,
"near_by": null,
"provider": "Elgin (Road works)",
"provider_id": "151505923",
"comments": [],
"num_comments": 0
},
{
"alert_id": "alert-1191763163/60f6957d-0668-49d6-b43f-710177584187",
"type": "HAZARD",
"subtype": "HAZARD_ON_ROAD_CONSTRUCTION",
"reported_by": "Causeway one.network",
"description": ".",
"image": null,
"publish_datetime_utc": "2026-05-15T13:00:00.000Z",
"country": "GB",
"city": "Mole Valley",
"street": "Durleston Park Dr",
"latitude": 51.280691,
"longitude": -0.365612,
"num_thumbs_up": 39,
"alert_reliability": 0,
"alert_confidence": 0,
"near_by": null,
"provider": "Elgin (Road works)",
"provider_id": "149944301",
"comments": [],
"num_comments": 0
},
{
"alert_id": "alert-1618880859/60722796-8030-486e-913c-4e683837b754",
"type": "ROAD_CLOSED",
"subtype": null,
"reported_by": "ClosureMonitor",
"description": "Closed until Jul 31 for roadworks. Ref #151583431",
"image": null,
"publish_…
Key fields you’ll actually use:
- data.alerts[].type and subtype: hazard/jam/closure categorization for UI tags and filtering.
- latitude and longitude: plot on the map or compute proximity to routes/stops.
- publish_datetime_utc: timestamps are UTC ISO-8601; store as UTC and convert in the client only for display.
- city, street, description: populate notification text or operator dashboards.
- num_thumbs_up: simple confidence proxy for triaging.
Python example: filter construction hazards and road closures
import requests
API_KEY = "YOUR_API_KEY"
url = "https://zylalabs.com/api/4814/waze-data-api/6003/alerts-and-jams"
params = {
"bottom_left": "51.2800,-0.5100",
"top_right": "51.5000,-0.0800",
"max_alerts": "100",
"max_jams": "0",
}
headers = {"Authorization": f"Bearer {API_KEY}"}
resp = requests.get(url, headers=headers, params=params, timeout=20)
resp.raise_for_status()
payload = resp.json()
alerts = (payload.get("data") or {}).get("alerts") or []
construction_or_closed = []
for a in alerts:
a_type = a.get("type")
a_sub = a.get("subtype")
if a_type == "ROAD_CLOSED" or a_sub == "HAZARD_ON_ROAD_CONSTRUCTION":
construction_or_closed.append({
"id": a.get("alert_id"),
"type": a_type,
"subtype": a_sub,
"when_utc": a.get("publish_datetime_utc"),
"lat": a.get("latitude"),
"lon": a.get("longitude"),
"street": a.get("street"),
"city": a.get("city"),
"desc": a.get("description"),
})
print(f"Total alerts: {len(alerts)} (construction/closed: {len(construction_or_closed)})")
for row in construction_or_closed[:5]:
print(row)
Notes:
- Coordinates are passed as comma-separated strings. The URL-encoded comma in the cURL sample is handled automatically by the requests library.
- Units: coordinates in degrees; timestamps in UTC; no pagination is documented for this endpoint—use the bounding box and optional max_alerts/max_jams for volume control.
- Cache invalidation: these alerts are real-time by nature; if you cache in a server layer, keep TTLs short for critical safety categories.
Endpoint: Driving Directions
Retrieve route options between two coordinates and the alerts on each route. This is ideal for showing alternatives, computing ETAs, and providing pre-trip hazard previews. The API supports setting the wanted arrival time, but the parameters for that are not detailed here—consult the API page for the latest options.
- Method: GET
- URL: https://zylalabs.com/api/4814/waze-data-api/6004/driving-directions
- Required params:
- source_coordinates (string): 32.0852999,34.78176759999999
- destination_coordinates (string): 32.7940463,34.989571
cURL
What to expect in the response
The response includes one or more routes with attributes like:
- route_name: label suitable for UI.
- length_meters and duration_seconds: use for distance/ETA displays and sorting.
- is_fastest, is_toll, is_hov: route selection logic.
- alerts: array of alert markers along the route (type, subtype, coordinates).
Example fields appear as:
Practical tips:
- duration_seconds is in seconds; convert to minutes for user display and keep the raw seconds for ETA math.
- length_meters is meters; for miles or kilometers, convert client-side to avoid rounding issues.
- If you need route geometry, check for a field like route_coordinates; in the example above it is present but empty—consult the API page for current behavior and flags.
High-signal navigation use cases you can ship this week
- Geofenced driver alerts: Query Alerts and Jams for your service area every N seconds/minutes and push notifications for ROAD_CLOSED or HAZARD_ON_ROAD_CONSTRUCTION types within X meters of active trips.
- Dispatch dashboard overlays: Draw all data.alerts markers inside a regional bounding box; color by type (e.g., red for ROAD_CLOSED, amber for HAZARD).
- Route vetting before assignment: Call Driving Directions for candidate pickup/dropoff; reject non-fastest routes with is_toll=true unless the job permits tolls.
- ETA-aware customer messaging: Use duration_seconds to set expectations, and show the top two alternatives when is_fastest is marginal.
- Ops monitoring: Track spikes in construction hazards via num_thumbs_up and subtype filtering to prioritize comms to field teams.
Implementation details that save time
- Coordinate order: All parameters shown use latitude,longitude in that order, as comma-separated strings.
- Bounding boxes: Use a small rectangle around a driver for on-device polling, or larger boxes per region for server-side aggregation.
- Timestamps: publish_datetime_utc is UTC; store as UTC throughout your backend and localize in the client only when rendering.
- Error handling: Check status and request_id for observability; log request_id to correlate with your monitoring.
- Throughput: The marketplace uses a subscription + quota model, not pay-per-call. For first-time Zyla users, the first API offers a 7-day trial or 50 requests. No Free Plan. For current quotas and limits, see the API page.
Call the API from AI agents via MCP
If you use MCP-compatible clients (Claude Code, Cursor, Windsurf, etc.), point them at the Zyla MCP endpoint and supply your key in the URL:
Once configured, your agent can call the same Waze Data API Hub URLs with the Authorization: Bearer YOUR_API_KEY header. This is helpful for auto-generating integration code, drafting fetch functions, or running quick test calls during development.
End-to-end example flow
- On trip creation, call Driving Directions with source_coordinates and destination_coordinates. Select the route where is_fastest is true; store duration_seconds for ETA.
- During the trip, poll Alerts and Jams for a small bounding box around the driver. If you receive type=ROAD_CLOSED within 300 meters ahead, re-request Driving Directions and propose a reroute.
- In your dashboard, visualize current alerts for all active regions using the same Alerts and Jams endpoint, filtered by subtype and publish_datetime_utc within your recency threshold.
Troubleshooting checklist
- 401/403 responses: verify Authorization: Bearer YOUR_API_KEY and that your subscription is active.
- Empty alerts array: confirm your bounding box actually intersects road networks and that max_alerts/max_jams are not overly restrictive.
- Slow client-side maps: reduce symbol density by filtering to a subset of types, or cluster markers at higher zoom levels.
- ETA feels stale: re-query Driving Directions when Alerts and Jams surface a nearby JAM or ROAD_CLOSED relevant to your path.
FAQ
How often should I poll for Alerts and Jams?
It depends on your use case and quota. For safety-critical overlays, keep intervals short but balanced with your limits; for dashboards, longer intervals may suffice. Start small, measure volume, then tune.
What units do length_meters and duration_seconds use?
Meters and seconds, respectively. Convert in the client to miles/kilometers and minutes as needed.
Can I request routes for a desired arrival time?
The Driving Directions endpoint supports setting a wanted arrival time, but parameters are not detailed here. Check the API page for current options.
How do I filter only construction or closures?
Check data.alerts[].type and subtype, e.g., type=ROAD_CLOSED or subtype=HAZARD_ON_ROAD_CONSTRUCTION.
Is this pay-per-call?
No. Zyla uses a subscription + quota model. For first-time Zyla users, the first API offers a 7-day trial or 50 requests. See the listing for current details.
Ready to add live Waze navigation data to your product? Create your account, get your key, and start building with the Waze Data API: Start 7-day trial on Waze Data API.