Dynamic Message Signs — the big electronic boards over the highway — are the fastest traveler-information channel a state DOT controls. When a crash happens, the sign two miles upstream often updates before the incident appears in the public 511 feed. Amber alerts, travel times, lane closures, weather warnings, evacuation routes — it all flows through DMS first.
The catch: every state publishes its DMS inventory differently — from clean JSON APIs to multi-district web endpoints to obfuscated binary feeds. Some publish a clean “current message” field; others give you multiple message phases you have to reassemble into the line that’s actually displayed.
Road511 normalizes all of it into one endpoint. One API call returns the live text on every DMS across 30+ jurisdictions. And we’re the only API that publishes a historical archive of message changes.
What You Get
curl "https://api.road511.com/api/v1/features?type=signs&jurisdiction=GA&limit=10" \
-H "X-API-Key: your_key"
{
"data": [
{
"id": "ga-sign-i85-042",
"jurisdiction": "GA",
"feature_type": "signs",
"name": "I-85 NB at Clairmont Rd",
"latitude": 33.8103,
"longitude": -84.3179,
"properties": {
"message": "WEEKEND RDWK ALERT\nI-85 S EXIT 109 - 103\nFRI 9PM - MON 5AM",
"direction": "Southbound"
}
}
],
"total": 217,
"has_more": true
}
The message field is the exact text on the sign, with the sign’s own line breaks preserved as newlines (\n). A dark or default sign comes back with an empty message or a source sentinel such as NO_MESSAGE, so filtering those out client-side leaves the signs that actually have something to say. What else rides in properties varies by DOT — many sources add direction, and some a sign_type or a sign_updated timestamp — but message is the one every source carries.
Filter to Just the Active Signs
Most DMS in any given inventory are blank or showing routine messages. The interesting ones — incidents, alerts, closures — are usually a tiny percentage. Combine type=signs with a bounding box and skip the blanks client-side:
curl "https://api.road511.com/api/v1/features?type=signs\
&bbox=-84.5,33.6,-84.2,33.9\
&limit=200" \
-H "X-API-Key: your_key"
Returns every DMS in metro Atlanta. Drop the ones whose message is empty or a routine default in your client, and you’re left with the handful of signs that have a message worth reading.
GeoJSON for Map Overlays
Same query, GeoJSON shape, ready to drop onto Leaflet, Mapbox, or QGIS:
curl "https://api.road511.com/api/v1/features/geojson?type=signs\
&bbox=-84.5,33.6,-84.2,33.9" \
-H "X-API-Key: your_key"
const res = await fetch(
'https://api.road511.com/api/v1/features/geojson'
+ '?type=signs&bbox=-84.5,33.6,-84.2,33.9',
{ headers: { 'X-API-Key': 'your_key' } }
);
const geojson = await res.json();
L.geoJSON(geojson, {
filter: (f) => f.properties.message && f.properties.message !== 'NO_MESSAGE',
pointToLayer: (f, latlng) => L.circleMarker(latlng, {
radius: 7, color: '#f59e0b', fillOpacity: 0.85
}),
onEachFeature: (f, layer) => {
const lines = (f.properties.message || '').split('\n').join('<br>');
layer.bindPopup(`
<strong>${f.properties.name}</strong>
<pre style="font-family: monospace; font-size: 12px">${lines}</pre>
`);
}
}).addTo(map);
Why Aggregating This Matters
DMS messages are a leading indicator. The traffic operator who runs the sign also runs the 511 feed, but the sign update happens first — sometimes ten or fifteen minutes before the event appears in the public incident list. Cross-referencing live sign text with traffic events gives you several things you can’t get from either feed alone:
- Faster incident detection. A sign reading “CRASH AHEAD” is often the earliest public signal that something happened.
- DOT response-time analysis. Compare sign-update timestamps with 511 event timestamps to measure how quickly each agency posts traveler information.
- Coverage gaps. Map every DMS location and you immediately see which corridors have no active traveler information at all — useful for advocacy, fleet routing, or planning where to put your own roadside cameras.
- Amber and Silver alert detection. When a child or vulnerable adult goes missing, AMBER/SILVER alerts cascade through DMS networks within minutes. Pattern-match the message text and you have a real-time alerting feed.
Coverage
DMS data lives in the signs feature type. We pull from every state and province that exposes a public sign feed. Counts below are approximate active inventory; specific signs come and go as DOTs install or retire hardware.
| Jurisdiction | Approx. signs |
|---|---|
| Michigan (MI) | ~487 |
| Oregon (OR) | ~485 |
| Texas (TX) | varies, 25 districts |
| Wyoming (WY) | ~151 |
| Montana (MT) | ~123 |
| North Dakota (ND) | ~100 |
| Mississippi (MS) | ~76 |
| Alabama (AL) | ~73 |
| Ohio (OH) | varies |
| Oklahoma (OK) | varies |
| Georgia + 8 more states | varies per state |
| NEC (ME, NH, VT) | varies |
| Kentucky, Tennessee, Virginia, Arkansas | varies |
If a state publishes DMS data, we ingest it. New states roll in regularly — we’ve done the per-source unification work so you don’t have to.
Who Uses This
- Navigation apps — surface upcoming sign messages along the route, exactly as the driver will see them.
- Traffic management consultants — benchmark DMS coverage, response time, and message frequency across agencies.
- Emergency alert platforms — pattern-match for AMBER, SILVER, BLUE, and evacuation messages and turn them into push notifications.
- Researchers — analyze the effectiveness of traveler information against driver behavior data.
- News and TV stations — pull current DMS messages directly into traffic segments without staffing a broadcast operations desk.
One Note on Polling and Freshness
DMS feeds are polled by Road511 on schedules between 1 and 5 minutes depending on the state, with adaptive backoff if a feed misbehaves. Where a source stamps its own change time we surface it as sign_updated in properties; otherwise the message you read is at most one polling interval old. For the time-critical use cases (amber alerts, incidents), keep your client on a 30–60 second cache and you’ll see new messages within a couple minutes of the operator posting them.
Try It
- Live map — click any sign marker to see the current message, including line breaks.
- API docs — full parameter reference for
features?type=signs,features/geojson, and feature history. - Free API key — no credit card, 14-day trial.
See what every highway sign is saying right now
One API call returns the live message on every DMS across 30+ states and provinces — plus a historical archive nobody else publishes. Free 14-day trial. No credit card.
Get Free API Key Explore the Map