Real-life examples and how to fix them¶
In this example, we present examples of Service Alerts that were created for real-world agencies. We explore the issues with these alerts and suggest improvements to them.
1) Toronto Transit Commission¶
Published on 28-03-2025
- The header is badly formatted. It seems to continue into the description.
- The header should be modified to “Line 1 Yonge-University: No service between St George and St Andrew”.
- The description should be finished: “Service will resume…”
- The effect should be modified to
MODIFIED_SERVICE. - Do not set
NO_SERVICEas this effect is currently generally concerned with stop and platform closures. In this case, it seems like the trip is effectively split in the middle into two separate trips. - The cause should be modified to
MAINTENANCE. - Too many
route_idsincluded as informed entities. The only route that should be mentioned is the Yonge-University Line (route_id=1). And all station stop_ids between St George and St Andrew should be mentioned. - No time period is associated with the alert.
{
"id": "1",
"alert": {
"informedEntity": [
{
"agencyId": "1",
"routeId": "508"
},
{
"agencyId": "1",
"routeId": "13"
},
{
"agencyId": "1",
"routeId": "503"
},
{
"agencyId": "1",
"routeId": "504"
},
{
"agencyId": "1",
"routeId": "505"
},
{
"agencyId": "1",
"routeId": "501"
},
{
"agencyId": "1",
"routeId": "94"
},
{
"agencyId": "1",
"routeId": "97"
},
{
"agencyId": "1",
"routeId": "304"
},
{
"agencyId": "1",
"routeId": "19"
},
{
"agencyId": "1",
"routeId": "26"
},
{
"agencyId": "1",
"routeId": "300"
},
{
"agencyId": "1",
"routeId": "301"
},
{
"agencyId": "1",
"routeId": "303"
},
{
"agencyId": "1",
"routeId": "305"
}
`],
"cause": "UNKNOWN_CAUSE",
"effect": "UNKNOWN_EFFECT",
"headerText": {
"translation": [
{
"text": "Line 1 Yonge-University: There i",
"language": "en"
}
]
},
"descriptionText": {
"translation": [
{
"text": "There is no subway service on Line 1 Yonge-University between St George and St Andrew stations due to planned track work. Shuttle buses will not operate. Follow the station signs or speak to a TTC employee for help. Service will resume",
"language": "en"
}
]
}
}
}
Improved alert
{
"id": "1",
"alert": {
"informedEntity": [
{
"agencyId": "1",
"routeId": "1",
"stopId": "14445", // St George Station - southbound platform`
},
{
"agencyId": "1",
"routeId": "1",
"stopId": "14446", // Museum Station - southbound platform`
},
`…`
{
"agencyId": "1",
"routeId": "1",
"stopId": "14421", // St Andrew Station - southbound platform`
},
{
"agencyId": "1",
"routeId": "1",
"stopId": "14422", // Osgoode Station - southbound platform`
},
`...`
`],
"cause": "MAINTENANCE",
"effect": "NO_SERVICE",
"activePeriod": [
{
"start": ...`
"end": ...`
}
`],
"headerText": {
"translation": [
{
"text": "Line 1 Yonge-University: No service between St George and St Andrew",
"language": "en"
}
]
},
"descriptionText": {
"translation": [
{
"text": "There is no subway service on Line 1 Yonge-University between St George and St Andrew stations due to planned track work. Shuttle buses will not operate. Follow the station signs or speak to a TTC employee for help. Service will resume at 3AM.",
"language": "en"
}
]
}
}
}
2) BC Transit¶
Published on 28-03-2025
- The header should be expanded: “No service in the Cowichan Valley due to Labour action.”
- The cause should be modified to
STRIKE. - The effect should be modified to
NO_SERVICE. - The URL mentioned in the description should be included in the
urlfield.
{
"id": "ft-TX1173397",
"alert": {
"activePeriod": [
{
"start": "1739001600"
}
`],
"informedEntity": [
{
"routeId": "2-COW"
},
{
"routeId": "3-COW"
},
`...`
`],
"cause": "UNKNOWN_CAUSE",
"effect": "OTHER_EFFECT",
"headerText": {
"translation": [
{
"text": "No Service"
}
]
},
"descriptionText": {
"translation": [
{
"text": "Please be advised that all services in the Cowichan Valley are suspended due to labour action.\r\n\r\nWe apologize for any inconvenience this may cause. \r\n\r\nFor updates please sign up for alerts, please visit\u202fhttps://www.bctransit.com/cowichan-valley "
}
]
}
}
}
Improved alert
{
"id": "ft-TX1173397",
"alert": {
"activePeriod": [
{
"start": "1739001600"
}
`],
"informedEntity": [
{
"routeId": "2-COW"
},
{
"routeId": "3-COW"
},
`...`
`],
"cause": "STRIKE",
"effect": "NO_SERVICE",
"headerText": {
"translation": [
{
"text": "No service in the Cowichan Valley due to Labour action"
}
]
},
"descriptionText": {
"translation": [
{
"text": "Please be advised that all services in the Cowichan Valley are suspended due to labour action.\r\n\r\nWe apologize for any inconvenience this may cause. \r\n\r\nFor updates please sign up for alerts, please visit\u202fhttps://www.bctransit.com/cowichan-valley"
}
]
},
`“url”: “https://www.bctransit.com/cowichan-valley”,
}
}
3) MBTA¶
Published on 02-04-2025
- Really good
informed_entity, including the exact trip and direction. - The header contains information that can be transferred to the description.
- The alert could use a
SIGNIFICANT_DELAYSeffect.
{
"id": "634445",
"alert": {
"activePeriod": [
{
"start": "1743086220",
"end": "1743091200"
}
`],
"informedEntity": [
{
"agencyId": "1",
"routeId": "CR-Haverhill",
"routeType": 2,
"trip": {
"tripId": "SPRING2025V2-728425-1231-HaverhillBradfordVan",
"routeId": "CR-Haverhill",
"directionId": 0`
}
}
`],
"cause": "UNKNOWN_CAUSE",
"effect": "OTHER_EFFECT",
"headerText": {
"translation": [
{
"text": "Haverhill Line Train 1231 (10:25 am from North Station) is operating 10-20 minutes behind schedule between North Station and Reading due to a signal issue.",
"language": "en"
}
]
},
"descriptionText": {
"translation": [
{
"text": "Affected direction: Outbound",
"language": "en"
}
]
},
"severityLevel": "WARNING"
}
}
Improved alert
{
"id": "634445",
"alert": {
"activePeriod": [
{
"start": "1743086220",
"end": "1743091200"
}
`],
"informedEntity": [
{
"agencyId": "1",
"routeId": "CR-Haverhill",
"routeType": 2,
"trip": {
"tripId": "SPRING2025V2-728425-1231-HaverhillBradfordVan",
"routeId": "CR-Haverhill",
"directionId": 0`
}
}
`],
"cause": "UNKNOWN_CAUSE",
"effect": "SIGNIFICANT_DELAYS",
"headerText": {
"translation": [
{
"text": "Haverhill Line Train 1231 running behind schedule.",
"language": "en"
}
]
},
"descriptionText": {
"translation": [
{
"text": "Haverhill Line Train 1231 (10:25 am from North Station) is operating 10-20 minutes behind schedule between North Station and Reading due to a signal issue. Affected direction: Outbound",
"language": "en"
}
]
},
"severityLevel": "WARNING"
}
}
4) AMB-Mobilitat¶
Published on 28-03-2025
- The affected stops (if known) should be added to both the description and to informed entities.
- Characters like \ and \n should be replaced by plain text counterparts.
{
"id": "24950",
"alert": {
"activePeriod": [
{
"start": "1743724800",
"end": "1743811140"
}
`],
"informedEntity": [
{
"routeId": "302"
},
{
"routeId": "303"
},
{
"stopId": "107046"
}
`],
"cause": "MAINTENANCE",
"effect": "DETOUR",
"url": {
"translation": [
{
"text": "http://www.ambmobilitat.cat/Principales/Noticia.aspx?incidencia=24950&idioma=1",
"language": "ca"
},
{
"text": "http://www.ambmobilitat.cat/Principales/Noticia.aspx?incidencia=24950&idioma=2",
"language": "es"
}
]
},
"headerText": {
"translation": [
{
"text": "Desviament provisional al carrer Prat de la Riba afectant parades",
"language": "ca"
},
{
"text": "Desv\u00edo provisional en la calle Prat de la Riba afectando paradas",
"language": "es"
}
]
},
"descriptionText": {
"translation": [
{
"text": "Divendres 4 d’abril de 2025 durant tot el servei, es modifica el recorregut habitual al carrer Prat de la Riba de Santa Coloma de Gramenet amb l’anul·lació provisional de les parades afectades.\n\nLes línies seran desviades tal i com s’indica al plànol següent:\n\n\n",
"language": "ca"
},
{
"text": "Viernes 4 de abril de 2025 durante todo el servicio, se modifica el recorrido habitual en la calle Prat de la Riba de Santa Coloma de Gramenet con la anulación provisional de las paradas afectadas.\n\nLas lineas serán desviadas tal y como se indica en el siguiente plano:\n\n:\n",
"language": "es"
}
]
}
}
}
5) King County Metro¶
Published on 28-03-2025
- The cause should be modified to
OTHER_CAUSE. - A description should be added.
{
"id": "18180",
"alert": {
"activePeriod": [
{
"start": "1657226640"
}
`],
"informedEntity": [
{
"agencyId": "1",
"routeId": "102698",
"routeType": 3`
}
`],
"cause": "UNKNOWN_CAUSE",
"effect": "NO_SERVICE",
"url": {
"translation": [
{
"text": "https://svtbus.org/duvall-monroe-shuttle/",
"language": "en"
}
]
},
"headerText": {
"translation": [
{
"text": "Duvall-Monroe Shuttle service is suspended until further notice due to driver shortage.\n\n",
"language": "en"
}
]
},
"descriptionText": {
"translation": [
{
"text": "",
"language": "en"
}
]
},
"severityLevel": "SEVERE"
}
}
6) Ruter - OSLO¶
Published on 02-04-2025
- No cause or effect are mentioned. At least a
MODIFIED_SERVICEeffect should be added. - Do not set
NO_SERVICEas this effect is currently generally concerned with stop and platform closures. In this case, it seems like the trip is effectively split in the middle into two separate trips. - The
route_idfor the metro should be included ininformed_entity, along with the unserved segment of stations. - If the replacement bus service does not exist in the GTFS Schedule, it should be added to the GTFS Schedule. If the replacement bus service corresponds to a route in the GTFS and you cannot define the additional trips in the GTFS Schedule, then create it in
tripUpdateswith theTripDescriptor \= NEW. - The language codes need to be provided with the header and description text.
{
"id": "RUT:SituationNumber:732042",
"alert": {
"activePeriod": [
{
"start": "1743130800",
"end": "1762218000"
}
`],
"url": {},
"headerText": {
"translation": [
{
"text": "Buss for T-bane mellom Borgen og Majorstuen"
},
{
"text": "Bus replacement service between Borgen and Majorstuen "
}
]
},
"descriptionText": {
"translation": [
{
"text": "Buss erstatter T-banen mellom Borgen og Majorstuen. T-banen kj\u00f8rer Kols\u00e5s\u2013Borgen og Stortinget\u2013Mortensrud."
},
{
"text": "Bus replaces the Metro between Borgen and Majorstuen. The Metro runs between Kols\u00e5s and Borgen, and between Stortinget and Mortensrud."
}
]
}
}
}
7) Calgary Transit¶
Published on 02-04-2025
- The field
agency_iddoes not exist in the GTFS Schedule. So the agency_id in informed entities points to the agency_name. Since there is only one agency in the GTFS Schedule feed (Calgary Transit), it is better to only keep theroute_idininformed_entity. - A header should be added.
- The description text should become plain text.
- The description seems to include the cause and effect of the alert.
- The cause should be added as
WEATHER. - The effect mentioned is
SIGNIFICANT_DELAYS. However, the description alludes to closed stops or potentially a detour. Therefore, the description should be clarified along with the effect. - If possible, split the alert into multiple alerts; one for the stop closure or detour, the other for any significant delays that might arise from it.
{
"id": "143607",
"alert": {
"activePeriod": [
{
"start": "1743605700",
"end": "1743832740"
}
`],
"informedEntity": [
{
"agencyId": "Calgary Transit",
"routeId": "123"
}
`],
"headerText": {
"translation": [
{
"text": "",
"language": "en"
}
]
},
"descriptionText": {
"translation": [
{
"text": "<div data-headertext=\"Major service delay\" data-cause=\"WEATHER\" data-effect=\"SIGNIFICANT_DELAYS\"></div><p>Due to current weather conditions, we are unable to serve Hidden Creek Drive N.W.</b>\n<p><b>Stops temporarily closed:</b>\n<p>Northbound: #9340, #9341, #9342 and #9705\n<p><b>Buses running to North Point will travel:</b>\n<ul>\n<li>From Hidden Valley Link N.W.\n<li>South on Beddington Trail N.W.\n<li>East on Country Hills Boulevard N.W.\n<li>North on Panorma Hills Boulevard N.W.\n<li>West on Panamount Boulevard N.W.\n<li>East on Pantella Boulevard N.W. to regular route\n</ul>\n<p>For more information on snow detours, please visit calgarytransit.com/snowdetours",
"language": "en"
}
]
}
}
}
8) MTA New York City Transit¶
Published on 02-04-2025
- The header is much longer than the description. The second part of the header “ - use the stops on Lexington Ave at E 53rd St or E 41st St instead” can be transferred to the description.
- The
stop_idfor Lexington Ave at E 46th St should be added to each entity in informed entities, to specify that the alert is only applied to the affected routes at the “Lexington Ave at E 46th St “ stop only. If the affected routes are the only routes that use that stop, then theroute_idsare not necessary to include. - The cause should be added as
CONSTRUCTION. - The effect should be added as
NO_SERVICE. - HTML entities like “\</b>” should be replaced with plain text alternatives.
- The “en-html” translation should be removed.
{
"id": "lmm:planned_work:21840",
"alert": {
"activePeriod": [
{
"start": "1733288400",
"end": "1759104000"
}
`],
"informedEntity": [
{
"agencyId": "MTA NYCT",
"routeId": "SIM11"
},
{
"agencyId": "MTA NYCT",
"routeId": "SIM6"
}
`],
"headerText": {
"translation": [
{
"text": "Southbound SIM6 and SIM11 buses are skipping the stop on Lexington Ave at E 46th St - use the stops on Lexington Ave at E 53rd St or E 41st St instead",
"language": "en"
},
{
"text": "<p>Southbound <b>SIM6</b> and <b>SIM11</b> buses are skipping the stop on Lexington Ave at E 46th St - use the stops on Lexington Ave at E 53rd St or E 41st St instead</p>",
"language": "en-html"
}
]
},
"descriptionText": {
"translation": [
{
"text": "See a map of the bypass.\n\nWhat's happening?\nWater main construction",
"language": "en"
},
{
"text": "<p><a title=\"\" href=\"https://files.mta.info/s3fs-public/2024-12/Southbound%20%E2%80%8CSIM6%E2%80%8C%20and%20%E2%80%8CSIM11%E2%80%8C%20stop%20on%20Lexington%20Ave%20at%20E%2046th%20St%20is%20being%20skipped.png\" rel=\"noopener noreferrer nofollow\" data-link-auto=\"\" target=\"_blank\">See a map</a> of the bypass.</p><p></p><p><strong>What's happening?</strong></p><p>Water main construction</p>",
"language": "en-html"
}
]
}
}
}
9) MTA Bus Company¶
Published on 02-04-2025
- The effect should be modified to
ACCESSIBILITY_ISSUE. - The cause should be modified to
MAINTENANCEorCONSTRUCTION. - In
informed_entity, thestop_idfor the [7] platform should be mentioned, the station as well. - “accessibility icon” should be removed, and HTML entities like “\ ” should be replaced with plain text alternatives.
- The “en-html” translation should be removed.
{
"id": "lmm:planned_work:22052",
"alert": {
"activePeriod": [
{
"start": "1734411600",
"end": "1758672000"
}
`],
"informedEntity": [
{
"agencyId": "MTABC",
"routeId": "Q70+"
}
`],
"headerText": {
"translation": [
{
"text": "74 St-Broadway/Jackson Hts-Roosevelt Av [E][F][M][R][7] Station elevators from the street level to mezzanine and to/from the [7] platform are closed",
"language": "en"
},
{
"text": "<p><b>74 St-Broadway</b>/<b>Jackson Hts-Roosevelt Av</b> [E][F][M][R][7] Station elevators from the street level to mezzanine and to/from the [7] platform are closed</p>",
"language": "en-html"
}
]
},
"descriptionText": {
"translation": [
{
"text": "accessibility icon The nearest accessible subway station connecting with the Q70-SBS is 61 St-Woodside accessibility icon [7]. \n\nFor additional travel alternatives, plan your trip at mta.info, use the MTA app (download the app for iOS or Android), or check our Elevator & Escalator Status page.\n\nWhat's happening?We're replacing the elevators",
"language": "en"
},
{
"text": "<p>[accessibility icon] The nearest accessible subway station connecting with the <b>Q70-SBS</b> is <b>61 St-Woodside</b> [accessibility icon] [7]. </p><p style=\"min-height:10px\"></p><p>For additional travel alternatives, plan your trip at <a title=\"\" href=\"https://new.mta.info/\" rel=\"noopener noreferrer nofollow\" data-link-auto=\"\" target=\"_blank\">mta.info</a>, use the MTA app (download the app for <a title=\"\" href=\"https://apps.apple.com/us/app/mymta/id1297605670\" rel=\"noopener noreferrer nofollow\" target=\"_blank\">iOS</a> or <a title=\"\" href=\"https://play.google.com/store/apps/details?id=info.mta.mymta&hl=en_US&gl=US\" rel=\"noopener noreferrer nofollow\" target=\"_blank\">Android</a>), or check our Elevator & Escalator Status page.</p><p style=\"min-height:10px\"></p><p><strong>What's happening?</strong><br><a title=\"\" href=\"https://new.mta.info/project/station-accessibility-upgrades/elevator-replacements\" rel=\"noopener noreferrer nofollow\" data-link-auto=\"\" target=\"_blank\">We're replacing the elevators</a></p>",
"language": "en-html"
}
]
}
}
}
10) BigBlueBus¶
Published on 02-04-2025
- The alert includes the effect, cause,
informed_entityand an open-endedactive_period. - The description is concise and shares the necessary information.
- The alert could also include route 7 in the header. It could also include route 7 in informed entities if the stop is skipped only by route 7.
- The alternate stops should be listed in the alert description.
- The URL seems to be a link to the agency’s general alerts page, rather than specific information related to this alert. The URL needs to direct the rider to a page that details the alert or contains information directly related to it.
{
"id": "3f0a0d8a-f751-4d79-843a-98227f597a7d",
"alert": {
"activePeriod": [
{
"start": "1736185080"
}
`],
"informedEntity": [
{
"stopId": "1717"
}
`],
"cause": "MAINTENANCE",
"effect": "NO_SERVICE",
"url": {
"translation": [
{
"text": "https://www.bigbluebus.com/Newsroom/Content.aspx?type=Alerts"
}
]
},
"headerText": {
"translation": [
{
"text": "Stop Closure on Pico Blvd. & Stanley Ave."
}
]
},
"descriptionText": {
"translation": [
{
"text": "Route 7 bus stop located on WB Pico Blvd. at Stanley Ave. will be closed until further notice. For alternate stops, visit: bigbluebus.com/servicealerts."
}
]
}
}
}