{"schema":"https://otranspo.ca/schemas/public-api/v1/route-evidence","schemaVersion":"1.0.0","evidenceState":"measured","generatedAt":"2026-10-09T07:33:45.063Z","route":{"id":"sto:31","publicNumber":"31","operatorId":"sto","operatorName":"STO","variantIds":["sto:31"]},"grading":{"servicePurpose":"conventional","policy":"all_settled_arrivals","contextToVerify":[],"numericOtpPublished":true},"definitions":{"onTime":"absolute difference between the last eligible provider prediction and the scheduled arrival is no more than 300 seconds; this does not measure actual arrival","worstFiveInOneHundred":"95th-percentile difference between last eligible provider predictions and scheduled arrivals; a threshold, not a maximum or average of the latest 5%","noPublishedPosition":"a scheduled trip with no matching public vehicle position in this coverage check; this is not by itself a confirmed no-show or cancellation","riderReports":"investigation leads only; not counted as service-failure proof"},"methods":{"settledArrivals":"last-prediction-within-ten-minutes-v1","scheduledTripPositions":"retained-timetable-trip-position-v2"},"cohorts":[{"routeId":"sto:31","computedAt":"2026-10-09T07:33:45.063Z","summary":{"routeId":"sto:31","routeLabel":"31","operatorId":"sto","observations":81601,"weekdaysObserved":20,"serviceDaysObserved":28,"onTimePct":74.7,"averageDelaySeconds":199.5,"p95DelaySeconds":749,"computedAt":"2026-10-09T07:33:45.063Z","windowStart":"2026-09-09T00:00:00.000Z","windowEnd":"2026-10-08T23:59:59.999Z"},"hourlyReliability":[{"routeId":"sto:31","routeLabel":"31","operatorId":"sto","hour":0,"observations":576,"serviceDays":11,"onTimePct":93.8,"medianDelaySeconds":35,"p95DelaySeconds":303},{"routeId":"sto:31","routeLabel":"31","operatorId":"sto","hour":1,"observations":556,"serviceDays":12,"onTimePct":92.4,"medianDelaySeconds":56,"p95DelaySeconds":330},{"routeId":"sto:31","routeLabel":"31","operatorId":"sto","hour":5,"observations":293,"serviceDays":8,"onTimePct":97.3,"medianDelaySeconds":55,"p95DelaySeconds":276},{"routeId":"sto:31","routeLabel":"31","operatorId":"sto","hour":6,"observations":1099,"serviceDays":12,"onTimePct":92.4,"medianDelaySeconds":152,"p95DelaySeconds":319},{"routeId":"sto:31","routeLabel":"31","operatorId":"sto","hour":7,"observations":2290,"serviceDays":12,"onTimePct":81,"medianDelaySeconds":93,"p95DelaySeconds":497},{"routeId":"sto:31","routeLabel":"31","operatorId":"sto","hour":8,"observations":2662,"serviceDays":12,"onTimePct":64,"medianDelaySeconds":152,"p95DelaySeconds":749},{"routeId":"sto:31","routeLabel":"31","operatorId":"sto","hour":9,"observations":2427,"serviceDays":12,"onTimePct":69.4,"medianDelaySeconds":192,"p95DelaySeconds":1239},{"routeId":"sto:31","routeLabel":"31","operatorId":"sto","hour":10,"observations":2075,"serviceDays":12,"onTimePct":87.5,"medianDelaySeconds":68,"p95DelaySeconds":388},{"routeId":"sto:31","routeLabel":"31","operatorId":"sto","hour":11,"observations":1972,"serviceDays":12,"onTimePct":90.2,"medianDelaySeconds":43,"p95DelaySeconds":370},{"routeId":"sto:31","routeLabel":"31","operatorId":"sto","hour":12,"observations":2047,"serviceDays":12,"onTimePct":90,"medianDelaySeconds":85,"p95DelaySeconds":364},{"routeId":"sto:31","routeLabel":"31","operatorId":"sto","hour":13,"observations":2353,"serviceDays":12,"onTimePct":80.7,"medianDelaySeconds":99,"p95DelaySeconds":569},{"routeId":"sto:31","routeLabel":"31","operatorId":"sto","hour":14,"observations":2158,"serviceDays":12,"onTimePct":74.7,"medianDelaySeconds":102,"p95DelaySeconds":586},{"routeId":"sto:31","routeLabel":"31","operatorId":"sto","hour":15,"observations":1910,"serviceDays":12,"onTimePct":76.6,"medianDelaySeconds":107,"p95DelaySeconds":843},{"routeId":"sto:31","routeLabel":"31","operatorId":"sto","hour":16,"observations":2235,"serviceDays":12,"onTimePct":60.7,"medianDelaySeconds":199,"p95DelaySeconds":1024},{"routeId":"sto:31","routeLabel":"31","operatorId":"sto","hour":17,"observations":2341,"serviceDays":12,"onTimePct":61.3,"medianDelaySeconds":187,"p95DelaySeconds":922},{"routeId":"sto:31","routeLabel":"31","operatorId":"sto","hour":18,"observations":1971,"serviceDays":12,"onTimePct":78.5,"medianDelaySeconds":120,"p95DelaySeconds":664},{"routeId":"sto:31","routeLabel":"31","operatorId":"sto","hour":19,"observations":1134,"serviceDays":12,"onTimePct":76.8,"medianDelaySeconds":141,"p95DelaySeconds":924},{"routeId":"sto:31","routeLabel":"31","operatorId":"sto","hour":20,"observations":994,"serviceDays":12,"onTimePct":75.1,"medianDelaySeconds":201,"p95DelaySeconds":501},{"routeId":"sto:31","routeLabel":"31","operatorId":"sto","hour":21,"observations":1007,"serviceDays":12,"onTimePct":81.5,"medianDelaySeconds":174,"p95DelaySeconds":436},{"routeId":"sto:31","routeLabel":"31","operatorId":"sto","hour":22,"observations":1008,"serviceDays":12,"onTimePct":87.7,"medianDelaySeconds":135,"p95DelaySeconds":358},{"routeId":"sto:31","routeLabel":"31","operatorId":"sto","hour":23,"observations":966,"serviceDays":12,"onTimePct":93.4,"medianDelaySeconds":79,"p95DelaySeconds":303}],"scheduledTripPositionCoverage":{"routeId":"sto:31","routeLabel":"31","operatorId":"sto","scheduledTrips":335,"observedTrips":324,"notObservedTrips":11,"coveragePct":96.7,"serviceDays":5},"scheduledTripPositionCoverageByHour":[{"hour":0,"scheduledTrips":5,"observedTrips":5,"notObservedTrips":0,"coveragePct":100},{"hour":1,"scheduledTrips":5,"observedTrips":5,"notObservedTrips":0,"coveragePct":100},{"hour":5,"scheduledTrips":6,"observedTrips":5,"notObservedTrips":1,"coveragePct":83.3},{"hour":6,"scheduledTrips":13,"observedTrips":11,"notObservedTrips":2,"coveragePct":84.6},{"hour":7,"scheduledTrips":23,"observedTrips":23,"notObservedTrips":0,"coveragePct":100},{"hour":8,"scheduledTrips":25,"observedTrips":25,"notObservedTrips":0,"coveragePct":100},{"hour":9,"scheduledTrips":25,"observedTrips":25,"notObservedTrips":0,"coveragePct":100},{"hour":10,"scheduledTrips":19,"observedTrips":19,"notObservedTrips":0,"coveragePct":100},{"hour":11,"scheduledTrips":19,"observedTrips":18,"notObservedTrips":1,"coveragePct":94.7},{"hour":12,"scheduledTrips":22,"observedTrips":22,"notObservedTrips":0,"coveragePct":100},{"hour":13,"scheduledTrips":22,"observedTrips":22,"notObservedTrips":0,"coveragePct":100},{"hour":14,"scheduledTrips":22,"observedTrips":20,"notObservedTrips":2,"coveragePct":90.9},{"hour":15,"scheduledTrips":19,"observedTrips":17,"notObservedTrips":2,"coveragePct":89.5},{"hour":16,"scheduledTrips":22,"observedTrips":22,"notObservedTrips":0,"coveragePct":100},{"hour":17,"scheduledTrips":25,"observedTrips":24,"notObservedTrips":1,"coveragePct":96},{"hour":18,"scheduledTrips":16,"observedTrips":15,"notObservedTrips":1,"coveragePct":93.8},{"hour":19,"scheduledTrips":7,"observedTrips":6,"notObservedTrips":1,"coveragePct":85.7},{"hour":20,"scheduledTrips":10,"observedTrips":10,"notObservedTrips":0,"coveragePct":100},{"hour":21,"scheduledTrips":10,"observedTrips":10,"notObservedTrips":0,"coveragePct":100},{"hour":22,"scheduledTrips":10,"observedTrips":10,"notObservedTrips":0,"coveragePct":100},{"hour":23,"scheduledTrips":10,"observedTrips":10,"notObservedTrips":0,"coveragePct":100}],"headwayRegularity":null}],"recurringProblemStops":[{"stopId":"sto:2030","stopName":"CEGEP GABRIELLE-ROY","observations":969,"onTimeArrivals":459,"onTimePct":47.4,"medianDelaySeconds":-287,"worstFiveInOneHundredDelaySeconds":264,"serviceDays":29,"windowStart":"2026-09-09","windowEnd":"2026-10-08","lastSettledAt":"2026-10-09T01:03:00.159Z"},{"stopId":"sto:2658","stopName":"SACRÉ-COEUR/des AÇORES","observations":1014,"onTimeArrivals":540,"onTimePct":53.3,"medianDelaySeconds":278,"worstFiveInOneHundredDelaySeconds":1143,"serviceDays":29,"windowStart":"2026-09-09","windowEnd":"2026-10-08","lastSettledAt":"2026-10-09T01:02:57.955Z"},{"stopId":"sto:2654","stopName":"SACRÉ-COEUR/MANCE","observations":1014,"onTimeArrivals":541,"onTimePct":53.4,"medianDelaySeconds":280,"worstFiveInOneHundredDelaySeconds":1123,"serviceDays":29,"windowStart":"2026-09-09","windowEnd":"2026-10-08","lastSettledAt":"2026-10-09T01:02:57.955Z"},{"stopId":"sto:2648","stopName":"SAINT-RÉDEMPTEUR/ADÉLARD-BEAUCHAMP","observations":1016,"onTimeArrivals":562,"onTimePct":55.3,"medianDelaySeconds":263,"worstFiveInOneHundredDelaySeconds":1188,"serviceDays":29,"windowStart":"2026-09-09","windowEnd":"2026-10-08","lastSettledAt":"2026-10-09T01:02:57.125Z"},{"stopId":"sto:2650","stopName":"SACRÉ-COEUR/SAINT-HENRI","observations":1016,"onTimeArrivals":566,"onTimePct":55.7,"medianDelaySeconds":266,"worstFiveInOneHundredDelaySeconds":1160,"serviceDays":29,"windowStart":"2026-09-09","windowEnd":"2026-10-08","lastSettledAt":"2026-10-09T01:02:57.549Z"},{"stopId":"sto:5050","stopName":"WELLINGTON/LYON","observations":998,"onTimeArrivals":556,"onTimePct":55.7,"medianDelaySeconds":272,"worstFiveInOneHundredDelaySeconds":681,"serviceDays":29,"windowStart":"2026-09-09","windowEnd":"2026-10-08","lastSettledAt":"2026-10-09T01:03:01.113Z"},{"stopId":"sto:2282","stopName":"ISABELLE/FRÉCHETTE","observations":1015,"onTimeArrivals":578,"onTimePct":56.9,"medianDelaySeconds":237,"worstFiveInOneHundredDelaySeconds":1062,"serviceDays":29,"windowStart":"2026-09-09","windowEnd":"2026-10-08","lastSettledAt":"2026-10-09T01:02:52.219Z"},{"stopId":"sto:2278","stopName":"ISABELLE/de la GUADELOUPE","observations":1015,"onTimeArrivals":586,"onTimePct":57.7,"medianDelaySeconds":238,"worstFiveInOneHundredDelaySeconds":1058,"serviceDays":29,"windowStart":"2026-09-09","windowEnd":"2026-10-08","lastSettledAt":"2026-10-09T01:02:51.392Z"},{"stopId":"sto:2480","stopName":"MONTCLAIR/SAINT-JOSEPH","observations":1015,"onTimeArrivals":591,"onTimePct":58.2,"medianDelaySeconds":233,"worstFiveInOneHundredDelaySeconds":1130,"serviceDays":29,"windowStart":"2026-09-09","windowEnd":"2026-10-08","lastSettledAt":"2026-10-09T01:02:55.524Z"},{"stopId":"sto:2464","stopName":"MONTCLAIR/LIONEL-ÉMOND","observations":1014,"onTimeArrivals":591,"onTimePct":58.3,"medianDelaySeconds":230,"worstFiveInOneHundredDelaySeconds":1100,"serviceDays":29,"windowStart":"2026-09-09","windowEnd":"2026-10-08","lastSettledAt":"2026-10-09T01:02:54.571Z"},{"stopId":"sto:2286","stopName":"SAINT-RAYMOND/ISABELLE","observations":1014,"onTimeArrivals":592,"onTimePct":58.4,"medianDelaySeconds":231,"worstFiveInOneHundredDelaySeconds":1079,"serviceDays":29,"windowStart":"2026-09-09","windowEnd":"2026-10-08","lastSettledAt":"2026-10-09T01:02:52.219Z"},{"stopId":"sto:2462","stopName":"LIONEL-ÉMOND/CARON","observations":1015,"onTimeArrivals":596,"onTimePct":58.7,"medianDelaySeconds":235,"worstFiveInOneHundredDelaySeconds":1105,"serviceDays":29,"windowStart":"2026-09-09","windowEnd":"2026-10-08","lastSettledAt":"2026-10-09T01:02:54.118Z"}],"publishedScheduleChange":{"state":"measured","operatorId":"sto","publicNumber":"31","effectiveDate":"2026-10-07","generatedAt":"2026-10-09T07:48:52.745Z","before":{"phase":"before","comparisonDate":"2026-10-05","feedVersionId":"ca455c71-c30a-4e4d-8b72-2709212731cd","sourceChecksum":"a7e1f22955084828484cca5e8f1ebff9e785c70984ad5dd93b872a5d64ace6e4","sourceUrl":"https://otp.otranspo.ca/gtfs/sto.zip","sourceFetchedAt":"2026-09-28T05:01:01.877Z","serviceStart":"2026-09-27","serviceEnd":"2026-11-22","routeIds":["31"],"longNames":["PARC DE LA MONTAGNE"],"headsigns":["Cégep GRoy","Ottawa"],"scheduledTrips":87,"distinctStops":84,"distinctShapes":2,"firstServiceSeconds":19260,"lastServiceSeconds":92460,"shapeChecksums":["053bd931da074b291dbf614cf041426063232b5878f936a5b522d8e3682cce99","12619705901e7aeae3a5bd9e1f8ed8014725c5700499972dace5c5d4daf7906e","2ff6de1c4954b5f902e2548145a59f43624abbf04e67e9bdd8a29076c17bd7df","31bfb32eff1046e8072c8783880497ee09ae97f2e342a328cbd4f21dc6ea4488","5817e8cb251e9d2b6fd3233c49cb4683c7e62efe6468c08a8fd0a325b6ceb528","6185648acddb2ac71650887bdb16055af399abb1c4ddd345fb9f167d517d3c76","88c9b988fb0ea3558d1b8ba8abd8cbb7677104e98a0c875499e747c1f733c5b6","88eaa51326441cfc4f3ed4ed3fcdb959620aad48bfddd1088cb4dc3fde387dc5","d3ce3c27e0862593be73977ea3a2aa04a9b0f5ea832e093057677415465e44cc","ef6fcbca20152b33d1219899ffdd92484765777c81aa0013967d1087a474e281","ef94f8d4890f68b838ac66c3bb7d1c68373b2d16a52fd03b299927b1979b9a9f","f67004aa9f12a75d82a0f8d82d00dade403aac51abb07d30a73016a32178d696"],"calendarAddedServiceCount":1,"calendarRemovedServiceCount":0},"after":{"phase":"after","comparisonDate":"2026-10-12","feedVersionId":"816c00d7-757c-47a0-a3ab-42cbe122301d","sourceChecksum":"529c515442564d26fc1e59b759bb3eda9fed87c2884b9e32d7ee99116b83fe6e","sourceUrl":"https://otp.otranspo.ca/gtfs/sto.zip","sourceFetchedAt":"2026-10-09T00:31:22.603Z","serviceStart":"2026-10-07","serviceEnd":"2026-12-02","routeIds":["31"],"longNames":["PARC DE LA MONTAGNE"],"headsigns":["Cégep GRoy","Ottawa"],"scheduledTrips":37,"distinctStops":84,"distinctShapes":2,"firstServiceSeconds":24120,"lastServiceSeconds":92400,"shapeChecksums":["053bd931da074b291dbf614cf041426063232b5878f936a5b522d8e3682cce99","0f8b8515d1be8bf2d708ba0a82c88a8f2680146e486ae996626c55848e5090a4","11ad6873e3a3e46f49a919c10b40bcaec6bb66de51131d31a589351973d8f0cd","12619705901e7aeae3a5bd9e1f8ed8014725c5700499972dace5c5d4daf7906e","2eead46841d0133a6b49e57ca17bf55843411b68a93366fa326daf128d773fd1","2ff6de1c4954b5f902e2548145a59f43624abbf04e67e9bdd8a29076c17bd7df","32cc81619880627e96b0df1b1464cd985eef0440c7401a3eba76083a3bfdcc0e","7f96c5554759c9f2665da86bc881dc37f906b33f6a6f1ded73f4e7bf7a870d51","88c9b988fb0ea3558d1b8ba8abd8cbb7677104e98a0c875499e747c1f733c5b6","88eaa51326441cfc4f3ed4ed3fcdb959620aad48bfddd1088cb4dc3fde387dc5","dec96c1901003e814fba1a3a88e8de0c54b28d6ebf7832ffb6de1dab3f131c87","ef6fcbca20152b33d1219899ffdd92484765777c81aa0013967d1087a474e281"],"calendarAddedServiceCount":1,"calendarRemovedServiceCount":0},"reliabilityBefore":{"phase":"before","windowStart":"2026-09-23","windowEnd":"2026-10-06","observations":37593,"serviceDays":13,"withinFiveMinutesPct":74.6,"averageDelaySeconds":201,"worstFiveInOneHundredDelaySeconds":772},"reliabilityAfter":{"phase":"after","windowStart":"2026-10-07","windowEnd":"2026-10-08","observations":3588,"serviceDays":1,"withinFiveMinutesPct":77.3,"averageDelaySeconds":185,"worstFiveInOneHundredDelaySeconds":638},"reliabilityComparisonReady":false,"scheduleComparisonQualification":"calendar_exception"},"meta":{"schema":"https://otranspo.ca/schemas/response-meta/v1","schemaVersion":1,"surface":"public.reliability-evidence","requestId":null,"requestIdState":"header_only_for_cacheable_compatibility","generatedAt":"2026-10-09T08:30:33.464Z","freshnessSeconds":28750,"sourceState":"current","qualityState":"complete","evidenceIds":[],"missingSources":[],"reasonCodes":[],"sources":[{"id":"realtime:gtfs-rt","version":1,"kind":"gtfs_realtime","operatorId":null,"owner":"not-recorded","publicUrl":null,"publicUrlState":"not_recorded","licence":"not-recorded","licenceState":"not_recorded","cadence":"not-recorded","cadenceState":"not_recorded","snapshotId":"srcsnap_517911bfb50f351d4fe564f92799c5148e1662f510de2012175091d9eed07c8c","checkedAt":"2026-10-09T08:30:33.464Z","observedAt":"2026-10-09T08:30:28.000Z","freshnessSeconds":5,"freshnessState":"current","qualityState":"complete","reasonCodes":[]},{"id":"gtfs-static:oc_transpo","version":1,"kind":"gtfs_static","operatorId":"oc_transpo","owner":"OC Transpo","publicUrl":"https://oct-gtfs-emasagcnfmcgeham.z01.azurefd.net/public-access/GTFSExport.zip","publicUrlState":"recorded","licence":"not-recorded","licenceState":"not_recorded","cadence":"not-recorded","cadenceState":"not_recorded","snapshotId":"srcsnap_3d7b76c4df84e87084e7a56f843a439249f96e89c8d34ef1dcc4dbe9615b9894","checkedAt":"2026-10-09T05:04:18.650Z","observedAt":"2026-10-09T00:31:23.706Z","freshnessSeconds":28749,"freshnessState":"current","qualityState":"complete","reasonCodes":[]},{"id":"gtfs-static:sto","version":4,"kind":"gtfs_static","operatorId":"sto","owner":"STO","publicUrl":"https://contenu.sto.ca/GTFS/GTFS.zip","publicUrlState":"recorded","licence":"not-recorded","licenceState":"not_recorded","cadence":"not-recorded","cadenceState":"not_recorded","snapshotId":"srcsnap_ed502b4c508c50ef0fff9f300c1d47eb43784bf80643a8e2a27f6e728d4d46bf","checkedAt":"2026-10-09T05:04:18.650Z","observedAt":"2026-10-09T00:31:22.603Z","freshnessSeconds":28750,"freshnessState":"current","qualityState":"complete","reasonCodes":[]}]}}