{"openapi":"3.1.0","info":{"title":"Pysae Public API v4","summary":"Operate a public transport network: its schedule, its fleet, and what happens on the road.","description":"The Pysae API exposes the business objects of a transport network: the scheduled\nreference imported from the GTFS, the resources committed to operating it, what\nactually happens in service, and what is measured from it.\n\n## Scope of a call\n\nAlmost every endpoint is prefixed by `/groups/{group_id}`. The **group** is the\noperated network: it owns its own data, and no piece of data ever exists outside\na group. An operator running several networks holds one group per network.\n\n## Scheduled and actual\n\nTwo notions look alike and must not be confused. The **scheduled** side\ndescribes what is planned — it comes from the imported GTFS and changes only\nwhen a new one is published. The **actual** side describes what happened — it is\nbuilt from what the drivers' devices report during service. A trip is scheduled;\nits execution on a given day is actual.\n\n## Versions and categories\n\nEndpoints are versioned, `v4` being the default. Three documents are published\nfor each version: the **public** one, meant for integrations; the **datahub**\none, limited to the CSV exports that feed a data warehouse; and the **internal**\none, which covers the whole surface used by the Pysae applications themselves.\n","version":"3.1.0"},"paths":{"/api/v4/groups/{group_id}/notifications/sms-count":{"get":{"tags":["notifications"],"summary":"Get notification count for a group","description":"**This endpoint allows you to get notification count for a group**\n\nRole needed: operator, external_reader, limited_reader, regulator, reader","operationId":"getNotificationSmsCount","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"]},{"type":"null"}],"title":"Group Id"}},{"name":"period","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^\\d{4}-(0[1-9]|1[0-2])$"},{"type":"null"}],"description":"Period in YYYY-MM format","title":"Period"},"description":"Period in YYYY-MM format"},{"name":"device_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","description":"The id of the device you want to retrieve datas from.","examples":["837e726d2f25af9a","e627452b4a502323","943a739adc3ce43a"]},{"type":"null"}],"title":"Device Id"}},{"name":"gtfs_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gtfs Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"x-pysae-api-batch-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Pysae-Api-Batch-Id"}},{"name":"x-pysae-api-request-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Pysae-Api-Request-Id"}},{"name":"x-pysae-api-lazy-loading-router","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Pysae-Api-Lazy-Loading-Router"}},{"name":"user-agent","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User-Agent"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SmsCountResponse"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__1"}],"title":"Response 403 Getnotificationsmscount"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/ratings":{"get":{"tags":["drivers"],"summary":"Get all group ratings.","operationId":"getRatings","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"group_by","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__api__ratings__router__GroupBy"},{"type":"null"}],"title":"Group By"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/RatingSchema"}},{"type":"array","items":{"$ref":"#/components/schemas/RatingByDriverVersionSchema"}},{"type":"array","items":{"$ref":"#/components/schemas/RatingByGroupSchema"}}],"title":"Response Getratings"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/export/trips":{"get":{"tags":["trips","stats"],"summary":"Exports recorded trips for a date as a csv","description":"**Exports recorded trips for a date as a csv**\n\nRole needed: admin, regulator, reader, operator","operationId":"getExportTrips","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"date","in":"query","required":true,"schema":{"type":"string","pattern":"\\d{8}$","description":"The date you want to get the trips for","title":"Date"},"description":"The date you want to get the trips for"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__2"}],"title":"Response 403 Getexporttrips"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-datahub":true,"x-api-version":4,"x-path-prefix":"/api","x-deployment":"stats","x-public":true}},"/api/v4/groups/{group_id}/trips":{"get":{"tags":["trips"],"summary":"Returns a list of trips for a date","description":"**This endpoint allows to get a list of trips for a date.**\n\nRole needed: admin, limited_reader, technical, operator, external_reader, regulator, reader","operationId":"getTrips","deprecated":true,"security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"date","in":"query","required":true,"schema":{"type":"string","pattern":"\\d{8}$","description":"The date you want to get the trips for","title":"Date"},"description":"The date you want to get the trips for"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"anyOf":[{"$ref":"#/components/schemas/pysae__api__trips__v4__schemas__TripSchema"},{"$ref":"#/components/schemas/ScheduledTripSchema"}]},"title":"Response Gettrips"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__3"}],"title":"Response 403 Gettrips"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/trips/{trip_id}":{"get":{"tags":["trips"],"summary":"Returns a trip for a date","description":"**This endpoint allows to get a trip for a date.**\n\nRole needed: admin, limited_reader, technical, operator, external_reader, regulator, reader","operationId":"getTrip","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"trip_id","in":"path","required":true,"schema":{"type":"string","title":"Trip Id"}},{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Date"}},{"name":"merge","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Merge"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Gettrip"},"example":{"id":"","arrival_time":"","departure_time":"","service_date":"","formatted_name":"","route":{"id":"","color":"","long_name":"","short_name":"","text_color":""},"first_stop":{"id":"","name":"","stop_sequence":0},"last_stop":{"id":"","name":"","stop_sequence":0},"temporality":"","passenger_count":{"boardings":"","alightings":"","loading":""},"tk":"","vk":"","percent_km":"","off_itinerary_km":"","recorded_commercial_km":"","unreliable_km":"","reliable_km":"","delay":[],"gtfs":[{"id":"","name":"","publication_date":""}],"vehicles":[],"drivers":[],"devices":[],"trips":[],"updates":{},"service":{"recorded_stops":"","planned_stops":""},"problems":{},"status":""}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__4"},{"$ref":"#/components/schemas/ForbiddenDifferentTeam"}],"title":"Response 403 Gettrip"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/TripNotFound"}],"title":"Response 404 Gettrip"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/export/vehicle-exploitation":{"get":{"tags":["vehicle-exploitation"],"summary":"Returns a CSV file with vehicle exploitation data (PCS-CNT format)","description":"**Export vehicle exploitation data including trip details, stop times, GPS coordinates and per-door passenger counts in PCS-CNT format.**\n\n\n\n<h2>Example : </h2>\n\n| **fileId** | **unitId** | **drivingMode** | **stopId** | **arrivalTime** | **departureTime** | **SAEvalidity** | **journey** | **journeyType** | **line** | **trip** | **tripDirection** | **vehicleService** | **stationOrigin** | **stationDestination** | **station** | **stationCode** | **stationIndex** | **stationType** | **GPSvalidity** | **latitude** | **longitude** | **PORTE_01_validity** | **PORTE_01_adults_in** | **PORTE_01_adults_out** |\n|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|\n| 2600 | 1510 | inService | 1 | 2025-06-15T09:27:17+02:00 | 2025-06-15T09:30:03+02:00 | OK | 96213 | commercial | N83 | 2 | outward | 01 | John Doe | Grand Parc L'atol' | Pont des Planches | 2499 | 2 | intermediate | OK | 45,771335 | 4,908506 | OK | 0 | 0 |","operationId":"getExportVehicleExploitation","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","title":"End Date"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"text/csv":{"schema":{"type":"string"},"example":"fileId;unitId;drivingMode;stopId;arrivalTime;departureTime;SAEvalidity;journey;journeyType;line;trip;tripDirection;vehicleService;stationOrigin;stationDestination;station;stationCode;stationIndex;stationType;GPSvalidity;latitude;longitude;PORTE_01_validity;PORTE_01_adults_in;PORTE_01_adults_out\n2600;1510;inService;1;2025-06-15T09:27:17+02:00;2025-06-15T09:30:03+02:00;OK;96213;commercial;N83;2;outward;01;John Doe;Grand Parc L'atol';Pont des Planches;2499;2;intermediate;OK;45,771335;4,908506;OK;0;0"}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-deployment":"stats","x-public":true}},"/api/v4/groups/{group_id}/planning":{"get":{"tags":["planning"],"summary":"Get plannings.","description":"**This endpoint is used to get plannings.**\n\nRole needed: driver, regulator, reader, operator","operationId":"getPlanning","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"date","in":"query","required":true,"schema":{"type":"string","examples":["20201122"],"title":"Date"}},{"name":"driver_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The id of the driver you want to retrieve datas from","title":"Driver Id"},"description":"The id of the driver you want to retrieve datas from"},{"name":"vehicle_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The id of the vehicle you want to retrieve datas from","title":"Vehicle Id"},"description":"The id of the vehicle you want to retrieve datas from"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PlanningSchema"},"title":"Response Getplanning"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__5"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Getplanning"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true},"put":{"tags":["planning"],"summary":"Create or replace plannings.","description":"An assignment attach a `trip_id` and a `date` to at least         a vehicle or a driver. `vehicle_id` and `driver_id` are the         most efficient way to provide assignments.         When unknown, they can be replaced by `license_plate` and `staff_number`         If redundant data is sent, such as both `license_plate`         and `vehicle_id`, these fields must match or an error is raised.\n\nRole needed: admin","operationId":"putPlanning","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"format","in":"query","required":false,"schema":{"$ref":"#/components/schemas/ImportFormat","default":"json"}},{"name":"filename","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filename"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InsertedPlanningSchema"},"title":"Response Putplanning"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__6"}],"title":"Response 403 Putplanning"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/vehicles":{"get":{"tags":["vehicles"],"summary":"Return the vehicles for the given group_id filtered by status.","description":"**This endpoint allows to get the vehicles for the given group_id filtered by status.**\n\nVehicles filtered by the team of a user and by status.\n\nRole needed: driver, admin, limited_reader, technical, operator, external_reader, regulator, reader","operationId":"getVehicles","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"statuses","in":"query","required":false,"schema":{"anyOf":[{"type":"array","uniqueItems":true,"items":{"$ref":"#/components/schemas/VehicleStatus"}},{"type":"null"}],"title":"Statuses"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/pysae__api__vehicles__schemas__VehicleSchema"},"title":"Response Getvehicles"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__7"}],"title":"Response 403 Getvehicles"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/vehicles/public":{"get":{"tags":["vehicles"],"summary":"Return all vehicles for the given group_id without role restriction.","description":"**This endpoint allows to get vehicles for the given group_id without role restriction, filtered by status.**","operationId":"getVehiclePublic","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"statuses","in":"query","required":false,"schema":{"anyOf":[{"type":"array","uniqueItems":true,"items":{"$ref":"#/components/schemas/VehicleStatus"}},{"type":"null"}],"title":"Statuses"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VehiclePublicSchema"},"title":"Response Getvehiclepublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/vehicles/{vehicle_id}":{"get":{"tags":["vehicles"],"summary":"Return the vehicle for the given vehicle_id.","description":"**This endpoint allows to get the vehicle for the given vehicle_id.**\n\nVehicles filtered by the team of a user.\n\nRole needed: driver, operator, admin, external_reader, limited_reader, regulator, reader","operationId":"getVehicle","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the vehicle you want to get","title":"Vehicle Id"},"description":"The id of the vehicle you want to get"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/pysae__api__vehicles__schemas__VehicleSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__8"}],"title":"Response 403 Getvehicle"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/export/vehicles":{"get":{"tags":["vehicles","stats"],"summary":"Returns a csv file with all vehicles filtered by status","description":"**This endpoint allows to export a csv file with all vehicles filtered by status.**\n\n# Export des Véhicules\n\nCe rapport permet d’exporter une liste des véhicules\n\n| **Champ**         | **Champ requis** | **Identifiant Pysae** | **Description** |\n|-------------------|------------------|-----------------------|----------------------------------|\n| `id`             | Oui              | Oui                   | Identifiant unique du véhicule |\n| `fleet_number`   | Oui              | Non                   | Numéro de flotte du véhicule |\n| `license_plate`  | Oui              | Non                   | Plaque d’immatriculation du véhicule |\n| `teams`          | Non              | Oui                   | Liste des équipes associées au véhicule |\n| `comment`        | Non              | Non                   | Commentaire libre sur l’état ou l’utilisation du véhicule |\n| `archived`       | Oui              | Non                   | Indique si le véhicule est archivé |\n| `capacity`       | Non              | Non                   | Capacité maximale de passagers |\n\n\n<h2>Example : </h2>\n\n| **id** | **fleet_number** | **license_plate** | **teams** | **comment** | **status** | **capacity** |\n|:--|:--|:--|:--|:--|:--|:--|\n| 67ac7168782c60a04ba486d4 | 839 | XY-999-YX | — | Good condition | active | — |\n\nRole needed: driver, operator, admin, external_reader, limited_reader, regulator, reader","operationId":"getExportVehicles","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"statuses","in":"query","required":false,"schema":{"anyOf":[{"type":"array","uniqueItems":true,"items":{"$ref":"#/components/schemas/VehicleStatus"}},{"type":"null"}],"title":"Statuses"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"text/csv":{"schema":{"type":"string"},"example":"id;fleet_number;license_plate;teams;comment;status;capacity\n67ac7168782c60a04ba486d4;839;XY-999-YX;;Good condition;active;"}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__8"}],"title":"Response 403 Getexportvehicles"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-datahub":true,"x-api-version":4,"x-path-prefix":"/api","x-deployment":"stats","x-public":true}},"/api/v4/groups/{group_id}/vehicle-amount":{"get":{"tags":["vehicles","stats"],"summary":"Number of registered vehicle for a group","description":"**Get the number of vehicle registered for a group.**","operationId":"getVehicleAmount","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VehicleAmountSchema"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-deployment":"stats","x-public":true}},"/api/v4/groups/{group_id}/gtfs/{gtfs_id}/calendars":{"get":{"tags":["gtfs"],"summary":"Get the list of calendars for the given gtfs id","description":"**This endpoint allows to get the list of calendars for a specific gtfs_id.**\n\nPublicly available endpoint","operationId":"getGtfsCalendars","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"gtfs_id","in":"path","required":true,"schema":{"type":"string","title":"Gtfs Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CalendarGTFSSchema"},"title":"Response Getgtfscalendars"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/gtfs/{gtfs_id}/calendars/{service_id}":{"get":{"tags":["gtfs"],"summary":"Get the info of the calendar identified by service_id","description":"**This endpoint allows to get the info of the calendar identified by service_id.**","operationId":"getGtfsCalendar","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"service_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the calendar you want to focus on","title":"Service Id"},"description":"The id of the calendar you want to focus on"},{"name":"gtfs_id","in":"path","required":true,"schema":{"type":"string","title":"Gtfs Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/CalendarGTFSSchema"},{"type":"null"}],"title":"Response Getgtfscalendar"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GtfsCalendarNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/on-demand-routes/public":{"get":{"tags":["on-demand-routes"],"summary":"List the on-demand routes of a group without role restriction","description":"**This endpoint allows you to list the on-demand routes of a group without role restriction.**\n\nReturns the `active` and the `inactive` routes; an `archived` one is never returned, and there is no status filter to ask for one. A stop's `stop_id` belongs to the route and never designates a stop of the GTFS feed.\n\nFeature needed: device_event_sourcing,on_demand","operationId":"getAllOnDemandRoutePublic","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OnDemandRoutePublicSchema"},"title":"Response Getallondemandroutepublic"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-unique-id.segments":["all"],"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/on-demand-routes/public/{route_id}":{"get":{"tags":["on-demand-routes"],"summary":"Get an on-demand route without role restriction","description":"**This endpoint allows you to get a single on-demand route without role restriction.**\n\nAn `archived` route answers `404`, exactly as an unknown one does: it is not publicly readable, and saying which of the two it was would leak the operator's configuration.\n\nFeature needed: device_event_sourcing,on_demand","operationId":"getOnDemandRoutePublic","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"route_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the targeted on-demand route","title":"Route Id"},"description":"The id of the targeted on-demand route"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnDemandRoutePublicSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/OnDemandRouteNotFound"}],"title":"Response 404 Getondemandroutepublic"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/nav-data-processor-api/v4/login-scoped":{"post":{"tags":["auth","ndp"],"summary":"Login scopped email/password for automation","description":"**This endpoint allows to get a session_id if email/password match a known user.**\n\n- `session_id` is returned and is set as a cookie\n- You have to access to protected endpoints with your `session_id` in the \"Authorization\" header as a \"Bearer\" token or as a cookie\n- A driver session will be open if the user give a `device_id`\n\n**For automation purpose only**","operationId":"postLoginScopedNdp","parameters":[{"name":"scopes","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"description":"A list of scopes for the session (used for automation)","title":"Scopes"},"description":"A list of scopes for the session (used for automation)"},{"name":"expire","in":"query","required":true,"schema":{"anyOf":[{"type":"string","examples":["2020-11-22T11:12:13","22/11/2020 11:12:13"]},{"type":"integer","examples":[1606003200]},{"type":"number","examples":[1606003200.5]},{"type":"string","format":"date"}],"description":"Your expire date (used with scopes)","title":"Expire"},"description":"Your expire date (used with scopes)"}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_postLoginScopedNdp"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponseSchema"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WrongLogin"}}},"description":"Unauthorized"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/nav-data-processor-api","x-deployment":"ndp","x-public":true}},"/api/v4/login-scoped":{"post":{"tags":["auth"],"summary":"Login scopped email/password for automation","description":"**This endpoint allows to get a session_id if email/password match a known user.**\n\n- `session_id` is returned and is set as a cookie\n- You have to access to protected endpoints with your `session_id` in the \"Authorization\" header as a \"Bearer\" token or as a cookie\n- A driver session will be open if the user give a `device_id`\n\n**For automation purpose only**","operationId":"postLoginScoped","parameters":[{"name":"scopes","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"description":"A list of scopes for the session (used for automation)","title":"Scopes"},"description":"A list of scopes for the session (used for automation)"},{"name":"expire","in":"query","required":true,"schema":{"anyOf":[{"type":"string","examples":["2020-11-22T11:12:13","22/11/2020 11:12:13"]},{"type":"integer","examples":[1606003200]},{"type":"number","examples":[1606003200.5]},{"type":"string","format":"date"}],"description":"Your expire date (used with scopes)","title":"Expire"},"description":"Your expire date (used with scopes)"}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_postLoginScoped"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponseSchema"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WrongLogin"}}},"description":"Unauthorized"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/login":{"post":{"tags":["auth"],"summary":"Login email/password","description":"**This endpoint allows to get a session_id if email/password match a known user.**\n\n- `session_id` is returned and is set as a cookie\n- You have to access to protected endpoints with your `session_id` in the \"Authorization\" header as a \"Bearer\" token or as a cookie\n- A driver session will be open if the user give a `device_id`","operationId":"postLogin","parameters":[{"name":"device_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The id of the device you want to connect into.","title":"Device Id"},"description":"The id of the device you want to connect into."},{"name":"scopes","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"A list of scopes for the session (used for automation only)","title":"Scopes"},"description":"A list of scopes for the session (used for automation only)"},{"name":"expire","in":"query","required":false,"schema":{"anyOf":[{"type":"string","examples":["2020-11-22T11:12:13","22/11/2020 11:12:13"]},{"type":"integer","examples":[1606003200]},{"type":"number","examples":[1606003200.5]},{"type":"string","format":"date"},{"type":"null"}],"description":"Your expire date (used with scopes for automation only)","title":"Expire"},"description":"Your expire date (used with scopes for automation only)"}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_postLogin"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponseSchema"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WrongLogin"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Auth0LoginRequired"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/logout":{"get":{"tags":["auth"],"summary":"Log out of your session","description":"**This endpoint allows to log out of your session.**","operationId":"getLogout","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/auth/provider":{"get":{"tags":["auth"],"summary":"Get auth provider for a group","description":"**Returns which authentication provider to use for a given group.**","operationId":"getAuthProvider","parameters":[{"name":"group_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Group ID to check","title":"Group Id"},"description":"Group ID to check"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthProviderSchema"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/roles":{"get":{"tags":["roles"],"summary":"Get current role.","description":"**This endpoint allows you to get the role of the current user in a group.**\n\n- Get role of current user in a group.\n- If it is an admin, get all roles of all user of the group.","operationId":"getRoles","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RoleSchema"},"title":"Response Getroles"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unauthenticated"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/devices/{device_id}/history":{"get":{"tags":["history"],"summary":"Get the reconstructed state of a device at a given point in time","description":"**This endpoint reconstructs the full state of a device at a given timestamp by combining the latest history snapshot with replayed history events.**\n\nRole needed: operator, external_reader, limited_reader, regulator, reader","operationId":"getDeviceHistory","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"string","title":"Device Id"}},{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"at","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Timestamp UNIX (seconds) of the target instant. Inclusive upper bound. Mutually exclusive with `before_id`.","title":"At"},"description":"Timestamp UNIX (seconds) of the target instant. Inclusive upper bound. Mutually exclusive with `before_id`."},{"name":"before_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"]},{"type":"null"}],"description":"`_id` of a `HistoryEvent` used as a strict upper bound. Mutually exclusive with `at`.","title":"Before Id"},"description":"`_id` of a `HistoryEvent` used as a strict upper bound. Mutually exclusive with `at`."},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryDeviceAtSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__1"}],"title":"Response 403 Getdevicehistory"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/rail/station-links":{"get":{"tags":["rail"],"summary":"List the stop-to-station links of the group.","description":"**Return every stop of the network attached to a rail station.**\n\n- Requires the `rail_data` feature.\n- `is_orphan` flags the links whose stop is absent from the currently published GTFS.\n\nFeature needed: rail_data","operationId":"getRailStationLinks","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RailStationLinkSchema"},"title":"Response Getrailstationlinks"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/drivers":{"get":{"tags":["drivers"],"summary":"Return the drivers for the given group_id.","description":"**This endpoint allows you to returns the drivers for a given group.**\n\nDrivers filtered by the team of a user.\n\nRole needed: driver, limited_reader, technical, operator, external_reader, regulator, reader","operationId":"getDrivers","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"archived","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"const":"null","type":"string"},{"type":"null"}],"default":false,"title":"Archived"}},{"name":"driver_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The driver code to filter on.","title":"Driver Code"},"description":"The driver code to filter on."},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"anyOf":[{"$ref":"#/components/schemas/DriverOpSchema"},{"$ref":"#/components/schemas/pysae__api__drivers__schemas__DriverSchema"}]},"title":"Response Getdrivers"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__7"}],"title":"Response 403 Getdrivers"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/drivers/{driver_id}":{"get":{"tags":["drivers"],"summary":"Return the driver for the given driver_id.","description":"**This endpoint allows you to returns the driver for a given driver_id**\n\nRole needed: driver, operator, external_reader, limited_reader, regulator, reader","operationId":"getDriver","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"driver_id","in":"path","required":true,"schema":{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"],"title":"Driver Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__api__drivers__schemas__DriverSchema"},{"$ref":"#/components/schemas/DriverOpSchema"}],"title":"Response Getdriver"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__9"}],"title":"Response 403 Getdriver"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/DriverNotFound"}],"title":"Response 404 Getdriver"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/export/drivers":{"get":{"tags":["drivers","stats"],"summary":"Returns a csv file with all drivers","description":"**This endpoint allows you to export all drivers**\n\n# Export des Conducteurs\n\nCe rapport permet d’exporter la liste des conducteurs.\n\n| **Champ**        | **Champ requis** | **Identifiant Pysae** | **Description** |\n|------------------|------------------|-----------------------|----------------------------------|\n| `id`            | Oui              | Oui                   | Identifiant unique du conducteur |\n| `driver_name`   | Oui              | Non                   | Nom complet du conducteur |\n| `staff_number`  | Oui              | Non                   | Numéro de matricule du conducteur |\n| `teams`         | Non              | Non                   | Liste des équipes associées au conducteur |\n| `comment`       | Non              | Non                   | Commentaire sur la disponibilité ou l'affectation du conducteur |\n| `archived`      | Oui              | Non                   | Indique si le conducteur est archivé |\n| `code`          | Non              | Non                   | Code interne associé au conducteur |\n\n\n<h2>Example : </h2>\n\n| **id** | **driver_name** | **staff_number** | **teams** | **comment** | **archived** | **code** |\n|:--|:--|:--|:--|:--|:--|:--|\n| 6400b14955c2d0b2d7058a09 | John Smith | smith01 | team-1 | Monday and tuesday only | False | 7656 |\n| 6400b14955c2d0b2d83b7a1b | Jean Dupont | dupont01 | team-1 | — | True | 8321 |\n\nRole needed: driver, operator, external_reader, limited_reader, regulator, reader","operationId":"getExportDrivers","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"archived","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean","description":"Query for archived ressources"},{"type":"null"}],"title":"Archived"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"text/csv":{"schema":{"type":"string"},"example":"id;driver_name;staff_number;teams;comment;archived;code\n6400b14955c2d0b2d7058a09;John Smith;smith01;team-1;Monday and tuesday only;False;7656\n6400b14955c2d0b2d83b7a1b;Jean Dupont;dupont01;team-1;;True;8321"}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__8"}],"title":"Response 403 Getexportdrivers"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-datahub":true,"x-api-version":4,"x-path-prefix":"/api","x-deployment":"stats","x-public":true}},"/api/v4/groups/{group_id}/drivers/{driver_id}/ratings":{"get":{"tags":["drivers"],"summary":"Get a rating left by a specific driver.","description":"Role needed: driver","operationId":"getDriverRatings","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"driver_id","in":"path","required":true,"schema":{"type":"string","title":"Driver Id"}},{"name":"driver_version","in":"query","required":true,"schema":{"type":"string","title":"Driver Version"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/RatingSchema"},{"type":"null"}],"title":"Response Getdriverratings"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__10"}],"title":"Response 403 Getdriverratings"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/depots":{"get":{"tags":["depot"],"summary":"Find Depots","description":"**This endpoint allows you to get all depots from a group.**\n\nRole needed: driver, operator, external_reader, limited_reader, regulator, reader","operationId":"getDepots","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DepotSchema"},"title":"Response Getdepots"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__11"}],"title":"Response 403 Getdepots"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/blocks/{block_id}/vehicle-movements":{"get":{"tags":["vehicle-movements"],"summary":"List non-commercial vehicle movements (HLP) of a block on a given day","description":"**Lists the movements a block's vehicle made outside commercial service on that day — reaching the first trip, returning to the depot, moving between two trips.**","operationId":"getBlockVehicleMovements","parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","title":"Block Id"}},{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"date","in":"query","required":true,"schema":{"type":"string","examples":["20201122"],"title":"Date"},"description":"Operational day (GTFS-style date). Accepts ISO `YYYY-MM-DD` or Hastus-style `YYYYMMDD`."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VehicleMovementSchema"},"title":"Response Getblockvehiclemovements"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/vehicle-movements":{"get":{"tags":["vehicle-movements"],"summary":"List every non-commercial vehicle movement (HLP) of the group for a day","description":"**Lists every movement made outside commercial service across the group on that day, whichever block or vehicle made it.**","operationId":"getVehicleMovements","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"date","in":"query","required":true,"schema":{"type":"string","examples":["20201122"],"title":"Date"},"description":"Operational day (GTFS-style date). Accepts ISO `YYYY-MM-DD` or Hastus-style `YYYYMMDD`."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VehicleMovementSchema"},"title":"Response Getvehiclemovements"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/vehicle-movements/any":{"get":{"tags":["vehicle-movements"],"summary":"Whether the group has any non-commercial vehicle movement (HLP)","description":"**Answers whether the group holds any movement at all, so a caller can tell an empty result apart from a feature the group never fed.**","operationId":"getVehicleMovementAny","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VehicleMovementExistenceSchema"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/vehicle-movements/{vehicle_movement_id}":{"get":{"tags":["vehicle-movements"],"summary":"Get a single vehicle movement (HLP) by id","description":"**Describes one movement made outside commercial service.**","operationId":"getVehicleMovement","parameters":[{"name":"vehicle_movement_id","in":"path","required":true,"schema":{"type":"string","title":"Vehicle Movement Id"}},{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VehicleMovementSchema"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/gtfs/{gtfs_id}":{"get":{"tags":["gtfs"],"summary":"Returns compressed GTFS files by GTFS id.","description":"**This endpoint allows to get the GTFS file for a specific gtfs_id.**\n\nCompression ZIP .txt files.","operationId":"getGtfs","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"gtfs_id","in":"path","required":true,"schema":{"type":"string","title":"Gtfs Id"}}],"responses":{"200":{"description":"Successful Response zip","content":{"application/zip":{"schema":{"type":"zip"},"example":""}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/GtfsNotFound"}],"title":"Response 404 Getgtfs"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/gtfs":{"get":{"tags":["gtfs"],"summary":"Get all GTFS files for a group.","description":"**This endpoint allows to get the list of GTFS files for a specific group.**\n\nPublicly available endpoint.","operationId":"getGtfsList","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"archived","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by archived files","title":"Archived"},"description":"Filter by archived files"},{"name":"gtfs_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gtfs Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GtfsFileSchema"},"title":"Response Getgtfslist"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/gtfs/{gtfs_id}/validate":{"get":{"tags":["gtfs"],"summary":"Returns compressed GTFS files by GTFS id.","description":"**Compression ZIP .txt files. No credentials needed.**","operationId":"getGtfsValidate","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"gtfs_id","in":"path","required":true,"schema":{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"],"title":"Gtfs Id"}},{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GtfsFileSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/GtfsNotFound"}],"title":"Response 404 Getgtfsvalidate"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/stats/punctuality":{"get":{"tags":["punctuality","stats"],"summary":"Get punctuality report in csv file.","description":"**This endpoint allows you to get punctuality stats for a group.**\n\nRole needed: limited_reader, regulator, reader, operator","operationId":"getStatPunctuality","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"from","in":"query","required":true,"schema":{"type":"integer","description":"The start timestamp","title":"From"},"description":"The start timestamp"},{"name":"to","in":"query","required":true,"schema":{"type":"integer","description":"The end timestamp","title":"To"},"description":"The end timestamp"},{"name":"group_by","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__api__punctuality__router__GroupBy"},{"type":"null"}],"description":"Aggregation level. Omit to get a single entry aggregated over the whole period (feeds the punctuality donut).","title":"Group By"},"description":"Aggregation level. Omit to get a single entry aggregated over the whole period (feeds the punctuality donut)."},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/RoutePunctualitySchema"}},{"type":"array","items":{"$ref":"#/components/schemas/DayPunctualitySchema"}},{"type":"array","items":{"$ref":"#/components/schemas/PunctualitySchema"}}],"title":"Response Getstatpunctuality"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__12"}],"title":"Response 403 Getstatpunctuality"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-deployment":"stats","x-public":true}},"/api/v4/groups/{group_id}/export/punctuality":{"get":{"tags":["punctuality","stats"],"summary":"Get punctuality report in csv file.","description":"**This endpoint allows you to get punctuality report in csv file.**\n\n# Rapport de Ponctualité\n\nCe rapport analyse la ponctualité des trajets en comparant les horaires théoriques et enregistrés à chaque arrêt. Chaque ligne du rapport correspond à un arrêt et un événement (arrivée, départ, etc.). Il inclut les informations sur les trajets, les conducteurs, les véhicules, ainsi que les écarts de temps.\n\n| **Champ**                | **Champ requis** | **Champ du GTFS** | **Identifiant Pysae** | **Description** |\n|--------------------------|------------------|-------------------|-----------------------|----------------------------------|\n| `id`                     | Oui              | Non               | Oui                   |       |\n| `gtfs_id`                | Oui              | Non               | Oui                   | Identifiant du fichier GTFS.      |\n| `trip_id`                | Oui              | Oui               | Non                   | Identifiant du trajet.       |\n| `trip_formatted_name`    | Oui              | Non               | Non                   | Nom du trajet selon le format configuré par l'utilisateur. |\n| `route_id`               | Oui              | Oui               | Non                   | Identifiant de la ligne.       |\n| `route_long_name`        | Non              | Oui               | Non                   | Nom de la ligne.                   |\n| `block_id`               | Non              | Oui               | Non                   | Identifiant du bloc.                   |\n| `driver_id`              | Non              | Non               | Oui                   | Identifiant du conducteur. |\n| `driver`                 | Non              | Non               | Non                   | Nom du conducteur suivi de son matricule entre parenthèses. |\n| `vehicle_id`             | Non              | Non               | Oui                   | Identifiant du véhicule. |\n| `vehicle`                | Non              | Non               | Non                   | Plaque d'immatriculation suivie du numéro de parc entre parenthèses. |\n| `start_date`             | Oui              | Non               | Non                   | Date de début du trajet (format `20220101`). |\n| `stop_id`                | Oui              | Oui               | Non                   | Identifiant de l'arrêt. |\n| `stop_name`              | Oui              | Oui               | Non                   | Nom de l'arrêt. |\n| `stop_sequence`          | Oui              | Oui               | Non                   | Ordre de passage de l'arrêt. |\n| `event`                  | Oui              | Oui               | Non                   | Type d'événement. |\n| `distance`               | Oui              | Non               | Non                   | Distance en mètres entre les arrêts. |\n| `device_id`              | Oui              | Non               | Oui                   | Identifiant d'appareil.        |\n| `device_name`            | Non              | Non               | Non                   | Nom d'appareil. |\n| `delay`                  | Oui              | Non               | Non                   | Retard en secondes.            |\n| `recorded_departure`     | Oui              | Non               | Non                   | Heure de départ enregistrée (format `31/12/2021 23:58:07`). |\n| `theoretical_departure`  | Oui              | Non               | Non                   | Heure de départ théorique prévue (format `31/12/2021 23:58:07`). |\n| `teams`                  | Non              | Oui               | Non                   | Équipes associées à la course dans le GTFS. |\n\n\n<h2>Example : </h2>\n\n| **id** | **gtfs_id** | **trip_id** | **trip_formatted_name** | **route_id** | **route_long_name** | **block_id** | **driver_id** | **driver** | **vehicle_id** | **vehicle** | **start_date** | **stop_id** | **stop_name** | **stop_sequence** | **event** | **distance** | **device_id** | **device_name** | **delay** | **recorded_departure** | **theoretical_departure** | **teams** |\n|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|\n| 67aa9421f9128fdab39e8c52 | 67923fa10e4810940efd5a9f | Trip-id-1 | 10:10 Start – End | Route-id-1 | The route 1 | Block-id-1 | 67ab7232160716991f4df61f | Jean Dupont | 67ab7258160716991f4df620 | Vehicle 1 | 20250211 | Stop-id-1 | Stop 1 | 1 | arrival | 0.0 | af318f5918ac2e40 | Device 1 | -315 | 11/02/25 10:10 | 11/02/25 10:10 | Team 1 |\n\nRole needed: limited_reader, regulator, reader, operator","operationId":"getExportPunctuality","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"The start date","title":"Start Date"},"description":"The start date"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"The end date","title":"End Date"},"description":"The end date"},{"name":"event","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The event type","title":"Event"},"description":"The event type"},{"name":"stop_id","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"The stop id","title":"Stop Id"},"description":"The stop id"},{"name":"gtfs_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The gtfs id","title":"Gtfs Id"},"description":"The gtfs id"},{"name":"driver_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The driver id","title":"Driver Id"},"description":"The driver id"},{"name":"route_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The route id","title":"Route Id"},"description":"The route id"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"text/csv":{"schema":{"type":"string"},"example":"id;gtfs_id;trip_id;trip_formatted_name;route_id;route_long_name;block_id;driver_id;driver;vehicle_id;vehicle;start_date;stop_id;stop_name;stop_sequence;event;distance;device_id;device_name;delay;recorded_departure;theoretical_departure;teams\n67aa9421f9128fdab39e8c52;67923fa10e4810940efd5a9f;Trip-id-1;10:10 Start – End;Route-id-1;The route 1;Block-id-1;67ab7232160716991f4df61f;Jean Dupont;67ab7258160716991f4df620;Vehicle 1;20250211;Stop-id-1;Stop 1;1;arrival;0.0;af318f5918ac2e40;Device 1;-315;11/02/25 10:10;11/02/25 10:10;Team 1"}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__12"}],"title":"Response 403 Getexportpunctuality"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-datahub":true,"x-api-version":4,"x-path-prefix":"/api","x-deployment":"stats","x-public":true}},"/api/v4/groups/{group_id}/urgency":{"get":{"tags":["urgency"],"summary":"Find Urgencies","description":"**This endpoint allows you to get all urgencies created.**\n\nFeature needed: urgency\n\nRole needed: driver, regulator, operator","operationId":"getUrgency","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"]},{"type":"null"}],"title":"Group Id"}},{"name":"team_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Id"}},{"name":"device_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","description":"The id of the device you want to retrieve datas from.","examples":["837e726d2f25af9a","e627452b4a502323","943a739adc3ce43a"]},{"type":"null"}],"title":"Device Id"}},{"name":"gtfs_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gtfs Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"x-pysae-api-batch-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Pysae-Api-Batch-Id"}},{"name":"x-pysae-api-request-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Pysae-Api-Request-Id"}},{"name":"x-pysae-api-lazy-loading-router","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Pysae-Api-Lazy-Loading-Router"}},{"name":"user-agent","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User-Agent"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UrgencySchema"},"title":"Response Geturgency"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/InvalidTeam"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__13"}],"title":"Response 403 Geturgency"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/voip/devices":{"get":{"tags":["voip"],"summary":"List all known VoIP devices.","description":"**List every VoIP device that has connected to the customer account, including devices currently offline.**\n\nFeature needed: voip\n\nRole needed: technical, operator, admin, regulator, reader","operationId":"getVoipDevices","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/VoipDeviceStatusSchema"},{"type":"null"}],"description":"Filter devices by their last known status","title":"Status"},"description":"Filter devices by their last known status"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VoipDeviceSchema"},"title":"Response Getvoipdevices"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoipProviderUnavailable"}}},"description":"Service Unavailable"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/VoipGroupSettingsNotFound"}],"title":"Response 404 Getvoipdevices"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__14"}],"title":"Response 403 Getvoipdevices"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/devices/online":{"get":{"tags":["devices"],"summary":"Get all devices that are online","description":"**This endpoint allows you to get all devices that are online.**\n\nDevices are considered online if device.connected_at is more recent than the group's configured delay (delay_device_online, 120 seconds by default; delay_device_online_router and delay_device_online_telematic apply to their respective equipment types).","operationId":"getDeviceOnline","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"on_demand_route_id","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Identifiant(s) de ligne à la demande servie(s), tel que `on_demand_route_id` le ressort. Sans ce paramètre, le filtrage est inchangé.","title":"On Demand Route Id"},"description":"Identifiant(s) de ligne à la demande servie(s), tel que `on_demand_route_id` le ressort. Sans ce paramètre, le filtrage est inchangé."},{"name":"route_id","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Route Id"}},{"name":"device_id","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Device Id"}},{"name":"trip_id","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Trip Id"}},{"name":"block_id","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Block Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DeviceOnlineV4Schema"},"title":"Response Getdeviceonline"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/devices/online/count":{"get":{"tags":["devices"],"summary":"Count all devices that are online combined by route_id","description":"**This endpoint allows you to count all devices that are online combined by route_id.**\n\nDevices are considered online if device.connected_at is more recent than the group's configured delay (delay_device_online, 120 seconds by default; delay_device_online_router and delay_device_online_telematic apply to their respective equipment types). An unknown group_id returns 404, where it used to return an empty list.","operationId":"getDeviceOnlineCount","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"route_id","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"The id(s) of the route(s) you want to focus on.","title":"Route Id"},"description":"The id(s) of the route(s) you want to focus on."},{"name":"trip_pending","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Set to filter devices on given value for trip_pending.","title":"Trip Pending"},"description":"Set to filter devices on given value for trip_pending."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DeviceCountSchema"},"title":"Response Getdeviceonlinecount"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/devices":{"get":{"tags":["devices"],"summary":"Get all devices","description":"**This endpoint allows you to get all devices**\n\n- Devices filtered by the team of a user.\n- If the user has no team, all devices of the given group are shown.\n- Returned fields depend on current user.","operationId":"getDevices","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/DeviceAllSchema"}},{"type":"array","items":{"$ref":"#/components/schemas/DevicePublicSchema"}}],"title":"Response Getdevices"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/devices/{device_id}":{"get":{"tags":["devices"],"summary":"Return the device for the given device_id.","description":"**This endpoint allows you to return the device for the given device_id.**\n\nReturned fields depend on current user.","operationId":"getDevice","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"device_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceAllSchema"},{"$ref":"#/components/schemas/DevicePublicSchema"}],"title":"Response Getdevice"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getdevice"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/stats/daily-devices":{"get":{"tags":["devices","stats"],"summary":"Get daily devices count.","description":"**This endpoint allows you to get daily devices count.**\n\nRole needed: operator, external_reader, limited_reader, regulator, reader","operationId":"getStatDailyDevices","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"from","in":"query","required":true,"schema":{"type":"string","pattern":"\\d{8}$","description":"The start date of the period","title":"From"},"description":"The start date of the period"},{"name":"to","in":"query","required":true,"schema":{"type":"string","pattern":"\\d{8}$","description":"The end date of the period","title":"To"},"description":"The end date of the period"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DailyDevicesSchema"},"title":"Response Getstatdailydevices"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__1"}],"title":"Response 403 Getstatdailydevices"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-deployment":"stats","x-public":true}},"/api/v4/groups/{group_id}/gtfs/{gtfs_id}/generate-shapes/{task_id}":{"get":{"tags":["gtfs"],"summary":"Get Generate Shapes Status","description":"**This endpoint allows to get the status of a generate-shapes task.**\n\nRole needed: operator","operationId":"getGtfsGenerateShape","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"task_id","in":"path","required":true,"schema":{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"],"title":"Task Id"}},{"name":"gtfs_id","in":"path","required":true,"schema":{"type":"string","title":"Gtfs Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateShapesTaskSchema"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeTaskNotFound"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__15"}],"title":"Response 403 Getgtfsgenerateshape"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeTaskFailed"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/gtfs-rt":{"get":{"tags":["gtfs-rt"],"summary":"Get the full GTFS-RT feed","description":"**This endpoint returns the full GTFS-RT feed for the specified group.**\n\nThe full documentation can be found on the [GTFS website](https://gtfs.org/resources/gtfs-realtime/)","operationId":"getGtfsRt","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"format","in":"query","required":false,"schema":{"$ref":"#/components/schemas/Format","description":"Use `binary` for production, `plaintext` is a json document for debugging purpose","default":"binary"},"description":"Use `binary` for production, `plaintext` is a json document for debugging purpose"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Getgtfsrt"}},"application/octet-stream":{"schema":{"type":"binary"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-deployment":"gtfsrt","x-public":true}},"/api/v4/groups/{group_id}/gtfs-rt/{feed_type}":{"get":{"tags":["gtfs-rt"],"summary":"Get a specific GTFS-RT feed","description":"**This endpoint returns a specific GTFS-RT feed for the specified group.**\n\nThe full documentation can be found on the [GTFS website](https://gtfs.org/resources/gtfs-realtime/)","operationId":"getGtfsRtFeed","parameters":[{"name":"feed_type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/FeedType"}},{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"format","in":"query","required":false,"schema":{"$ref":"#/components/schemas/Format","description":"Use `binary` for production, `plaintext` is a json document for debugging purpose","default":"binary"},"description":"Use `binary` for production, `plaintext` is a json document for debugging purpose"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Getgtfsrtfeed"}},"application/octet-stream":{"schema":{"type":"binary"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-deployment":"gtfsrt","x-public":true}},"/api/v4/groups/{group_id}/stats/trip-km":{"get":{"tags":["trip-km","stats"],"summary":"Get Trip Km Stats","description":"**This endpoint allows to get trip km stats.**\n\nRole needed: operator, external_reader, limited_reader, regulator, reader","operationId":"getStatTripKm","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"group_by","in":"query","required":true,"schema":{"$ref":"#/components/schemas/pysae__api__trip_km__schemas__GroupBy"}},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","title":"End Date"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/RCKRouteStat"}},{"type":"array","items":{"$ref":"#/components/schemas/RCKDayStat"}}],"title":"Response Getstattripkm"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__1"}],"title":"Response 403 Getstattripkm"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-deployment":"stats","x-public":true}},"/api/v4/groups/{group_id}/export/trip-km":{"get":{"tags":["trip-km","stats"],"summary":"Export Trip Km Stats","description":"**This endpoint allows to export trip km stats.**\n\n# Rapport d’Export des Kilomètres Commerciaux\n\nCe rapport permet de suivre et d’analyser les distances commerciales théoriques et réelles pour chaque trajet. Il compare les kilomètres prévus et parcourus.\n\n| **Champ**                        | **Champ requis** | **Champ du GTFS** | **Identifiant Pysae** | **Description** |\n|----------------------------------|------------------|------------------|-----------------------|-----------------|\n| `gtfs_id`                        | Oui              | Non              | Oui                   | Identifiant du fichier GTFS |\n| `block_id`                       | Non              | Oui              | Non                   | Identifiant du bloc de trajets |\n| `date`                           | Oui              | Non              | Non                   | Date de début du trajet au format GTFS (ex. `20220101`) |\n| `gtfs_name`                      | Oui              | Non              | Non                   | Nom donné par l'utilisateur |\n| `route_id`                       | Oui              | Oui              | Non                   | Identifiant de la ligne |\n| `route_long_name`                | Non              | Oui              | Non                   | Nom complet de la ligne |\n| `route_short_name`               | Non              | Oui              | Non                   | Nom court de la ligne |\n| `theoretical_departure_time`     | Oui              | Non              | Non                   | Heure théorique de départ du trajet |\n| `theoretical_commercial_km`      | Oui              | Non              | Non                   | Distance commerciale théorique prévue pour le trajet (en kilomètres) |\n| `trip_id`                        | Oui              | Oui              | Non                   | Identifiant du trajet spécifique |\n| `trip_headsign`                  | Non              | Oui              | Non                   | Destination du trajet |\n| `trip_short_name`                | Non              | Oui              | Non                   | Nom court du trajet |\n| `recorded_commercial_km`         | Oui              | Non              | Non                   | Distance commerciale réelle parcourue pendant le trajet |\n| `unreliable_km`                  | Non              | Non              | Non                   | Distance incertaine ou non fiable |\n| `reliable_km`                    | Oui              | Non              | Non                   | Distance fiable confirmée |\n| `week`                           | Oui              | Non              | Non                   | Numéro de la semaine de la date du trajet |\n| `deviated_km`                    | Non              | Non              | Non                   | Écart signé (en kilomètres) apporté par la déviation de tracé active sur la course, figé à la clôture de la course. `0.0` = pas de déviation de tracé ; positif = rallongement, négatif = raccourcissement ; vide = non mesuré (tracé non résolu, course antérieure à l'introduction du champ, ou course planifiée non roulée) |\n| `theoretical_commercial_km_with_deviation` | Non    | Non              | Non                   | `theoretical_commercial_km + deviated_km` (en kilomètres) : distance théorique corrigée de la déviation. Vide quand `deviated_km` n'est pas mesuré |\n\n> **Asymétrie à connaître pour la réconciliation** : `theoretical_commercial_km` est calculé sur **toutes les courses planifiées** de la période, alors que `deviated_km` n'est mesuré que sur les **courses ayant un enregistrement de kilomètres réalisés** (courses effectivement roulées). Un écart entre le total théorique et la somme des déviations n'est donc pas un bug. Par ailleurs, `deviated_km` est figé à la clôture de la course : éditer ou supprimer une déviation après coup ne modifie pas les valeurs déjà enregistrées. Enfin, quand plusieurs appareils ont roulé la même course le même jour, chaque ligne d'export porte le delta complet de la déviation.\n\n\n<h2>Example : </h2>\n\n| **gtfs_id** | **block_id** | **date** | **gtfs_name** | **route_id** | **route_long_name** | **route_short_name** | **theoretical_departure_time** | **theoretical_commercial_km** | **trip_id** | **trip_headsign** | **trip_short_name** | **recorded_commercial_km** | **unreliable_km** | **reliable_km** | **week** | **deviated_km** | **theoretical_commercial_km_with_deviation** |\n|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|\n| 123456 | block_A | 20250113 | Ligne Express A | route_100 | Centre-Ville ↔ Gare | CV-GR | 2025-01-13 07:00:00+01:00 | 15.2 | trip_a1 | Gare Centrale | A1 | 15.0 | 0.2 | 14.8 | 3 | 2.0 | 17.2 |\n| 654321 | — | 20250114 | Navette B | route_200 | — | NB | 2025-01-14 07:30:00+01:00 | 7.8 | trip_b2 | Campus Nord | B2 | 7.5 | 0.0 | 7.5 | 3 | — | — |\n\nRole needed: operator, external_reader, limited_reader, regulator, reader","operationId":"getExportTripKm","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","title":"End Date"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"text/csv":{"schema":{"type":"string"},"example":"gtfs_id;block_id;date;gtfs_name;route_id;route_long_name;route_short_name;theoretical_departure_time;theoretical_commercial_km;trip_id;trip_headsign;trip_short_name;recorded_commercial_km;unreliable_km;reliable_km;week;deviated_km;theoretical_commercial_km_with_deviation\n123456;block_A;20250113;Ligne Express A;route_100;Centre-Ville ↔ Gare;CV-GR;2025-01-13 07:00:00+01:00;15.2;trip_a1;Gare Centrale;A1;15.0;0.2;14.8;3;2.0;17.2\n654321;;20250114;Navette B;route_200;;NB;2025-01-14 07:30:00+01:00;7.8;trip_b2;Campus Nord;B2;7.5;0.0;7.5;3;;"}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__1"}],"title":"Response 403 Getexporttripkm"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-datahub":true,"x-api-version":4,"x-path-prefix":"/api","x-deployment":"stats","x-public":true}},"/api/v4/groups/{group_id}/gtfs/{gtfs_id}/calendar-dates":{"get":{"tags":["gtfs"],"summary":"Get the list of calendar dates for the given gtfs id","description":"**This endpoint allows to get the list of calendar dates for the given gtfs id**\n\nPublicly available endpoint","operationId":"getGtfsCalendarDates","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"gtfs_id","in":"path","required":true,"schema":{"type":"string","title":"Gtfs Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CalendarDateGTFSSchema"},"title":"Response Getgtfscalendardates"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/gtfs/{gtfs_id}/calendar-dates/{service_id}":{"get":{"tags":["gtfs"],"summary":"Get calendar dates for the given service id","description":"**This endpoint allows to get the calendar dates for the given service id**\n\nPublicly available endpoint","operationId":"getGtfsCalendarDate","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"service_id","in":"path","required":true,"schema":{"type":"string","description":"The service id to get the calendar dates for","title":"Service Id"},"description":"The service id to get the calendar dates for"},{"name":"gtfs_id","in":"path","required":true,"schema":{"type":"string","title":"Gtfs Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CalendarDateGTFSSchema"},"title":"Response Getgtfscalendardate"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/stats/trip-tracking":{"get":{"tags":["trip-tracking","stats"],"summary":"Return the number of scheduled trips compared to the number of tracked trips grouped by day or by route.","description":"**This endpoint returns the number of scheduled trips compared to the number of tracked trips grouped by day or by route.**\n\nRole needed: operator, external_reader, limited_reader, regulator, reader","operationId":"getStatTripTracking","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"group_by","in":"query","required":true,"schema":{"$ref":"#/components/schemas/pysae__api__trip_tracking__router__GroupBy"}},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End Date"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/TripTrackingRoute"}},{"type":"array","items":{"$ref":"#/components/schemas/TripTrackingDay"}}],"title":"Response Getstattriptracking"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__1"}],"title":"Response 403 Getstattriptracking"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-deployment":"stats","x-public":true}},"/api/v4/groups/{group_id}/export/trip-tracking":{"get":{"tags":["trip-tracking","stats"],"summary":"Return a csv file with tracking status of all scheduled trips.","description":"**This endpoint returns a csv file with tracking status of all scheduled trips.**\n\nPour chaque course planifiée sur le GTFS, une ligne dans le fichier CSV.\n\n# Description des champs\n\n| nom                 | requis | issu du GTFS | identifiant Pysae | commentaires                                                                  |\n| ------------------- | ------ | ------------ | ----------------- | ----------------------------------------------------------------------------- |\n| gtfs_id             | oui    | non          | oui               |                                                                               |\n| gtfs_name           | oui    | non          | non               | nom donné par l'utilisateur                                                   |\n| departure_time      | oui    | oui          | non               | heure de départ planifiée au format ISO                                       |\n| trip_id             | oui    | oui          | non               |                                                                               |\n| trip_formatted_name | oui    | non          | non               | nom du trajet selon le format configuré par l'utilisateur                     |\n| route_id            | oui    | oui          | non               |                                                                               |\n| route_long_name     | non    | oui          | non               | requis si `route_short_name` absent                                           |\n| route_short_name    | non    | oui          | non               | requis si `route_long_name` absent                                            |\n| agency_id           | oui    | oui          | non               |                                                                               |\n| is_tracked          | oui    | non          | non               | est considérée suivie une course qui a été commencée par au moins un appareil |\n| trip_teams          | non    | non          | non               | équipes associées à la course dans le GTFS                                    |\n| device_team         | non    | non          | non               | équipe de l'appareil qui a pris la course                                     |\n\n\n<h2>Example : </h2>\n\n| **gtfs_id** | **gtfs_name** | **departure_time** | **trip_id** | **trip_formatted_name** | **route_id** | **route_long_name** | **route_short_name** | **agency_id** | **is_tracked** | **trip_teams** | **device_team** |\n|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|\n| 123456 | Ligne 42 - Matin | 2025-05-13T08:00:00 | trip_001 | Gare → Centre | route_42 | Longue Ligne 42 | — | agency_1 | True | team-a | team-a |\n| 789012 | Ligne 15 - Soir | 2025-05-13T18:30:00 | trip_002 | Université → Stade | route_15 | — | 15S | agency_1 | False | — | team-b |\n\nRole needed: operator, external_reader, limited_reader, regulator, reader","operationId":"getExportTripTracking","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End Date"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"text/csv":{"schema":{"type":"string"},"example":"gtfs_id;gtfs_name;departure_time;trip_id;trip_formatted_name;route_id;route_long_name;route_short_name;agency_id;is_tracked;trip_teams;device_team\n123456;Ligne 42 - Matin;2025-05-13T08:00:00;trip_001;Gare → Centre;route_42;Longue Ligne 42;;agency_1;True;team-a;team-a\n789012;Ligne 15 - Soir;2025-05-13T18:30:00;trip_002;Université → Stade;route_15;;15S;agency_1;False;;team-b"}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__1"}],"title":"Response 403 Getexporttriptracking"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-datahub":true,"x-api-version":4,"x-path-prefix":"/api","x-deployment":"stats","x-public":true}},"/api/v4/groups/{group_id}/duties":{"get":{"tags":["duties"],"summary":"Get list of duties.","description":"**This endpoint allows you to get a list of duties**\n\nRole needed: limited_reader, technical, operator, external_reader, regulator, reader","operationId":"getDuties","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"anonymized","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"True to get anonymized data, else all","title":"Anonymized"},"description":"True to get anonymized data, else all"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Limit the number of results","default":0,"title":"Limit"},"description":"Limit the number of results"},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/DutySorting"},{"type":"null"}],"description":"\n                 Sort the duties by the given criteria.\n                  Expects a criteria of the form `field:order` where\n                  field is the `field` to sort by, and `order` either\n                  `asc` or `desc`. For the time being, the only supported\n                  `field` is `check_in`","title":"Sort"},"description":"\n                 Sort the duties by the given criteria.\n                  Expects a criteria of the form `field:order` where\n                  field is the `field` to sort by, and `order` either\n                  `asc` or `desc`. For the time being, the only supported\n                  `field` is `check_in`"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^\\d{4}\\d{2}\\d{2}$"},{"type":"null"}],"description":"Filter on a start date, in GTFS format.","examples":["20180224"],"title":"Start Date"},"description":"Filter on a start date, in GTFS format."},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DutySchemaV3"},"title":"Response Getduties"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__3"}],"title":"Response 403 Getduties"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/duties/search-comments":{"get":{"tags":["duties"],"summary":"Get comments of duties filtered by start_date","description":"**This endpoint allows you to get comments of duties filtered by start_date**\n\nRole needed: operator, external_reader, limited_reader, regulator, reader","operationId":"getDutySearchComments","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"start_date","in":"query","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The start date of the duty you want to retrieve datas from.","title":"Start Date"},"description":"The start date of the duty you want to retrieve datas from."},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommentRetrieveSchema"},"title":"Response Getdutysearchcomments"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__16"}],"title":"Response 403 Getdutysearchcomments"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/duties/{duty_id}/comments":{"get":{"tags":["duties"],"summary":"Get comments of duties filtered by duty_id","description":"**This endpoint allows you to get comments of duties filtered by duty_id**\n\nRole needed: operator, external_reader, limited_reader, regulator, reader","operationId":"getDutyComments","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"duty_id","in":"path","required":true,"schema":{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","description":"The id of the duty you want to retrieve datas from.","examples":["670f84254c28ffdaae0f462d"],"title":"Duty Id"},"description":"The id of the duty you want to retrieve datas from."},{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommentRetrieveSchema"},"title":"Response Getdutycomments"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__17"}],"title":"Response 403 Getdutycomments"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DutyNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/duties/{duty_id}":{"get":{"tags":["duties"],"summary":"Get a specific duty.","description":"**This endpoint allows you to get a specific duty**\n\nRole needed: operator, external_reader, limited_reader, regulator, reader","operationId":"getDuty","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"duty_id","in":"path","required":true,"schema":{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","description":"The id of the duty you want to retrieve datas from.","examples":["670f84254c28ffdaae0f462d"],"title":"Duty Id"},"description":"The id of the duty you want to retrieve datas from."},{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DutySchemaV3"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__17"}],"title":"Response 403 Getduty"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DutyNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/stats/vehicles-used":{"get":{"tags":["duties","stats"],"summary":"Number of unique vehicles used per day","description":"**Get the number of vehicles used per day for a group.**\n\nRole needed: limited_reader, technical, operator, external_reader, regulator, reader","operationId":"getStatVehiclesUsed","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"]},{"type":"null"}],"title":"Group Id"}},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","examples":["20201122"],"title":"Start Date"},"description":"The first date to include"},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","examples":["20201122"],"title":"End Date"},"description":"The last date to include"},{"name":"device_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","description":"The id of the device you want to retrieve datas from.","examples":["837e726d2f25af9a","e627452b4a502323","943a739adc3ce43a"]},{"type":"null"}],"title":"Device Id"}},{"name":"gtfs_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gtfs Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"x-pysae-api-batch-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Pysae-Api-Batch-Id"}},{"name":"x-pysae-api-request-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Pysae-Api-Request-Id"}},{"name":"x-pysae-api-lazy-loading-router","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Pysae-Api-Lazy-Loading-Router"}},{"name":"user-agent","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User-Agent"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UsedVehicleCountSchema"},"title":"Response Getstatvehiclesused"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__3"}],"title":"Response 403 Getstatvehiclesused"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-deployment":"stats","x-public":true}},"/api/v4/groups/{group_id}/danger-zones":{"get":{"tags":["danger-zones"],"summary":"Find Danger Zones","description":"**This endpoint allows you to get all danger zones from a group.**\n\nFeature needed: danger_zones\n\nRole needed: driver, operator, external_reader, regulator, reader","operationId":"getDangerZones","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DangerZoneSchema"},"title":"Response Getdangerzones"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__18"}],"title":"Response 403 Getdangerzones"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/nav-data-processor-api/v4/groups/{group_id}/messages":{"get":{"tags":["messages","ndp"],"summary":"Get all messages by group.","description":"**This endpoint allows to get all messages of a group.**\n\nBy default messages are filtered by team_id of the user (if the user has a team_id) and by archived=false status.\n\nRole needed: driver, operator, external_reader, regulator, reader","operationId":"getMessagesNdp","deprecated":true,"security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To"}},{"name":"delivered","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Delivered"}},{"name":"archived","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Archived"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MessageSchemaDeprecated"},"title":"Response Getmessagesndp"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__18"}],"title":"Response 403 Getmessagesndp"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/nav-data-processor-api","x-deployment":"ndp","x-public":true},"post":{"tags":["messages","ndp"],"summary":"Post a new message","description":"**This endpoint allows to create a new message.**\n\n- To create a message at least one recipient or team_id in teams list should be present.\n- If teams is present all device_ids that belong to at least one of the given team_ids will become the recipients.\n\nRole needed: driver, regulator, operator","operationId":"postMessagesNdp","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageCreateSchema"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageCreatedSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__19"}],"title":"Response 403 Postmessagesndp"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/nav-data-processor-api","x-deployment":"ndp","x-public":true}},"/api/v4/groups/{group_id}/messages":{"get":{"tags":["messages"],"summary":"Get all messages by group.","description":"**This endpoint allows to get all messages of a group.**\n\nBy default messages are filtered by team_id of the user (if the user has a team_id) and by archived=false status. Use the 'after_id' parameter to retrieve messages created after a given message id.\n\nRole needed: driver, operator, external_reader, regulator, reader","operationId":"getMessages","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To"}},{"name":"after_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"]},{"type":"null"}],"title":"After Id"}},{"name":"delivered","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Delivered"}},{"name":"archived","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Archived"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MessageSchemaDeprecated"},"title":"Response Getmessages"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__18"}],"title":"Response 403 Getmessages"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true},"post":{"tags":["messages"],"summary":"Post a new message","description":"**This endpoint allows to create a new message.**\n\n- To create a message at least one recipient or team_id in teams list should be present.\n- If teams is present all device_ids that belong to at least one of the given team_ids will become the recipients.\n\nRole needed: driver, regulator, operator","operationId":"postMessages","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageCreateSchema"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageCreatedSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__19"}],"title":"Response 403 Postmessages"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/nav-data-processor-api/v4/groups/{group_id}/messages/{message_id}":{"get":{"tags":["messages","ndp"],"summary":"Get one message by id.","description":"**This endpoint allows to get one message by id.**\n\nRole needed: driver, operator, external_reader, regulator, reader","operationId":"getMessageNdp","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}},{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageSchemaDeprecated"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__20"}],"title":"Response 403 Getmessagendp"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/nav-data-processor-api","x-deployment":"ndp","x-public":true}},"/api/v4/groups/{group_id}/messages/{message_id}":{"get":{"tags":["messages"],"summary":"Get one message by id.","description":"**This endpoint allows to get one message by id.**\n\nRole needed: driver, operator, external_reader, regulator, reader","operationId":"getMessage","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}},{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageSchemaDeprecated"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__20"}],"title":"Response 403 Getmessage"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true},"patch":{"tags":["messages"],"summary":"Archive one message.","description":"**This endpoint allows to archive one message.**\n\nRole needed: regulator, operator","operationId":"patchMessage","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the message you want to retrieve.","title":"Message Id"},"description":"The id of the message you want to retrieve."},{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageArchiveSchema"}}}},"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__21"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Patchmessage"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/messages-archive":{"post":{"tags":["messages"],"summary":"Archive messages by id","description":"**This endpoint allows to archive a message by id.\nIf there is not the same amount of id given and modified at the end, it may be because the id does not exist or because you don't have the right to update them**\n\nRole needed: regulator, operator","operationId":"postMessagesArchive","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageBulkArchiveSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageBulkArchiveResultSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__22"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Postmessagesarchive"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/nav-data-processor-api/v4/groups/{group_id}/messages/{message_id}/recipients/{recipient_address}":{"patch":{"tags":["messages","ndp"],"summary":"Set read or delivered status.","description":"**This endpoint allows to set read or delivered status of a message.**\n\nRole needed: driver, regulator, operator","operationId":"patchMessageRecipientNdp","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the message you want to retrieve.","title":"Message Id"},"description":"The id of the message you want to retrieve."},{"name":"recipient_address","in":"path","required":true,"schema":{"type":"string","description":"The address of the recipient.","title":"Recipient Address"},"description":"The address of the recipient."},{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageUpdateSchema"}}}},"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__23"}],"title":"Response 403 Patchmessagerecipientndp"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/nav-data-processor-api","x-deployment":"ndp","x-public":true}},"/api/v4/groups/{group_id}/messages/{message_id}/recipients/{recipient_address}":{"patch":{"tags":["messages"],"summary":"Set read or delivered status.","description":"**This endpoint allows to set read or delivered status of a message.**\n\nRole needed: driver, regulator, operator","operationId":"patchMessageRecipient","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the message you want to retrieve.","title":"Message Id"},"description":"The id of the message you want to retrieve."},{"name":"recipient_address","in":"path","required":true,"schema":{"type":"string","description":"The address of the recipient.","title":"Recipient Address"},"description":"The address of the recipient."},{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageUpdateSchema"}}}},"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__23"}],"title":"Response 403 Patchmessagerecipient"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/export/messages":{"get":{"tags":["messages","stats"],"summary":"Returns a csv file with all messages","description":"**This endpoint allows you to export all messages**\n\n\n\n<h2>Example : </h2>\n\n| **id** | **sender_client** | **sender_device_id** | **sender_trip_gtfs_id** | **sender_trip_formatted_trip_name** | **sender_trip_trip_id** | **sender_trip_start_date** | **sender_user_id** | **sender_coordinates** | **recipient_addresses** | **recipient_read_amount** | **recipient_read_percent** | **recipient_delivered_amount** | **recipient_delivered_percent** | **subject** | **teams** | **archived** | **priority** |\n|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|\n| 686287ec510edb0ea1c361ac | op | — | — | — | — | — | user.operator@pysae.com, | — | device_id:A1mSIGH4nuvd, | 100.0 | 7656 | 1 | 100.0 | Bouchon sur la roccade | — | False | — |\n| 686287d983374481681d64f4 | driver | 012345abcdef | 6862647c6989da786e4325df | 14:52 vers COLLIGNON | 801 | 3734541-2025_E-Mult_LaM-L-Ma-Me-01 | 20250630 | — | 48.853410, 2.3488000 | op | 100.0 | 8321 | 1 | 100.0 | Départ d'incendie | — | False | high |\n\nRole needed: driver, operator, external_reader, regulator, reader","operationId":"getExportMessages","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"archived","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Get both if not set","title":"Archived"},"description":"Get both if not set"},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since"}},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"To"}},{"name":"sender_client","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sender Client"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"text/csv":{"schema":{"type":"string"},"example":"id;sender_client;sender_device_id;sender_trip_gtfs_id;sender_trip_formatted_trip_name;sender_trip_trip_id;sender_trip_start_date;sender_user_id;sender_coordinates;recipient_addresses;recipient_read_amount;recipient_read_percent;recipient_delivered_amount;recipient_delivered_percent;subject;teams;archived;priority\n686287ec510edb0ea1c361ac;op;;;;;;user.operator@pysae.com,;;device_id:A1mSIGH4nuvd,;100.0;7656;1;100.0;Bouchon sur la roccade;;False;\n686287d983374481681d64f4;driver;012345abcdef;6862647c6989da786e4325df;14:52 vers COLLIGNON | 801;3734541-2025_E-Mult_LaM-L-Ma-Me-01;20250630;;48.853410, 2.3488000;op;100.0;8321;1;100.0;Départ d'incendie;;False;high"}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__18"}],"title":"Response 403 Getexportmessages"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-deployment":"stats","x-public":true}},"/api/v4/rail-stations":{"get":{"tags":["rail"],"summary":"List the SNCF passenger stations.","description":"**Search the global rail-station referential by name or by proximity.**\n\n- Open data, no authentication and no group: the same referential for everyone.\n- `q` matches a substring of the name, accent- and case-insensitively.\n- `near` orders by increasing distance and returns `distance_meters`.\n\nThe referential mirrors the SNCF `gares-de-voyageurs` dataset (2782 stations). It is reloaded manually when SNCF revises the dataset, so it holds no real-time information.\n\n`radius` only applies together with `near`; on its own it is ignored.","operationId":"getRailStations","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search terms matched as a substring of the station name. Accents, case and separators are ignored, so `saint germain` matches `Saint-Germain-en-Laye`.","title":"Q"},"description":"Search terms matched as a substring of the station name. Accents, case and separators are ignored, so `saint germain` matches `Saint-Germain-en-Laye`."},{"name":"radius","in":"query","required":false,"schema":{"type":"integer","maximum":1000000,"minimum":1,"description":"Search radius around `near`, in metres.","default":10000,"title":"Radius"},"description":"Search radius around `near`, in metres."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"1-based page index.","default":1,"title":"Page"},"description":"1-based page index."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Amount of items per page.","default":50,"title":"Page Size"},"description":"Amount of items per page."},{"name":"near","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^-?\\d+(?:\\.\\d+)?,-?\\d+(?:\\.\\d+)?$"},{"type":"null"}],"description":"Reference point as `<latitude>,<longitude>` in WGS 84 decimal degrees (e.g. `46.809737,1.699536`). Orders the results by increasing distance and restricts them to `radius`.","examples":["46.809737,1.699536"],"title":"Near"},"description":"Reference point as `<latitude>,<longitude>` in WGS 84 decimal degrees (e.g. `46.809737,1.699536`). Orders the results by increasing distance and restricts them to `radius`."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RailStationPageSchema"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRailStationNear"}}},"description":"Bad Request"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/rail-stations/{uic}":{"get":{"tags":["rail"],"summary":"Get one SNCF passenger station by UIC code.","description":"**Return the station carrying this UIC code.**\n\nA station can be known by several UIC codes; any of them resolves to the same station.","operationId":"getRailStation","parameters":[{"name":"uic","in":"path","required":true,"schema":{"type":"string","description":"UIC code of the station, e.g. `87597005`.","title":"Uic"},"description":"UIC code of the station, e.g. `87597005`."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RailStationSchema"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RailStationNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/users/me":{"get":{"tags":["users"],"summary":"Get current group user.","description":"**This endpoint allows to get the current group user.**","operationId":"getUserMe","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSchema"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoUser"}}},"description":"Forbidden"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unauthenticated"}}},"description":"Unauthorized"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/api-keys":{"get":{"tags":["api-keys"],"summary":"Get all declared API keys","description":"**This endpoint allows you to get all declared API Keys.**\n\nAPI Keys can be used to access the api from an external application.\n\nRole needed: admin","operationId":"getApiKeys","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ApiKeySchema"},"title":"Response Getapikeys"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__6"}],"title":"Response 403 Getapikeys"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true},"post":{"tags":["api-keys"],"summary":"Create a new API Key","description":"**This endpoint allows to create a new API Key.**\n\nRole needed: admin","operationId":"postApiKeys","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeySchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__6"}],"title":"Response 403 Postapikeys"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/api-keys/{api_key_id}":{"get":{"tags":["api-keys"],"summary":"Get a declared API key","description":"**This endpoint allows you to get a declared API Key.**\n\nAPI Keys can be used to access the api from an external application.\n\nRole needed: admin","operationId":"getApiKey","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"],"title":"Api Key Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeySchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__24"}],"title":"Response 403 Getapikey"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/ApiKeyNotFound"}],"title":"Response 404 Getapikey"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true},"delete":{"tags":["api-keys"],"summary":"Delete an existing API Key","description":"**This endpoint allows to delete an existing API Key.**\n\nRole needed: admin","operationId":"deleteApiKey","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"],"title":"Api Key Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeySchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__24"}],"title":"Response 403 Deleteapikey"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/ApiKeyNotFound"}],"title":"Response 404 Deleteapikey"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/api-keys":{"post":{"tags":["api-keys"],"summary":"Create a multi-group or superuser API Key","description":"**This endpoint allows to create an API Key spanning several groups.**\n\nA role-based key grants its role on every listed group; a superuser key grants admin access to all groups. Creating a multi-group key requires the admin role on each targeted group; a superuser key requires being superuser.","operationId":"postGlobalApiKeys","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyGlobalCreateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeySchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/NoUser"},{"$ref":"#/components/schemas/InvalidRole"}],"title":"Response 403 Postglobalapikeys"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-unique-id.segments":["global"],"x-api-version":4,"x-path-prefix":"/api","x-public":true},"get":{"tags":["api-keys"],"summary":"Get all superuser API keys","description":"**This endpoint allows a superuser to list all superuser API keys.**","operationId":"getGlobalApiKeys","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ApiKeySchema"},"title":"Response Getglobalapikeys"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-unique-id.segments":["global"],"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/api-keys/{api_key_id}":{"delete":{"tags":["api-keys"],"summary":"Delete a superuser API Key","description":"**This endpoint allows a superuser to delete a superuser API key.**","operationId":"deleteGlobalApiKey","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"],"title":"Api Key Id"}},{"name":"group_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeySchema"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-unique-id.segments":["global"],"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/teams":{"get":{"tags":["teams"],"summary":"Get all group teams","description":"**This endpoint allows you to get nonarchived teams.**\n\nRole needed: admin","operationId":"getTeams","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Archived"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Team"},"title":"Response Getteams"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__6"}],"title":"Response 403 Getteams"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/stats/passenger-counts":{"get":{"tags":["passenger-counts","stats"],"summary":"Returns passenger counts grouped by day or route for a range of date","description":"**This endpoint allows you to get passenger counts grouped by day or route for a range of date.**\n\nRole needed: operator, external_reader, limited_reader, regulator, reader","operationId":"getStatPassengerCounts","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"group_by","in":"query","required":true,"schema":{"$ref":"#/components/schemas/pysae__api__passenger_counts__router__GroupBy"}},{"name":"start_date","in":"query","required":false,"schema":{"type":"string","pattern":"\\d{8}$","default":"20260910","title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"type":"string","pattern":"\\d{8}$","default":"20260910","title":"End Date"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"anyOf":[{"$ref":"#/components/schemas/PassengerCountSchemaByDay"},{"$ref":"#/components/schemas/PassengerCountSchemaByRoute"}]},"title":"Response Getstatpassengercounts"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__1"}],"title":"Response 403 Getstatpassengercounts"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-deployment":"stats","x-public":true}},"/api/v4/groups/{group_id}/export/passenger-counts":{"get":{"tags":["passenger-counts","stats"],"summary":"Returns a csv file with passenger counts for each trip in date range","description":"**This endpoint allows you to get a csv file with passenger counts for each trip in date range.**\n\n# Rapport du Comptage de Passagers\n\nCe rapport permet de suivre le nombre de passagers montés et descendus à chaque arrêt, en associant ces données aux trajets, véhicules et conducteurs.\n\n| **Champ**                | **Champ requis** | **Champ du GTFS** | **Identifiant Pysae** | **Description** |\n|--------------------------|------------------|-------------------|-----------------------|----------------------------------|\n| `agency_id`             | Non              | Oui               | Non                   | Identifiant de l'agence |\n| `alighting`             | Oui              | Non               | Non                   | Nombre de passagers descendus à l'arrêt |\n| `block_id`              | Non              | Oui               | Non                   | Identifiant du bloc |\n| `boarding`              | Oui              | Non               | Non                   | Nombre de passagers montés à l'arrêt |\n| `day_of_week`           | Oui              | Non               | Non                   | Jour de la semaine du trajet |\n| `device_id`             | Non              | Non               | Oui                   | Identifiant de l’appareil utilisé pour l’enregistrement |\n| `driver`               | Non              | Non               | Non                   | Nom du conducteur suivi de son matricule entre parenthèses |\n| `group_id`             | Oui              | Non               | Oui                   | Identifiant du groupe |\n| `gtfs_id`              | Oui              | Non               | Oui                   | Identifiant du fichier GTFS |\n| `location_type`        | Non              | Oui               | Non                   | Type d’emplacement |\n| `route_id`            | Non               | Oui               | Non                   | Identifiant de la ligne |\n| `route_long_name`      | Non               | Oui               | Non                   | Nom complet de la ligne |\n| `route_short_name`     | Non               | Oui               | Non                   | Nom court de la ligne |\n| `server_ts`           | Non               | Non               | Non                   | Horodatage serveur de l’événement |\n| `start_date`          | Oui               | Non               | Non                   | Date de début du trajet |\n| `stop_code`          | Non                | Oui               | Non                   | Code de l'arrêt |\n| `stop_id`            | Oui               | Oui               | Non                   | Identifiant de l'arrêt |\n| `stop_lat`          | Non                | Oui               | Non                   | Latitude de l'arrêt |\n| `stop_lon`          | Non                | Oui               | Non                   | Longitude de l'arrêt |\n| `stop_name`         | Non                | Oui               | Non                   | Nom de l'arrêt |\n| `stop_sequence`     | Oui               | Oui               | Non                   | Ordre de passage de l'arrêt dans l’itinéraire |\n| `teams`            | Non                | Oui               | Non                   | Équipes associées au trajet |\n| `total_boarding`   | Oui               | Non               | Non                   | Nombre total de passagers montés à l'arrêt |\n| `trip_formatted_name` | Non             | Non               | Non                   | Nom formaté du trajet selon la configuration utilisateur |\n| `trip_headsign`    | Non                | Oui               | Non                   | Destination affichée du trajet |\n| `trip_id`         | Oui                 | Oui               | Non                   | Identifiant du trajet |\n| `trip_short_name` | Non                 | Oui               | Non                   | Nom court du trajet |\n| `vehicle`        | Non                 | Non               | Non                   | Plaque d'immatriculation suivie du numéro de parc entre parenthèses |\n\n\n<h2>Example : </h2>\n\n| **group_id** | **gtfs_id** | **start_date** | **day_of_week** | **device_id** | **teams** | **trip_id** | **trip_short_name** | **trip_headsign** | **trip_formatted_name** | **block_id** | **route_id** | **route_long_name** | **route_short_name** | **agency_id** | **stop_id** | **stop_sequence** | **is_temporary_stop** | **stop_name** | **stop_code** | **stop_lat** | **stop_lon** | **driver** | **vehicle** | **location_type** | **boarding** | **alighting** | **total_boarding** |\n|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|\n| My group | 6787cdef78c8d88c81fdbae3 | 2025-02-03 00:00:00+00:00 | monday | 284de389eb291bce | my-team | trip-id-1 | Trip1 | Start  > End | 10:10 [Route1 / block-1] > Start > End | Block-id-1 | Route-id-1 | Trip 1 : Start > End | Route 1 | 1 | Stop-id-2 | 2 | False | The Stop 2 ! | 2222222 | 0.0 | 0.0 | Driver 1 | Vehicle 1 | 0 | 2 | 0 | 2 |\n\nRole needed: operator, external_reader, limited_reader, regulator, reader","operationId":"getExportPassengerCounts","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","title":"End Date"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"text/csv":{"schema":{"type":"string"},"example":"group_id;gtfs_id;start_date;day_of_week;device_id;teams;trip_id;trip_short_name;trip_headsign;trip_formatted_name;block_id;route_id;route_long_name;route_short_name;agency_id;stop_id;stop_sequence;is_temporary_stop;stop_name;stop_code;stop_lat;stop_lon;driver;vehicle;location_type;boarding;alighting;total_boarding\nMy group;6787cdef78c8d88c81fdbae3;2025-02-03 00:00:00+00:00;monday;284de389eb291bce;my-team;trip-id-1;Trip1;Start  > End;10:10 [Route1 / block-1] > Start > End;Block-id-1;Route-id-1;Trip 1 : Start > End;Route 1;1;Stop-id-2;2;False;The Stop 2 !;2222222;0.0;0.0;Driver 1;Vehicle 1;0;2;0;2"}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__1"}],"title":"Response 403 Getexportpassengercounts"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-datahub":true,"x-api-version":4,"x-path-prefix":"/api","x-deployment":"stats","x-public":true}},"/api/v4/groups/{group_id}/stop-times":{"get":{"tags":["stop-times"],"summary":"Find stop times","description":"**This endpoint allows you to get the stop times for a group.**","operationId":"getStopTimes","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"stop_id","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Id(s) of the stop(s) you want to focus on","title":"Stop Id"},"description":"Id(s) of the stop(s) you want to focus on"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StopTimeSchema"},"title":"Response Getstoptimes"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/siri/capabilities":{"get":{"tags":["siri"],"summary":"SIRI services available for a group","description":"**Returns the absolute URLs of the SIRI services exposed by the gtfsrt-to-siri converter for the given group.**","operationId":"getSiriCapabilities","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiriCapabilities"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/siri":{"get":{"tags":["siri"],"summary":"SIRI-VM text preview","description":"**Returns a Vehicle Monitoring SIRI XML preview for the given group by proxying the gtfsrt-to-siri converter.**","operationId":"getSiri","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."}],"responses":{"200":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/trip-details-feed":{"get":{"tags":["trips"],"summary":"Endpoint to get detailed feed for a specific trip","description":"**This endpoint allows to get a detailed feed for a specific trip.**\n\nRole needed: operator, external_reader, admin, limited_reader, regulator, reader","operationId":"getTripDetailsFeed","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"trip_id","in":"query","required":true,"schema":{"type":"string","title":"Trip Id"}},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","examples":["20201122"],"title":"Start Date"}},{"name":"gtfs_id","in":"query","required":true,"schema":{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"],"title":"Gtfs Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"anyOf":[{"$ref":"#/components/schemas/StopTimesFeedSchema"},{"$ref":"#/components/schemas/MessageDetailsSchema"},{"$ref":"#/components/schemas/UpdatesSchema"},{"$ref":"#/components/schemas/PassengerCountDetailsSchema"},{"$ref":"#/components/schemas/TripTakingSchema"}]},"title":"Response Gettripdetailsfeed"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__1"}],"title":"Response 403 Gettripdetailsfeed"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/gtfs/{gtfs_id}/shapes":{"get":{"tags":["gtfs"],"summary":"Find gtfs shapes","description":"**This endpoint allows to get the list of shapes for a specific gtfs_id.**","operationId":"getGtfsShapes","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"gtfs_id","in":"path","required":true,"schema":{"type":"string","title":"Gtfs Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ShapeGTFSSchema"},"title":"Response Getgtfsshapes"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/gtfs/{gtfs_id}/routes":{"get":{"tags":["gtfs"],"summary":"Get the list of routes for the given gtfs id","description":"**This endpoint allows to get the list of routes for a specific gtfs_id.**\n\n- Publicly available endpoint.\n- `gtfs_id` can have a value of pub to get currently published gtfs.","operationId":"getGtfsRoutes","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"gtfs_id","in":"path","required":true,"schema":{"type":"string","title":"Gtfs Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RouteGTFSSchema"},"title":"Response Getgtfsroutes"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/gtfs/{gtfs_id}/routes/{route_id}":{"get":{"tags":["gtfs"],"summary":"Get the info of the route identified by route_id","description":"**This endpoint allows to get the info of the route identified by route_id.**\n\n- Publicly available endpoint.\n- `gtfs_id` can have a value of pub to get currently published gtfs.","operationId":"getGtfsRoute","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"route_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the route to get","title":"Route Id"},"description":"The id of the route to get"},{"name":"gtfs_id","in":"path","required":true,"schema":{"type":"string","title":"Gtfs Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteGTFSSchema"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GtfsRouteNotFound"}}},"description":"Not Found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/gtfs/{gtfs_id}/shape-dist-traveled/{task_id}":{"get":{"tags":["gtfs"],"summary":"Get Compute Status","description":"**This endpoint allows to get a status of compute task.**\n\nRole needed: operator","operationId":"getGtfsShapeDistTraveled","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"task_id","in":"path","required":true,"schema":{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"],"title":"Task Id"}},{"name":"gtfs_id","in":"path","required":true,"schema":{"type":"string","title":"Gtfs Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskSchema"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeTaskNotFound"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__15"}],"title":"Response 403 Getgtfsshapedisttraveled"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeTaskFailed"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/gtfs/{gtfs_id}/stops":{"get":{"tags":["gtfs"],"summary":"Find stops","description":"**This endpoint allows to get the list of stops for a specific gtfs_id.**\n\n Publicly available endpoint.","operationId":"getGtfsStops","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"gtfs_id","in":"path","required":true,"schema":{"type":"string","title":"Gtfs Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StopGTFSSchema"},"title":"Response Getgtfsstops"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/gtfs/{gtfs_id}/stops/{stop_id}":{"get":{"tags":["gtfs"],"summary":"Get a stop","description":"**This endpoint allows to get the stops for a specific stop_id.**\n\nPublicly available endpoint.","operationId":"getGtfsStop","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"stop_id","in":"path","required":true,"schema":{"type":"string","description":"The stop id to get","title":"Stop Id"},"description":"The stop id to get"},{"name":"gtfs_id","in":"path","required":true,"schema":{"type":"string","title":"Gtfs Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StopGTFSSchema"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GtfsStopNotFound"}}},"description":"Not Found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/history/events/count":{"get":{"tags":["history"],"summary":"Get count of history events","description":"**This endpoint is used to get count of history events**\n\nReturn CountSchema type data with count value\n\nRole needed: operator, external_reader, limited_reader, regulator, reader","operationId":"getHistoryEventCount","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"trip_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Id of the trip you want to focus on","title":"Trip Id"},"description":"Id of the trip you want to focus on"},{"name":"min_lng","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum longitude","title":"Min Lng"},"description":"Minimum longitude"},{"name":"max_lng","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum longitude (included)","title":"Max Lng"},"description":"Maximum longitude (included)"},{"name":"min_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum latitude","title":"Min Lat"},"description":"Minimum latitude"},{"name":"max_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum latitude (included)","title":"Max Lat"},"description":"Maximum latitude (included)"},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"From timestamp","title":"From"},"description":"From timestamp"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"To timestamp (not included), ignored if `after_id` set","title":"To"},"description":"To timestamp (not included), ignored if `after_id` set"},{"name":"after_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"]},{"type":"null"}],"description":"Count events generated after given id","title":"After Id"},"description":"Count events generated after given id"},{"name":"before_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"]},{"type":"null"}],"description":"Count events generated before given id","title":"Before Id"},"description":"Count events generated before given id"},{"name":"device_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Id of the device you want to focus on","title":"Device Id"},"description":"Id of the device you want to focus on"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CountSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__1"}],"title":"Response 403 Gethistoryeventcount"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/history/events":{"get":{"tags":["history"],"summary":"Get all device history events for a group","description":"**This endpoint is used to get all history events**\n\nCan be filtered by device_id, trip_id, from_ts, to_ts and users teams.\n\nRole needed: operator, external_reader, limited_reader, regulator, reader","operationId":"getHistoryEvents","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"device_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Id of the device you want to focus on","title":"Device Id"},"description":"Id of the device you want to focus on"},{"name":"trip_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Id of the trip you want to focus on","title":"Trip Id"},"description":"Id of the trip you want to focus on"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":50000,"title":"Page Size"}},{"name":"min_lng","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum longitude","title":"Min Lng"},"description":"Minimum longitude"},{"name":"max_lng","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum longitude (included)","title":"Max Lng"},"description":"Maximum longitude (included)"},{"name":"min_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum latitude","title":"Min Lat"},"description":"Minimum latitude"},{"name":"max_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum latitude (included)","title":"Max Lat"},"description":"Maximum latitude (included)"},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"From timestamp","title":"From"},"description":"From timestamp"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"To timestamp (excluded)","title":"To"},"description":"To timestamp (excluded)"},{"name":"after_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"]},{"type":"null"}],"description":"Retrieve events generated after given id","title":"After Id"},"description":"Retrieve events generated after given id"},{"name":"before_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"]},{"type":"null"}],"description":"Retrieve events generated before given id","title":"Before Id"},"description":"Retrieve events generated before given id"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/HistoryEventSchema"},"title":"Response Gethistoryevents"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__1"}],"title":"Response 403 Gethistoryevents"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/history/stop-times":{"get":{"tags":["history"],"summary":"Get all history stop times","description":"**This endpoint is used to get all history stop times**\n\nRole needed: limited_reader, technical, operator, external_reader, regulator, reader","operationId":"getHistoryStopTimes","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date of the stop times","title":"Start Date"},"description":"Start date of the stop times"},{"name":"event","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Event type to filter on","title":"Event"},"description":"Event type to filter on"},{"name":"include_last_stop_arrival","in":"query","required":false,"schema":{"type":"boolean","description":"Adds arrival stop time of the last stop to departure stop times.","default":false,"title":"Include Last Stop Arrival"},"description":"Adds arrival stop time of the last stop to departure stop times."},{"name":"stop_id","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"It is possible to filter by multiple stop ids","title":"Stop Id"},"description":"It is possible to filter by multiple stop ids"},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"From timestamp","title":"From"},"description":"From timestamp"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"To timestamp (excluded)","title":"To"},"description":"To timestamp (excluded)"},{"name":"after_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"]},{"type":"null"}],"description":"Retrieve events generated after given id","title":"After Id"},"description":"Retrieve events generated after given id"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/HistoryStopTimesSchema"},"title":"Response Gethistorystoptimes"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__3"}],"title":"Response 403 Gethistorystoptimes"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/history/vk":{"get":{"tags":["history"],"summary":"Get all history vehicle kms for a group","description":"**This endpoint is used to get all history vehicle kms**\n\nCan be filtered by from_date, to_date and users teams.\n\nThese are **vehicle** kilometres, not commercial ones: the endpoint dumps the whole `vehicle_kms` collection over the period, without filtering on the trip. Records with a null `trip_id` are therefore included — dead-heading, dead mileage, and kilometres driven in on-demand service. For the commercial kilometres alone, use the trip-km report (`/groups/{group_id}/stats/trip-km`), which reads the per-trip `recorded_commercial_km` accumulator instead.\n\nRole needed: operator, external_reader, limited_reader, regulator, reader","operationId":"getHistoryVk","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From"}},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/HistoryVKSchema"},"title":"Response Gethistoryvk"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__1"}],"title":"Response 403 Gethistoryvk"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/history/gtfs":{"get":{"tags":["history"],"summary":"Get all gtfs publications for a group","description":"**This endpoint is used to get all gtfs publications**\n\nCan be filtered by from_ts and to_ts.\n\nRole needed: operator, external_reader, limited_reader, regulator, reader","operationId":"getHistoryGtfsList","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"From timestamp","title":"From"},"description":"From timestamp"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"To timestamp (included)","title":"To"},"description":"To timestamp (included)"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/HistoryGTFSSchema"},"title":"Response Gethistorygtfslist"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__16"}],"title":"Response 403 Gethistorygtfslist"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/history/gtfs-active":{"get":{"tags":["history"],"summary":"Get all active gtfs for a group in given period","description":"**This endpoint is used to get all active gtfs in given period**\n\nRole needed: operator, external_reader, limited_reader, regulator, reader","operationId":"getHistoryGtfsActive","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","examples":["2020-11-22T11:12:13","22/11/2020 11:12:13"]},{"type":"integer","examples":[1606003200]},{"type":"number","examples":[1606003200.5]},{"type":"null"}],"description":"From timestamp (included)","title":"From"},"description":"From timestamp (included)"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","examples":["2020-11-22T11:12:13","22/11/2020 11:12:13"]},{"type":"integer","examples":[1606003200]},{"type":"number","examples":[1606003200.5]},{"type":"null"}],"description":"To timestamp (included)","title":"To"},"description":"To timestamp (included)"},{"name":"include_scheduled","in":"query","required":false,"schema":{"type":"boolean","description":"Include scheduled GTFS publications","default":false,"title":"Include Scheduled"},"description":"Include scheduled GTFS publications"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/HistoryGTFSSchema"},"title":"Response Gethistorygtfsactive"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__1"}],"title":"Response 403 Gethistorygtfsactive"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/alerts":{"get":{"tags":["alerts"],"summary":"Return the alerts for the given group_id.","description":"**This endpoint allows to get all alerts for the given group_id.**","operationId":"getAlerts","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AlertSchema"},"title":"Response Getalerts"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/alerts/{alert_id}":{"get":{"tags":["alerts"],"summary":"Return the alert with the given alert_id.","description":"**This endpoint allows to get an alert from the given alert_id.**","operationId":"getAlert","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"],"title":"Alert Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertSchema"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/export/alerts":{"get":{"tags":["alerts","stats"],"summary":"Return the alerts for the given group_id.","description":"**This endpoint allows to get all alerts for the given group_id.**\n\n# Export des Alertes\n\nCe rapport permet d’exporter la liste des alertes actives ou passées.\n\n| **Champ**            | **Champ requis** | **Champ du GTFS** | **Identifiant Pysae** | **Description** |\n|----------------------|------------------|-------------------|-----------------------|----------------------------------|\n| `active`           | Oui              | Non               | Non                   | Indique si l’alerte est active |\n| `header_text`      | Oui              | Oui               | Non                   | Titre ou sujet de l’alerte |\n| `description_text` | Oui              | Non               | Non                   | Description détaillée de l’alerte |\n| `description_raw`  | Oui              | Oui               | Non                   | Description brute de l’alerte |\n| `start_date`       | Oui              | Non               | Non                   | Date et heure de début de l’alerte (format `2024-03-04T00:00:00+00:00`) |\n| `end_date`         | Oui              | Non               | Non                   | Date et heure de fin de l’alerte (format `2024-03-04T00:00:00+00:00`) |\n| `cause`           | Oui              | Oui               | Non                   | Raison de l’alerte (ex. `MAINTENANCE`) |\n| `effect`          | Oui              | Oui               | Non                   | Effet de l’alerte sur le service (ex. `OTHER_EFFECT`) |\n| `url`             | Non              | Oui               | Non                   | Lien vers une page web détaillant l’alerte. |\n| `stop_id`         | Non              | Oui               | Non                   | Identifiant de l’arrêt affecté |\n| `route_id`        | Non              | Oui               | Non                   | Identifiant de la ligne concernée |\n\n\n<h2>Example : </h2>\n\n| **active** | **header_text** | **description_text** | **description_raw** | **start_date** | **end_date** | **cause** | **effect** | **url** | **stop_id** | **route_id** |\n|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|\n| True | Problem | <p>Unavoidable problem at stop</p> | Unavoidable problem at stop | 2024-03-04T00:00:00+00:00 | 2024-03-05T23:59:00+00:00 | MAINTENANCE | OTHER_EFFECT | http://www.transporter.com/unavoidable-problem-1 | the-stop-id-1 | the-route-id-1 |\n| False | Discomfort | <p>Light disconfort</p> | Light discomfort | 2024-03-04T00:00:00+00:00 | 2024-03-05T23:59:00+00:00 | MAINTENANCE | OTHER_EFFECT | http://www.transporter.com/light-lack-of-comfort | the-stop-id-3 | the-route-id-2 |","operationId":"getExportAlerts","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."}],"responses":{"200":{"description":"Successful Response","content":{"text/csv":{"schema":{"type":"string"},"example":"active;header_text;description_text;description_raw;start_date;end_date;cause;effect;url;stop_id;route_id\nTrue;Problem;<p>Unavoidable problem at stop</p>;Unavoidable problem at stop;2024-03-04T00:00:00+00:00;2024-03-05T23:59:00+00:00;MAINTENANCE;OTHER_EFFECT;http://www.transporter.com/unavoidable-problem-1;the-stop-id-1;the-route-id-1\nFalse;Discomfort;<p>Light disconfort</p>;Light discomfort;2024-03-04T00:00:00+00:00;2024-03-05T23:59:00+00:00;MAINTENANCE;OTHER_EFFECT;http://www.transporter.com/light-lack-of-comfort;the-stop-id-3;the-route-id-2"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-datahub":true,"x-api-version":4,"x-path-prefix":"/api","x-deployment":"stats","x-public":true}},"/api/v4/groups/{group_id}/voip/callbacks":{"get":{"tags":["voip"],"summary":"List VoIP callbacks for the group","description":"**List every COMMAND_REQUEST callback received from Instavox.**\n\nFeature needed: voip\n\nRole needed: technical, operator, admin, regulator, reader","operationId":"getVoipCallbacks","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"is_resolved","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by resolution status","title":"Is Resolved"},"description":"Filter by resolution status"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VoipCallbackSchema"},"title":"Response Getvoipcallbacks"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__25"}],"title":"Response 403 Getvoipcallbacks"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/voip/callbacks/{callback_id}":{"get":{"tags":["voip"],"summary":"Fetch a VoIP callback by Mongo id","description":"**Return the persisted state of a single COMMAND_REQUEST callback.**\n\nFeature needed: voip\n\nRole needed: technical, operator, admin, regulator, reader","operationId":"getVoipCallback","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"callback_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","description":"Mongo identifier of the callback (24-char hex)","title":"Callback Id"},"description":"Mongo identifier of the callback (24-char hex)"},{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoipCallbackSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/VoipCallbackNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getvoipcallback"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__26"}],"title":"Response 403 Getvoipcallback"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/rail/departures":{"get":{"tags":["rail"],"summary":"Get the rail departure board of one of your stops.","description":"**Return the trains leaving the rail stations attached to this stop, theoretical times enriched with realtime.**\n\n- Requires the `rail_data` feature.\n- Without `from` and `to`, the window covers the next hour — what a departure board displays.\n- Sorted by increasing theoretical departure time, the time the window filters on, so the order stays stable as the estimates move.\n- `estimated_departure`, `delay_seconds`, `status` and `disruptions` come from the realtime feeds. When no realtime is available the board is still served, on its theoretical times alone, with `status: scheduled`.\n- Every mode calling at the station is returned, including `Car TER` replacement coaches — read `route_type` to tell them apart.\n- A stop attached to no rail station answers `200` with an empty list, not an error.\n\nFeature needed: rail_data","operationId":"getRailDepartures","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","examples":["global-transport-100","blue_bus_moov","serviceMobility"],"title":"Group Id"},"description":"The id of the group you want to retrieve datas from."},{"name":"stop_id","in":"query","required":true,"schema":{"type":"string","description":"Identifier of the stop in your network's GTFS (`stops.txt`). The board covers every rail station this stop is attached to.","title":"Stop Id"},"description":"Identifier of the stop in your network's GTFS (`stops.txt`). The board covers every rail station this stop is attached to."},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","examples":["2020-11-22T11:12:13","22/11/2020 11:12:13"]},{"type":"integer","examples":[1606003200]},{"type":"number","examples":[1606003200.5]},{"type":"null"}],"description":"Start of the window, included. Absolute instant — ISO 8601 or an epoch in seconds. Defaults to now, or to `to` minus 1 h when only `to` is given.","title":"From"},"description":"Start of the window, included. Absolute instant — ISO 8601 or an epoch in seconds. Defaults to now, or to `to` minus 1 h when only `to` is given."},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","examples":["2020-11-22T11:12:13","22/11/2020 11:12:13"]},{"type":"integer","examples":[1606003200]},{"type":"number","examples":[1606003200.5]},{"type":"null"}],"description":"End of the window, included. Absolute instant — ISO 8601 or an epoch in seconds. Defaults to `from` plus 1 h. The window may not exceed 24 h.","title":"To"},"description":"End of the window, included. Absolute instant — ISO 8601 or an epoch in seconds. Defaults to `from` plus 1 h. The window may not exceed 24 h."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RailDepartureSchema"},"title":"Response Getraildepartures"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRailDeparturesWindow"}}},"description":"Bad Request"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/gtfs/{gtfs_id}/agencies":{"get":{"tags":["gtfs"],"summary":"Find gtfs agency","description":"**This endpoint allows to get the list of agencies for a specific gtfs_id.**\n\n- `\n- g\n- t\n- f\n- s\n- _\n- i\n- d\n- `\n-  \n- c\n- a\n- n\n-  \n- h\n- a\n- v\n- e\n-  \n- a\n-  \n- v\n- a\n- l\n- u\n- e\n-  \n- o\n- f\n-  \n- \"\n- p\n- u\n- b\n- \"\n-  \n- t\n- o\n-  \n- g\n- e\n- t\n-  \n- c\n- u\n- r\n- r\n- e\n- n\n- t\n- l\n- y\n-  \n- p\n- u\n- b\n- l\n- i\n- s\n- h\n- e\n- d\n-  \n- g\n- t\n- f\n- s\n- .","operationId":"getGtfsAgencies","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"gtfs_id","in":"path","required":true,"schema":{"type":"string","title":"Gtfs Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AgencyGTFSSchema"},"title":"Response Getgtfsagencies"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/gtfs/{gtfs_id}/agencies/{agency_id}":{"get":{"tags":["gtfs"],"summary":"Get gtfs agency","description":"**This endpoint allows to get an agency for a specific gtfs_id and agency_id.**\n\n`gtfs_id` can have a value of pub to get currently published gtfs.","operationId":"getGtfsAgency","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"agency_id","in":"path","required":true,"schema":{"type":"string","title":"Agency Id"}},{"name":"gtfs_id","in":"path","required":true,"schema":{"type":"string","title":"Gtfs Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/AgencyGTFSSchema"},{"type":"null"}],"title":"Response Getgtfsagency"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GtfsAgencyNotFound"}}},"description":"Not Found"}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/gtfs/{gtfs_id}/trips":{"get":{"tags":["gtfs"],"summary":"Get trips by GTFS","description":"**This endpoint allows to get the list of trips for a specific gtfs_id.**","operationId":"getGtfsTrips","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"gtfs_id","in":"path","required":true,"schema":{"type":"string","title":"Gtfs Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TripGTFSSchema"},"title":"Response Getgtfstrips"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}},"/api/v4/groups/{group_id}/gtfs/{gtfs_id}/trips/{trip_id}":{"get":{"tags":["gtfs"],"summary":"Get GTFS trip by id","description":"**This endpoint allows to get the list of trips for a specific gtfs_id.**","operationId":"getGtfsTrip","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"trip_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the trip you want to retrieve","title":"Trip Id"},"description":"The id of the trip you want to retrieve"},{"name":"gtfs_id","in":"path","required":true,"schema":{"type":"string","title":"Gtfs Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripGTFSSchema"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GtfsTripNotFound"}}},"description":"Not Found"}},"x-api-version":4,"x-path-prefix":"/api","x-public":true}}},"components":{"schemas":{"ActivationStatus":{"type":"string","enum":["activated","invitation_pending","never_activated"],"title":"ActivationStatus","description":"Whether an account's owner ever took possession of it (op#1869).\n\nKnown limit: an SSO-only account (Google login, Pysae staff) keeps the\n``\"!\"`` sentinel forever, so it reads as never activated and stays eligible\nto an invitation even though it is in daily use. Nothing in the document\ntells an SSO account from a never-accepted invitation; fixing this needs a\npersisted marker (or the Auth0 ``last_login``) and is out of scope here."},"AgencyGTFSSchema":{"properties":{"agency_id":{"type":"string","title":"Agency Id","description":"Identifier the routes reference the agency by. Required here, where the GTFS specification only requires it once a dataset declares several agencies."},"agency_name":{"type":"string","title":"Agency Name","description":"Full name of the agency, as shown to passengers."},"agency_url":{"type":"string","title":"Agency Url","description":"URL of the agency's website."},"agency_timezone":{"type":"string","title":"Agency Timezone","description":"Timezone of the agency, as an IANA name such as `Europe/Paris`. Every agency of one GTFS carries the same one."},"agency_lang":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agency Lang","description":"Primary language of the agency, as a BCP 47 code such as `fr`. Empty when the feed does not state it."},"agency_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agency Phone","description":"Voice telephone number of the agency, in the form a passenger is meant to dial it."},"agency_fare_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agency Fare Url","description":"URL of the page describing fares, and selling tickets when the agency sells them online."}},"additionalProperties":true,"type":"object","required":["agency_id","agency_name","agency_url","agency_timezone"],"title":"AgencyGTFSSchema","description":"Transit agency operating routes of the GTFS, from its `agency.txt`.\n\nColumns the imported file carries beyond the ones listed here are dropped\non import and are never returned."},"AlertCause":{"type":"integer","enum":[1,2,3,4,5,6,7,8,9,10,11,12],"title":"AlertCause","description":"GTFS-realtime ``Alert.Cause`` values (see ``gtfs_realtime_pb2``).","x-enum-varnames":["UNKNOWN_CAUSE","OTHER_CAUSE","TECHNICAL_PROBLEM","STRIKE","DEMONSTRATION","ACCIDENT","HOLIDAY","WEATHER","MAINTENANCE","CONSTRUCTION","POLICE_ACTIVITY","MEDICAL_EMERGENCY"]},"AlertEffect":{"type":"integer","enum":[1,2,3,4,5,6,7,8,9],"title":"AlertEffect","description":"GTFS-realtime ``Alert.Effect`` values (see ``gtfs_realtime_pb2``).","x-enum-varnames":["NO_SERVICE","REDUCED_SERVICE","SIGNIFICANT_DELAYS","DETOUR","ADDITIONAL_SERVICE","MODIFIED_SERVICE","OTHER_EFFECT","UNKNOWN_EFFECT","STOP_MOVED"]},"AlertNotFound":{"properties":{"code":{"type":"string","const":"ALERT_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The alert has not been found","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/AlertNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"AlertNotFound","description":"The alert has not been found"},"AlertNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group the alert was looked up in."},"alert_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Alert Id","description":"Identifier of the alert that is unknown.","examples":["670f84254c28ffdaae0f462d"]}},"type":"object","required":["group_id","alert_id"],"title":"AlertNotFoundPayload","description":"Context of the AlertNotFound error: the values identifying the entities involved in this specific occurrence."},"AlertSchema":{"properties":{"header_text":{"type":"string","title":"Header Text","description":"Title of the alert, what passengers read first."},"active":{"type":"boolean","title":"Active","description":"Whether the alert is served. An inactive alert is kept but withdrawn from the GTFS-realtime feed.","default":true},"description_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description Text","description":"Body of the alert. HTML is accepted, and sanitised on write down to a display-safe subset of tags, so what is read back may differ from what was sent."},"cause":{"anyOf":[{"$ref":"#/components/schemas/AlertCause"},{"type":"null"}],"description":"What provoked the disruption. Left out when the operator did not qualify it."},"effect":{"anyOf":[{"$ref":"#/components/schemas/AlertEffect"},{"type":"null"}],"description":"How the disruption affects the service. Left out when the operator did not qualify it."},"active_date_times":{"anyOf":[{"items":{"$ref":"#/components/schemas/TimeRange"},"type":"array"},{"type":"null"}],"title":"Active Date Times","description":"Periods the disruption covers. Left out, the feed carries no ``active_period`` and the alert stays in the feed for up to a year, unless it is edited in the meantime."},"informed_entity":{"anyOf":[{"items":{"$ref":"#/components/schemas/EntitySelector"},"type":"array"},{"type":"null"}],"title":"Informed Entity","description":"Routes and stops the alert is about. Left out, it targets every agency of the group's current transport plan."},"description_raw":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description Raw","description":"Plain-text version of the body. Preferred over ``description_text`` both in the feed and as the body of the push notification."},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"Link to more information about the disruption."},"push":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Push","description":"When the alert was pushed to passengers, in epoch seconds. The push endpoint appends one entry per send."},"draft":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Draft","description":"Whether the alert is still being written. A draft stays out of the GTFS-realtime feed, and cannot be active at the same time."},"_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Id","description":"Identifier of the alert.","examples":["670f84254c28ffdaae0f462d"]},"id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Id","description":"Identifier of the alert, repeated.","examples":["670f84254c28ffdaae0f462d"]}},"type":"object","required":["header_text","_id","id"],"title":"AlertSchema","description":"An alert as it is stored, with the identifier it was given.\n\nThe identifier is served twice, under ``_id`` and under ``id``, always with\nthe same value: reading either one is enough."},"ApiKeyCreateSchema":{"properties":{"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id","description":"User the key acts as: the calls it authenticates carry that user's roles."},"device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Id","description":"Device the key acts as: the calls it authenticates open a device session, the same as the Pysae Driver app holds."},"role":{"anyOf":[{"$ref":"#/components/schemas/RoleTypeValue"},{"type":"null"}],"description":"Role the key acts as, with no user behind it. It applies to the group the key is created on."},"expire":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expire","description":"Expiry date carried onto the session the key opens. Left out, each call opens a session with the default lifetime."},"scopes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scopes","description":"Scope names carried onto the session the key opens; a route declares the scopes it answers to under `x-scopes`."},"one_time":{"type":"boolean","title":"One Time","description":"Whether the session the key opens is marked single-use. Publishing a GTFS reads that flag to tell a scheduled publication from a manual one.","default":false}},"type":"object","title":"ApiKeyCreateSchema","description":"API key to create on the group.\n\nExactly one principal — a user, a device or a role — must be declared. The\nAPI draws the secret itself and returns it in the created key."},"ApiKeyGlobalCreateSchema":{"properties":{"group_ids":{"items":{"type":"string"},"type":"array","title":"Group Ids","description":"Groups the role applies to. Required for a role-based key, and refused for any other kind.","default":[]},"superuser":{"type":"boolean","title":"Superuser","description":"Whether the key reaches every group as an administrator. Only a superuser may create such a key, and it takes no `group_ids`.","default":false},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id","description":"User the key acts as: the calls it authenticates carry that user's roles."},"device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Id","description":"Device the key acts as: the calls it authenticates open a device session, the same as the Pysae Driver app holds."},"role":{"anyOf":[{"$ref":"#/components/schemas/RoleTypeValue"},{"type":"null"}],"description":"Role the key acts as, with no user behind it. It is granted on every group listed in `group_ids`."},"expire":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expire","description":"Expiry date carried onto the session the key opens. Left out, each call opens a session with the default lifetime."},"scopes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scopes","description":"Scope names carried onto the session the key opens; a route declares the scopes it answers to under `x-scopes`."},"one_time":{"type":"boolean","title":"One Time","description":"Whether the session the key opens is marked single-use. Publishing a GTFS reads that flag to tell a scheduled publication from a manual one.","default":false}},"type":"object","title":"ApiKeyGlobalCreateSchema","description":"API key to create across several groups, or for a superuser.\n\nExactly one principal — a user, a device, a role or superuser — must be\ndeclared. The API draws the secret itself and returns it in the created key."},"ApiKeyNotFound":{"properties":{"code":{"type":"string","const":"API_KEY_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The api key has not been found","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/ApiKeyNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"ApiKeyNotFound","description":"The api key has not been found"},"ApiKeyNotFoundPayload":{"properties":{"api_key_id":{"type":"string","title":"Api Key Id","description":"Identifier of the unknown API key."}},"type":"object","required":["api_key_id"],"title":"ApiKeyNotFoundPayload","description":"Context of the ApiKeyNotFound error: the values identifying the entities involved in this specific occurrence."},"ApiKeySchema":{"properties":{"_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Id","description":"Identifier of the key, the one its revocation is addressed to.","examples":["670f84254c28ffdaae0f462d"]},"value":{"type":"string","title":"Value","description":"Secret the integration authenticates with, drawn by the API and never supplied by the caller. Send it as `Authorization: Api-Key <value>`, or in the `x-api-key` header."},"group_ids":{"items":{"type":"string"},"type":"array","title":"Group Ids","description":"Groups the key is attached to: those its role is granted on, and the ones whose key list it appears in. A superuser key is attached to none.","default":[]},"superuser":{"type":"boolean","title":"Superuser","description":"Whether the key reaches every group as an administrator, rather than the ones listed in `group_ids`.","default":false},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id","description":"User the key acts as: the calls it authenticates carry that user's roles."},"device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Id","description":"Device the key acts as: the calls it authenticates open a device session, the same as the Pysae Driver app holds."},"role":{"anyOf":[{"$ref":"#/components/schemas/RoleTypeValue"},{"type":"null"}],"description":"Role the key acts as, when it is bound to a role rather than to a user or to a device."},"expire":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expire","description":"Expiry date carried onto the session the key opens. Left out, each call opens a session with the default lifetime."},"scopes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scopes","description":"Scope names carried onto the session the key opens; a route declares the scopes it answers to under `x-scopes`."},"one_time":{"type":"boolean","title":"One Time","description":"Whether the session the key opens is marked single-use. Publishing a GTFS reads that flag to tell a scheduled publication from a manual one.","default":false}},"type":"object","required":["_id","value"],"title":"ApiKeySchema","description":"API key as the API holds it, its secret included.\n\nA key is a persistent, revocable credential meant for an automated\nintegration. Every endpoint returning this schema is reserved to an\nadministrator of the group, or to a superuser for a key attached to none."},"Auth0LoginRequired":{"properties":{"code":{"type":"string","const":"AUTH0_LOGIN_REQUIRED","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"This group is forced onto Auth0; legacy login is disabled. Authenticate through the Auth0 provider instead.","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/Auth0LoginRequiredPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"Auth0LoginRequired","description":"This group is forced onto Auth0; legacy login is disabled. Authenticate through the Auth0 provider instead."},"Auth0LoginRequiredPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group forced onto Auth0."},"domain":{"type":"string","title":"Domain","description":"Auth0 domain to authenticate against instead."}},"type":"object","required":["group_id","domain"],"title":"Auth0LoginRequiredPayload","description":"Context of the Auth0LoginRequired error: the values identifying the entities involved in this specific occurrence."},"Auth0ProviderConfig":{"properties":{"domain":{"type":"string","title":"Domain","description":"Auth0 domain the token is obtained from."},"connection":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connection","description":"Auth0 connection the group signs in through. Absent when the group is not pinned to one."}},"type":"object","required":["domain"],"title":"Auth0ProviderConfig","description":"Coordinates of the OpenID Connect tenant a group is delegated to."},"AuthProviderSchema":{"properties":{"provider":{"type":"string","enum":["auth0","legacy"],"title":"Provider","description":"`auth0` when the group signs in through an OpenID Connect provider, `legacy` when it signs in with an email and a password."},"auth0":{"anyOf":[{"$ref":"#/components/schemas/Auth0ProviderConfig"},{"type":"null"}],"description":"Settings needed to reach the provider. Filled in only when `provider` is `auth0`."}},"type":"object","required":["provider"],"title":"AuthProviderSchema","description":"How a group authenticates, to be read before opening a session."},"Body_postLogin":{"properties":{"email":{"type":"string","title":"Email","description":"Email address the user account signs in with."},"password":{"type":"string","title":"Password","description":"Password of the user account."}},"type":"object","required":["email","password"],"title":"Body_postLogin"},"Body_postLoginScoped":{"properties":{"email":{"type":"string","title":"Email","description":"Email address the user account signs in with."},"password":{"type":"string","title":"Password","description":"Password of the user account."}},"type":"object","required":["email","password"],"title":"Body_postLoginScoped"},"Body_postLoginScopedNdp":{"properties":{"email":{"type":"string","title":"Email","description":"Email address the user account signs in with."},"password":{"type":"string","title":"Password","description":"Password of the user account."}},"type":"object","required":["email","password"],"title":"Body_postLoginScopedNdp"},"CalendarDateGTFSSchema":{"properties":{"service_id":{"type":"string","title":"Service Id","description":"Identifier of the service the exception applies to, the one `calendar.txt` and the trips carry."},"date":{"type":"string","title":"Date","description":"Day the exception applies to, `YYYYMMDD`. A period is expressed as one record per day."},"exception_type":{"type":"integer","title":"Exception Type","description":"`1` adds the service on that day, `2` removes it."}},"type":"object","required":["service_id","date","exception_type"],"title":"CalendarDateGTFSSchema","description":"Exception to a service's weekly pattern, from `calendar_dates.txt`.\n\nOne record per date: a service running only on exceptions declares no\nweekly pattern at all and is described entirely by these records."},"CalendarGTFSSchema":{"properties":{"service_id":{"type":"string","title":"Service Id","description":"Identifier the trips and the calendar exceptions reference this service by."},"monday":{"type":"integer","title":"Monday","description":"`1` when the service runs on Mondays within the period below, `0` when it does not."},"tuesday":{"type":"integer","title":"Tuesday","description":"`1` when the service runs on Tuesdays within the period below, `0` when it does not."},"wednesday":{"type":"integer","title":"Wednesday","description":"`1` when the service runs on Wednesdays within the period below, `0` when it does not."},"thursday":{"type":"integer","title":"Thursday","description":"`1` when the service runs on Thursdays within the period below, `0` when it does not."},"friday":{"type":"integer","title":"Friday","description":"`1` when the service runs on Fridays within the period below, `0` when it does not."},"saturday":{"type":"integer","title":"Saturday","description":"`1` when the service runs on Saturdays within the period below, `0` when it does not."},"sunday":{"type":"integer","title":"Sunday","description":"`1` when the service runs on Sundays within the period below, `0` when it does not."},"start_date":{"type":"string","title":"Start Date","description":"First day the pattern applies to, `YYYYMMDD`, that day included."},"end_date":{"type":"string","title":"End Date","description":"Last day the pattern applies to, `YYYYMMDD`, that day included."}},"type":"object","required":["service_id","monday","tuesday","wednesday","thursday","friday","saturday","sunday","start_date","end_date"],"title":"CalendarGTFSSchema","description":"Weekly service pattern and the period it applies to, from `calendar.txt`.\n\nThe pattern alone does not give the operating days: the exceptions carried\nby `calendar_dates.txt` add days it does not cover and remove days it does."},"Client":{"type":"string","enum":["driver","op"],"title":"Client","description":"Which application a message was sent from."},"CommentRetrieveSchema":{"properties":{"_id":{"type":"string","title":"Id","description":"Duty the note was left on, by its identifier."},"comments":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comments","description":"What the driver wrote on signing off, as `checkout.comments`."}},"type":"object","required":["_id"],"title":"CommentRetrieveSchema","description":"The note a driver left when signing off, with the duty it belongs to."},"ComputeTaskFailed":{"properties":{"code":{"type":"string","const":"COMPUTE_TASK_FAILED","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The task has vailed","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/ComputeTaskFailedPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"ComputeTaskFailed","description":"The task has vailed"},"ComputeTaskFailedPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Group the task was started on."},"task_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Task Id","description":"Identifier of the failed task.","examples":["670f84254c28ffdaae0f462d"]},"details":{"title":"Details","description":"What the task recorded about its failure. Its shape is the task's own, so read it as an opaque diagnostic."}},"type":"object","required":["group_id","task_id","details"],"title":"ComputeTaskFailedPayload","description":"Context of the ComputeTaskFailed error: the values identifying the entities involved in this specific occurrence."},"ComputeTaskNotFound":{"properties":{"code":{"type":"string","const":"COMPUTE_TASK_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The task has not been found","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/ComputeTaskNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"ComputeTaskNotFound","description":"The task has not been found"},"ComputeTaskNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Group the task was started on."},"task_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Task Id","description":"Identifier that matched no task.","examples":["670f84254c28ffdaae0f462d"]}},"type":"object","required":["group_id","task_id"],"title":"ComputeTaskNotFoundPayload","description":"Context of the ComputeTaskNotFound error: the values identifying the entities involved in this specific occurrence."},"Coordinates":{"prefixItems":[{"type":"number"},{"type":"number"}],"type":"array","maxItems":2,"minItems":2,"description":"A point of an itinerary, serialized as a `[latitude, longitude]` pair."},"CountSchema":{"properties":{"count":{"type":"integer","minimum":0.0,"title":"Count","description":"Number of events matching the filters of the request."}},"type":"object","required":["count"],"title":"CountSchema","description":"The size of a history-events selection, without the events themselves."},"DailyDevicesSchema":{"properties":{"date":{"type":"string","title":"Date","description":"Day counted, as `YYYYMMDD`."},"devices":{"type":"integer","title":"Devices","description":"Devices that reported that day."}},"type":"object","required":["date","devices"],"title":"DailyDevicesSchema","description":"How many devices were active on one day."},"DangerZoneLocationSchema":{"properties":{"latitude":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Latitude","description":"Latitude of the zone's centre, in degrees."},"longitude":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Longitude","description":"Longitude of the zone's centre, in degrees."}},"type":"object","required":["latitude","longitude"],"title":"DangerZoneLocationSchema","description":"Where the danger zone sits."},"DangerZoneSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the zone, for the operator to recognise it."},"message":{"type":"string","title":"Message","description":"Warning the Pysae Driver app shows the driver."},"location":{"$ref":"#/components/schemas/DangerZoneLocationSchema","description":"Point the zone is centred on."},"radius":{"type":"integer","exclusiveMinimum":0.0,"title":"Radius","description":"Distance in metres around that point within which the driver is warned."},"id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Id","description":"Identifier of the danger zone.","examples":["670f84254c28ffdaae0f462d"]}},"type":"object","required":["name","message","location","radius","id"],"title":"DangerZoneSchema","description":"A danger zone as recorded, with the identifier it is addressed by."},"DayPunctualitySchema":{"properties":{"on_time":{"type":"integer","title":"On Time","description":"Passings whose delay falls inside the group's on-time interval."},"too_early":{"type":"integer","title":"Too Early","description":"Passings whose delay falls below that interval."},"too_late":{"type":"integer","title":"Too Late","description":"Passings whose delay falls above that interval."},"on_time_percentage":{"type":"number","title":"On Time Percentage","description":"`on_time` as a share of `total_count`, between 0 and 100."},"too_early_percentage":{"type":"number","title":"Too Early Percentage","description":"`too_early` as a share of `total_count`, between 0 and 100."},"too_late_percentage":{"type":"number","title":"Too Late Percentage","description":"`too_late` as a share of `total_count`, between 0 and 100."},"total_count":{"type":"integer","title":"Total Count","description":"Passings scored over the period, the denominator of the three percentages."},"start_date":{"type":"string","title":"Start Date","description":"Service date the figures cover, as a GTFS `YYYYMMDD` date."}},"type":"object","required":["on_time","too_early","too_late","on_time_percentage","too_early_percentage","too_late_percentage","total_count","start_date"],"title":"DayPunctualitySchema","description":"Punctuality of one service date."},"DeadRunTripFilter":{"properties":{"trip_id":{"type":"null","title":"Trip Id","description":"Always `null`: a device on a dead run follows no course. The server writes the field explicitly rather than omitting it when it resets a device to dead run."}},"type":"object","title":"DeadRunTripFilter","description":"Trip filter of a device on a dead run, restricting it to no trip at all."},"Delay":{"properties":{"stop_sequence":{"type":"number","title":"Stop Sequence","description":"Rank of the stop in the trip's sequence, as the GTFS orders it."},"delay":{"type":"integer","title":"Delay","description":"Seconds added to that stop's scheduled time; a negative value brings it forward."}},"type":"object","required":["stop_sequence","delay"],"title":"Delay","description":"A time shift the trip's update applies at one of its stops."},"DepotCoordinatesSchema":{"properties":{"latitude":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Latitude","description":"Latitude of the depot, in degrees."},"longitude":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Longitude","description":"Longitude of the depot, in degrees."}},"type":"object","required":["latitude","longitude"],"title":"DepotCoordinatesSchema","description":"Where the depot sits."},"DepotSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the depot."},"location":{"$ref":"#/components/schemas/DepotCoordinatesSchema","description":"Point the depot is centred on."},"radius":{"type":"integer","exclusiveMinimum":0.0,"title":"Radius","description":"Distance in metres around that point within which a vehicle counts as at the depot."},"id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Id","description":"Identifier of the depot.","examples":["670f84254c28ffdaae0f462d"]}},"type":"object","required":["name","location","radius","id"],"title":"DepotSchema","description":"A depot of the group: where vehicles are parked between duties."},"DeviceAllSchema":{"properties":{"source_vehicle_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Vehicle Id","description":"Identifiant du véhicule fournissant la position de cet appareil.Ce champs est défini uniquement pour les positions fournies par un équipement externe comme le routeur embarqué"},"source_equipment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Equipment Id","description":"Identifiant de l'équipement fournissant la position de cet appareil.Ce champs est défini uniquement pour les positions fournies par un équipement externe comme le routeur embarqué"},"device_id":{"type":"string","title":"Device Id","description":"Identifier the device generated for itself."},"app_status":{"anyOf":[{"$ref":"#/components/schemas/DeviceAppStatus"},{"type":"null"}],"description":"**Deprecated** — superseded by `event_app`.","deprecated":true},"app_version_states":{"anyOf":[{"$ref":"#/components/schemas/VersionStates"},{"type":"null"}],"description":"How the reported app version is treated: blocked, deprecated, to update, or up to date."},"archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Archived","description":"Whether the device is archived."},"assigned_driver_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Driver Id","description":"Driver pinned to this device, whoever signs on."},"assigned_vehicle_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Vehicle Id","description":"Vehicle pinned to this device, whichever is declared."},"bearing":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bearing","description":"Heading of the device, in degrees."},"claimed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Claimed At","description":"When a phone claimed this device and opened a session."},"current_activity_log_assignation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Activity Log Assignation","description":"Duty currently under way on this device."},"current_file":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current File","description":"GTFS the device is reading its trips from."},"current_status":{"anyOf":[{"$ref":"#/components/schemas/pysae__api__devices__models__DeviceStatus"},{"type":"null"}],"description":"Where the vehicle stands against the stop it is heading to."},"current_stop_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Stop Id","description":"Stop to resume at, set when a trip is handed over from one device to another mid-service."},"current_stop_sequence":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Current Stop Sequence","description":"Rank in the trip of the stop the vehicle is heading to."},"debug_shape_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Debug Shape Score","description":"Debug value: score of the shape segment the position was projected onto."},"debug_trace_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Debug Trace Length","description":"Debug value: how many points that projection used."},"delay":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Delay","description":"Gap in seconds against the schedule during a trip. Negative is early, positive is late."},"device_imei":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Imei","description":"**Deprecated** — IMEI of the phone.","deprecated":true},"drive_mode":{"anyOf":[{"$ref":"#/components/schemas/DeviceDriveMode"},{"type":"null"}],"description":"How the driver takes their trips on this device."},"event_app":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event App","description":"Last action the driver took in the app — picking a trip, opening the map, forcing a stop."},"gps_ppm":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Gps Ppm","description":"Positions the GPS reported over the last minute.","default":0},"last_message_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Message Id","description":"Last message this device fetched."},"latlng":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Latlng","description":"Last position the GPS reported, as `[latitude, longitude]` — that order, not the GeoJSON one."},"latlng_accuracy":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latlng Accuracy","description":"Accuracy of that position, in metres."},"network_status":{"$ref":"#/components/schemas/DeviceNetworkStatus","description":"Whether the device has internet access.","default":"online"},"no_gps":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"No Gps","description":"Whether the GPS has stopped producing new positions."},"off_itinerary":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Off Itinerary","description":"Whether the vehicle has left the planned itinerary."},"position":{"anyOf":[{"$ref":"#/components/schemas/DevicePosition"},{"type":"null"}],"description":"**Deprecated** — unused copy of the browser geolocation object.","deprecated":true},"route_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Id","description":"Route of the trip under way."},"shape_dist_traveled":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Shape Dist Traveled","description":"Distance covered along the shape, in metres."},"simulation_mode":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Simulation Mode","description":"Whether the device is replaying rather than driving."},"skipped_last_position":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Skipped Last Position","description":"Whether the progress computation discarded the last position as implausible."},"speed":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Speed","description":"Speed of the vehicle, in metres per second."},"stop_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stop Id","description":"Stop the vehicle is heading to, named by its GTFS id."},"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Id","description":"**Deprecated** — pre-multi-team form of `teams`.","deprecated":true},"teams":{"items":{"type":"string"},"type":"array","title":"Teams","description":"Teams the device belongs to.","default":[]},"time_to_next_stop":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Time To Next Stop","description":"Seconds left before reaching the stop, while heading to the start of a trip."},"time_to_next_stop_fixed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Time To Next Stop Fixed","description":"**Deprecated**.","deprecated":true},"trip":{"anyOf":[{"$ref":"#/components/schemas/GtfsOptDatedTrip"},{"type":"null"}],"description":"The trip under way, and the GTFS it is read from."},"trip_filter":{"anyOf":[{"$ref":"#/components/schemas/SequenceModeTripFilter"},{"$ref":"#/components/schemas/TripModeTripFilter"},{"$ref":"#/components/schemas/DeadRunTripFilter"},{"type":"null"}],"title":"Trip Filter","description":"What restricts the trips this device is offered."},"trip_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trip Id","description":"**Deprecated** — use `trip.trip_id`.","deprecated":true},"trip_pending":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Trip Pending","description":"Whether the vehicle is on its way to the trip's first stop."},"trip_pending_distance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Trip Pending Distance","description":"Distance left to that first stop, in metres."},"trip_schedule_relationship":{"anyOf":[{"$ref":"#/components/schemas/DeviceTripScheduleRelationship"},{"type":"null"}],"description":"Set when the trip under way has been cancelled."},"ts":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ts","description":"When the device last reported a position. Distinct from `connected_at`, which dates any exchange."},"ts_system":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ts System","description":"True server time, which a simulating device's `ts` is not."},"v":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"V","description":"**Deprecated** — `1` marks a device computing its own progress; one without the field had the API compute it.","deprecated":true},"vehicle_load":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Vehicle Load","description":"Passengers on board, as the counting system reports."},"voip":{"anyOf":[{"$ref":"#/components/schemas/DeviceVoipSchema"},{"type":"null"}],"description":"How the device is reached by voice, when telephony is set up."},"app_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Version","description":"Version of the Pysae Driver app installed."},"connected_at":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Connected At","description":"timestamp du dernier échange avec l’appareil, quelle qu’en soit la nature. C’est ce champ qui détermine si l’appareil est considéré comme connecté. Distinct de `ts`, qui ne date que la dernière position GPS."},"device_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Model","description":"Make and model of the device."},"device_os":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Os","description":"Operating system of the device, with its version."},"gtfs_id":{"anyOf":[{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"]},{"type":"null"}],"title":"Gtfs Id","description":"GTFS the device reads its trips from."},"installer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Installer","description":"**Deprecated** — where the app was installed from.","deprecated":true},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Name given to the device."},"last_vehicle_associated":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Vehicle Associated","description":"Last vehicle this device was paired with during a trip."},"last_driver_associated":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Driver Associated","description":"Last driver this device was paired with during a trip."},"energy_level":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Energy Level","description":"Fuel or charge left, as the telematics unit reports it."},"odometer":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Odometer","description":"Total distance the vehicle has covered."},"engine_state":{"anyOf":[{"$ref":"#/components/schemas/EngineState"},{"type":"null"}],"description":"Whether the engine is running."},"source_equipment_type":{"anyOf":[{"$ref":"#/components/schemas/EquipmentType"},{"type":"null"}],"description":"What kind of equipment produced this position."}},"type":"object","required":["device_id"],"title":"DeviceAllSchema","description":"A device with everything held about it, including its own identity.\n\nAdds to the public shape what the operator sees but a traveller-facing\nconsumer does not: the hardware, the app version, and the telematics\nreadings when the position comes from a box rather than a phone."},"DeviceAppStatus":{"type":"string","enum":["pause","resume"],"title":"DeviceAppStatus","description":"Whether the driver left the Pysae Driver app or came back to it."},"DeviceCoordinates":{"properties":{"accuracy":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Accuracy","description":"Accuracy of that point, in metres."},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude","description":"Latitude of the point, in degrees."},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude","description":"Longitude of the point, in degrees."}},"type":"object","title":"DeviceCoordinates","description":"The point a geolocation reading places the device at."},"DeviceCoordinatesSchema":{"properties":{"accuracy":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Accuracy","description":"Accuracy the device's location provider gave for this fix, in the unit that provider uses. Absent when it reported none."},"latitude":{"type":"number","title":"Latitude","description":"Latitude, in degrees."},"longitude":{"type":"number","title":"Longitude","description":"Longitude, in degrees."}},"type":"object","required":["latitude","longitude"],"title":"DeviceCoordinatesSchema","description":"Where a device was, as its own location provider reported it."},"DeviceCountSchema":{"properties":{"route_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Id","description":"Route the counted devices are running. Devices attached to no route are left out of the count, so no entry carries `null`."},"count":{"type":"integer","title":"Count","description":"Connected devices running that route."}},"type":"object","required":["count"],"title":"DeviceCountSchema","description":"How many connected devices are running one route."},"DeviceDriveMode":{"type":"string","enum":["trip","sequence","on_demand"],"title":"DeviceDriveMode","description":"What the device is set to run, from the Driver app or from the operator.\n\nA single trip, a whole block driven in sequence, or an on-demand service."},"DeviceNetworkStatus":{"type":"string","enum":["online","offline"],"title":"DeviceNetworkStatus","description":"Connectivity the device reports for itself."},"DeviceNotFound":{"properties":{"code":{"type":"string","const":"DEVICE_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The device has not been found","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/DeviceNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"DeviceNotFound","description":"The device has not been found"},"DeviceNotFoundPayload":{"properties":{"group_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id","description":"Identifier of the group the device was looked up in."},"device_id":{"type":"string","title":"Device Id","description":"Identifier of the unknown device."}},"type":"object","required":["group_id","device_id"],"title":"DeviceNotFoundPayload","description":"Context of the DeviceNotFound error: the values identifying the entities involved in this specific occurrence."},"DeviceOnlineV4Schema":{"properties":{"device_id":{"type":"string","title":"Device Id","description":"identifiant de l'appareil"},"route_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Id","description":"(pendant une course) référence vers `gtfs.<gtfs_id>.routes._id` de la course en cours"},"trip_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trip Id","description":"référence vers `gtfs.<gtfs_id>.trips._id` de la course"},"start_date":{"anyOf":[{"type":"string","maxLength":8,"minLength":8,"pattern":"^\\d*$"},{"type":"null"}],"title":"Start Date","description":"(pendant une course) date de service GTFS de la course en cours, au format `YYYYMMDD`. Un même `trip_id` existe pour chaque date de service : ce champ identifie l'occurrence réelle, notamment pour les courses après minuit (`departure_time > 24:00`)."},"latlng":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Latlng","description":"dernières coordonnées GPS de l'appareil,au format `[latitude, longitude]`"},"bearing":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bearing","description":"orientation géographique de l'appareil"},"current_status":{"anyOf":[{"$ref":"#/components/schemas/pysae__api__devices__models__DeviceStatus"},{"type":"null"}],"description":"(pendant une course) indique le statut par rapport à l'arrêt indiqué par `current_stop_sequence`"},"current_stop_sequence":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Current Stop Sequence","description":"(pendant une course) référence vers `gtfs.<gtfs_id>.trips.stop_times.stop_sequence` du prochain arrêt(arrêt courant quand le bus est à l'arrêt). Une valeur fractionnaire désigne un arrêt temporaire (AD_HOC)."},"shape_dist_traveled":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Shape Dist Traveled","description":"distance parcourue sur le tracé"},"trip_pending":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Trip Pending","description":"indique que l'appareil est en acheminement"},"delay":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Delay","description":"(pendant une course) valeur d'avance (si négatif) ou de retard de l'appareil par rapport au théorique"},"vehicle_load":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Vehicle Load","description":"charge du véhicule"},"energy_level":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Energy Level","description":"niveau d'énergie en %"},"engine_state":{"anyOf":[{"$ref":"#/components/schemas/EngineState"},{"type":"null"}],"description":"état du moteur (driving / idle / stopped)"},"source_equipment_type":{"anyOf":[{"$ref":"#/components/schemas/EquipmentType"},{"type":"null"}],"description":"type d'équipement source"},"load_percentage":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Load Percentage","description":"pourcentage de charge du véhicule"},"last_vehicle_associated":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Vehicle Associated","description":"Dernier vehicule associé à l'appareil durant une course"},"on_demand_route_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"On Demand Route Id","description":"(pendant un service à la demande) référence vers `on_demand_routes._id` de la ligne servie. Distinct de `route_id`, qui reste vide sur ces véhicules : une ligne à la demande n'est pas une ligne GTFS et n'entre dans aucun flux GTFS-RT."}},"additionalProperties":false,"type":"object","required":["device_id"],"title":"DeviceOnlineV4Schema","description":"A device currently connected, and the last state it reported.\n\nConnected means the device exchanged with the API more recently than the\ndelay configured on the group — `delay_device_online`, or\n`delay_device_online_router` / `delay_device_online_telematic` for a device\ndeclaring that equipment kind. A position counts, but equally a trip change\nor a duty check-in."},"DevicePosition":{"properties":{"coords":{"$ref":"#/components/schemas/DeviceCoordinates","description":"Latitude, longitude and accuracy of the reading."},"timestamp":{"type":"string","title":"Timestamp","description":"When the device took the reading, in the form it sent."}},"type":"object","required":["coords","timestamp"],"title":"DevicePosition","description":"A geolocation reading, exactly as the device produced it."},"DevicePublicSchema":{"properties":{"source_vehicle_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Vehicle Id","description":"Identifiant du véhicule fournissant la position de cet appareil.Ce champs est défini uniquement pour les positions fournies par un équipement externe comme le routeur embarqué"},"source_equipment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Equipment Id","description":"Identifiant de l'équipement fournissant la position de cet appareil.Ce champs est défini uniquement pour les positions fournies par un équipement externe comme le routeur embarqué"},"device_id":{"type":"string","title":"Device Id","description":"Identifier the device generated for itself."},"app_status":{"anyOf":[{"$ref":"#/components/schemas/DeviceAppStatus"},{"type":"null"}],"description":"**Deprecated** — superseded by `event_app`.","deprecated":true},"app_version_states":{"anyOf":[{"$ref":"#/components/schemas/VersionStates"},{"type":"null"}],"description":"How the reported app version is treated: blocked, deprecated, to update, or up to date."},"archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Archived","description":"Whether the device is archived."},"assigned_driver_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Driver Id","description":"Driver pinned to this device, whoever signs on."},"assigned_vehicle_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Vehicle Id","description":"Vehicle pinned to this device, whichever is declared."},"bearing":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bearing","description":"Heading of the device, in degrees."},"claimed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Claimed At","description":"When a phone claimed this device and opened a session."},"current_activity_log_assignation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Activity Log Assignation","description":"Duty currently under way on this device."},"current_file":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current File","description":"GTFS the device is reading its trips from."},"current_status":{"anyOf":[{"$ref":"#/components/schemas/pysae__api__devices__models__DeviceStatus"},{"type":"null"}],"description":"Where the vehicle stands against the stop it is heading to."},"current_stop_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Stop Id","description":"Stop to resume at, set when a trip is handed over from one device to another mid-service."},"current_stop_sequence":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Current Stop Sequence","description":"Rank in the trip of the stop the vehicle is heading to."},"debug_shape_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Debug Shape Score","description":"Debug value: score of the shape segment the position was projected onto."},"debug_trace_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Debug Trace Length","description":"Debug value: how many points that projection used."},"delay":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Delay","description":"Gap in seconds against the schedule during a trip. Negative is early, positive is late."},"device_imei":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Imei","description":"**Deprecated** — IMEI of the phone.","deprecated":true},"drive_mode":{"anyOf":[{"$ref":"#/components/schemas/DeviceDriveMode"},{"type":"null"}],"description":"How the driver takes their trips on this device."},"event_app":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event App","description":"Last action the driver took in the app — picking a trip, opening the map, forcing a stop."},"gps_ppm":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Gps Ppm","description":"Positions the GPS reported over the last minute.","default":0},"last_message_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Message Id","description":"Last message this device fetched."},"latlng":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Latlng","description":"Last position the GPS reported, as `[latitude, longitude]` — that order, not the GeoJSON one."},"latlng_accuracy":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latlng Accuracy","description":"Accuracy of that position, in metres."},"network_status":{"$ref":"#/components/schemas/DeviceNetworkStatus","description":"Whether the device has internet access.","default":"online"},"no_gps":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"No Gps","description":"Whether the GPS has stopped producing new positions."},"off_itinerary":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Off Itinerary","description":"Whether the vehicle has left the planned itinerary."},"position":{"anyOf":[{"$ref":"#/components/schemas/DevicePosition"},{"type":"null"}],"description":"**Deprecated** — unused copy of the browser geolocation object.","deprecated":true},"route_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Id","description":"Route of the trip under way."},"shape_dist_traveled":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Shape Dist Traveled","description":"Distance covered along the shape, in metres."},"simulation_mode":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Simulation Mode","description":"Whether the device is replaying rather than driving."},"skipped_last_position":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Skipped Last Position","description":"Whether the progress computation discarded the last position as implausible."},"speed":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Speed","description":"Speed of the vehicle, in metres per second."},"stop_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stop Id","description":"Stop the vehicle is heading to, named by its GTFS id."},"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Id","description":"**Deprecated** — pre-multi-team form of `teams`.","deprecated":true},"teams":{"items":{"type":"string"},"type":"array","title":"Teams","description":"Teams the device belongs to.","default":[]},"time_to_next_stop":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Time To Next Stop","description":"Seconds left before reaching the stop, while heading to the start of a trip."},"time_to_next_stop_fixed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Time To Next Stop Fixed","description":"**Deprecated**.","deprecated":true},"trip":{"anyOf":[{"$ref":"#/components/schemas/GtfsOptDatedTrip"},{"type":"null"}],"description":"The trip under way, and the GTFS it is read from."},"trip_filter":{"anyOf":[{"$ref":"#/components/schemas/SequenceModeTripFilter"},{"$ref":"#/components/schemas/TripModeTripFilter"},{"$ref":"#/components/schemas/DeadRunTripFilter"},{"type":"null"}],"title":"Trip Filter","description":"What restricts the trips this device is offered."},"trip_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trip Id","description":"**Deprecated** — use `trip.trip_id`.","deprecated":true},"trip_pending":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Trip Pending","description":"Whether the vehicle is on its way to the trip's first stop."},"trip_pending_distance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Trip Pending Distance","description":"Distance left to that first stop, in metres."},"trip_schedule_relationship":{"anyOf":[{"$ref":"#/components/schemas/DeviceTripScheduleRelationship"},{"type":"null"}],"description":"Set when the trip under way has been cancelled."},"ts":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ts","description":"When the device last reported a position. Distinct from `connected_at`, which dates any exchange."},"ts_system":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ts System","description":"True server time, which a simulating device's `ts` is not."},"v":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"V","description":"**Deprecated** — `1` marks a device computing its own progress; one without the field had the API compute it.","deprecated":true},"vehicle_load":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Vehicle Load","description":"Passengers on board, as the counting system reports."},"voip":{"anyOf":[{"$ref":"#/components/schemas/DeviceVoipSchema"},{"type":"null"}],"description":"How the device is reached by voice, when telephony is set up."}},"type":"object","required":["device_id"],"title":"DevicePublicSchema","description":"A device running the Pysae Driver app, and what it last reported.\n\nEverything real-time comes from here: the vehicle's position, and how far\nalong its trip it is. The fields marked as holding during a trip are unset\noutside one."},"DeviceSchema":{"properties":{"id":{"type":"string","title":"Id","description":"Identifier of the device."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Name the device is known by."},"team":{"anyOf":[{"$ref":"#/components/schemas/TeamSchema"},{"type":"null"}],"description":"**Deprecated** — first accessible team of the device; `teams` carries them all."},"teams":{"items":{"$ref":"#/components/schemas/TeamSchema"},"type":"array","title":"Teams","description":"Every accessible team of the device, in its own order. A device may belong to several, or to all of them."},"status":{"anyOf":[{"$ref":"#/components/schemas/pysae__api__trips__v4__schemas__DeviceStatus"},{"type":"null"}],"description":"Whether the device is still reporting on this trip. Null once it has moved on to another one."},"frequency":{"anyOf":[{"$ref":"#/components/schemas/FrequencySchema"},{"type":"null"}],"description":"Gaps to the vehicles around it. Only carried on a route the group runs by frequency."}},"type":"object","required":["id"],"title":"DeviceSchema","description":"A device that followed the trip."},"DeviceTrigger":{"properties":{"type":{"$ref":"#/components/schemas/TriggerType","description":"Whether the driver made the transition, or the system applied it on its own."},"time":{"$ref":"#/components/schemas/TriggerTime","description":"Whether the transition opened the trip or closed it."}},"type":"object","required":["type","time"],"title":"DeviceTrigger","description":"How and when the current trip was taken or released on a device.\n\nWritten when the trip starts and rewritten when it ends, then emptied with\nthe rest of the trip identity, so it only ever carries the last transition."},"DeviceTripScheduleRelationship":{"type":"string","enum":["","CANCELLED"],"title":"DeviceTripScheduleRelationship","description":"How the trip under way stands against the schedule.\n\nOnly cancellation is ever reported; the empty string is the neutral value."},"DeviceUpdateInfo":{"properties":{"client_app":{"anyOf":[{"$ref":"#/components/schemas/DeviceUpdateInfoClientApp"},{"type":"null"}],"description":"Application the request was made from; empty when the record does not say."}},"type":"object","title":"DeviceUpdateInfo","description":"Where a driver-handover request recorded on a device came from."},"DeviceUpdateInfoClientApp":{"type":"string","enum":["op","driver"],"title":"DeviceUpdateInfoClientApp","description":"The Pysae application a device update was requested from."},"DeviceVoipData":{"properties":{"provider":{"type":"string","title":"Provider","description":"fournisseur VoIP (ex: instavox)"},"id":{"type":"string","title":"Id","description":"identifiant de l'appareil VoIP"}},"type":"object","required":["provider","id"],"title":"DeviceVoipData","description":"The VoIP handset paired with the device, and the provider it belongs to."},"DeviceVoipSchema":{"properties":{"provider":{"type":"string","title":"Provider","description":"VoIP provider (e.g. instavox)"},"id":{"type":"string","title":"Id","description":"VoIP device ID"}},"type":"object","required":["provider","id"],"title":"DeviceVoipSchema","description":"The VoIP endpoint the device answers on, at the telephony provider."},"Driver":{"properties":{"id":{"type":"string","title":"Id","description":"Identifier of the driver, the one `GET /groups/{group_id}/drivers/{driver_id}` resolves."},"driver_name":{"type":"string","title":"Driver Name","description":"Name the driver appears under in the group's driver list."},"staff_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Staff Number","description":"Staff number the operator gives the driver in its own numbering. Empty when the driver record carries none."}},"type":"object","required":["id","driver_name"],"title":"Driver","description":"A driver of the group: the person who signs on and operates the trips."},"DriverNotFound":{"properties":{"code":{"type":"string","const":"DRIVER_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The driver has not been found","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/DriverNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"DriverNotFound","description":"The driver has not been found"},"DriverNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group the driver was looked up in."},"driver_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Driver Id","description":"Identifier of the unknown driver.","examples":["670f84254c28ffdaae0f462d"]}},"type":"object","required":["group_id","driver_id"],"title":"DriverNotFoundPayload","description":"Context of the DriverNotFound error: the values identifying the entities involved in this specific occurrence."},"DriverOpSchema":{"properties":{"_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Id","description":"Same identifier as `id`, under its stored name.","examples":["670f84254c28ffdaae0f462d"]},"id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Id","description":"Identifier of the driver.","examples":["670f84254c28ffdaae0f462d"]},"driver_name":{"type":"string","title":"Driver Name","description":"Driver's name."},"staff_number":{"type":"string","title":"Staff Number","description":"Staff number.","default":""},"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Id","description":"Team the driver belongs to. Superseded by `teams`, kept for clients predating multi-team support."},"teams":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Teams","description":"Teams the driver belongs to."},"comment":{"type":"string","title":"Comment","description":"Comment."},"archived":{"type":"boolean","title":"Archived","description":"Whether the driver is archived: kept out of the current operation, their history untouched."},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code","description":"Four-digit code the driver keys in to identify themselves when starting a duty. Null when the driver has none."},"anonymised_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Anonymised At","description":"When the record was anonymised, once the driver had been archived beyond the group's retention period. Null until then, and `driver_name` no longer names anyone after it."}},"type":"object","required":["_id","id","driver_name","comment","archived"],"title":"DriverOpSchema","description":"A driver as the operation sees them, with what the public form hides."},"Duty":{"properties":{"driver_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Driver Id","description":"Driver the duty was opened for. Null when none was named."},"device_id":{"type":"string","title":"Device Id","description":"Device the duty was opened on."},"vehicle_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vehicle Id","description":"Vehicle the duty was opened for. Null when none was named."},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date","description":"Service day the duty was opened on, as a GTFS `YYYYMMDD` date in the group's time zone."}},"type":"object","required":["device_id"],"title":"Duty","description":"Who was on duty when the passage was recorded."},"DutyCheckInSchema":{"properties":{"ts":{"anyOf":[{"type":"integer"},{"type":"number"}],"title":"Ts","description":"timestamp of the start of the duty in EPOCH format (seconds)"},"checklist":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Checklist","description":"Answers to the duty checklist the group configured, keyed by its questions. Null when the driver submitted none at sign-on — the API never requires them."}},"type":"object","required":["ts"],"title":"DutyCheckInSchema","description":"Sign-on of a duty: when the driver took it, and what they declared then."},"DutyCheckOutSchema":{"properties":{"ts":{"anyOf":[{"type":"integer"},{"type":"number"}],"title":"Ts","description":"timestamp of the end of the duty in EPOCH format (seconds)"},"checklist":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Checklist","description":"Answers to the duty checklist the group configured, keyed by its questions. Null when the driver submitted none at sign-off — the API never requires them."},"driver_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Driver Code","description":"Code the driver keyed in, checked against the one on their record. Required when the driver holds one, unless the device already has that driver assigned."},"check_empty":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Check Empty","description":"What the driver answered to the empty-vehicle check."},"comments":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comments","description":"Free-form note the driver left on signing off."}},"type":"object","required":["ts"],"title":"DutyCheckOutSchema","description":"Sign-off of a duty: when the driver ended it, and what they reported."},"DutyNotFound":{"properties":{"code":{"type":"string","const":"DUTY_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The duty has not been found","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/DutyNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"DutyNotFound","description":"The duty has not been found"},"DutyNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group the duty was looked up in."},"duty_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Duty Id","description":"Identifier of the unknown duty.","examples":["670f84254c28ffdaae0f462d"]}},"type":"object","required":["group_id","duty_id"],"title":"DutyNotFoundPayload","description":"Context of the DutyNotFound error: the values identifying the entities involved in this specific occurrence."},"DutySchemaV3":{"properties":{"id":{"type":"string","title":"Id","description":"Identifier of the duty."},"_id":{"type":"string","title":"Id","description":"Same identifier as `id`, under its stored name."},"driver_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Driver Id","description":"Driver who took the duty. Null on a duty opened through the v4 endpoint, which does not require one; v5 does."},"device_id":{"type":"string","title":"Device Id","description":"Device the duty was taken on."},"vehicle_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vehicle Id","description":"Vehicle the driver took out, when declared."},"check_in":{"$ref":"#/components/schemas/DutyCheckInSchema","description":"How the duty was signed on."},"checkout":{"anyOf":[{"$ref":"#/components/schemas/DutyCheckOutSchema"},{"type":"null"}],"description":"How it was signed off. Null while the duty is open."},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date","description":"Service date of the duty, in GTFS `YYYYMMDD` form. Filled from the duty's own creation date when the record carries none."},"anonymized":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Anonymized","description":"Whether the duty is marked as anonymised. Read only: the `anonymized` query parameter filters on it, and no endpoint sets it."},"trips":{"items":{"$ref":"#/components/schemas/Trip"},"type":"array","title":"Trips","description":"Trips operated during the duty, as they were taken.","default":[]},"dead_mileage":{"type":"number","title":"Dead Mileage","description":"Kilometres the device covered while running no trip, credited to the duty. On-demand kilometres are booked on the on-demand route instead and are not counted here.","default":0.0},"disconnected":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Disconnected","description":"Whether the device holding this duty has lost its WebSocket. Only ever set on the duty still open."}},"type":"object","required":["id","_id","device_id","check_in"],"title":"DutySchemaV3","description":"A duty: what a driver operated between signing on and signing off.\n\nThe one object that ties a driver, a vehicle and a device to the trips\nactually run."},"DutySorting":{"type":"string","enum":["check_in:asc","check_in:desc"],"title":"DutySorting","description":"Order the duties are returned in, always on the sign-on time."},"EnergyType":{"type":"string","enum":["electric","diesel","cng","hybrid","hydrogen","petrol","other"],"title":"EnergyType","description":"The energies a vehicle of the fleet can be declared to run on."},"EngineState":{"type":"string","enum":["driving","idle","stopped"],"title":"EngineState","description":"What the engine is doing, as the telematic equipment reports it."},"EntitySelector":{"properties":{"route_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Id","description":"Route of the transport plan the alert is about."},"stop_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stop Id","description":"Stop of the transport plan the alert is about. Dropped from the feed when the same selector also names a route."}},"type":"object","title":"EntitySelector","description":"A route or a stop an alert is about.\n\nReaches the GTFS-realtime feed as an ``Alert.informed_entity`` entry. Only\none of the two identifiers is carried over per selector, so target a route\nand a stop with two separate entries rather than one."},"EquipmentType":{"type":"string","enum":["telematic","router"],"title":"EquipmentType","description":"Kind of on-board box a position can be reported by.\n\nThe delay a vehicle stays counted as connected for is configured per kind\n(`delay_device_online_telematic`, `delay_device_online_router`)."},"FeedType":{"type":"string","enum":["trip-update","vehicle-position","alert"],"title":"FeedType","description":"The single kind of GTFS-realtime entity a feed request is narrowed to.\n\nThe three values map to the entities of the standard: trip updates,\nvehicle positions and service alerts."},"FileSchema":{"properties":{"id":{"type":"string","title":"Id","description":"Identifier of the GTFS."},"name":{"type":"string","title":"Name","description":"Name the GTFS was imported under."},"publication_date":{"type":"integer","title":"Publication Date","description":"When the GTFS was put into service, as epoch seconds."}},"type":"object","required":["id","name","publication_date"],"title":"FileSchema","description":"A GTFS the trip is carried by."},"ForbiddenDifferentTeam":{"properties":{"code":{"type":"string","const":"FORBIDDEN_DIFFERENT_TEAM","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"Your teams are incompatible","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/ForbiddenDifferentTeamPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"ForbiddenDifferentTeam","description":"Your teams are incompatible"},"ForbiddenDifferentTeamPayload":{"properties":{"source":{"$ref":"#/components/schemas/ForbiddenDifferentTeamSource","description":"Which side of the request the mismatch is on."}},"type":"object","required":["source"],"title":"ForbiddenDifferentTeamPayload","description":"Context of the ForbiddenDifferentTeam error: the values identifying the entities involved in this specific occurrence."},"ForbiddenDifferentTeamSource":{"type":"string","enum":["not_part_of_resource","not_part_of_target"],"title":"ForbiddenDifferentTeamSource","description":"Which side of the request the team mismatch is on.\n\n- ``not_part_of_resource``: the caller shares no team with the resource\n  they are acting on.\n- ``not_part_of_target``: the caller shares no team with the teams the\n  request would attach that resource to."},"Format":{"type":"string","enum":["binary","plaintext"],"title":"Format","description":"Serialisation the GTFS-realtime feed is returned in.\n\n``binary`` is the standard protobuf ``FeedMessage``; ``plaintext`` is the\nsame content rendered as JSON."},"FrequencySchema":{"properties":{"delta_next_passage":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Delta Next Passage","description":"Seconds separating it from the vehicle running behind. Null when none follows."},"delta_previous_passage":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Delta Previous Passage","description":"Seconds separating it from the vehicle running ahead. Null when it leads the shape."}},"type":"object","title":"FrequencySchema","description":"How far the vehicle running the trip is from those sharing its shape."},"GenerateShapesTaskSchema":{"properties":{"status":{"type":"string","title":"Status","description":"`in_progress` while the task runs, then `success`, or `unchanged` when no trip needed an itinerary. A failed task is never returned here — it is reported as the error `COMPUTE_TASK_FAILED` instead."},"nb_shapes_created":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Nb Shapes Created","description":"Itineraries the task created. Set once it has succeeded, `null` before that."},"nb_trips_updated":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Nb Trips Updated","description":"Trips the task attached to a created itinerary. Set once it has succeeded, `null` before that."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"What went wrong. Stays `null` in practice, a failed task being reported as `COMPUTE_TASK_FAILED` rather than returned."}},"type":"object","required":["status"],"title":"GenerateShapesTaskSchema","description":"Where a shape-generation task stands, and what it produced once done."},"GeometrySchema":{"properties":{"coordinates":{"items":{"items":{"type":"number"},"type":"array"},"type":"array","title":"Coordinates","description":"Points of the line, in order, each as `[longitude, latitude]`."},"type":{"type":"string","title":"Type","description":"GeoJSON geometry type. Always `LineString`.","default":"LineString"}},"type":"object","required":["coordinates"],"title":"GeometrySchema","description":"Line of an itinerary, in the GeoJSON form Pysae stores it in."},"GroupNotFound":{"properties":{"code":{"type":"string","const":"GROUP_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The group has not been found","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/GroupNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"GroupNotFound","description":"The group has not been found"},"GroupNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier that matched no group."}},"type":"object","required":["group_id"],"title":"GroupNotFoundPayload","description":"Context of the GroupNotFound error: the values identifying the entities involved in this specific occurrence."},"GtfsAgencyNotFound":{"properties":{"code":{"type":"string","const":"GTFS_AGENCY_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The gtfs agency has not been found","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/GtfsAgencyNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"GtfsAgencyNotFound","description":"The gtfs agency has not been found"},"GtfsAgencyNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Group the GTFS belongs to."},"gtfs_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Gtfs Id","description":"GTFS the agency was looked up in.","examples":["670f84254c28ffdaae0f462d"]},"agency_id":{"type":"string","title":"Agency Id","description":"Identifier that matched no agency."}},"type":"object","required":["group_id","gtfs_id","agency_id"],"title":"GtfsAgencyNotFoundPayload","description":"Context of the GtfsAgencyNotFound error: the values identifying the entities involved in this specific occurrence."},"GtfsCalendarNotFound":{"properties":{"code":{"type":"string","const":"GTFS_CALENDAR_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The gtfs calendar has not been found","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/GtfsCalendarNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"GtfsCalendarNotFound","description":"The gtfs calendar has not been found"},"GtfsCalendarNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Group the GTFS belongs to."},"gtfs_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Gtfs Id","description":"GTFS the calendar was looked up in.","examples":["670f84254c28ffdaae0f462d"]},"service_id":{"type":"string","title":"Service Id","description":"Service identifier that matched no calendar."}},"type":"object","required":["group_id","gtfs_id","service_id"],"title":"GtfsCalendarNotFoundPayload","description":"Context of the GtfsCalendarNotFound error: the values identifying the entities involved in this specific occurrence."},"GtfsFileSchema":{"properties":{"_id":{"type":"string","title":"Id","description":"Identifier of the GTFS."},"mod_user":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mod User","description":"Identifier of the user behind the last modification — the importer on a GTFS nobody has changed since. Null only on documents that predate the field."},"mod_time":{"type":"string","format":"date-time","title":"Mod Time","description":"When the GTFS was last modified."},"archived":{"anyOf":[{"type":"integer","examples":[1606003200]},{"type":"null"}],"title":"Archived","description":"When the GTFS was taken out of service, as epoch seconds. Null while it is not archived."},"scheduled":{"anyOf":[{"type":"integer","examples":[1606003200]},{"type":"null"}],"title":"Scheduled","description":"When the GTFS is due to be put into service, as epoch seconds. Null when no publication is scheduled for it."},"published":{"anyOf":[{"type":"integer","examples":[1606003200]},{"type":"null"}],"title":"Published","description":"When the GTFS was last put into service, as epoch seconds. Null while it has never been published."},"name":{"type":"string","title":"Name","description":"Name the GTFS was imported under."},"validation_status":{"$ref":"#/components/schemas/ValidationStatus","description":"Whether the GTFS still has to be validated, is validated, or must be fixed before it can be published.","default":"to_validate"},"validation":{"anyOf":[{"$ref":"#/components/schemas/Response"},{"type":"null"}],"description":"Report the validator produced for the GTFS. Null until one has been run."},"blocked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Blocked","description":"**Deprecated** — flag raised by the block endpoint. It still bars the GTFS from being published, on its own and whatever `validation_status` says.","deprecated":true},"publication_failed":{"anyOf":[{"$ref":"#/components/schemas/PublicationFailureSchema"},{"type":"null"}],"description":"The scheduled publication that failed, when no later one has superseded it. Null otherwise."}},"type":"object","required":["_id","mod_time","name"],"title":"GtfsFileSchema","description":"A GTFS of the group, and where it stands in its lifecycle.\n\nA group keeps several GTFS at once — the one in service, the previous\nones and the ones to come — so `published`, `scheduled` and `archived`\nare what tells them apart."},"GtfsNotFound":{"properties":{"code":{"type":"string","const":"GTFS_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The gtfs file has not been found","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/GtfsNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"GtfsNotFound","description":"The gtfs file has not been found"},"GtfsNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group the GTFS was looked up in."},"gtfs_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Gtfs Id","description":"Identifier that matched no GTFS.","examples":["670f84254c28ffdaae0f462d"]}},"type":"object","required":["group_id","gtfs_id"],"title":"GtfsNotFoundPayload","description":"Context of the GtfsNotFound error: the values identifying the entities involved in this specific occurrence."},"GtfsOptDatedTrip":{"properties":{"trip_id":{"type":"string","title":"Trip Id","description":"référence vers `gtfs.<gtfs_id>.trips._id` de la course"},"start_date":{"type":"string","maxLength":8,"minLength":8,"pattern":"^\\d*$","title":"Start Date","description":"date de début théorique de la course, au format GTFS"},"gtfs_id":{"anyOf":[{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"]},{"type":"null"}],"title":"Gtfs Id","description":"référence vers `gtfs.id` de la course"}},"type":"object","required":["trip_id","start_date"],"title":"GtfsOptDatedTrip","description":"The trip a device is running, with the GTFS it was read from when known.\n\nSame three fields as ``GtfsDatedTrip``, except ``gtfs_id`` may be absent:\nthe device reports the trip and its service date without always naming the\nGTFS they belong to."},"GtfsRouteNotFound":{"properties":{"code":{"type":"string","const":"GTFS_ROUTE_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The gtfs route has not been found","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/GtfsRouteNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"GtfsRouteNotFound","description":"The gtfs route has not been found"},"GtfsRouteNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Group the GTFS belongs to."},"gtfs_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Gtfs Id","description":"GTFS the route was looked up in.","examples":["670f84254c28ffdaae0f462d"]},"route_id":{"type":"string","title":"Route Id","description":"Identifier that matched no route."}},"type":"object","required":["group_id","gtfs_id","route_id"],"title":"GtfsRouteNotFoundPayload","description":"Context of the GtfsRouteNotFound error: the values identifying the entities involved in this specific occurrence."},"GtfsStopNotFound":{"properties":{"code":{"type":"string","const":"GTFS_STOP_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The gtfs stop has not been found","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/GtfsStopNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"GtfsStopNotFound","description":"The gtfs stop has not been found"},"GtfsStopNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Group the GTFS belongs to."},"gtfs_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Gtfs Id","description":"GTFS the stop was looked up in.","examples":["670f84254c28ffdaae0f462d"]},"stop_id":{"type":"string","title":"Stop Id","description":"Identifier that matched no stop."}},"type":"object","required":["group_id","gtfs_id","stop_id"],"title":"GtfsStopNotFoundPayload","description":"Context of the GtfsStopNotFound error: the values identifying the entities involved in this specific occurrence."},"GtfsTripNotFound":{"properties":{"code":{"type":"string","const":"GTFS_TRIP_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The gtfs trip has not been found","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/GtfsTripNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"GtfsTripNotFound","description":"The gtfs trip has not been found"},"GtfsTripNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Group the GTFS belongs to."},"gtfs_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Gtfs Id","description":"GTFS the trip was looked up in.","examples":["670f84254c28ffdaae0f462d"]},"trip_id":{"type":"string","title":"Trip Id","description":"Identifier that matched no trip."}},"type":"object","required":["group_id","gtfs_id","trip_id"],"title":"GtfsTripNotFoundPayload","description":"Context of the GtfsTripNotFound error: the values identifying the entities involved in this specific occurrence."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail","description":"Every value the request was refused on."}},"type":"object","title":"HTTPValidationError","description":"What the API refused in the request, one entry per rejected value."},"HistoryDeviceAtSchema":{"properties":{"trip_filter":{"anyOf":[{"$ref":"#/components/schemas/SequenceModeTripFilter"},{"$ref":"#/components/schemas/TripModeTripFilter"},{"$ref":"#/components/schemas/DeadRunTripFilter"},{"type":"null"}],"title":"Trip Filter","description":"(pendant une course)"},"delay":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Delay","description":"(pendant une course) valeur d’avance (si négatif) ou de retard de l’appareil par rapport au théorique"},"off_itinerary":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Off Itinerary","description":"indique si l'appareil est en dehors de l'itinéraire prévu"},"trip_pending":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Trip Pending","description":"indique que l’appareil est en acheminement"},"trip_pending_distance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Trip Pending Distance","description":"distance restante à parcourir en acheminement avant d’arriver au 1er arrêt"},"shape_dist_traveled":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Shape Dist Traveled","description":"distance parcourue sur le tracé"},"debug_shape_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Debug Shape Score","description":"valeur de debug, score du segment sélectionné par le calcul de projection de l’appareil sur le tracé"},"debug_trace_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Debug Trace Length","description":"valeur de debug, nombre d’élément dans la tracede l’appareil utilisés pour le calcul de projection"},"trip":{"anyOf":[{"$ref":"#/components/schemas/GtfsOptDatedTrip"},{"type":"null"}],"description":"(pendant une course) informations sur la course en cours"},"trip_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trip Id","description":"référence vers `gtfs.<gtfs_id>.trips._id` de la course *(Deprecated → `trip.trip_id`)*"},"current_status":{"anyOf":[{"$ref":"#/components/schemas/pysae__api__devices__models__DeviceStatus"},{"type":"null"}],"description":"(pendant une course) indique le statut par rapport à l’arrêt indiqué par `current_stop_sequence`"},"current_stop_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Stop Id","description":"champ utilisé pour forcer le prochain arrêt lors d’une relève conducteur entre 2 appareils sur une course en mode sans tracé. *(Deprecated)*"},"current_stop_sequence":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Current Stop Sequence","description":"(pendant une course) référence vers `gtfs.<gtfs_id>.trips.stop_times.stop_sequence` du prochain arrêt(arrêt courant quand le bus est à l’arrêt). Une valeur fractionnaire désigne un arrêt temporaire (AD_HOC)."},"latlng":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Latlng","description":"dernières coordonnées GPS de l’appareil,au format `[latitude, longitude]`"},"latlng_accuracy":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latlng Accuracy","description":"précision des dernières coordonnées GPS"},"speed":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Speed","description":"(pendant une course) vitesse en m/s"},"bearing":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bearing","description":"orientation géographique de l’appareil"},"device_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Model","description":"marque et/ou modèle de l’appareil"},"device_os":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Os","description":"système d’exploitation et version de l’appareil"},"app_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Version","description":"version installé de l’application"},"gps_ppm":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Gps Ppm","description":"nombre de coordonnées remontées par le GPS par minutes","default":0},"app_status":{"anyOf":[{"$ref":"#/components/schemas/DeviceAppStatus"},{"type":"null"}],"description":"indique le statut de l’application. *(deprecated → déplacé dans `event_app`, à supprimer ?)*"},"archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Archived","description":"indique que l’appareil est archivé"},"assigned_driver_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Driver Id","description":"référence vers `pysae.drivers._id` du conducteur affecté forcé pour cet appareil"},"assigned_vehicle_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Vehicle Id","description":"référence vers `pysae.vehicle._id` du véhicule affecté forcé pour cet appareil"},"claimed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Claimed At","description":"when the device has been claimed by a phone, thus making a session"},"current_activity_log_assignation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Activity Log Assignation","description":"référence vers `history.duties.<gtfs_id>._id` de la prise de service en cours"},"current_file":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current File","description":"référence vers `gtfs.files._id` du GTFS chargé sur l’appareil *(Deprecated → déplacé vers `gtfs_id`)*"},"device_imei":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Imei","description":"IMEI du téléphone *(Deprecated)*"},"drive_mode":{"anyOf":[{"$ref":"#/components/schemas/DeviceDriveMode"},{"type":"null"}],"description":"mode de prise de course. Valeurs possibles : `sequence` pour le mode service séquentiel, `trip` pour le mode course"},"event_app":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event App","description":"indique certains actions du conducteur sur l’application (sélection d’une course, affichage de la carte, forcer le départ de la course, fin de course, etc.)"},"gtfs_id":{"anyOf":[{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"]},{"type":"null"}],"title":"Gtfs Id","description":"Gtfs which the device base its trips"},"last_vehicle_associated":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Vehicle Associated","description":"Dernier vehicule associé à l'appareil durant une course"},"last_driver_associated":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Driver Associated","description":"Dernier conducteur associé à l'appareil durant une course"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"nom de l’appareil"},"network_status":{"$ref":"#/components/schemas/DeviceNetworkStatus","description":"indique si l’appareil est connecté à internet ou non *(devrait toujours être `online` dans cette collection)*","default":"online"},"no_gps":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"No Gps","description":"indique si le GPS transmet bien de nouvelles coordonnées ou non"},"position":{"anyOf":[{"$ref":"#/components/schemas/DevicePosition"},{"type":"null"}],"description":"Inutilisé. Objet cloné depuis la remonté du GPS de l’appareil. Voir https://developer.mozilla.org/en-US/docs/Web/API/GeolocationPosition"},"route_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Id","description":"(pendant une course) référence vers `gtfs.<gtfs_id>.routes._id` de la course en cours"},"simulation_mode":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Simulation Mode","description":"indique que l’appareil est en mode simulation"},"stop_id":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"null"}],"title":"Stop Id","description":"(pendant une course) référence vers `gtfs.<gtfs_id>.stops._id` de l’arrêt indiqué par `current_stop_sequence`"},"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Id","description":"référence vers `state.groups.teams.team_id` de l’équipe de l’appareil"},"teams":{"items":{"type":"string"},"type":"array","title":"Teams","description":"référence vers `state.groups.teams.team_id` des équipes de l’appareil","default":[]},"time_to_next_stop":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Time To Next Stop","description":"(en acheminement) temps estimé avant d’arriver à l’arrêt, en secondes"},"time_to_next_stop_fixed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Time To Next Stop Fixed","description":"*(Deprecated)*"},"trip_schedule_relationship":{"anyOf":[{"$ref":"#/components/schemas/DeviceTripScheduleRelationship"},{"type":"null"}],"description":"indique que la course est annulée."},"ts":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ts","description":"timestamp de la dernière position GPS de l’appareil. Pour savoir si l’appareil communique, voir `connected_at`."},"connected_at":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Connected At","description":"timestamp du dernier échange avec l’appareil, quelle qu’en soit la nature. C’est ce champ qui détermine si l’appareil est considéré comme connecté."},"ts_system":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ts System","description":"technical true timestamp for a device simulating"},"v":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"V","description":"`1` *(Deprecated, les appareils qui n’avaient pas ce champs utilisaient un calcul de progression fait par l’API et pas par Driver)*"},"vehicle_load":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Vehicle Load","description":"charge du véhicule"},"load_percentage":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Load Percentage","description":"Occupancy of the vehicle, in percent. A read-time enrichment of the live device and the history events, which this endpoint does not apply and no stored state carries, so it never comes back here."},"_id":{"type":"string","title":"Id","description":"identifiant généré par l’appareil"},"device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Id","description":"Same value as `id`, filled in by the server for the readers that expect `device_id`."}},"type":"object","required":["_id"],"title":"HistoryDeviceAtSchema","description":"Reconstructed Device state returned by ``GET /devices/{device_id}/history``.\n\nMirrors :class:`DeviceSchema` — Device.last_snapshot has been removed\nalong with the legacy hourly snapshot bookkeeping in history_event."},"HistoryEventSchema":{"properties":{"source_vehicle_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Vehicle Id","description":"Identifiant du véhicule fournissant la position de cet appareil.Ce champs est défini uniquement pour les positions fournies par un équipement externe comme le routeur embarqué"},"source_equipment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Equipment Id","description":"Identifiant de l'équipement fournissant la position de cet appareil.Ce champs est défini uniquement pour les positions fournies par un équipement externe comme le routeur embarqué"},"source_equipment_type":{"anyOf":[{"$ref":"#/components/schemas/EquipmentType"},{"type":"null"}],"description":"Type d'équipement fournissant les données de cet appareil. TELEMATIC pour un boîtier télématique (ex: MCF), ROUTER pour un routeur embarqué (ex: ICN)."},"trip_filter":{"anyOf":[{"$ref":"#/components/schemas/SequenceModeTripFilter"},{"$ref":"#/components/schemas/TripModeTripFilter"},{"$ref":"#/components/schemas/DeadRunTripFilter"},{"type":"null"}],"title":"Trip Filter","description":"(pendant une course)"},"delay":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Delay","description":"(pendant une course) valeur d’avance (si négatif) ou de retard de l’appareil par rapport au théorique"},"off_itinerary":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Off Itinerary","description":"indique si l'appareil est en dehors de l'itinéraire prévu"},"trip_pending":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Trip Pending","description":"indique que l’appareil est en acheminement"},"trip_pending_distance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Trip Pending Distance","description":"distance restante à parcourir en acheminement avant d’arriver au 1er arrêt"},"shape_dist_traveled":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Shape Dist Traveled","description":"distance parcourue sur le tracé"},"debug_shape_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Debug Shape Score","description":"valeur de debug, score du segment sélectionné par le calcul de projection de l’appareil sur le tracé"},"debug_trace_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Debug Trace Length","description":"valeur de debug, nombre d’élément dans la tracede l’appareil utilisés pour le calcul de projection"},"trip":{"anyOf":[{"$ref":"#/components/schemas/GtfsOptDatedTrip"},{"type":"null"}],"description":"(pendant une course) informations sur la course en cours"},"trip_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trip Id","description":"référence vers `gtfs.<gtfs_id>.trips._id` de la course *(Deprecated → `trip.trip_id`)*"},"trip_team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trip Team Id","description":"référence vers `state.groups.teams.team_id` de l'équipe de la course"},"current_status":{"anyOf":[{"$ref":"#/components/schemas/pysae__api__devices__models__DeviceStatus"},{"type":"null"}],"description":"(pendant une course) indique le statut par rapport à l’arrêt indiqué par `current_stop_sequence`"},"current_stop_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Stop Id","description":"champ utilisé pour forcer le prochain arrêt lors d’une relève conducteur entre 2 appareils sur une course en mode sans tracé. *(Deprecated)*"},"current_stop_sequence":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Current Stop Sequence","description":"(pendant une course) référence vers `gtfs.<gtfs_id>.trips.stop_times.stop_sequence` du prochain arrêt(arrêt courant quand le bus est à l’arrêt). Une valeur fractionnaire désigne un arrêt temporaire (AD_HOC)."},"current_trip_trigger":{"anyOf":[{"$ref":"#/components/schemas/DeviceTrigger"},{"type":"null"}],"description":"Last trip transition recorded on this device. Emptied when the device releases the trip."},"latlng":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Latlng","description":"dernières coordonnées GPS de l’appareil,au format `[latitude, longitude]`"},"latlng_accuracy":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latlng Accuracy","description":"précision des dernières coordonnées GPS"},"speed":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Speed","description":"(pendant une course) vitesse en m/s"},"bearing":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bearing","description":"orientation géographique de l’appareil"},"device_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Model","description":"marque et/ou modèle de l’appareil"},"device_os":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Os","description":"système d’exploitation et version de l’appareil"},"app_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Version","description":"version installée de l’application"},"gtfs_id":{"anyOf":[{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"]},{"type":"null"}],"title":"Gtfs Id","description":"Gtfs which the device base its trips"},"gps_ppm":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Gps Ppm","description":"nombre de coordonnées remontées par le GPS par minutes","default":0},"app_status":{"anyOf":[{"$ref":"#/components/schemas/DeviceAppStatus"},{"type":"null"}],"description":"indique le statut de l’application. *(deprecated → déplacé dans `event_app`, à supprimer ?)*"},"archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Archived","description":"indique que l’appareil est archivé"},"assigned_driver_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Driver Id","description":"référence vers `pysae.drivers._id` du conducteur affecté forcé pour cet appareil"},"assigned_vehicle_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Vehicle Id","description":"référence vers `pysae.vehicle._id` du véhicule affecté forcé pour cet appareil"},"claimed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Claimed At","description":"when the device has been claimed by a phone, thus making a session"},"connected_at":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Connected At","description":"horodatage serveur du dernier contact de l'appareil, toutes natures d'échange confondues. Distinct de `ts`, qui ne porte que la fraîcheur de la dernière position GPS."},"current_activity_log_assignation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Activity Log Assignation","description":"référence vers `history.duties.<gtfs_id>._id` de la prise de service en cours"},"current_on_demand_route":{"anyOf":[{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"]},{"type":"null"}],"title":"Current On Demand Route","description":"référence vers `on_demand_routes._id` de la ligne à la demande servie, si `drive_mode=on_demand`"},"current_on_demand_service":{"anyOf":[{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"]},{"type":"null"}],"title":"Current On Demand Service","description":"référence vers `duties.on_demand_services.id` du service à la demande en cours, si `drive_mode=on_demand`"},"device_imei":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Imei","description":"IMEI du téléphone *(Deprecated)*"},"drive_mode":{"anyOf":[{"$ref":"#/components/schemas/DeviceDriveMode"},{"type":"null"}],"description":"mode de prise de course. Valeurs possibles : `sequence` pour le mode service séquentiel, `trip` pour le mode course"},"event_app":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event App","description":"indique certains actions du conducteur sur l’application (sélection d’une course, affichage de la carte, forcer le départ de la course, fin de course, etc.)"},"installer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Installer","description":"`ps` (indiquait que l’application a été installéeà partir du PlayStore ou autre) *(Deprecated)*"},"last_message_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Message Id","description":"référence vers `history.messages.<group_id>._id`du dernier message récupéré sur cet appareil"},"last_vehicle_associated":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Vehicle Associated","description":"Dernier vehicule associé à l'appareil durant une course"},"last_driver_associated":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Driver Associated","description":"Dernier conducteur associé à l'appareil durant une course"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"nom de l’appareil"},"network_status":{"$ref":"#/components/schemas/DeviceNetworkStatus","description":"indique si l’appareil est connecté à internet ou non *(devrait toujours être `online` dans cette collection)*","default":"online"},"no_gps":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"No Gps","description":"indique si le GPS transmet bien de nouvelles coordonnées ou non"},"position":{"anyOf":[{"$ref":"#/components/schemas/DevicePosition"},{"type":"null"}],"description":"Inutilisé. Objet cloné depuis la remonté du GPS de l’appareil. Voir https://developer.mozilla.org/en-US/docs/Web/API/GeolocationPosition"},"route_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Id","description":"(pendant une course) référence vers `gtfs.<gtfs_id>.routes._id` de la course en cours"},"shape_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Shape Id","description":"(during a trip) Identifier of the GTFS shape the trip in progress follows. Emptied with the rest of the trip identity when the trip ends."},"simulation_mode":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Simulation Mode","description":"indique que l’appareil est en mode simulation"},"skipped_last_position":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Skipped Last Position","description":"(pendant une course) indique que la dernière position GPS a été ignorée par le calcul de progression"},"stop_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stop Id","description":"(pendant une course) référence vers `gtfs.<gtfs_id>.stops._id` de l’arrêt indiqué par `current_stop_sequence`"},"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Id","description":"référence vers `state.groups.teams.team_id` de l’équipe de l’appareil"},"teams":{"items":{"type":"string"},"type":"array","title":"Teams","description":"référence vers `state.groups.teams.team_id` des équipes de l’appareil","default":[]},"time_to_next_stop":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Time To Next Stop","description":"(en acheminement) temps estimé avant d’arriver à l’arrêt, en secondes"},"time_to_next_stop_fixed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Time To Next Stop Fixed","description":"*(Deprecated)*"},"trip_schedule_relationship":{"anyOf":[{"$ref":"#/components/schemas/DeviceTripScheduleRelationship"},{"type":"null"}],"description":"indique que la course est annulée."},"ts":{"type":"number","title":"Ts","description":"Unix seconds of what the event reports — when the device was there, not when the API received it, which `at` carries."},"ts_system":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ts System","description":"technical true timestamp for a device simulating"},"update_info":{"anyOf":[{"$ref":"#/components/schemas/DeviceUpdateInfo"},{"type":"null"}],"description":"indique d’où vient la demande de relève conducteur *(Deprecated)*"},"v":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"V","description":"`1` *(Deprecated, les appareils qui n’avaient pas ce champs utilisaient un calcul de progression fait par l’API et pas par Driver)*"},"energy_level":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Energy Level","description":"Niveau d'énergie du véhicule (carburant ou batterie), en pourcentage (0-100)."},"odometer":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Odometer","description":"Compteur kilométrique du véhicule, en kilomètres."},"engine_state":{"anyOf":[{"$ref":"#/components/schemas/EngineState"},{"type":"null"}],"description":"État du moteur (driving / stopped) remonté par l'équipement télématique."},"vehicle_load":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Vehicle Load","description":"charge du véhicule"},"load_percentage":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Load Percentage","description":"Occupancy of the vehicle, in percent. Filled in at read time from the group's Webreathe integration, so it is absent when that integration is not configured."},"voip":{"anyOf":[{"$ref":"#/components/schemas/DeviceVoipData"},{"type":"null"}],"description":"appareil VoIP associé à ce device"},"id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Id","description":"Identifier of the stored event, and the value `after_id` and `before_id` take. `GET /history/events` leaves it out of the payload it returns.","examples":["670f84254c28ffdaae0f462d"]},"at":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"At","description":"timestamp serveur de réception de l’event. Distinct de `ts`, qui date la position que l’event transporte. Absent des events produits hors du chemin event-sourcing, et de ceux écrits avant l’introduction du champ."},"device_id":{"type":"string","title":"Device Id","description":"Device the event comes from, and the value the `device_id` filter takes."},"packet_lag":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Packet Lag","description":"Seconds between the instant the event reports and the instant the server took it in — how late the report arrived."},"type":{"anyOf":[{"$ref":"#/components/schemas/HistoryEventType"},{"type":"null"}],"description":"Kind of report this event is, when it declares one. It determines which of the fields below the event fills."}},"type":"object","required":["ts","id","device_id"],"title":"HistoryEventSchema","description":"One report a device sent, as it was recorded.\n\nAn event carries the slice of the device state its `type` covers and\nnothing else. The endpoint answers without the fields the event left\nuntouched, so an absent field means the event said nothing about it — not\nthat the device had no value for it."},"HistoryEventType":{"type":"string","enum":["position","trip","trip_details","trip_filter","vehicle_load","passenger_count","vehicle_data","duty_check_in","duty_check_out","system_metadata","location_metadata","on_demand_service_start","on_demand_service_end","on_demand_stop_arrival","on_demand_stop_departure","on_demand_passenger_count"],"title":"HistoryEventType","description":"What a device reported: a position, a trip change, a count, a duty…\n\nEach type covers one slice of the device state, and an event fills only the\nfields of its own slice."},"HistoryGTFSSchema":{"properties":{"_id":{"type":"integer","title":"Id","description":"Unix seconds at which the publication took effect. That instant is the entry's identity, and the order the log is read in."},"current_file":{"type":"string","title":"Current File","description":"Identifier of the GTFS dataset this publication put in force."},"type":{"$ref":"#/components/schemas/PublicationTypeSchema","description":"Whether the publication was asked for at once or set for a later date."},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id","description":"User who asked for the publication. Empty when no user asked for it — an upcoming scheduled publication, in particular."},"planned_ts":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Planned Ts","description":"Unix seconds the publication was set to take effect at. Empty on a publication asked for at once."},"planned_setup_ts":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Planned Setup Ts","description":"Unix seconds recorded when a scheduled publication was set up. Nothing on the current publication path writes it, so only older entries carry it."}},"type":"object","required":["_id","current_file","type"],"title":"HistoryGTFSSchema","description":"One entry of the GTFS publication log: which dataset took effect, and when.\n\nThis log is what tells which schedule reference was in force on a past\ndate, and therefore which GTFS a trip identifier of that date belongs to."},"HistoryStopTimesSchema":{"properties":{"id":{"type":"string","title":"Id","description":"Identifier of the recorded passing, and the value `after_id` takes to page through the results."},"gtfs_id":{"type":"string","title":"Gtfs Id","description":"GTFS the trip belongs to; trip identifiers are scoped to it."},"trip_id":{"type":"string","title":"Trip Id","description":"Trip the passing belongs to, within that GTFS."},"start_date":{"type":"string","title":"Start Date","description":"Service date of the run, as a GTFS `YYYYMMDD` date. With the trip and the GTFS, it names one execution."},"stop_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stop Id","description":"Stop the passing was observed at, as its GTFS names it."},"stop_sequence":{"anyOf":[{"type":"integer"},{"type":"number"}],"title":"Stop Sequence","description":"Position of the stop along the trip. An integer designates a scheduled GTFS stop; a fractional value such as `4.1` designates a temporary stop of a deviation, which has no GTFS counterpart."},"event":{"type":"string","title":"Event","description":"Whether the record is the `arrival` at the stop or the `departure` from it. Punctuality is scored on the departures, except at the last stop where the arrival is used instead."},"device_id":{"type":"string","title":"Device Id","description":"Device that observed the passing."},"delay":{"type":"integer","title":"Delay","description":"Seconds between the observed passing and the time scheduled at that stop: negative when early, positive when late."},"ts":{"anyOf":[{"type":"integer"},{"type":"number"}],"title":"Ts","description":"Unix seconds at which the passing was observed."},"last_stop":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Last Stop","description":"Marks the passing at the trip's terminus, the one stop where the arrival is scored rather than the departure."},"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Id","description":"Team the record is attached to. Pre-multi-team form of `teams`, read only when `teams` is absent or empty."},"teams":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Teams","description":"Teams the record is attached to; the caller's team scope is matched against them."},"delta_previous_passage":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Delta Previous Passage","description":"Seconds separating this passing from the one before it. Nothing on the current write path fills it."},"delta_next_passage":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Delta Next Passage","description":"Seconds separating this passing from the one after it. Nothing on the current write path fills it."},"_id":{"type":"string","title":"Id","description":"Same value as `id`, repeated under its stored spelling."}},"type":"object","required":["id","gtfs_id","trip_id","start_date","stop_sequence","event","device_id","delay","ts","_id"],"title":"HistoryStopTimesSchema","description":"One passing observed at a stop, as the history recorded it.\n\nThese are the observed times, not the scheduled ones — the schedule stays\nin the GTFS `stop_times` — and `delay` is what separates the two."},"HistoryVKSchema":{"properties":{"date":{"type":"string","title":"Date","description":"Date the kilometres are counted on, as a GTFS `YYYYMMDD` date."},"gtfs_id":{"type":"string","title":"Gtfs Id","description":"GTFS the trip belongs to; trip identifiers are scoped to it."},"trip_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trip Id","description":"Trip the kilometres were driven on. Empty when they were driven outside a trip — dead-heading, dead mileage, or on-demand service."},"device_id":{"type":"string","title":"Device Id","description":"Device whose positions the kilometres were measured from."},"vk":{"type":"number","title":"Vk","description":"Kilometres driven, accumulated position by position over the window the record covers."},"start_ts":{"anyOf":[{"type":"integer"},{"type":"number"}],"title":"Start Ts","description":"Unix seconds of the first position the record accumulated."},"end_ts":{"anyOf":[{"type":"integer"},{"type":"number"}],"title":"End Ts","description":"Unix seconds of the last position the record accumulated."},"start_latlng":{"items":{"type":"number"},"type":"array","title":"Start Latlng","description":"First position of the record, as `[latitude, longitude]`."},"end_latlng":{"items":{"type":"number"},"type":"array","title":"End Latlng","description":"Last position of the record, as `[latitude, longitude]`."},"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Id","description":"Team the record is attached to. Pre-multi-team form of `teams`, read only when `teams` is absent or empty."},"teams":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Teams","description":"Teams the record is attached to; the caller's team scope is matched against them."},"vk_no_status":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vk No Status","description":"Share of `vk` driven while the device reported no stop status, that is while it was not following a stop of the trip. Equal to `vk` on an on-demand record, where that status is never written."}},"type":"object","required":["date","gtfs_id","device_id","vk","start_ts","end_ts","start_latlng","end_latlng"],"title":"HistoryVKSchema","description":"The kilometres one device drove on one date, for one service.\n\nThese are **vehicle** kilometres, not commercial ones: the endpoint returns\nevery record of the period, including those attached to no trip —\ndead-heading, dead mileage and on-demand service. For the commercial\nkilometres alone, read the trip-km report instead."},"ImportFormat":{"type":"string","enum":["json","gescar","okapi"],"title":"ImportFormat","description":"Shape a planning import is submitted in.\n\n- ``json``: the API's own planning payload.\n- ``gescar``: a Gescar export.\n- ``okapi``: an Okapi export, whose trips are resolved from the route and\n  trip short names rather than given by identifier."},"Incident":{"properties":{"incident_label":{"type":"string","title":"Incident Label","description":"Label the operator picked, among the ones the group declares."},"ticket":{"$ref":"#/components/schemas/Ticket","description":"Ticket the incident was filed as."}},"type":"object","required":["incident_label","ticket"],"title":"Incident","description":"An incident the operator reported on the trip."},"InfoTypes":{"type":"string","enum":["stop_time_update","delay","comment","schedule_relationship","incident","stop_info"],"title":"InfoTypes","description":"What a trip-update entry carries, which says how to read its content."},"InsertedPlanningSchema":{"properties":{"date":{"type":"string","title":"Date","description":"Service day the assignment holds for, as a GTFS `YYYYMMDD` date.","examples":["20201122"]},"driver_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Driver Id","description":"Driver committed to the trip. Null when the line commits none."},"vehicle_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vehicle Id","description":"Vehicle committed to the trip. Null when the line commits none."},"block_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Block Id","description":"Block the trip belongs to — the run a single vehicle chains."},"block_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Block Label","description":"Label the imported planning names that block by."},"hastus_duty_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hastus Duty Identifier","description":"Duty identifier carried over from Hastus, exactly as the import received it. It is not a Pysae identifier: resolving it to a driver goes through an external mapping."},"trip_id":{"type":"string","title":"Trip Id","description":"Trip the assignment holds for."},"missing_trip":{"type":"boolean","title":"Missing Trip","description":"Whether that trip is absent from the GTFS the group has in force. The assignment is recorded either way.","default":false}},"type":"object","required":["date","trip_id"],"title":"InsertedPlanningSchema","description":"An assignment as it was recorded, and whether its trip was recognised."},"Interval":{"properties":{"start_date":{"type":"string","title":"Start Date","description":"First day of the range, as a `YYYY-MM-DD` date."},"end_date":{"type":"string","title":"End Date","description":"Last day of the range, in the same format."}},"type":"object","required":["start_date","end_date"],"title":"Interval","description":"A range of service days, as the validator reports it."},"InvalidGTFSId":{"properties":{"code":{"type":"string","const":"INVALID_GTFS_ID","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The gtfs id is not valid","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/InvalidGTFSIdPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"InvalidGTFSId","description":"The gtfs id is not valid"},"InvalidGTFSIdPayload":{"properties":{},"type":"object","title":"InvalidGTFSIdPayload","description":"Context of the InvalidGTFSId error: the values identifying the entities involved in this specific occurrence."},"InvalidRailDeparturesWindow":{"properties":{"code":{"type":"string","const":"INVALID_RAIL_DEPARTURES_WINDOW","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"`to` must not precede `from`, and the window must not exceed 24 hours","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/InvalidRailDeparturesWindowPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"InvalidRailDeparturesWindow","description":"`to` must not precede `from`, and the window must not exceed 24 hours"},"InvalidRailDeparturesWindowPayload":{"properties":{"window_from":{"type":"string","title":"Window From","description":"The `from` bound, as it was received."},"window_to":{"type":"string","title":"Window To","description":"The `to` bound, as it was received."}},"type":"object","required":["window_from","window_to"],"title":"InvalidRailDeparturesWindowPayload","description":"Context of the InvalidRailDeparturesWindow error: the values identifying the entities involved in this specific occurrence."},"InvalidRailStationNear":{"properties":{"code":{"type":"string","const":"INVALID_RAIL_STATION_NEAR","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"`near` must be `<latitude>,<longitude>` in WGS 84 decimal degrees, with the latitude within [-90, 90] and the longitude within [-180, 180]","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/InvalidRailStationNearPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"InvalidRailStationNear","description":"`near` must be `<latitude>,<longitude>` in WGS 84 decimal degrees, with the latitude within [-90, 90] and the longitude within [-180, 180]"},"InvalidRailStationNearPayload":{"properties":{"near":{"type":"string","title":"Near","description":"The `near` query parameter, as it was received."}},"type":"object","required":["near"],"title":"InvalidRailStationNearPayload","description":"Context of the InvalidRailStationNear error: the values identifying the entities involved in this specific occurrence."},"InvalidRole":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/InvalidRolePayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"InvalidRole","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"InvalidRolePayload":{"properties":{"role_given":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Given","description":"Role the calling user holds on the group, if any."},"role_needed":{"items":{"type":"string"},"type":"array","uniqueItems":true,"title":"Role Needed","description":"Roles that would have granted the call."}},"type":"object","required":["role_given","role_needed"],"title":"InvalidRolePayload","description":"Context of the InvalidRole error: the values identifying the entities involved in this specific occurrence."},"InvalidTeam":{"properties":{"code":{"type":"string","const":"INVALID_TEAM","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"You do not have the required team","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/InvalidTeamPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"InvalidTeam","description":"You do not have the required team"},"InvalidTeamPayload":{"properties":{"missing_team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Missing Team Id","description":"Team the ``team_id`` query parameter named, which the caller does not hold. Absent when the refusal names no team."}},"type":"object","title":"InvalidTeamPayload","description":"Context of the InvalidTeam error: the values identifying the entities involved in this specific occurrence."},"Issue":{"properties":{"severity":{"$ref":"#/components/schemas/Severity","description":"How serious the issue is. Anything above a warning blocks publication, and leaves the GTFS `to_fix`."},"issue_type":{"$ref":"#/components/schemas/IssueType","description":"Which of the validator's checks the issue comes from."},"object_id":{"type":"string","title":"Object Id","description":"Identifier of the object the issue was raised on."},"object_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Object Type","description":"GTFS type of that object. Null when the validator could not name it."},"object_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Object Name","description":"Name of that object, when the GTFS carries one."},"related_objects":{"items":{"$ref":"#/components/schemas/RelatedObject"},"type":"array","title":"Related Objects","description":"Other objects the issue involves — the second stop of a pair, for instance. Empty when the issue stands on its own.","default":[]},"details":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Details","description":"Free-text detail the validator adds to the issue."},"related_file":{"anyOf":[{"$ref":"#/components/schemas/RelatedFile"},{"type":"null"}],"description":"Archive file the issue was found in, and the line within it."},"geojson":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Geojson","description":"Geometry of what the issue points at, as a GeoJSON feature collection. Only the geographic checks fill it."}},"type":"object","required":["severity","issue_type","object_id"],"title":"Issue","description":"Represents an issue."},"IssueType":{"type":"string","enum":["UnusedStop","Slow","ExcessiveSpeed","NegativeTravelTime","CloseStops","NullDuration","InvalidReference","InvalidArchive","MissingName","MissingId","MissingCoordinates","InvalidCoordinates","InvalidRouteType","MissingUrl","InvalidUrl","InvalidTimezone","DuplicateStops","MissingPrice","InvalidCurrency","InvalidTransfers","InvalidTransferDuration","MissingLanguage","InvalidLanguage","DuplicateObjectId","UnloadableModel","MissingMandatoryFile","ExtraFile","ImpossibleToInterpolateStopTimes","InvalidStopLocationTypeInTrip","InvalidStopParent","IdNotAscii","InvalidShapeId","UnusedShapeId","DuplicateStopSequence","SubFolder","ValidationDisabled","TripsWithoutShapes","TripsWithoutDistances"],"title":"IssueType","description":"Represents the different types of issue."},"LoginResponseSchema":{"properties":{"session_id":{"type":"string","title":"Session Id","description":"Identifier of the session opened. Send it back as `Authorization: Bearer <session_id>`; the API also sets it as the `session_id` cookie."},"expires_days":{"type":"integer","title":"Expires Days","description":"Whole days left before the session expires, counted at the moment it was opened."}},"type":"object","required":["session_id","expires_days"],"title":"LoginResponseSchema","description":"Session opened by the login, and how long it stays usable."},"MessageArchiveSchema":{"properties":{"archived":{"type":"boolean","title":"Archived","description":"True files it away, false returns it to the inbox."}},"additionalProperties":false,"type":"object","required":["archived"],"title":"MessageArchiveSchema","description":"Whether to file a message away or bring it back."},"MessageBulkArchiveResultSchema":{"properties":{"id_amount":{"type":"integer","title":"Id Amount","description":"Number of identifiers the request carried."},"modified_amount":{"type":"integer","title":"Modified Amount","description":"Number of messages the call actually changed. Lower than ``id_amount`` when an identifier matches no message, when the message is out of your teams' reach, or when it already held the requested state."}},"type":"object","required":["id_amount","modified_amount"],"title":"MessageBulkArchiveResultSchema","description":"What a bulk archive call changed."},"MessageBulkArchiveSchema":{"properties":{"archive":{"type":"boolean","title":"Archive","description":"``true`` archives the messages, ``false`` puts them back into the active list."},"ids":{"items":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"]},"type":"array","uniqueItems":true,"title":"Ids","description":"Identifiers of the messages to update."}},"type":"object","required":["archive","ids"],"title":"MessageBulkArchiveSchema","description":"The messages to archive, or to take back out of the archive."},"MessageCreateSchema":{"properties":{"sender":{"$ref":"#/components/schemas/SenderCreateSchema","description":"Who is sending it, and from where."},"recipients":{"items":{"$ref":"#/components/schemas/RecipientCreateSchema"},"type":"array","title":"Recipients","description":"Everyone it is addressed to."},"urgent":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Urgent","description":"Whether it is flagged as urgent. Sending `priority` as `high` sets this on the server, so the two never disagree."},"subject":{"type":"string","title":"Subject","description":"Body of the message. HTML is stripped on write, so only the text survives."},"teams":{"items":{"type":"string"},"type":"array","title":"Teams","description":"Teams the message is scoped to. Empty reaches them all.","default":[]},"archived":{"type":"boolean","title":"Archived","description":"Whether it is filed away rather than in the inbox.","default":false},"priority":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority","description":"Legacy spelling of urgency: `high` means urgent."}},"additionalProperties":false,"type":"object","required":["sender","recipients","subject"],"title":"MessageCreateSchema","description":"A message sent between the operator and the drivers.\n\nDistinct from an alert, which addresses passengers: a message stays inside\nthe service."},"MessageCreatedSchema":{"properties":{"_id":{"type":"string","title":"Id","description":"Identifier the message was given."}},"type":"object","required":["_id"],"title":"MessageCreatedSchema","description":"Acknowledgement of a sent message."},"MessageDetailsSchema":{"properties":{"id":{"type":"string","title":"Id","description":"Identifier of the message."},"sender":{"$ref":"#/components/schemas/SenderDeprecated","description":"Who sent it."},"recipients":{"items":{"$ref":"#/components/schemas/RecipientDeprecated"},"type":"array","title":"Recipients","description":"Everyone it was addressed to, with their delivery state."},"subject":{"type":"string","title":"Subject","description":"Body of the message."},"teams":{"items":{"type":"string"},"type":"array","title":"Teams","description":"Teams it is scoped to. Empty reaches them all.","default":[]},"archived":{"type":"boolean","title":"Archived","description":"Whether it is filed away rather than in the inbox."},"urgent":{"type":"boolean","title":"Urgent","description":"Whether it is flagged as urgent."},"date":{"type":"string","format":"date-time","title":"Date","description":"When it was sent, read back from its identifier."},"feed_type":{"type":"string","title":"Feed Type","description":"Kind of feed entry this is, so a mixed feed can sort them.","default":"message"}},"additionalProperties":false,"type":"object","required":["id","sender","recipients","subject","archived","urgent","date"],"title":"MessageDetailsSchema","description":"A message with everything about it, as a feed entry."},"MessageNotFound":{"properties":{"code":{"type":"string","const":"MESSAGE_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The message has not been found","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/MessageNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"MessageNotFound","description":"The message has not been found"},"MessageNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group the message was looked up in."},"message_id":{"type":"string","title":"Message Id","description":"Identifier of the message that is unknown."}},"type":"object","required":["group_id","message_id"],"title":"MessageNotFoundPayload","description":"Context of the MessageNotFound error: the values identifying the entities involved in this specific occurrence."},"MessageSchemaDeprecated":{"properties":{"_id":{"type":"string","title":"Id","description":"Identifier of the message. Same value as `id`."},"id":{"type":"string","title":"Id","description":"Identifier of the message."},"sender":{"$ref":"#/components/schemas/SenderDeprecated","description":"Who sent it."},"recipients":{"items":{"$ref":"#/components/schemas/RecipientDeprecated"},"type":"array","title":"Recipients","description":"Everyone it was addressed to, with their delivery state."},"subject":{"type":"string","title":"Subject","description":"Body of the message."},"teams":{"items":{"type":"string"},"type":"array","title":"Teams","description":"Teams it is scoped to. Empty reaches them all.","default":[]},"archived":{"type":"boolean","title":"Archived","description":"Whether it is filed away rather than in the inbox.","default":false},"priority":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority","description":"Legacy spelling of urgency: `high` means urgent."},"urgent":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Urgent","description":"Whether it is flagged as urgent."}},"type":"object","required":["_id","id","sender","recipients","subject"],"title":"MessageSchemaDeprecated","description":"A message in the shape earlier clients read it in.\n\nIt carries its identifier twice, under `_id` and `id`, which is what the\nnewer shape stopped doing."},"MessageUpdateSchema":{"properties":{"read":{"anyOf":[{"type":"number"},{"type":"boolean"},{"type":"null"}],"title":"Read","description":"When the recipient opened it."},"delivered":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Delivered","description":"When it reached the recipient."}},"additionalProperties":false,"type":"object","title":"MessageUpdateSchema","description":"How far a message got with the recipient reporting it."},"Metadata":{"properties":{"start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date","description":"First service day the GTFS covers, as a `YYYY-MM-DD` date. Null when no calendar could be read."},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date","description":"Last service day the GTFS covers, in the same format. Null when no calendar could be read."},"networks":{"items":{"type":"string"},"type":"array","title":"Networks","description":"Networks the GTFS covers, by name."},"networks_start_end_dates":{"anyOf":[{"additionalProperties":{"anyOf":[{"$ref":"#/components/schemas/Interval"},{"type":"null"}]},"type":"object"},{"type":"null"}],"title":"Networks Start End Dates","description":"Range of service days each network covers, keyed by network name. Null when the validator did not compute it."},"modes":{"items":{"type":"string"},"type":"array","title":"Modes","description":"Transport modes the GTFS routes are declared as."},"issues_count":{"additionalProperties":{"type":"integer"},"propertyNames":{"$ref":"#/components/schemas/IssueType"},"type":"object","title":"Issues Count","description":"How many issues the report holds, per issue type. A type nothing was found for is absent."},"has_fares":{"type":"boolean","title":"Has Fares","description":"Whether the GTFS declares fares."},"has_shapes":{"type":"boolean","title":"Has Shapes","description":"Whether the GTFS declares itineraries."},"has_pathways":{"type":"boolean","title":"Has Pathways","description":"Whether the GTFS declares pathways inside stations."},"some_stops_need_phone_agency":{"type":"boolean","title":"Some Stops Need Phone Agency","description":"Whether some stops are only served by arranging it with the agency by phone — `pickup_type` or `drop_off_type` 2."},"some_stops_need_phone_driver":{"type":"boolean","title":"Some Stops Need Phone Driver","description":"Whether some stops are only served by arranging it with the driver — `pickup_type` or `drop_off_type` 3."},"validator_version":{"type":"string","title":"Validator Version","description":"Version of the validator that produced the report."},"stops_count":{"type":"integer","title":"Stops Count","description":"Stops declared in `stops.txt`."},"stats":{"$ref":"#/components/schemas/Stats","description":"The per-table counts behind those figures."}},"type":"object","required":["networks","modes","issues_count","has_fares","has_shapes","has_pathways","some_stops_need_phone_agency","some_stops_need_phone_driver","validator_version","stops_count","stats"],"title":"Metadata","description":"What the validator read from the GTFS, beyond the issues it found."},"NoRole":{"properties":{"code":{"type":"string","const":"NO_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"You do not have any role in the requested group","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/NoRolePayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"NoRole","description":"You do not have any role in the requested group"},"NoRolePayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group no role was found on."},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id","description":"Identifier of the calling user. Null when the caller is not authenticated as one."}},"type":"object","required":["group_id"],"title":"NoRolePayload","description":"Context of the NoRole error: the values identifying the entities involved in this specific occurrence."},"NoUser":{"properties":{"code":{"type":"string","const":"NO_USER","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"You are not authenticate with an user","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/NoUserPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"NoUser","description":"You are not authenticate with an user"},"NoUserPayload":{"properties":{},"type":"object","title":"NoUserPayload","description":"Context of the NoUser error: the values identifying the entities involved in this specific occurrence."},"OnDemandRouteNotFound":{"properties":{"code":{"type":"string","const":"ON_DEMAND_ROUTE_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The group has no on-demand route with this id","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/OnDemandRouteNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"OnDemandRouteNotFound","description":"The group has no on-demand route with this id"},"OnDemandRouteNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Group the route was looked up in."},"route_id":{"type":"string","title":"Route Id","description":"Identifier that matched no route."}},"type":"object","required":["group_id","route_id"],"title":"OnDemandRouteNotFoundPayload","description":"Context of the OnDemandRouteNotFound error: the values identifying the entities involved in this specific occurrence."},"OnDemandRoutePublicSchema":{"properties":{"route_id":{"type":"string","title":"Route Id","description":"Target of the QR code and of the deep link into the view"},"route_short_name":{"type":"string","title":"Route Short Name","description":"Badge the route is shown by on the map and in listings."},"route_long_name":{"type":"string","title":"Route Long Name","description":"Full name of the route."},"route_color":{"type":"string","title":"Route Color","description":"Background colour of the badge, six hex digits without `#`."},"route_text_color":{"type":"string","title":"Route Text Color","description":"Colour of the text on that badge, six hex digits without `#`."},"status":{"$ref":"#/components/schemas/OnDemandRoutePublicStatusSchema","description":"Whether the route runs or the operator has suspended it. An archived route is never returned here."},"valid_from":{"type":"string","format":"date","title":"Valid From","description":"First day the route may be served."},"valid_until":{"type":"string","format":"date","title":"Valid Until","description":"Last day the route may be served."},"stops":{"items":{"$ref":"#/components/schemas/OnDemandRouteStopPublicSchema"},"type":"array","title":"Stops","description":"Every stop of the route, in the order they are served."}},"type":"object","required":["route_id","route_short_name","route_long_name","route_color","route_text_color","status","valid_from","valid_until","stops"],"title":"OnDemandRoutePublicSchema","description":"The configuration of an on-demand route, readable without a role.\n\nFields are duplicated from the private schema rather than shared with it:\nthis contract is read by an unauthenticated passenger display and has to be\nfree to shrink or move without dragging the operator's contract along.\n\n**The `stop_id` of a stop belongs to the route, not to the GTFS feed.** Same\nspelling, different referential: never join it against `gtfs_stops`, and\nnever resolve it through `trips` or `stop_times`. An on-demand route has no\ntrip and no theoretical schedule, so there is nothing there to resolve.\n\nColours follow the GTFS form — six hex digits, no leading `#` — so a badge\nrenders through the very component a regular line uses.\n\n`stop_count` is not exposed: the caller already holds the list."},"OnDemandRoutePublicStatusSchema":{"type":"string","enum":["active","inactive"],"title":"OnDemandRoutePublicStatusSchema","description":"Wire form of the status, on the public contract.\n\n``archived`` is deliberately absent: the public endpoints never return an\narchived route, so leaving the value out of the enum makes that\nunrepresentable on the wire rather than merely filtered upstream.\n\n``inactive`` *is* here, and is the whole point of exposing the field: a QR\ncode printed on a bus shelter must not lead to an error page because the\noperator suspended the route for the season. The view opens and words its\nown message from this field and the validity period."},"OnDemandRouteStopPublicSchema":{"properties":{"stop_id":{"type":"string","title":"Stop Id","description":"Stable identifier of the stop within its route. Owned by the route: it never designates a stop of the GTFS feed, and must never be joined against `gtfs_stops`, `trips` or `stop_times`."},"stop_name":{"type":"string","title":"Stop Name","description":"Name of the stop, as shown to the passenger."},"stop_lat":{"type":"number","title":"Stop Lat","description":"Latitude of the stop."},"stop_lon":{"type":"number","title":"Stop Lon","description":"Longitude of the stop."}},"type":"object","required":["stop_id","stop_name","stop_lat","stop_lon"],"title":"OnDemandRouteStopPublicSchema","description":"A stop of an on-demand route, as a passenger display reads it.\n\nFields are spelled as in the GTFS so a stop renders through the same\ncomponents whether it belongs to a regular line or to an on-demand one."},"PCSchema":{"properties":{"boardings":{"type":"integer","title":"Boardings","description":"Passengers who got on.","default":0},"alightings":{"type":"integer","title":"Alightings","description":"Passengers who got off.","default":0},"loading":{"type":"integer","title":"Loading","description":"Passengers on board after those movements.","default":0}},"type":"object","title":"PCSchema","description":"Passengers counted on the trip, as the on-board system reported them."},"PassengerCountDetailsSchema":{"properties":{"agency_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agency Id","description":"Agency the route belongs to, as the GTFS declares it."},"alighting":{"type":"integer","title":"Alighting","description":"Passengers alighting.","default":0},"block_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Block Id","description":"Block the trip belongs to — the run a single vehicle chains."},"boarding":{"type":"integer","title":"Boarding","description":"Passengers boarding under the standard category.","default":0},"day_of_week":{"type":"string","title":"Day Of Week","description":"Weekday of the service day, in lowercase English."},"device_id":{"type":"string","title":"Device Id","description":"Device the count is attributed to."},"driver_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Driver Id","description":"Driver named by the device's most recent duty when the count was recorded — that duty may already have been closed. Null when the device has never opened one, or when it named no driver."},"gtfs_id":{"type":"string","title":"Gtfs Id","description":"GTFS the run belongs to; trip identifiers are scoped to it."},"location_type":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Location Type","description":"`location_type` the GTFS declares for the stop. Null on a temporary stop, which has no GTFS counterpart."},"route_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Id","description":"Route the trip runs on."},"route_long_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Long Name","description":"Full name of that route."},"route_short_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Short Name","description":"Badge that route is shown by."},"start_date":{"type":"string","format":"date-time","title":"Start Date","description":"Service day of the run. With the trip and the GTFS, it names one execution."},"stop_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stop Code","description":"Code the GTFS gives the stop. Null on a temporary stop."},"stop_id":{"type":"string","title":"Stop Id","description":"Stop the count was taken at."},"stop_lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Stop Lat","description":"Latitude of that stop, in decimal degrees."},"stop_lon":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Stop Lon","description":"Longitude of that stop, in decimal degrees."},"stop_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stop Name","description":"Name of that stop, as travellers are shown it."},"stop_sequence":{"anyOf":[{"type":"integer"},{"type":"number"}],"title":"Stop Sequence","description":"Position of the stop along the trip. An integer designates a scheduled GTFS stop; a fractional value such as `4.1` designates a temporary stop of a deviation."},"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Id","description":"**Deprecated** — pre-multi-team form of `teams`."},"teams":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Teams","description":"Teams the count is attached to: the trip's, or the device's when the trip carries none."},"total_boarding":{"type":"integer","title":"Total Boarding","description":"Passengers boarding, every category together.","default":0},"trip_formatted_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trip Formatted Name","description":"Name of the trip as the Pysae applications display it."},"trip_headsign":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trip Headsign","description":"Destination the trip shows passengers."},"trip_id":{"type":"string","title":"Trip Id","description":"Trip counted, within that GTFS."},"trip_short_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trip Short Name","description":"Short name the GTFS gives the trip."},"vehicle_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vehicle Id","description":"Vehicle named by the device's most recent duty when the count was recorded — that duty may already have been closed. Null when the device has never opened one, or when it named no vehicle."},"custom_boarding":{"additionalProperties":{"type":"integer"},"type":"object","title":"Custom Boarding","description":"Boardings per agency-defined category, keyed by category name."},"ts":{"type":"integer","title":"Ts","description":"When the count was stored, as epoch seconds."},"date":{"type":"string","format":"date-time","title":"Date","description":"That same instant, as a date and time."},"feed_type":{"type":"string","title":"Feed Type","description":"Discriminator of the trip feed: always `passenger-count` here.","default":"passenger-count"}},"type":"object","required":["day_of_week","device_id","gtfs_id","start_date","stop_id","stop_sequence","trip_id","custom_boarding","ts","date"],"title":"PassengerCountDetailsSchema","description":"A count taken at one stop of the trip, as the trip feed carries it."},"PassengerCountSchemaByDay":{"properties":{"total_boarding":{"type":"integer","title":"Total Boarding","description":"Boardings over the perimeter, every category together.","default":0},"boarding":{"type":"integer","title":"Boarding","description":"Boardings under the standard category alone.","default":0},"alighting":{"type":"integer","title":"Alighting","description":"Alightings over the perimeter.","default":0},"custom_boarding":{"additionalProperties":{"type":"integer"},"type":"object","title":"Custom Boarding","description":"Boardings per agency-defined category, keyed by category name. Categories sent as extra keys of the request are already counted in `total_boarding`; those posted directly under `custom` are not.","default":{}},"drivers":{"items":{"$ref":"#/components/schemas/Driver"},"type":"array","title":"Drivers","description":"Drivers the counted records name, resolved against the group's driver list. A record naming none adds nothing here.","default":[]},"vehicles":{"items":{"$ref":"#/components/schemas/Vehicle"},"type":"array","title":"Vehicles","description":"Vehicles the counted records name, resolved against the group's fleet. A record naming none adds nothing here.","default":[]},"date":{"type":"string","title":"Date","description":"Service date the figures cover, as a GTFS `YYYYMMDD` date."}},"type":"object","required":["date"],"title":"PassengerCountSchemaByDay","description":"Passenger counts totalled over one service date."},"PassengerCountSchemaByRoute":{"properties":{"total_boarding":{"type":"integer","title":"Total Boarding","description":"Boardings over the perimeter, every category together.","default":0},"boarding":{"type":"integer","title":"Boarding","description":"Boardings under the standard category alone.","default":0},"alighting":{"type":"integer","title":"Alighting","description":"Alightings over the perimeter.","default":0},"custom_boarding":{"additionalProperties":{"type":"integer"},"type":"object","title":"Custom Boarding","description":"Boardings per agency-defined category, keyed by category name. Categories sent as extra keys of the request are already counted in `total_boarding`; those posted directly under `custom` are not.","default":{}},"drivers":{"items":{"$ref":"#/components/schemas/Driver"},"type":"array","title":"Drivers","description":"Drivers the counted records name, resolved against the group's driver list. A record naming none adds nothing here.","default":[]},"vehicles":{"items":{"$ref":"#/components/schemas/Vehicle"},"type":"array","title":"Vehicles","description":"Vehicles the counted records name, resolved against the group's fleet. A record naming none adds nothing here.","default":[]},"route_id":{"type":"string","title":"Route Id","description":"Route the figures cover."},"route_short_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Short Name","description":"Short name of the route, as its GTFS carries it. Empty when the GTFS declares none."},"route_long_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Long Name","description":"Long name of the route, as its GTFS carries it. Empty when the GTFS declares none."}},"type":"object","required":["route_id","route_short_name","route_long_name"],"title":"PassengerCountSchemaByRoute","description":"Passenger counts totalled over one route.\n\nThe routes the group has deactivated are left out of the series entirely."},"PlanningSchema":{"properties":{"date":{"type":"string","title":"Date","description":"Service day the assignment holds for, as a GTFS `YYYYMMDD` date.","examples":["20201122"]},"driver_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Driver Id","description":"Driver committed to the trip. Null when the line commits none."},"vehicle_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vehicle Id","description":"Vehicle committed to the trip. Null when the line commits none."},"block_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Block Id","description":"Block the trip belongs to — the run a single vehicle chains."},"block_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Block Label","description":"Label the imported planning names that block by."},"hastus_duty_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hastus Duty Identifier","description":"Duty identifier carried over from Hastus, exactly as the import received it. It is not a Pysae identifier: resolving it to a driver goes through an external mapping."},"trip_id":{"type":"string","title":"Trip Id","description":"Trip the assignment holds for, within the group's GTFS."}},"type":"object","required":["date","trip_id"],"title":"PlanningSchema","description":"Who and what is forecast to operate a trip on a given day.\n\nAt least one of `driver_id`, `vehicle_id` and `block_id` has to be given;\na line assigning none of the three is refused."},"Problems":{"properties":{"distance":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Distance","description":"Whether it was taken too far from its first stop."},"kilometers":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Kilometers","description":"Whether too few reliable kilometres came back for it."},"time":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Time","description":"Whether it started too early or too late."}},"type":"object","title":"Problems","description":"Which of the group's validation rules the trip breached.\n\nA rule is flagged, never enforced: the trip stands, and the operator\narbitrates."},"PublicationFailureSchema":{"properties":{"at":{"type":"integer","title":"At","description":"When the publication was attempted, as epoch seconds.","examples":[1606003200]},"flow_run_id":{"type":"string","format":"uuid","title":"Flow Run Id","description":"Identifier of the run that failed, so support can trace it."}},"type":"object","required":["at","flow_run_id"],"title":"PublicationFailureSchema","description":"A scheduled publication of the GTFS that did not go through."},"PublicationTypeSchema":{"type":"string","enum":["instant","planned"],"title":"PublicationTypeSchema","description":"Whether a GTFS publication took effect at once or was set for a date."},"PunctualitySchema":{"properties":{"on_time":{"type":"integer","title":"On Time","description":"Passings whose delay falls inside the group's on-time interval."},"too_early":{"type":"integer","title":"Too Early","description":"Passings whose delay falls below that interval."},"too_late":{"type":"integer","title":"Too Late","description":"Passings whose delay falls above that interval."},"on_time_percentage":{"type":"number","title":"On Time Percentage","description":"`on_time` as a share of `total_count`, between 0 and 100."},"too_early_percentage":{"type":"number","title":"Too Early Percentage","description":"`too_early` as a share of `total_count`, between 0 and 100."},"too_late_percentage":{"type":"number","title":"Too Late Percentage","description":"`too_late` as a share of `total_count`, between 0 and 100."},"total_count":{"type":"integer","title":"Total Count","description":"Passings scored over the period, the denominator of the three percentages."}},"type":"object","required":["on_time","too_early","too_late","on_time_percentage","too_early_percentage","too_late_percentage","total_count"],"title":"PunctualitySchema","description":"How the passings observed over a period split across the three categories.\n\nA passing counts once per scheduled stop of a run — the figures are\ndeduplicated by GTFS, trip, service date and stop sequence — and the\nboundaries between early, on time and late are the delay intervals\nconfigured on the group."},"RCKDayStat":{"properties":{"recorded_commercial_km":{"type":"number","title":"Recorded Commercial Km","description":"Kilometres driven in commercial service over the period, measured from the positions the devices reported."},"theoretical_commercial_km":{"type":"number","title":"Theoretical Commercial Km","description":"Kilometres the schedule plans over the period, taken from the shape distance between the first and the last stop of every trip counted."},"unreliable_km":{"type":"number","title":"Unreliable Km","description":"Share of `recorded_commercial_km` measured across a doubtful step: 60 seconds or more between two positions, 3 km or more covered in one step, or a step whose elapsed time is unknown."},"deviated_km":{"type":"number","title":"Deviated Km","description":"Signed kilometres the shape deviations in force add to, or remove from, the planned distance."},"date":{"type":"string","title":"Date","description":"Service date the figures cover, as a GTFS `YYYYMMDD` date."},"reliable_km":{"type":"number","title":"Reliable Km","description":"`recorded_commercial_km` less `unreliable_km`.","readOnly":true},"percent_of_theoretical_km_recorded":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Percent Of Theoretical Km Recorded","description":"`recorded_commercial_km` as a percentage of `theoretical_commercial_km`, rounded to the unit. Null when the period plans nothing. Deviations are left out on purpose: the denominator stays the nominal schedule, the contractual reference.","readOnly":true},"theoretical_commercial_km_with_deviation":{"type":"number","title":"Theoretical Commercial Km With Deviation","description":"`theoretical_commercial_km` plus `deviated_km`: what the schedule plans once the shape deviations in force are counted in.","readOnly":true}},"type":"object","required":["date","reliable_km","percent_of_theoretical_km_recorded","theoretical_commercial_km_with_deviation"],"title":"RCKDayStat","description":"Kilometres driven and planned on one service date."},"RCKRouteStat":{"properties":{"recorded_commercial_km":{"type":"number","title":"Recorded Commercial Km","description":"Kilometres driven in commercial service over the period, measured from the positions the devices reported."},"theoretical_commercial_km":{"type":"number","title":"Theoretical Commercial Km","description":"Kilometres the schedule plans over the period, taken from the shape distance between the first and the last stop of every trip counted."},"unreliable_km":{"type":"number","title":"Unreliable Km","description":"Share of `recorded_commercial_km` measured across a doubtful step: 60 seconds or more between two positions, 3 km or more covered in one step, or a step whose elapsed time is unknown."},"deviated_km":{"type":"number","title":"Deviated Km","description":"Signed kilometres the shape deviations in force add to, or remove from, the planned distance."},"route_id":{"type":"string","title":"Route Id","description":"Route the figures cover."},"route_short_name":{"type":"string","title":"Route Short Name","description":"Short name of the route, as its GTFS carries it. Empty when the GTFS declares none.","default":""},"route_long_name":{"type":"string","title":"Route Long Name","description":"Long name of the route, as its GTFS carries it. Empty when the GTFS declares none.","default":""},"reliable_km":{"type":"number","title":"Reliable Km","description":"`recorded_commercial_km` less `unreliable_km`.","readOnly":true},"percent_of_theoretical_km_recorded":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Percent Of Theoretical Km Recorded","description":"`recorded_commercial_km` as a percentage of `theoretical_commercial_km`, rounded to the unit. Null when the period plans nothing. Deviations are left out on purpose: the denominator stays the nominal schedule, the contractual reference.","readOnly":true},"theoretical_commercial_km_with_deviation":{"type":"number","title":"Theoretical Commercial Km With Deviation","description":"`theoretical_commercial_km` plus `deviated_km`: what the schedule plans once the shape deviations in force are counted in.","readOnly":true}},"type":"object","required":["route_id","reliable_km","percent_of_theoretical_km_recorded","theoretical_commercial_km_with_deviation"],"title":"RCKRouteStat","description":"Kilometres driven and planned on one route over the period."},"RailDepartureSchema":{"properties":{"trip_id":{"type":"string","title":"Trip Id","description":"Identifier of the train's trip in its source GTFS."},"service_date":{"type":"string","title":"Service Date","description":"Service day the departure belongs to, `YYYYMMDD`. Not the calendar day of `scheduled_departure`: a train leaving at 00:40 belongs to the previous service day.","examples":["20260817"]},"uic":{"type":"string","title":"Uic","description":"UIC code of the station the train departs from.","examples":["87597005"]},"station_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Station Name","description":"Name of the station, as its source GTFS spells it."},"stop_id":{"type":"string","title":"Stop Id","description":"Identifier of the rail stop the train calls at, in the source GTFS — never a stop of your own network."},"platform":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform","description":"Platform (`voie`), from the GTFS `platform_code` of the stop. Optional by design: the SNCF national feed does not publish it, so expect `null` on baseline data."},"scheduled_departure":{"type":"string","format":"date-time","title":"Scheduled Departure","description":"Theoretical departure time. Always present — this is what the board is sorted and filtered on."},"scheduled_arrival":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduled Arrival","description":"Theoretical arrival time at the station, when timed."},"estimated_departure":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Estimated Departure","description":"Departure time as the realtime feed estimates it. `null` when no realtime covers this train — the theoretical time then stands alone."},"delay_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Delay Seconds","description":"Signed difference between the estimated and the theoretical departure, in seconds. Negative when the train runs early."},"status":{"$ref":"#/components/schemas/RailDepartureStatus","description":"`scheduled` means no realtime is available for this train, not that it is on time. `on_time`, `delayed` and `early` are realtime verdicts; `canceled` is a cancelled trip, `skipped` a train no longer calling at this station, `added` a train absent from the timetable."},"route_id":{"type":"string","title":"Route Id","description":"Identifier of the route in its source GTFS."},"route_type":{"type":"integer","title":"Route Type","description":"GTFS `route_type` of the route. Every mode calling at the station is returned, road replacement coaches (`Car TER`, `route_type` 3) included — filter client-side if you only want trains.","examples":[2]},"route_short_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Short Name","description":"Short name of the route, e.g. `TER`."},"route_long_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Long Name","description":"Long name of the route."},"route_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Color","description":"Route colour, hexadecimal without `#`."},"route_text_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Text Color","description":"Route text colour, hexadecimal without `#`."},"trip_headsign":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trip Headsign","description":"Headsign of the trip, as the GTFS carries it."},"trip_short_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trip Short Name","description":"Short name of the trip — the train number, in practice.","examples":["864122"]},"direction_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Direction Id","description":"GTFS `direction_id` of the trip."},"destination":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination","description":"What to display as the train's destination: the stop headsign, else the trip headsign, else the name of the trip's last stop."},"disruptions":{"items":{"$ref":"#/components/schemas/RailDisruptionSchema"},"type":"array","title":"Disruptions","description":"Realtime alerts covering this train, its route, its station or its whole network, and active at the departure time. Empty when no realtime is available.","default":[]},"source_id":{"type":"string","title":"Source Id","description":"Which rail source the row was consolidated from: the SNCF baseline, or your own source when it publishes the same `(trip_id, service_date, uic)` call and therefore replaces it."}},"type":"object","required":["trip_id","service_date","uic","stop_id","scheduled_departure","status","route_id","route_type","source_id"],"title":"RailDepartureSchema","description":"One train calling at a rail station, on the departure board.\n\nThe theoretical times come from a rail GTFS and are consolidated with\nwhatever realtime covers the train; a row with no realtime keeps the\ntheoretical times alone."},"RailDepartureStatus":{"type":"string","enum":["scheduled","on_time","early","delayed","canceled","skipped","added"],"title":"RailDepartureStatus","description":"What the realtime says about one scheduled call.\n\n``SCHEDULED`` is the absence of realtime, not a realtime verdict: the\nboard falls back to it whenever no entity covers the trip."},"RailDisruptionSchema":{"properties":{"entity_id":{"type":"string","title":"Entity Id","description":"Identifier of the alert in the realtime feed it comes from. Stable across polls, so a client can keep an alert it already displayed from flashing again."},"cause":{"$ref":"#/components/schemas/RailRtAlertCause","description":"`Alert.Cause` of the GTFS-realtime specification."},"effect":{"$ref":"#/components/schemas/RailRtAlertEffect","description":"`Alert.Effect` of the GTFS-realtime specification."},"header":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Header","description":"Short title of the disruption, in French when the feed publishes a French translation."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Full text of the disruption, same language choice."}},"type":"object","required":["entity_id","cause","effect"],"title":"RailDisruptionSchema","description":"A realtime alert covering a departure, in GTFS-realtime terms."},"RailLinkIngestionStatus":{"type":"string","enum":["pending","ready","not_found"],"title":"RailLinkIngestionStatus","description":"Where the station's data stands in the global rail store.\n\n``pending`` — the targeted ingestion of the UIC was requested and has\nnot landed yet; ``ready`` — the store serves the station's departures;\n``not_found`` — the store was refreshed but no trip of the current\nnational GTFS serves this station."},"RailRtAlertCause":{"type":"string","enum":["UNKNOWN_CAUSE","OTHER_CAUSE","TECHNICAL_PROBLEM","STRIKE","DEMONSTRATION","ACCIDENT","HOLIDAY","WEATHER","MAINTENANCE","CONSTRUCTION","POLICE_ACTIVITY","MEDICAL_EMERGENCY"],"title":"RailRtAlertCause","description":"``Alert.Cause`` of the GTFS-RT spec."},"RailRtAlertEffect":{"type":"string","enum":["NO_SERVICE","REDUCED_SERVICE","SIGNIFICANT_DELAYS","DETOUR","ADDITIONAL_SERVICE","MODIFIED_SERVICE","OTHER_EFFECT","UNKNOWN_EFFECT","STOP_MOVED"],"title":"RailRtAlertEffect","description":"``Alert.Effect`` of the GTFS-RT spec."},"RailStationLinkSchema":{"properties":{"stop_id":{"type":"string","title":"Stop Id","description":"Identifier of the stop in your network's GTFS."},"uic":{"type":"string","title":"Uic","description":"UIC code of the rail station the stop is attached to."},"stop_name":{"type":"string","title":"Stop Name","description":"Display name of the stop, as snapshotted on the link."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When the link was first created."},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By","description":"User who first created the link, when known."},"is_orphan":{"type":"boolean","title":"Is Orphan","description":"`true` when the stop is absent from the currently published GTFS of the group — including when the group has no published GTFS. The link is kept either way; the flag lets you surface it."},"ingestion_status":{"$ref":"#/components/schemas/RailLinkIngestionStatus","description":"Where the station's rail data stands. `pending`: the station is being ingested, its departure board is not queryable yet. `ready`: departures are queryable. `not_found`: no trip of the current national GTFS serves this station."}},"type":"object","required":["stop_id","uic","stop_name","created_at","is_orphan","ingestion_status"],"title":"RailStationLinkSchema","description":"A stop of the group attached to a rail station, as the link now stands.\n\nBeyond what was submitted, it reports whether the stop still exists in the\npublished GTFS and how far the station's rail data has been ingested."},"RailStationNotFound":{"properties":{"code":{"type":"string","const":"RAIL_STATION_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"No rail station carries this UIC code","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/RailStationNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RailStationNotFound","description":"No rail station carries this UIC code"},"RailStationNotFoundPayload":{"properties":{"uic":{"type":"string","title":"Uic","description":"UIC code that matched no station of the referential."}},"type":"object","required":["uic"],"title":"RailStationNotFoundPayload","description":"Context of the RailStationNotFound error: the values identifying the entities involved in this specific occurrence."},"RailStationPageSchema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RailStationSchema"},"type":"array","title":"Items","description":"Stations of this page — by increasing distance when `near` was passed, by name otherwise."},"total":{"type":"integer","title":"Total","description":"Total amount of stations matching the filters, across all pages."},"page":{"type":"integer","title":"Page","description":"1-based index of the returned page."},"page_size":{"type":"integer","title":"Page Size","description":"Amount of items per page."}},"type":"object","required":["items","total","page","page_size"],"title":"RailStationPageSchema","description":"One page of the station referential, and what it takes to walk it."},"RailStationSchema":{"properties":{"uic":{"items":{"type":"string"},"type":"array","title":"Uic","description":"Every UIC code the station is known by. A large station is reachable by several (Paris Gare du Nord carries three); each code identifies exactly one station."},"name":{"type":"string","title":"Name","description":"Station name, as SNCF publishes it."},"short_label":{"type":"string","title":"Short Label","description":"Three-letter SNCF code (`CTX`, `PNO`, …)."},"segments_drg":{"items":{"type":"string"},"type":"array","title":"Segments Drg","description":"DRG frequentation segments (`A` busiest to `C`). The source gives one per UIC code, so a station with several codes can carry several segments."},"lat":{"type":"number","title":"Lat","description":"Latitude, WGS 84 decimal degrees."},"lon":{"type":"number","title":"Lon","description":"Longitude, WGS 84 decimal degrees."},"insee_code":{"type":"string","title":"Insee Code","description":"INSEE code of the commune the station sits in."},"source_ref":{"type":"string","title":"Source Ref","description":"Identifier of the record in the SNCF `gares-de-voyageurs` dataset, for tracing a station back to its source."},"distance_meters":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Distance Meters","description":"Distance from the `near` point, in metres. Only present when `near` was passed."}},"type":"object","required":["uic","name","short_label","segments_drg","lat","lon","insee_code","source_ref"],"title":"RailStationSchema","description":"One station of the SNCF passenger-station referential.\n\nOpen data reloaded from the `gares-de-voyageurs` dataset, so it carries no\nservice and no real-time information — only what identifies and locates the\nstation."},"RatingByDriverVersionSchema":{"properties":{"driver_version":{"type":"string","title":"Driver Version","description":"Version of the app the ratings are about."},"avrage_rating":{"type":"number","title":"Avrage Rating","description":"Mean of the scores given to that version. The misspelt name is the wire contract and is kept as is."}},"type":"object","required":["driver_version","avrage_rating"],"title":"RatingByDriverVersionSchema","description":"Ratings of the Pysae Driver app aggregated over one app version."},"RatingByGroupSchema":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Group the ratings were given in."},"average_rating":{"type":"number","title":"Average Rating","description":"Mean of the scores that group's drivers gave."}},"type":"object","required":["group_id","average_rating"],"title":"RatingByGroupSchema","description":"Ratings of the Pysae Driver app aggregated over one group."},"RatingSchema":{"properties":{"driver_version":{"type":"string","title":"Driver Version","description":"Version of the app the rating is about."},"rating":{"type":"integer","title":"Rating","description":"Score the driver gave, on the scale the app presents: the API stores it without bounding it."},"comment":{"type":"string","title":"Comment","description":"What the driver wrote along with it."},"driver_id":{"type":"string","title":"Driver Id","description":"Driver who rated the app."},"ts":{"type":"string","format":"date-time","title":"Ts","description":"Moment the rating was given."},"group_id":{"type":"string","title":"Group Id","description":"Group the rating was given in."}},"type":"object","required":["driver_version","rating","comment","driver_id","group_id"],"title":"RatingSchema","description":"A rating a driver gave the Pysae Driver app, as it was recorded."},"RecipientCreateSchema":{"properties":{"address":{"type":"string","title":"Address","description":"Who receives it: `op` for the operating interface, or `device_id:<id>` for one driver's device. Nothing else is accepted."},"read":{"type":"boolean","title":"Read","description":"Whether the recipient has opened it.","default":false},"delivered":{"type":"boolean","title":"Delivered","description":"Whether it reached the recipient at all.","default":false}},"type":"object","required":["address"],"title":"RecipientCreateSchema","description":"One addressee of the message, and where its delivery stands."},"RecipientDeprecated":{"properties":{"address":{"type":"string","title":"Address","description":"Who receives it: `op` for the operating interface, or `device_id:<id>` for one driver's device."},"read":{"anyOf":[{"type":"boolean"},{"type":"number"}],"title":"Read","description":"When the recipient opened it, as epoch seconds; `false` while they have not."},"delivered":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"integer"}],"title":"Delivered","description":"When it reached the recipient, as epoch seconds; `false` while it has not."}},"type":"object","required":["address","read","delivered"],"title":"RecipientDeprecated","description":"One addressee of the message, in the shape earlier clients read.\n\nThe two delivery marks are timestamps rather than flags: `false` means it\nhas not happened, a number says when it did."},"RelatedFile":{"properties":{"file_name":{"type":"string","title":"File Name","description":"Name of the file inside the GTFS archive."},"line":{"anyOf":[{"$ref":"#/components/schemas/RelatedLine"},{"type":"null"}],"description":"The offending line of that file. Null when the issue is not tied to one line."}},"type":"object","required":["file_name"],"title":"RelatedFile","description":"Represent a file that is causing an issue"},"RelatedLine":{"properties":{"line_number":{"type":"integer","title":"Line Number","description":"Number of the offending line in the file."},"headers":{"items":{"type":"string"},"type":"array","title":"Headers","description":"Column headers of the file, in file order."},"values":{"items":{"type":"string"},"type":"array","title":"Values","description":"Values held by that line, in the same order as `headers`."}},"type":"object","required":["line_number","headers","values"],"title":"RelatedLine","description":"Represent a line that is causing an issue"},"RelatedObject":{"properties":{"id":{"type":"string","title":"Id","description":"Identifier of the related object, as its GTFS spells it."},"object_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Object Type","description":"GTFS type of the related object — a stop, a route, a trip. Null when the validator could not name it."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Name of the related object, when the GTFS carries one."}},"type":"object","required":["id"],"title":"RelatedObject","description":"Represents an object related to another object that is causing an issue."},"Response":{"properties":{"metadata":{"anyOf":[{"$ref":"#/components/schemas/Metadata"},{"type":"null"}],"description":"What the validator read from the archive. Null when it could not be produced."},"validations":{"additionalProperties":{"items":{"$ref":"#/components/schemas/Issue"},"type":"array"},"propertyNames":{"$ref":"#/components/schemas/IssueType"},"type":"object","title":"Validations","description":"Issues found, grouped by issue type. A type nothing was found for is absent."}},"type":"object","required":["validations"],"title":"Response","description":"Holds the issues and metadata about the GTFS."},"RoleSchema":{"properties":{"_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"Identifier the API stores the role under. Roles are addressed by their user, not by this identifier."},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id","description":"User the role is granted to."},"role":{"$ref":"#/components/schemas/RoleType","description":"Access level granted on the group."},"teams":{"items":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"array","title":"Teams","description":"Teams the role is restricted to: the user then only sees the drivers and vehicles attached to them. Empty restricts the role to those attached to no team.","default":[]}},"type":"object","required":["role"],"title":"RoleSchema","description":"Role a user holds on the group.\n\nA role is scoped to one group — the same user carries a separate role on\neach group they reach — and may be restricted to some of its teams."},"RoleType":{"type":"string","enum":["admin","driver","external_reader","operator","regulator","vehicle","reader","limited_reader","technical"],"title":"RoleType","description":"Access level a user holds on a group.\n\nIt governs which endpoints the user may reach and which data they\nsee."},"RoleTypeValue":{"type":"string","enum":["admin","operator","regulator","driver","vehicle","reader","technical","limited_reader","external_reader"],"title":"RoleTypeValue","description":"Access level a session or an API key carries on a group.\n\nIt governs which endpoints the caller may reach and which data it\nsees."},"RouteGTFSSchema":{"properties":{"agency_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agency Id","description":"Agency operating the route. Optional, and usually unset when the GTFS declares a single agency."},"route_color":{"anyOf":[{"type":"string","pattern":"[A-Fa-f0-9]{6}"},{"type":"null"}],"title":"Route Color","description":"Colour the route is drawn in, as six hexadecimal digits without a leading ``#``. White when unset."},"route_desc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Desc","description":"Description of the service the route offers, meant to add to its names rather than repeat them."},"route_id":{"type":"string","title":"Route Id","description":"Identifier of the route, unique within its GTFS."},"route_long_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Long Name","description":"Full name of the route, usually its two termini or the area it serves."},"route_short_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Short Name","description":"Short name of the route: the number or letter travellers identify it by."},"route_sort_order":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Route Sort Order","description":"Rank of the route when routes are presented in the operator's own order; the smaller value comes first."},"route_text_color":{"anyOf":[{"type":"string","pattern":"[A-Fa-f0-9]{6}"},{"type":"null"}],"title":"Route Text Color","description":"Colour of the text drawn over ``route_color``, as six hexadecimal digits without a leading ``#``. Black when unset."},"route_type":{"type":"string","title":"Route Type","description":"GTFS route type: the mode the route runs on, ``3`` for a bus, ``0`` for a tram. Serialized as a string, not a number, and grouped in thousands past ``999``: the extended type ``1400`` (funicular) goes out as ``\"1,400\"``. Strip the separator before parsing it back to an integer."},"route_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Url","description":"Page dedicated to this route, distinct from the agency's own page."}},"type":"object","required":["route_id","route_type"],"title":"RouteGTFSSchema","description":"A route of the GTFS: the trips travellers know as one line.\n\nFields carry their ``routes.txt`` names and meaning; the GTFS requires at\nleast one of ``route_short_name`` and ``route_long_name``."},"RoutePunctualitySchema":{"properties":{"on_time":{"type":"integer","title":"On Time","description":"Passings whose delay falls inside the group's on-time interval."},"too_early":{"type":"integer","title":"Too Early","description":"Passings whose delay falls below that interval."},"too_late":{"type":"integer","title":"Too Late","description":"Passings whose delay falls above that interval."},"on_time_percentage":{"type":"number","title":"On Time Percentage","description":"`on_time` as a share of `total_count`, between 0 and 100."},"too_early_percentage":{"type":"number","title":"Too Early Percentage","description":"`too_early` as a share of `total_count`, between 0 and 100."},"too_late_percentage":{"type":"number","title":"Too Late Percentage","description":"`too_late` as a share of `total_count`, between 0 and 100."},"total_count":{"type":"integer","title":"Total Count","description":"Passings scored over the period, the denominator of the three percentages."},"route_id":{"type":"string","title":"Route Id","description":"Route the figures cover."},"route_long_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Long Name","description":"Long name of the route, as its GTFS carries it. Empty when the GTFS declares none."},"route_short_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Short Name","description":"Short name of the route, as its GTFS carries it. Empty when the GTFS declares none."}},"type":"object","required":["on_time","too_early","too_late","on_time_percentage","too_early_percentage","too_late_percentage","total_count","route_id"],"title":"RoutePunctualitySchema","description":"Punctuality of one route over the period.\n\nThe routes the group has deactivated are left out of the series entirely."},"RouteSchema":{"properties":{"id":{"type":"string","title":"Id","description":"Identifier of the route in its GTFS."},"color":{"anyOf":[{"type":"string","examples":["01af9c","Ab8C62"]},{"type":"null"}],"title":"Color","description":"Background colour of the route badge, six hex digits."},"long_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Long Name","description":"Full name of the route."},"short_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Short Name","description":"Badge the route is shown by."},"text_color":{"anyOf":[{"type":"string","examples":["01af9c","Ab8C62"]},{"type":"null"}],"title":"Text Color","description":"Colour of the text on that badge, six hex digits."}},"type":"object","required":["id"],"title":"RouteSchema","description":"The route the trip runs on."},"ScheduledTripSchema":{"properties":{"id":{"type":"string","title":"Id","description":"Identifier of the trip in its GTFS."},"arrival_time":{"type":"number","title":"Arrival Time","description":"Scheduled arrival at the last stop, as epoch seconds."},"departure_time":{"type":"number","title":"Departure Time","description":"Scheduled departure from the first stop, as epoch seconds."},"service_date":{"type":"string","title":"Service Date","description":"Service day the trip runs on. With the identifier and the GTFS, it names one execution.","examples":["20201122"]},"formatted_name":{"type":"string","title":"Formatted Name","description":"Name of the trip as the Pysae applications display it."},"route":{"$ref":"#/components/schemas/RouteSchema","description":"Route the trip runs on."},"first_stop":{"$ref":"#/components/schemas/TripStopSchema","description":"Where the trip starts."},"last_stop":{"$ref":"#/components/schemas/TripStopSchema","description":"Where the trip ends."},"block_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Block Id","description":"Block the trip belongs to — the run a single vehicle chains."},"headsign":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Headsign","description":"Destination shown to passengers."},"tk":{"type":"number","title":"Tk","description":"Kilometres the trip covered, as measured."},"gtfs":{"items":{"$ref":"#/components/schemas/FileSchema"},"type":"array","title":"Gtfs","description":"GTFS datasets carrying this trip. More than one when several are in force over the service day."},"team":{"anyOf":[{"$ref":"#/components/schemas/TeamSchema"},{"type":"null"}],"description":"**Deprecated** — pre-multi-team form of `teams`.","deprecated":true},"teams":{"anyOf":[{"items":{"$ref":"#/components/schemas/TeamSchema"},"type":"array"},{"type":"null"}],"title":"Teams","description":"Teams the trip is attached to."},"updates":{"$ref":"#/components/schemas/UpdateSchema","description":"What the operator changed against the schedule."},"service":{"$ref":"#/components/schemas/Service","description":"Who and what operated the trip."},"status":{"$ref":"#/components/schemas/TripStatus","description":"How the trip was operated.","default":"scheduled"},"temporality":{"$ref":"#/components/schemas/Temporality","description":"Whether the trip is past, running, or to come.","default":"future"}},"type":"object","required":["id","arrival_time","departure_time","service_date","formatted_name","route","first_stop","last_stop"],"title":"ScheduledTripSchema","description":"A trip of one service day, as scheduled and as it was operated."},"SenderCreateSchema":{"properties":{"client":{"$ref":"#/components/schemas/Client","description":"Application the message is sent from."},"device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Id","description":"Device the driver sent it from. Required when the sender is the Pysae Driver app."},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id","description":"User who sent it from the operating interface."},"trip":{"anyOf":[{"$ref":"#/components/schemas/TripDeprecated"},{"type":"null"}],"description":"Trip the driver was operating when they sent it."},"coordinates":{"anyOf":[{"prefixItems":[{"type":"number"},{"type":"number"}],"type":"array","maxItems":2,"minItems":2},{"type":"null"}],"title":"Coordinates","description":"Coordonnées au format Latitude/Longitude"}},"type":"object","required":["client"],"title":"SenderCreateSchema","description":"Who is sending the message, and from where.\n\nA message sent from the Pysae Driver app must name the device it came\nfrom; one sent from the operating interface names its user instead."},"SenderDeprecated":{"properties":{"client":{"type":"string","title":"Client","description":"Application the message was sent from."},"device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Id","description":"Device the driver sent it from. Null when it came from the operating interface."},"trip":{"anyOf":[{"$ref":"#/components/schemas/TripDeprecated"},{"type":"null"}],"description":"Trip the driver was operating when they sent it."},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id","description":"User who sent it from the operating interface."},"coordinates":{"anyOf":[{"prefixItems":[{"type":"number"},{"type":"number"}],"type":"array","maxItems":2,"minItems":2},{"type":"null"}],"title":"Coordinates","description":"Coordonnées au format Latitude/Longitude"}},"type":"object","required":["client"],"title":"SenderDeprecated","description":"Who sent the message, and from where, in the shape earlier clients read."},"SequenceModeTripFilter":{"properties":{"block_id":{"type":"string","title":"Block Id","description":"Si `drive_mode=sequence`, référence vers `gtfs<gtfs_id>.trips.block_id` du service sélectionné"}},"type":"object","required":["block_id"],"title":"SequenceModeTripFilter","description":"Trip filter of a device driving a whole block, one trip after another."},"Service":{"properties":{"recorded_stops":{"type":"integer","title":"Recorded Stops","description":"Stops a passage was recorded at.","default":0},"planned_stops":{"type":"integer","title":"Planned Stops","description":"Stops the schedule holds for the trip.","default":0}},"type":"object","title":"Service","description":"How much of the trip was actually observed."},"Severity":{"type":"string","enum":["Fatal","Error","Warning","Information"],"title":"Severity","description":"Represents the severity of an Issue."},"ShapeGTFSSchema":{"properties":{"geometry":{"$ref":"#/components/schemas/GeometrySchema","description":"Where the itinerary runs, as a GeoJSON `LineString`."},"routes":{"items":{"type":"string"},"type":"array","title":"Routes","description":"Routes whose trips follow this itinerary. Derived from those trips, but refreshed only when they are written: deleting the last trip of an itinerary leaves the list as it was."},"shape_id":{"type":"string","title":"Shape Id","description":"Identifier trips reference the itinerary by."},"source":{"$ref":"#/components/schemas/Source","description":"Producer of the line. Read-only in practice: every itinerary this API writes is stored as `generated`.","default":"generated"}},"type":"object","required":["geometry","routes","shape_id"],"title":"ShapeGTFSSchema","description":"Itinerary of the GTFS `shapes.txt`, as one line rather than as points.\n\nThe file carries a row per point; the API assembles them and returns the\nwhole line, so nothing has to be re-ordered by the caller."},"SiriCapabilities":{"properties":{"groupId":{"type":"string","title":"Groupid","description":"Identifier of the group the services are exposed for."},"services":{"items":{"$ref":"#/components/schemas/SiriServiceCapability"},"type":"array","title":"Services","description":"Only the services the group can actually answer: one whose source data is missing — no vehicle, no alert, no static transport plan — is left out of the list rather than advertised empty."},"subscribeUrl":{"type":"string","title":"Subscribeurl","description":"Absolute URL of the unified subscription endpoint."}},"type":"object","required":["groupId","services","subscribeUrl"],"title":"SiriCapabilities","description":"JSON capabilities document for a group's SIRI feed."},"SiriServiceCapability":{"properties":{"code":{"type":"string","title":"Code","description":"Lower-case SIRI service code: vm, et, sm, gm, sx, pt, ct."},"label":{"type":"string","title":"Label","description":"Human-readable label, e.g. 'Vehicle Monitoring'."},"url":{"type":"string","title":"Url","description":"Absolute URL of the request/response endpoint."},"supportsSubscription":{"type":"boolean","title":"Supportssubscription","description":"True when this service supports the SIRI subscription flow."}},"type":"object","required":["code","label","url","supportsSubscription"],"title":"SiriServiceCapability","description":"One SIRI service exposed by the gtfsrt-to-siri converter for a group."},"SmsCountResponse":{"properties":{"count":{"type":"integer","title":"Count","description":"Notifications counted for the period — the current UTC month unless the ``period`` query parameter names another one. Zero when the group sent none."},"limit":{"type":"integer","title":"Limit","description":"Notifications the group may send over a calendar month."}},"type":"object","required":["count","limit"],"title":"SmsCountResponse","description":"The group's notification usage over a month, against its allowance."},"Source":{"type":"string","enum":["generated","unknown","com.pysae.editor"],"title":"Source","description":"Which producer wrote an itinerary's line.\n\nEverything this API writes is `generated`, whether the line was assembled\nfrom the imported `shapes.txt` or computed for trips carrying none. The\nother two are only ever read back, from itineraries another producer wrote."},"Stats":{"properties":{"stops_count":{"type":"integer","title":"Stops Count","description":"Stops declared in `stops.txt`, of every location type."},"stop_areas_count":{"type":"integer","title":"Stop Areas Count","description":"Stops that are stations rather than boarding points."},"stop_points_count":{"type":"integer","title":"Stop Points Count","description":"Stops that are boarding points."},"stops_with_wheelchair_info_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stops With Wheelchair Info Count","description":"Stops declaring `wheelchair_boarding`. Null when the validator did not report it."},"routes_count":{"type":"integer","title":"Routes Count","description":"Routes declared in `routes.txt`."},"routes_with_custom_color_count":{"type":"integer","title":"Routes With Custom Color Count","description":"Routes declaring a `route_color` of their own."},"routes_with_short_name_count":{"type":"integer","title":"Routes With Short Name Count","description":"Routes declaring a `route_short_name`."},"routes_with_long_name_count":{"type":"integer","title":"Routes With Long Name Count","description":"Routes declaring a `route_long_name`."},"trips_count":{"type":"integer","title":"Trips Count","description":"Trips declared in `trips.txt`."},"trips_with_bike_info_count":{"type":"integer","title":"Trips With Bike Info Count","description":"Trips declaring `bikes_allowed`."},"trips_with_wheelchair_info_count":{"type":"integer","title":"Trips With Wheelchair Info Count","description":"Trips declaring `wheelchair_accessible`."},"trips_with_shape_count":{"type":"integer","title":"Trips With Shape Count","description":"Trips referencing an itinerary of `shapes.txt`."},"trips_with_trip_headsign_count":{"type":"integer","title":"Trips With Trip Headsign Count","description":"Trips declaring a `trip_headsign`."},"transfers_count":{"type":"integer","title":"Transfers Count","description":"Rows declared in `transfers.txt`."},"fares_attribute_count":{"type":"integer","title":"Fares Attribute Count","description":"Rows declared in `fare_attributes.txt`."},"fares_rules_count":{"type":"integer","title":"Fares Rules Count","description":"Rows declared in `fare_rules.txt`."}},"type":"object","required":["stops_count","stop_areas_count","stop_points_count","routes_count","routes_with_custom_color_count","routes_with_short_name_count","routes_with_long_name_count","trips_count","trips_with_bike_info_count","trips_with_wheelchair_info_count","trips_with_shape_count","trips_with_trip_headsign_count","transfers_count","fares_attribute_count","fares_rules_count"],"title":"Stats","description":"What the GTFS holds, counted table by table.\n\nThe counts are of the rows the validator actually parsed, so they say what\nthe archive really carries rather than what it announces."},"StopGTFSLocationType":{"type":"integer","enum":[0,1],"title":"StopGTFSLocationType","description":"What a `stops.txt` record designates.\n\nThese are the only two values this API returns: `0` a boarding point\nwhere passengers get on and off, `1` a station grouping several of them."},"StopGTFSSchema":{"properties":{"stop_id":{"type":"string","title":"Stop Id","description":"Identifier the stop times reference this place by."},"location_type":{"anyOf":[{"$ref":"#/components/schemas/StopGTFSLocationType"},{"type":"null"}],"description":"Whether the record is a boarding point or a station. Empty means a boarding point, as in the GTFS specification."},"parent_station":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Station","description":"Identifier of the station this boarding point belongs to. Empty on a station, and on a boarding point attached to none."},"platform_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Code","description":"Platform within the parent station, given as the identifier alone — `G`, not `Platform G`."},"stop_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stop Code","description":"Short code passengers use to designate the stop, as printed on the pole or given to a phone service. Distinct from `stop_id`, which is the feed's own identifier."},"stop_desc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stop Desc","description":"Description of the place, meant to add to `stop_name` rather than repeat it."},"stop_lat":{"type":"number","title":"Stop Lat","description":"Latitude, WGS 84 decimal degrees."},"stop_lon":{"type":"number","title":"Stop Lon","description":"Longitude, WGS 84 decimal degrees."},"stop_name":{"type":"string","title":"Stop Name","description":"Name of the place, as passengers are to read it."},"stop_timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stop Timezone","description":"Timezone of the place, as an IANA name. Empty when it follows the timezone of its agency."},"stop_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stop Url","description":"URL of a page about this place in particular, not the agency's home page."},"wheelchair_boarding":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Wheelchair Boarding","description":"`0` or empty says nothing, `1` that some vehicles can be boarded from here in a wheelchair, `2` that none can."},"zone_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zone Id","description":"Fare zone the place belongs to, as the fare rules of the GTFS reference it."}},"type":"object","required":["stop_id","stop_lat","stop_lon","stop_name"],"title":"StopGTFSSchema","description":"Place a trip calls at, from the GTFS `stops.txt`.\n\nBoth a boarding point and the station grouping several of them are\ndescribed by this same shape; `location_type` tells the two apart."},"StopInfo":{"properties":{"stop_sequence":{"anyOf":[{"type":"integer"},{"type":"number"}],"title":"Stop Sequence","description":"Position of the stop in the trip, per the current GTFS."},"information":{"type":"string","title":"Information","description":"Text shown to travellers for that stop."},"stop_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stop Name","description":"Name of the stop, when the entry carries it."},"stop_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stop Id","description":"Identifier of the stop, to re-locate it if the GTFS moved."}},"type":"object","required":["stop_sequence","information"],"title":"StopInfo","description":"A message the operator attaches to one stop of the trip."},"StopInfoSchema":{"properties":{"stop_sequence":{"anyOf":[{"type":"integer"},{"type":"number"}],"title":"Stop Sequence","description":"Rank of the stop in the trip's sequence, as the GTFS orders it."},"information":{"type":"string","title":"Information","description":"Message to show travellers at that stop."}},"type":"object","required":["stop_sequence","information"],"title":"StopInfoSchema","description":"A note the trip's update carries for one of its stops."},"StopTimeGTFSNestedSchema":{"properties":{"stop_sequence":{"type":"integer","title":"Stop Sequence","description":"Rank of the call along the trip. It increases from one call to the next but need not be consecutive, so a stop can be inserted without renumbering the others."},"stop_id":{"type":"string","title":"Stop Id","description":"Identifier of the place called at, from `stops.txt`."},"arrival_time":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Arrival Time","description":"Arrival, in seconds since midnight starting the service day. A `HH:MM:SS` string is accepted on input and converted to that count; a call after midnight goes past `86400` rather than wrapping, so `25:10:00` is `90600`."},"departure_time":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Departure Time","description":"Departure, on the same convention as `arrival_time`. It is the departure that a trip's own start time is read from."},"stop_headsign":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stop Headsign","description":"Destination to show passengers at this call, overriding the trip's `trip_headsign` there."},"pickup_type":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pickup Type","description":"How passengers board: `0` or empty regularly, `1` not at all, `2` by phoning the agency, `3` by arranging it with the driver."},"drop_off_type":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Drop Off Type","description":"How passengers alight, on the same scale as `pickup_type`."},"continuous_pickup":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Continuous Pickup","description":"Whether the vehicle can be flagged down between this call and the next: `0` continuously, `1` or empty not at all, `2` by phoning the agency, `3` by arranging it with the driver."},"shape_dist_traveled":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Shape Dist Traveled","description":"Distance from the start of the trip's itinerary to this call, measured along that itinerary, so the length between two calls is the difference of their values. The GTFS specification leaves the unit to the producer: a value Pysae computes is in metres, a value kept from an imported feed carries the unit that feed's producer chose. When the trip carries a `shape_id`, Pysae recomputes this value on every write and on the `shape-dist-traveled` task, replacing whatever was supplied unless that task is called with `keep-existing=true`."},"timepoint":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Timepoint","description":"`1` or empty when the times are exact, `0` when they are approximate and the vehicle is not held to them."}},"type":"object","required":["stop_sequence","stop_id"],"title":"StopTimeGTFSNestedSchema","description":"Call of a trip at one stop, from the GTFS `stop_times.txt`.\n\nThe times are counts of seconds, not clock strings: see `arrival_time`."},"StopTimeSchema":{"properties":{"gtfs_id":{"type":"string","title":"Gtfs Id","description":"GTFS the trip belongs to."},"trip_id":{"type":"string","title":"Trip Id","description":"Trip this passing time belongs to, within that GTFS."},"stop_id":{"type":"string","title":"Stop Id","description":"Stop the time is given for."},"departure_time":{"type":"integer","title":"Departure Time","description":"Scheduled departure, in seconds since the service day's midnight — GTFS style, so it may pass 24 h."},"departure_ts":{"type":"integer","title":"Departure Ts","description":"The same scheduled departure, as epoch seconds."},"stop_sequence":{"anyOf":[{"type":"integer"},{"type":"number"}],"title":"Stop Sequence","description":"Position of the stop in the trip, as the GTFS orders it."},"route_id":{"type":"string","title":"Route Id","description":"Route the trip runs on."},"trip_headsign":{"type":"string","title":"Trip Headsign","description":"Destination the trip shows passengers."},"shape_id":{"type":"string","title":"Shape Id","description":"Itinerary the trip follows."},"start_date":{"type":"string","title":"Start Date","description":"Service day of the trip, as a GTFS `YYYYMMDD` date. With the trip and the GTFS, it names one execution."},"block_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Block Id","description":"Block the trip belongs to — the run a single vehicle chains."},"pickup_type":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pickup Type","description":"`pickup_type` the GTFS declares at that stop."},"first_stop":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"First Stop","description":"Whether that stop is the first one of the trip."},"last_stop":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Last Stop","description":"Whether that stop is the last one of the trip."},"device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Id","description":"Device following the trip, and whose delay the estimates are built on. Null while no device took it."},"estimated_stop":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Estimated Stop","description":"Whether the times of that stop are still estimates. The vehicle has not passed yet, so they are the schedule shifted by the device's delay; once it has, the recorded times stand."},"current_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Status","description":"Where the device stands against that stop: `PASSED` once it is behind, and at the stop the device is on whether it is on its way there, coming up on it, or standing at it. Absent for the stops ahead, and while no device follows the trip."},"trip_delay":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Trip Delay","description":"Delay of the trip, in seconds. Nothing writes it today, so it is always absent."},"estimated_departure_ts":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimated Departure Ts","description":"`departure_ts` shifted by the delay of the device following the trip. Carried as soon as a device is following it — on passed stops as well, where the recorded times are the ones that stand."},"eta":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Eta","description":"`departure_time` shifted by that same delay, and so on the seconds-since-midnight scale, not an epoch. Carried under the same condition, passed stops included."},"arrival_ts":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Arrival Ts","description":"Arrival at that stop, as epoch seconds. Nothing writes it today, so it is always absent."},"recorded_departure_ts":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Recorded Departure Ts","description":"Departure actually recorded from that stop, as epoch seconds."},"recorded_arrival_ts":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Recorded Arrival Ts","description":"Arrival actually recorded at that stop, as epoch seconds."}},"type":"object","required":["gtfs_id","trip_id","stop_id","departure_time","departure_ts","stop_sequence","route_id","trip_headsign","shape_id","start_date"],"title":"StopTimeSchema","description":"A passing time of a trip at one stop, scheduled then estimated.\n\nThe endpoint drops the passages already elapsed only for a trip no\ndevice is following; a tracked trip returns its whole stop list, passed\nstops included. A stop the vehicle has not reached carries times shifted\nby the delay of the device following the trip; once passed, the recorded\ntimes are what stands."},"StopTimeUpdate":{"properties":{"stop_sequence":{"type":"integer","title":"Stop Sequence","description":"Position of the stop in the trip, per the current GTFS."},"schedule_relationship":{"type":"string","title":"Schedule Relationship","description":"What became of that stop: `SKIPPED` when the trip no longer serves it."},"stop_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stop Name","description":"Name of the stop, when the entry carries it."},"stop_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stop Id","description":"Identifier of the stop, to re-locate it if the GTFS moved."}},"type":"object","required":["stop_sequence","schedule_relationship"],"title":"StopTimeUpdate","description":"A change to the way the trip serves one of its stops."},"StopTimesFeedSchema":{"properties":{"id":{"type":"string","title":"Id","description":"Identifier of the recorded passing, and the value `after_id` takes to page through the results."},"gtfs_id":{"type":"string","title":"Gtfs Id","description":"GTFS the trip belongs to; trip identifiers are scoped to it."},"trip_id":{"type":"string","title":"Trip Id","description":"Trip the passing belongs to, within that GTFS."},"start_date":{"type":"string","title":"Start Date","description":"Service date of the run, as a GTFS `YYYYMMDD` date. With the trip and the GTFS, it names one execution."},"stop_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stop Id","description":"Stop the passing was observed at, as its GTFS names it."},"stop_sequence":{"anyOf":[{"type":"integer"},{"type":"number"}],"title":"Stop Sequence","description":"Position of the stop along the trip. An integer designates a scheduled GTFS stop; a fractional value such as `4.1` designates a temporary stop of a deviation, which has no GTFS counterpart."},"event":{"type":"string","title":"Event","description":"Whether the record is the `arrival` at the stop or the `departure` from it. Punctuality is scored on the departures, except at the last stop where the arrival is used instead."},"device_id":{"type":"string","title":"Device Id","description":"Device that observed the passing."},"delay":{"type":"integer","title":"Delay","description":"Seconds between the observed passing and the time scheduled at that stop: negative when early, positive when late."},"ts":{"anyOf":[{"type":"integer"},{"type":"number"}],"title":"Ts","description":"Unix seconds at which the passing was observed."},"last_stop":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Last Stop","description":"Marks the passing at the trip's terminus, the one stop where the arrival is scored rather than the departure."},"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Id","description":"Team the record is attached to. Pre-multi-team form of `teams`, read only when `teams` is absent or empty."},"teams":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Teams","description":"Teams the record is attached to; the caller's team scope is matched against them."},"delta_previous_passage":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Delta Previous Passage","description":"Seconds separating this passing from the one before it. Nothing on the current write path fills it."},"delta_next_passage":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Delta Next Passage","description":"Seconds separating this passing from the one after it. Nothing on the current write path fills it."},"date":{"type":"string","format":"date-time","title":"Date","description":"When the passage was stored, read back from the identifier of the record."},"feed_type":{"type":"string","title":"Feed Type","description":"Discriminator of the trip feed: always `stop-times` here.","default":"stop-times"},"duty":{"anyOf":[{"$ref":"#/components/schemas/Duty"},{"type":"null"}],"description":"Driver and vehicle the device was carrying at that moment. Null when no duty was open."}},"type":"object","required":["id","gtfs_id","trip_id","start_date","stop_sequence","event","device_id","delay","ts","date"],"title":"StopTimesFeedSchema","description":"A passage recorded at one stop of the trip, as the trip feed carries it."},"TaskSchema":{"properties":{"status":{"type":"string","title":"Status","description":"`in_progress` while the task runs, then `success`, or `unchanged` when no trip needed recomputing. A failed task is never returned here — it is reported as the error `COMPUTE_TASK_FAILED` instead."},"nb_trips_updated":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Nb Trips Updated","description":"Trips whose distances were recomputed. Set once the task has succeeded, `null` before that."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"What went wrong. Stays `null` in practice, a failed task being reported as `COMPUTE_TASK_FAILED` rather than returned."}},"type":"object","required":["status"],"title":"TaskSchema","description":"Where a distance-along-the-itinerary task stands, and what it produced."},"Team":{"properties":{"team_id":{"type":"string","title":"Team Id","description":"Identifier of the team, drawn by the API at creation."},"color":{"type":"string","title":"Color","description":"Colour the Pysae applications use to tell this team apart.","default":"#00000"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Name of the team, unique within the group — a depot, an area, a subcontractor. It falls back to the identifier when the team carries none."},"team_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Number","description":"Number the operator gives this team, stored as-is and never interpreted by the API."},"archived":{"type":"boolean","title":"Archived","description":"Whether the team is archived: it stays attached to its past data but is no longer offered for new assignments.","default":false}},"type":"object","required":["team_id"],"title":"Team","description":"Team of the group.\n\nA subdivision used to partition operations — a depot, an area, a\nsubcontractor. Drivers and vehicles are attached to it, and a role may be\nrestricted to some of them."},"TeamSchema":{"properties":{"id":{"type":"string","title":"Id","description":"Identifier of the team."},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Colour the applications mark the team with."}},"type":"object","required":["id"],"title":"TeamSchema","description":"A team the trip is attached to."},"Temporality":{"type":"string","enum":["passed","current","future"],"title":"Temporality","description":"Where the trip sits against the present moment."},"TemporaryStop":{"properties":{"arrival_time":{"type":"integer","title":"Arrival Time","description":"Arrival at that stop, in seconds since the service day's midnight — GTFS style, so it may pass 24 h."},"departure_time":{"type":"integer","title":"Departure Time","description":"Departure from that stop, on the same scale as ``arrival_time``."},"stop_lat":{"type":"number","title":"Stop Lat","description":"Latitude of the stop, in decimal degrees."},"stop_lon":{"type":"number","title":"Stop Lon","description":"Longitude of the stop, in decimal degrees."},"stop_id":{"type":"string","title":"Stop Id","description":"Identifier of the stop. It belongs to the GTFS only when the update reuses a scheduled stop."},"stop_name":{"type":"string","title":"Stop Name","description":"Name of the stop, as travellers are shown it."},"stop_sequence":{"type":"number","title":"Stop Sequence","description":"Rank the stop takes in the trip's sequence."},"type":{"$ref":"#/components/schemas/TemporaryStopType","description":"Which of the three kinds of temporary stop this is, which says whether the place exists in the GTFS."}},"type":"object","required":["arrival_time","departure_time","stop_lat","stop_lon","stop_id","stop_name","stop_sequence","type"],"title":"TemporaryStop","description":"A stop the trip's update adds, or moves one of its stops to."},"TemporaryStopType":{"type":"string","enum":["SHIFT","AD_HOC","REUSE"],"title":"TemporaryStopType","description":"What the operator did to a stop of the trip.\n\n- ``SHIFT``: a scheduled stop served somewhere else, its scheduled position\n  counting as skipped.\n- ``AD_HOC``: a place the GTFS does not hold, created for this deviation.\n- ``REUSE``: a stop the GTFS already holds, served by this trip."},"Ticket":{"properties":{"domain":{"type":"string","title":"Domain","description":"Domain of the ticketing instance the ticket was opened on."},"id":{"type":"integer","title":"Id","description":"Number the ticketing system gave the ticket."},"type":{"type":"string","title":"Type","description":"Ticketing system the ticket was opened in.","default":"zendesk"}},"type":"object","required":["domain","id"],"title":"Ticket","description":"A ticket opened in the group's ticketing system."},"TimeRange":{"properties":{"start_date":{"type":"string","title":"Start Date","description":"Day the period opens on, as ``YYYYMMDD``."},"end_date":{"type":"string","title":"End Date","description":"Day the period closes on, as ``YYYYMMDD``."},"start_time":{"type":"string","title":"Start Time","description":"Time of day the period opens at, as ``HH:MM:SS``."},"end_time":{"type":"string","title":"End Time","description":"Time of day the period closes at, as ``HH:MM:SS``."},"daysOfWeek":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Daysofweek","description":"Stored and read back as sent, but never applied: whether the alert is in force is decided on the dates and times alone."}},"type":"object","required":["start_date","end_date","start_time","end_time"],"title":"TimeRange","description":"One period an alert is in force over, expressed in the group's local time.\n\nReaches the GTFS-realtime feed as an ``Alert.active_period`` entry, whose\n``start`` and ``end`` are these bounds converted to epoch seconds."},"TriggerTime":{"type":"string","enum":["start","end"],"title":"TriggerTime","description":"Which end of a device's run on a trip a trigger marks."},"TriggerType":{"type":"string","enum":["manual","auto"],"title":"TriggerType","description":"Who caused a trip to be taken or ended."},"Trip":{"properties":{"id":{"type":"string","title":"Id","description":"Trip of the GTFS the device was reading, by its identifier."},"start_date":{"type":"string","title":"Start Date","description":"Service date the trip ran on, in GTFS `YYYYMMDD` form."},"formatted_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Formatted Name","description":"Name of the trip, built when it was recorded from the group's `driver_trip_format`. Frozen there: changing the format later does not rewrite it."}},"type":"object","required":["id","start_date"],"title":"Trip","description":"A trip of the network: one journey along a route, run on a service date.\n\nThe same scheduled trip runs again on every service date its GTFS calendar\ncovers, so a trip identifier alone never designates one of those runs."},"TripDeprecated":{"properties":{"gtfs_id":{"type":"string","title":"Gtfs Id","description":"GTFS the trip belongs to."},"formatted_trip_name":{"type":"string","title":"Formatted Trip Name","description":"Name of the trip as the Pysae applications display it."},"trip_id":{"type":"string","title":"Trip Id","description":"Identifier of the trip within that GTFS."},"start_date":{"type":"string","title":"Start Date","description":"Service day the trip ran on, as a GTFS `YYYYMMDD` date. With the identifier and the GTFS, it names one execution."}},"type":"object","required":["gtfs_id","formatted_trip_name","trip_id","start_date"],"title":"TripDeprecated","description":"The trip a message was sent from, in the shape earlier clients read."},"TripGTFSSchema":{"properties":{"route_id":{"type":"string","title":"Route Id","description":"Identifier of the route the trip runs on."},"service_id":{"type":"string","title":"Service Id","description":"Identifier of the service giving the days the trip runs, as the calendar and its exceptions declare it."},"trip_id":{"type":"string","title":"Trip Id","description":"Identifier of the trip. Unique within its GTFS only: naming one journey takes the trip, its service date and the GTFS."},"trip_headsign":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trip Headsign","description":"Destination shown on the vehicle for the whole trip, unless a call overrides it with its own `stop_headsign`."},"trip_short_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trip Short Name","description":"Public name of the trip — a run or train number, where passengers use one."},"direction_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Direction Id","description":"Direction of travel on the route, `0` or `1`. Which way each stands for is the feed's own convention, not the specification's."},"block_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Block Id","description":"Identifier of the block — the trips one vehicle chains without returning to a depot."},"shape_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Shape Id","description":"Identifier of the itinerary the vehicle follows. Empty on a trip attached to none."},"wheelchair_accessible":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Wheelchair Accessible","description":"`0` or empty says nothing, `1` that the vehicle can carry at least one passenger in a wheelchair, `2` that it cannot."},"bikes_allowed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bikes Allowed","description":"`0` or empty says nothing, `1` that the vehicle can carry at least one bicycle, `2` that it cannot."},"ext_pis_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ext Pis Code","description":"Code naming the trip in the passenger-information system fed from this GTFS. Pysae's own field, absent from the specification."},"stop_times":{"items":{"$ref":"#/components/schemas/StopTimeGTFSNestedSchema"},"type":"array","title":"Stop Times","description":"Calls of the trip, returned in the order they were written. The GTFS import sorts them on `stop_sequence`; a trip written through this API comes back in the order it was sent. Nested here rather than served as their own resource, which the specification would have them be."},"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Id","description":"Single team the trip is attributed to. Superseded by `teams` and kept for trips written before one could belong to several; send `teams` instead. Pysae's own field, absent from the specification."},"teams":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Teams","description":"Teams the trip is attributed to, which is how the rest of the API scopes it to the users allowed on those teams. Attributing an archived team is refused. Pysae's own field, absent from the specification."}},"type":"object","required":["route_id","service_id","trip_id","stop_times"],"title":"TripGTFSSchema","description":"Journey scheduled on a route, from the GTFS `trips.txt`.\n\nIts calls at stops are nested here rather than served as their own\nresource, so a trip is written and read whole. `ext_pis_code`, `team_id`\nand `teams` are Pysae's own and belong to no GTFS file."},"TripModeTripFilter":{"properties":{"trip_id":{"type":"string","title":"Trip Id","description":"Si `drive_mode=trip`, référence vers `gtfs.<gtfs_id>.trips._id` de la course"},"start_date":{"anyOf":[{"type":"string","maxLength":8,"minLength":8,"pattern":"^\\d*$"},{"type":"null"}],"title":"Start Date","description":"date de début théorique de la course, au format GTFS"}},"type":"object","required":["trip_id"],"title":"TripModeTripFilter","description":"Trip filter of a device driving one designated trip."},"TripNotFound":{"properties":{"code":{"type":"string","const":"TRIP_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The trip has not been found","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/TripNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"TripNotFound","description":"The trip has not been found"},"TripNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group the trip was looked up in."},"gtfs_id":{"anyOf":[{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"]},{"type":"null"}],"title":"Gtfs Id","description":"GTFS the trip was looked up in. Null when the lookup went through whichever GTFS is in force on the date."},"date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"string","format":"date"}],"title":"Date","description":"Service day the trip was looked up on."},"trip_id":{"type":"string","title":"Trip Id","description":"Identifier that matched no trip."}},"type":"object","required":["group_id","gtfs_id","date","trip_id"],"title":"TripNotFoundPayload","description":"Context of the TripNotFound error: the values identifying the entities involved in this specific occurrence."},"TripStatus":{"type":"string","enum":["no data","ok","problem","routing","scheduled","tracked","untracked"],"title":"TripStatus","description":"How the trip was operated, once there is enough to tell.\n\n``scheduled`` while it has not started, ``untracked`` when no device\nfollowed it, ``tracked`` when one did, ``problem`` when what came back\nbreaches the group's validation rules, and ``no data`` when nothing is\nknown either way."},"TripStopSchema":{"properties":{"id":{"type":"string","title":"Id","description":"Identifier of the stop in its GTFS."},"stop_sequence":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stop Sequence","description":"Position of that stop in the trip's sequence."},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code","description":"Code the GTFS gives the stop."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Name of the stop, as travellers are shown it."}},"type":"object","required":["id"],"title":"TripStopSchema","description":"A stop bounding the trip."},"TripTakingSchema":{"properties":{"device_id":{"type":"string","title":"Device Id","description":"Device the trigger came from."},"date":{"type":"string","format":"date-time","title":"Date","description":"When the trigger was recorded."},"trigger_time":{"$ref":"#/components/schemas/TriggerTime","description":"Whether it opened or closed the device's run on the trip."},"trigger_type":{"$ref":"#/components/schemas/TriggerType","description":"Whether the driver triggered it or the app did."}},"type":"object","required":["device_id","date","trigger_time","trigger_type"],"title":"TripTakingSchema","description":"A device taking the trip, or letting it go, as the trip feed reports it."},"TripTrackingDay":{"properties":{"scheduled":{"type":"integer","title":"Scheduled","description":"Trips the schedule plans over the perimeter, the routes the group has deactivated excluded.","default":0},"tracked":{"type":"integer","title":"Tracked","description":"Trips among them a device actually followed, that is those that recorded kilometres."},"vehicles":{"items":{"$ref":"#/components/schemas/Vehicle"},"type":"array","title":"Vehicles","description":"Vehicles committed on the duties of the perimeter, whether or not a device followed the trips they carry.","default":[]},"start_date":{"type":"string","title":"Start Date","description":"Service date the figures cover, as a GTFS `YYYYMMDD` date."},"percent_tracked":{"type":"integer","title":"Percent Tracked","description":"`tracked` as a percentage of `scheduled`, rounded to a tenth then cut to the unit: two trips tracked out of three give `66`, not `67`. Zero when nothing was planned, or when nothing was tracked.","readOnly":true}},"type":"object","required":["tracked","start_date","percent_tracked"],"title":"TripTrackingDay","description":"Scheduled and tracked trips of one service date."},"TripTrackingRoute":{"properties":{"scheduled":{"type":"integer","title":"Scheduled","description":"Trips the schedule plans over the perimeter, the routes the group has deactivated excluded.","default":0},"tracked":{"type":"integer","title":"Tracked","description":"Trips among them a device actually followed, that is those that recorded kilometres."},"vehicles":{"items":{"$ref":"#/components/schemas/Vehicle"},"type":"array","title":"Vehicles","description":"Vehicles committed on the duties that carried the tracked trips of the route.","default":[]},"gtfs_id":{"type":"string","title":"Gtfs Id","description":"GTFS dataset the route and its trips belong to."},"gtfs_name":{"type":"string","title":"Gtfs Name","description":"Name of that GTFS dataset."},"route_id":{"type":"string","title":"Route Id","description":"Route the figures cover."},"route_short_name":{"type":"string","title":"Route Short Name","description":"Short name of the route, as its GTFS carries it. Empty when the GTFS declares none."},"route_long_name":{"type":"string","title":"Route Long Name","description":"Long name of the route, as its GTFS carries it. Empty when the GTFS declares none."},"percent_tracked":{"type":"integer","title":"Percent Tracked","description":"`tracked` as a percentage of `scheduled`, rounded to a tenth then cut to the unit: two trips tracked out of three give `66`, not `67`. Zero when nothing was planned, or when nothing was tracked.","readOnly":true}},"type":"object","required":["tracked","gtfs_id","gtfs_name","route_id","route_short_name","route_long_name","percent_tracked"],"title":"TripTrackingRoute","description":"Scheduled and tracked trips of one route over the period.\n\nA route carried by several published GTFS datasets comes back once per\ndataset."},"Unauthenticated":{"properties":{"code":{"type":"string","const":"UNAUTHENTICATED","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"You did not provide a session id","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/UnauthenticatedPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"Unauthenticated","description":"You did not provide a session id"},"UnauthenticatedPayload":{"properties":{},"type":"object","title":"UnauthenticatedPayload","description":"Context of the Unauthenticated error: the values identifying the entities involved in this specific occurrence."},"UpdateSchema":{"properties":{"deviated_shape_km":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Deviated Shape Km","description":"Length in km of the deviated shape."},"nominal_shape_km":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Nominal Shape Km","description":"Length in km of the reference GTFS shape, as resolved when the deviation was created."},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment","description":"Free text the operator attached to the run."},"delay":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Delay","description":"Delay the operator declared for the whole trip, in seconds."},"is_canceled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Canceled","description":"Whether the run was cancelled."},"stop_infos":{"anyOf":[{"items":{"$ref":"#/components/schemas/StopInfoSchema"},"type":"array"},{"type":"null"}],"title":"Stop Infos","description":"Notes carried for individual stops."},"skipped_stop_time_seqs":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Skipped Stop Time Seqs","description":"Stops the run no longer serves, by their rank in its sequence."},"temporary_stops":{"anyOf":[{"items":{"$ref":"#/components/schemas/TemporaryStop"},"type":"array"},{"type":"null"}],"title":"Temporary Stops","description":"Stops the deviation adds, or moves an existing one to."},"shape":{"anyOf":[{"items":{"$ref":"#/components/schemas/Coordinates"},"type":"array"},{"type":"null"}],"title":"Shape","description":"Itinerary the deviation follows instead of the GTFS one."},"delays":{"anyOf":[{"items":{"$ref":"#/components/schemas/Delay"},"type":"array"},{"type":"null"}],"title":"Delays","description":"Time shifts applied stop by stop, on top of `delay`."},"km_delta":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Km Delta","description":"Signed km difference deviated - nominal (+ = longer).","readOnly":true}},"type":"object","required":["km_delta"],"title":"UpdateSchema","description":"The operator's changes to the trip, merged into a single object.\n\nEvery deviation declared for that run is folded in here, so a field left\nnull simply means no deviation touched it."},"UpdatesSchema":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"Identifier of the stored update. The trip feed builds its entries from the merged update and leaves it unset."},"trip_id":{"type":"string","title":"Trip Id","description":"Trip the change applies to."},"start_date":{"type":"string","title":"Start Date","description":"Service day the change applies to, as a GTFS `YYYYMMDD` date."},"info_type":{"$ref":"#/components/schemas/InfoTypes","description":"Which change this entry carries."},"content":{"anyOf":[{"type":"integer"},{"type":"string"},{"items":{"$ref":"#/components/schemas/StopTimeUpdate"},"type":"array"},{"items":{"$ref":"#/components/schemas/StopInfo"},"type":"array"},{"items":{"$ref":"#/components/schemas/Incident"},"type":"array"}],"title":"Content","description":"The change itself, in the shape `info_type` announces: seconds for `delay`, free text for `comment`, `CANCELED` for `schedule_relationship`, and a list for the others."},"source":{"type":"string","title":"Source","description":"What produced the change; this feed reports `pysae`."},"date":{"type":"string","format":"date-time","title":"Date","description":"When the feed entry was built, in UTC."},"feed_type":{"type":"string","title":"Feed Type","description":"Discriminator of the trip feed: always `trip-update` here.","default":"trip-update"}},"type":"object","required":["trip_id","start_date","info_type","content","source","date"],"title":"UpdatesSchema","description":"One change the operator made to the trip, as the trip feed carries it.\n\nThe merged update of a trip is split into one entry per kind of change, so\na trip that was delayed and commented yields two entries."},"UrgencyAcknowledgmentSchema":{"properties":{"time":{"type":"string","format":"date-time","title":"Time","description":"When the API recorded the acknowledgement."},"user_id":{"type":"string","title":"User Id","description":"User who acknowledged the urgency."}},"type":"object","required":["time","user_id"],"title":"UrgencyAcknowledgmentSchema","description":"Who took the urgency in hand, and when.\n\nBoth values are filled by the acknowledgement endpoint, from the server\nclock and the calling session — never from a request body."},"UrgencyResolutionSchema":{"properties":{"time":{"type":"string","format":"date-time","title":"Time","description":"When the API recorded the resolution."},"user_id":{"type":"string","title":"User Id","description":"User who resolved the urgency."},"is_false_alert":{"type":"boolean","title":"Is False Alert","description":"Whether the urgency turned out not to warrant an intervention.","default":false},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment","description":"Free-text note the operator leaves with the resolution."}},"type":"object","required":["time","user_id"],"title":"UrgencyResolutionSchema","description":"How the urgency was closed, and by whom.\n\n``time`` and ``user_id`` are filled by the resolution endpoint, from the\nserver clock and the calling session; the two others are what the operator\nstated when closing."},"UrgencySchema":{"properties":{"device_id":{"type":"string","title":"Device Id","description":"Device the driver raised the urgency from."},"device_position":{"$ref":"#/components/schemas/DeviceCoordinatesSchema","description":"Where the device was when the urgency was raised."},"device_time":{"type":"string","format":"date-time","title":"Device Time","description":"When the device says the urgency was raised, read from its own clock."},"trip":{"anyOf":[{"$ref":"#/components/schemas/pysae__api__urgency__schemas__TripSchema"},{"type":"null"}],"description":"Trip the device was running at that moment. Absent when it was on none."},"driver_id":{"anyOf":[{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"]},{"type":"null"}],"title":"Driver Id","description":"Driver signed in on the device at that moment, when one was."},"vehicle_id":{"anyOf":[{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"]},{"type":"null"}],"title":"Vehicle Id","description":"Vehicle the device was assigned to at that moment, when one was."},"id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Id","description":"Identifier the urgency was given.","examples":["670f84254c28ffdaae0f462d"]},"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Id","description":"Team the urgency is filed under, taken from the ``team_id`` query parameter. Absent when the request carried none."},"api_time":{"type":"integer","title":"Api Time","description":"When the API received the urgency, in epoch seconds. Later than ``device_time`` when the device pushed it after the fact.","examples":[1606003200]},"acknowledgment":{"anyOf":[{"$ref":"#/components/schemas/UrgencyAcknowledgmentSchema"},{"type":"null"}],"description":"Absent while no operator has taken the urgency in hand."},"resolution":{"anyOf":[{"$ref":"#/components/schemas/UrgencyResolutionSchema"},{"type":"null"}],"description":"Absent while the urgency is still open."}},"type":"object","required":["device_id","device_position","device_time","id","api_time"],"title":"UrgencySchema","description":"An urgency, with where its handling stands.\n\nThe two fields follow the lifecycle in order: an urgency is acknowledged\nfirst, then resolved."},"UsedVehicleCountSchema":{"properties":{"date":{"type":"string","title":"Date","description":"Service date counted, in GTFS `YYYYMMDD` form.","examples":["20201122"]},"total_unique_vehicles":{"type":"integer","title":"Total Unique Vehicles","description":"Distinct `vehicle_id` values seen that day over the duties that operated at least one trip; duties with no declared vehicle count as one."},"subscription_quota":{"type":"integer","title":"Subscription Quota","description":"Equipped vehicles the group's subscription covers, `0` when the group declares none."},"exceeded_limit":{"type":"boolean","title":"Exceeded Limit","description":"Whether the day went over the quota: `total_unique_vehicles` strictly greater than `subscription_quota`.","readOnly":true}},"type":"object","required":["date","total_unique_vehicles","subscription_quota","exceeded_limit"],"title":"UsedVehicleCountSchema","description":"How many distinct vehicles the group ran on one day, against its quota."},"UserLanguage":{"type":"string","enum":["fr","en","it"],"title":"UserLanguage","description":"Language to address a user in, when we happen to know it.\n\nNothing in the product ever recorded it: the Op stores its locale in the\nbrowser's ``localStorage`` only, and an account that never activated has by\ndefinition never picked one. So this stays optional, and callers that need a\nlanguage must handle not having one (see the invitation email, which falls\nback to stacking every language rather than guessing)."},"UserSchema":{"properties":{"id":{"type":"string","title":"Id","description":"Identifier of the account. Same value as `_id`, carried twice for the clients reading one or the other."},"_id":{"type":"string","title":"Id","description":"Identifier of the account, as stored. Same value as `id`."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Display name of the user."},"superuser":{"type":"boolean","title":"Superuser","description":"Whether the account reaches every group without holding a role on it. Reserved for Pysae staff."},"email":{"type":"string","title":"Email","description":"Email address the user signs in with, unique across all accounts."},"date_added":{"type":"integer","title":"Date Added","description":"Creation date of the account."},"roles":{"additionalProperties":{"type":"string"},"type":"object","title":"Roles","description":"Access level the account holds on each group, keyed by group identifier. A superuser reaches every group without appearing in this map.","default":{}},"activation_status":{"anyOf":[{"$ref":"#/components/schemas/ActivationStatus"},{"type":"null"}],"description":"Whether the owner ever took possession of the account. Absent when the read did not carry the data needed to tell."},"invitation_sent_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Invitation Sent At","description":"Date the latest invitation or reset link was issued."},"invitation_expires_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Invitation Expires At","description":"Date the latest invitation or reset link expires."},"language":{"anyOf":[{"$ref":"#/components/schemas/UserLanguage"},{"type":"null"}],"description":"Language to address the user in, when known. Only set through the API; the Op keeps its own locale in the browser."}},"type":"object","required":["id","_id","superuser","email","date_added"],"title":"UserSchema","description":"User account, with the role it holds on each group it reaches."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location","description":"Where the value came from: the part of the request first, then the keys and indexes leading down to it."},"msg":{"type":"string","title":"Message","description":"Why it was refused, in plain words."},"type":{"type":"string","title":"Error Type","description":"Machine-readable name of the rule it broke."},"input":{"title":"Input","description":"The value as the API received it."},"ctx":{"type":"object","title":"Context","description":"What the broken rule was working with, such as the bound the value had to respect."}},"type":"object","required":["loc","msg","type"],"title":"ValidationError","description":"One value of the request the API refused, and why."},"ValidationStatus":{"type":"string","enum":["to_validate","validated","to_fix"],"title":"ValidationStatus","description":"Where a GTFS stands against its validation report.\n\n- ``to_validate``: no report yet; one is produced before publication.\n- ``validated``: the report holds nothing above a warning.\n- ``to_fix``: the report holds at least one blocking error, and the GTFS\n  cannot be published until it is fixed."},"Vehicle":{"properties":{"id":{"type":"string","title":"Id","description":"Identifier of the vehicle in the fleet, the one `GET /groups/{group_id}/vehicles/{vehicle_id}` resolves."},"fleet_number":{"type":"string","title":"Fleet Number","description":"Number the operator gives the vehicle in its own fleet numbering."},"license_plate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License Plate","description":"Registration plate of the vehicle, as the fleet record carries it."}},"type":"object","required":["id","fleet_number"],"title":"Vehicle","description":"A vehicle of the fleet: the bus or coach operating on the network."},"VehicleAmountSchema":{"properties":{"in_activity":{"type":"integer","title":"In Activity","description":"Vehicles whose status is `active`."},"archived":{"type":"integer","title":"Archived","description":"Vehicles whose status is `archived`."},"immobilized":{"type":"integer","title":"Immobilized","description":"Vehicles whose status is `immobilized`."}},"type":"object","required":["in_activity","archived","immobilized"],"title":"VehicleAmountSchema","description":"How the group's vehicles split across the three operating statuses."},"VehicleEquipment":{"properties":{"equipment_id":{"type":"string","title":"Equipment Id","description":"Identifier of the box. The device reporting for this vehicle is keyed on it, so two boxes on one vehicle stay distinct."},"equipment_type":{"$ref":"#/components/schemas/EquipmentType","description":"Kind of box this identifier designates."}},"type":"object","required":["equipment_id","equipment_type"],"title":"VehicleEquipment","description":"One box fitted to the vehicle, and what kind of box it is."},"VehicleMovementEndpointKind":{"type":"string","enum":["depot","stop","relief_point","arbitrary_point"],"title":"VehicleMovementEndpointKind","description":"What the point a movement starts from or ends at designates.\n\n``depot`` and ``stop`` are the two the Hastus import produces;\n``relief_point`` and ``arbitrary_point`` are reserved for the sources that\nplace a movement somewhere the network does not name."},"VehicleMovementEndpointSchema":{"properties":{"kind":{"$ref":"#/components/schemas/VehicleMovementEndpointKind","description":"Nature of the point: a depot, a stop, a relief point or an arbitrary position. It does not name the referential `ref` is spelled in — a `stop` endpoint carries a PLC place on a depot leg and an NDE stop on a deadhead, so it is not guaranteed to resolve against the stops referential."},"ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ref","description":"Identifier of the point, spelled as the planning source spells it. No source leaves the point unnamed today, so it is set on every movement."},"coords":{"anyOf":[{"prefixItems":[{"type":"number"},{"type":"number"}],"type":"array","maxItems":2,"minItems":2},{"type":"null"}],"title":"Coords","description":"Position of the point, as `[longitude, latitude]` — that order, not the `latitude, longitude` one. `null` when the planning source referenced a place its own export did not describe."}},"type":"object","required":["kind"],"title":"VehicleMovementEndpointSchema","description":"One end of a movement: the point it starts from, or the one it reaches."},"VehicleMovementExistenceSchema":{"properties":{"has_any":{"type":"boolean","title":"Has Any","description":"True as soon as the GTFS the group currently runs on holds one movement, whatever its date. False when the group runs on no GTFS at all."}},"type":"object","required":["has_any"],"title":"VehicleMovementExistenceSchema","description":"Whether the group holds any vehicle movement (HLP), across all dates.\n\nLets the UI tell \"this group never got HLP\" (show the onboarding block)\napart from \"no HLP on the selected day\" (show an empty grid)."},"VehicleMovementSchema":{"properties":{"id":{"type":"string","title":"Id","description":"Identifier of the movement."},"type":{"$ref":"#/components/schemas/VehicleMovementType","description":"Which kind of non-commercial movement this is."},"block_id":{"type":"string","title":"Block Id","description":"Block the movement belongs to — the sequence of trips chained by a single vehicle. This is the value the `/blocks/{block_id}/vehicle_movements` route takes."},"block_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Block Label","description":"Number the operator knows that block by. The Hastus import leaves it empty rather than `null` when the export carries no number. It is not what the API addresses the block with — `block_id` is."},"route_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Id","description":"Route the movement is charged to for statistics. `null` on a movement the planning source attributes to no route, which is the case of every depot leg."},"vehicle_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vehicle Id","description":"Vehicle scheduled for the movement. Always `null` on a movement the Hastus import produced: it only feeds the block dimension."},"driver_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Driver Id","description":"Driver scheduled for the movement. Always `null` on a movement the Hastus import produced: it only feeds the block dimension."},"start_date":{"type":"string","title":"Start Date","description":"Operational day the movement is counted on, as `YYYYMMDD`. A movement running past midnight keeps the day it started on.","examples":["20201122"]},"scheduled_start":{"type":"string","format":"date-time","title":"Scheduled Start","description":"Instant the movement is planned to start at."},"scheduled_end":{"type":"string","format":"date-time","title":"Scheduled End","description":"Instant the movement is planned to end at. A movement running past midnight ends after the local midnight following `start_date`; the value is an absolute instant in UTC, so its date part may still read as `start_date` for an agency east of Greenwich."},"from":{"$ref":"#/components/schemas/VehicleMovementEndpointSchema","description":"Point the vehicle leaves from."},"to":{"$ref":"#/components/schemas/VehicleMovementEndpointSchema","description":"Point the vehicle reaches."},"distance_m":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Distance M","description":"Length of the movement in metres, as measured by the planning source. `null` when that source carries no distance for it."},"shape":{"anyOf":[{"items":{"prefixItems":[{"type":"number"},{"type":"number"}],"type":"array","maxItems":2,"minItems":2},"type":"array"},{"type":"null"}],"title":"Shape","description":"Path the movement follows, point by point. No import feeds it today, so it is `null` on every movement."},"hastus_duty_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hastus Duty Identifier","description":"Hastus duty the movement belongs to, carried over as a raw string. No import feeds it today, so it is `null` on every movement. It designates nothing in this API: resolving it to a Pysae driver goes through a mapping held outside."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Instant Pysae recorded the movement. Set on import, not by the planning source, so it moves on every re-import."}},"type":"object","required":["id","type","block_id","start_date","scheduled_start","scheduled_end","from","to","created_at"],"title":"VehicleMovementSchema","description":"API response schema for a vehicle_movement.\n\nMirrors the domain model with the ``from`` alias preserved in the JSON\npayload (``from`` is a Python keyword so the field is named ``from_``)."},"VehicleMovementType":{"type":"string","enum":["pull_out","pull_in","deadhead","depot_transfer","refueling","relief_positioning"],"title":"VehicleMovementType","description":"Why a vehicle moved outside commercial service.\n\n``pull_out`` reaches the first commercial stop from the depot, ``pull_in``\nreturns to it after the last one, and ``deadhead`` repositions the vehicle\nbetween two trips of the same block. Those three are what the Hastus import\nemits today; the other values are reserved for the sources that tell them\napart."},"VehiclePublicSchema":{"properties":{"_id":{"type":"string","title":"Id","description":"Same identifier as `id`, under its stored name."},"id":{"type":"string","title":"Id","description":"Identifier of the vehicle."},"capacity":{"anyOf":[{"type":"integer","maximum":999.0,"minimum":0.0},{"type":"null"}],"title":"Capacity","description":"Passengers the vehicle can carry."}},"additionalProperties":false,"type":"object","required":["_id","id"],"title":"VehiclePublicSchema","description":"What of a vehicle may be broadcast to passengers: its capacity, nothing else.\n\nDeliberately narrower than `VehicleSchema` — no fleet number, no licence\nplate, no team."},"VehicleStatus":{"type":"string","enum":["active","archived","immobilized"],"title":"VehicleStatus","description":"Where a vehicle stands in the operation.\n\nThe deprecated `archived` flag is this status flattened: `ARCHIVED` reads as\narchived, `ACTIVE` and `IMMOBILIZED` both read as not archived."},"VehicleType":{"type":"string","enum":["bus","car","minibus","other"],"title":"VehicleType","description":"The kinds of vehicle a network can declare in its fleet."},"VersionStates":{"type":"string","enum":["UP_TO_DATE","DEPRECATED","TO_UPDATE","BLOCKED"],"title":"VersionStates","description":"Verdict on the app version a device runs, against what the group accepts.\n\n`BLOCKED` wins over the rest: it is returned both for a version listed in\nthe global blocked specs and for one below the group's `min_driver_version`."},"VoipCallbackNotFound":{"properties":{"code":{"type":"string","const":"VOIP_CALLBACK_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"No VoIP callback with this id was found for the group","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/VoipCallbackNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"VoipCallbackNotFound","description":"No VoIP callback with this id was found for the group"},"VoipCallbackNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group the callback was looked up in."},"callback_id":{"type":"string","title":"Callback Id","description":"Identifier of the callback that is unknown."}},"type":"object","required":["group_id","callback_id"],"title":"VoipCallbackNotFoundPayload","description":"Context of the VoipCallbackNotFound error: the values identifying the entities involved in this specific occurrence."},"VoipCallbackSchema":{"properties":{"id":{"type":"string","title":"Id","description":"Mongo identifier of the callback (URL-safe 24-char hex)"},"instavox_id":{"type":"string","title":"Instavox Id","description":"Original Instavox COMMAND_REQUEST id (used for dedupe)"},"sender_device_id":{"type":"string","title":"Sender Device Id","description":"Originating Instavox device id"},"sender_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sender User Id","description":"Optional Instavox user id"},"type":{"$ref":"#/components/schemas/VoipCommandRequestType","description":"Command request type (1 = call alert, 2 = radio check)"},"received_at":{"type":"string","format":"date-time","title":"Received At","description":"UTC timestamp recorded when the request was received"},"is_resolved":{"type":"boolean","title":"Is Resolved","description":"Whether the operator has acknowledged the request","default":false},"instavox_device_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instavox Device Label","description":"Instavox device label at reception"},"pysae_device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pysae Device Id","description":"Pysae device_id paired with the sender Instavox device at reception"},"pysae_device_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pysae Device Label","description":"Pysae device display label at reception"},"vehicle_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vehicle Label","description":"Vehicle label resolved at reception via assigned_vehicle_id"},"driver_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Driver Name","description":"Driver label resolved at reception via assigned_driver_id"}},"type":"object","required":["id","instavox_id","sender_device_id","type","received_at"],"title":"VoipCallbackSchema","description":"A callback request raised from a driver's radio, as it was recorded.\n\nThe labels are the snapshot the caller took at reception, not values\nresolved on read: they keep naming who called even after the device, the\nvehicle or the driver has been reassigned."},"VoipCommandRequestType":{"type":"integer","enum":[1,2],"title":"VoipCommandRequestType","description":"What the driver asked for when pressing the button on their radio."},"VoipDeviceSchema":{"properties":{"id":{"type":"string","title":"Id","description":"The id of the VoIP device"},"device_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Description","description":"Manufacturer-provided device description string (Instavox DataexDevice.DeviceDescription)."},"device_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Name","description":"Human-readable user name attached to the VoIP endpoint (Instavox DataexDevice.UserName)."},"provider":{"$ref":"#/components/schemas/VoipProviderSchema","description":"The provider of the VoIP device"},"status":{"$ref":"#/components/schemas/VoipDeviceStatusSchema","description":"Last known status of the VoIP device"},"first_seen_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"First Seen At","description":"UTC timestamp of the first time the device was seen"},"last_seen_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Seen At","description":"UTC timestamp of the most recent event for the device"},"assigned_vehicle_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Vehicle Id","description":"Identifier of the Pysae vehicle currently assigned to the device this VoIP endpoint is paired with, when known."}},"type":"object","required":["id","provider","status"],"title":"VoipDeviceSchema","description":"A VoIP endpoint dispatch can reach, as the provider last reported it.\n\nThe endpoint is paired with a Pysae device when the group has set that\npairing up; that pairing is what resolves the vehicle behind the endpoint."},"VoipDeviceStatusSchema":{"type":"string","enum":["online","offline"],"title":"VoipDeviceStatusSchema","description":"Whether the provider last saw the VoIP endpoint as reachable."},"VoipGroupSettingsNotFound":{"properties":{"code":{"type":"string","const":"VOIP_GROUP_SETTINGS_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The group has no voip settings","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/VoipGroupSettingsNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"VoipGroupSettingsNotFound","description":"The group has no voip settings"},"VoipGroupSettingsNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group holding no telephony settings."}},"type":"object","required":["group_id"],"title":"VoipGroupSettingsNotFoundPayload","description":"Context of the VoipGroupSettingsNotFound error: the values identifying the entities involved in this specific occurrence."},"VoipProviderSchema":{"type":"string","enum":["instavox"],"title":"VoipProviderSchema","description":"Telephony operator the VoIP endpoint is registered with."},"VoipProviderUnavailable":{"properties":{"code":{"type":"string","const":"VOIP_PROVIDER_UNAVAILABLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The VoIP provider did not respond in time","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/VoipProviderUnavailablePayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"VoipProviderUnavailable","description":"The VoIP provider did not respond in time"},"VoipProviderUnavailablePayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group whose telephony provider timed out."}},"type":"object","required":["group_id"],"title":"VoipProviderUnavailablePayload","description":"Context of the VoipProviderUnavailable error: the values identifying the entities involved in this specific occurrence."},"WrongLogin":{"properties":{"code":{"type":"string","const":"WRONG_LOGIN","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"Your credentials are not recognized","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/WrongLoginPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"WrongLogin","description":"Your credentials are not recognized"},"WrongLoginPayload":{"properties":{},"type":"object","title":"WrongLoginPayload","description":"Context of the WrongLogin error: the values identifying the entities involved in this specific occurrence."},"pysae__api__devices__models__DeviceStatus":{"type":"string","enum":["IN_TRANSIT_TO","INCOMING_AT","STOPPED_AT"],"title":"DeviceStatus","description":"Where the vehicle stands relative to the stop it is following."},"pysae__api__drivers__schemas__DriverSchema":{"properties":{"_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Id","description":"Same identifier as `id`, under its stored name.","examples":["670f84254c28ffdaae0f462d"]},"id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Id","description":"Identifier of the driver.","examples":["670f84254c28ffdaae0f462d"]},"driver_name":{"type":"string","title":"Driver Name","description":"Driver's name."},"staff_number":{"type":"string","title":"Staff Number","description":"Staff number.","default":""},"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Id","description":"Team the driver belongs to. Superseded by `teams`, kept for clients predating multi-team support."},"teams":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Teams","description":"Teams the driver belongs to."},"comment":{"type":"string","title":"Comment","description":"Comment."},"archived":{"type":"boolean","title":"Archived","description":"Whether the driver is archived: kept out of the current operation, their history untouched."}},"type":"object","required":["_id","id","driver_name","comment","archived"],"title":"DriverSchema","description":"A driver of the group: the person who operates the trips.\n\nNot a user of the operations interface — a driver identifies themselves on\nthe Pysae Driver app, when signing on."},"pysae__api__passenger_counts__router__GroupBy":{"type":"string","enum":["day","route"],"title":"GroupBy","description":"Whether the passenger counts come back per service date or per route."},"pysae__api__punctuality__router__GroupBy":{"type":"string","enum":["day","route"],"title":"GroupBy","description":"Whether the punctuality figures come back per service date or per route."},"pysae__api__ratings__router__GroupBy":{"type":"string","enum":["group_id","driver_version"],"title":"GroupBy","description":"What the ratings are averaged over, instead of being returned one by one.\n\nThe choice changes the response shape: `group_id` yields\n`RatingByGroupSchema`, `driver_version` yields\n`RatingByDriverVersionSchema`."},"pysae__api__trip_km__schemas__GroupBy":{"type":"string","enum":["day","route"],"title":"GroupBy","description":"Whether the kilometre figures come back per service date or per route."},"pysae__api__trip_tracking__router__GroupBy":{"type":"string","enum":["day","route"],"title":"GroupBy","description":"Whether the tracking figures come back per service date or per route."},"pysae__api__trips__v4__schemas__DeviceStatus":{"type":"string","enum":["online","offline"],"title":"DeviceStatus","description":"Whether the device is still reporting, per the group's online delay."},"pysae__api__trips__v4__schemas__DriverSchema":{"properties":{"id":{"type":"string","title":"Id","description":"Identifier of the driver."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Name of the driver."},"staff_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Staff Number","description":"Staff number the operator identifies the driver by."}},"type":"object","required":["id"],"title":"DriverSchema","description":"A driver who operated the trip."},"pysae__api__trips__v4__schemas__TripSchema":{"properties":{"id":{"type":"string","title":"Id","description":"Identifier of the trip in its GTFS."},"arrival_time":{"type":"number","title":"Arrival Time","description":"Scheduled arrival at the last stop, as epoch seconds."},"departure_time":{"type":"number","title":"Departure Time","description":"Scheduled departure from the first stop, as epoch seconds."},"service_date":{"type":"string","title":"Service Date","description":"Service day the trip runs on. With the identifier and the GTFS, it names one execution.","examples":["20201122"]},"formatted_name":{"type":"string","title":"Formatted Name","description":"Name of the trip as the Pysae applications display it."},"route":{"$ref":"#/components/schemas/RouteSchema","description":"Route the trip runs on."},"first_stop":{"$ref":"#/components/schemas/TripStopSchema","description":"Where the trip starts."},"last_stop":{"$ref":"#/components/schemas/TripStopSchema","description":"Where the trip ends."},"temporality":{"$ref":"#/components/schemas/Temporality","description":"Whether the trip is past, running, or to come."},"passenger_count":{"anyOf":[{"$ref":"#/components/schemas/PCSchema"},{"type":"null"}],"description":"Boardings and alightings recorded for this run."},"block_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Block Id","description":"Block the trip belongs to — the run a single vehicle chains."},"headsign":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Headsign","description":"Destination shown to passengers."},"end":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"End","description":"When the device stopped being recorded on the trip, as epoch seconds. Null while it is still on it."},"start":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Start","description":"When the device started being recorded on the trip, as epoch seconds."},"departure_stored":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Departure Stored","description":"Departure actually recorded at the first stop, as epoch seconds."},"arrival_stored":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Arrival Stored","description":"Arrival actually recorded at the last stop, as epoch seconds."},"off_itinerary":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Off Itinerary","description":"Whether the device is off the trip's itinerary right now. Only carried while it is online."},"tk":{"type":"number","title":"Tk","description":"Kilometres the trip covers on paper, from its GTFS shape."},"vk":{"type":"number","title":"Vk","description":"Kilometres the device recorded over the run."},"percent_km":{"type":"integer","title":"Percent Km","description":"Share of `tk` covered reliably, in percent — `reliable_km` over `tk`, rounded up."},"off_itinerary_km":{"type":"number","title":"Off Itinerary Km","description":"Part of `recorded_commercial_km` covered while the device was off the itinerary."},"recorded_commercial_km":{"type":"number","title":"Recorded Commercial Km","description":"Kilometres actually recorded on the trip."},"unreliable_km":{"type":"number","title":"Unreliable Km","description":"Part of `recorded_commercial_km` the recording cannot vouch for: steps of 3 km or more, or 60 seconds or more apart."},"reliable_km":{"type":"number","title":"Reliable Km","description":"`recorded_commercial_km` less `unreliable_km`."},"delay":{"items":{"type":"integer"},"type":"array","title":"Delay","description":"Delays measured on the run, in minutes. A merged entry carries one per run it groups."},"gtfs":{"items":{"$ref":"#/components/schemas/FileSchema"},"type":"array","title":"Gtfs","description":"GTFS datasets carrying this trip. More than one when several are in force over the service day."},"vehicles":{"items":{"$ref":"#/components/schemas/pysae__api__trips__v4__schemas__VehicleSchema"},"type":"array","title":"Vehicles","description":"Vehicles that operated the run."},"drivers":{"items":{"$ref":"#/components/schemas/pysae__api__trips__v4__schemas__DriverSchema"},"type":"array","title":"Drivers","description":"Drivers who operated the run."},"devices":{"items":{"$ref":"#/components/schemas/DeviceSchema"},"type":"array","title":"Devices","description":"Devices that followed the run."},"team":{"anyOf":[{"$ref":"#/components/schemas/TeamSchema"},{"type":"null"}],"description":"**Deprecated** — pre-multi-team form of `teams`."},"teams":{"anyOf":[{"items":{"$ref":"#/components/schemas/TeamSchema"},"type":"array"},{"type":"null"}],"title":"Teams","description":"Teams the trip is attached to."},"trips":{"items":{"$ref":"#/components/schemas/pysae__api__trips__v4__schemas__TripSchema"},"type":"array","title":"Trips","description":"The individual runs this entry groups, when the request asked for them merged. Empty otherwise."},"updates":{"$ref":"#/components/schemas/UpdateSchema","description":"Changes the operator made to this run."},"service":{"$ref":"#/components/schemas/Service","description":"Stops planned, against stops actually recorded."},"problems":{"$ref":"#/components/schemas/Problems","description":"Validation rules the run breached, if any."},"status":{"$ref":"#/components/schemas/TripStatus","description":"How the trip was operated.","default":"no data"},"speed":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Speed","description":"Speed the device last reported, in metres per second. Only carried while it is online."}},"type":"object","required":["id","arrival_time","departure_time","service_date","formatted_name","route","first_stop","last_stop","temporality"],"title":"TripSchema","description":"A trip of one service day, as scheduled and as it was operated.\n\nOne entry stands for one run: the same trip followed by two devices, or\ncarried by two GTFS, yields two of them — unless the request asks for\nthem merged, in which case `trips` holds the runs that were grouped."},"pysae__api__trips__v4__schemas__VehicleSchema":{"properties":{"id":{"type":"string","title":"Id","description":"Identifier of the vehicle."},"fleet_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fleet Number","description":"Fleet number the operator identifies the vehicle by."},"license_plate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License Plate","description":"Licence plate of the vehicle."}},"type":"object","required":["id"],"title":"VehicleSchema","description":"A vehicle that operated the trip."},"pysae__api__urgency__schemas__TripSchema":{"properties":{"id":{"type":"string","title":"Id","description":"Identifier of the trip in the transport plan."},"gtfs_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Gtfs Id","description":"Transport plan file the trip identifier is read against.","examples":["670f84254c28ffdaae0f462d"]},"start_date":{"type":"string","title":"Start Date","description":"Service day the trip runs on. Required because the same identifier comes back on every day the trip is scheduled.","examples":["20201122"]}},"type":"object","required":["id","gtfs_id","start_date"],"title":"TripSchema","description":"Reference to a trip of the transport plan, on one of its service days."},"pysae__api__vehicles__schemas__VehicleSchema":{"properties":{"license_plate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License Plate","description":"Licence plate of the vehicle."},"fleet_number":{"type":"string","title":"Fleet Number","description":"Fleet number the operator identifies the vehicle by."},"status":{"$ref":"#/components/schemas/VehicleStatus","description":"Operating status of the vehicle.","default":"active"},"modified_at":{"type":"string","format":"date-time","title":"Modified At","description":"Moment the vehicle was last changed."},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment","description":"Free-form note the operator keeps on it."},"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Id","description":"Team the vehicle belongs to. Superseded by `teams`, kept for clients predating multi-team support."},"teams":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Teams","description":"Teams the vehicle belongs to."},"energy_type":{"anyOf":[{"$ref":"#/components/schemas/EnergyType"},{"type":"null"}],"description":"Energy the vehicle runs on."},"vehicle_type":{"anyOf":[{"$ref":"#/components/schemas/VehicleType"},{"type":"null"}],"description":"Kind of vehicle."},"manufacturer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manufacturer","description":"Manufacturer of the vehicle."},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"Model of the vehicle."},"capacity":{"anyOf":[{"type":"integer","maximum":999.0,"minimum":0.0},{"type":"null"}],"title":"Capacity","description":"Passengers the vehicle can carry."},"equipment":{"items":{"$ref":"#/components/schemas/VehicleEquipment"},"type":"array","title":"Equipment","description":"On-board equipment reporting for this vehicle.","default":[]},"_id":{"type":"string","title":"Id","description":"Same identifier as `id`, under its stored name."},"id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Id","description":"Identifier of the vehicle.","examples":["670f84254c28ffdaae0f462d"]}},"additionalProperties":false,"type":"object","required":["fleet_number","_id","id"],"title":"VehicleSchema","description":"A vehicle of the group's fleet, as it is operated on the network."},"pysae__common__http__base__RoleDependencyPayload__1":{"properties":{"role_given":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Given","description":"Role the calling user holds on the group, if any."},"role_needed":{"type":"array","const":["limited_reader","admin","operator","external_reader","regulator","reader"],"title":"Role Needed","description":"Roles that would have granted the call.","default":["limited_reader","admin","operator","external_reader","regulator","reader"]}},"type":"object","required":["role_given"],"title":"RoleDependencyPayload","description":"Context of the RoleDependency error: the values identifying the entities involved in this specific occurrence."},"pysae__common__http__base__RoleDependencyPayload__10":{"properties":{"role_given":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Given","description":"Role the calling user holds on the group, if any."},"role_needed":{"type":"array","const":["driver","admin","regulator","operator"],"title":"Role Needed","description":"Roles that would have granted the call.","default":["driver","admin","regulator","operator"]}},"type":"object","required":["role_given"],"title":"RoleDependencyPayload","description":"Context of the RoleDependency error: the values identifying the entities involved in this specific occurrence."},"pysae__common__http__base__RoleDependencyPayload__11":{"properties":{"role_given":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Given","description":"Role the calling user holds on the group, if any."},"role_needed":{"type":"array","const":["admin","technical","operator","regulator","reader"],"title":"Role Needed","description":"Roles that would have granted the call.","default":["admin","technical","operator","regulator","reader"]}},"type":"object","required":["role_given"],"title":"RoleDependencyPayload","description":"Context of the RoleDependency error: the values identifying the entities involved in this specific occurrence."},"pysae__common__http__base__RoleDependencyPayload__12":{"properties":{"role_given":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Given","description":"Role the calling user holds on the group, if any."},"role_needed":{"type":"array","const":["admin","operator"],"title":"Role Needed","description":"Roles that would have granted the call.","default":["admin","operator"]}},"type":"object","required":["role_given"],"title":"RoleDependencyPayload","description":"Context of the RoleDependency error: the values identifying the entities involved in this specific occurrence."},"pysae__common__http__base__RoleDependencyPayload__13":{"properties":{"role_given":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Given","description":"Role the calling user holds on the group, if any."},"role_needed":{"type":"array","const":["driver","admin","operator","external_reader","regulator","reader"],"title":"Role Needed","description":"Roles that would have granted the call.","default":["driver","admin","operator","external_reader","regulator","reader"]}},"type":"object","required":["role_given"],"title":"RoleDependencyPayload","description":"Context of the RoleDependency error: the values identifying the entities involved in this specific occurrence."},"pysae__common__http__base__RoleDependencyPayload__14":{"properties":{"role_given":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Given","description":"Role the calling user holds on the group, if any."},"role_needed":{"type":"array","const":["admin","regulator","operator"],"title":"Role Needed","description":"Roles that would have granted the call.","default":["admin","regulator","operator"]}},"type":"object","required":["role_given"],"title":"RoleDependencyPayload","description":"Context of the RoleDependency error: the values identifying the entities involved in this specific occurrence."},"pysae__common__http__base__RoleDependencyPayload__2":{"properties":{"role_given":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Given","description":"Role the calling user holds on the group, if any."},"role_needed":{"type":"array","const":["admin","regulator","reader","operator"],"title":"Role Needed","description":"Roles that would have granted the call.","default":["admin","regulator","reader","operator"]}},"type":"object","required":["role_given"],"title":"RoleDependencyPayload","description":"Context of the RoleDependency error: the values identifying the entities involved in this specific occurrence."},"pysae__common__http__base__RoleDependencyPayload__3":{"properties":{"role_given":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Given","description":"Role the calling user holds on the group, if any."},"role_needed":{"type":"array","const":["admin","limited_reader","technical","operator","external_reader","regulator","reader"],"title":"Role Needed","description":"Roles that would have granted the call.","default":["admin","limited_reader","technical","operator","external_reader","regulator","reader"]}},"type":"object","required":["role_given"],"title":"RoleDependencyPayload","description":"Context of the RoleDependency error: the values identifying the entities involved in this specific occurrence."},"pysae__common__http__base__RoleDependencyPayload__4":{"properties":{"role_given":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Given","description":"Role the calling user holds on the group, if any."},"role_needed":{"type":"array","const":["driver","admin","operator","regulator","reader"],"title":"Role Needed","description":"Roles that would have granted the call.","default":["driver","admin","operator","regulator","reader"]}},"type":"object","required":["role_given"],"title":"RoleDependencyPayload","description":"Context of the RoleDependency error: the values identifying the entities involved in this specific occurrence."},"pysae__common__http__base__RoleDependencyPayload__5":{"properties":{"role_given":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Given","description":"Role the calling user holds on the group, if any."},"role_needed":{"type":"array","const":["admin"],"title":"Role Needed","description":"Roles that would have granted the call.","default":["admin"]}},"type":"object","required":["role_given"],"title":"RoleDependencyPayload","description":"Context of the RoleDependency error: the values identifying the entities involved in this specific occurrence."},"pysae__common__http__base__RoleDependencyPayload__6":{"properties":{"role_given":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Given","description":"Role the calling user holds on the group, if any."},"role_needed":{"type":"array","const":["driver","technical","admin","operator","external_reader","limited_reader","regulator","reader"],"title":"Role Needed","description":"Roles that would have granted the call.","default":["driver","technical","admin","operator","external_reader","limited_reader","regulator","reader"]}},"type":"object","required":["role_given"],"title":"RoleDependencyPayload","description":"Context of the RoleDependency error: the values identifying the entities involved in this specific occurrence."},"pysae__common__http__base__RoleDependencyPayload__7":{"properties":{"role_given":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Given","description":"Role the calling user holds on the group, if any."},"role_needed":{"type":"array","const":["driver","limited_reader","admin","operator","external_reader","regulator","reader"],"title":"Role Needed","description":"Roles that would have granted the call.","default":["driver","limited_reader","admin","operator","external_reader","regulator","reader"]}},"type":"object","required":["role_given"],"title":"RoleDependencyPayload","description":"Context of the RoleDependency error: the values identifying the entities involved in this specific occurrence."},"pysae__common__http__base__RoleDependencyPayload__8":{"properties":{"role_given":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Given","description":"Role the calling user holds on the group, if any."},"role_needed":{"type":"array","const":["driver","admin"],"title":"Role Needed","description":"Roles that would have granted the call.","default":["driver","admin"]}},"type":"object","required":["role_given"],"title":"RoleDependencyPayload","description":"Context of the RoleDependency error: the values identifying the entities involved in this specific occurrence."},"pysae__common__http__base__RoleDependencyPayload__9":{"properties":{"role_given":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Given","description":"Role the calling user holds on the group, if any."},"role_needed":{"type":"array","const":["limited_reader","admin","operator","regulator","reader"],"title":"Role Needed","description":"Roles that would have granted the call.","default":["limited_reader","admin","operator","regulator","reader"]}},"type":"object","required":["role_given"],"title":"RoleDependencyPayload","description":"Context of the RoleDependency error: the values identifying the entities involved in this specific occurrence."},"pysae__common__http__base__RoleDependency__1":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__1","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"pysae__common__http__base__RoleDependency__10":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__8","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"pysae__common__http__base__RoleDependency__11":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__7","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"pysae__common__http__base__RoleDependency__12":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__9","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"pysae__common__http__base__RoleDependency__13":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__10","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"pysae__common__http__base__RoleDependency__14":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__11","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"pysae__common__http__base__RoleDependency__15":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__12","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"pysae__common__http__base__RoleDependency__16":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__1","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"pysae__common__http__base__RoleDependency__17":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__1","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"pysae__common__http__base__RoleDependency__18":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__13","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"pysae__common__http__base__RoleDependency__19":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__10","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"pysae__common__http__base__RoleDependency__2":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__2","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"pysae__common__http__base__RoleDependency__20":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__13","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"pysae__common__http__base__RoleDependency__21":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__14","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"pysae__common__http__base__RoleDependency__22":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__14","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"pysae__common__http__base__RoleDependency__23":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__10","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"pysae__common__http__base__RoleDependency__24":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__5","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"pysae__common__http__base__RoleDependency__25":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__11","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"pysae__common__http__base__RoleDependency__26":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__11","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"pysae__common__http__base__RoleDependency__3":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__3","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"pysae__common__http__base__RoleDependency__4":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__3","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"pysae__common__http__base__RoleDependency__5":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__4","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"pysae__common__http__base__RoleDependency__6":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__5","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"pysae__common__http__base__RoleDependency__7":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__6","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"pysae__common__http__base__RoleDependency__8":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__7","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"},"pysae__common__http__base__RoleDependency__9":{"properties":{"code":{"type":"string","const":"INVALID_ROLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role of the calling user for this group_id is not in the list of allowed roles","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependencyPayload__7","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleDependency","description":"The role of the calling user for this group_id is not in the list of allowed roles"}},"securitySchemes":{"SessionCookie":{"type":"apiKey","description":"Cookie: session_id=<session_id>","in":"cookie","name":"session_id"},"SessionBearerToken":{"type":"http","description":"Authorization: Bearer <session_id>","scheme":"bearer"},"OpenIDConnect":{"type":"openIdConnect","description":"Authorization: Bearer <jwt>","openIdConnectUrl":"https://dev-ebbcamyiet1cvkvr.eu.auth0.com/.well-known/openid-configuration"},"ApiKey":{"type":"http","description":"Authorization: Api-Key <api_key>","scheme":"bearer"}}},"tags":[{"name":"teams","description":"Subdivisions of the group used to partition operations — a depot, an area, a subcontractor. Drivers and vehicles attach to them, and a user may see only some of them."},{"name":"users","description":"Human accounts accessing a group, typically a dispatcher or an operations manager. A driver is not a user: they sign on in the Pysae Driver app, not in the operating interface."},{"name":"roles","description":"What a user may do on a given group. A user holds one role per group, and may be restricted to some of its teams."},{"name":"api-keys","description":"Persistent, revocable credentials meant for automated integrations, as opposed to the session a human obtains by signing in."},{"name":"auth","description":"Signing in, and the session a call is authenticated with."},{"name":"gtfs","description":"The datasets describing the network's scheduled service — routes, stops, shapes, calendars and timetables — and their lifecycle, from import to publication to archival. The records held inside a dataset are read and edited under this same tag, one sub-resource per GTFS file."},{"name":"trips","description":"Journeys scheduled on a route, with their itinerary and passing times. A trip is designated by its identifier, its service date and its GTFS: the three together name one execution."},{"name":"stop-times","description":"The scheduled passing times of a trip at each stop it serves, in order. They are what a delay is measured against."},{"name":"planning","description":"The forecast assignment of resources to trips: which driver and which vehicle operate which trip, on which date."},{"name":"drivers","description":"The people operating the trips. A driver signs on in the Pysae Driver app and is not an account of the operating interface."},{"name":"vehicles","description":"The buses and coaches committed to the network, with their fleet number, plate, type, capacity and on-board equipment."},{"name":"devices","description":"The phones and tablets running the Pysae Driver app. They report the vehicle's position and the trip's progress, and are therefore the source of everything real-time."},{"name":"depot","description":"The sites where vehicles are parked, and from which they leave and to which they return. Runs between a depot and a trip are counted as dead mileage."},{"name":"duties","description":"The period during which a driver operates the service, from sign-on to sign-off. A duty is what ties together a driver, a vehicle, a device and the trips actually operated."},{"name":"trip-tracking","description":"The account of how a trip unfolded: at what time the vehicle passed where, with what gap against the scheduled time."},{"name":"vehicle-movements","description":"Movements of a vehicle tied to operations, including outside commercial service: the run to the start of a trip, the return to the depot, a dead run."},{"name":"vehicle-exploitation","description":"The account of a vehicle's activity over a period: what it operated, when, and over what distances."},{"name":"danger-zones","description":"Points of the network flagged to drivers as requiring particular care: a narrow passage, a difficult exit, an accident-prone area."},{"name":"on-demand-routes","description":"Routes served on request rather than on a timetable, with their own stops and validity period."},{"name":"alerts","description":"Passenger information messages reporting a disruption — works, a detour, a stop not served. They follow the structure of GTFS-realtime service alerts."},{"name":"messages","description":"Exchanges between the operator and the drivers, or the other way round. Distinct from an alert, which addresses passengers."},{"name":"notifications","description":"Push deliveries to a recipient outside the application: SMS or mobile notification."},{"name":"urgency","description":"Alarms triggered by a driver from their device, reporting a situation requiring immediate intervention, with the position and context at that moment."},{"name":"voip","description":"The voice link between dispatch and the drivers, and the callback requests arising from it."},{"name":"gtfs-rt","description":"The standardised real-time feed describing the current state of the network: vehicle positions, trip delays and disruptions. It is what journey planners consume."},{"name":"siri","description":"The European standard for exchanging real-time data between transport systems. It covers the same need as GTFS-realtime, in a different form."},{"name":"stats","description":"Aggregations and CSV exports computed over the entities above. Each measure comes in two forms: an aggregate under `/stats/`, an export under `/export/`."},{"name":"trip-km","description":"The distance operated, broken down by trip, by vehicle or by period. It feeds per-kilometre billing and contract monitoring."},{"name":"punctuality","description":"The gap between the scheduled time and the actual passing time, aggregated over a period. It is the quality indicator transport authorities follow most closely."},{"name":"passenger-counts","description":"Boardings and alightings recorded at stops, per trip, as reported by the on-board counting systems."},{"name":"history","description":"What happened, kept beyond the real-time window: events reported by the devices, times observed at stops, the GTFS in force on a date, kilometres recorded."},{"name":"rail","description":"Rail departures shown alongside the network's own service, and the stops attached to a rail station."},{"name":"ndp","description":"Endpoints serving the Pysae Driver app. They are hosted on a dedicated deployment sized for the volume the app produces."}],"servers":[{"url":"https://api.pysae.com","description":"prod"}]}