{"openapi":"3.1.0","info":{"title":"Pysae Internal 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/config/driver/versions":{"get":{"tags":["config"],"summary":"Get the document for each versions states based on semver","description":"**This endpoint allows you to query the latest document in pysae.config_device_semver**","operationId":"getConfigDriverVersions","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":{"anyOf":[{"$ref":"#/components/schemas/ConfigSchema"},{"type":"null"}],"title":"Response Getconfigdriverversions"}}}},"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"},"put":{"tags":["config"],"summary":"Modify requires versions for driver","description":"**This endpoint allows you to modify the semver version in deprecated and/or to_update for the most recent document in pysae.config_device_semver**","operationId":"putConfigDriverVersions","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":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_putConfigDriverVersions"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigSchema"}}}},"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"}},"/api/v4/config/environment":{"get":{"tags":["config"],"summary":"Get environment configuration","description":"**This endpoint allows you to get environment configuration**","operationId":"getConfigEnvironment","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvironmentConfigSchema"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/ratings":{"post":{"tags":["drivers"],"summary":"Create a rating for a specific driver_version.","description":"Role needed: driver","operationId":"postRatings","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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RatingCreateSchema"}}}},"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__2"}],"title":"Response 403 Postratings"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"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/ratings":{"get":{"tags":["drivers"],"summary":"Get all ratings.","description":"**Lists the ratings drivers gave the Pysae Driver app, across every group. `group_by` aggregates them by group or by app version instead of returning them one by one.**","operationId":"getGlobalRatings","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_by","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__api__ratings__router__GroupBy"},{"type":"null"}],"title":"Group By"}},{"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":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/RatingSchema"}},{"type":"array","items":{"$ref":"#/components/schemas/RatingByDriverVersionSchema"}},{"type":"array","items":{"$ref":"#/components/schemas/RatingByGroupSchema"}}],"title":"Response Getglobalratings"}}}},"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"}},"/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__3"}],"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__4"}],"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__5"},{"$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/admin/cache":{"get":{"tags":["admin"],"summary":"Get Redis cache statistics grouped by namespace","description":"**Reports what each namespace of the cache holds. The key counts are exact; the memory figures and average lifetimes are extrapolated from a sample.**","operationId":"getAdminCache","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"pattern","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional wildcard pattern to filter keys (e.g. `gtfs:*`)","title":"Pattern"},"description":"Optional wildcard pattern to filter keys (e.g. `gtfs:*`)"},{"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/CacheStatsSchema"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"description":"Forbidden"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnsafePurgePatternError"}}},"description":"Bad Request"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["admin"],"summary":"Purge Redis cache keys matching a pattern","description":"**Deletes the cached keys matching a pattern. A pattern too broad, or one reaching a protected namespace, is refused rather than run.**","operationId":"deleteAdminCache","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"pattern","in":"query","required":true,"schema":{"type":"string","description":"Wildcard pattern for keys to delete (e.g. `gtfs:trip:group-xxx:*`).","title":"Pattern"},"description":"Wildcard pattern for keys to delete (e.g. `gtfs:trip:group-xxx:*`)."},{"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/CachePurgeSchema"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"description":"Forbidden"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnsafePurgePatternError"}}},"description":"Bad Request"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/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}/export/vehicle-exploitation/send-sftp":{"post":{"tags":["vehicle-exploitation"],"summary":"Send the vehicle exploitation CSV (PCS-CNT format) to the group SFTP.","description":"**Generate the PCS-CNT CSV for the given date range and upload it to the SFTP target configured on the group's SFTP integration, via the Pysae SFTP bastion.**\n\nRole needed: regulator, operator","operationId":"postExportVehicleExploitationSendSftp","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":{"application/json":{"schema":{"$ref":"#/components/schemas/VehicleExploitationSendSftpResult"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SftpSendFailedException"}}},"description":"Service Unavailable"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SftpIntegrationNotConfiguredException"}}},"description":"Bad Request"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__6"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Postexportvehicleexploitationsendsftp"}}},"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"}},"/api/v4/groups/{group_id}/export/vehicle-exploitation/send-sftp-per-vehicle":{"post":{"tags":["vehicle-exploitation"],"summary":"Send one PCS-CNT CSV per vehicle (equipped with counting cells) to the group SFTP.","description":"**Generate one PCS-CNT CSV per vehicle that has passenger counting data and upload each file sequentially to the SFTP target configured on the group's SFTP integration, via the Pysae SFTP bastion. File IDs are reserved atomically per vehicle before each send; concurrent or partially-failed runs may leave gaps in the global fileId sequence. Idempotent on retry: vehicles already marked as sent for the same period are skipped.**\n\nRole needed: regulator, operator","operationId":"postExportVehicleExploitationSendSftpPerVehicle","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":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VehicleExploitationSendSftpResult"},"title":"Response Postexportvehicleexploitationsendsftppervehicle"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SftpSendFailedException"}}},"description":"Service Unavailable"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SftpIntegrationNotConfiguredException"}}},"description":"Bad Request"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__6"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Postexportvehicleexploitationsendsftppervehicle"}}},"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"}},"/api/v4/groups/{group_id}/export/vehicle-exploitation/daily-sftp-per-vehicle":{"post":{"tags":["vehicle-exploitation"],"summary":"Daily job: send yesterday's PCS-CNT files (one per counting vehicle) to SFTP.","description":"**Scheduled entry point called nightly at 1am by Prefect: generate one PCS-CNT CSV per vehicle equipped with counting cells for the previous day and upload each file sequentially to the group's SFTP integration via the Pysae SFTP bastion.**\n\nRole needed: regulator, operator","operationId":"postExportVehicleExploitationDailySftpPerVehicle","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":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VehicleExploitationSendSftpResult"},"title":"Response Postexportvehicleexploitationdailysftppervehicle"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SftpSendFailedException"}}},"description":"Service Unavailable"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SftpIntegrationNotConfiguredException"}}},"description":"Bad Request"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__6"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Postexportvehicleexploitationdailysftppervehicle"}}},"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"}},"/api/v4/groups/{group_id}/rum-configuration":{"get":{"tags":["rum-configuration"],"summary":"Return the default RUM configuration.","description":"**This endpoint allows you to return the default RUM configuration.**\n\nRole needed: operator, external_reader, limited_reader, regulator, reader","operationId":"getRumConfiguration","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":{"$ref":"#/components/schemas/RumConfigurationSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__1"}],"title":"Response 403 Getrumconfiguration"}}},"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"},"delete":{"tags":["rum-configuration"],"summary":"Delete the default RUM configuration.","description":"**This endpoint allows you to delete the default RUM configuration.**\n\nRole needed: operator","operationId":"deleteRumConfiguration","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":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__7"}],"title":"Response 403 Deleterumconfiguration"}}},"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"},"post":{"tags":["rum-configuration"],"summary":"Set the default RUM configuration.","description":"**This endpoint allows you to set the default RUM configuration.**\n\nRole needed: operator","operationId":"postRumConfiguration","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/RumConfigurationSchema"}}}},"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__7"}],"title":"Response 403 Postrumconfiguration"}}},"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"}},"/nav-data-processor-api/v4/groups/{group_id}/devices/{device_id}/rum-configuration":{"get":{"tags":["rum-configuration","ndp"],"summary":"Return the device RUM configuration for the given device_id.","description":"**This endpoint allows you to return the device RUM configuration for the given device_id.**\n\nRole needed: driver, limited_reader, operator, external_reader, regulator, reader","operationId":"getDeviceRumConfigurationNdp","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":{"type":"string","description":"The id of the device you want to retrieve datas from.","examples":["837e726d2f25af9a","e627452b4a502323","943a739adc3ce43a"],"title":"Device Id"},"description":"The id of the device 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/RumConfigurationSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getdevicerumconfigurationndp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__8"}],"title":"Response 403 Getdevicerumconfigurationndp"}}},"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"},"delete":{"tags":["rum-configuration","ndp"],"summary":"Delete the device RUM configuration for the given device_id.","description":"**This endpoint allows you to delete the device RUM configuration for the given device_id.**\n\nRole needed: operator","operationId":"deleteDeviceRumConfigurationNdp","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":{"type":"string","description":"The id of the device you want to retrieve datas from.","examples":["837e726d2f25af9a","e627452b4a502323","943a739adc3ce43a"],"title":"Device Id"},"description":"The id of the device 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":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deletedevicerumconfigurationndp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__9"}],"title":"Response 403 Deletedevicerumconfigurationndp"}}},"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"},"post":{"tags":["rum-configuration","ndp"],"summary":"Set the device RUM configuration for the given device_id.","description":"**This endpoint allows you to set the device RUM configuration for the given device_id.**\n\nRole needed: operator","operationId":"postDeviceRumConfigurationNdp","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":{"type":"string","description":"The id of the device you want to retrieve datas from.","examples":["837e726d2f25af9a","e627452b4a502323","943a739adc3ce43a"],"title":"Device Id"},"description":"The id of the device 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/RumConfigurationSchema"}}}},"responses":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Postdevicerumconfigurationndp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__9"}],"title":"Response 403 Postdevicerumconfigurationndp"}}},"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"}},"/api/v4/groups/{group_id}/devices/{device_id}/rum-configuration":{"get":{"tags":["rum-configuration"],"summary":"Return the device RUM configuration for the given device_id.","description":"**This endpoint allows you to return the device RUM configuration for the given device_id.**\n\nRole needed: driver, limited_reader, operator, external_reader, regulator, reader","operationId":"getDeviceRumConfiguration","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":{"type":"string","description":"The id of the device you want to retrieve datas from.","examples":["837e726d2f25af9a","e627452b4a502323","943a739adc3ce43a"],"title":"Device Id"},"description":"The id of the device 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/RumConfigurationSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getdevicerumconfiguration"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__8"}],"title":"Response 403 Getdevicerumconfiguration"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["rum-configuration"],"summary":"Delete the device RUM configuration for the given device_id.","description":"**This endpoint allows you to delete the device RUM configuration for the given device_id.**\n\nRole needed: operator","operationId":"deleteDeviceRumConfiguration","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":{"type":"string","description":"The id of the device you want to retrieve datas from.","examples":["837e726d2f25af9a","e627452b4a502323","943a739adc3ce43a"],"title":"Device Id"},"description":"The id of the device 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":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deletedevicerumconfiguration"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__9"}],"title":"Response 403 Deletedevicerumconfiguration"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"post":{"tags":["rum-configuration"],"summary":"Set the device RUM configuration for the given device_id.","description":"**This endpoint allows you to set the device RUM configuration for the given device_id.**\n\nRole needed: operator","operationId":"postDeviceRumConfiguration","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":{"type":"string","description":"The id of the device you want to retrieve datas from.","examples":["837e726d2f25af9a","e627452b4a502323","943a739adc3ce43a"],"title":"Device Id"},"description":"The id of the device 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/RumConfigurationSchema"}}}},"responses":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Postdevicerumconfiguration"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__9"}],"title":"Response 403 Postdevicerumconfiguration"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/nav-data-processor-api/v4/groups/{group_id}/planning":{"get":{"tags":["planning","ndp"],"summary":"Get plannings.","description":"**This endpoint is used to get plannings.**\n\nRole needed: driver, regulator, reader, operator","operationId":"getPlanningNdp","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 Getplanningndp"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__10"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Getplanningndp"}}},"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"}},"/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__10"},{"$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__11"}],"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}/planning/imports":{"get":{"tags":["planning"],"summary":"List planning import history.","description":"**This endpoint lists the planning imports of a group, most recent first.**\n\nRole needed: driver, regulator, reader, operator","operationId":"getPlanningImports","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Maximum number of import records to return.","default":50,"title":"Limit"},"description":"Maximum number of import records to return."},{"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/PlanningImportSchema"},"title":"Response Getplanningimports"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__10"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Getplanningimports"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/nav-data-processor-api/v4/groups/{group_id}/vehicles":{"get":{"tags":["vehicles","ndp"],"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":"getVehiclesNdp","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 Getvehiclesndp"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__12"}],"title":"Response 403 Getvehiclesndp"}}},"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"}},"/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__12"}],"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},"post":{"tags":["vehicles"],"summary":"Add new vehicle to the DB.","description":"**This endpoint allows to add a new vehicle to the DB.**\n\nRole needed: admin, operator","operationId":"postVehicles","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/VehicleCreateSchema"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"string","title":"Response Postvehicles"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__14"},{"$ref":"#/components/schemas/ForbiddenDifferentTeam"}],"title":"Response 403 Postvehicles"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/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__13"}],"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},"put":{"tags":["vehicles"],"summary":"Modify all fields of the vehicle.","description":"**This endpoint allows to modify all fields of the vehicle.**\n\nRole needed: admin, operator","operationId":"putVehicle","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 modify","title":"Vehicle Id"},"description":"The id of the vehicle you want to modify"},{"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/VehicleUpdateSchema"}}}},"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__15"},{"$ref":"#/components/schemas/ForbiddenDifferentTeam"}],"title":"Response 403 Putvehicle"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/VehicleNotFound"}],"title":"Response 404 Putvehicle"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/vehicles/{vehicle_id}/status":{"patch":{"tags":["vehicles"],"summary":"Update vehicle status by id","description":"**This endpoint allows to update the status of a vehicle by id.**\n\nRole needed: admin, operator","operationId":"patchVehicleStatus","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","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","description":"The id of the vehicle you want to update","examples":["670f84254c28ffdaae0f462d"],"title":"Vehicle Id"},"description":"The id of the vehicle you want to update"},{"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/VehicleStatusSchema"}}}},"responses":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/VehicleNotFound"}],"title":"Response 404 Patchvehiclestatus"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__16"}],"title":"Response 403 Patchvehiclestatus"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/vehicles-status":{"post":{"tags":["vehicles"],"summary":"Set status for vehicles by id","description":"**This endpoint allows to set a status on vehicles 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: admin, operator","operationId":"postVehiclesStatus","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/VehicleBulkStatusSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VehicleBulkStatusResultSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__7"}],"title":"Response 403 Postvehiclesstatus"}}},"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"}},"/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__13"}],"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}/import/vehicles":{"post":{"tags":["vehicles"],"summary":"Import a csv file with vehicles","description":"**This endpoint allows to import a csv file with vehicles**\n\nRole needed: admin, operator","operationId":"postImportVehicles","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":"compare_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Compare Only"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_postImportVehicles"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/VehicleImportResultSchema"},{"$ref":"#/components/schemas/CompareSchema"}],"title":"Response Postimportvehicles"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__17"}],"title":"Response 403 Postimportvehicles"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VehicleImportValidationFailed"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/api"}},"/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/vehicle-amount":{"get":{"tags":["vehicles","stats"],"summary":"Number of registered vehicle by groups","description":"**Get the number of vehicle registered for all groups.**","operationId":"getGlobalVehicleAmount","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":"object","additionalProperties":{"$ref":"#/components/schemas/VehicleAmountSchema"},"title":"Response Getglobalvehicleamount"}}}},"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-deployment":"stats"}},"/nav-data-processor-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":"getGtfsCalendarsNdp","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 Getgtfscalendarsndp"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/nav-data-processor-api","x-deployment":"ndp"}},"/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},"put":{"tags":["gtfs"],"summary":"Create or Update a calendar in the gtfs identified by gtfs_id","description":"**This endpoint allows to create or update a calendar in the gtfs identified by gtfs_id.**\n\nRole needed: operator","operationId":"putGtfsCalendar","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"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"}},{"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/CalendarGTFSSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalendarGTFSSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__18"}],"title":"Response 403 Putgtfscalendar"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["gtfs"],"summary":"Delete calendar specified by service_id","description":"**This endpoint allows to delete a calendar specified by service_id.**\n\nRole needed: operator","operationId":"deleteGtfsCalendar","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"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"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GtfsCalendarNotFound"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__19"}],"title":"Response 403 Deletegtfscalendar"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/trip-complementary-infos/comments":{"put":{"tags":["trip-complementary-infos"],"summary":"Create or update a trip-update comment.","description":"**Create or update the comment associated to a trip for a given (trip_id, date, end_date) period.**\n\nRole needed: regulator, operator","operationId":"putTripComplementaryInfoComments","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"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":"trip_id","in":"query","required":true,"schema":{"type":"string","title":"Trip Id"}},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}},{"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/TripComplementaryInfoCommentSchema"}}}},"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__20"},{"$ref":"#/components/schemas/LockedFeature"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Puttripcomplementaryinfocomments"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GtfsTripNotFound"},{"$ref":"#/components/schemas/GtfsNotFound"}],"title":"Response 404 Puttripcomplementaryinfocomments"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/trip-complementary-infos/stop-infos":{"put":{"tags":["trip-complementary-infos"],"summary":"Create or update trip-update stop-infos.","description":"**Create or update the stop-infos list associated to a trip for a given (trip_id, date, end_date) period.**\n\nRole needed: regulator, operator","operationId":"putTripComplementaryInfoStopInfos","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"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":"trip_id","in":"query","required":true,"schema":{"type":"string","title":"Trip Id"}},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}},{"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/TripComplementaryInfoStopInfosSchema"}}}},"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__20"},{"$ref":"#/components/schemas/LockedFeature"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Puttripcomplementaryinfostopinfos"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GtfsTripNotFound"},{"$ref":"#/components/schemas/GtfsNotFound"}],"title":"Response 404 Puttripcomplementaryinfostopinfos"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/trip-updates/comments":{"put":{"tags":["trip-complementary-infos"],"summary":"[Deprecated] Create or update a trip-update comment.","description":"<h1><b>This endpoint is deprecated, use <code>/api/v4/groups/{group_id}/trip-complementary-infos/comments</code> instead.</b></h1>\n\n**Deprecated alias of PUT /trip-complementary-infos/comments. New clients should target the new path.**\n\nRole needed: regulator, operator","operationId":"putTripUpdateComments","deprecated":true,"security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"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":"trip_id","in":"query","required":true,"schema":{"type":"string","title":"Trip Id"}},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}},{"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/TripComplementaryInfoCommentSchema"}}}},"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__20"},{"$ref":"#/components/schemas/LockedFeature"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Puttripupdatecomments"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GtfsTripNotFound"},{"$ref":"#/components/schemas/GtfsNotFound"}],"title":"Response 404 Puttripupdatecomments"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/trip-updates/stop-infos":{"put":{"tags":["trip-complementary-infos"],"summary":"[Deprecated] Create or update trip-update stop-infos.","description":"<h1><b>This endpoint is deprecated, use <code>/api/v4/groups/{group_id}/trip-complementary-infos/stop-infos</code> instead.</b></h1>\n\n**Deprecated alias of PUT /trip-complementary-infos/stop-infos. New clients should target the new path.**\n\nRole needed: regulator, operator","operationId":"putTripUpdateStopInfos","deprecated":true,"security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"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":"trip_id","in":"query","required":true,"schema":{"type":"string","title":"Trip Id"}},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}},{"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/TripComplementaryInfoStopInfosSchema"}}}},"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__20"},{"$ref":"#/components/schemas/LockedFeature"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Puttripupdatestopinfos"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GtfsTripNotFound"},{"$ref":"#/components/schemas/GtfsNotFound"}],"title":"Response 404 Puttripupdatestopinfos"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/nav-data-processor-api/v4/groups/{group_id}/vehicles/{vehicle_lenient_key}/location":{"put":{"tags":["vehicles-location"],"summary":"Update Vehicle Location","description":"**This endpoint allows you to update the location of a vehicle.**\n\nRole needed: vehicle","operationId":"putVehicleLocationNdp","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":"vehicle_lenient_key","in":"path","required":true,"schema":{"type":"string","description":"The id, fleet_number or plate_number of the vehicle","title":"Vehicle Lenient Key"},"description":"The id, fleet_number or plate_number of the vehicle"},{"name":"equipment_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Equipment 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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationUpdateSchema"}}}},"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 Putvehiclelocationndp"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/VehicleLenientKeyNotFound"}],"title":"Response 404 Putvehiclelocationndp"}}},"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"}},"/api/v4/trip-updates-use/export":{"get":{"tags":["trip-updates","stats"],"summary":"Find the amount of trip updates for a time window **heavy on resource**","description":"**Find the amount of trip updates in a group for a certain time window to allow doing stats.**\n\n- R\n- e\n- t\n- u\n- r\n- n\n-  \n- t\n- r\n- i\n- p\n-  \n- u\n- p\n- d\n- a\n- t\n- e\n-  \n- u\n- s\n- a\n- g\n- e\n-  \n- b\n- y\n-  \n- d\n- a\n- t\n- e\n-  \n- i\n- n\n-  \n- g\n- t\n- f\n- s\n-  \n- f\n- o\n- r\n- m\n- a\n- t\n\n\n\n<h2>Example : </h2>\n\n| **date** | **total** | **comment** | **stop_infos** | **is_canceled** | **delay** | **skipped_stop_time_seqs** | **temporary_stop_time_seqs** | **temporary_stops** | **shape** | **delays** |\n|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|\n| 20200101 | 32 | 3 | 8 | 12 | 21 | 2 | 8 | 7 | 18 | 18 |","operationId":"getGlobalTripUpdatesUseExport","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"since","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Default to now - 30 days : The date of the trip update.","title":"Since"},"description":"Default to now - 30 days : The date of the trip update."},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Default to now: The date of the trip update.","title":"To"},"description":"Default to now: The date of the trip update."},{"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":{}},"text/csv":{"schema":{"type":"string"},"example":"date;total;comment;stop_infos;is_canceled;delay;skipped_stop_time_seqs;temporary_stop_time_seqs;temporary_stops;shape;delays\n20200101;32;3;8;12;21;2;8;7;18;18"}}},"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-deployment":"stats"}},"/api/v4/trip-updates-use":{"get":{"tags":["trip-updates","stats"],"summary":"Find the amount of trip updates for a time window **heavy on resource**","description":"**Find the amount of trip updates in all groups for a certain time window to allow doing stats.**\n\n- R\n- e\n- t\n- u\n- r\n- n\n-  \n- t\n- r\n- i\n- p\n-  \n- u\n- p\n- d\n- a\n- t\n- e\n-  \n- u\n- s\n- a\n- g\n- e\n-  \n- b\n- y\n-  \n- d\n- a\n- t\n- e\n-  \n- i\n- n\n-  \n- g\n- t\n- f\n- s\n-  \n- f\n- o\n- r\n- m\n- a\n- t","operationId":"getGlobalTripUpdatesUse","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"since","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Default to now - 30 days : The date of the trip update.","title":"Since"},"description":"Default to now - 30 days : The date of the trip update."},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Default to now: The date of the trip update.","title":"To"},"description":"Default to now: The date of the trip update."},{"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":"object","additionalProperties":{"$ref":"#/components/schemas/TripUpdateUseSchema"},"propertyNames":{"examples":["20201122"]},"title":"Response Getglobaltripupdatesuse"}}}},"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-deployment":"stats"}},"/api/v4/groups/{group_id}/trip-updates-use":{"get":{"tags":["trip-updates","stats"],"summary":"Find the amount of trip updates for a time window","description":"**Find the amount of trip updates in a group for a certain time window to allow doing stats.**\n\n- R\n- e\n- t\n- u\n- r\n- n\n-  \n- t\n- r\n- i\n- p\n-  \n- u\n- p\n- d\n- a\n- t\n- e\n-  \n- u\n- s\n- a\n- g\n- e\n-  \n- b\n- y\n-  \n- d\n- a\n- t\n- e\n-  \n- i\n- n\n-  \n- g\n- t\n- f\n- s\n-  \n- f\n- o\n- r\n- m\n- a\n- t","operationId":"getTripUpdatesUse","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"since","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Default to now - 30 days : The date of the trip update.","title":"Since"},"description":"Default to now - 30 days : The date of the trip update."},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Default to now: The date of the trip update.","title":"To"},"description":"Default to now: The date of the trip update."},{"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":{"$ref":"#/components/schemas/TripUpdateUseSchema"},"propertyNames":{"examples":["20201122"]},"title":"Response Gettripupdatesuse"}}}},"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"}},"/api/v4/groups/{group_id}/trip-updates-use/export":{"get":{"tags":["trip-updates","stats"],"summary":"Find the amount of trip /updates for a time window **heavy on resource**","description":"**Find the amount of trip updates in a group for a certain time window to allow doing stats.**\n\n- R\n- e\n- t\n- u\n- r\n- n\n-  \n- t\n- r\n- i\n- p\n-  \n- u\n- p\n- d\n- a\n- t\n- e\n-  \n- u\n- s\n- a\n- g\n- e\n-  \n- b\n- y\n-  \n- d\n- a\n- t\n- e\n-  \n- i\n- n\n-  \n- g\n- t\n- f\n- s\n-  \n- f\n- o\n- r\n- m\n- a\n- t\n\n\n\n<h2>Example : </h2>\n\n| **date** | **total** | **comment** | **stop_infos** | **is_canceled** | **delay** | **skipped_stop_time_seqs** | **temporary_stop_time_seqs** | **temporary_stops** | **shape** | **delays** |\n|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|\n| 20200101 | 32 | 3 | 8 | 12 | 21 | 2 | 8 | 7 | 18 | 18 |","operationId":"getTripUpdatesUseExport","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"since","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Default to now - 30 days : The date of the trip update.","title":"Since"},"description":"Default to now - 30 days : The date of the trip update."},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Default to now: The date of the trip update.","title":"To"},"description":"Default to now: The date of the trip update."},{"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":{}},"text/csv":{"schema":{"type":"string"},"example":"date;total;comment;stop_infos;is_canceled;delay;skipped_stop_time_seqs;temporary_stop_time_seqs;temporary_stops;shape;delays\n20200101;32;3;8;12;21;2;8;7;18;18"}}},"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"}},"/nav-data-processor-api/v4/groups/{group_id}/trip-updates/get":{"get":{"tags":["trip-updates","ndp"],"summary":"Get the most recent trip updates.","description":"**This endpoint allows to get the most recent trip updates of each content type for trips**","operationId":"getTripUpdateGetNdp","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":"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":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"The date of the trip update.","title":"Date"},"description":"The date of the trip update."},{"name":"trip_id","in":"query","required":true,"schema":{"type":"string","description":"The id of the trip you want to retrieve datas from.","title":"Trip Id"},"description":"The id of the trip you want to retrieve datas from."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripUpdateSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/TripNotFound"},{"$ref":"#/components/schemas/GtfsNotFound"}],"title":"Response 404 Gettripupdategetndp"}}},"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"}},"/api/v4/groups/{group_id}/trip-updates/get":{"get":{"tags":["trip-updates"],"summary":"Get the most recent trip updates.","description":"**This endpoint allows to get the most recent trip updates of each content type for trips**","operationId":"getTripUpdateGet","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":"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":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"The date of the trip update.","title":"Date"},"description":"The date of the trip update."},{"name":"trip_id","in":"query","required":true,"schema":{"type":"string","description":"The id of the trip you want to retrieve datas from.","title":"Trip Id"},"description":"The id of the trip you want to retrieve datas from."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripUpdateSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/TripNotFound"},{"$ref":"#/components/schemas/GtfsNotFound"}],"title":"Response 404 Gettripupdateget"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/nav-data-processor-api/v4/groups/{group_id}/trip-updates/search":{"get":{"tags":["trip-updates","ndp"],"summary":"Find trip updates for a date","description":"**This endpoint allows you to get the trip updates of the different trips for a given group_id, gtfs_id, and date**","operationId":"getTripUpdateSearchNdp","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":"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":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"The date of the trip update.","title":"Date"},"description":"The date of the trip update."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TripUpdateSchema"},"title":"Response Gettripupdatesearchndp"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/GtfsNotFound"}],"title":"Response 404 Gettripupdatesearchndp"}}},"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"}},"/api/v4/groups/{group_id}/trip-updates/search":{"get":{"tags":["trip-updates"],"summary":"Find trip updates for a date","description":"**This endpoint allows you to get the trip updates of the different trips for a given group_id, gtfs_id, and date**","operationId":"getTripUpdateSearch","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":"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":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"The date of the trip update.","title":"Date"},"description":"The date of the trip update."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TripUpdateSchema"},"title":"Response Gettripupdatesearch"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/GtfsNotFound"}],"title":"Response 404 Gettripupdatesearch"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/trip-updates":{"put":{"tags":["trip-updates"],"summary":"Create or update a trip update.","description":"**This endpoint allows you to create or update a trip update for a specific trip**\n\nRole needed: regulator, operator","operationId":"putTripUpdates","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":"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":"trip_id","in":"query","required":true,"schema":{"type":"string","title":"Trip Id"}},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"The date of the trip update.","title":"Date"},"description":"The date of the trip update."},{"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/TripUpdateCreateSchema"}}}},"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__22"},{"$ref":"#/components/schemas/LockedFeature"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Puttripupdates"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/GtfsTripNotFound"},{"$ref":"#/components/schemas/GtfsNotFound"}],"title":"Response 404 Puttripupdates"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/trip-updates/many":{"put":{"tags":["trip-updates"],"summary":"Create or update a trip update for a period.","description":"**This endpoint allows you to create or update a trip update for a specific trip for a period**\n\nRole needed: regulator, operator","operationId":"putTripUpdateMany","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":"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":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}},{"name":"trip_id","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"deprecated":true,"title":"Trip Id"},"deprecated":true},{"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/TripUpdateCreateSchema"}}}},"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__23"},{"$ref":"#/components/schemas/LockedFeature"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Puttripupdatemany"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRequest"}}},"description":"Unprocessable Content"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/GtfsNotFound"}],"title":"Response 404 Puttripupdatemany"}}},"description":"Not Found"}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/deviations":{"get":{"tags":["trip-updates"],"summary":"Every trip-update as a deviation row.","description":"**Returns one row per trip-update. Impacted trips are resolved against the group's current GTFS.**","operationId":"getDeviations","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/DeviationSchema"},"title":"Response Getdeviations"}}}},"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"}},"/api/v4/groups/{group_id}/trip-updates/validate":{"get":{"tags":["trip-updates"],"summary":"Check that stored trip-updates remain compatible with a GTFS.","description":"**Validates every non-obsolete trip-update with end_date >= today against the supplied GTFS file. The window is implicit: from today (UTC) to the max end_date of active trip-updates. Returns ``{status: 'valid'}`` when nothing is wrong; otherwise ``{status: 'error', deviation_errors: [...]}`` with one entry per impacted trip-update.**","operationId":"getTripUpdateValidate","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"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"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripUpdateValidationResultSchema"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GtfsNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/deviations/{trip_update_id}":{"patch":{"tags":["trip-updates"],"summary":"Patch an existing deviation.","description":"**Edits ``date``, ``end_date``, ``title`` and/or ``excluded_trip_ids`` of a deviation identified by its MongoDB _id. Only the fields explicitly provided in the body are updated. Date guards: neither date nor end_date can be set before today, and end_date must stay >= date.**\n\nRole needed: regulator, operator","operationId":"patchDeviation","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_update_id","in":"path","required":true,"schema":{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"],"title":"Trip Update 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/TripUpdatePatchSchema"}}}},"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__24"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Patchdeviation"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRequest"}}},"description":"Unprocessable Content"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/deviations/{trip_update_id}/duplicate":{"post":{"tags":["trip-updates"],"summary":"Duplicate a deviation onto another period.","description":"**Creates a new deviation with the content and selector of an existing one, over ``[date, end_date]``. The source is first checked against the group's current GTFS (missing shape / route / stops, changed reference geometry, no trip over the period): on failure nothing is written and the response is ``422`` with the typed errors. With ``dry_run=true`` the report is returned as ``200`` and nothing is written whatever the outcome. Date guards: neither date nor end_date can be before today, and end_date must be >= date. Overlaps with existing deviations are reconciled like PUT /trip-updates/many.**\n\nRole needed: regulator, operator","operationId":"postDeviationDuplicate","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_update_id","in":"path","required":true,"schema":{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"],"title":"Trip Update Id"}},{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","description":"Run the compatibility check only, write nothing.","default":false,"title":"Dry Run"},"description":"Run the compatibility check only, write nothing."},{"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/DeviationDuplicateSchema"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviationDuplicateResultSchema"}}}},"422":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/InvalidRequest"},{"$ref":"#/components/schemas/DeviationIncompatible"}],"title":"Response 422 Postdeviationduplicate"}}},"description":"Unprocessable Content"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__25"},{"$ref":"#/components/schemas/LockedFeature"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Postdeviationduplicate"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/DeviationNotFound"}],"title":"Response 404 Postdeviationduplicate"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoPublishedGtfs"}}},"description":"Conflict"},"200":{"description":"Dry run: the compatibility report, nothing written.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviationDuplicateResultSchema"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/trip-updates/soft-delete":{"patch":{"tags":["trip-updates"],"summary":"Bulk soft-delete trip-updates by capping their end_date at yesterday.","description":"**Sets ``end_date`` of every listed trip-update to yesterday. Trip-updates whose ``date`` is in the future are deleted outright since they would end up with an empty range.**\n\nRole needed: regulator, operator","operationId":"patchTripUpdateSoftDelete","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/TripUpdateSoftDeleteSchema"}}}},"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__24"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Patchtripupdatesoftdelete"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRequest"}}},"description":"Unprocessable Content"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/on-demand-routes":{"get":{"tags":["on-demand-routes"],"summary":"List the on-demand routes of a group","description":"**This endpoint allows you to list the on-demand routes of a group.**\n\nFeature needed: device_event_sourcing,on_demand\n\nRole needed: regulator, reader, operator","operationId":"getOnDemandRoutes","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":"route_status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/OnDemandRouteStatusSchema"},{"type":"null"}],"description":"Keep only the routes in this status","title":"Route Status"},"description":"Keep only the routes in this 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/OnDemandRouteSchema"},"title":"Response Getondemandroutes"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__3"}],"title":"Response 403 Getondemandroutes"}}},"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"},"post":{"tags":["on-demand-routes"],"summary":"Create an on-demand route","description":"**This endpoint allows you to create an on-demand route.**\n\nEvery stop gets a generated `stop_id`, owned by the route and never a `stop_id` of the GTFS feed. One sent on creation is ignored: there is nothing to carry over yet.\n\nFeature needed: device_event_sourcing,on_demand\n\nRole needed: regulator, operator","operationId":"postOnDemandRoutes","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/OnDemandRoutePayloadSchema"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnDemandRouteSchema"}}}},"422":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/OnDemandRouteWithoutStop"},{"$ref":"#/components/schemas/OnDemandRouteInvalidPeriod"}],"title":"Response 422 Postondemandroutes"}}},"description":"Unprocessable Content"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__26"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Postondemandroutes"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"}},"x-api-version":4,"x-path-prefix":"/api"}},"/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}},"/api/v4/groups/{group_id}/on-demand-routes/{route_id}":{"get":{"tags":["on-demand-routes"],"summary":"Get an on-demand route","description":"**This endpoint allows you to get a single on-demand route.**\n\nFeature needed: device_event_sourcing,on_demand\n\nRole needed: regulator, reader, operator","operationId":"getOnDemandRoute","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":"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"},{"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/OnDemandRouteSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__27"}],"title":"Response 403 Getondemandroute"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/OnDemandRouteNotFound"}],"title":"Response 404 Getondemandroute"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"put":{"tags":["on-demand-routes"],"summary":"Replace an on-demand route","description":"**This endpoint allows you to replace an on-demand route.**\n\nSend a stop back with its `stop_id` to keep it, including when renaming or moving it; omit it to add one. Refused on an archived route, which can only be restored. Archiving goes through here.\n\nFeature needed: device_event_sourcing,on_demand\n\nRole needed: regulator, operator","operationId":"putOnDemandRoute","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":"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"},{"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/OnDemandRoutePayloadSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnDemandRouteSchema"}}}},"422":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/OnDemandRouteWithoutStop"},{"$ref":"#/components/schemas/OnDemandRouteInvalidPeriod"},{"$ref":"#/components/schemas/OnDemandRouteUnknownStop"},{"$ref":"#/components/schemas/OnDemandRouteDuplicateStop"}],"title":"Response 422 Putondemandroute"}}},"description":"Unprocessable Content"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__28"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Putondemandroute"}}},"description":"Forbidden"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnDemandRouteArchived"}}},"description":"Conflict"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/OnDemandRouteNotFound"}],"title":"Response 404 Putondemandroute"}}},"description":"Not Found"}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["on-demand-routes"],"summary":"Delete an on-demand route","description":"**This endpoint allows you to delete an on-demand route.**\n\nFeature needed: device_event_sourcing,on_demand\n\nRole needed: regulator, operator","operationId":"deleteOnDemandRoute","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":"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"},{"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/OnDemandRouteSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__29"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Deleteondemandroute"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/OnDemandRouteNotFound"}],"title":"Response 404 Deleteondemandroute"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/on-demand-routes/{route_id}/duplicate":{"post":{"tags":["on-demand-routes"],"summary":"Duplicate an on-demand route","description":"**This endpoint allows you to duplicate an on-demand route.**\n\nThe copy carries the same stops under new identifiers, so the history of the two routes never mixes. It comes back inactive, whatever the source status: duplicating must not put a second vehicle on the road as a side effect. Refused on an archived route.\n\nFeature needed: device_event_sourcing,on_demand\n\nRole needed: regulator, operator","operationId":"postOnDemandRouteDuplicate","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":"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"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnDemandRouteSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/OnDemandRouteNotFound"}],"title":"Response 404 Postondemandrouteduplicate"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnDemandRouteArchived"}}},"description":"Conflict"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__30"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Postondemandrouteduplicate"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/on-demand-routes/{route_id}/restore":{"post":{"tags":["on-demand-routes"],"summary":"Restore an archived on-demand route","description":"**This endpoint allows you to restore an archived on-demand route.**\n\nThe only operation an archived route accepts. It comes back inactive, not active: restoring must not put a vehicle back on the road as a side effect.\n\nFeature needed: device_event_sourcing,on_demand\n\nRole needed: regulator, operator","operationId":"postOnDemandRouteRestore","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":"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"},{"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/OnDemandRouteSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/OnDemandRouteNotFound"}],"title":"Response 404 Postondemandrouterestore"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnDemandRouteNotArchived"}}},"description":"Conflict"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__31"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Postondemandrouterestore"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/nav-data-processor-api/v4/login/group":{"post":{"tags":["auth","ndp"],"summary":"Login on group by access code","description":"**This endpoint allows to log on group by access code.**","operationId":"postLoginGroupNdp","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/LoginGroupSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponseSchema"}}}},"401":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/UnauthorizedWrongGroupCode"},{"$ref":"#/components/schemas/UnauthorizedDeviceSessionOnly"},{"$ref":"#/components/schemas/UnauthorizedArchivedDevice"}],"title":"Response 401 Postlogingroupndp"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuotaDevicesReached"}}},"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"}},"/api/v4/login/group":{"post":{"tags":["auth"],"summary":"Login on group by access code","description":"**This endpoint allows to log on group by access code.**","operationId":"postLoginGroup","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/LoginGroupSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponseSchema"}}}},"401":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/UnauthorizedWrongGroupCode"},{"$ref":"#/components/schemas/UnauthorizedDeviceSessionOnly"},{"$ref":"#/components/schemas/UnauthorizedArchivedDevice"}],"title":"Response 401 Postlogingroup"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuotaDevicesReached"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/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}},"/nav-data-processor-api/v4/login":{"post":{"tags":["auth","ndp"],"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":"postLoginNdp","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_postLoginNdp"}}}},"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":"/nav-data-processor-api","x-deployment":"ndp"}},"/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}},"/auth/logout":{"get":{"tags":["auth"],"summary":"Log out of your session","description":"<h1><b>This endpoint is deprecated, use <code>/api/v2/logout</code> instead.</b></h1>\n\n**This endpoint allows to log out of your session.**","operationId":"getAuthLogout","deprecated":true,"security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"redirect","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redirect"}},{"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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/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},"post":{"tags":["roles"],"summary":"Upsert user with its role","description":"**This endpoint allows you to create a user with a role in a group.**\n\nCreate user if not exist, delete all previous role of the user then create a new role.\n\nRole needed: admin","operationId":"postRoles","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/UserCreateRoleSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Postroles"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/ForbiddenDifferentTeam"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__32"}],"title":"Response 403 Postroles"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetUrlNotConfigured"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/roles/{user_id}":{"put":{"tags":["roles"],"summary":"Update a role of a user in a group.","description":"**This endpoint allows you to update a role of a user in a group.**\n\nUpdate role of a user in a group.\n\nRole needed: admin","operationId":"putRole","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the user you want to update","title":"User Id"},"description":"The id of the user you want to update"},{"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/RoleUpdateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/RoleNotFound"},{"$ref":"#/components/schemas/UserNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putrole"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/NoUser"},{"$ref":"#/components/schemas/ForbiddenDifferentTeam"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__33"}],"title":"Response 403 Putrole"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["roles"],"summary":"Delete a role of a user in a group","description":"**This endpoint allows you to delete a role of a user in a group.**\n\nRole needed: admin","operationId":"deleteRole","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":"user_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the user you want to delete","title":"User Id"},"description":"The id of the user you want to delete"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__34"}],"title":"Response 403 Deleterole"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/UserNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deleterole"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/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}/integrations/mcf":{"get":{"tags":["integration"],"summary":"Get mcf integration settings.","description":"**Get the mcf integration settings for a group.**\n\nRole needed: driver, admin","operationId":"getIntegrationMcf","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":{"$ref":"#/components/schemas/McfIntegrationSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getintegrationmcf"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__35"}],"title":"Response 403 Getintegrationmcf"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"put":{"tags":["integration"],"summary":"Create or replace mcf integration settings.","description":"**Create or replace the mcf integration settings.**\n\nRole needed: admin","operationId":"putIntegrationMcf","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/McfIntegrationSchema","description":"mcf integration data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McfIntegrationSchema"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncorrectIntegration"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putintegrationmcf"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__36"}],"title":"Response 403 Putintegrationmcf"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["integration"],"summary":"Delete mcf integration settings.","description":"**Delete the mcf integration settings.**\n\nRole needed: admin","operationId":"deleteIntegrationMcf","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":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deleteintegrationmcf"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__37"}],"title":"Response 403 Deleteintegrationmcf"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/integrations/sftp":{"get":{"tags":["integration"],"summary":"Get sftp integration settings.","description":"**Get the sftp integration settings for a group.**\n\nRole needed: driver, admin","operationId":"getIntegrationSftp","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":{"$ref":"#/components/schemas/SftpIntegrationSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getintegrationsftp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__35"}],"title":"Response 403 Getintegrationsftp"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"put":{"tags":["integration"],"summary":"Create or replace sftp integration settings.","description":"**Create or replace the sftp integration settings.**\n\nRole needed: admin","operationId":"putIntegrationSftp","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/SftpIntegrationSchema","description":"sftp integration data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SftpIntegrationSchema"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncorrectIntegration"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putintegrationsftp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__36"}],"title":"Response 403 Putintegrationsftp"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["integration"],"summary":"Delete sftp integration settings.","description":"**Delete the sftp integration settings.**\n\nRole needed: admin","operationId":"deleteIntegrationSftp","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":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deleteintegrationsftp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__37"}],"title":"Response 403 Deleteintegrationsftp"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/integrations/nocrates":{"get":{"tags":["integration"],"summary":"Get nocrates integration settings.","description":"**Get the nocrates integration settings for a group.**\n\nRole needed: driver, admin","operationId":"getIntegrationNocrates","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":{"$ref":"#/components/schemas/NocratesIntegrationSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getintegrationnocrates"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__35"}],"title":"Response 403 Getintegrationnocrates"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"put":{"tags":["integration"],"summary":"Create or replace nocrates integration settings.","description":"**Create or replace the nocrates integration settings.**\n\nRole needed: admin","operationId":"putIntegrationNocrates","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/NocratesIntegrationSchema","description":"nocrates integration data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NocratesIntegrationSchema"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncorrectIntegration"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putintegrationnocrates"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__36"}],"title":"Response 403 Putintegrationnocrates"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["integration"],"summary":"Delete nocrates integration settings.","description":"**Delete the nocrates integration settings.**\n\nRole needed: admin","operationId":"deleteIntegrationNocrates","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":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deleteintegrationnocrates"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__37"}],"title":"Response 403 Deleteintegrationnocrates"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/integrations/rail-data":{"get":{"tags":["integration"],"summary":"Get rail_data integration settings.","description":"**Get the rail_data integration settings for a group.**\n\nRole needed: driver, admin","operationId":"getIntegrationRailData","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":{"$ref":"#/components/schemas/RailDataIntegrationSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getintegrationraildata"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__35"}],"title":"Response 403 Getintegrationraildata"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"put":{"tags":["integration"],"summary":"Create or replace rail_data integration settings.","description":"**Create or replace the rail_data integration settings.**\n\nRole needed: admin","operationId":"putIntegrationRailData","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/RailDataIntegrationSchema","description":"rail_data integration data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RailDataIntegrationSchema"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncorrectIntegration"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putintegrationraildata"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__36"}],"title":"Response 403 Putintegrationraildata"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["integration"],"summary":"Delete rail_data integration settings.","description":"**Delete the rail_data integration settings.**\n\nRole needed: admin","operationId":"deleteIntegrationRailData","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":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deleteintegrationraildata"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__37"}],"title":"Response 403 Deleteintegrationraildata"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/integrations/message-notifications":{"get":{"tags":["integration"],"summary":"Get message_notifications integration settings.","description":"**Get the message_notifications integration settings for a group.**\n\nRole needed: driver, admin","operationId":"getIntegrationMessageNotifications","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":{"$ref":"#/components/schemas/MessageNotificationsIntegrationSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getintegrationmessagenotifications"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__35"}],"title":"Response 403 Getintegrationmessagenotifications"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"put":{"tags":["integration"],"summary":"Create or replace message_notifications integration settings.","description":"**Create or replace the message_notifications integration settings.**\n\nRole needed: admin","operationId":"putIntegrationMessageNotifications","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/MessageNotificationsIntegrationSchema","description":"message_notifications integration data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageNotificationsIntegrationSchema"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncorrectIntegration"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putintegrationmessagenotifications"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__36"}],"title":"Response 403 Putintegrationmessagenotifications"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["integration"],"summary":"Delete message_notifications integration settings.","description":"**Delete the message_notifications integration settings.**\n\nRole needed: admin","operationId":"deleteIntegrationMessageNotifications","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":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deleteintegrationmessagenotifications"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__37"}],"title":"Response 403 Deleteintegrationmessagenotifications"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/integrations/silv1":{"get":{"tags":["integration"],"summary":"Get silv1 integration settings.","description":"**Get the silv1 integration settings for a group.**\n\nRole needed: driver, admin","operationId":"getIntegrationSilv1","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":{"$ref":"#/components/schemas/Silv1IntegrationSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getintegrationsilv1"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__35"}],"title":"Response 403 Getintegrationsilv1"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"put":{"tags":["integration"],"summary":"Create or replace silv1 integration settings.","description":"**Create or replace the silv1 integration settings.**\n\nRole needed: admin","operationId":"putIntegrationSilv1","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/Silv1IntegrationSchema","description":"silv1 integration data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Silv1IntegrationSchema"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncorrectIntegration"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putintegrationsilv1"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__36"}],"title":"Response 403 Putintegrationsilv1"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["integration"],"summary":"Delete silv1 integration settings.","description":"**Delete the silv1 integration settings.**\n\nRole needed: admin","operationId":"deleteIntegrationSilv1","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":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deleteintegrationsilv1"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__37"}],"title":"Response 403 Deleteintegrationsilv1"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/integrations/hanover-ip":{"get":{"tags":["integration"],"summary":"Get hanover_ip integration settings.","description":"**Get the hanover_ip integration settings for a group.**\n\nRole needed: driver, admin","operationId":"getIntegrationHanoverIp","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":{"$ref":"#/components/schemas/HanoverIpIntegrationSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getintegrationhanoverip"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__35"}],"title":"Response 403 Getintegrationhanoverip"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"put":{"tags":["integration"],"summary":"Create or replace hanover_ip integration settings.","description":"**Create or replace the hanover_ip integration settings.**\n\nRole needed: admin","operationId":"putIntegrationHanoverIp","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/HanoverIpIntegrationSchema","description":"hanover_ip integration data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HanoverIpIntegrationSchema"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncorrectIntegration"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putintegrationhanoverip"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__36"}],"title":"Response 403 Putintegrationhanoverip"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["integration"],"summary":"Delete hanover_ip integration settings.","description":"**Delete the hanover_ip integration settings.**\n\nRole needed: admin","operationId":"deleteIntegrationHanoverIp","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":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deleteintegrationhanoverip"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__37"}],"title":"Response 403 Deleteintegrationhanoverip"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/integrations/webreathe-ip":{"get":{"tags":["integration"],"summary":"Get webreathe_ip integration settings.","description":"**Get the webreathe_ip integration settings for a group.**\n\nRole needed: driver, admin","operationId":"getIntegrationWebreatheIp","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":{"$ref":"#/components/schemas/WebreatheIpIntegrationSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getintegrationwebreatheip"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__35"}],"title":"Response 403 Getintegrationwebreatheip"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"put":{"tags":["integration"],"summary":"Create or replace webreathe_ip integration settings.","description":"**Create or replace the webreathe_ip integration settings.**\n\nRole needed: admin","operationId":"putIntegrationWebreatheIp","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/WebreatheIpIntegrationSchema","description":"webreathe_ip integration data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebreatheIpIntegrationSchema"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncorrectIntegration"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putintegrationwebreatheip"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__36"}],"title":"Response 403 Putintegrationwebreatheip"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["integration"],"summary":"Delete webreathe_ip integration settings.","description":"**Delete the webreathe_ip integration settings.**\n\nRole needed: admin","operationId":"deleteIntegrationWebreatheIp","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":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deleteintegrationwebreatheip"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__37"}],"title":"Response 403 Deleteintegrationwebreatheip"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/integrations/conduent":{"get":{"tags":["integration"],"summary":"Get conduent integration settings.","description":"**Get the conduent integration settings for a group.**\n\nRole needed: driver, admin","operationId":"getIntegrationConduent","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":{"$ref":"#/components/schemas/ConduentIntegrationSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getintegrationconduent"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__35"}],"title":"Response 403 Getintegrationconduent"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"put":{"tags":["integration"],"summary":"Create or replace conduent integration settings.","description":"**Create or replace the conduent integration settings.**\n\nRole needed: admin","operationId":"putIntegrationConduent","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/ConduentIntegrationSchema","description":"conduent integration data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConduentIntegrationSchema"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncorrectIntegration"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putintegrationconduent"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__36"}],"title":"Response 403 Putintegrationconduent"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["integration"],"summary":"Delete conduent integration settings.","description":"**Delete the conduent integration settings.**\n\nRole needed: admin","operationId":"deleteIntegrationConduent","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":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deleteintegrationconduent"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__37"}],"title":"Response 403 Deleteintegrationconduent"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/integrations/seipra":{"get":{"tags":["integration"],"summary":"Get seipra integration settings.","description":"**Get the seipra integration settings for a group.**\n\nRole needed: driver, admin","operationId":"getIntegrationSeipra","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":{"$ref":"#/components/schemas/SeipraIntegrationSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getintegrationseipra"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__35"}],"title":"Response 403 Getintegrationseipra"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"put":{"tags":["integration"],"summary":"Create or replace seipra integration settings.","description":"**Create or replace the seipra integration settings.**\n\nRole needed: admin","operationId":"putIntegrationSeipra","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/SeipraIntegrationSchema","description":"seipra integration data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeipraIntegrationSchema"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncorrectIntegration"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putintegrationseipra"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__36"}],"title":"Response 403 Putintegrationseipra"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["integration"],"summary":"Delete seipra integration settings.","description":"**Delete the seipra integration settings.**\n\nRole needed: admin","operationId":"deleteIntegrationSeipra","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":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deleteintegrationseipra"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__37"}],"title":"Response 403 Deleteintegrationseipra"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/integrations/matawan":{"get":{"tags":["integration"],"summary":"Get matawan integration settings.","description":"**Get the matawan integration settings for a group.**\n\nRole needed: driver, admin","operationId":"getIntegrationMatawan","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":{"$ref":"#/components/schemas/MatawanIntegrationSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getintegrationmatawan"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__35"}],"title":"Response 403 Getintegrationmatawan"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"put":{"tags":["integration"],"summary":"Create or replace matawan integration settings.","description":"**Create or replace the matawan integration settings.**\n\nRole needed: admin","operationId":"putIntegrationMatawan","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/MatawanIntegrationSchema","description":"matawan integration data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MatawanIntegrationSchema"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncorrectIntegration"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putintegrationmatawan"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__36"}],"title":"Response 403 Putintegrationmatawan"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["integration"],"summary":"Delete matawan integration settings.","description":"**Delete the matawan integration settings.**\n\nRole needed: admin","operationId":"deleteIntegrationMatawan","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":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deleteintegrationmatawan"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__37"}],"title":"Response 403 Deleteintegrationmatawan"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/integrations/aep":{"get":{"tags":["integration"],"summary":"Get aep integration settings.","description":"**Get the aep integration settings for a group.**\n\nRole needed: driver, admin","operationId":"getIntegrationAep","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":{"$ref":"#/components/schemas/AepIntegrationSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getintegrationaep"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__35"}],"title":"Response 403 Getintegrationaep"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"put":{"tags":["integration"],"summary":"Create or replace aep integration settings.","description":"**Create or replace the aep integration settings.**\n\nRole needed: admin","operationId":"putIntegrationAep","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/AepIntegrationSchema","description":"aep integration data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AepIntegrationSchema"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncorrectIntegration"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putintegrationaep"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__36"}],"title":"Response 403 Putintegrationaep"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["integration"],"summary":"Delete aep integration settings.","description":"**Delete the aep integration settings.**\n\nRole needed: admin","operationId":"deleteIntegrationAep","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":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deleteintegrationaep"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__37"}],"title":"Response 403 Deleteintegrationaep"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/integrations/kuba":{"get":{"tags":["integration"],"summary":"Get kuba integration settings.","description":"**Get the kuba integration settings for a group.**\n\nRole needed: driver, admin","operationId":"getIntegrationKuba","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":{"$ref":"#/components/schemas/KubaIntegrationSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getintegrationkuba"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__35"}],"title":"Response 403 Getintegrationkuba"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"put":{"tags":["integration"],"summary":"Create or replace kuba integration settings.","description":"**Create or replace the kuba integration settings.**\n\nRole needed: admin","operationId":"putIntegrationKuba","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/KubaIntegrationSchema","description":"kuba integration data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KubaIntegrationSchema"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncorrectIntegration"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putintegrationkuba"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__36"}],"title":"Response 403 Putintegrationkuba"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["integration"],"summary":"Delete kuba integration settings.","description":"**Delete the kuba integration settings.**\n\nRole needed: admin","operationId":"deleteIntegrationKuba","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":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deleteintegrationkuba"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__37"}],"title":"Response 403 Deleteintegrationkuba"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/integrations/duhip":{"get":{"tags":["integration"],"summary":"Get duhip integration settings.","description":"**Get the duhip integration settings for a group.**\n\nRole needed: driver, admin","operationId":"getIntegrationDuhip","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":{"$ref":"#/components/schemas/DuhipIntegrationSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getintegrationduhip"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__35"}],"title":"Response 403 Getintegrationduhip"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"put":{"tags":["integration"],"summary":"Create or replace duhip integration settings.","description":"**Create or replace the duhip integration settings.**\n\nRole needed: admin","operationId":"putIntegrationDuhip","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/DuhipIntegrationSchema","description":"duhip integration data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DuhipIntegrationSchema"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncorrectIntegration"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putintegrationduhip"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__36"}],"title":"Response 403 Putintegrationduhip"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["integration"],"summary":"Delete duhip integration settings.","description":"**Delete the duhip integration settings.**\n\nRole needed: admin","operationId":"deleteIntegrationDuhip","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":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deleteintegrationduhip"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__37"}],"title":"Response 403 Deleteintegrationduhip"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/integrations/qip":{"get":{"tags":["integration"],"summary":"Get qip integration settings.","description":"**Get the qip integration settings for a group.**\n\nRole needed: driver, admin","operationId":"getIntegrationQip","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":{"$ref":"#/components/schemas/QipIntegrationSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getintegrationqip"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__35"}],"title":"Response 403 Getintegrationqip"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"put":{"tags":["integration"],"summary":"Create or replace qip integration settings.","description":"**Create or replace the qip integration settings.**\n\nRole needed: admin","operationId":"putIntegrationQip","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/QipIntegrationSchema","description":"qip integration data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QipIntegrationSchema"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncorrectIntegration"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putintegrationqip"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__36"}],"title":"Response 403 Putintegrationqip"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["integration"],"summary":"Delete qip integration settings.","description":"**Delete the qip integration settings.**\n\nRole needed: admin","operationId":"deleteIntegrationQip","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":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deleteintegrationqip"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__37"}],"title":"Response 403 Deleteintegrationqip"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/integrations/paragon":{"get":{"tags":["integration"],"summary":"Get paragon integration settings.","description":"**Get the paragon integration settings for a group.**\n\nRole needed: driver, admin","operationId":"getIntegrationParagon","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":{"$ref":"#/components/schemas/ParagonIntegrationSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getintegrationparagon"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__35"}],"title":"Response 403 Getintegrationparagon"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"put":{"tags":["integration"],"summary":"Create or replace paragon integration settings.","description":"**Create or replace the paragon integration settings.**\n\nRole needed: admin","operationId":"putIntegrationParagon","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/ParagonIntegrationSchema","description":"paragon integration data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParagonIntegrationSchema"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncorrectIntegration"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putintegrationparagon"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__36"}],"title":"Response 403 Putintegrationparagon"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["integration"],"summary":"Delete paragon integration settings.","description":"**Delete the paragon integration settings.**\n\nRole needed: admin","operationId":"deleteIntegrationParagon","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":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deleteintegrationparagon"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__37"}],"title":"Response 403 Deleteintegrationparagon"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/integrations/webreathe":{"get":{"tags":["integration"],"summary":"Get webreathe integration settings.","description":"**Get the webreathe integration settings for a group.**\n\nRole needed: driver, admin","operationId":"getIntegrationWebreathe","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":{"$ref":"#/components/schemas/WebreatheIntegrationSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getintegrationwebreathe"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__35"}],"title":"Response 403 Getintegrationwebreathe"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"put":{"tags":["integration"],"summary":"Create or replace webreathe integration settings.","description":"**Create or replace the webreathe integration settings.**\n\nRole needed: admin","operationId":"putIntegrationWebreathe","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/WebreatheIntegrationSchema","description":"webreathe integration data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebreatheIntegrationSchema"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncorrectIntegration"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putintegrationwebreathe"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__36"}],"title":"Response 403 Putintegrationwebreathe"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["integration"],"summary":"Delete webreathe integration settings.","description":"**Delete the webreathe integration settings.**\n\nRole needed: admin","operationId":"deleteIntegrationWebreathe","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":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deleteintegrationwebreathe"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__37"}],"title":"Response 403 Deleteintegrationwebreathe"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/integrations/instavox":{"get":{"tags":["integration"],"summary":"Get instavox integration settings.","description":"**Get the instavox integration settings for a group.**\n\nRole needed: driver, admin","operationId":"getIntegrationInstavox","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":{"$ref":"#/components/schemas/InstavoxIntegrationSchema-Output"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getintegrationinstavox"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__35"}],"title":"Response 403 Getintegrationinstavox"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"put":{"tags":["integration"],"summary":"Create or replace instavox integration settings.","description":"**Create or replace the instavox integration settings.**\n\nRole needed: admin","operationId":"putIntegrationInstavox","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/InstavoxIntegrationSchema-Input","description":"instavox integration data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstavoxIntegrationSchema-Output"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncorrectIntegration"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putintegrationinstavox"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__36"}],"title":"Response 403 Putintegrationinstavox"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["integration"],"summary":"Delete instavox integration settings.","description":"**Delete the instavox integration settings.**\n\nRole needed: admin","operationId":"deleteIntegrationInstavox","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":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deleteintegrationinstavox"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__37"}],"title":"Response 403 Deleteintegrationinstavox"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/nav-data-processor-api/v4/groups/{group_id}/integrations":{"get":{"tags":["integration","ndp"],"summary":"Get all group integrations","description":"**This endpoint allows you to get all group integrations.**\n\nRole needed: driver, admin","operationId":"getIntegrationsNdp","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":"type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationType"},{"type":"null"}],"title":"Type"}},{"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":{"$ref":"#/components/schemas/IntegrationSchema"},"title":"Response Getintegrationsndp"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__38"}],"title":"Response 403 Getintegrationsndp"}}},"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"}},"/api/v4/groups/{group_id}/integrations":{"get":{"tags":["integration"],"summary":"Get all group integrations","description":"**This endpoint allows you to get all group integrations.**\n\nRole needed: driver, admin","operationId":"getIntegrations","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":"type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationType"},{"type":"null"}],"title":"Type"}},{"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":{"$ref":"#/components/schemas/IntegrationSchema"},"title":"Response Getintegrations"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__38"}],"title":"Response 403 Getintegrations"}}},"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"}},"/nav-data-processor-api/v4/groups/{group_id}/integrations/{integration}":{"get":{"tags":["integration","ndp"],"summary":"Get one group integration by id.","description":"**This endpoint allows you to get one group integration by id.**\n\nRole needed: driver, admin","operationId":"getIntegrationNdp","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":"integration","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/DriverIntegrationId"},{"$ref":"#/components/schemas/APIIntegrationId"}],"title":"Integration"}},{"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/IntegrationSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getintegrationndp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__35"}],"title":"Response 403 Getintegrationndp"}}},"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"}},"/api/v4/groups/{group_id}/integrations/{integration}":{"get":{"tags":["integration"],"summary":"Get one group integration by id.","description":"**This endpoint allows you to get one group integration by id.**\n\nRole needed: driver, admin","operationId":"getIntegration","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":"integration","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/DriverIntegrationId"},{"$ref":"#/components/schemas/APIIntegrationId"}],"title":"Integration"}},{"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/IntegrationSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getintegration"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__35"}],"title":"Response 403 Getintegration"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["integration"],"summary":"Delete group integration.","description":"**This endpoint allows you to delete a group integration.**\n\nRole needed: admin","operationId":"deleteIntegration","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"integration","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/DriverIntegrationId"},{"$ref":"#/components/schemas/APIIntegrationId"}],"title":"Integration"}},{"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":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deleteintegration"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__37"}],"title":"Response 403 Deleteintegration"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/integrations/{integration_id}":{"put":{"tags":["integration"],"summary":"Create or replace group integration.","description":"**This endpoint allows you to create or replace a group integration.**\n\nRole needed: admin","operationId":"putIntegration","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"anyOf":[{"$ref":"#/components/schemas/DriverIntegrationId"},{"$ref":"#/components/schemas/APIIntegrationId"}],"title":"Integration 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":"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/Integration","description":"integration data","examples":[{"enabled":true,"ip_address":"192.168.1.3","port":33334}]}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationSchema"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncorrectIntegration"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putintegration"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__36"}],"title":"Response 403 Putintegration"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/pub-groups":{"get":{"tags":["groups"],"summary":"Returns public group list","description":"**Lists the groups exposing a public display. A group appears only when the display feature is both unlocked for it and switched on by the operator.**","operationId":"getPubGroups","parameters":[{"name":"feature","in":"query","required":true,"schema":{"anyOf":[{"const":"display_info","type":"string"},{"const":"display_screen","type":"string"}],"description":"Feature the group need to have","title":"Feature"},"description":"Feature the group need to have"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GroupPublicSchemaV3"},"title":"Response Getpubgroups"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/nav-data-processor-api/v4/groups":{"get":{"tags":["groups","ndp"],"summary":"Returns groups list","description":"**This endpoint allows to get a list of groups.**","operationId":"getGroupsNdp","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","description":"Include archived groups (super-admin only)","default":false,"title":"Include Archived"},"description":"Include archived groups (super-admin only)"},{"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/GroupSchemaV3-Output"},"title":"Response Getgroupsndp"}}}},"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"}},"/api/v4/groups":{"get":{"tags":["groups"],"summary":"Returns groups list","description":"**This endpoint allows to get a list of groups.**","operationId":"getGroups","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","description":"Include archived groups (super-admin only)","default":false,"title":"Include Archived"},"description":"Include archived groups (super-admin only)"},{"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/GroupSchemaV3-Output"},"title":"Response Getgroups"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"post":{"tags":["groups"],"summary":"Create a group","description":"**This endpoint allows to create a group.**","operationId":"postGroups","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/GroupCreateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupSchemaV3-Output"}}}},"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"}},"/nav-data-processor-api/v4/select-groups":{"get":{"tags":["groups","ndp"],"summary":"Returns groups list for selection","description":"**This endpoint allows to get a list of groups for selection.**","operationId":"getSelectGroupsNdp","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/SelectGroupSchema"},"title":"Response Getselectgroupsndp"}}}},"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"}},"/api/v4/select-groups":{"get":{"tags":["groups"],"summary":"Returns groups list for selection","description":"**This endpoint allows to get a list of groups for selection.**","operationId":"getSelectGroups","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/SelectGroupSchema"},"title":"Response Getselectgroups"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/pub-groups/{group_id}":{"get":{"tags":["groups"],"summary":"Return the public group for the given group_id.","description":"**This endpoint allows to get a group by its id.**","operationId":"getPubGroup","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"feature","in":"query","required":true,"schema":{"$ref":"#/components/schemas/Feature"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupPublicSchemaV3"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/LockedFeature"},{"$ref":"#/components/schemas/DisplayFeedDisabled"}],"title":"Response 403 Getpubgroup"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}":{"get":{"tags":["groups"],"summary":"Return the group for the given group_id.","description":"**This endpoint allows to get a group by its id.**","operationId":"getGroup","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"feature","in":"query","required":true,"schema":{"$ref":"#/components/schemas/Feature"}},{"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/GroupSchemaV3-Output"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoRole"}}},"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"},"put":{"tags":["groups"],"summary":"Modify a group","description":"**This endpoint allows to modify a group by its id.**","operationId":"putGroup","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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupSchemaV3-Input"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupSchemaV3-Output"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"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"},"delete":{"tags":["groups"],"summary":"Delete a group","description":"**This endpoint allows to delete a group.**","operationId":"deleteGroup","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":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"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"}},"/api/v4/groups/{group_id}/archive":{"post":{"tags":["groups"],"summary":"Archive a group","description":"**Reversibly hide a group from browse listings. Does not delete it nor touch its Auth0 organization.**","operationId":"postArchive","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/GroupSchemaV3-Output"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"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"}},"/api/v4/groups/{group_id}/unarchive":{"post":{"tags":["groups"],"summary":"Unarchive a group","description":"**Restore an archived group into the default browse listings.**","operationId":"postUnarchive","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/GroupSchemaV3-Output"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"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"}},"/api/v4/groups/{group_id}/code":{"post":{"tags":["groups"],"summary":"Create, prolong or keep an access code","description":"**This endpoint allows create, prolong or keep an access code for a group.**\n\nRole needed: operator, admin","operationId":"postCode","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":"mode","in":"query","required":false,"schema":{"$ref":"#/components/schemas/CodeGroupPostMode","description":"* `create` - new code will be created and returned* `keep` - existing code will be returned. If no code exists, a new one will be created.* `prolong` - existing code will have its expiration date prolonged and be returned. If no code exists, a new one will be created.","default":"create"},"description":"* `create` - new code will be created and returned* `keep` - existing code will be returned. If no code exists, a new one will be created.* `prolong` - existing code will have its expiration date prolonged and be returned. If no code exists, a new one will be created."},{"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/CodeGroupSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__7"}],"title":"Response 403 Postcode"}}},"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"},"get":{"tags":["groups"],"summary":"Get current group access code","description":"**This endpoint allows to get the current access code for a group.**\n\nRole needed: operator, admin","operationId":"getCode","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":{"$ref":"#/components/schemas/CodeGroupSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/GroupAccessCodeNotFound"}],"title":"Response 404 Getcode"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__39"}],"title":"Response 403 Getcode"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["groups"],"summary":"Delete any access code","description":"**This endpoint allows to delete any access code for a group.**\n\nRole needed: operator, admin","operationId":"deleteCode","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":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__7"}],"title":"Response 403 Deletecode"}}},"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"}},"/api/v4/groups/{group_id}/logo":{"get":{"tags":["groups"],"summary":"Get group logo","description":"**This endpoint allows to get the logo of a group.**","operationId":"getLogo","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the group you want to retrieve datas from.","title":"Group Id"},"description":"The id of the group you want to retrieve datas from."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"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"},"put":{"tags":["groups"],"summary":"Update group logo","description":"**This endpoint allows to update the logo of a group.**\n\nRole needed: operator","operationId":"putLogo","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"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_putLogo"}}}},"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__40"}],"title":"Response 403 Putlogo"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnsupportedFileContentType"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["groups"],"summary":"Delete group logo","description":"**This endpoint allows to delete the logo of a group.**\n\nRole needed: operator","operationId":"deleteLogo","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":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__41"}],"title":"Response 403 Deletelogo"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/connected-vehicles":{"get":{"tags":["groups"],"summary":"Pick of usage for a group","description":"**Get the pick usage (concurrent duties at a time) for a group with the timestamp at which moment it occured**","operationId":"getConnectedVehicles","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"start_ts","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]}],"title":"Start Ts"},"description":"Optional, default at now minus 30 days by default"},{"name":"end_ts","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]}],"title":"End Ts"},"description":"Optional, default at now by default"},{"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":{"anyOf":[{"$ref":"#/components/schemas/DailyActiveVehiclesSchema"},{"$ref":"#/components/schemas/NoActiveDeviceSchema"}],"title":"Response Getconnectedvehicles"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"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"}},"/api/v4/connected-vehicles":{"get":{"tags":["groups"],"summary":"Each pick of usage for each groups","description":"**Get the pick usage (concurrent duties at a time) for each group with the timestamp at which moment it occured**","operationId":"getGlobalConnectedVehicles","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"start_ts","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]}],"title":"Start Ts"},"description":"Optional, default at now minus 30 days by default"},{"name":"end_ts","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]}],"title":"End Ts"},"description":"Optional, default at now by default"},{"name":"group_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group 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":"object","additionalProperties":{"anyOf":[{"$ref":"#/components/schemas/DailyActiveVehiclesSchema"},{"$ref":"#/components/schemas/NoActiveDeviceSchema"}]},"title":"Response Getglobalconnectedvehicles"}}}},"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"}},"/api/v4/features":{"get":{"tags":["groups"],"summary":"Get unlockable features","description":"**This endpoint allows to list all possible unlockable features disponible in pysae.**","operationId":"getFeatures","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Feature"},"type":"array","uniqueItems":true,"title":"Response Getfeatures"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/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},"put":{"tags":["rail"],"summary":"Attach a stop of the network to a rail station.","description":"**Create or refresh a `(stop_id, uic)` link, idempotently.**\n\n- Requires the `rail_data` feature and the `admin` role.\n- Re-submitting an existing link refreshes its `stop_name` snapshot.\n- An unknown UIC code is refused with `RAIL_STATION_NOT_FOUND`.\n- A station absent from the rail store answers immediately with `ingestion_status: pending` and is ingested asynchronously; poll the list until it turns `ready` (or `not_found` when no train serves it).\n\nFeature needed: rail_data\n\nRole needed: admin","operationId":"putRailStationLinks","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/RailStationLinkPutSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RailStationLinkSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__42"}],"title":"Response 403 Putrailstationlinks"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/RailStationNotFound"}],"title":"Response 404 Putrailstationlinks"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/rail/station-links/{stop_id}/{uic}":{"delete":{"tags":["rail"],"summary":"Detach a stop of the network from a rail station.","description":"**Delete the `(stop_id, uic)` link.**\n\n- Requires the `rail_data` feature and the `admin` role.\n- Deleting a link that does not exist responds 404.\n\nFeature needed: rail_data\n\nRole needed: admin","operationId":"deleteRailStationLink","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":"stop_id","in":"path","required":true,"schema":{"type":"string","description":"Identifier of the stop in your network's GTFS.","title":"Stop Id"},"description":"Identifier of the stop in your network's GTFS."},{"name":"uic","in":"path","required":true,"schema":{"type":"string","description":"UIC code the link points to, e.g. `87597005`.","title":"Uic"},"description":"UIC code the link points to, e.g. `87597005`."},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__43"}],"title":"Response 403 Deleterailstationlink"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/RailStationLinkNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deleterailstationlink"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/nav-data-processor-api/v4/groups/{group_id}/drivers":{"get":{"tags":["drivers","ndp"],"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":"getDriversNdp","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 Getdriversndp"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__12"}],"title":"Response 403 Getdriversndp"}}},"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"}},"/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__12"}],"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},"post":{"tags":["drivers"],"summary":"Add new driver to the DB.","description":"**This endpoint allows you to create a new driver**\n\nRole needed: operator","operationId":"postDrivers","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/DriverCreateSchema"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"string","title":"Response Postdrivers"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__45"},{"$ref":"#/components/schemas/ForbiddenDifferentTeam"}],"title":"Response 403 Postdrivers"}}},"description":"Forbidden"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriverCodeAlreadyTaken"}}},"description":"Conflict"},"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"}},"/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__44"}],"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},"put":{"tags":["drivers"],"summary":"Modify all fields of the driver.","description":"**This endpoint allows you to update a driver**\n\nRole needed: operator","operationId":"putDriver","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriverCreateSchema"}}}},"responses":{"204":{"description":"Successful Response"},"409":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DriverAnonymised"},{"$ref":"#/components/schemas/DriverCodeAlreadyTaken"}],"title":"Response 409 Putdriver"}}},"description":"Conflict"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__46"},{"$ref":"#/components/schemas/ForbiddenDifferentTeam"}],"title":"Response 403 Putdriver"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/DriverNotFound"}],"title":"Response 404 Putdriver"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"patch":{"tags":["drivers"],"summary":"Endpoint used to archive drivers.","description":"**This endpoint allows you to archive a driver**\n\nRole needed: operator","operationId":"patchDriver","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriverArchiveSchema"}}}},"responses":{"204":{"description":"Successful Response"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriverAnonymised"}}},"description":"Conflict"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__47"}],"title":"Response 403 Patchdriver"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/DriverNotFound"}],"title":"Response 404 Patchdriver"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/drivers-archive":{"post":{"tags":["drivers"],"summary":"Set status archived or active for drivers by id","description":"**This endpoint allows to set a status on multiple drivers by id.\nThe response reports how many drivers were actually modified; a difference with the number of ids sent means some ids do not exist or you are not allowed to update them.**\n\nRole needed: operator","operationId":"postDriversArchive","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/BulkDriverArchiveSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDriverArchiveResultSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__7"}],"title":"Response 403 Postdriversarchive"}}},"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"}},"/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__13"}],"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}/import/drivers":{"post":{"tags":["drivers"],"summary":"Import a csv file with drivers","description":"**This endpoint allows you to import drivers**\n\nthe file has to be a csv file.\n\nRole needed: operator","operationId":"postImportDrivers","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":"compare_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Compare Only"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_postImportDrivers"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DriverImportResultSchema"},{"$ref":"#/components/schemas/CompareSchema"}],"title":"Response Postimportdrivers"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__48"}],"title":"Response 403 Postimportdrivers"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriverImportValidationFailed"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/drivers/{driver_id}/code":{"put":{"tags":["drivers"],"summary":"Endpoint used to change a driver code.","description":"**This endpoint allows you to change a driver code**\n\nRole needed: operator","operationId":"putDriverCode","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriverCodeSchema"}}}},"responses":{"204":{"description":"Successful Response"},"409":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DriverAnonymised"},{"$ref":"#/components/schemas/DriverCodeAlreadyTaken"}],"title":"Response 409 Putdrivercode"}}},"description":"Conflict"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__49"}],"title":"Response 403 Putdrivercode"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/DriverNotFound"}],"title":"Response 404 Putdrivercode"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["drivers"],"summary":"Endpoint used to delete a driver code.","description":"**This endpoint allows you to delete a driver code**\n\nRole needed: operator","operationId":"deleteDriverCode","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"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":{"204":{"description":"Successful Response"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriverAnonymised"}}},"description":"Conflict"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__47"}],"title":"Response 403 Deletedrivercode"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/DriverNotFound"}],"title":"Response 404 Deletedrivercode"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/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__2"}],"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}},"/nav-data-processor-api/v4/groups/{group_id}/depots":{"get":{"tags":["depot","ndp"],"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":"getDepotsNdp","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 Getdepotsndp"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__50"}],"title":"Response 403 Getdepotsndp"}}},"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"}},"/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__50"}],"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},"post":{"tags":["depot"],"summary":"Create Depot","description":"**This endpoint allows you to create a depot for a group.**\n\nRole needed: operator","operationId":"postDepots","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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DepotCreateSchema"}}}},"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__41"}],"title":"Response 403 Postdepots"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/depots/{depot_id}":{"put":{"tags":["depot"],"summary":"Update Depot","description":"**This endpoint allows you to put depot for a group.**\n\nRole needed: operator","operationId":"putDepot","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"depot_id","in":"path","required":true,"schema":{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","description":"The id of the targeted depot.","examples":["670f84254c28ffdaae0f462d"],"title":"Depot Id"},"description":"The id of the targeted depot."},{"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/DepotCreateSchema"}}}},"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__51"}],"title":"Response 403 Putdepot"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DepotNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["depot"],"summary":"Delete Depot","description":"**This endpoint allows to delete an depot with its id.**\n\nRole needed: operator","operationId":"deleteDepot","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"depot_id","in":"path","required":true,"schema":{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","description":"The id of the targeted depot.","examples":["670f84254c28ffdaae0f462d"],"title":"Depot Id"},"description":"The id of the targeted depot."},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__51"}],"title":"Response 403 Deletedepot"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DepotNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/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},"put":{"tags":["gtfs"],"summary":"Update unpublished GTFS file.","description":"**This endpoint allows to update the GTFS file for a specific gtfs_id.**\n\nA zip with txt docs is uploaded in a form with param file.\n\nRole needed: operator","operationId":"putGtfs","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"gtfs_id","in":"path","required":true,"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":{"$ref":"#/components/schemas/GtfsFileSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__53"}],"title":"Response 403 Putgtfs"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GtfsNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["gtfs"],"summary":"Delete unpublished GTFS file.","description":"**This endpoint allows to delete the GTFS file for a specific gtfs_id.**\n\nRole needed: operator","operationId":"deleteGtfs","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"gtfs_id","in":"path","required":true,"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":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__53"}],"title":"Response 403 Deletegtfs"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GtfsNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/gtfs/validity":{"post":{"tags":["gtfs"],"summary":"Check gtfs validity","description":"**Validates a GTFS archive and returns the report, without importing it or attaching it to a group.**","operationId":"postGtfsValidity","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_postGtfsValidity"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/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},"post":{"tags":["gtfs"],"summary":"Create or duplicate a GTFS file","description":"**This endpoint allows to create or duplicate a GTFS file for a specific group.**\n\nRole needed: operator","operationId":"postGtfsList","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"file_name","in":"query","required":true,"schema":{"type":"string","description":"The name of the file","title":"File Name"},"description":"The name of the file"},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"id of a file to be duplicated. If null : new file is created.","title":"Source"},"description":"id of a file to be duplicated. If null : new file is created."},{"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":{"$ref":"#/components/schemas/GtfsFileSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__52"}],"title":"Response 403 Postgtfslist"}}},"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"}},"/api/v4/groups/{group_id}/gtfs/{gtfs_id}/delete-unused-resource":{"patch":{"tags":["gtfs"],"summary":"Delete invalid id references for a given gtfs resource","description":"**This endpoint allows to delete invalid id references for a given gtfs resource.**\n\nReturns deleted ids\n\nRole needed: operator","operationId":"patchGtfsDeleteUnusedResource","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"gtfs_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gtfs Id"}},{"name":"gtfs-resource","in":"query","required":true,"schema":{"$ref":"#/components/schemas/DeletableUnused"}},{"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":{"type":"string"},"title":"Response Patchgtfsdeleteunusedresource"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__41"}],"title":"Response 403 Patchgtfsdeleteunusedresource"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/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}/gtfs/{gtfs_id}/publish":{"post":{"tags":["gtfs"],"summary":"Publish the gtf_file specified","description":"**Publish immediatly a gtfs, it will also cancel existing schedule for this gtfs.**\n\nRole needed: operator","operationId":"postGtfsPublish","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":{"204":{"description":"Successful Response"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StateLoadInProgress"}}},"description":"Conflict"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unauthenticated"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__54"}],"title":"Response 403 Postgtfspublish"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/GtfsNotFound"}],"title":"Response 404 Postgtfspublish"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scopes":"gtfs.publish","x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/gtfs/{gtfs_id}/schedule":{"put":{"tags":["gtfs"],"summary":"Create or update a gtfs publication schedule","description":"**This endpoint allows to schedule a gtfs publication.**\n\n- If the `schedule` is given, it will create or update the schedule of the gtfs.\n- If it is not, it will cancel any existing schedule.\n\nRole needed: operator","operationId":"putGtfsSchedule","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","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":"schedule","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"}],"title":"Schedule"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/GtfsNotFound"}],"title":"Response 404 Putgtfsschedule"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__55"}],"title":"Response 403 Putgtfsschedule"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/gtfs/{gtfs_id}/archive":{"post":{"tags":["gtfs"],"summary":"Archive a GTFS file","description":"**This endpoint allows to archive a GTFS file for a specific gtfs_id.**\n\nRole needed: operator","operationId":"postGtfsArchive","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"gtfs_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gtfs 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":"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"}}}},"409":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GtfsScheduled"},{"$ref":"#/components/schemas/GtfsInUse"}],"title":"Response 409 Postgtfsarchive"}}},"description":"Conflict"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__56"}],"title":"Response 403 Postgtfsarchive"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/GtfsNotFound"}],"title":"Response 404 Postgtfsarchive"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/gtfs/{gtfs_id}/restore":{"post":{"tags":["gtfs"],"summary":"Archive a GTFS file","description":"**This endpoint allows to restore a GTFS file for a specific gtfs_id.**\n\nRole needed: operator","operationId":"postGtfsRestore","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"gtfs_id","in":"path","required":true,"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":{"$ref":"#/components/schemas/GtfsFileSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__53"}],"title":"Response 403 Postgtfsrestore"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GtfsNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/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__57"}],"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__57"}],"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}},"/nav-data-processor-api/v4/groups/{group_id}/urgency":{"post":{"tags":["urgency","ndp"],"summary":"Create Urgency","description":"**This endpoint allows you to create an urgency.**\n\nFeature needed: urgency\n\nRole needed: driver, regulator, operator","operationId":"postUrgencyNdp","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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UrgencyCreateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UrgencyCreatedSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/InvalidTeam"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__58"}],"title":"Response 403 Posturgencyndp"}}},"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"}},"/api/v4/groups/{group_id}/urgency":{"post":{"tags":["urgency"],"summary":"Create Urgency","description":"**This endpoint allows you to create an urgency.**\n\nFeature needed: urgency\n\nRole needed: driver, regulator, operator","operationId":"postUrgency","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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UrgencyCreateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UrgencyCreatedSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/InvalidTeam"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__58"}],"title":"Response 403 Posturgency"}}},"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"},"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__58"}],"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}/urgency/acknowledge/{urgency_id}":{"post":{"tags":["urgency"],"summary":"Acknowledge urgency","description":"**This endpoint allows you to acknowledge an urgency.**\n\nFeature needed: urgency\n\nRole needed: driver, regulator, operator","operationId":"postUrgencyAcknowledge","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":"urgency_id","in":"path","required":true,"schema":{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"],"title":"Urgency 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":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/NoUser"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__59"}],"title":"Response 403 Posturgencyacknowledge"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/UnknowledgedUrgencyNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Posturgencyacknowledge"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/urgency/resolve/{urgency_id}":{"post":{"tags":["urgency"],"summary":"Resolve Urgency","description":"**This endpoint allows you to resolve an urgency.**\n\nFeature needed: urgency\n\nRole needed: driver, regulator, operator","operationId":"postUrgencyResolve","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":"urgency_id","in":"path","required":true,"schema":{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"],"title":"Urgency 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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UrgencyResolutionCreateSchema"}}}},"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/NoUser"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__60"}],"title":"Response 403 Posturgencyresolve"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/UnresolvedUrgencyNotFound"}],"title":"Response 404 Posturgencyresolve"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/nav-data-processor-api/v4/groups/{group_id}/version-driver-check":{"get":{"tags":["version-driver-check","ndp"],"summary":"Check whether the calling Driver app version is allowed.","description":"**Returns 200 if the Driver version is allowed by global semver specs and group min_driver_version. Returns 426 (Upgrade Required) otherwise, with a JSON payload `{code: DRIVER_VERSION_BLOCKED, payload: {reason, driver_version, min_version}}` where reason is `global_policy` or `group_min_version`. The same check on a WebSocket upgrade closes the connection with the application-defined close code 4426 (RFC 6455 4xxx range) and a reason `DRIVER_VERSION_BLOCKED:<reason>`. Designed to be called once at app boot by Driver V6+ to short-circuit obsolete clients before they hit any other endpoint.**","operationId":"getVersionDriverCheckNdp","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":"user-agent","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User-Agent"}}],"responses":{"204":{"description":"Successful Response"},"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"}},"/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__61"}],"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/users/{user_id}/password/token":{"post":{"tags":["password"],"summary":"Generates OTP token","description":"**\nGenerates password reset token and sends it by mail if an account\nexists for the email address and recaptcha response is valid.\nReturns expiration date on success.\nCalled as a superuser, returns token in addition.\n**","operationId":"postUserPasswordToken","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"email","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Email"}},{"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":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/TokenRequestSchema"},{"type":"null"}],"title":"Token Req"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenSchema"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WrongRecaptcha"}}},"description":"Unauthorized"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordResetUnavailable"}}},"description":"Conflict"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserNotFound"}}},"description":"Not Found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MissingRecaptcha"}}},"description":"Unprocessable Content"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetUrlNotConfigured"}}},"description":"Internal Server Error"}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/users/{user_id}/invitation":{"post":{"tags":["password"],"summary":"Sends an activation invitation email","description":"**\nMails a fresh activation link to a user who has not set a password yet, and\ninvalidates any link previously issued to them. ``language`` overrides the one\nrecorded on the account; when neither is known the mail stacks every language\nrather than guessing. Unlike the reset-token\nendpoint, the mail is always sent server-side: no link is returned to the\ncaller. The link lives several days, not one hour.\n**","operationId":"postUserInvitation","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/UserLanguage"},{"type":"null"}],"title":"Language"}},{"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":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationSentSchema"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"description":"Forbidden"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountAlreadyActivated"}}},"description":"Conflict"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserNotFound"}}},"description":"Not Found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationThrottled"}}},"description":"Too Many Requests"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetUrlNotConfigured"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/users/{user_id}/password":{"put":{"tags":["password"],"summary":"Replaces user password","description":"**Authenticate password change with a token or session.**","operationId":"putUserPassword","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User 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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PasswordChangeAuthSchema"},{"$ref":"#/components/schemas/PasswordChangeByTokenSchema"}],"title":"Change"}}}},"responses":{"204":{"description":"Successful Response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unauthenticated"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidToken"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/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/devices/versions-stats":{"get":{"tags":["devices","stats"],"summary":"Get device version statistics","description":"**This endpoint allows you to retrieve statistics for each device version**","operationId":"getDeviceVersionsStats","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":"object","additionalProperties":{"$ref":"#/components/schemas/DeviceVersionStatsSchema"},"title":"Response Getdeviceversionsstats"}}}},"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"}},"/api/v4/devices/count":{"get":{"tags":["devices","stats"],"summary":"Get devices counts for every groups","description":"**This endpoint allows you to retrieve devices counts for each group**","operationId":"getDeviceCount","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":"object","additionalProperties":{"type":"integer"},"title":"Response Getdevicecount"}}}},"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"}},"/nav-data-processor-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":"getDevicesNdp","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 Getdevicesndp"}}}},"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"},"post":{"tags":["devices"],"summary":"Create a device entity","description":"**This endpoint allows you to create a device entity.**\n\nRole needed: operator","operationId":"postDevicesNdp","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/CreateDeviceSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceAllSchema"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__14"},{"$ref":"#/components/schemas/ForbiddenDifferentTeam"}],"title":"Response 403 Postdevicesndp"}}},"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"}},"/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},"post":{"tags":["devices"],"summary":"Create a device entity","description":"**This endpoint allows you to create a device entity.**\n\nRole needed: operator","operationId":"postDevices","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/CreateDeviceSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceAllSchema"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__14"},{"$ref":"#/components/schemas/ForbiddenDifferentTeam"}],"title":"Response 403 Postdevices"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/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},"put":{"tags":["devices"],"summary":"Update device from op","description":"**This endpoint allows you to update device**\n\nRole needed: operator","operationId":"putDevice","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":{"type":"string","description":"The id of the device you want to retrieve datas from.","examples":["837e726d2f25af9a","e627452b4a502323","943a739adc3ce43a"],"title":"Device Id"},"description":"The id of the device 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/DeviceUpdateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceAllSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__62"},{"$ref":"#/components/schemas/ForbiddenDifferentTeam"}],"title":"Response 403 Putdevice"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putdevice"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/nav-data-processor-api/v4/groups/{group_id}/devices/{device_id}":{"put":{"tags":["devices"],"summary":"Update device from op","description":"**This endpoint allows you to update device**\n\nRole needed: operator","operationId":"putDeviceNdp","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":{"type":"string","description":"The id of the device you want to retrieve datas from.","examples":["837e726d2f25af9a","e627452b4a502323","943a739adc3ce43a"],"title":"Device Id"},"description":"The id of the device 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/DeviceUpdateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceAllSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__62"},{"$ref":"#/components/schemas/ForbiddenDifferentTeam"}],"title":"Response 403 Putdevicendp"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putdevicendp"}}},"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"}},"/api/v4/groups/{group_id}/devices/mode":{"patch":{"tags":["devices"],"summary":"Update the drive mode of a batch of devices","description":"**This endpoint allows you to update the drive mode of a batch of devices in a single request.**\n\n- Processing is resilient per device: a device that cannot be updated (not found, outside your team scope) is reported in `failed` and does not prevent the other devices from being updated.\n- Applying a mode already active on a device is a success (no-op).\n- Switching mode resets the device trip filter to dead run, like the unitary device update.\n\nRole needed: operator","operationId":"patchDeviceMode","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":"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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceBulkModeUpdateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceBulkModeResultSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__7"}],"title":"Response 403 Patchdevicemode"}}},"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"}},"/api/v4/groups/{group_id}/devices/{device_id}/voip":{"patch":{"tags":["devices"],"summary":"Assign or unassign the VoIP endpoint paired with a device","description":"**Send a body with the VoIP provider+id to pair the device with a VoIP endpoint, or send `null` to unpair it.**\n\nRole needed: operator","operationId":"patchDeviceVoip","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":{"type":"string","description":"The id of the device you want to retrieve datas from.","examples":["837e726d2f25af9a","e627452b4a502323","943a739adc3ce43a"],"title":"Device Id"},"description":"The id of the device 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":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceVoipSchema"},{"type":"null"}],"title":"Voip"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceAllSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__62"},{"$ref":"#/components/schemas/ForbiddenDifferentTeam"}],"title":"Response 403 Patchdevicevoip"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Patchdevicevoip"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/devices/{device_id}/archive":{"put":{"tags":["devices"],"summary":"Archive device","description":"**This endpoint allows you to archive a device.**\n\nRole needed: operator","operationId":"putDeviceArchive","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":{"type":"string","description":"The id of the device you want to retrieve datas from.","examples":["837e726d2f25af9a","e627452b4a502323","943a739adc3ce43a"],"title":"Device Id"},"description":"The id of the device 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":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putdevicearchive"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__9"}],"title":"Response 403 Putdevicearchive"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/devices/{device_id}/unarchive":{"put":{"tags":["devices"],"summary":"Unarchive device","description":"**This endpoint allows you to unarchive a device.**\n\nRole needed: operator","operationId":"putDeviceUnarchive","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":{"type":"string","description":"The id of the device you want to retrieve datas from.","examples":["837e726d2f25af9a","e627452b4a502323","943a739adc3ce43a"],"title":"Device Id"},"description":"The id of the device 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":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__63"},{"$ref":"#/components/schemas/QuotaDevicesReached"}],"title":"Response 403 Putdeviceunarchive"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putdeviceunarchive"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/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}},"/nav-data-processor-api/v4/groups/{group_id}/devices/{device_id}/trip-filter":{"get":{"tags":["trip-filter"],"summary":"Get Trip Filter","description":"**This endpoint allows you to get the trip filter of a device.**\n\nRole needed: driver, regulator, operator","operationId":"getDeviceTripFilterNdp","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":{"type":"string","description":"The id of the device you want to retrieve datas from.","examples":["837e726d2f25af9a","e627452b4a502323","943a739adc3ce43a"],"title":"Device Id"},"description":"The id of the device 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":[{"$ref":"#/components/schemas/SequenceModeTripFilter"},{"$ref":"#/components/schemas/TripModeTripFilter"},{"type":"null"}],"title":"Response Getdevicetripfilterndp"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getdevicetripfilterndp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__64"}],"title":"Response 403 Getdevicetripfilterndp"}}},"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"},"put":{"tags":["trip-filter"],"summary":"Update Trip Filter","description":"**This endpoint allows you to update the trip filter of a device.**\n\nRole needed: driver, regulator, operator","operationId":"putDeviceTripFilterNdp","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":{"type":"string","description":"The id of the device you want to retrieve datas from.","examples":["837e726d2f25af9a","e627452b4a502323","943a739adc3ce43a"],"title":"Device Id"},"description":"The id of the device 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":{"anyOf":[{"$ref":"#/components/schemas/SequenceModeTripFilter"},{"$ref":"#/components/schemas/TripModeTripFilter"}],"title":"Trip Filter"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/SequenceModeTripFilter"},{"$ref":"#/components/schemas/TripModeTripFilter"}],"title":"Response Putdevicetripfilterndp"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putdevicetripfilterndp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__64"}],"title":"Response 403 Putdevicetripfilterndp"}}},"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"},"delete":{"tags":["trip-filter"],"summary":"Delete Trip Filter","description":"**This endpoint allows you to delete the trip filter of a device.**\n\nRole needed: driver, regulator, operator","operationId":"deleteDeviceTripFilterNdp","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":{"type":"string","description":"The id of the device you want to retrieve datas from.","examples":["837e726d2f25af9a","e627452b4a502323","943a739adc3ce43a"],"title":"Device Id"},"description":"The id of the device 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":[{"$ref":"#/components/schemas/SequenceModeTripFilter"},{"$ref":"#/components/schemas/TripModeTripFilter"},{"type":"null"}],"title":"Response Deletedevicetripfilterndp"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deletedevicetripfilterndp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__64"}],"title":"Response 403 Deletedevicetripfilterndp"}}},"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"}},"/api/v4/groups/{group_id}/gtfs/{gtfs_id}/generate-shapes":{"patch":{"tags":["gtfs"],"summary":"Generate Shapes","description":"**This endpoint generates crow-flies (straight line) shapes for trips without a shape, grouped by stop sequence.**\n\nRole needed: operator","operationId":"patchGtfsGenerateShapes","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"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"}},{"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/TaskIdSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__41"}],"title":"Response 403 Patchgtfsgenerateshapes"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/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__65"}],"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}/gtfs/{gtfs_id}/delete-invalid-ref":{"patch":{"tags":["gtfs"],"summary":"Delete invalids id references for a given gtfs resource.","description":"**This endpoint allows to delete invalid references for a given gtfs resource.**\n\nReceive a gtfs resource and delete all invalid references.\n\nRole needed: operator","operationId":"patchGtfsDeleteInvalidRef","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"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"}},{"name":"gtfs-resource","in":"query","required":true,"schema":{"$ref":"#/components/schemas/GtfsResourceSchema"}},{"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/DeleteInvalidRefSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__41"}],"title":"Response 403 Patchgtfsdeleteinvalidref"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/nav-data-processor-api/v4/groups/{group_id}/devices/{device_id}/vehicle-load":{"put":{"tags":["passenger-counts"],"summary":"Set vehicle load","description":"**This endpoint allows you to set current vehicle load**\n\nRole needed: driver","operationId":"putDeviceVehicleLoadNdp","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":"device_id","in":"path","required":true,"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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VehicleLoadSchema"}}}},"responses":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putdevicevehicleloadndp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__66"}],"title":"Response 403 Putdevicevehicleloadndp"}}},"description":"Forbidden"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPErrorSchema"}}},"description":"Unauthorized"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPErrorSchema"}}},"description":"Conflict"},"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"}},"/nav-data-processor-api/v4/groups/{group_id}/devices/{device_id}/passenger-count":{"post":{"tags":["passenger-counts"],"summary":"Create a passenger-count","description":"**This endpoint allows you to create a passenger-count**\n\nRole needed: driver","operationId":"postDevicePassengerCountNdp","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":"device_id","in":"path","required":true,"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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PassengerCountCreateSchema"}}}},"responses":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Postdevicepassengercountndp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__66"}],"title":"Response 403 Postdevicepassengercountndp"}}},"description":"Forbidden"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPErrorSchema"}}},"description":"Unauthorized"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPErrorSchema"}}},"description":"Conflict"},"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"}},"/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}},"/nav-data-processor-api/v4/groups/{group_id}":{"get":{"tags":["groups","ndp"],"summary":"Return the group for the given group_id.","description":"**This endpoint allows to get a group by its id.**","operationId":"getGroupNdp","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"user-agent","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User-Agent"}},{"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/GroupNavDataProcessorSchema"},{"type":"null"}],"title":"Response Getgroupndp"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoRole"}}},"description":"Forbidden"},"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":"/nav-data-processor-api","x-deployment":"ndp"}},"/nav-data-processor-api/v4/groups/{group_id}/devices/{device_id}/location-metadata":{"get":{"tags":["location-metadata"],"summary":"Get Location Metadata","description":"**This endpoint allows you to get the location metadata of a device.**\n\nRole needed: driver, regulator, operator","operationId":"getDeviceLocationMetadataNdp","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":{"type":"string","description":"The id of the device you want to retrieve datas from.","examples":["837e726d2f25af9a","e627452b4a502323","943a739adc3ce43a"],"title":"Device Id"},"description":"The id of the device 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/LocationMetadataSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getdevicelocationmetadatandp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__64"}],"title":"Response 403 Getdevicelocationmetadatandp"}}},"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"},"put":{"tags":["location-metadata"],"summary":"Update Location Metadata","description":"**This endpoint allows you to update the location metadata of a device.**\n\nRole needed: driver, regulator, operator","operationId":"putDeviceLocationMetadataNdp","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":"device_id","in":"path","required":true,"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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationMetadataSchema"}}}},"responses":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putdevicelocationmetadatandp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__64"}],"title":"Response 403 Putdevicelocationmetadatandp"}}},"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"}},"/nav-data-processor-api/v4/groups/{group_id}/devices/{device_id}/system-metadata":{"get":{"tags":["system-metadata"],"summary":"Get System Metadata","description":"**This endpoint allows you to get the system metadata of a device.**\n\nRole needed: driver, regulator, operator","operationId":"getDeviceSystemMetadataNdp","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":{"type":"string","description":"The id of the device you want to retrieve datas from.","examples":["837e726d2f25af9a","e627452b4a502323","943a739adc3ce43a"],"title":"Device Id"},"description":"The id of the device 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/SystemMetadataSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getdevicesystemmetadatandp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__64"}],"title":"Response 403 Getdevicesystemmetadatandp"}}},"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"},"put":{"tags":["system-metadata"],"summary":"Update System Metadata","description":"**This endpoint allows you to update the system metadata of a device.**\n\nRole needed: driver, regulator, operator","operationId":"putDeviceSystemMetadataNdp","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":"device_id","in":"path","required":true,"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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemMetadataSchema"}}}},"responses":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putdevicesystemmetadatandp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__64"}],"title":"Response 403 Putdevicesystemmetadatandp"}}},"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"}},"/nav-data-processor-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":"getGtfsCalendarDatesNdp","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 Getgtfscalendardatesndp"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/nav-data-processor-api","x-deployment":"ndp"}},"/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},"put":{"tags":["gtfs"],"summary":"Replace calendar dates in the gtfs for a specified service id","description":"**This endpoint allows to replace the calendar dates for the given service id**\n\nRole needed: operator","operationId":"putGtfsCalendarDate","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"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 replace the calendar dates for","title":"Service Id"},"description":"The service id to replace the calendar dates for"},{"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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CalendarDateGTFSSchema"},"title":"New Dates"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CalendarDateGTFSSchema"},"title":"Response Putgtfscalendardate"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__18"}],"title":"Response 403 Putgtfscalendardate"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["gtfs"],"summary":"Delete calendar dates in the gtfs for a specified service id","description":"**This endpoint allows to delete the calendar dates for the given service id**\n\nRole needed: operator","operationId":"deleteGtfsCalendarDate","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"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 delete the calendar dates for","title":"Service Id"},"description":"The service id to delete the calendar dates for"},{"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":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__18"}],"title":"Response 403 Deletegtfscalendardate"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/sound-announcements":{"get":{"tags":["sound-announcements"],"summary":"List the sound announcements of the group.","description":"**Page, filter and search the network's announcement library.**\n\n- Requires the `sound_announcements` feature.\n- `status` is repeatable; omitted, every status is returned.\n- `q` matches the title and every text, accent- and case-insensitively: `arret` finds `arrêt`.\n- Rows carry an excerpt of the French text, not the whole text.\n- `usages` is always empty in V1.\n\nRows are ordered by last edit, most recent first, and that order is not negotiable in V1.\n\nA search that holds no searchable character (`q=***`) matches nothing rather than everything: it is a filter you asked for, not one to ignore.\n\nFeature needed: sound_announcements\n\nRole needed: regulator, reader, operator","operationId":"getSoundAnnouncements","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":[{"type":"array","items":{"$ref":"#/components/schemas/SoundAnnouncementStatus"}},{"type":"null"}],"description":"Statuses to return — repeat the parameter to combine them. Omitted, every announcement is returned.","title":"Status"},"description":"Statuses to return — repeat the parameter to combine them. Omitted, every announcement is returned."},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search terms matched as a substring of the title or of any text. Accents, case and separators are ignored.","title":"Q"},"description":"Search terms matched as a substring of the title or of any text. Accents, case and separators are ignored."},{"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":200,"minimum":1,"description":"Amount of rows per page.","default":25,"title":"Page Size"},"description":"Amount of rows per page."},{"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/SoundAnnouncementPageSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__3"}],"title":"Response 403 Getsoundannouncements"}}},"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"},"post":{"tags":["sound-announcements"],"summary":"Create a sound announcement.","description":"**Create a draft announcement in the network's library.**\n\n- Requires the `sound_announcements` feature and the `operator` or `regulator` role.\n- The announcement is created as a draft; publishing is a separate call.\n- A title and a text may both be empty — that is the empty editor.\n- No duration is accepted: it is measured server-side from the audio preview.\n\nNo length is enforced here. The 30-second limit belongs to publication, so a draft is saved however long its text is.\n\nFeature needed: sound_announcements\n\nRole needed: regulator, operator","operationId":"postSoundAnnouncements","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/SoundAnnouncementWriteSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SoundAnnouncementSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__68"},{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/SoundAnnouncementAuthorRequired"}],"title":"Response 403 Postsoundannouncements"}}},"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"}},"/api/v4/groups/{group_id}/sound-announcement-variables":{"get":{"tags":["sound-announcements"],"summary":"List the variables an announcement text may carry.","description":"**Return the variables the editor can insert, with their markers.**\n\n- Requires the `sound_announcements` feature.\n- Insert `marker` verbatim rather than composing the braces yourself.\n- `example_value` is what a preview reads; it is never stored.\n\nThe same two variables for every network: a client cannot mint its own. Served rather than hard-coded in the back-office so opening a third one is a deployment here and nothing at all there.\n\nIts own path rather than a sub-path of `/sound-announcements`, which would collide in shape with an announcement identifier and leave the routing depending on declaration order.\n\nFeature needed: sound_announcements\n\nRole needed: regulator, reader, operator","operationId":"getSoundAnnouncementVariables","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/SoundAnnouncementVariableSchema"},"title":"Response Getsoundannouncementvariables"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__3"}],"title":"Response 403 Getsoundannouncementvariables"}}},"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"}},"/api/v4/groups/{group_id}/sound-announcements/{announcement_id}":{"get":{"tags":["sound-announcements"],"summary":"Get one sound announcement.","description":"**Return the announcement with all its language contents.**\n\n- Requires the `sound_announcements` feature.\n- An unknown identifier and a malformed one answer the same 404 with `SOUND_ANNOUNCEMENT_NOT_FOUND`.\n\nFeature needed: sound_announcements\n\nRole needed: regulator, reader, operator","operationId":"getSoundAnnouncement","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":"announcement_id","in":"path","required":true,"schema":{"type":"string","description":"Identifier of the sound announcement.","title":"Announcement Id"},"description":"Identifier of the sound announcement."},{"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/SoundAnnouncementSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__67"}],"title":"Response 403 Getsoundannouncement"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/SoundAnnouncementNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getsoundannouncement"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"put":{"tags":["sound-announcements"],"summary":"Replace the title and the texts of a sound announcement.","description":"**Edit an announcement, whatever its status.**\n\n- Requires the `sound_announcements` feature and the `operator` or `regulator` role.\n- Editing a published announcement keeps it published — and takes effect on the passenger information immediately.\n- The status cannot be changed here; sending one is refused.\n\nTitle and contents are replaced together, which is why this is a `PUT`: the search key is derived from both, so neither can be submitted without the other.\n\nFeature needed: sound_announcements\n\nRole needed: regulator, operator","operationId":"putSoundAnnouncement","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":"announcement_id","in":"path","required":true,"schema":{"type":"string","description":"Identifier of the sound announcement.","title":"Announcement Id"},"description":"Identifier of the sound announcement."},{"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/SoundAnnouncementWriteSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SoundAnnouncementSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/SoundAnnouncementNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putsoundannouncement"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__69"},{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/SoundAnnouncementAuthorRequired"}],"title":"Response 403 Putsoundannouncement"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["sound-announcements"],"summary":"Delete a draft sound announcement.","description":"**Delete a draft for good.**\n\n- Requires the `sound_announcements` feature and the `operator` or `regulator` role.\n- Only a draft can be deleted. Any other status answers 409 with `SOUND_ANNOUNCEMENT_NOT_A_DRAFT` — archive it instead.\n\nRemoving from the library an announcement that has been published is an archival, which keeps it readable and auditable. Deletion is reserved for a draft nobody ever heard.\n\nFeature needed: sound_announcements\n\nRole needed: regulator, operator","operationId":"deleteSoundAnnouncement","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":"announcement_id","in":"path","required":true,"schema":{"type":"string","description":"Identifier of the sound announcement.","title":"Announcement Id"},"description":"Identifier of the sound announcement."},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/SoundAnnouncementNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deletesoundannouncement"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__70"},{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/SoundAnnouncementAuthorRequired"}],"title":"Response 403 Deletesoundannouncement"}}},"description":"Forbidden"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SoundAnnouncementNotADraft"}}},"description":"Conflict"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/nav-data-processor-api/v4/groups/{group_id}/config/duty-checklist":{"get":{"tags":["duty-checklist","ndp"],"summary":"Get configuration of duty checklist","description":"**This endpoint allows you to get the configuration of duty checklist**\n\nRole needed: driver, admin, regulator, operator","operationId":"getConfigDutyChecklistNdp","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":{"$ref":"#/components/schemas/DutyChecklistSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__71"}],"title":"Response 403 Getconfigdutychecklistndp"}}},"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"}},"/api/v4/groups/{group_id}/config/duty-checklist":{"get":{"tags":["duty-checklist"],"summary":"Get configuration of duty checklist","description":"**This endpoint allows you to get the configuration of duty checklist**\n\nRole needed: driver, admin, regulator, operator","operationId":"getConfigDutyChecklist","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":{"$ref":"#/components/schemas/DutyChecklistSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__71"}],"title":"Response 403 Getconfigdutychecklist"}}},"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"},"put":{"tags":["duty-checklist"],"summary":"Set configuration of duty checklist","description":"**This endpoint allows you to set the configuration of duty checklist**\n\nFeature needed: custom_duty_checklist\n\nRole needed: admin, regulator, operator","operationId":"putConfigDutyChecklist","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/DutyChecklistSchema"}}}},"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__72"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Putconfigdutychecklist"}}},"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"}},"/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__4"}],"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__73"}],"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__74"}],"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__74"}],"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/duties/alert-notification-long-duties":{"post":{"tags":["duties"],"summary":"Alert on long-running duties without checkout","description":"**Send SMS alerts for duties exceeding configured threshold**\n\nCalled by Prefect scheduler to send SMS alerts for duties that have been active (checked-in without checkout) for too long. The threshold is configurable per group via the message_notifications integration. Only duties with message_alert_sent=None will be alerted.","operationId":"postDutyAlertNotificationLongDuties","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group 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":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scopes":"duties.alert-notification-long-duties","x-api-version":4,"x-path-prefix":"/api"}},"/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__4"}],"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/qrcodes":{"get":{"tags":["qrcodes"],"summary":"Returns a QR code as png","description":"**Renders one QR code from the content given, with an optional label under it.**","operationId":"getQrcodes","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"content","in":"query","required":true,"schema":{"type":"string","contentMediaType":"application/octet-stream","title":"Content"}},{"name":"filename","in":"query","required":true,"schema":{"type":"string","title":"Filename"}},{"name":"label","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"}},{"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":{}}}},"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"},"post":{"tags":["qrcodes"],"summary":"Returns a zip folder containing QR codes","description":"**QR codes are made from the content with an optional label**","operationId":"postQrcodes","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":{"type":"array","items":{"$ref":"#/components/schemas/QrCodeSchema"},"title":"Qrcodes"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"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"}},"/api/v4/groups/{group_id}/session-counters/{app}":{"post":{"tags":["session-counters"],"summary":"Count one session opened on an application","description":"**Records that a session was opened on the given application, against the group's current day in its own time zone.**","operationId":"postSessionCounter","parameters":[{"name":"app","in":"path","required":true,"schema":{"$ref":"#/components/schemas/App"}},{"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":{"204":{"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"}},"/api/v4/groups/{group_id}/session-counters":{"get":{"tags":["session-counters"],"summary":"Get Sessions V4","description":"Role needed: limited_reader, regulator, reader, operator","operationId":"getSessionCounters","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","pattern":"\\d{8}$","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","pattern":"\\d{8}$","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":{"$ref":"#/components/schemas/SessionCountSchemaV4"},"title":"Response Getsessioncounters"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__75"}],"title":"Response 403 Getsessioncounters"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/on-demand-services":{"get":{"tags":["on-demand-routes"],"summary":"List the on-demand service runs of a date","description":"**This endpoint allows you to list the on-demand services actually run on one date, with their passengers and their recorded passages.**\n\nOne entry per service run — a device on a route, from the start to the end — sorted by `started_at` descending. A device that ran two services on the same route the same day yields two entries. `ended_at` is null while a service runs, and stays null on a service the driver never ended, exactly as a duty without a checkout stays open. A date with no run comes back as an empty list, not an error, and so does an unknown `route_id`. `km` is null on a service run before the kilometres carried the service they were driven in; it is never zeroed in that case, since a zero means the vehicle did not move.\n\nFeature needed: device_event_sourcing,on_demand\n\nRole needed: regulator, reader, operator","operationId":"getOnDemandServices","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":"service_date","in":"query","required":true,"schema":{"type":"string","pattern":"\\d{8}$","description":"Service date of the runs, in the group timezone","title":"Service Date"},"description":"Service date of the runs, in the group timezone"},{"name":"route_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Scope the runs to one on-demand route. Omit to return those of every route of the group.","title":"Route Id"},"description":"Scope the runs to one on-demand route. Omit to return those of every route of the group."},{"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/OnDemandServiceSchema"},"title":"Response Getondemandservices"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__3"}],"title":"Response 403 Getondemandservices"}}},"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"}},"/api/v4/groups/{group_id}/archival-configuration":{"get":{"tags":["archival-configuration"],"summary":"Return the group archival configuration.","description":"**This endpoint allows you to return the group archival configuration.**\n\nRole needed: operator, external_reader, limited_reader, regulator, reader","operationId":"getArchivalConfiguration","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":{"$ref":"#/components/schemas/ArchivalConfigurationSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__1"}],"title":"Response 403 Getarchivalconfiguration"}}},"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"},"delete":{"tags":["archival-configuration"],"summary":"Delete the group archival configuration.","description":"**This endpoint allows you to delete the group archival configuration.**\n\nRole needed: operator","operationId":"deleteArchivalConfiguration","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":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__7"}],"title":"Response 403 Deletearchivalconfiguration"}}},"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"},"post":{"tags":["archival-configuration"],"summary":"Set the group archival configuration.","description":"**This endpoint allows you to set the group archival configuration.**\n\nRole needed: operator","operationId":"postArchivalConfiguration","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/ArchivalConfigurationSchema"}}}},"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__7"}],"title":"Response 403 Postarchivalconfiguration"}}},"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"}},"/nav-data-processor-api/v4/groups/{group_id}/devices/{device_id}/duties":{"post":{"tags":["duties"],"summary":"Create a duty checked in","description":"<h1><b>This endpoint is deprecated, use <code>/nav-data-processor-api/v5/groups/{group_id}/devices/{device_id}/duties</code> instead.</b></h1>\n\n**This endpoint allows you to create a duty checked in**\n\nRole needed: driver","operationId":"postDeviceDutiesNdp","deprecated":true,"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":"device_id","in":"path","required":true,"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":"user-agent","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User-Agent"}},{"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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DutyDeviceCreateSchemaV4"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DutyId"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Postdevicedutiesndp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__66"}],"title":"Response 403 Postdevicedutiesndp"}}},"description":"Forbidden"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPErrorSchema"}}},"description":"Unauthorized"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPErrorSchema"}}},"description":"Conflict"},"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"}},"/nav-data-processor-api/v4/groups/{group_id}/devices/{device_id}/duties/{duty_id}/checkout":{"post":{"tags":["duties"],"summary":"Checkout a duty.","description":"**This endpoint allows you to checkout from a duty.**\n\nRole needed: driver","operationId":"postDeviceDutyCheckoutNdp","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":"Id of the duty to checkout from.","examples":["670f84254c28ffdaae0f462d"],"title":"Duty Id"},"description":"Id of the duty to checkout from."},{"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":"device_id","in":"path","required":true,"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":"user-agent","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User-Agent"}},{"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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DutyCheckOutSchema"}}}},"responses":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPErrorSchema"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__66"}],"title":"Response 403 Postdevicedutycheckoutndp"}}},"description":"Forbidden"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPErrorSchema"}}},"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"}},"/nav-data-processor-api/v4/groups/{group_id}/devices/{device_id}/location":{"get":{"tags":["location"],"summary":"Get Location","description":"**This endpoint allows you to get the location of a device.**\n\nRole needed: driver","operationId":"getDeviceLocationNdp","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":"device_id","in":"path","required":true,"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":{"anyOf":[{"$ref":"#/components/schemas/LocationSchema-Output"},{"type":"null"}],"title":"Response Getdevicelocationndp"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getdevicelocationndp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__66"}],"title":"Response 403 Getdevicelocationndp"}}},"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"},"put":{"tags":["location"],"summary":"Update Location","description":"**This endpoint allows you to update the location of a device.**\n\nRole needed: driver","operationId":"putDeviceLocationNdp","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":"device_id","in":"path","required":true,"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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationUpdateSchema"}}}},"responses":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putdevicelocationndp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__66"}],"title":"Response 403 Putdevicelocationndp"}}},"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"},"delete":{"tags":["location"],"summary":"Delete Location","description":"**This endpoint allows you to delete the location of a device.**\n\nRole needed: driver","operationId":"deleteDeviceLocationNdp","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":"device_id","in":"path","required":true,"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":{"anyOf":[{"$ref":"#/components/schemas/LocationSchema-Output"},{"type":"null"}],"title":"Response Deletedevicelocationndp"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deletedevicelocationndp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__66"}],"title":"Response 403 Deletedevicelocationndp"}}},"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"}},"/nav-data-processor-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":"getDangerZonesNdp","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 Getdangerzonesndp"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__76"}],"title":"Response 403 Getdangerzonesndp"}}},"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"}},"/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__76"}],"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},"post":{"tags":["danger-zones"],"summary":"Create Danger Zone","description":"**This endpoint allows you to create a danger zone for a group.**\n\nFeature needed: danger_zones\n\nRole needed: regulator, operator","operationId":"postDangerZones","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/DangerZoneCreateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DangerZoneSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__72"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Postdangerzones"}}},"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"}},"/api/v4/groups/{group_id}/danger-zones/{danger_zone_id}":{"put":{"tags":["danger-zones"],"summary":"Update Danger Zone","description":"**This endpoint allows you to update a danger zone for a group.**\n\nFeature needed: danger_zones\n\nRole needed: regulator, operator","operationId":"putDangerZone","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":"danger_zone_id","in":"path","required":true,"schema":{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","description":"The id of the targeted danger zone","examples":["670f84254c28ffdaae0f462d"],"title":"Danger Zone Id"},"description":"The id of the targeted danger zone"},{"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/DangerZoneCreateSchema"}}}},"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__77"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Putdangerzone"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/DangerZoneNotFound"}],"title":"Response 404 Putdangerzone"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["danger-zones"],"summary":"Delete","description":"**This endpoint allows you to delete a danger zone for a group.**\n\nFeature needed: danger_zones\n\nRole needed: regulator, operator","operationId":"deleteDangerZone","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":"danger_zone_id","in":"path","required":true,"schema":{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","description":"The id of the targeted danger zone","examples":["670f84254c28ffdaae0f462d"],"title":"Danger Zone Id"},"description":"The id of the targeted danger zone"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__77"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Deletedangerzone"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/DangerZoneNotFound"}],"title":"Response 404 Deletedangerzone"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/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__76"}],"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__78"}],"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__76"}],"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__78"}],"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__79"}],"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__79"}],"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__80"},{"$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__72"},{"$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__81"}],"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__81"}],"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__76"}],"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}},"/nav-data-processor-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":"getUserMeNdp","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":"/nav-data-processor-api","x-deployment":"ndp"}},"/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}},"/nav-data-processor-api/v4/users/me":{"get":{"tags":["users"],"summary":"Get current user.","description":"**This endpoint allows to get the current user.**","operationId":"getGlobalUserMeNdp","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":{"$ref":"#/components/schemas/UserSchema"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unauthenticated"}}},"description":"Unauthorized"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-unique-id.segments":["global"],"x-api-version":4,"x-path-prefix":"/nav-data-processor-api","x-deployment":"ndp"}},"/api/v4/users/me":{"get":{"tags":["users"],"summary":"Get current user.","description":"**This endpoint allows to get the current user.**","operationId":"getGlobalUserMe","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":{"$ref":"#/components/schemas/UserSchema"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unauthenticated"}}},"description":"Unauthorized"},"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"},"put":{"tags":["users"],"summary":"Update current user.","description":"**This endpoint allows to update the current user.**\n\nCan only update name.","operationId":"putGlobalUserMe","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/UserRestrictedUpdateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSchema"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoUser"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserNotFound"}}},"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"}},"/api/v4/users":{"get":{"tags":["users"],"summary":"Return the users with their roles for each group_id.","description":"**This endpoint allows to get all users.**","operationId":"getUsers","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/UserSchema"},"title":"Response Getusers"}}}},"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"},"post":{"tags":["users"],"summary":"Create new user.","description":"**This endpoint allows to create a new user.**","operationId":"postUsers","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/UserCreateSchema"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreateSchema"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"description":"Forbidden"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserEmailAlreadyTaken"}}},"description":"Conflict"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/users/{user_id}":{"put":{"tags":["users"],"summary":"Update user.","description":"**This endpoint allows to update a user.**","operationId":"putUser","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the user you want to update.","title":"User Id"},"description":"The id of the user you want to update."},{"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/UserUpdateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSchema"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["users"],"summary":"Delete user.","description":"**This endpoint allows to delete a user.**","operationId":"deleteUser","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the user you want to delete.","title":"User Id"},"description":"The id of the user you want to delete."},{"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"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/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__11"}],"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__11"}],"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__82"}],"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__82"}],"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__11"}],"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},"post":{"tags":["teams"],"summary":"Add a team to a group","description":"**This endpoint allows you to add a team to a group.**\n\nRole needed: admin","operationId":"postTeams","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/TeamCreateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Team"},"title":"Response Postteams"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/NoUser"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__83"}],"title":"Response 403 Postteams"}}},"description":"Forbidden"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamNameAlreadyTaken"}}},"description":"Conflict"},"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"}},"/api/v4/groups/{group_id}/teams/{team_id}":{"patch":{"tags":["teams"],"summary":"Update or archive a team of a group","description":"**This endpoint allows you to update or archive a team of a group.**\n\nRole needed: admin","operationId":"patchTeam","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","description":"Id of the team to update","title":"Team Id"},"description":"Id of the team to update"},{"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/TeamUpdateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/Team"}},{"type":"null"}],"title":"Response Patchteam"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/TeamNotFound"}],"title":"Response 404 Patchteam"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/TeamNameAlreadyTaken"},{"$ref":"#/components/schemas/TeamInUse"}],"title":"Response 409 Patchteam"}}},"description":"Conflict"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__84"}],"title":"Response 403 Patchteam"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/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-events":{"post":{"tags":["trip-events"],"summary":"Allow trip event creation","description":"**This endpoint allows to create a trip event.**\n\nRole needed: driver, admin, regulator, operator","operationId":"postTripEvents","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/TripEventSchemaCreate"}}}},"responses":{"201":{"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__71"}],"title":"Response 403 Posttripevents"}}},"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"}},"/api/v4/groups/{group_id}/exports":{"post":{"tags":["exports"],"summary":"Request an async export.","description":"**Create an async export job for the group and schedule its execution. Returns 202 with the created job id; poll the job to get its status and download URL.**\n\nRole needed: operator, external_reader, limited_reader, regulator, reader","operationId":"postExports","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/ExportCreateSchema"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportCreatedSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__85"}],"title":"Response 403 Postexports"}}},"description":"Forbidden"},"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"},"get":{"tags":["exports"],"summary":"List the caller's async export jobs.","description":"**List the async export jobs requested by the calling user for the group, most recent first.**\n\nRole needed: operator, external_reader, limited_reader, regulator, reader","operationId":"getExports","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/ExportJobSchema"},"title":"Response Getexports"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__85"}],"title":"Response 403 Getexports"}}},"description":"Forbidden"},"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"}},"/api/v4/groups/{group_id}/exports/{job_id}":{"get":{"tags":["exports"],"summary":"Get an async export job.","description":"**Return the status of an async export job; once it has succeeded, a freshly-signed download URL is included.**\n\nRole needed: operator, external_reader, limited_reader, regulator, reader","operationId":"getExport","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job 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":"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/ExportJobSchema"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unauthenticated"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/ExportJobNotFound"}],"title":"Response 404 Getexport"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__86"}],"title":"Response 403 Getexport"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/nav-data-processor-api/v4/groups/{group_id}/devices/{device_id}/nocrates-rides":{"get":{"tags":["nocrates","ndp"],"summary":"List Nocrates Rides","description":"Role needed: driver, regulator, operator","operationId":"getDeviceNocratesRidesNdp","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the device you want to retrieve datas from.","examples":["837e726d2f25af9a","e627452b4a502323","943a739adc3ce43a"],"title":"Device Id"},"description":"The id of the device you want to retrieve datas from."},{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"user-agent","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User-Agent"}},{"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/NocratesRideSchema"},"title":"Response Getdevicenocratesridesndp"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__71"}],"title":"Response 403 Getdevicenocratesridesndp"}}},"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"}},"/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}},"/nav-data-processor-api/v4/groups/{group_id}/trip-populate":{"post":{"tags":["trips","ndp"],"summary":"Add trips from the given date to current group state.","description":"**This endpoint allows to populate trips from the given date to the current group state**\n\nRole needed: admin","operationId":"postTripPopulateNdp","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","format":"date","description":"Date to populate trips from current gtfs to","title":"Date"},"description":"Date to populate trips from current gtfs to"},{"name":"force","in":"query","required":false,"schema":{"$ref":"#/components/schemas/TripPopulateForceMode","description":"Force the population to actually occurs","default":"false"},"description":"Force the population to actually occurs"},{"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__11"}],"title":"Response 403 Posttrippopulatendp"}}},"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"}},"/api/v4/groups/{group_id}/trip-populate":{"post":{"tags":["trips"],"summary":"Add trips from the given date to current group state.","description":"**This endpoint allows to populate trips from the given date to the current group state**\n\nRole needed: admin","operationId":"postTripPopulate","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","format":"date","description":"Date to populate trips from current gtfs to","title":"Date"},"description":"Date to populate trips from current gtfs to"},{"name":"force","in":"query","required":false,"schema":{"$ref":"#/components/schemas/TripPopulateForceMode","description":"Force the population to actually occurs","default":"false"},"description":"Force the population to actually occurs"},{"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__11"}],"title":"Response 403 Posttrippopulate"}}},"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"}},"/nav-data-processor-api/v4/groups/{group_id}/frequencies":{"get":{"tags":["frequencies","ndp"],"summary":"Return latest delta passages for a device for the given group_id.","description":"Role needed: driver, technical, operator, external_reader, limited_reader, regulator, reader","operationId":"getFrequenciesNdp","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/Frequency"},"title":"Response Getfrequenciesndp"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__87"}],"title":"Response 403 Getfrequenciesndp"}}},"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"}},"/api/v4/groups/{group_id}/frequencies":{"get":{"tags":["frequencies"],"summary":"Return latest delta passages for a device for the given group_id.","description":"Role needed: driver, technical, operator, external_reader, limited_reader, regulator, reader","operationId":"getFrequencies","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/Frequency"},"title":"Response Getfrequencies"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__87"}],"title":"Response 403 Getfrequencies"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/nav-data-processor-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":"getGtfsShapesNdp","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 Getgtfsshapesndp"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/nav-data-processor-api","x-deployment":"ndp"}},"/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},"post":{"tags":["gtfs"],"summary":"Create multiple shapes","description":"**This endpoint allows to create multiple shapes for a specific gtfs_id.**\n\nRole needed: operator","operationId":"postGtfsShapes","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"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"}},{"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":{"type":"array","items":{"$ref":"#/components/schemas/ShapeGTFSCreateSchema"},"title":"Shapes"}}}},"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__18"}],"title":"Response 403 Postgtfsshapes"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/gtfs/{gtfs_id}/shapes/{shape_id}":{"put":{"tags":["gtfs"],"summary":"Update gtfs shape","description":"**This endpoint allows to update a shape for a specific gtfs_id.**\n\nRole needed: operator","operationId":"putGtfsShape","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"shape_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the shape to upsert","title":"Shape Id"},"description":"The id of the shape to upsert"},{"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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShapeGTFSUpsertSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShapeGTFSSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__18"}],"title":"Response 403 Putgtfsshape"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["gtfs"],"summary":"Delete shape","description":"**This endpoint allows to delete a shape for a specific gtfs_id.**\n\nRole needed: operator","operationId":"deleteGtfsShape","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"shape_id","in":"path","required":true,"schema":{"type":"string","description":"The id of the shape to delete","title":"Shape Id"},"description":"The id of the shape to delete"},{"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/ShapeGTFSSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__88"}],"title":"Response 403 Deletegtfsshape"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GtfsShapeNotFound"}}},"description":"Not Found"}},"x-api-version":4,"x-path-prefix":"/api"}},"/nav-data-processor-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":"getGtfsRoutesNdp","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-Output"},"title":"Response Getgtfsroutesndp"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/nav-data-processor-api","x-deployment":"ndp"}},"/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-Output"},"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-Output"}}}},"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},"put":{"tags":["gtfs"],"summary":"Create or Update a route in the gtfs identified by gtfs_id","description":"**This endpoint allows to create or update a route in the gtfs identified by gtfs_id.**\n\nRole needed: operator","operationId":"putGtfsRoute","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"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 update","title":"Route Id"},"description":"The id of the route to update"},{"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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteGTFSSchema-Input"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteGTFSSchema-Output"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__18"}],"title":"Response 403 Putgtfsroute"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["gtfs"],"summary":"Delete route specified by route_id","description":"**This endpoint allows to delete a route identified by route_id.**\n\nRole needed: operator","operationId":"deleteGtfsRoute","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"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 delete","title":"Route Id"},"description":"The id of the route to delete"},{"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":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GtfsRouteNotFound"}}},"description":"Not Found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__89"}],"title":"Response 403 Deletegtfsroute"}}},"description":"Forbidden"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GtfsRouteInUse"}}},"description":"Conflict"}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/drivers/anonymise":{"post":{"tags":["anonymisation"],"summary":"Anonymise archived drivers past the group's retention period","description":"**Anonymise drivers of the group whose archived flag is true and whose last activity is older than the group's retention_period (months).**","operationId":"postDriverAnonymise","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/AnonymisationRequestSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnonymisationResultSchema"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"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"}},"/api/v4/groups/{group_id}/hastus/preview":{"post":{"tags":["hastus"],"summary":"Preview a Hastus import without writing to db","description":"**Preview a Hastus import without writing to db to allow frontend to get stats**\n\nRole needed: operator","operationId":"postHastuPreview","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"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_postHastuPreview"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportPreview"}}}},"422":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/InvalidHastusArchive"},{"$ref":"#/components/schemas/IncompleteHastusArchive"},{"$ref":"#/components/schemas/HastusArchiveLooksLikeGtfs"},{"$ref":"#/components/schemas/TransitArchiveCompressedTooLarge"},{"$ref":"#/components/schemas/TransitArchiveUncompressedTooLarge"}],"title":"Response 422 Posthastupreview"}}},"description":"Unprocessable Content"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__90"}],"title":"Response 403 Posthastupreview"}}},"description":"Forbidden"}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/hastus/{gtfs_id}":{"post":{"tags":["hastus"],"summary":"Parse a Hastus File and convert it to GTFS format","description":"**This endpoint converts a Hastus File to GTFS format**\n\nRole needed: operator","operationId":"postHastu","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"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"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_postHastu"}}}},"responses":{"204":{"description":"Successful Response"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartialImportIntoPopulatedDraft"}}},"description":"Conflict"},"422":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/InvalidHastusArchive"},{"$ref":"#/components/schemas/TransitArchiveCompressedTooLarge"},{"$ref":"#/components/schemas/IncompleteHastusArchive"},{"$ref":"#/components/schemas/HastusArchiveLooksLikeGtfs"},{"$ref":"#/components/schemas/InvalidGTFSId"},{"$ref":"#/components/schemas/TransitArchiveUncompressedTooLarge"}],"title":"Response 422 Posthastu"}}},"description":"Unprocessable Content"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__91"}],"title":"Response 403 Posthastu"}}},"description":"Forbidden"}},"x-api-version":4,"x-path-prefix":"/api"}},"/nav-data-processor-api/v4/groups/{group_id}/devices/{device_id}/current-trip":{"get":{"tags":["current-trip"],"summary":"Get Current Trip","description":"**This endpoint allows you to get the current trip of a device.**\n\nRole needed: driver","operationId":"getDeviceCurrentTripNdp","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":"device_id","in":"path","required":true,"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":{"anyOf":[{"$ref":"#/components/schemas/CurrentTripSchema"},{"type":"null"}],"title":"Response Getdevicecurrenttripndp"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getdevicecurrenttripndp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__66"}],"title":"Response 403 Getdevicecurrenttripndp"}}},"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"},"put":{"tags":["current-trip"],"summary":"Update Current Trip","description":"**This endpoint allows you to update the current trip of a device.**\n\nRole needed: driver","operationId":"putDeviceCurrentTripNdp","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":"device_id","in":"path","required":true,"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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CurrentTripWithDetailsSchema"}}}},"responses":{"204":{"description":"Successful Response"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoPublishedGtfs"}}},"description":"Conflict"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putdevicecurrenttripndp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__92"}],"title":"Response 403 Putdevicecurrenttripndp"}}},"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"},"delete":{"tags":["current-trip"],"summary":"Delete Current Trip","description":"**This endpoint allows you to delete the current trip of a device.**\n\nRole needed: driver","operationId":"deleteDeviceCurrentTripNdp","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":"device_id","in":"path","required":true,"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":"trigger","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/TriggerType"},{"type":"null"}],"description":"How the end has been triggered","title":"Trigger"},"description":"How the end has been triggered"},{"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":{"anyOf":[{"$ref":"#/components/schemas/CurrentTripSchema"},{"type":"null"}],"title":"Response Deletedevicecurrenttripndp"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deletedevicecurrenttripndp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__66"}],"title":"Response 403 Deletedevicecurrenttripndp"}}},"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"}},"/nav-data-processor-api/v4/groups/{group_id}/devices/{device_id}/current-trip/details":{"get":{"tags":["current-trip"],"summary":"Get Current Trip Details","description":"**This endpoint allows you to get the current trip details of a device.**\n\nRole needed: driver","operationId":"getDeviceCurrentTripDetailsNdp","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":"device_id","in":"path","required":true,"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":{"anyOf":[{"$ref":"#/components/schemas/CurrentTripDetailsSchema"},{"type":"null"}],"title":"Response Getdevicecurrenttripdetailsndp"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Getdevicecurrenttripdetailsndp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__66"}],"title":"Response 403 Getdevicecurrenttripdetailsndp"}}},"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"},"put":{"tags":["current-trip"],"summary":"Update Current Trip Details","description":"**This endpoint allows you to update the current trip details of a device.**\n\nRole needed: driver","operationId":"putDeviceCurrentTripDetailsNdp","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":"device_id","in":"path","required":true,"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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CurrentTripDetailsSchema"}}}},"responses":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Putdevicecurrenttripdetailsndp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__66"}],"title":"Response 403 Putdevicecurrenttripdetailsndp"}}},"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"},"delete":{"tags":["current-trip"],"summary":"Delete Current Trip Details","description":"**This endpoint allows you to delete the current trip details of a device.**\n\nRole needed: driver","operationId":"deleteDeviceCurrentTripDetailsNdp","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":"device_id","in":"path","required":true,"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":{"anyOf":[{"$ref":"#/components/schemas/CurrentTripDetailsSchema"},{"type":"null"}],"title":"Response Deletedevicecurrenttripdetailsndp"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Deletedevicecurrenttripdetailsndp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__66"}],"title":"Response 403 Deletedevicecurrenttripdetailsndp"}}},"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"}},"/api/v4/groups/{group_id}/gtfs/{gtfs_id}/shape-dist-traveled":{"patch":{"tags":["gtfs"],"summary":"Compute Shape Distance Traveled","description":"**This endpoint allows to compute the shape_dist_traveled for a specific gtfs_id.**\n\nRole needed: operator","operationId":"patchGtfsShapeDistTraveled","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"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"}},{"name":"keep-existing","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Keep-Existing"}},{"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/TaskIdSchema"},{"type":"null"}],"title":"Response Patchgtfsshapedisttraveled"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__41"}],"title":"Response 403 Patchgtfsshapedisttraveled"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/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__65"}],"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}/shape-dist-traveled-compute":{"patch":{"tags":["gtfs"],"summary":"Compute Shape Distance Traveled Old","description":"**This endpoint allows to compute the shape_dist_traveled for a specific gtfs_id.**\n\nRole needed: operator","operationId":"patchGtfsShapeDistTraveledCompute","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"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"}},{"name":"keep-existing","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Keep-Existing"}},{"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/ShapeDistTraveledSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__18"}],"title":"Response 403 Patchgtfsshapedisttraveledcompute"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/api"}},"/nav-data-processor-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":"getGtfsStopsNdp","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 Getgtfsstopsndp"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/nav-data-processor-api","x-deployment":"ndp"}},"/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},"put":{"tags":["gtfs"],"summary":"Update gtfs stop","description":"**This endpoint allows to update or create a stop**\n\nRole needed: operator","operationId":"putGtfsStop","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"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 update","title":"Stop Id"},"description":"The stop id to update"},{"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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StopGTFSSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StopGTFSSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__18"}],"title":"Response 403 Putgtfsstop"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["gtfs"],"summary":"Delete gtfs stop","description":"**This endpoint allows to delete a stop**\n\nRole needed: operator","operationId":"deleteGtfsStop","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"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 delete","title":"Stop Id"},"description":"The stop id to delete"},{"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":{"204":{"description":"Successful Response"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GtfsStopNotFound"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__93"}],"title":"Response 403 Deletegtfsstop"}}},"description":"Forbidden"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GtfsStopInUse"}}},"description":"Conflict"}},"x-api-version":4,"x-path-prefix":"/api"}},"/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__4"}],"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__73"}],"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}/stats/on-demand-routes":{"get":{"tags":["on-demand-routes","stats"],"summary":"Get the statistics of the on-demand routes","description":"**This endpoint allows you to get the kilometres and passengers of the on-demand routes over a period.**\n\nBoth bounds are included. `days` and `routes` only hold the dates and the routes that carry data, so an empty list means the period has none — neither is ever padded with zeroed entries. The sum of `routes` equals `total`, exactly as the sum of `days` does, and `routes` holds at most a single entry when `route_id` scopes the request. An unknown `route_id` is not an error: it has no data, like a route that never ran.\n\nFeature needed: device_event_sourcing,on_demand\n\nRole needed: operator, external_reader, limited_reader, regulator, reader","operationId":"getStatOnDemandRoutes","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","pattern":"\\d{8}$","description":"Start date of the period","title":"Start Date"},"description":"Start date of the period"},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","pattern":"\\d{8}$","description":"End date of the period","title":"End Date"},"description":"End date of the period"},{"name":"route_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Scope the statistics to one on-demand route. Omit to aggregate every route of the group.","title":"Route Id"},"description":"Scope the statistics to one on-demand route. Omit to aggregate every route of the group."},{"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/OnDemandStatsSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__1"}],"title":"Response 403 Getstatondemandroutes"}}},"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"}},"/api/v4/groups/{group_id}/export/on-demand-routes":{"get":{"tags":["on-demand-routes","stats"],"summary":"Export the statistics of the on-demand routes","description":"**This endpoint allows you to export the kilometres and passengers of the on-demand routes over a period, one row per date and per route.**\n\n\n\n<h2>Example : </h2>\n\n| **date** | **route_id** | **route_short_name** | **route_long_name** | **km** | **boarding** | **alighting** | **total_boarding** |\n|:--|:--|:--|:--|:--|:--|:--|:--|\n| 2026-08-01 | 6720e1f0a1b2c3d4e5f60001 | TAD1 | Zone Nord | 30.0 | 20 | 19 | 20 |\n| 2026-08-01 | 6720e1f0a1b2c3d4e5f60002 | TAD2 | Zone Sud | 12.5 | 11 | 10 | 11 |\n| 2026-08-02 | 6720e1f0a1b2c3d4e5f60001 | TAD1 | Zone Nord | 17.0 | 12 | 12 | 12 |\n\nFeature needed: device_event_sourcing,on_demand\n\nRole needed: operator, external_reader, limited_reader, regulator, reader","operationId":"getExportOnDemandRoutes","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","pattern":"\\d{8}$","description":"Start date of the period","title":"Start Date"},"description":"Start date of the period"},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","pattern":"\\d{8}$","description":"End date of the period","title":"End Date"},"description":"End date of the period"},{"name":"route_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Scope the statistics to one on-demand route. Omit to aggregate every route of the group.","title":"Route Id"},"description":"Scope the statistics to one on-demand route. Omit to aggregate every route of the group."},{"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":"date;route_id;route_short_name;route_long_name;km;boarding;alighting;total_boarding\n2026-08-01;6720e1f0a1b2c3d4e5f60001;TAD1;Zone Nord;30.0;20;19;20\n2026-08-01;6720e1f0a1b2c3d4e5f60002;TAD2;Zone Sud;12.5;11;10;11\n2026-08-02;6720e1f0a1b2c3d4e5f60001;TAD1;Zone Nord;17.0;12;12;12"}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__1"}],"title":"Response 403 Getexportondemandroutes"}}},"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"}},"/api/v4/groups/{group_id}/config/distance-thresholds":{"get":{"tags":["config"],"summary":"Get configuration of the distance-thresholds","description":"Role needed: regulator, operator","operationId":"getConfigDistanceThresholds","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":{"$ref":"#/components/schemas/DistanceThresholdsConfigSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__72"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Getconfigdistancethresholds"}}},"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"},"patch":{"tags":["config"],"summary":"Update configuration of the distance-thresholds","description":"Role needed: operator","operationId":"patchConfigDistanceThresholds","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/DistanceThresholdsConfigSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistanceThresholdsConfigSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__7"}],"title":"Response 403 Patchconfigdistancethresholds"}}},"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"}},"/api/v4/groups/{group_id}/config/driver-app":{"get":{"tags":["config"],"summary":"Get configuration of the driver-app","description":"Role needed: regulator, operator","operationId":"getConfigDriverApp","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":{"$ref":"#/components/schemas/DriverAppConfigSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__72"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Getconfigdriverapp"}}},"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"},"patch":{"tags":["config"],"summary":"Update configuration of the driver-app","description":"Role needed: operator","operationId":"patchConfigDriverApp","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/DriverAppConfigSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriverAppConfigSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__7"}],"title":"Response 403 Patchconfigdriverapp"}}},"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"}},"/api/v4/groups/{group_id}/config/info-app":{"get":{"tags":["config"],"summary":"Get configuration of the info-app","description":"Role needed: regulator, operator","operationId":"getConfigInfoApp","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":{"$ref":"#/components/schemas/InfoAppConfigSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__72"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Getconfiginfoapp"}}},"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"},"patch":{"tags":["config"],"summary":"Update configuration of the info-app","description":"Role needed: operator","operationId":"patchConfigInfoApp","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/InfoAppConfigSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InfoAppConfigSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__7"}],"title":"Response 403 Patchconfiginfoapp"}}},"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"}},"/api/v4/groups/{group_id}/config/reports":{"get":{"tags":["config"],"summary":"Get configuration of the reports","description":"Role needed: regulator, operator","operationId":"getConfigReports","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":{"$ref":"#/components/schemas/ReportsConfigSchema-Output"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__72"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Getconfigreports"}}},"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"},"patch":{"tags":["config"],"summary":"Update configuration of the reports","description":"Role needed: operator","operationId":"patchConfigReports","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/ReportsConfigSchema-Input"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportsConfigSchema-Output"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__7"}],"title":"Response 403 Patchconfigreports"}}},"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"}},"/api/v4/groups/{group_id}/config/root":{"get":{"tags":["config"],"summary":"Get configuration of the root","description":"Role needed: regulator, operator","operationId":"getConfigRoot","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":{"$ref":"#/components/schemas/RootConfigSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__72"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Getconfigroot"}}},"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"},"patch":{"tags":["config"],"summary":"Update configuration of the root","description":"Role needed: operator","operationId":"patchConfigRoot","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/RootConfigSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RootConfigSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__7"}],"title":"Response 403 Patchconfigroot"}}},"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"}},"/api/v4/groups/{group_id}/config/routes":{"get":{"tags":["config"],"summary":"Get configuration of the routes","description":"Role needed: regulator, operator","operationId":"getConfigRoutes","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":{"$ref":"#/components/schemas/RoutesConfigSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__72"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Getconfigroutes"}}},"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"},"patch":{"tags":["config"],"summary":"Update configuration of the routes","description":"Role needed: operator","operationId":"patchConfigRoutes","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/RoutesConfigSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoutesConfigSchema"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/LockedFeature"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__94"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Patchconfigroutes"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/config/trips":{"get":{"tags":["config"],"summary":"Get configuration of the trips","description":"Role needed: regulator, operator","operationId":"getConfigTrips","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":{"$ref":"#/components/schemas/TripsConfigSchema-Output"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__72"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Getconfigtrips"}}},"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"},"patch":{"tags":["config"],"summary":"Update configuration of the trips","description":"Role needed: operator","operationId":"patchConfigTrips","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/TripsConfigSchema-Input"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripsConfigSchema-Output"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__7"}],"title":"Response 403 Patchconfigtrips"}}},"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"}},"/api/v4/groups/{group_id}/config/features":{"get":{"tags":["config"],"summary":"Get the features a group has access to","description":"**Lists the features unlocked for the group.**","operationId":"getConfigFeatures","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/Feature"},"title":"Response Getconfigfeatures"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"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"},"put":{"tags":["config"],"summary":"Configure the feature a group has access to","description":"**This endpoint allows to configure which locked (payed) features has access to.**","operationId":"putConfigFeatures","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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","uniqueItems":true,"items":{"$ref":"#/components/schemas/Feature"},"title":"Features"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupSchemaV3-Output"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"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"}},"/api/v4/groups/{group_id}/config/memory-use-limit":{"get":{"tags":["config"],"summary":"Get the group memory use limit","description":"**Gives the size in bytes the group's data may reach.**","operationId":"getConfigMemoryUseLimit","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":{"$ref":"#/components/schemas/LimitSchema"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"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"},"put":{"tags":["config"],"summary":"Configure the group memory use limit","description":"**This endpoint allows to configure group's memory use limit.**","operationId":"putConfigMemoryUseLimit","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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LimitSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupSchemaV3-Output"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"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"}},"/api/v4/groups/{group_id}/config/user-limit":{"get":{"tags":["config"],"summary":"Get the user limit of a whole group","description":"**Gives how many users the group may hold. Null when uncapped.**","operationId":"getConfigUserLimit","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":{"$ref":"#/components/schemas/UserLimitConfigSchema"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"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"},"put":{"tags":["config"],"summary":"Configure the user limit of a whole group","description":"**This endpoint allows to configure the user limit for the whole group**","operationId":"putConfigUserLimit","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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLimitSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupSchemaV3-Output"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"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"}},"/api/v4/groups/{group_id}/config/notification-settings":{"get":{"tags":["config"],"summary":"Get the group notification settings","description":"**Gives how the group's SMS notifications are configured.**","operationId":"getConfigNotificationSettings","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":{"$ref":"#/components/schemas/MessageNotificationsConfigSchema"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"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"},"put":{"tags":["config"],"summary":"Configure the group notification settings","description":"**This endpoint allows to configure group's notification settings.**","operationId":"putConfigNotificationSettings","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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageNotificationsConfigSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupSchemaV3-Output"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"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"}},"/api/v4/groups/{group_id}/config/gtfs-rt":{"get":{"tags":["config"],"summary":"Get the public GTFS-RT feed activation state","description":"**Returns the client-controlled toggle state (`active`) only — NOT the feature availability. `active` and availability (`Feature.GTFS_RT` in the group features) are orthogonal: read availability from the group features list. The feed is publicly served only when both are true.**\n\nRole needed: regulator, operator","operationId":"getConfigGtfsRt","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":{"$ref":"#/components/schemas/GtfsRtConfigSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__72"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Getconfiggtfsrt"}}},"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"},"put":{"tags":["config"],"summary":"Enable or disable the public GTFS-RT feed","description":"**Self-service toggle for the public GTFS-RT feed. Requires the GTFS-RT feature to be available (unlocked by Pysae) — returns 403 otherwise.**\n\nRole needed: operator","operationId":"putConfigGtfsRt","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/GtfsRtConfigSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GtfsRtConfigSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/LockedFeature"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__95"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Putconfiggtfsrt"}}},"description":"Forbidden"},"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"}},"/api/v4/groups/{group_id}/config/display-info":{"get":{"tags":["config"],"summary":"Get the public 'display-info' display activation state","description":"**Returns the client-controlled toggle state (`active`) only — NOT the feature availability, which is read from the group features list. The display is publicly served only when both are true.**\n\nRole needed: regulator, operator","operationId":"getConfigDisplayInfo","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":{"$ref":"#/components/schemas/DisplayConfigSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__72"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Getconfigdisplayinfo"}}},"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"},"put":{"tags":["config"],"summary":"Enable or disable the public 'display-info' display","description":"**Self-service toggle for the public display. Requires the corresponding feature to be available (unlocked by Pysae) — returns 403 otherwise.**\n\nRole needed: operator","operationId":"putConfigDisplayInfo","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/DisplayConfigSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisplayConfigSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/LockedFeature"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__95"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Putconfigdisplayinfo"}}},"description":"Forbidden"},"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"}},"/api/v4/groups/{group_id}/config/display-screen":{"get":{"tags":["config"],"summary":"Get the public 'display-screen' display activation state","description":"**Returns the client-controlled toggle state (`active`) only — NOT the feature availability, which is read from the group features list. The display is publicly served only when both are true.**\n\nRole needed: regulator, operator","operationId":"getConfigDisplayScreen","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":{"$ref":"#/components/schemas/DisplayConfigSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__72"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Getconfigdisplayscreen"}}},"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"},"put":{"tags":["config"],"summary":"Enable or disable the public 'display-screen' display","description":"**Self-service toggle for the public display. Requires the corresponding feature to be available (unlocked by Pysae) — returns 403 otherwise.**\n\nRole needed: operator","operationId":"putConfigDisplayScreen","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/DisplayConfigSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisplayConfigSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/LockedFeature"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__95"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Putconfigdisplayscreen"}}},"description":"Forbidden"},"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"}},"/api/v4/groups/{group_id}/config/min-driver-version":{"get":{"tags":["config"],"summary":"Get the minimum driver version for a group","description":"**Gives the floor the group sets on the Pysae Driver app version. A device below it is refused with HTTP 426.**","operationId":"getConfigMinDriverVersion","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/MinDriverVersionSchema"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"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"},"put":{"tags":["config"],"summary":"Configure the minimum driver version for a group","description":"**This endpoint allows admins to set the minimum driver app version. Devices below this version will be blocked (HTTP 426).**","operationId":"putConfigMinDriverVersion","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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MinDriverVersionSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MinDriverVersionSchema"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"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"}},"/api/v4/groups/{group_id}/config/device-limit":{"get":{"tags":["config"],"summary":"Get the group device limit","description":"**Gives how many devices the group may register. Null when uncapped.**","operationId":"getConfigDeviceLimit","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":{"$ref":"#/components/schemas/DeviceLimitSchema"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"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"},"put":{"tags":["config"],"summary":"Configure the group device limit","description":"**This endpoint allows to configure group's device limit.**","operationId":"putConfigDeviceLimit","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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceLimitSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupSchemaV3-Output"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"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"}},"/api/v4/groups/{group_id}/config/equipped-vehicles":{"get":{"tags":["config"],"summary":"Get the group equipped vehicles number","description":"**Gives how many vehicles the group's subscription covers — the reference the daily peak of duties is measured against.**","operationId":"getConfigEquippedVehicles","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":{"$ref":"#/components/schemas/EquippedVehiclesConfigSchema"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"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"},"put":{"tags":["config"],"summary":"Configure the group equipped vehicles number","description":"**This endpoint allows to configure group's equipped vehicles number.**","operationId":"putConfigEquippedVehicles","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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EquippedVehiclesSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupSchemaV3-Output"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRole"}}},"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"}},"/nav-data-processor-api/v4/groups/{group_id}/vehicles/{vehicle_lenient_key}/data":{"put":{"tags":["vehicles-data"],"summary":"Update Vehicle Data","description":"**This endpoint allows you to update telematic data of a vehicle.**\n\nRole needed: vehicle","operationId":"putVehicleDataNdp","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":"vehicle_lenient_key","in":"path","required":true,"schema":{"type":"string","description":"The id, fleet_number or plate_number of the vehicle","title":"Vehicle Lenient Key"},"description":"The id, fleet_number or plate_number of the vehicle"},{"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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VehicleDataSchema"}}}},"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 Putvehicledatandp"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/VehicleLenientKeyNotFound"}],"title":"Response 404 Putvehicledatandp"}}},"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"}},"/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},"post":{"tags":["alerts"],"summary":"Add new alert to the DB.","description":"**This endpoint allows to add a new alert to the database.**\n\nRole needed: regulator, operator","operationId":"postAlerts","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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertCreateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertIdSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__96"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Postalerts"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/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},"put":{"tags":["alerts"],"summary":"Replace all info on the given alert.","description":"**This endpoint allows to replace an alert with its id.****\n\nRole needed: regulator, operator","operationId":"putAlert","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","description":"The id of the targeted alert.","examples":["670f84254c28ffdaae0f462d"],"title":"Alert Id"},"description":"The id of the targeted alert."},{"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/AlertCreateSchema"}}}},"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__97"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Putalert"}}},"description":"Forbidden"},"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"},"delete":{"tags":["alerts"],"summary":"Delete the alert with the given alert_id.","description":"**This endpoint allows to delete an alert with its id.**\n\nRole needed: regulator, operator","operationId":"deleteAlert","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","description":"The id of the targeted alert.","examples":["670f84254c28ffdaae0f462d"],"title":"Alert Id"},"description":"The id of the targeted alert."},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__97"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Deletealert"}}},"description":"Forbidden"},"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"}},"/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}/alerts/{alert_id}/push":{"post":{"tags":["alerts"],"summary":"Push notifications for an alert_id.","description":"**This endpoint allows to push an alert with its id.**\n\nRole needed: regulator, operator","operationId":"postAlertPush","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"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"}},{"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":{"type":"integer"},"title":"Response Postalertpush"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__97"},{"$ref":"#/components/schemas/NoRole"}],"title":"Response 403 Postalertpush"}}},"description":"Forbidden"},"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"}},"/api/v4/groups/{group_id}/gtfs/import-transit-file/preview":{"post":{"tags":["gtfs"],"summary":"Preview a transit file import without writing","description":"**Preview a transit file import without writing, allow user on front-end to see stats about the file**\n\nRole needed: operator","operationId":"postGtfsImportTransitFilePreview","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":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_postGtfsImportTransitFilePreview"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportPreview"}}}},"422":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GtfsArchiveLooksLikeHastus"},{"$ref":"#/components/schemas/GtfsArchiveIsHastusText"},{"$ref":"#/components/schemas/TransitArchiveCompressedTooLarge"},{"$ref":"#/components/schemas/TransitArchiveUncompressedTooLarge"},{"$ref":"#/components/schemas/InvalidGtfsArchive"}],"title":"Response 422 Postgtfsimporttransitfilepreview"}}},"description":"Unprocessable Content"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__98"}],"title":"Response 403 Postgtfsimporttransitfilepreview"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/GtfsAttributionTeamNameNotFound"}],"title":"Response 404 Postgtfsimporttransitfilepreview"}}},"description":"Not Found"}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/gtfs/{gtfs_id}/import-transit-file":{"patch":{"tags":["gtfs"],"summary":"Merge transit file to merge in db","description":"**This endpoint allows to merge a transit file in the database**\n\n- Receive a transit file and merge its content with the data in db.\n- New items will be inserted and already known items will be updated\n\nRole needed: operator","operationId":"patchGtfsImportTransitFile","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":"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":"file-type","in":"query","required":false,"schema":{"$ref":"#/components/schemas/TransitFileType","description":"The type of file to import","default":"gtfs"},"description":"The type of file to import"},{"name":"recompute-dist-traveled","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Recompute-Dist-Traveled"}},{"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/ImportedGtfsFileSchema"}}}},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/GtfsNotFound"},{"$ref":"#/components/schemas/GtfsAttributionTeamNameNotFound"}],"title":"Response 404 Patchgtfsimporttransitfile"}}},"description":"Not Found"},"422":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GtfsArchiveLooksLikeHastus"},{"$ref":"#/components/schemas/GtfsArchiveIsHastusText"},{"$ref":"#/components/schemas/InvalidGtfsArchive"}],"title":"Response 422 Patchgtfsimporttransitfile"}}},"description":"Unprocessable Content"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__99"}],"title":"Response 403 Patchgtfsimporttransitfile"}}},"description":"Forbidden"}},"x-api-version":4,"x-path-prefix":"/api"}},"/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__100"}],"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},"post":{"tags":["voip"],"summary":"Record a new VoIP callback","description":"**Persist a COMMAND_REQUEST callback. The Instavox id is used for dedupe — a second POST with the same instavox_id is a silent no-op and returns the already-stored callback. The Mongo id (returned in the response) is what to use in subsequent URLs.**\n\nFeature needed: voip\n\nRole needed: operator, regulator, technical, admin","operationId":"postVoipCallbacks","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/VoipCallbackCreateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoipCallbackSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__102"}],"title":"Response 403 Postvoipcallbacks"}}},"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"}},"/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__101"}],"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},"put":{"tags":["voip"],"summary":"Replace a VoIP callback identified by its Mongo id","description":"**Replace the full state of an existing callback.**\n\nFeature needed: voip\n\nRole needed: operator, regulator, technical, admin","operationId":"putVoipCallback","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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoipCallbackCreateSchema"}}}},"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 Putvoipcallback"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoipCallbackInstavoxIdConflict"}}},"description":"Conflict"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__103"}],"title":"Response 403 Putvoipcallback"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"patch":{"tags":["voip"],"summary":"Partially update a VoIP callback (by Mongo id)","description":"**Typical use: flip is_resolved when the operator acknowledges the request.**\n\nFeature needed: voip\n\nRole needed: operator, regulator, technical, admin","operationId":"patchVoipCallback","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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoipCallbackUpdateSchema"}}}},"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 Patchvoipcallback"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__104"}],"title":"Response 403 Patchvoipcallback"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/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}/rail/departures/{uic}":{"get":{"tags":["rail"],"summary":"Get the rail departure board of one station, by UIC code.","description":"**Same board as `/rail/departures`, addressed by station instead of by stop — a support and debugging utility.**\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- Restricted to the stations your group attached: a UIC only another group attached answers `200` with an empty list.\n\nFeature needed: rail_data","operationId":"getRailDeparture","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":"uic","in":"path","required":true,"schema":{"type":"string","description":"UIC code of the station, e.g. `87597005`.","examples":["87597005"],"title":"Uic"},"description":"UIC code of the station, e.g. `87597005`."},{"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 Getraildeparture"}}}},"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"}},"/nav-data-processor-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":"getGtfsAgenciesNdp","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 Getgtfsagenciesndp"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/nav-data-processor-api","x-deployment":"ndp"}},"/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},"put":{"tags":["gtfs"],"summary":"Get gtfs agency","description":"**This endpoint allows to update or create an agency for a specific gtfs_id and agency_id.**\n\nRole needed: operator","operationId":"putGtfsAgency","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"gtfs_id","in":"path","required":true,"schema":{"type":"string","title":"Gtfs Id"}},{"name":"agency_id","in":"path","required":true,"schema":{"type":"string","title":"Agency 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/AgencyGTFSSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgencyGTFSSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__41"}],"title":"Response 403 Putgtfsagency"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"},"delete":{"tags":["gtfs"],"summary":"Delete gtfs agency","description":"**This endpoint allows to delete an agency for a specific gtfs_id and agency_id.**\n\nRole needed: operator","operationId":"deleteGtfsAgency","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"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":"agency_id","in":"path","required":true,"schema":{"type":"string","title":"Agency Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__105"}],"title":"Response 403 Deletegtfsagency"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GtfsAgencyNotFound"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/nav-data-processor-api/v4/groups/{group_id}/devices/{device_id}/trip-events":{"post":{"tags":["trip-events"],"summary":"Create Trip Event","description":"**This endpoint allows you to create a trip event**\n\nRole needed: driver","operationId":"postDeviceTripEventsNdp","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":{"type":"string","description":"The id of the device you want to retrieve datas from.","examples":["837e726d2f25af9a","e627452b4a502323","943a739adc3ce43a"],"title":"Device Id"},"description":"The id of the device 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/TripEventSchemaDeviceCreate"}}}},"responses":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceNotFound"},{"$ref":"#/components/schemas/GroupNotFound"}],"title":"Response 404 Postdevicetripeventsndp"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__66"}],"title":"Response 403 Postdevicetripeventsndp"}}},"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"}},"/api/v4/groups/{group_id}/planning/cadencity":{"put":{"tags":["planning","cadencity"],"summary":"Import a Cadencity planning export.","description":"Receive a Cadencity planning export and inject it into the group's         plannings. Cadencity pushes to this endpoint (authenticated as a         technical account). Only dates with at least one resolved line are         replaced; a date whose every line is unresolved keeps its existing         planning. Lines whose `staff_number` is unknown are skipped and lines         whose `license_plate` is unknown are imported without the vehicle;         both are reported in the response. When         `CADENCITY_MAX_SKIPPED_STAFF_RATIO` is set and the share of unresolved         staff exceeds it, the import is refused with 422         `CADENCITY_TOO_MANY_UNRESOLVED_STAFF` before any write.\n\nRole needed: technical, admin","operationId":"putPlanningCadencity","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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CadencityPlanningExportSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CadencityImportResponse"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__106"}],"title":"Response 403 Putplanningcadencity"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TooManyUnresolvedStaff"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/api"}},"/api/v4/groups/{group_id}/simulations":{"get":{"tags":["simulations"],"summary":"Return the simulations for the given group_id.","description":"**This endpoint allows to get all simulations for the given group_id.**\n\nRole needed: admin","operationId":"getSimulations","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/SimulationStatus"}},{"type":"null"}],"title":"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/SimulationSchema"},"title":"Response Getsimulations"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__107"}],"title":"Response 403 Getsimulations"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-deployment":"simu"},"post":{"tags":["simulations"],"summary":"Create a new simulation for the given group_id.","description":"**This endpoint allows to create a simulation for the given group_id.**\n\nRole needed: admin","operationId":"postSimulations","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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulationCreateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulationSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__107"}],"title":"Response 403 Postsimulations"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api","x-deployment":"simu"}},"/api/v4/groups/{group_id}/simulations/{simulation_id}":{"get":{"tags":["simulations"],"summary":"Return the simulation for the given group_id and simulation_id.","description":"**This endpoint allows to get one simulation for the given group_id.**\n\nRole needed: admin","operationId":"getSimulation","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":"simulation_id","in":"path","required":true,"schema":{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"],"title":"Simulation 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/SimulationSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__108"}],"title":"Response 403 Getsimulation"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/SimulationNotFound"}],"title":"Response 404 Getsimulation"}}},"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":"simu"},"delete":{"tags":["simulations"],"summary":"Delete the simulation for the given group_id and simulation_id.","description":"**This endpoint allows to delete one simulation for the given group_id.**\n\nRole needed: admin","operationId":"deleteSimulation","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":"simulation_id","in":"path","required":true,"schema":{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"],"title":"Simulation 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/SimulationSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__108"}],"title":"Response 403 Deletesimulation"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/SimulationNotFound"}],"title":"Response 404 Deletesimulation"}}},"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":"simu"}},"/api/v4/groups/{group_id}/simulations/{simulation_id}/start":{"post":{"tags":["simulations"],"summary":"Start simulation","description":"**This endpoint allows to start a simulation.**\n\nRole needed: admin","operationId":"postSimulationStart","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":"simulation_id","in":"path","required":true,"schema":{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"],"title":"Simulation Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__108"}],"title":"Response 403 Postsimulationstart"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/SimulationNotFound"}],"title":"Response 404 Postsimulationstart"}}},"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":"simu"}},"/api/v4/groups/{group_id}/simulations/{simulation_id}/stop":{"post":{"tags":["simulations"],"summary":"Stop simulation","description":"**This endpoint allows to request stop of a simulation.**\n\nRole needed: admin","operationId":"postSimulationStop","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":"simulation_id","in":"path","required":true,"schema":{"type":"string","minLength":24,"maxLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"],"title":"Simulation Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__108"}],"title":"Response 403 Postsimulationstop"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GroupNotFound"},{"$ref":"#/components/schemas/SimulationNotFound"}],"title":"Response 404 Postsimulationstop"}}},"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":"simu"}},"/nav-data-processor-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":"getGtfsTripsNdp","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 Getgtfstripsndp"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/nav-data-processor-api","x-deployment":"ndp"}},"/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},"put":{"tags":["gtfs"],"summary":"Create or replace one or multiple trips","description":"**This endpoint allows to create or replace one or multiple trip for a specific gtfs_id.**\n\nRole needed: operator","operationId":"putGtfsTrips","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":"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":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TripGTFSSchema"},"title":"Trips"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TripGTFSSchema"},"title":"Response Putgtfstrips"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupNotFound"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamArchived"}}},"description":"Conflict"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__110"}],"title":"Response 403 Putgtfstrips"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-api-version":4,"x-path-prefix":"/api"}},"/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},"put":{"tags":["gtfs"],"summary":"Create or replace trip","description":"**This endpoint allows to create or replace a trip for a specific gtfs_id.**\n\nRole needed: operator","operationId":"putGtfsTrip","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":"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","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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripGTFSSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripGTFSSchema"}}}},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__109"}],"title":"Response 403 Putgtfstrip"}}},"description":"Forbidden"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamArchived"}}},"description":"Conflict"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GtfsTripIdMismatch"}}},"description":"Bad Request"},"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"},"delete":{"tags":["gtfs"],"summary":"Delete a trip","description":"**This endpoint allows to delete a trip.**\n\nRole needed: operator","operationId":"deleteGtfsTrip","security":[{"SessionCookie":[]},{"SessionBearerToken":[]},{"OpenIDConnect":[]},{"ApiKey":[]}],"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 to delete","title":"Trip Id"},"description":"The id of the trip to delete"},{"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":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GtfsTripNotFound"}}},"description":"Not Found"},"403":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NoRole"},{"$ref":"#/components/schemas/pysae__common__http__base__RoleDependency__111"}],"title":"Response 403 Deletegtfstrip"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidGTFSId"}}},"description":"Unprocessable Content"}},"x-api-version":4,"x-path-prefix":"/api"}}},"components":{"schemas":{"APIIntegrationId":{"type":"string","enum":["businfo","cadencity","instavox","mcf","nocrates","rail_data","sftp","webreathe","message_notifications"],"title":"APIIntegrationId","description":"A third-party system the API exchanges data with."},"AccountAlreadyActivated":{"properties":{"code":{"type":"string","const":"ACCOUNT_ALREADY_ACTIVATED","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The account already holds a local password: send a password reset, not an invitation","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/AccountAlreadyActivatedPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"AccountAlreadyActivated","description":"The account already holds a local password: send a password reset, not an invitation"},"AccountAlreadyActivatedPayload":{"properties":{},"type":"object","title":"AccountAlreadyActivatedPayload","description":"Context of the AccountAlreadyActivated error: the values identifying the entities involved in this specific occurrence."},"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."},"AepIntegrationSchema":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether the group currently runs the integration.","default":true},"api_key":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Api Key","description":"Credential the integration authenticates with, masked."},"api_url":{"type":"string","title":"Api Url","description":"Base URL the integration is reached at.","default":""},"ip_address":{"type":"string","title":"Ip Address","description":"Address of the on-board equipment on the vehicle network. The Pysae Driver app reaches it there; the API only stores it.","default":""},"port":{"type":"integer","title":"Port","description":"Port the equipment is reached on.","default":0},"local_port":{"type":"integer","title":"Local Port","description":"Port the Pysae Driver app listens on for the equipment's own messages. The API stores it without acting on it.","default":0},"trip_id_converter":{"type":"string","title":"Trip Id Converter","description":"Algorithm converting the trip identifier: crc32, crc16 or raw.","default":""},"stop_id_converter":{"type":"string","title":"Stop Id Converter","description":"Algorithm converting the stop identifier: crc32, crc16 or raw.","default":""},"route_id_converter":{"type":"string","title":"Route Id Converter","description":"Algorithm converting the route identifier: crc16 or raw. crc32 does not fit the two-byte frame field it feeds.","default":""}},"type":"object","title":"AepIntegrationSchema","description":"AEP ticketing system, which the driver's duty start is relayed to.\n\nAEP frames carry numeric identifiers, so the GTFS identifiers Pysae holds\nare converted before being sent. The three converters below name the\nalgorithm used for each; the API stores them without applying them."},"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"]},"AlertCreateSchema":{"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."}},"type":"object","required":["header_text"],"title":"AlertCreateSchema","description":"A passenger-information message about a disruption of the service.\n\nFollows the GTFS-realtime ``Alert`` shape: a title, a description, a cause,\nan effect, the periods it covers and the entities it targets."},"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"]},"AlertIdSchema":{"properties":{"_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Id","description":"Identifier of the created alert.","examples":["670f84254c28ffdaae0f462d"]}},"type":"object","required":["_id"],"title":"AlertIdSchema","description":"The identifier a newly created alert was given."},"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."},"AllTeams":{"type":"integer","enum":[1],"title":"AllTeams","description":"Stands in for every team of the group, for a caller no team restricts."},"AnonymisationRequestSchema":{"properties":{"dry_run":{"type":"boolean","title":"Dry Run","description":"Count the drivers the run would anonymise instead of anonymising them. Both modes resolve the same cutoff and select on the same eligibility filter, and the result echoes the flag back in `dry_run`, so a caller can preview a run before committing to it.","default":false}},"type":"object","title":"AnonymisationRequestSchema","description":"What a run of the drivers anonymisation should do.\n\nThe request carries no scope: which drivers are eligible is derived from\nthe group's own `retention_period`, never from the caller."},"AnonymisationResultSchema":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Group the run was carried out on."},"cutoff_date":{"type":"string","format":"date-time","title":"Cutoff Date","description":"Only archived drivers whose last change predates this instant were considered. It is the first day of the month standing `retention_period` months before the current one, so it moves on its own as months pass."},"anonymised_count":{"type":"integer","title":"Anonymised Count","description":"Number of drivers anonymised — or, on a dry run, the number that would have been."},"dry_run":{"type":"boolean","title":"Dry Run","description":"Whether the run was a simulation, echoing the request."}},"type":"object","required":["group_id","cutoff_date","anonymised_count","dry_run"],"title":"AnonymisationResultSchema","description":"What a run of the drivers anonymisation did, or would have done.\n\nAnonymising replaces the driver's name and stamps the moment it happened;\nthe driver document itself is kept. A driver already treated is skipped by\nthe next runs, so re-running changes nothing once every eligible driver has\nbeen through."},"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."},"App":{"type":"string","enum":["info","screen"],"title":"App","description":"Public application a traveller opens a session on."},"ArchivalCollection":{"type":"string","enum":["history","gtfs"],"title":"ArchivalCollection","description":"One of the two families a group's archival configuration may list."},"ArchivalConfigurationSchema":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether the archival job runs for this group.","default":false},"frequency":{"$ref":"#/components/schemas/ArchivalFrequency","description":"How often the job is triggered.","default":"monthly"},"liveRetentionMonths":{"type":"integer","minimum":1.0,"title":"Liveretentionmonths","description":"Months of data kept live. It governs the purge alone: archiving is not destructive and may cover the whole history whatever this value holds. Distinct from the group's `retention_period`, which drives driver anonymisation.","default":15},"collections":{"items":{"$ref":"#/components/schemas/ArchivalCollection"},"type":"array","title":"Collections","description":"Families of data the caller selected, recorded as posted. Duplicates are dropped on write, keeping the first occurrence."}},"type":"object","title":"ArchivalConfigurationSchema","description":"How a group's data is archived, and how long it stays queryable live.\n\nA group that never posted one reads back the default: archival disabled,\nmonthly, fifteen months of live retention and an empty family list. Posting\na configuration replaces the whole document — it is never merged with the\none in place — and neither archives nor purges anything by itself."},"ArchivalFrequency":{"type":"string","enum":["monthly","weekly"],"title":"ArchivalFrequency","description":"Rhythm at which the archival job is triggered for a group."},"AudioCodec":{"type":"integer","enum":[1,2],"title":"AudioCodec","description":"Codec used to encode voice PCM"},"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."},"AutoEndConfigSchema":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether the app ends it without the driver acting.","default":true},"delay":{"type":"integer","title":"Delay","description":"Delay in seconds the app waits before ending it.","default":30}},"type":"object","title":"AutoEndConfigSchema","description":"When the Pysae Driver app ends a trip or a duty on its own."},"Body_postGtfsImportTransitFilePreview":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"Transit archive to inspect. Nothing is written."}},"type":"object","required":["file"],"title":"Body_postGtfsImportTransitFilePreview"},"Body_postGtfsValidity":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"GTFS archive to validate, as a zip. It is only read: nothing is imported into the group."}},"type":"object","required":["file"],"title":"Body_postGtfsValidity"},"Body_postHastu":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"Hastus archive to import, as a zip of its XML files."},"agency_id":{"type":"string","title":"Agency Id","description":"Identifier to file the imported network under: a Hastus archive declares no agency, so the GTFS one is built from this form."},"agency_name":{"type":"string","title":"Agency Name","description":"Name of that agency."},"agency_url":{"type":"string","title":"Agency Url","description":"Home page of that agency."},"agency_timezone":{"type":"string","title":"Agency Timezone","description":"IANA timezone of that agency, e.g. ``Europe/Paris``. The archive carries wall-clock times, which are anchored in it; an unknown name falls back to UTC."},"agency_lang":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agency Lang","description":"IETF language tag of the agency's texts."},"agency_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agency Phone","description":"Phone number travellers may reach the agency on."},"agency_fare_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agency Fare Url","description":"Page where the agency's fares are described or sold."},"route_ids":{"items":{"type":"string"},"type":"array","title":"Route Ids","description":"Routes of the archive to import, by ``route_id``; empty imports them all. A partial import replaces the whole GTFS, so it is refused when that GTFS already holds routes outside the list."},"import_hlp":{"type":"boolean","title":"Import Hlp","description":"Also import the dead runs (*haut-le-pied*) of the archive as vehicle movements.","default":false},"route_colors":{"type":"string","title":"Route Colors","description":"JSON object mapping a ``route_id`` to a six-hexadecimal-digit colour, e.g. ``{\"1\": \"FF0000\"}`` — a string because multipart carries no typed mapping. Entries that do not parse are dropped, never fatal.","default":"{}"}},"type":"object","required":["file","agency_id","agency_name","agency_url","agency_timezone"],"title":"Body_postHastu"},"Body_postHastuPreview":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"Hastus archive to inspect, as a zip of its XML files. It is only parsed: nothing is written to the group."}},"type":"object","required":["file"],"title":"Body_postHastuPreview"},"Body_postImportDrivers":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"CSV file to import, semicolon-separated, carrying the required columns on its first line."}},"type":"object","required":["file"],"title":"Body_postImportDrivers"},"Body_postImportVehicles":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"CSV file to import, semicolon-separated, carrying the required columns on its first line."}},"type":"object","required":["file"],"title":"Body_postImportVehicles"},"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_postLoginNdp":{"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_postLoginNdp"},"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"},"Body_putConfigDriverVersions":{"properties":{"deprecated":{"anyOf":[{"items":{"type":"string"},"type":"array","uniqueItems":true},{"type":"null"}],"title":"Deprecated","description":"Ranges the app warns about, while still working."},"to_update":{"anyOf":[{"items":{"type":"string"},"type":"array","uniqueItems":true},{"type":"null"}],"title":"To Update","description":"Ranges the app invites the driver to update from."},"blocked":{"anyOf":[{"items":{"type":"string"},"type":"array","uniqueItems":true},{"type":"null"}],"title":"Blocked","description":"Ranges refused outright: the app cannot be used."}},"type":"object","title":"Body_putConfigDriverVersions"},"Body_putLogo":{"properties":{"logo":{"type":"string","contentMediaType":"application/octet-stream","title":"Logo","description":"Logo of the group, as a JPEG or a PNG image."}},"type":"object","required":["logo"],"title":"Body_putLogo"},"BoundShape":{"properties":{"type":{"$ref":"#/components/schemas/BoundType","description":"Geometry type of the area.","default":"Polygon"},"coordinates":{"items":{"items":{"type":"number"},"type":"array"},"type":"array","title":"Coordinates","description":"Vertices of the polygon, as `[longitude, latitude]` pairs."}},"type":"object","required":["coordinates"],"title":"BoundShape","description":"Area the group operates in, used to frame the maps."},"BoundType":{"type":"string","enum":["Polygon"],"title":"BoundType","description":"Geometry type of the area a group operates in."},"Bounds":{"properties":{"down":{"type":"integer","title":"Down","description":"Cats elements strictly before this index are considered too_early","default":2},"up":{"type":"integer","title":"Up","description":"Cats elements starting from this index are considered too_late","default":3}},"type":"object","title":"Bounds","description":"Where the on-time window sits in the delay categories."},"BoundsSchema":{"properties":{"down":{"type":"integer","title":"Down","description":"Cats elements strictly before this index are considered too_early"},"up":{"type":"integer","title":"Up","description":"Cats elements starting from this index are considered too_late"}},"type":"object","required":["down","up"],"title":"BoundsSchema","description":"Where the on-time window sits in the delay categories."},"BulkDriverArchiveResultSchema":{"properties":{"requested":{"type":"integer","title":"Requested","description":"Number of driver ids received."},"modified":{"type":"integer","title":"Modified","description":"Number of drivers actually updated."}},"type":"object","required":["requested","modified"],"title":"BulkDriverArchiveResultSchema","description":"What the bulk archive actually changed."},"BulkDriverArchiveSchema":{"properties":{"driver_ids":{"items":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"]},"type":"array","uniqueItems":true,"title":"Driver Ids","description":"Drivers the change applies to. Duplicates are collapsed."},"archived":{"type":"boolean","title":"Archived","description":"Whether the drivers are archived: kept out of the current operation, their history untouched."}},"type":"object","required":["driver_ids","archived"],"title":"BulkDriverArchiveSchema","description":"Drivers to archive, or to restore, in one call."},"CachePurgeSchema":{"properties":{"deleted_count":{"type":"integer","title":"Deleted Count","description":"Keys the purge removed."}},"type":"object","required":["deleted_count"],"title":"CachePurgeSchema","description":"Outcome of a cache purge."},"CacheStatsSchema":{"properties":{"total_keys":{"type":"integer","title":"Total Keys","description":"Keys held across every namespace."},"namespaces":{"items":{"$ref":"#/components/schemas/NamespaceStatsSchema"},"type":"array","title":"Namespaces","description":"Per-namespace breakdown of those keys."}},"type":"object","required":["total_keys","namespaces"],"title":"CacheStatsSchema","description":"What the Redis cache holds, broken down by namespace."},"CadencityAssignmentSchema":{"properties":{"trip_id":{"type":"integer","title":"Trip Id","description":"Trip the line assigns, matched against the GTFS ``trip_id`` as its decimal spelling."},"date":{"type":"string","title":"Date","description":"Service date the assignment holds for, as ``YYYYMMDD``.","examples":["20201122"]},"staff_number":{"type":"string","title":"Staff Number","description":"Staff number of the driver. A number matching no driver of the group drops the whole line."},"license_plate":{"type":"string","title":"License Plate","description":"Licence plate of the vehicle, empty when none is assigned. A plate matching no vehicle of the group keeps the line and drops the vehicle.","default":""}},"type":"object","required":["trip_id","date","staff_number"],"title":"CadencityAssignmentSchema","description":"One line of a Cadencity/Apliday planning export. ``trip_id`` is a GTFS\ntrip id sent as an integer; ``license_plate`` is an empty string when no\nvehicle is assigned."},"CadencityExportParamsSchema":{"properties":{"interval":{"items":{"type":"string"},"type":"array","title":"Interval","description":"Date range the export covers, as ``[start, end]`` in ``YYYYMMDD``.","default":[]},"entreprise":{"type":"string","title":"Entreprise","description":"Cadencity company the export was produced for.","default":""}},"type":"object","title":"CadencityExportParamsSchema","description":"The header Cadencity puts on its export.\n\nAccepted so a whole export validates, and read by nothing: the import\nworks off ``datas`` alone."},"CadencityImportResponse":{"properties":{"imported":{"type":"integer","title":"Imported","description":"Number of assignment lines actually stored."},"dates":{"items":{"type":"string"},"type":"array","title":"Dates","description":"Service dates whose planning was replaced, sorted. A date whose every line was dropped keeps its previous planning."},"skipped_staff_numbers":{"items":{"type":"string"},"type":"array","title":"Skipped Staff Numbers","description":"Staff numbers matching no driver of the group, sorted; their lines were left out."},"dropped_license_plates":{"items":{"type":"string"},"type":"array","title":"Dropped License Plates","description":"Licence plates matching no vehicle of the group, sorted; their lines were imported without a vehicle."}},"type":"object","required":["imported","dates","skipped_staff_numbers","dropped_license_plates"],"title":"CadencityImportResponse","description":"What the import made of the export it received."},"CadencityPlanningExportSchema":{"properties":{"datas":{"items":{"$ref":"#/components/schemas/CadencityAssignmentSchema"},"type":"array","title":"Datas","description":"Assignment lines to import, one per trip and date."},"paramsExport":{"$ref":"#/components/schemas/CadencityExportParamsSchema","description":"Header of the export, accepted for compatibility and ignored.","default":{"interval":[],"entreprise":""}}},"type":"object","required":["datas"],"title":"CadencityPlanningExportSchema","description":"The Cadencity planning export payload (``{paramsExport, datas}``)."},"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."},"Categories":{"properties":{"cats":{"items":{"anyOf":[{"type":"integer"},{"type":"number"}]},"type":"array","title":"Cats","description":"Time limits in seconds.","default":[-120,0,120,300]},"bounds":{"$ref":"#/components/schemas/Bounds","description":"Cats indexes for delay intervals","default":{"down":2,"up":3}}},"type":"object","title":"Categories","description":"Delay intervals splitting punctuality into too early, on time and too late."},"CategoriesSchema":{"properties":{"cats":{"items":{"anyOf":[{"type":"integer"},{"type":"number"}]},"type":"array","title":"Cats","description":"Time limits in seconds."},"bounds":{"$ref":"#/components/schemas/BoundsSchema","description":"Cats indexes for delay intervals"}},"type":"object","required":["cats","bounds"],"title":"CategoriesSchema","description":"Delay intervals splitting punctuality into too early, on time and too late."},"Client":{"type":"string","enum":["driver","op"],"title":"Client","description":"Which application a message was sent from."},"CodeGroupPostMode":{"type":"string","enum":["create","keep","prolong"],"title":"CodeGroupPostMode","description":"What to do with the access code the group already holds.\n\n``KEEP`` and ``PROLONG`` fall back to creating a code when the group holds\nnone, or holds an expired one.\n\n- ``CREATE``: issue a new code, replacing the current one.\n- ``KEEP``: return the current code untouched.\n- ``PROLONG``: return the current code with its expiry pushed back."},"CodeGroupSchema":{"properties":{"code":{"type":"string","title":"Code","description":"Code to use on Driver app to add the device in the group"},"expire":{"type":"integer","title":"Expire","description":"Expiration timestamp","examples":[1606003200]},"new":{"type":"boolean","title":"New","description":"true if code has just been created by the call","default":false}},"type":"object","required":["code","expire"],"title":"CodeGroupSchema","description":"Access code devices present to join the group."},"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."},"CompareSchema":{"properties":{"to_create":{"type":"integer","title":"To Create","description":"Records the file would add to the group.","default":0},"to_update":{"type":"integer","title":"To Update","description":"Records of the group the file would change.","default":0},"to_delete":{"type":"integer","title":"To Delete","description":"Records the file would archive.","default":0}},"type":"object","title":"CompareSchema","description":"What an import would change, as returned by a `compare_only` call.\n\nNothing is written: the file is validated and counted only."},"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."},"ConduentIntegrationSchema":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether the group currently runs the integration.","default":true},"api_key":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Api Key","description":"Credential the integration authenticates with, masked."},"api_url":{"type":"string","title":"Api Url","description":"Base URL the integration is reached at.","default":""},"ip_address":{"type":"string","title":"Ip Address","description":"Address of the on-board equipment on the vehicle network. The Pysae Driver app reaches it there; the API only stores it.","default":""},"port":{"type":"integer","title":"Port","description":"Port the equipment is reached on.","default":0}},"type":"object","title":"ConduentIntegrationSchema","description":"Conduent ticketing system, which the driver's duty start is relayed to."},"ConfigSchema":{"properties":{"semver":{"$ref":"#/components/schemas/ConfigSemverSchema","description":"How each Pysae Driver app version range is treated."}},"type":"object","required":["semver"],"title":"ConfigSchema","description":"Configuration shared by every group of the platform."},"ConfigSemverSchema":{"properties":{"deprecated":{"items":{"type":"string"},"type":"array","uniqueItems":true,"title":"Deprecated","description":"Ranges the app warns about, while still working."},"to_update":{"items":{"type":"string"},"type":"array","uniqueItems":true,"title":"To Update","description":"Ranges the app invites the driver to update from."},"blocked":{"items":{"type":"string"},"type":"array","uniqueItems":true,"title":"Blocked","description":"Ranges refused outright: the app cannot be used.","default":[]}},"type":"object","required":["deprecated","to_update"],"title":"ConfigSemverSchema","description":"Version ranges deciding how the Pysae Driver app is treated.\n\nEach entry is a semantic-version range, not a single version. A reported\nversion is matched against `blocked` first, then against the group's own\nminimum, then `deprecated`, then `to_update`; matching none leaves it up to\ndate."},"Contact":{"properties":{"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"Email address travellers write to."},"other_informations":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Other Informations","description":"Free-form text shown alongside the contact details."},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Number","description":"Phone number travellers call."}},"type":"object","title":"Contact","description":"How travellers reach the operator, as shown on the public applications."},"ContactSchema":{"properties":{"email":{"type":"string","title":"Email","description":"Address travellers write to."},"phone_number":{"type":"string","title":"Phone Number","description":"Number travellers call."}},"type":"object","required":["email","phone_number"],"title":"ContactSchema","description":"How travellers reach the operator."},"Coordinates-Input":{"prefixItems":[{"type":"number","title":"Lat"},{"type":"number","title":"Lng"}],"type":"array","maxItems":2,"minItems":2},"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."},"CreateDeviceSchema":{"properties":{"id":{"type":"string","title":"Id","description":"Identifier of the device, as the Pysae Driver app generates and presents it."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Name the operator gives the device."},"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Id","description":"Team the device belongs to."}},"type":"object","required":["id"],"title":"CreateDeviceSchema","description":"Device to register in the group, before it ever connects."},"CurrentTripDetailsSchema":{"properties":{"delay":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Delay","description":"Gap in seconds on the schedule: positive when late, negative when early."},"off_itinerary":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Off Itinerary","description":"Outside of expected itinerary"},"trip_pending":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Trip Pending","description":"Before the first stop"},"trip_pending_distance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Trip Pending Distance","description":"Distance before the first stop"},"shape_dist_traveled":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Shape Dist Traveled","description":"Distance covered along the itinerary, in metres."},"debug_shape_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Debug Shape Score","description":"Score of the itinerary segment the position was projected on. For debugging."},"debug_trace_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Debug Trace Length","description":"Number of positions the projection was computed from. For debugging."}},"type":"object","title":"CurrentTripDetailsSchema","description":"How the trip is going: punctuality, itinerary and progress."},"CurrentTripSchema":{"properties":{"trip":{"$ref":"#/components/schemas/GtfsOptDatedTrip","description":"The trip being run, by its id, service day and GTFS."},"stop":{"anyOf":[{"$ref":"#/components/schemas/CurrentTripStopSchema-Output"},{"type":"null"}],"description":"Stop the vehicle is on its way to, or at."},"trigger":{"anyOf":[{"$ref":"#/components/schemas/TriggerType"},{"type":"null"}],"description":"Whether the driver took the trip or the app did."}},"type":"object","required":["trip"],"title":"CurrentTripSchema","description":"The trip a device is running, and where it stands on it."},"CurrentTripStopSchema-Input":{"properties":{"status":{"$ref":"#/components/schemas/DeviceStatus-Input","description":"Whether the vehicle is heading to, nearing, or at it."},"stop_sequence":{"anyOf":[{"type":"integer"},{"type":"number"}],"title":"Stop Sequence","description":"Position of the stop in the trip. A fractional value designates a temporary stop, absent from the GTFS."},"location":{"anyOf":[{"$ref":"#/components/schemas/LocationSchema-Input"},{"type":"null"}],"description":"The GPS fix the transition was decided on. Absent from older app versions, which leaves the transition dated by the last position the device had reported."}},"type":"object","required":["status","stop_sequence"],"title":"CurrentTripStopSchema","description":"Where the device stands relative to a stop of the trip."},"CurrentTripStopSchema-Output":{"properties":{"status":{"$ref":"#/components/schemas/pysae__api__devices__models__DeviceStatus","description":"Whether the vehicle is heading to, nearing, or at it."},"stop_sequence":{"anyOf":[{"type":"integer"},{"type":"number"}],"title":"Stop Sequence","description":"Position of the stop in the trip. A fractional value designates a temporary stop, absent from the GTFS."},"location":{"anyOf":[{"$ref":"#/components/schemas/LocationSchema-Output"},{"type":"null"}],"description":"The GPS fix the transition was decided on. Absent from older app versions, which leaves the transition dated by the last position the device had reported."}},"type":"object","required":["status","stop_sequence"],"title":"CurrentTripStopSchema","description":"Where the device stands relative to a stop of the trip."},"CurrentTripWithDetailsSchema":{"properties":{"trip":{"$ref":"#/components/schemas/GtfsOptDatedTrip","description":"The trip being run, by its id, service day and GTFS."},"stop":{"anyOf":[{"$ref":"#/components/schemas/CurrentTripStopSchema-Input"},{"type":"null"}],"description":"Stop the vehicle is on its way to, or at."},"trigger":{"anyOf":[{"$ref":"#/components/schemas/TriggerType"},{"type":"null"}],"description":"Whether the driver took the trip or the app did."},"details":{"anyOf":[{"$ref":"#/components/schemas/CurrentTripDetailsSchema"},{"type":"null"}],"description":"Punctuality and progress, once the trip has started."}},"type":"object","required":["trip"],"title":"CurrentTripWithDetailsSchema","description":"The trip a device is running, with how it is going."},"DailyActiveVehiclesSchema":{"properties":{"ts":{"type":"number","title":"Ts","description":"Moment the peak was reached at.","examples":[1606003200.1]},"max_allowed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Allowed","description":"Vehicles the group's subscription covers, null when uncapped."},"concurrent_duties":{"type":"integer","title":"Concurrent Duties","description":"Duties running at once at that moment."}},"type":"object","required":["ts","concurrent_duties"],"title":"DailyActiveVehiclesSchema","description":"Peak of duties run at once over a day, against what the group may run."},"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."},"DangerZoneCreateSchema":{"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."}},"type":"object","required":["name","message","location","radius"],"title":"DangerZoneCreateSchema","description":"A point of the network drivers are warned about on approach."},"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."},"DangerZoneNotFound":{"properties":{"code":{"type":"string","const":"DANGER_ZONE_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The danger zone 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/DangerZoneNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"DangerZoneNotFound","description":"The danger zone has not been found"},"DangerZoneNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group the danger zone was looked up in."},"danger_zone_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Danger Zone Id","description":"Identifier of the unknown danger zone.","examples":["670f84254c28ffdaae0f462d"]}},"type":"object","required":["group_id","danger_zone_id"],"title":"DangerZoneNotFoundPayload","description":"Context of the DangerZoneNotFound error: the values identifying the entities involved in this specific occurrence."},"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-Input":{"properties":{"stop_sequence":{"type":"number","title":"Stop Sequence","description":"Position of the stop in the trip, per the current GTFS."},"delay":{"type":"integer","title":"Delay","description":"Shift in seconds applied at that stop: positive delays it, negative brings it forward."},"stop_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stop Id","description":"Identifier of the stop, to re-locate it if the GTFS moved."},"stop_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stop Index","description":"Rank of the stop in the trip, counted from its first."},"stop_occurrence_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stop Occurrence Index","description":"Which visit this is, for a stop the trip serves more than once."}},"type":"object","required":["stop_sequence","delay"],"title":"Delay","description":"A stop of the trip whose timetable the operator shifted."},"DeletableUnused":{"type":"string","enum":["agency","calendar","calendar_dates","routes","shapes","stops"],"title":"DeletableUnused","description":"GTFS file whose unreferenced records may be deleted from a GTFS.\n\nEvery value but ``agency`` names records matched against the trips of the\nGTFS; ``agency`` is matched against its routes, and a GTFS declaring a\nsingle agency is never touched. ``stops`` spares the parent stations of the\nstops those trips serve, on top of the stops themselves."},"DeleteInvalidRefSchema":{"properties":{"items_delete_count":{"type":"integer","title":"Items Delete Count","description":"Rows deleted because they pointed at something absent."},"trip_ids_with_invalid_required_ref":{"items":{"type":"string"},"type":"array","title":"Trip Ids With Invalid Required Ref","description":"Ids of the trips left untouched because their route_id or service_id reference is invalid. Both are required by the GTFS spec, so the reference cannot be deleted: the trip has to be re-imported with a valid reference, or deleted explicitly."}},"type":"object","required":["items_delete_count"],"title":"DeleteInvalidRefSchema","description":"What the cleanup of a GTFS table's dangling references removed."},"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."},"DepotCreateSchema":{"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."}},"type":"object","required":["name","location","radius"],"title":"DepotCreateSchema","description":"Depot to create in the group: where vehicles are parked between duties."},"DepotNotFound":{"properties":{"code":{"type":"string","const":"DEPOT_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The depot 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/DepotNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"DepotNotFound","description":"The depot has not been found"},"DepotNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group the depot was looked up in."},"depot_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Depot Id","description":"Identifier of the unknown depot.","examples":["670f84254c28ffdaae0f462d"]}},"type":"object","required":["group_id","depot_id"],"title":"DepotNotFoundPayload","description":"Context of the DepotNotFound error: the values identifying the entities involved in this specific occurrence."},"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."},"DeviationDuplicateResultSchema":{"properties":{"status":{"$ref":"#/components/schemas/pysae__api__trip_updates__schemas__ValidationStatus","description":"`error` as soon as the copy could not apply as is."},"errors":{"items":{"$ref":"#/components/schemas/ValidationErrorEntrySchema"},"type":"array","title":"Errors","description":"Every reason the copy would not apply. Empty when valid.","default":[]},"impacted_trip_ids":{"items":{"type":"string"},"type":"array","title":"Impacted Trip Ids","description":"Trips the copy covers over the target period, resolved against the current GTFS.","default":[]},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"MongoDB _id of the created deviation. Null on a dry run or when nothing was written."}},"type":"object","required":["status"],"title":"DeviationDuplicateResultSchema","description":"Outcome of duplicating a deviation onto another period.\n\nThe compatibility check runs before any write: `status` is `error` as soon\nas the source no longer applies to the current GTFS or selects no trip over\nthe target period. `id` is only set once the copy is actually created."},"DeviationDuplicateSchema":{"properties":{"date":{"type":"string","title":"Date","description":"First day the copy applies to.","examples":["20201122"]},"end_date":{"type":"string","title":"End Date","description":"Last day the copy applies to, included.","examples":["20201122"]},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Name the operator gives the copy. Omitted: the copy takes the title of the source."},"excluded_trip_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Excluded Trip Ids","description":"Trips the selector would have caught but must not. Omitted: the copy takes the exclusions of the source."}},"type":"object","required":["date","end_date"],"title":"DeviationDuplicateSchema","description":"Where and how a duplicated deviation applies.\n\nThe content (delay, cancellation, skipped / temporary stops, shape,\nper-stop delays) and the selector are copied from the source deviation;\nonly the fields below can differ on the copy."},"DeviationErrorSchema":{"properties":{"date":{"type":"string","title":"Date","description":"First day the modification applies to.","examples":["20201122"]},"end_date":{"type":"string","title":"End Date","description":"Last day the modification applies to, included.","examples":["20201122"]},"route_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Id","description":"Route the modification selects its trips from, if any."},"shape_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Shape Id","description":"Shape the modification selects its trips from, if any."},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Name the operator gave the modification."},"errors":{"items":{"$ref":"#/components/schemas/ValidationErrorEntrySchema"},"type":"array","title":"Errors","description":"Every reason this modification no longer applies."}},"type":"object","required":["date","end_date","errors"],"title":"DeviationErrorSchema","description":"Validation errors aggregated for a single trip-update."},"DeviationImpactedTripSchema":{"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."},"id":{"type":"string","title":"Id","description":"Identifier of the impacted trip."},"available_dates":{"items":{"type":"string","examples":["20201122"]},"type":"array","title":"Available Dates","description":"Dates within the deviation's range when the trip actually runs, per the GTFS calendar / calendar_dates."},"formatted_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Formatted Name","description":"Name of the trip as the Pysae applications display it. Null when the trip is no longer in the GTFS of its service days."},"departure_time":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Departure Time","description":"Unix timestamp of the trip's departure from its first stop on the first available date. Null when the trip is no longer in the GTFS of its service days."},"km_delta":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Km Delta","description":"Signed km difference deviated - nominal (+ = longer).","readOnly":true}},"type":"object","required":["id","available_dates","km_delta"],"title":"DeviationImpactedTripSchema","description":"One trip a deviation applies to, and what it costs on that trip."},"DeviationIncompatible":{"properties":{"code":{"type":"string","const":"DEVIATION_INCOMPATIBLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The deviation no longer applies to the current GTFS over the target period","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/DeviationIncompatiblePayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"DeviationIncompatible","description":"The deviation no longer applies to the current GTFS over the target period"},"DeviationIncompatiblePayload":{"properties":{"errors":{"items":{"$ref":"#/components/schemas/ValidationErrorEntrySchema"},"type":"array","title":"Errors","description":"Every reason the deviation would not apply."}},"type":"object","required":["errors"],"title":"DeviationIncompatiblePayload","description":"Context of the DeviationIncompatible error: the values identifying the entities involved in this specific occurrence."},"DeviationNotFound":{"properties":{"code":{"type":"string","const":"DEVIATION_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 active deviation 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/DeviationNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"DeviationNotFound","description":"The group has no active deviation with this id"},"DeviationNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Group the deviation was looked up in."},"trip_update_id":{"type":"string","title":"Trip Update Id","description":"Identifier that matched no active deviation."}},"type":"object","required":["group_id","trip_update_id"],"title":"DeviationNotFoundPayload","description":"Context of the DeviationNotFound error: the values identifying the entities involved in this specific occurrence."},"DeviationPeriodSchema":{"properties":{"start":{"type":"string","title":"Start","description":"First day of the range.","examples":["20201122"]},"end":{"type":"string","title":"End","description":"Last day of the range, included.","examples":["20201122"]}},"type":"object","required":["start","end"],"title":"DeviationPeriodSchema","description":"Range of days a deviation is in force over."},"DeviationSchema":{"properties":{"id":{"type":"string","title":"Id","description":"The trip-update document id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Name the operator gave the deviation, for their own use."},"trip_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trip Id","description":"Trip the deviation names, when it targets one rather than a route or a shape."},"route_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Id","description":"Route the deviation selects its trips from, if any."},"shape_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Shape Id","description":"Shape the deviation selects its trips from, if any."},"shape_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Shape Label","description":"Name of that shape, as the GTFS labels it."},"state":{"$ref":"#/components/schemas/DeviationState","description":"Where the deviation's period sits relative to today."},"period":{"$ref":"#/components/schemas/DeviationPeriodSchema","description":"Days the deviation is in force over."},"impacted_trips":{"items":{"$ref":"#/components/schemas/DeviationImpactedTripSchema"},"type":"array","title":"Impacted Trips","description":"Trips the deviation actually applies to over that period."},"deviation_types":{"items":{"$ref":"#/components/schemas/DeviationType"},"type":"array","title":"Deviation Types","description":"What the deviation changes, one entry per kind of change."},"excluded_trip_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Excluded Trip Ids","description":"Trips the selector would have caught but must not."},"delay":{"anyOf":[{"type":"integer","examples":[11]},{"type":"null"}],"title":"Delay","description":"Delay in seconds"},"is_canceled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Canceled","description":"Whether the trips are cancelled outright."},"skipped_stops":{"anyOf":[{"items":{"$ref":"#/components/schemas/StopReference"},"type":"array"},{"type":"null"}],"title":"Skipped Stops","description":"The same skipped stops as `skipped_stop_time_seqs`, carried in a form that survives a GTFS change. The two never differ."},"temporary_stops":{"anyOf":[{"items":{"$ref":"#/components/schemas/pysae__api__trip_updates__models__TemporaryStop"},"type":"array"},{"type":"null"}],"title":"Temporary Stops","description":"Stops the trips serve instead, or in addition."},"modified_shape":{"type":"boolean","title":"Modified Shape","description":"True when the deviation defines a custom shape.","default":false},"delays":{"anyOf":[{"items":{"$ref":"#/components/schemas/pysae__api__trip_updates__models__Delay"},"type":"array"},{"type":"null"}],"title":"Delays","description":"Per-stop shifts of the timetable."},"deviated_shape_km":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Deviated Shape Km","description":"Length in km of the deviated shape. GTFS-era independent (it is the deviation's own geometry), unlike the nominal — which is exposed per course in ``impacted_trips`` and over the period in ``total_nominal_km``."},"total_deviated_km":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Deviated Km","description":"Deviated km driven over the whole period: the deviated shape length summed over every impacted course times its number of service days. ``None`` when the deviation has no shape."},"total_nominal_km":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Nominal Km","description":"Nominal km over the whole period: each impacted course's reference shape length times its service days, summed. Shares ``total_km_delta``'s gate (reported only when every course resolved its nominal); then ``total_deviated_km - total_nominal_km == total_km_delta``."},"total_km_delta":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Km Delta","description":"Signed km gap vs nominal over the whole period (per-course delta weighted by service days, summed). Reported only when **every** impacted course resolved its nominal shape; ``None`` as soon as one course is unresolved, to avoid a partial sum that would understate the gap. See ``impacted_trips`` for the per-course deltas in that case."}},"type":"object","required":["id","state","period","impacted_trips","deviation_types"],"title":"DeviationSchema","description":"Aggregated view of one or more trip-updates sharing the same selector.\n\nTrip-level deviations targeting different courses of the same route on\nthe same date range collapse into a single ``DeviationSchema`` so that\nOp can render one row per real-world incident instead of one row per\ncourse.\n\nDeliberately **not** a ``DeviationKmSchema``: that mixin's\n``nominal_shape_km`` is the creation-era value, while every other km field\nhere is recomputed at read time against each course's own GTFS era. Mixing\nboth would ship two contradicting deltas for the same deviation as soon as\na republication changed the reference geometry. Only the era-independent\n``deviated_shape_km`` is kept at this level; the nominal and the delta are\nauthoritative per course (``impacted_trips``) and over the period\n(``total_*``)."},"DeviationState":{"type":"string","enum":["past","current","upcoming"],"title":"DeviationState","description":"Where the deviation's range sits relative to today."},"DeviationType":{"type":"string","enum":["trip_cancelled","delay","stops_cancelled","temporary_stops","displaced_stops","modified_shape","modified_timetable"],"title":"DeviationType","description":"What a deviation changes on the trips it applies to."},"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."},"DeviceBulkModeFailedSchema":{"properties":{"device_id":{"type":"string","title":"Device Id","description":"Id of the device that failed."},"reason":{"$ref":"#/components/schemas/DeviceBulkModeFailureReason","description":"Reason why the device could not be updated."}},"type":"object","required":["device_id","reason"],"title":"DeviceBulkModeFailedSchema","description":"A device the bulk drive-mode change left untouched, and why."},"DeviceBulkModeFailureReason":{"type":"string","enum":["device_not_found","forbidden_different_team","internal_error"],"title":"DeviceBulkModeFailureReason","description":"Why a bulk drive-mode change left one device untouched."},"DeviceBulkModeResultSchema":{"properties":{"updated":{"items":{"type":"string"},"type":"array","title":"Updated","description":"Ids of the devices whose drive mode was updated."},"failed":{"items":{"$ref":"#/components/schemas/DeviceBulkModeFailedSchema"},"type":"array","title":"Failed","description":"Devices that could not be updated, with the reason."}},"type":"object","required":["updated","failed"],"title":"DeviceBulkModeResultSchema","description":"What the bulk drive-mode change did, device by device.\n\nA device that failed leaves the others updated: the call is not atomic."},"DeviceBulkModeUpdateSchema":{"properties":{"device_ids":{"items":{"type":"string"},"type":"array","maxItems":500,"minItems":1,"title":"Device Ids","description":"Ids of the devices to update."},"mode":{"$ref":"#/components/schemas/DeviceDriveMode","description":"Target drive mode: `trip` for trip mode, `sequence` for sequential service mode."}},"type":"object","required":["device_ids","mode"],"title":"DeviceBulkModeUpdateSchema","description":"Drive mode to set on several devices in one call."},"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."},"DeviceLimitSchema":{"properties":{"device_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Device Limit","description":"Devices the group may register, null when uncapped."}},"type":"object","required":["device_limit"],"title":"DeviceLimitSchema","description":"Cap on the devices the group may register."},"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."},"DeviceStatus-Input":{"type":"string","enum":["IN_TRANSIT_TO","INCOMING_AT","STOPPED_AT"],"title":"DeviceStatus","description":"Where the vehicle stands relative to the stop it is following."},"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."},"DeviceUpdateSchema":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Name the operator gives the device."},"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Id","description":"Team the device belongs to. Superseded by `teams`, kept for clients predating multi-team support."},"teams":{"items":{"type":"string"},"type":"array","title":"Teams","description":"Teams the device belongs to.","default":[]},"assigned_driver_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Driver Id","description":"Driver forced onto this device, taking over what the Pysae Driver app would otherwise ask."},"assigned_vehicle_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Vehicle Id","description":"Vehicle forced onto this device, taking over what the Pysae Driver app would otherwise ask."},"simulation_mode":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Simulation Mode","description":"Whether the device replays a simulated run instead of a real one."},"drive_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Drive Mode","description":"How the device picks the trip it runs: `trip` for trip mode, `sequence` for sequential service mode, `on_demand` for on-demand service."},"trip_filter":{"anyOf":[{"$ref":"#/components/schemas/SequenceModeTripFilter"},{"$ref":"#/components/schemas/TripModeTripFilter"},{"$ref":"#/components/schemas/DeadRunTripFilter"},{"type":"null"}],"title":"Trip Filter","description":"What the device is set to run: a block in sequence mode, a trip in trip mode, or no trip at all on a dead run."},"voip":{"anyOf":[{"$ref":"#/components/schemas/DeviceVoipSchema"},{"type":"null"}],"description":"VoIP endpoint the device is reachable on."}},"type":"object","title":"DeviceUpdateSchema","description":"Fields of a device the operator sets, from the operation side."},"DeviceVersionStatsSchema":{"properties":{"total":{"type":"integer","title":"Total","description":"Devices running this version."},"active":{"type":"integer","title":"Active","description":"Of those, the ones that reported a position in the last 30 days."},"inactive":{"type":"integer","title":"Inactive","description":"Of those, the ones that reported nothing for 30 days, or never reported at all."},"archived":{"type":"integer","title":"Archived","description":"Of those, the archived ones."},"groups":{"items":{"$ref":"#/components/schemas/GroupDeviceVersionStatsSchema"},"type":"array","title":"Groups","description":"The same counts, broken down by group."}},"type":"object","required":["total","active","inactive","archived","groups"],"title":"DeviceVersionStatsSchema","description":"How many devices run one app version, across every group and per group."},"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."},"DisplayConfigSchema":{"properties":{"active":{"type":"boolean","title":"Active","description":"Whether the group serves the display. Distinct from having the feature at all, which only Pysae grants.","default":true}},"type":"object","title":"DisplayConfigSchema","description":"Whether the group serves one of its public displays."},"DisplayFeatureConfig":{"properties":{"active":{"type":"boolean","title":"Active","description":"Whether the group serves the display. Distinct from having the feature at all, which only Pysae grants.","default":true}},"type":"object","title":"DisplayFeatureConfig","description":"Whether the group serves one of its public displays."},"DisplayFeedDisabled":{"properties":{"code":{"type":"string","const":"DISPLAY_FEED_DISABLED","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The public display has been disabled for this organization","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/DisplayFeedDisabledPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"DisplayFeedDisabled","description":"The public display has been disabled for this organization"},"DisplayFeedDisabledPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group the display belongs to."},"feature":{"$ref":"#/components/schemas/Feature","description":"Public display the group has switched off."}},"type":"object","required":["group_id","feature"],"title":"DisplayFeedDisabledPayload","description":"Context of the DisplayFeedDisabled error: the values identifying the entities involved in this specific occurrence."},"DistanceThresholdsConfigSchema":{"properties":{"incoming_distance_threshold":{"type":"integer","title":"Incoming Distance Threshold","description":"Distance in metres from a stop at which a vehicle counts as approaching it.","default":200},"shape_distance_threshold":{"type":"integer","title":"Shape Distance Threshold","description":"Distance in metres from the planned itinerary past which a vehicle counts as off it.","default":300},"stop_distance_threshold":{"type":"integer","title":"Stop Distance Threshold","description":"Distance in metres from a stop within which the Pysae Driver app considers it reached.","default":50},"stop_distance_threshold_exceptions":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Stop Distance Threshold Exceptions","description":"Distances in metres overriding that threshold, keyed by GTFS stop id."}},"type":"object","title":"DistanceThresholdsConfigSchema","description":"Distances the Pysae Driver app decides a vehicle's position against."},"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."},"DriverAnonymised":{"properties":{"code":{"type":"string","const":"DRIVER_ANONYMISED","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The driver has been anonymised and cannot be modified","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/DriverAnonymisedPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"DriverAnonymised","description":"The driver has been anonymised and cannot be modified"},"DriverAnonymisedPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group the driver belongs to."},"driver_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Driver Id","description":"Identifier of the anonymised driver.","examples":["670f84254c28ffdaae0f462d"]}},"type":"object","required":["group_id","driver_id"],"title":"DriverAnonymisedPayload","description":"Context of the DriverAnonymised error: the values identifying the entities involved in this specific occurrence."},"DriverAppConfigSchema":{"properties":{"driver_call_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Driver Call Number","description":"Phone number a driver reaches the operator on."},"driver_message_values":{"items":{"$ref":"#/components/schemas/DriverMessageSchema"},"type":"array","title":"Driver Message Values","description":"Canned messages a driver picks from.","default":[]},"driver_option_display_dead_run_route":{"type":"boolean","title":"Driver Option Display Dead Run Route","description":"Whether the Pysae Driver app draws the routed approach to the first stop of a trip. Off, the driver only sees the trip shape.","default":true},"driver_option_messages_block_send":{"type":"boolean","title":"Driver Option Messages Block Send","description":"Whether the Pysae Driver app prevents a driver from writing their own message, leaving only the canned ones.","default":false},"pis_dead_mileage_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pis Dead Mileage Code","description":"Code standing for a dead run on the on-board passenger information system."},"driver_passenger_count_custom_boarding":{"items":{"type":"string"},"type":"array","title":"Driver Passenger Count Custom Boarding","description":"Extra boarding categories the Pysae Driver app offers when counting passengers.","default":[]},"driver_auto_end_trip":{"$ref":"#/components/schemas/AutoEndConfigSchema","description":"Whether a trip left open ends on its own, and after how long.","default":{"enabled":true,"delay":30}},"driver_auto_end_duty":{"$ref":"#/components/schemas/AutoEndConfigSchema","description":"Whether a duty left open ends on its own, and after how long.","default":{"enabled":true,"delay":30}},"router":{"anyOf":[{"$ref":"#/components/schemas/RouterConfigSchema"},{"type":"null"}],"description":"**deprecated** is now configured in integrations.","deprecated":true}},"type":"object","title":"DriverAppConfigSchema","description":"How the group's Pysae Driver app behaves for its drivers."},"DriverArchiveSchema":{"properties":{"archived":{"type":"boolean","title":"Archived","description":"Whether the driver is archived: kept out of the current operation, their history untouched."}},"type":"object","required":["archived"],"title":"DriverArchiveSchema","description":"Whether the driver leaves the current operation."},"DriverCodeAlreadyTaken":{"properties":{"code":{"type":"string","const":"DRIVER_CODE_ALREADY_TAKEN","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"You cannot have the same code as an other driver","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/DriverCodeAlreadyTakenPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"DriverCodeAlreadyTaken","description":"You cannot have the same code as an other driver"},"DriverCodeAlreadyTakenPayload":{"properties":{},"type":"object","title":"DriverCodeAlreadyTakenPayload","description":"Context of the DriverCodeAlreadyTaken error: the values identifying the entities involved in this specific occurrence."},"DriverCodeSchema":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code","description":"Four-digit code, or null to leave the driver without one."}},"type":"object","required":["code"],"title":"DriverCodeSchema","description":"Code the driver keys in to identify themselves when starting a duty."},"DriverCreateSchema":{"properties":{"driver_name":{"type":"string","title":"Driver Name","description":"Driver's name."},"staff_number":{"type":"string","title":"Staff Number","description":"Staff number."},"comment":{"type":"string","title":"Comment","description":"Comment.","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."},"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."}},"type":"object","required":["driver_name","staff_number"],"title":"DriverCreateSchema","description":"Driver to create in the group."},"DriverImportResultSchema":{"properties":{"created":{"type":"integer","title":"Created","description":"Drivers added to the group."},"modified":{"type":"integer","title":"Modified","description":"Drivers of the group changed."},"ignored":{"type":"integer","title":"Ignored","description":"Lines the import left the group unchanged for."}},"type":"object","required":["created","modified","ignored"],"title":"DriverImportResultSchema","description":"What a driver import actually changed."},"DriverImportValidationError":{"properties":{"decode_error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDecodeLine"},{"type":"null"}],"description":"Lines that could not be read."},"team_name_not_existing":{"anyOf":[{"$ref":"#/components/schemas/ErrorImportTeams"},{"type":"null"}],"description":"Lines naming a team the group does not hold."},"user_missing_team":{"anyOf":[{"$ref":"#/components/schemas/ErrorImportTeams"},{"type":"null"}],"description":"Lines naming a team the caller has no access to."},"missing_field":{"anyOf":[{"$ref":"#/components/schemas/ErrorImportFields"},{"type":"null"}],"description":"Lines missing a required column."},"invalid_format_field":{"anyOf":[{"$ref":"#/components/schemas/ErrorImportFields"},{"type":"null"}],"description":"Lines whose column value does not match its format."},"driver_not_found":{"anyOf":[{"$ref":"#/components/schemas/ErrorImportDriverNotFound"},{"type":"null"}],"description":"Lines updating a driver the group does not hold."},"driver_anonymised":{"anyOf":[{"$ref":"#/components/schemas/ErrorImportDriverAnonymised"},{"type":"null"}],"description":"Lines updating an anonymised driver."},"driver_code_duplicate":{"anyOf":[{"$ref":"#/components/schemas/ErrorImportDriverCode"},{"type":"null"}],"description":"Lines sharing a driver code with another line."},"driver_code_already_taken":{"anyOf":[{"$ref":"#/components/schemas/ErrorImportDriverCode"},{"type":"null"}],"description":"Lines carrying a code another driver already holds."}},"type":"object","title":"DriverImportValidationError","description":"Everything a driver import was refused for, grouped by cause.\n\nEach cause is absent when the file raised none of it. The import is\nall-or-nothing: a single cause leaves the drivers untouched."},"DriverImportValidationFailed":{"properties":{"code":{"type":"string","const":"DRIVER_IMPORT_VALIDATION_FAILED","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"At driver import, some validation errors happened","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/DriverImportValidationFailedPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"DriverImportValidationFailed","description":"At driver import, some validation errors happened"},"DriverImportValidationFailedPayload":{"properties":{"error":{"$ref":"#/components/schemas/DriverImportValidationError","description":"Everything the import was refused for, grouped by cause."}},"type":"object","required":["error"],"title":"DriverImportValidationFailedPayload","description":"Context of the DriverImportValidationFailed error: the values identifying the entities involved in this specific occurrence."},"DriverIntegrationId":{"type":"string","enum":["aep","businfo","conduent","dilax","duhip","gtfs","hanover","hanover_ip","iris","kc650","kuba","lumiplan","matawan","nmea","okapi","paragon","powerBI","qip","seipra","silv1","webreathe_ip","wiibus","instavox","mcf"],"title":"DriverIntegrationId","description":"A piece of on-board equipment the Pysae Driver app drives."},"DriverMessage":{"properties":{"message":{"type":"string","title":"Message","description":"Text of the message."}},"type":"object","required":["message"],"title":"DriverMessage","description":"Canned message a driver can send from the Pysae Driver app."},"DriverMessageSchema":{"properties":{"message":{"type":"string","title":"Message","description":"Text of the message."}},"type":"object","required":["message"],"title":"DriverMessageSchema","description":"Canned message a driver can send from the Pysae Driver app."},"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."},"DuhipIntegrationSchema":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether the group currently runs the integration.","default":true},"api_key":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Api Key","description":"Credential the integration authenticates with, masked."},"api_url":{"type":"string","title":"Api Url","description":"Base URL the integration is reached at.","default":""},"gtfs_field":{"type":"string","title":"Gtfs Field","description":"GTFS field the equipment is keyed on — trip_id, route_id, block_id, shape_id or ext_pis_code. The API stores the choice without acting on it.","default":""},"port":{"type":"integer","title":"Port","description":"Port the equipment is reached on.","default":0},"router":{"anyOf":[{"$ref":"#/components/schemas/DuhipRouterSchema"},{"type":"null"}],"description":"On-board router the equipment sits behind, if any."}},"type":"object","title":"DuhipIntegrationSchema","description":"Lumiplan passenger information display, in its TCP/IP variant.\n\nThe equipment is reached through the on-board router rather than at a\nfixed address, so this integration carries the router instead of one."},"DuhipRouterSchema":{"properties":{"login":{"type":"string","title":"Login","description":"Account the router is reached with.","default":""},"password":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Password","description":"Password of that account, masked."}},"type":"object","title":"DuhipRouterSchema","description":"Credentials of the on-board router the Lumiplan equipment sits behind."},"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."},"DutyChecklistMode":{"type":"string","enum":["optional","required","disabled"],"title":"DutyChecklistMode","description":"Whether the driver has to fill the duty checklist, may, or never sees it."},"DutyChecklistSchema":{"properties":{"mode":{"$ref":"#/components/schemas/DutyChecklistMode","description":"Deprecated, mirrors `checkout_mode`. Kept for the Driver apps that predate the split into one mode per moment of the duty.","default":"optional"},"check_in_mode":{"$ref":"#/components/schemas/DutyChecklistMode","description":"Whether the driver has to fill it before starting a duty, may, or never sees it.","default":"optional"},"checkout_mode":{"$ref":"#/components/schemas/DutyChecklistMode","description":"Whether the driver has to fill it before ending a duty, may, or never sees it.","default":"optional"},"json_schema":{"$ref":"#/components/schemas/JSONModel","description":"The checks themselves, as a JSON Schema. The answers are stored on the duty.","default":{"properties":{"vehicle_empty":{"title":"Empty vehicle control","type":"boolean","ui":{"options":{"format":"determinate"}}},"vehicle_cleanliness":{"oneOf":[{"color":"error","const":0,"title":"Dirty"},{"color":"warning","const":0.5,"title":"Average"},{"color":"success","const":1,"title":"Clean"}],"title":"Cleanliness","type":"number","ui":{"options":{"format":"toggle"}}},"vehicle_fuel_level":{"oneOf":[{"color":"error","const":0,"title":"Empty"},{"color":"warning","const":0.25,"title":"Low"},{"color":"success","const":0.75,"title":"High"},{"color":"success","const":1,"title":"Full"}],"title":"Fuel level","type":"number","ui":{"options":{"format":"toggle"}}},"comments":{"description":"Write a comment","maxLength":200,"title":"Comment","type":"string","ui":{"options":{"descriptionPlaceholder":true,"multi":true}}}}}},"i18n":{"$ref":"#/components/schemas/JSONModel","description":"Wording of the checks, per language.","default":{"fr":{"comments.description":"Rédiger un commentaire","comments.label":"Commentaire","vehicle_cleanliness.Average":"Moyen","vehicle_cleanliness.Clean":"Propre","vehicle_cleanliness.Dirty":"Sale","vehicle_cleanliness.label":"Propreté","vehicle_empty.label":"Contrôle véhicule vide","vehicle_fuel_level.Empty":"Vide","vehicle_fuel_level.Full":"Plein","vehicle_fuel_level.High":"Important","vehicle_fuel_level.Low":"Faible","vehicle_fuel_level.label":"Niveau d'essence"}}},"uischema":{"anyOf":[{"$ref":"#/components/schemas/JSONModel"},{"type":"null"}],"description":"How the app lays the checks out, when the layout is not carried by the schema itself."}},"type":"object","title":"DutyChecklistSchema","description":"The checks a driver fills in at the start and at the end of a duty.\n\nThe form is described as JSON Schema, its wording and its layout apart, so\nthe Pysae Driver app renders it without a release."},"DutyDeviceCreateSchemaV4":{"properties":{"_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Id","description":"Identifier of the duty, generated by the Pysae Driver app so a retry does not open a second one.","examples":["670f84254c28ffdaae0f462d"]},"driver_id":{"anyOf":[{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"]},{"type":"null"}],"title":"Driver Id","description":"Driver taking the duty."},"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."},"check_in":{"$ref":"#/components/schemas/DutyCheckInSchema","description":"Start of the duty."},"vehicle_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vehicle Id","description":"Vehicle the driver takes out."},"checkout":{"anyOf":[{"$ref":"#/components/schemas/DutyCheckOutSchema"},{"type":"null"}],"description":"End of the duty, when it is already over."}},"type":"object","required":["_id","check_in"],"title":"DutyDeviceCreateSchemaV4","description":"Duty a device opens for itself, as the v4 endpoint accepts it.","deprecated":true},"DutyId":{"properties":{"_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Id","description":"Identifier of the duty.","examples":["670f84254c28ffdaae0f462d"]}},"type":"object","required":["_id"],"title":"DutyId","description":"Identifier of the duty that was opened."},"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."},"EnvironmentConfigSchema":{"properties":{"base_url":{"type":"string","title":"Base Url","description":"Root URL this deployment is served from.","default":"http://localhost:8000"},"environment":{"type":"string","title":"Environment","description":"Deployment the client reached, such as prod or dev.","default":"local"},"recaptcha":{"type":"boolean","title":"Recaptcha","description":"Whether the client must solve a captcha to sign in.","default":false}},"type":"object","title":"EnvironmentConfigSchema","description":"What a client needs to know about the deployment it is talking to."},"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`)."},"EquippedVehiclesConfigSchema":{"properties":{"equipped_vehicles":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Equipped Vehicles","description":"Vehicles the group's subscription covers, the reference the daily peak of duties is measured against. Null when uncapped."}},"type":"object","required":["equipped_vehicles"],"title":"EquippedVehiclesConfigSchema","description":"Cap the group's subscription currently sets on its vehicles."},"EquippedVehiclesSchema":{"properties":{"equipped_vehicles":{"type":"integer","title":"Equipped Vehicles","description":"Vehicles the group's subscription covers, the reference the daily peak of duties is measured against."}},"type":"object","required":["equipped_vehicles"],"title":"EquippedVehiclesSchema","description":"New cap on the vehicles the group's subscription covers."},"ErrorDecodeLine":{"properties":{"lines":{"items":{"$ref":"#/components/schemas/ImportLine"},"type":"array","title":"Lines","description":"Lines the error was found on."}},"type":"object","required":["lines"],"title":"ErrorDecodeLine","description":"Lines the import could not read at all."},"ErrorImportDriverAnonymised":{"properties":{"lines":{"items":{"$ref":"#/components/schemas/ImportLine"},"type":"array","title":"Lines","description":"Lines the error was found on."},"ids":{"items":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"]},"type":"array","uniqueItems":true,"title":"Ids","description":"Driver identifiers the lines refer to."}},"type":"object","required":["lines","ids"],"title":"ErrorImportDriverAnonymised","description":"Lines referring to a driver that has been anonymised."},"ErrorImportDriverCode":{"properties":{"lines":{"items":{"$ref":"#/components/schemas/ImportLine"},"type":"array","title":"Lines","description":"Lines the error was found on."},"codes":{"items":{"type":"string"},"type":"array","uniqueItems":true,"title":"Codes","description":"Driver codes the lines carry."}},"type":"object","required":["lines","codes"],"title":"ErrorImportDriverCode","description":"Lines carrying a driver code the import refuses."},"ErrorImportDriverNotFound":{"properties":{"lines":{"items":{"$ref":"#/components/schemas/ImportLine"},"type":"array","title":"Lines","description":"Lines the error was found on."},"ids":{"items":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"]},"type":"array","uniqueItems":true,"title":"Ids","description":"Driver identifiers the lines refer to."}},"type":"object","required":["lines","ids"],"title":"ErrorImportDriverNotFound","description":"Lines referring to a driver the group does not hold."},"ErrorImportFields":{"properties":{"lines":{"items":{"$ref":"#/components/schemas/ImportLine"},"type":"array","title":"Lines","description":"Lines the error was found on."},"fields":{"items":{"type":"string"},"type":"array","uniqueItems":true,"title":"Fields","description":"Columns the error is about."}},"type":"object","required":["lines","fields"],"title":"ErrorImportFields","description":"Lines whose columns the import cannot use."},"ErrorImportTeams":{"properties":{"lines":{"items":{"$ref":"#/components/schemas/ImportLine"},"type":"array","title":"Lines","description":"Lines the error was found on."},"teams":{"items":{"type":"string"},"type":"array","uniqueItems":true,"title":"Teams","description":"Teams the lines refer to: their names when the group holds no such team, their identifiers when the caller has no access to them."}},"type":"object","required":["lines","teams"],"title":"ErrorImportTeams","description":"Lines referring to a team the import cannot resolve."},"ErrorImportVehicleNotFound":{"properties":{"lines":{"items":{"$ref":"#/components/schemas/ImportLine"},"type":"array","title":"Lines","description":"Lines the error was found on."},"ids":{"items":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"]},"type":"array","uniqueItems":true,"title":"Ids","description":"Vehicle identifiers the lines refer to."}},"type":"object","required":["lines","ids"],"title":"ErrorImportVehicleNotFound","description":"Lines referring to a vehicle the group does not hold."},"EventType":{"type":"string","enum":["delay","routing_start","routing_end","incoming_at","departing_from","away_from","trip_start","trip_end","driver_change","arriving_at"],"title":"EventType","description":"What the device reports having happened on the trip.\n\nThe value is stored as reported and never interpreted server-side: it is\nthe vocabulary of the trace a trip leaves behind, and the ``event_type``\nquery parameter filters on it as an exact match."},"ExportCreateSchema":{"properties":{"export_type":{"$ref":"#/components/schemas/ExportType","description":"Kind of export to produce, which decides the shape of `params`."},"params":{"additionalProperties":true,"type":"object","title":"Params","description":"Arguments of the export, validated against the shape its type expects. Both kinds take `start_date` and `end_date`; trip kilometres also take `files` and `trips_over_days`, passenger counts also take `teams`."}},"type":"object","required":["export_type","params"],"title":"ExportCreateSchema","description":"Export a caller asks for, to be produced in the background."},"ExportCreatedSchema":{"properties":{"job_id":{"type":"string","title":"Job Id","description":"Identifier the export job is followed by."}},"type":"object","required":["job_id"],"title":"ExportCreatedSchema","description":"Acknowledgement of an accepted export request."},"ExportJobNotFound":{"properties":{"code":{"type":"string","const":"EXPORT_JOB_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The export job has not been found in this group","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/ExportJobNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"ExportJobNotFound","description":"The export job has not been found in this group"},"ExportJobNotFoundPayload":{"properties":{"job_id":{"type":"string","title":"Job Id","description":"Identifier that matched no export job."},"group_id":{"type":"string","title":"Group Id","description":"Group the job was looked up in."}},"type":"object","required":["job_id","group_id"],"title":"ExportJobNotFoundPayload","description":"Context of the ExportJobNotFound error: the values identifying the entities involved in this specific occurrence."},"ExportJobSchema":{"properties":{"job_id":{"type":"string","title":"Job Id","description":"Identifier the export job is followed by."},"export_type":{"$ref":"#/components/schemas/ExportType","description":"Kind of export the job produces."},"status":{"$ref":"#/components/schemas/ExportJobStatus","description":"Where the job stands."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When the export was requested."},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At","description":"When a worker picked the job up. Null until one does."},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At","description":"When the job stopped, whether it succeeded or failed."},"download_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Download Url","description":"Short-lived signed URL the file is fetched from. Present only on a job that succeeded, and minted anew on each read rather than stored — an old one expires."},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"Why the job failed. Null unless it did."}},"type":"object","required":["job_id","export_type","status","created_at"],"title":"ExportJobSchema","description":"State of an export job, and where to fetch its file once it is ready.\n\nA job is only ever returned to the user who requested it: someone else's\nexport reads back as absent rather than forbidden."},"ExportJobStatus":{"type":"string","enum":["pending","running","succeeded","failed"],"title":"ExportJobStatus","description":"Where an export job stands.\n\nA job is queued as ``pending``, becomes ``running`` when a worker picks it\nup, and settles on ``succeeded`` or ``failed``. Only a succeeded job carries\na download URL, and the job is dropped thirty days after it was created,\nwhen its file expires too."},"ExportType":{"type":"string","enum":["trip_km","passenger_counts"],"title":"ExportType","description":"What an export job produces."},"Feature":{"type":"string","enum":["custom_duty_checklist","danger_zones","deviation","display_info","display_screen","frequency","gtfs_rt","urgency","message_notifications","siri","planning","voip","mcf","nocrates","device_event_sourcing","rail_data","on_demand","sound_announcements"],"title":"Feature","description":"A feature a group may hold. Only Pysae grants one; a group cannot self-serve."},"FeaturesConfigModel":{"properties":{"message_notifications":{"$ref":"#/components/schemas/MessageNotificationsFeatureConfig","description":"Quota of the traveller notifications.","default":{"monthly_limit":250,"nb_sender":1}},"gtfs_rt":{"$ref":"#/components/schemas/GtfsRtFeatureConfig","description":"State of the public GTFS-RT feed.","default":{"active":true}},"display_info":{"$ref":"#/components/schemas/DisplayFeatureConfig","description":"State of the traveller information site.","default":{"active":true}},"display_screen":{"$ref":"#/components/schemas/DisplayFeatureConfig","description":"State of the on-site departure screens.","default":{"active":true}}},"type":"object","title":"FeaturesConfigModel","description":"Settings of the features the group has, as the group itself tunes them."},"FeaturesConfigSchema":{"properties":{"message_notifications":{"anyOf":[{"$ref":"#/components/schemas/MessageNotificationsConfigSchema"},{"type":"null"}],"description":"Quota of the traveller notifications."},"gtfs_rt":{"anyOf":[{"$ref":"#/components/schemas/GtfsRtConfigSchema"},{"type":"null"}],"description":"State of the public GTFS-RT feed."},"display_info":{"anyOf":[{"$ref":"#/components/schemas/DisplayConfigSchema"},{"type":"null"}],"description":"State of the traveller information site."},"display_screen":{"anyOf":[{"$ref":"#/components/schemas/DisplayConfigSchema"},{"type":"null"}],"description":"State of the on-site departure screens."}},"type":"object","title":"FeaturesConfigSchema","description":"Settings of the features the group has, as the group itself tunes them."},"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."},"Frequency":{"properties":{"device_id":{"type":"string","title":"Device Id","description":"Identifier of the device the gaps are measured from."},"delta_next_passage":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Delta Next Passage","description":"Seconds separating this vehicle from the one running behind it — the next passage at any point of the shape. Null when no vehicle follows."},"delta_previous_passage":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Delta Previous Passage","description":"Seconds separating this vehicle from the one running ahead of it — the passage before it at any point of the shape. Null when it leads the shape."}},"type":"object","required":["device_id"],"title":"Frequency","description":"How far a vehicle runs from the others sharing its shape.\n\nEstimated from the distance between consecutive vehicles along the shape\nat a fixed average speed, not read from the GTFS ``frequencies.txt``. A\nvehicle alone on its shape is not reported at all."},"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."},"GroupAccessCodeNotFound":{"properties":{"code":{"type":"string","const":"ACCESS_CODE_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The group does not have a group access code generated","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/GroupAccessCodeNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"GroupAccessCodeNotFound","description":"The group does not have a group access code generated"},"GroupAccessCodeNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group holding no access code."}},"type":"object","required":["group_id"],"title":"GroupAccessCodeNotFoundPayload","description":"Context of the GroupAccessCodeNotFound error: the values identifying the entities involved in this specific occurrence."},"GroupCode":{"properties":{"code":{"type":"string","title":"Code","description":"The code itself."},"expire":{"type":"string","format":"date-time","title":"Expire","description":"Moment past which the code no longer lets a device in."}},"type":"object","required":["code","expire"],"title":"GroupCode","description":"Access code a device presents to join the group."},"GroupContact":{"properties":{"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"Email address travellers write to."},"other_informations":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Other Informations","description":"Free-form text shown alongside the contact details."},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Number","description":"Phone number travellers call."}},"type":"object","title":"GroupContact","description":"How travellers reach the operator, as shown on the public applications."},"GroupCreateSchema":{"properties":{"pub":{"type":"boolean","title":"Pub","description":"DEPRECATED — use features_config.display_info.active","default":false},"pub_screen":{"type":"boolean","title":"Pub Screen","description":"DEPRECATED — use features_config.display_screen.active","default":false},"retention_period":{"type":"integer","title":"Retention Period","description":"Months of history the group keeps: the cutoff the driver anonymisation endpoint applies.","default":36},"stop_distance_threshold":{"type":"integer","title":"Stop Distance Threshold","description":"Distance in metres from a stop within which the Pysae Driver app considers it reached.","default":50},"stop_distance_threshold_exceptions":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Stop Distance Threshold Exceptions","description":"Distances in metres overriding that threshold, keyed by GTFS stop id."},"notifications":{"type":"boolean","title":"Notifications","description":"Notifications toggle the API stores without acting on it.","default":false},"driver_option_display_dead_run_route":{"type":"boolean","title":"Driver Option Display Dead Run Route","description":"Whether the Pysae Driver app draws the routed approach to the first stop of a trip. Off, the driver only sees the trip shape.","default":true},"driver_option_messages_block_send":{"type":"boolean","title":"Driver Option Messages Block Send","description":"Whether the Pysae Driver app prevents a driver from writing their own message, leaving only the canned ones.","default":false},"driver_call_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Driver Call Number","description":"Phone number a driver reaches the operator on."},"router":{"anyOf":[{"$ref":"#/components/schemas/RouterConfig"},{"type":"null"}],"description":"Credentials of the on-board router. Use the integrations."},"driver_trip_format":{"type":"string","title":"Driver Trip Format","description":"Pattern naming a trip on the devices. `%dt` theoretical departure, `%th` headsign, `%tn` trip short name, `%rsn` route short name, `%rln` route long name, `%fs` first stop, `%ls` last stop, `%bl` block id.","default":"%dt - %th"},"driver_ontime_interval":{"items":{"type":"integer"},"type":"array","title":"Driver Ontime Interval","description":"Delay window in seconds, as `[start, end]`, the Pysae Driver app shows the driver as on time in.","default":[0,300]},"delay_device_online":{"type":"integer","title":"Delay Device Online","description":"Seconds without an exchange with a device running the Pysae Driver app, past which it counts as offline.","default":120},"delay_device_offline_visible":{"type":"integer","title":"Delay Device Offline Visible","description":"Seconds without an exchange with a device running the Pysae Driver app, past which its vehicle leaves the map.","default":300},"delay_device_online_router":{"type":"integer","title":"Delay Device Online Router","description":"Seconds without an exchange with an on-board router, past which it counts as offline.","default":120},"delay_device_offline_visible_router":{"type":"integer","title":"Delay Device Offline Visible Router","description":"Seconds without an exchange with an on-board router, past which its vehicle leaves the map.","default":300},"delay_device_online_telematic":{"type":"integer","title":"Delay Device Online Telematic","description":"Seconds without an exchange with an on-board telematics unit, past which it counts as offline.","default":120},"delay_device_offline_visible_telematic":{"type":"integer","title":"Delay Device Offline Visible Telematic","description":"Seconds without an exchange with an on-board telematics unit, past which its vehicle leaves the map.","default":300},"incoming_distance_threshold":{"type":"integer","title":"Incoming Distance Threshold","description":"Distance in metres from a stop at which a vehicle counts as approaching it.","default":200},"shape_distance_threshold":{"type":"integer","title":"Shape Distance Threshold","description":"Distance in metres from the planned itinerary past which a vehicle counts as off it.","default":300},"km_distance_source":{"$ref":"#/components/schemas/KmDistanceSource","description":"How the kilometric counters measure a distance.","default":"gps"},"categories":{"$ref":"#/components/schemas/Categories","description":"Delay intervals the punctuality reports are built on.","default":{"cats":[-120,0,120,300],"bounds":{"down":2,"up":3}}},"teams":{"items":{"$ref":"#/components/schemas/Team"},"type":"array","title":"Teams","description":"Teams the group is split into.","default":[]},"driver_message_values":{"items":{"$ref":"#/components/schemas/DriverMessage"},"type":"array","title":"Driver Message Values","description":"Canned messages a driver picks from.","default":[]},"driver_passenger_count_custom_boarding":{"items":{"type":"string"},"type":"array","title":"Driver Passenger Count Custom Boarding","description":"Extra boarding categories the Pysae Driver app offers when counting passengers.","default":[]},"trip_list_configuration":{"$ref":"#/components/schemas/TripListConfiguration","description":"Presentation of the trip list of a service day.","default":{"merging":{"device":false,"gtfs":true}}},"trip_validation_rules":{"$ref":"#/components/schemas/TripValidationRules","description":"Thresholds past which a trip is reported as problematic.","default":{"start_distance_max":1000,"start_delay_max":1800,"start_delay_min":-1800,"vk_percent_min":80}},"frequency_routes":{"items":{"type":"string"},"type":"array","title":"Frequency Routes","description":"Routes run at a frequency: their trips are followed by headway rather than by timetable.","default":[]},"keep_old_shapes":{"type":"boolean","title":"Keep Old Shapes","description":"Whether a GTFS published without shapes inherits those of the previous one instead of losing its itineraries.","default":false},"pis_dead_mileage_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pis Dead Mileage Code","description":"Code standing for a dead run on the on-board passenger information system."},"auth0_organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth0 Organization Id","description":"Auth0 organization this group signs in through."},"email_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email Domain","description":"Email domain, as `acme.com`, routing a user typing their address to this group's Auth0 organization."},"driver_auto_end_duty":{"$ref":"#/components/schemas/AutoEndConfigSchema","description":"When the Pysae Driver app ends a duty on its own, counted from the arrival at the depot.","default":{"enabled":true,"delay":30}},"driver_auto_end_trip":{"$ref":"#/components/schemas/AutoEndConfigSchema","description":"When the Pysae Driver app ends a trip on its own, counted from the arrival at the last stop.","default":{"enabled":true,"delay":30}},"connection_advance":{"type":"integer","title":"Connection Advance","description":"Legacy setting, stored and returned as-is.","default":0},"upcoming_files":{"items":{"$ref":"#/components/schemas/UpcomingFile"},"type":"array","title":"Upcoming Files","description":"GTFS publications that were scheduled on the group.","default":[]},"tz_delta":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Tz Delta","description":"Legacy setting, stored and returned as-is."},"operations_warnings":{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object","title":"Operations Warnings","description":"Settings of the operations warnings, keyed by warning. Their shape varies by warning and the API does not interpret them.","default":{}},"driver_option_duty_check_in":{"type":"boolean","title":"Driver Option Duty Check In","description":"Whether the Pysae Driver app has the driver check in on their duty before driving it.","default":false},"info_option_push_notification":{"type":"boolean","title":"Info Option Push Notification","description":"Whether the traveller information site may send push notifications.","default":false},"driver_passenger_count":{"type":"boolean","title":"Driver Passenger Count","description":"Whether the Pysae Driver app has the driver count boarding passengers.","default":false},"pis_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pis Type","description":"On-board passenger information system the group runs."},"option_pis":{"type":"boolean","title":"Option Pis","description":"Whether the group drives an on-board passenger information system.","default":false},"option_wait_for_departure_time":{"type":"boolean","title":"Option Wait For Departure Time","description":"Whether the Pysae Driver app holds a trip until its scheduled departure time.","default":false},"option_ercogener":{"type":"boolean","title":"Option Ercogener","description":"Whether the group runs Ercogener on-board units.","default":false},"option_trip_incidents":{"anyOf":[{"$ref":"#/components/schemas/TripIncidentsConfig-Input"},{"type":"null"}],"description":"Where the trip incidents the operator reports are filed."},"applications":{"items":{"type":"string"},"type":"array","title":"Applications","description":"Legacy setting, stored and returned as-is.","default":[]},"latest_driver_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Latest Driver Version","description":"Legacy setting, stored and returned as-is."},"map_vehicle_icon_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Map Vehicle Icon Color","description":"Colour the operator map draws the vehicles in."},"map_vehicle_tooltip_pattern":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Map Vehicle Tooltip Pattern","description":"Pattern the operator map labels a vehicle with."},"punctuality_check":{"type":"boolean","title":"Punctuality Check","description":"Legacy setting, stored and returned as-is.","default":false},"option_driver_break":{"type":"boolean","title":"Option Driver Break","description":"Whether the Pysae Driver app lets the driver take a break during a duty.","default":false},"group_id":{"type":"string","minLength":1,"title":"Group Id","description":"Identifier the group is created under. It appears in the path of nearly every endpoint and cannot be changed afterwards."},"name":{"type":"string","title":"Name","description":"Name of the network the group operates."},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Colour the Pysae applications theme the group with."},"contact":{"anyOf":[{"$ref":"#/components/schemas/Contact"},{"type":"null"}],"description":"How travellers reach the operator."},"current_file":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current File","description":"Identifier of the GTFS the group starts out running on."},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url","description":"URL the logo of the group is served from."},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz","description":"Timezone the group's service days and schedules are read in, as an IANA name."},"archived":{"type":"boolean","title":"Archived","description":"Whether the group is created archived: hidden from the listings, reversibly.","default":false},"code":{"anyOf":[{"$ref":"#/components/schemas/GroupCode"},{"type":"null"}],"description":"Access code devices present to join the group."},"bounds":{"anyOf":[{"$ref":"#/components/schemas/BoundShape"},{"type":"null"}],"description":"Area the group operates in, used to frame the maps."},"private_routes":{"items":{"type":"string"},"type":"array","title":"Private Routes","description":"Routes kept out of the traveller-facing feeds and displays, while staying visible to the operator.","default":[]},"deactivated_routes":{"items":{"type":"string"},"type":"array","title":"Deactivated Routes","description":"Routes left out of the punctuality and kilometre reports.","default":[]},"integrations":{"additionalProperties":{"$ref":"#/components/schemas/Integration"},"propertyNames":{"$ref":"#/components/schemas/APIIntegrationId"},"type":"object","title":"Integrations","description":"Third-party systems the API exchanges with, keyed by integration.","default":{}},"embedded_interfaces":{"additionalProperties":{"$ref":"#/components/schemas/Integration"},"propertyNames":{"$ref":"#/components/schemas/DriverIntegrationId"},"type":"object","title":"Embedded Interfaces","description":"On-board equipment the Pysae Driver app drives, keyed by interface.","default":{}},"features":{"$ref":"#/components/schemas/MongoSet_Feature_","description":"Features the group holds. GTFS-RT is granted unless the set is given explicitly.","default":["gtfs_rt"]},"features_config":{"$ref":"#/components/schemas/FeaturesConfigModel","description":"Settings of the features the group holds.","default":{"message_notifications":{"monthly_limit":250,"nb_sender":1},"gtfs_rt":{"active":true},"display_info":{"active":true},"display_screen":{"active":true}}},"memory_use_limit":{"type":"integer","title":"Memory Use Limit","description":"Size in bytes the group's data may reach.","default":15000000000},"memory_use":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Memory Use","description":"Size in bytes of the group's data, as last measured."},"user_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Limit","description":"Users the group may hold, null when uncapped."},"equipped_vehicles":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Equipped Vehicles","description":"Vehicles the group's subscription covers, the reference the daily peak of duties is measured against. Null when uncapped."},"device_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Device Limit","description":"Devices the group may register, null when uncapped."},"pack":{"anyOf":[{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"]},{"type":"null"}],"title":"Pack","description":"Identifier of the pack the group is attached to."}},"type":"object","required":["group_id","name"],"title":"GroupCreateSchema","description":"Body of ``POST /groups``. Mirrors the creatable Group surface so a group\ncan still be created with its full configuration (the repository persists\n``model_dump`` verbatim), while unknown junk keys (e.g. ``fakeclient``,\ntop-level ``email``) are dropped instead of silently stored — Pydantic's\ndefault ``extra`` is ``\"ignore\"``, no longer ``\"allow\"`` (#2763)."},"GroupDeviceVersionStatsSchema":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group."},"name":{"type":"string","title":"Name","description":"Name of the network the group operates."},"total":{"type":"integer","title":"Total","description":"Devices of the group running this version."},"active":{"type":"integer","title":"Active","description":"Of those, the ones that reported a position in the last 30 days."},"inactive":{"type":"integer","title":"Inactive","description":"Of those, the ones that reported nothing for 30 days, or never reported at all."},"archived":{"type":"integer","title":"Archived","description":"Of those, the archived ones."}},"type":"object","required":["group_id","name","total","active","inactive","archived"],"title":"GroupDeviceVersionStatsSchema","description":"How many devices of one group run the app version being counted."},"GroupNavDataProcessorSchema":{"properties":{"_id":{"type":"string","title":"Id","description":"Identifier of the group."},"id":{"type":"string","title":"Id","description":"Identifier of the group, same as `_id`."},"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group, same as `_id`."},"name":{"type":"string","title":"Name","description":"Name of the network the group operates."},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Colour the Pysae applications theme the group with."},"current_file":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current File","description":"Identifier of the GTFS the group currently runs on."},"teams":{"items":{"$ref":"#/components/schemas/Team"},"type":"array","title":"Teams","description":"Teams of the group, the archived ones left out.","default":[]},"features":{"items":{"$ref":"#/components/schemas/Feature"},"type":"array","title":"Features","description":"Features of the group the app has a part in. The others are left out.","default":[]},"driver_call_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Driver Call Number","description":"Phone number a driver reaches the operator on."},"driver_auto_end_duty":{"$ref":"#/components/schemas/AutoEndConfigSchema","description":"When the app ends a duty on its own, counted from the arrival at the depot."},"driver_auto_end_trip":{"$ref":"#/components/schemas/AutoEndConfigSchema","description":"When the app ends a trip on its own, counted from the arrival at the last stop."},"driver_message_values":{"items":{"$ref":"#/components/schemas/DriverMessageSchema"},"type":"array","title":"Driver Message Values","description":"Canned messages a driver picks from."},"driver_ontime_interval":{"items":{"type":"integer"},"type":"array","title":"Driver Ontime Interval","description":"Delay window in seconds, as `[start, end]`, the app shows the driver as on time in."},"driver_option_display_dead_run_route":{"type":"boolean","title":"Driver Option Display Dead Run Route","description":"Whether the app draws the routed approach to the first stop of a trip. Off, the driver only sees the trip shape.","default":true},"driver_option_messages_block_send":{"type":"boolean","title":"Driver Option Messages Block Send","description":"Whether the app prevents a driver from writing their own message, leaving only the canned ones."},"driver_passenger_count_custom_boarding":{"items":{"type":"string"},"type":"array","title":"Driver Passenger Count Custom Boarding","description":"Extra boarding categories the app offers when counting passengers."},"driver_trip_format":{"type":"string","title":"Driver Trip Format","description":"Pattern naming a trip on the devices. `%dt` theoretical departure, `%th` headsign, `%tn` trip short name, `%rsn` route short name, `%rln` route long name, `%fs` first stop, `%ls` last stop, `%bl` block id."},"frequency_routes":{"items":{"type":"string"},"type":"array","title":"Frequency Routes","description":"Routes run at a frequency: their trips are followed by headway rather than by timetable."},"incoming_distance_threshold":{"type":"integer","title":"Incoming Distance Threshold","description":"Distance in metres from a stop at which the vehicle counts as approaching it."},"pis_dead_mileage_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pis Dead Mileage Code","description":"Code standing for a dead run on the on-board passenger information system."},"shape_distance_threshold":{"type":"integer","title":"Shape Distance Threshold","description":"Distance in metres from the planned itinerary past which the vehicle counts as off it."},"stop_distance_threshold":{"type":"integer","title":"Stop Distance Threshold","description":"Distance in metres from a stop within which the app considers it reached."},"stop_distance_threshold_exceptions":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Stop Distance Threshold Exceptions","description":"Distances in metres overriding that threshold, keyed by GTFS stop id."}},"type":"object","required":["_id","id","group_id","name","driver_call_number","driver_auto_end_duty","driver_auto_end_trip","driver_message_values","driver_ontime_interval","driver_option_messages_block_send","driver_passenger_count_custom_boarding","driver_trip_format","frequency_routes","incoming_distance_threshold","pis_dead_mileage_code","shape_distance_threshold","stop_distance_threshold","stop_distance_threshold_exceptions"],"title":"GroupNavDataProcessorSchema","description":"The group as the Pysae Driver app sees it: only what drives the app.\n\nArchived teams and the features the app has no part in are left out."},"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."},"GroupPublicSchemaV3":{"properties":{"_id":{"type":"string","title":"Id","description":"Identifier of the group."},"id":{"type":"string","title":"Id","description":"Identifier of the group, same as `_id`."},"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group, same as `_id`."},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Colour the Pysae applications theme the group with."},"contact":{"anyOf":[{"$ref":"#/components/schemas/GroupContact"},{"type":"null"}],"description":"How travellers reach the operator."},"current_file":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current File","description":"Identifier of the GTFS the group currently runs on."},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url","description":"URL the logo of the group is served from."},"name":{"type":"string","title":"Name","description":"Name of the network the group operates."},"private_routes":{"items":{"type":"string"},"type":"array","title":"Private Routes","description":"Routes kept out of the traveller-facing feeds and displays, while staying visible to the operator.","default":[]},"deactivated_routes":{"items":{"type":"string"},"type":"array","title":"Deactivated Routes","description":"Routes left out of the punctuality and kilometre reports.","default":[]},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz","description":"Timezone the group's service days and schedules are read in, as an IANA name."},"bounds":{"anyOf":[{"$ref":"#/components/schemas/BoundShape"},{"type":"null"}],"description":"Area the group operates in, used to frame the maps."}},"type":"object","required":["_id","id","group_id","name"],"title":"GroupPublicSchemaV3","description":"Identity of a group: what it is called, where it runs, what it publishes."},"GroupSchemaV3-Input":{"properties":{"pub":{"type":"boolean","title":"Pub","description":"DEPRECATED — use features_config.display_info.active","default":false},"pub_screen":{"type":"boolean","title":"Pub Screen","description":"DEPRECATED — use features_config.display_screen.active","default":false},"retention_period":{"type":"integer","title":"Retention Period","description":"Months of history the group keeps: the cutoff the driver anonymisation endpoint applies.","default":36},"stop_distance_threshold":{"type":"integer","title":"Stop Distance Threshold","description":"Distance in metres from a stop within which the Pysae Driver app considers it reached.","default":50},"stop_distance_threshold_exceptions":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Stop Distance Threshold Exceptions","description":"Distances in metres overriding that threshold, keyed by GTFS stop id."},"notifications":{"type":"boolean","title":"Notifications","description":"Notifications toggle the API stores without acting on it.","default":false},"driver_option_display_dead_run_route":{"type":"boolean","title":"Driver Option Display Dead Run Route","description":"Whether the Pysae Driver app draws the routed approach to the first stop of a trip. Off, the driver only sees the trip shape.","default":true},"driver_option_messages_block_send":{"type":"boolean","title":"Driver Option Messages Block Send","description":"Whether the Pysae Driver app prevents a driver from writing their own message, leaving only the canned ones.","default":false},"driver_call_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Driver Call Number","description":"Phone number a driver reaches the operator on."},"router":{"anyOf":[{"$ref":"#/components/schemas/RouterConfig"},{"type":"null"}],"description":"Credentials of the on-board router. Use the integrations."},"driver_trip_format":{"type":"string","title":"Driver Trip Format","description":"Pattern naming a trip on the devices. `%dt` theoretical departure, `%th` headsign, `%tn` trip short name, `%rsn` route short name, `%rln` route long name, `%fs` first stop, `%ls` last stop, `%bl` block id.","default":"%dt - %th"},"driver_ontime_interval":{"items":{"type":"integer"},"type":"array","title":"Driver Ontime Interval","description":"Delay window in seconds, as `[start, end]`, the Pysae Driver app shows the driver as on time in.","default":[0,300]},"delay_device_online":{"type":"integer","title":"Delay Device Online","description":"Seconds without an exchange with a device running the Pysae Driver app, past which it counts as offline.","default":120},"delay_device_offline_visible":{"type":"integer","title":"Delay Device Offline Visible","description":"Seconds without an exchange with a device running the Pysae Driver app, past which its vehicle leaves the map.","default":300},"delay_device_online_router":{"type":"integer","title":"Delay Device Online Router","description":"Seconds without an exchange with an on-board router, past which it counts as offline.","default":120},"delay_device_offline_visible_router":{"type":"integer","title":"Delay Device Offline Visible Router","description":"Seconds without an exchange with an on-board router, past which its vehicle leaves the map.","default":300},"delay_device_online_telematic":{"type":"integer","title":"Delay Device Online Telematic","description":"Seconds without an exchange with an on-board telematics unit, past which it counts as offline.","default":120},"delay_device_offline_visible_telematic":{"type":"integer","title":"Delay Device Offline Visible Telematic","description":"Seconds without an exchange with an on-board telematics unit, past which its vehicle leaves the map.","default":300},"incoming_distance_threshold":{"type":"integer","title":"Incoming Distance Threshold","description":"Distance in metres from a stop at which a vehicle counts as approaching it.","default":200},"shape_distance_threshold":{"type":"integer","title":"Shape Distance Threshold","description":"Distance in metres from the planned itinerary past which a vehicle counts as off it.","default":300},"km_distance_source":{"$ref":"#/components/schemas/KmDistanceSource","description":"How the kilometric counters measure a distance.","default":"gps"},"categories":{"$ref":"#/components/schemas/Categories","description":"Delay intervals the punctuality reports are built on.","default":{"cats":[-120,0,120,300],"bounds":{"down":2,"up":3}}},"teams":{"items":{"$ref":"#/components/schemas/Team"},"type":"array","title":"Teams","description":"Teams the group is split into.","default":[]},"driver_message_values":{"items":{"$ref":"#/components/schemas/DriverMessage"},"type":"array","title":"Driver Message Values","description":"Canned messages a driver picks from.","default":[]},"driver_passenger_count_custom_boarding":{"items":{"type":"string"},"type":"array","title":"Driver Passenger Count Custom Boarding","description":"Extra boarding categories the Pysae Driver app offers when counting passengers.","default":[]},"trip_list_configuration":{"$ref":"#/components/schemas/TripListConfiguration","description":"Presentation of the trip list of a service day.","default":{"merging":{"device":false,"gtfs":true}}},"trip_validation_rules":{"$ref":"#/components/schemas/TripValidationRules","description":"Thresholds past which a trip is reported as problematic.","default":{"start_distance_max":1000,"start_delay_max":1800,"start_delay_min":-1800,"vk_percent_min":80}},"frequency_routes":{"items":{"type":"string"},"type":"array","title":"Frequency Routes","description":"Routes run at a frequency: their trips are followed by headway rather than by timetable.","default":[]},"keep_old_shapes":{"type":"boolean","title":"Keep Old Shapes","description":"Whether a GTFS published without shapes inherits those of the previous one instead of losing its itineraries.","default":false},"pis_dead_mileage_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pis Dead Mileage Code","description":"Code standing for a dead run on the on-board passenger information system."},"auth0_organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth0 Organization Id","description":"Auth0 organization this group signs in through."},"email_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email Domain","description":"Email domain, as `acme.com`, routing a user typing their address to this group's Auth0 organization."},"driver_auto_end_duty":{"$ref":"#/components/schemas/AutoEndConfigSchema","description":"When the Pysae Driver app ends a duty on its own, counted from the arrival at the depot.","default":{"enabled":true,"delay":30}},"driver_auto_end_trip":{"$ref":"#/components/schemas/AutoEndConfigSchema","description":"When the Pysae Driver app ends a trip on its own, counted from the arrival at the last stop.","default":{"enabled":true,"delay":30}},"connection_advance":{"type":"integer","title":"Connection Advance","description":"Legacy setting, stored and returned as-is.","default":0},"upcoming_files":{"items":{"$ref":"#/components/schemas/UpcomingFile"},"type":"array","title":"Upcoming Files","description":"GTFS publications that were scheduled on the group.","default":[]},"tz_delta":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Tz Delta","description":"Legacy setting, stored and returned as-is."},"operations_warnings":{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object","title":"Operations Warnings","description":"Settings of the operations warnings, keyed by warning. Their shape varies by warning and the API does not interpret them.","default":{}},"driver_option_duty_check_in":{"type":"boolean","title":"Driver Option Duty Check In","description":"Whether the Pysae Driver app has the driver check in on their duty before driving it.","default":false},"info_option_push_notification":{"type":"boolean","title":"Info Option Push Notification","description":"Whether the traveller information site may send push notifications.","default":false},"driver_passenger_count":{"type":"boolean","title":"Driver Passenger Count","description":"Whether the Pysae Driver app has the driver count boarding passengers.","default":false},"pis_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pis Type","description":"On-board passenger information system the group runs."},"option_pis":{"type":"boolean","title":"Option Pis","description":"Whether the group drives an on-board passenger information system.","default":false},"option_wait_for_departure_time":{"type":"boolean","title":"Option Wait For Departure Time","description":"Whether the Pysae Driver app holds a trip until its scheduled departure time.","default":false},"option_ercogener":{"type":"boolean","title":"Option Ercogener","description":"Whether the group runs Ercogener on-board units.","default":false},"option_trip_incidents":{"anyOf":[{"$ref":"#/components/schemas/TripIncidentsConfig-Input"},{"type":"null"}],"description":"Where the trip incidents the operator reports are filed."},"applications":{"items":{"type":"string"},"type":"array","title":"Applications","description":"Legacy setting, stored and returned as-is.","default":[]},"latest_driver_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Latest Driver Version","description":"Legacy setting, stored and returned as-is."},"map_vehicle_icon_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Map Vehicle Icon Color","description":"Colour the operator map draws the vehicles in."},"map_vehicle_tooltip_pattern":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Map Vehicle Tooltip Pattern","description":"Pattern the operator map labels a vehicle with."},"punctuality_check":{"type":"boolean","title":"Punctuality Check","description":"Legacy setting, stored and returned as-is.","default":false},"option_driver_break":{"type":"boolean","title":"Option Driver Break","description":"Whether the Pysae Driver app lets the driver take a break during a duty.","default":false},"_id":{"type":"string","title":"Id","description":"Identifier of the group."},"id":{"type":"string","title":"Id","description":"Identifier of the group, same as `_id`."},"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group, same as `_id`."},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Colour the Pysae applications theme the group with."},"contact":{"anyOf":[{"$ref":"#/components/schemas/GroupContact"},{"type":"null"}],"description":"How travellers reach the operator."},"current_file":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current File","description":"Identifier of the GTFS the group currently runs on."},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url","description":"URL the logo of the group is served from."},"name":{"type":"string","title":"Name","description":"Name of the network the group operates."},"private_routes":{"items":{"type":"string"},"type":"array","title":"Private Routes","description":"Routes kept out of the traveller-facing feeds and displays, while staying visible to the operator.","default":[]},"deactivated_routes":{"items":{"type":"string"},"type":"array","title":"Deactivated Routes","description":"Routes left out of the punctuality and kilometre reports.","default":[]},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz","description":"Timezone the group's service days and schedules are read in, as an IANA name."},"bounds":{"anyOf":[{"$ref":"#/components/schemas/BoundShape"},{"type":"null"}],"description":"Area the group operates in, used to frame the maps."},"archived":{"type":"boolean","title":"Archived","description":"Whether the group is archived: hidden from the listings, reversibly, its data untouched. Read-only here — archiving goes through the archive and unarchive endpoints.","default":false},"next_state_load":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Next State Load","description":"Epoch seconds past which the group's operational state is reloaded from its GTFS."},"loading_state":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Loading State","description":"Epoch seconds at which the ongoing state load started, null when none is running."},"integrations":{"additionalProperties":{"$ref":"#/components/schemas/IntegrationSchema"},"type":"object","title":"Integrations","description":"Third-party systems the API exchanges with, keyed by integration.","default":{}},"embedded_interfaces":{"additionalProperties":{"$ref":"#/components/schemas/IntegrationSchema"},"type":"object","title":"Embedded Interfaces","description":"On-board equipment the Pysae Driver app drives, keyed by interface.","default":{}},"memory_use_limit":{"type":"integer","title":"Memory Use Limit","description":"Size in bytes the group's data may reach.","default":15000000000},"memory_use":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Memory Use","description":"Size in bytes of the group's data, as last measured."},"features":{"items":{"$ref":"#/components/schemas/Feature"},"type":"array","title":"Features","description":"Features the group holds.","default":[]},"user_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Count","description":"Users currently holding a role on the group."},"user_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Limit","description":"Users the group may hold, null when uncapped."},"equipped_vehicles":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Equipped Vehicles","description":"Vehicles the group's subscription covers, the reference the daily peak of duties is measured against. Null when uncapped."},"device_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Device Limit","description":"Devices the group may register, null when uncapped."},"features_config":{"$ref":"#/components/schemas/FeaturesConfigSchema","description":"Settings of the features the group holds.","default":{}}},"type":"object","required":["memory_use_limit"],"title":"GroupSchemaV3","description":"A group with its full configuration, as the Pysae applications read it.\n\nThe `PUT` replaces the whole document: a field left out of the body is\ndropped from the group. `archived` keeps its stored value, and `pack` and\n`user_count` are ignored."},"GroupSchemaV3-Output":{"properties":{"pub":{"type":"boolean","title":"Pub","description":"DEPRECATED — use features_config.display_info.active","default":false},"pub_screen":{"type":"boolean","title":"Pub Screen","description":"DEPRECATED — use features_config.display_screen.active","default":false},"retention_period":{"type":"integer","title":"Retention Period","description":"Months of history the group keeps: the cutoff the driver anonymisation endpoint applies.","default":36},"stop_distance_threshold":{"type":"integer","title":"Stop Distance Threshold","description":"Distance in metres from a stop within which the Pysae Driver app considers it reached.","default":50},"stop_distance_threshold_exceptions":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Stop Distance Threshold Exceptions","description":"Distances in metres overriding that threshold, keyed by GTFS stop id."},"notifications":{"type":"boolean","title":"Notifications","description":"Notifications toggle the API stores without acting on it.","default":false},"driver_option_display_dead_run_route":{"type":"boolean","title":"Driver Option Display Dead Run Route","description":"Whether the Pysae Driver app draws the routed approach to the first stop of a trip. Off, the driver only sees the trip shape.","default":true},"driver_option_messages_block_send":{"type":"boolean","title":"Driver Option Messages Block Send","description":"Whether the Pysae Driver app prevents a driver from writing their own message, leaving only the canned ones.","default":false},"driver_call_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Driver Call Number","description":"Phone number a driver reaches the operator on."},"router":{"anyOf":[{"$ref":"#/components/schemas/RouterConfig"},{"type":"null"}],"description":"Credentials of the on-board router. Use the integrations."},"driver_trip_format":{"type":"string","title":"Driver Trip Format","description":"Pattern naming a trip on the devices. `%dt` theoretical departure, `%th` headsign, `%tn` trip short name, `%rsn` route short name, `%rln` route long name, `%fs` first stop, `%ls` last stop, `%bl` block id.","default":"%dt - %th"},"driver_ontime_interval":{"items":{"type":"integer"},"type":"array","title":"Driver Ontime Interval","description":"Delay window in seconds, as `[start, end]`, the Pysae Driver app shows the driver as on time in.","default":[0,300]},"delay_device_online":{"type":"integer","title":"Delay Device Online","description":"Seconds without an exchange with a device running the Pysae Driver app, past which it counts as offline.","default":120},"delay_device_offline_visible":{"type":"integer","title":"Delay Device Offline Visible","description":"Seconds without an exchange with a device running the Pysae Driver app, past which its vehicle leaves the map.","default":300},"delay_device_online_router":{"type":"integer","title":"Delay Device Online Router","description":"Seconds without an exchange with an on-board router, past which it counts as offline.","default":120},"delay_device_offline_visible_router":{"type":"integer","title":"Delay Device Offline Visible Router","description":"Seconds without an exchange with an on-board router, past which its vehicle leaves the map.","default":300},"delay_device_online_telematic":{"type":"integer","title":"Delay Device Online Telematic","description":"Seconds without an exchange with an on-board telematics unit, past which it counts as offline.","default":120},"delay_device_offline_visible_telematic":{"type":"integer","title":"Delay Device Offline Visible Telematic","description":"Seconds without an exchange with an on-board telematics unit, past which its vehicle leaves the map.","default":300},"incoming_distance_threshold":{"type":"integer","title":"Incoming Distance Threshold","description":"Distance in metres from a stop at which a vehicle counts as approaching it.","default":200},"shape_distance_threshold":{"type":"integer","title":"Shape Distance Threshold","description":"Distance in metres from the planned itinerary past which a vehicle counts as off it.","default":300},"km_distance_source":{"$ref":"#/components/schemas/KmDistanceSource","description":"How the kilometric counters measure a distance.","default":"gps"},"categories":{"$ref":"#/components/schemas/Categories","description":"Delay intervals the punctuality reports are built on.","default":{"cats":[-120,0,120,300],"bounds":{"down":2,"up":3}}},"teams":{"items":{"$ref":"#/components/schemas/Team"},"type":"array","title":"Teams","description":"Teams the group is split into.","default":[]},"driver_message_values":{"items":{"$ref":"#/components/schemas/DriverMessage"},"type":"array","title":"Driver Message Values","description":"Canned messages a driver picks from.","default":[]},"driver_passenger_count_custom_boarding":{"items":{"type":"string"},"type":"array","title":"Driver Passenger Count Custom Boarding","description":"Extra boarding categories the Pysae Driver app offers when counting passengers.","default":[]},"trip_list_configuration":{"$ref":"#/components/schemas/TripListConfiguration","description":"Presentation of the trip list of a service day.","default":{"merging":{"device":false,"gtfs":true}}},"trip_validation_rules":{"$ref":"#/components/schemas/TripValidationRules","description":"Thresholds past which a trip is reported as problematic.","default":{"start_distance_max":1000,"start_delay_max":1800,"start_delay_min":-1800,"vk_percent_min":80}},"frequency_routes":{"items":{"type":"string"},"type":"array","title":"Frequency Routes","description":"Routes run at a frequency: their trips are followed by headway rather than by timetable.","default":[]},"keep_old_shapes":{"type":"boolean","title":"Keep Old Shapes","description":"Whether a GTFS published without shapes inherits those of the previous one instead of losing its itineraries.","default":false},"pis_dead_mileage_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pis Dead Mileage Code","description":"Code standing for a dead run on the on-board passenger information system."},"auth0_organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth0 Organization Id","description":"Auth0 organization this group signs in through."},"email_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email Domain","description":"Email domain, as `acme.com`, routing a user typing their address to this group's Auth0 organization."},"driver_auto_end_duty":{"$ref":"#/components/schemas/AutoEndConfigSchema","description":"When the Pysae Driver app ends a duty on its own, counted from the arrival at the depot.","default":{"enabled":true,"delay":30}},"driver_auto_end_trip":{"$ref":"#/components/schemas/AutoEndConfigSchema","description":"When the Pysae Driver app ends a trip on its own, counted from the arrival at the last stop.","default":{"enabled":true,"delay":30}},"connection_advance":{"type":"integer","title":"Connection Advance","description":"Legacy setting, stored and returned as-is.","default":0},"upcoming_files":{"items":{"$ref":"#/components/schemas/UpcomingFile"},"type":"array","title":"Upcoming Files","description":"GTFS publications that were scheduled on the group.","default":[]},"tz_delta":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Tz Delta","description":"Legacy setting, stored and returned as-is."},"operations_warnings":{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object","title":"Operations Warnings","description":"Settings of the operations warnings, keyed by warning. Their shape varies by warning and the API does not interpret them.","default":{}},"driver_option_duty_check_in":{"type":"boolean","title":"Driver Option Duty Check In","description":"Whether the Pysae Driver app has the driver check in on their duty before driving it.","default":false},"info_option_push_notification":{"type":"boolean","title":"Info Option Push Notification","description":"Whether the traveller information site may send push notifications.","default":false},"driver_passenger_count":{"type":"boolean","title":"Driver Passenger Count","description":"Whether the Pysae Driver app has the driver count boarding passengers.","default":false},"pis_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pis Type","description":"On-board passenger information system the group runs."},"option_pis":{"type":"boolean","title":"Option Pis","description":"Whether the group drives an on-board passenger information system.","default":false},"option_wait_for_departure_time":{"type":"boolean","title":"Option Wait For Departure Time","description":"Whether the Pysae Driver app holds a trip until its scheduled departure time.","default":false},"option_ercogener":{"type":"boolean","title":"Option Ercogener","description":"Whether the group runs Ercogener on-board units.","default":false},"option_trip_incidents":{"anyOf":[{"$ref":"#/components/schemas/TripIncidentsConfig-Output"},{"type":"null"}],"description":"Where the trip incidents the operator reports are filed."},"applications":{"items":{"type":"string"},"type":"array","title":"Applications","description":"Legacy setting, stored and returned as-is.","default":[]},"latest_driver_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Latest Driver Version","description":"Legacy setting, stored and returned as-is."},"map_vehicle_icon_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Map Vehicle Icon Color","description":"Colour the operator map draws the vehicles in."},"map_vehicle_tooltip_pattern":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Map Vehicle Tooltip Pattern","description":"Pattern the operator map labels a vehicle with."},"punctuality_check":{"type":"boolean","title":"Punctuality Check","description":"Legacy setting, stored and returned as-is.","default":false},"option_driver_break":{"type":"boolean","title":"Option Driver Break","description":"Whether the Pysae Driver app lets the driver take a break during a duty.","default":false},"_id":{"type":"string","title":"Id","description":"Identifier of the group."},"id":{"type":"string","title":"Id","description":"Identifier of the group, same as `_id`."},"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group, same as `_id`."},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Colour the Pysae applications theme the group with."},"contact":{"anyOf":[{"$ref":"#/components/schemas/GroupContact"},{"type":"null"}],"description":"How travellers reach the operator."},"current_file":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current File","description":"Identifier of the GTFS the group currently runs on."},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url","description":"URL the logo of the group is served from."},"name":{"type":"string","title":"Name","description":"Name of the network the group operates."},"private_routes":{"items":{"type":"string"},"type":"array","title":"Private Routes","description":"Routes kept out of the traveller-facing feeds and displays, while staying visible to the operator.","default":[]},"deactivated_routes":{"items":{"type":"string"},"type":"array","title":"Deactivated Routes","description":"Routes left out of the punctuality and kilometre reports.","default":[]},"tz":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz","description":"Timezone the group's service days and schedules are read in, as an IANA name."},"bounds":{"anyOf":[{"$ref":"#/components/schemas/BoundShape"},{"type":"null"}],"description":"Area the group operates in, used to frame the maps."},"archived":{"type":"boolean","title":"Archived","description":"Whether the group is archived: hidden from the listings, reversibly, its data untouched. Read-only here — archiving goes through the archive and unarchive endpoints.","default":false},"next_state_load":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Next State Load","description":"Epoch seconds past which the group's operational state is reloaded from its GTFS."},"loading_state":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Loading State","description":"Epoch seconds at which the ongoing state load started, null when none is running."},"integrations":{"additionalProperties":{"$ref":"#/components/schemas/IntegrationSchema"},"type":"object","title":"Integrations","description":"Third-party systems the API exchanges with, keyed by integration.","default":{}},"embedded_interfaces":{"additionalProperties":{"$ref":"#/components/schemas/IntegrationSchema"},"type":"object","title":"Embedded Interfaces","description":"On-board equipment the Pysae Driver app drives, keyed by interface.","default":{}},"memory_use_limit":{"type":"integer","title":"Memory Use Limit","description":"Size in bytes the group's data may reach.","default":15000000000},"memory_use":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Memory Use","description":"Size in bytes of the group's data, as last measured."},"features":{"items":{"$ref":"#/components/schemas/Feature"},"type":"array","title":"Features","description":"Features the group holds.","default":[]},"user_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Count","description":"Users currently holding a role on the group."},"user_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Limit","description":"Users the group may hold, null when uncapped."},"equipped_vehicles":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Equipped Vehicles","description":"Vehicles the group's subscription covers, the reference the daily peak of duties is measured against. Null when uncapped."},"device_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Device Limit","description":"Devices the group may register, null when uncapped."},"features_config":{"$ref":"#/components/schemas/FeaturesConfigSchema","description":"Settings of the features the group holds.","default":{}}},"type":"object","required":["memory_use_limit"],"title":"GroupSchemaV3","description":"A group with its full configuration, as the Pysae applications read it.\n\nThe `PUT` replaces the whole document: a field left out of the body is\ndropped from the group. `archived` keeps its stored value, and `pack` and\n`user_count` are ignored."},"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."},"GtfsArchiveIsHastusText":{"properties":{"code":{"type":"string","const":"GTFS_ARCHIVE_IS_HASTUS_TEXT","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The uploaded archive is a Hastus flat-text export, which is not supported; provide the Hastus XML export instead","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/GtfsArchiveIsHastusTextPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"GtfsArchiveIsHastusText","description":"The uploaded archive is a Hastus flat-text export, which is not supported; provide the Hastus XML export instead"},"GtfsArchiveIsHastusTextPayload":{"properties":{},"type":"object","title":"GtfsArchiveIsHastusTextPayload","description":"Context of the GtfsArchiveIsHastusText error: the values identifying the entities involved in this specific occurrence."},"GtfsArchiveLooksLikeHastus":{"properties":{"code":{"type":"string","const":"GTFS_ARCHIVE_LOOKS_LIKE_HASTUS","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The uploaded archive is a Hastus export, not a GTFS archive","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/GtfsArchiveLooksLikeHastusPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"GtfsArchiveLooksLikeHastus","description":"The uploaded archive is a Hastus export, not a GTFS archive"},"GtfsArchiveLooksLikeHastusPayload":{"properties":{},"type":"object","title":"GtfsArchiveLooksLikeHastusPayload","description":"Context of the GtfsArchiveLooksLikeHastus error: the values identifying the entities involved in this specific occurrence."},"GtfsAttributionTeamNameNotFound":{"properties":{"code":{"type":"string","const":"GTFS_ATTRIBUTION_TEAM_NAME_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"Some team names referenced by the GTFS archive have 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/GtfsAttributionTeamNameNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"GtfsAttributionTeamNameNotFound","description":"Some team names referenced by the GTFS archive have not been found"},"GtfsAttributionTeamNameNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Group the teams were sought on."},"team_names":{"items":{"type":"string"},"type":"array","title":"Team Names","description":"Team names the archive references that the group has not."}},"type":"object","required":["group_id","team_names"],"title":"GtfsAttributionTeamNameNotFoundPayload","description":"Context of the GtfsAttributionTeamNameNotFound 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."},"GtfsDatedTrip":{"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":{"type":"string","title":"Gtfs Id","description":"référence vers `gtfs.id` de la course"}},"type":"object","required":["trip_id","start_date","gtfs_id"],"title":"GtfsDatedTrip","description":"One run of a scheduled trip: the trip, its GTFS, and its service date.\n\nNone of the three fields designates that run on its own — a trip identifier\nonly makes sense inside its GTFS, and the same trip runs again on every\nservice date its calendar covers."},"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/pysae__api__gtfs__files__models__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."},"GtfsInUse":{"properties":{"code":{"type":"string","const":"GTFS_IN_USE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The targeted gtfs is currently in use","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/GtfsInUsePayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"GtfsInUse","description":"The targeted gtfs is currently in use"},"GtfsInUsePayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group the GTFS is published on."},"gtfs_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Gtfs Id","description":"Identifier of the GTFS in service, which archiving would take away from the trips running on it.","examples":["670f84254c28ffdaae0f462d"]}},"type":"object","required":["group_id","gtfs_id"],"title":"GtfsInUsePayload","description":"Context of the GtfsInUse error: the values identifying the entities involved in this specific occurrence."},"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."},"GtfsResourceSchema":{"type":"string","enum":["trips","routes","stop_times"],"title":"GtfsResourceSchema","description":"GTFS table whose dangling references the cleanup walks."},"GtfsRouteInUse":{"properties":{"code":{"type":"string","const":"GTFS_ROUTE_IN_USE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The targeted gtfs route is referenced by a trip","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/GtfsRouteInUsePayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"GtfsRouteInUse","description":"The targeted gtfs route is referenced by a trip"},"GtfsRouteInUsePayload":{"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 belongs to.","examples":["670f84254c28ffdaae0f462d"]},"route_id":{"type":"string","title":"Route Id","description":"Route still referenced, so it cannot be removed."}},"type":"object","required":["group_id","gtfs_id","route_id"],"title":"GtfsRouteInUsePayload","description":"Context of the GtfsRouteInUse error: the values identifying the entities involved in this specific occurrence."},"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."},"GtfsRtConfigSchema":{"properties":{"active":{"type":"boolean","title":"Active","description":"Whether the group serves the feed. Distinct from having the feature at all, which only Pysae grants.","default":true}},"type":"object","title":"GtfsRtConfigSchema","description":"Whether the group serves its public GTFS-RT feed."},"GtfsRtFeatureConfig":{"properties":{"active":{"type":"boolean","title":"Active","description":"Whether the group serves the feed. Distinct from having the feature at all, which only Pysae grants.","default":true}},"type":"object","title":"GtfsRtFeatureConfig","description":"Whether the group serves its public GTFS-RT feed."},"GtfsScheduled":{"properties":{"code":{"type":"string","const":"GTFS_SCHEDULED","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The targeted gtfs is scheduled for publishing","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/GtfsScheduledPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"GtfsScheduled","description":"The targeted gtfs is scheduled for publishing"},"GtfsScheduledPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group the publication is planned on."},"gtfs_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Gtfs Id","description":"Identifier of the GTFS awaiting publication; cancel its schedule before archiving it.","examples":["670f84254c28ffdaae0f462d"]}},"type":"object","required":["group_id","gtfs_id"],"title":"GtfsScheduledPayload","description":"Context of the GtfsScheduled error: the values identifying the entities involved in this specific occurrence."},"GtfsShapeNotFound":{"properties":{"code":{"type":"string","const":"GTFS_SHAPE_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The gtfs shape 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/GtfsShapeNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"GtfsShapeNotFound","description":"The gtfs shape has not been found"},"GtfsShapeNotFoundPayload":{"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 itinerary was looked up in.","examples":["670f84254c28ffdaae0f462d"]},"shape_id":{"type":"string","title":"Shape Id","description":"Identifier that matched no itinerary."}},"type":"object","required":["group_id","gtfs_id","shape_id"],"title":"GtfsShapeNotFoundPayload","description":"Context of the GtfsShapeNotFound error: the values identifying the entities involved in this specific occurrence."},"GtfsStopInUse":{"properties":{"code":{"type":"string","const":"GTFS_STOP_IN_USE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The targeted stop is referenced by a trip","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/GtfsStopInUsePayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"GtfsStopInUse","description":"The targeted stop is referenced by a trip"},"GtfsStopInUsePayload":{"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 belongs to.","examples":["670f84254c28ffdaae0f462d"]},"stop_id":{"type":"string","title":"Stop Id","description":"Stop still referenced, so it cannot be removed."}},"type":"object","required":["group_id","gtfs_id","stop_id"],"title":"GtfsStopInUsePayload","description":"Context of the GtfsStopInUse 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."},"GtfsTripIdMismatch":{"properties":{"code":{"type":"string","const":"GTFS_TRIP_ID_MISMATCH","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The trip id of the URL and the one of the body differ","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/GtfsTripIdMismatchPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"GtfsTripIdMismatch","description":"The trip id of the URL and the one of the body differ"},"GtfsTripIdMismatchPayload":{"properties":{"path_trip_id":{"type":"string","title":"Path Trip Id","description":"Identifier of the trip the URL designates."},"body_trip_id":{"type":"string","title":"Body Trip Id","description":"Identifier of the trip the payload carries."}},"type":"object","required":["path_trip_id","body_trip_id"],"title":"GtfsTripIdMismatchPayload","description":"Context of the GtfsTripIdMismatch 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."},"HTTPErrorSchema":{"properties":{"code":{"type":"string","title":"Code","description":"Error code"},"details":{"type":"string","title":"Details","description":"Error details"}},"type":"object","required":["code","details"],"title":"HTTPErrorSchema","description":"Error response of the endpoints predating the current error format.\n\nThe current one carries a `payload` alongside the code and the details."},"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."},"HanoverIpIntegrationSchema":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether the group currently runs the integration.","default":true},"api_key":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Api Key","description":"Credential the integration authenticates with, masked."},"api_url":{"type":"string","title":"Api Url","description":"Base URL the integration is reached at.","default":""},"ip_address":{"type":"string","title":"Ip Address","description":"Address of the on-board equipment on the vehicle network. The Pysae Driver app reaches it there; the API only stores it.","default":""},"port":{"type":"integer","title":"Port","description":"Port the equipment is reached on.","default":0}},"type":"object","title":"HanoverIpIntegrationSchema","description":"Hanover passenger information display, in its TCP/IP variant.\n\nThe serial variant carries no address and is enabled without a body."},"HastusArchiveLooksLikeGtfs":{"properties":{"code":{"type":"string","const":"HASTUS_ARCHIVE_LOOKS_LIKE_GTFS","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The uploaded archive is a GTFS export, not a Hastus archive","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/HastusArchiveLooksLikeGtfsPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"HastusArchiveLooksLikeGtfs","description":"The uploaded archive is a GTFS export, not a Hastus archive"},"HastusArchiveLooksLikeGtfsPayload":{"properties":{},"type":"object","title":"HastusArchiveLooksLikeGtfsPayload","description":"Context of the HastusArchiveLooksLikeGtfs error: the values identifying the entities involved in this specific occurrence."},"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."},"ImportLine":{"properties":{"line":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"string"}],"title":"Line","description":"Content of the line, parsed into its columns, or raw when it could not be parsed."},"number":{"type":"integer","title":"Number","description":"Position of the line in the imported file."}},"type":"object","required":["line","number"],"title":"ImportLine","description":"A line of the imported file that an error is about."},"ImportPreview":{"properties":{"agencies":{"type":"integer","title":"Agencies","description":"Number of agencies in the archive. Always 0 for a Hastus archive, which carries none: the agency is given on the import form."},"trips":{"type":"integer","title":"Trips","description":"Number of trips the import would create. A Hastus archive contributes only its public commercial trips: dead runs — offered separately by the ``import_hlp`` form field — and trips whose calendar, pattern or stops cannot be resolved are not counted."},"stops":{"type":"integer","title":"Stops","description":"Number of distinct stops the import would bring in. A Hastus archive's stops that no imported trip serves are pruned before counting."},"calendar_entries":{"type":"integer","title":"Calendar Entries","description":"Number of service-calendar rows: ``calendar`` plus ``calendar_dates`` for a GTFS archive, ``calendar_dates`` alone for a Hastus one."},"shapes":{"type":"integer","title":"Shapes","description":"Number of shapes — the paths vehicles follow — the import would bring in. A Hastus archive's shapes that no imported trip uses are pruned before counting."},"routes_detail":{"items":{"$ref":"#/components/schemas/ImportRouteSummary"},"type":"array","title":"Routes Detail","description":"Every route of the archive, with its own counts."},"routes":{"type":"integer","title":"Routes","description":"Number of routes in the archive. Derived from ``routes_detail``, never sent.","readOnly":true}},"type":"object","required":["agencies","trips","stops","calendar_entries","shapes","routes_detail","routes"],"title":"ImportPreview","description":"What a transit archive would bring in, counted without importing anything.\n\nAnswers the preview endpoints, so an operator can check an archive before\ncommitting it to a GTFS. A GTFS archive is counted row for row; a Hastus\none is counted after the transformation that drops what it will not\nimport, so its counts are smaller than the archive itself."},"ImportRouteSummary":{"properties":{"route_id":{"type":"string","title":"Route Id","description":"Identifier of the route in the archive. A Hastus import can be narrowed to a subset of these through its ``route_ids``."},"short_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Short Name","description":"Short name of the route: the number or letter travellers identify it by."},"long_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Long Name","description":"Full name of the route, as the archive gives it."},"agency_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agency Id","description":"Agency the route declares. Null for a Hastus archive, which names no agency."},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Colour the route is drawn in, as six hexadecimal digits without a leading ``#``."},"text_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text Color","description":"Colour of the text drawn over ``color``, same form."},"trip_count":{"type":"integer","title":"Trip Count","description":"Number of trips the archive attaches to this route."},"stop_count":{"type":"integer","title":"Stop Count","description":"Number of distinct stops those trips serve."}},"type":"object","required":["route_id","short_name","long_name","agency_id","color","text_color","trip_count","stop_count"],"title":"ImportRouteSummary","description":"One route of the archive, and what importing it would bring in."},"ImportedGtfsFileSchema":{"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/pysae__api__gtfs__files__models__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."},"agency":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agency","description":"Agencies the import stored."},"calendar":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Calendar","description":"Service calendars the import stored."},"calendar_dates":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Calendar Dates","description":"Calendar exceptions the import stored."},"stops":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stops","description":"Stops the import stored."},"routes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Routes","description":"Routes the import stored."},"shapes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Shapes","description":"Itineraries the import stored."},"trips":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Trips","description":"Trips the import stored."}},"type":"object","required":["_id","mod_time","name"],"title":"ImportedGtfsFileSchema","description":"A GTFS that finished importing, with what each of its tables holds.\n\nThe counts are of the rows actually stored, so they say what the import\nproduced rather than what the archive announced."},"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."},"IncompleteHastusArchive":{"properties":{"code":{"type":"string","const":"INCOMPLETE_HASTUS_ARCHIVE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The Hastus archive is missing required XML files","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/IncompleteHastusArchivePayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"IncompleteHastusArchive","description":"The Hastus archive is missing required XML files"},"IncompleteHastusArchivePayload":{"properties":{"missing_files":{"items":{"type":"string"},"type":"array","title":"Missing Files","description":"Every required XML the archive does not carry, e.g. ``[\"CAL.xml\", \"NET.xml\"]`` — all of them at once, so the sender does not discover them one upload at a time."}},"type":"object","required":["missing_files"],"title":"IncompleteHastusArchivePayload","description":"Context of the IncompleteHastusArchive error: the values identifying the entities involved in this specific occurrence."},"IncorrectIntegration":{"properties":{"code":{"type":"string","const":"INCORRECT_INTEGRATION_CONFIGURATION","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"Some data is incorrect in this integration","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/IncorrectIntegrationPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"IncorrectIntegration","description":"Some data is incorrect in this integration"},"IncorrectIntegrationPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Group the integration was set on."},"integration_id":{"type":"string","title":"Integration Id","description":"Integration whose settings were refused."}},"type":"object","required":["group_id","integration_id"],"title":"IncorrectIntegrationPayload","description":"Context of the IncorrectIntegration error: the values identifying the entities involved in this specific occurrence."},"InfoAppConfigSchema":{"properties":{"contact":{"anyOf":[{"$ref":"#/components/schemas/ContactSchema"},{"type":"null"}],"description":"Contact details the application offers travellers."},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Colour the Pysae applications theme the group with."}},"type":"object","title":"InfoAppConfigSchema","description":"How the group appears in the traveller-facing application."},"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."},"InstavoxClientSettingsSchema":{"properties":{"app_name":{"type":"string","title":"App Name","description":"Application name","default":"Pysae API"},"version_code":{"type":"integer","title":"Version Code","description":"Application version code","default":1},"version_name":{"type":"string","title":"Version Name","description":"Application version name","default":"5.0"},"audio_codec":{"$ref":"#/components/schemas/AudioCodec","description":"Audio codec (1=ALAW, 2=ULAW)","default":1},"device_description":{"type":"string","title":"Device Description","description":"Device description string","default":"MANUFACTURER=PYSAE;MODEL=API;SERIAL=1;OSVERSION=5.5"},"device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Id","description":"Device ID (auto-generated if null)"},"device_id_seed":{"type":"string","contentMediaType":"application/octet-stream","title":"Device Id Seed","description":"Seed for device ID generation","default":"pysae-api"}},"type":"object","title":"InstavoxClientSettingsSchema","description":"How Pysae presents itself to Instavox as a virtual handset."},"InstavoxIntegrationSchema-Input":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether the integration is enabled","default":true},"uri":{"type":"string","title":"Uri","description":"Instavox WebSocket server URI"},"username":{"type":"string","title":"Username","description":"Instavox login username"},"password":{"type":"string","format":"password","title":"Password","description":"Instavox login password","writeOnly":true},"operator_username":{"type":"string","title":"Operator Username","description":"Instavox operator (dispatcher) login username","default":""},"operator_password":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Operator Password","description":"Instavox operator (dispatcher) login password"},"client":{"$ref":"#/components/schemas/InstavoxClientSettingsSchema","description":"Virtual device configuration"}},"type":"object","required":["uri","username","password"],"title":"InstavoxIntegrationSchema","description":"Instavox, the voice system controllers call drivers through.\n\nTwo accounts are held: one for the drivers' side and one for the\ndispatcher placing the call from the back office."},"InstavoxIntegrationSchema-Output":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether the integration is enabled","default":true},"uri":{"type":"string","title":"Uri","description":"Instavox WebSocket server URI"},"username":{"type":"string","title":"Username","description":"Instavox login username"},"password":{"type":"string","format":"password","title":"Password","description":"Instavox login password","writeOnly":true},"operator_username":{"type":"string","title":"Operator Username","description":"Instavox operator (dispatcher) login username","default":""},"operator_password":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Operator Password","description":"Instavox operator (dispatcher) login password"},"client":{"$ref":"#/components/schemas/InstavoxClientSettingsSchema","description":"Virtual device configuration"}},"type":"object","required":["uri","username","password"],"title":"InstavoxIntegrationSchema","description":"Instavox, the voice system controllers call drivers through.\n\nTwo accounts are held: one for the drivers' side and one for the\ndispatcher placing the call from the back office."},"Integration":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether the group currently runs the integration.","default":true},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key","description":"Credential the integration authenticates with."},"api_url":{"type":"string","title":"Api Url","description":"Base URL the integration is reached at.","default":""}},"additionalProperties":true,"type":"object","title":"Integration","description":"Generic integration model for untyped integrations."},"IntegrationNotFound":{"properties":{"code":{"type":"string","const":"INTEGRATION_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The integration 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/IntegrationNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"IntegrationNotFound","description":"The integration has not been found"},"IntegrationNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Group the integration was sought on."},"integration_id":{"type":"string","title":"Integration Id","description":"Integration the group does not run."}},"type":"object","required":["group_id","integration_id"],"title":"IntegrationNotFoundPayload","description":"Context of the IntegrationNotFound error: the values identifying the entities involved in this specific occurrence."},"IntegrationSchema":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether the group currently runs the integration.","default":true},"api_key":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Api Key","description":"Credential the integration authenticates with, masked."}},"additionalProperties":true,"type":"object","title":"IntegrationSchema","description":"An integration of the group, whichever third-party system it drives.\n\nFields specific to an integration are carried verbatim alongside these two,\nso an integration with no schema of its own is still exposed in full."},"IntegrationType":{"type":"string","enum":["api","driver"],"title":"IntegrationType","description":"Which side of Pysae an integration plugs into.\n\nAn ``api`` integration is a system the API exchanges data with, held under\nthe group's ``integrations``; a ``driver`` one is on-board equipment the\nPysae Driver app talks to, held under its ``embedded_interfaces``."},"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."},"InvalidGtfsArchive":{"properties":{"code":{"type":"string","const":"INVALID_GTFS_ARCHIVE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The GTFS archive is invalid or missing required files","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/InvalidGtfsArchivePayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"InvalidGtfsArchive","description":"The GTFS archive is invalid or missing required files"},"InvalidGtfsArchivePayload":{"properties":{},"type":"object","title":"InvalidGtfsArchivePayload","description":"Context of the InvalidGtfsArchive error: the values identifying the entities involved in this specific occurrence."},"InvalidHastusArchive":{"properties":{"code":{"type":"string","const":"INVALID_HASTUS_ARCHIVE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The Hastus archive is invalid or missing required files","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/InvalidHastusArchivePayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"InvalidHastusArchive","description":"The Hastus archive is invalid or missing required files"},"InvalidHastusArchivePayload":{"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"What made the archive unreadable — a broken zip, malformed XML — reported verbatim rather than as the generic message."}},"type":"object","title":"InvalidHastusArchivePayload","description":"Context of the InvalidHastusArchive 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."},"InvalidRequest":{"properties":{"code":{"type":"string","const":"INVALID_REQUEST","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The request has missing body or query params","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/InvalidRequestPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"InvalidRequest","description":"The request has missing body or query params"},"InvalidRequestPayload":{"properties":{"details":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Details","description":"What the request was missing, when the endpoint says so."}},"type":"object","title":"InvalidRequestPayload","description":"Context of the InvalidRequest 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."},"InvalidToken":{"properties":{"code":{"type":"string","const":"INVALID_TOKEN","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"Invalid token","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/InvalidTokenPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"InvalidToken","description":"Invalid token"},"InvalidTokenPayload":{"properties":{},"type":"object","title":"InvalidTokenPayload","description":"Context of the InvalidToken error: the values identifying the entities involved in this specific occurrence."},"InvitationSentSchema":{"properties":{"sent_at":{"type":"string","format":"date-time","title":"Sent At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["sent_at","expires_at"],"title":"InvitationSentSchema","description":"Dates the back-office needs to refresh the row's status and throttle."},"InvitationThrottled":{"properties":{"code":{"type":"string","const":"INVITATION_THROTTLED","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"An invitation was sent too recently to this account","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/InvitationThrottledPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"InvitationThrottled","description":"An invitation was sent too recently to this account"},"InvitationThrottledPayload":{"properties":{},"type":"object","title":"InvitationThrottledPayload","description":"Context of the InvitationThrottled 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."},"JSONModel":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"boolean"},{"items":{},"type":"array"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"JSONModel","description":"Any JSON value, carried as-is: the API does not constrain its shape."},"KmDistanceSource":{"type":"string","enum":["gps","shape"],"title":"KmDistanceSource","description":"Distance source for the kilometric counters (vk, commercial km).\n\n- ``GPS``: point-to-point GPS distance between successive positions —\n  the distance actually driven, detours included.\n- ``SHAPE``: ``shape_dist_traveled`` deltas along the GTFS shape\n  (map-matched progression on the planned itinerary), with a GPS\n  fallback for off-itinerary and tripless segments where the shape\n  stream is structurally absent."},"KubaIntegrationSchema":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether the group currently runs the integration.","default":true},"api_key":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Api Key","description":"Credential the integration authenticates with, masked."},"api_url":{"type":"string","title":"Api Url","description":"Base URL the integration is reached at.","default":""},"ip_address":{"type":"string","title":"Ip Address","description":"Address of the on-board equipment on the vehicle network. The Pysae Driver app reaches it there; the API only stores it.","default":""},"port":{"type":"integer","title":"Port","description":"Port the equipment is reached on.","default":0},"local_port":{"type":"integer","title":"Local Port","description":"Port the Pysae Driver app listens on for the equipment's own messages. The API stores it without acting on it.","default":0},"gtfs_field":{"type":"string","title":"Gtfs Field","description":"GTFS field the equipment is keyed on — trip_id, route_id, block_id, shape_id or ext_pis_code. The API stores the choice without acting on it.","default":""},"version":{"type":"string","title":"Version","description":"Protocol generation the equipment speaks: legacy or v8.","default":""},"society_line":{"type":"string","title":"Society Line","description":"Society line the equipment is configured with.","default":""}},"type":"object","title":"KubaIntegrationSchema","description":"Kuba ticketing system, which the driver's duty start is relayed to."},"LimitSchema":{"properties":{"limit":{"type":"integer","title":"Limit","description":"Size in bytes the group's data may reach."}},"type":"object","required":["limit"],"title":"LimitSchema","description":"New cap on the storage the group's data may take."},"LocationMetadataSchema":{"properties":{"gps_ppm":{"type":"integer","title":"Gps Ppm","description":"Positions the GPS produced over the last minute.","default":0}},"type":"object","title":"LocationMetadataSchema","description":"What the device reports about its own positioning."},"LocationSchema-Input":{"properties":{"ts":{"anyOf":[{"type":"string","examples":["2020-11-22T11:12:13","22/11/2020 11:12:13"]},{"type":"integer","examples":[1606003200]},{"type":"number","examples":[1606003200.5]}],"title":"Ts","description":"Horodatage de la donnée au format ISO 8601 ou timestamp unix (Unix epoch time)"},"ts_system":{"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"}],"title":"Ts System","description":"Horodatage de la donnée au format ISO 8601 ou timestamp unix (Unix epoch time) (système, à définir uniquement si positions simulées"},"latlng":{"prefixItems":[{"type":"number"},{"type":"number"}],"type":"array","maxItems":2,"minItems":2,"title":"Latlng","description":"Coordonnées au format Latitude/Longitude"},"latlng_accuracy":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latlng Accuracy","description":"Précision de la position"},"speed":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Speed","description":"Vitesse en m/s"},"bearing":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bearing","description":"Direction en degrés (Orientation, de 0° à 360°)"}},"type":"object","required":["ts","latlng"],"title":"LocationSchema","description":"A position the device reports, with what it knows about it."},"LocationSchema-Output":{"properties":{"ts":{"type":"string","format":"date-time","title":"Ts","description":"Horodatage de la donnée au format ISO 8601 ou timestamp unix (Unix epoch time)"},"ts_system":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ts System","description":"Horodatage de la donnée au format ISO 8601 ou timestamp unix (Unix epoch time) (système, à définir uniquement si positions simulées"},"latlng":{"prefixItems":[{"type":"number"},{"type":"number"}],"type":"array","maxItems":2,"minItems":2,"title":"Latlng","description":"Coordonnées au format Latitude/Longitude"},"latlng_accuracy":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latlng Accuracy","description":"Précision de la position"},"speed":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Speed","description":"Vitesse en m/s"},"bearing":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bearing","description":"Direction en degrés (Orientation, de 0° à 360°)"}},"type":"object","required":["ts","latlng"],"title":"LocationSchema","description":"A position the device reports, with what it knows about it."},"LocationUpdateSchema":{"properties":{"ts":{"anyOf":[{"type":"string","examples":["2020-11-22T11:12:13","22/11/2020 11:12:13"]},{"type":"integer","examples":[1606003200]},{"type":"number","examples":[1606003200.5]}],"title":"Ts","description":"Horodatage de la donnée au format ISO 8601 ou timestamp unix (Unix epoch time)"},"ts_system":{"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"}],"title":"Ts System","description":"Horodatage de la donnée au format ISO 8601 ou timestamp unix (Unix epoch time) (système, à définir uniquement si positions simulées"},"latlng":{"prefixItems":[{"type":"number"},{"type":"number"}],"type":"array","maxItems":2,"minItems":2,"title":"Latlng","description":"Coordonnées au format Latitude/Longitude"},"latlng_accuracy":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latlng Accuracy","description":"Précision de la position"},"speed":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Speed","description":"Vitesse en m/s"},"bearing":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bearing","description":"Direction en degrés (Orientation, de 0° à 360°)"},"meters_since_previous_location":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Meters Since Previous Location","description":"Number of meter the device had done since its previous location"}},"type":"object","required":["ts","latlng"],"title":"LocationUpdateSchema","description":"A position the device reports, with the distance it covered to get there."},"LockedFeature":{"properties":{"code":{"type":"string","const":"LOCKED_FEATURE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"Your organization did not unlocked this feature","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/LockedFeaturePayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"LockedFeature","description":"Your organization did not unlocked this feature"},"LockedFeaturePayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group the call was made on."},"feature_needed":{"items":{"$ref":"#/components/schemas/Feature"},"type":"array","uniqueItems":true,"title":"Feature Needed","description":"Features the endpoint requires."},"feature_missing":{"items":{"$ref":"#/components/schemas/Feature"},"type":"array","uniqueItems":true,"title":"Feature Missing","description":"Required features the group has not unlocked."},"details":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Details","description":"Additional context on what the missing feature blocks."}},"type":"object","required":["group_id","feature_needed","feature_missing"],"title":"LockedFeaturePayload","description":"Context of the LockedFeature error: the values identifying the entities involved in this specific occurrence."},"LoginGroupSchema":{"properties":{"code":{"type":"string","title":"Code","description":"Access code of the group, as generated from the Pysae applications. It expires."},"device_id":{"type":"string","title":"Device Id","description":"Identifier of the device joining the group. The device is created when the group does not know it yet."}},"type":"object","required":["code","device_id"],"title":"LoginGroupSchema","description":"Credentials a device presents to join a group: its access code and its id."},"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."},"MatawanIntegrationSchema":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether the group currently runs the integration.","default":true},"api_key":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Api Key","description":"Credential the integration authenticates with, masked."},"api_url":{"type":"string","title":"Api Url","description":"Base URL the integration is reached at.","default":""},"ip_address":{"type":"string","title":"Ip Address","description":"Address of the on-board equipment on the vehicle network. The Pysae Driver app reaches it there; the API only stores it.","default":""},"port":{"type":"integer","title":"Port","description":"Port the equipment is reached on.","default":0},"local_port":{"type":"integer","title":"Local Port","description":"Port the Pysae Driver app listens on for the equipment's own messages. The API stores it without acting on it.","default":0}},"type":"object","title":"MatawanIntegrationSchema","description":"Matawan ticketing system, which the driver's duty start is relayed to."},"McfIntegrationSchema":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether the group currently runs the integration.","default":true},"api_key":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Api Key","description":"Credential the integration authenticates with, masked."},"api_url":{"type":"string","title":"Api Url","description":"Base URL the integration is reached at.","default":""},"customer_id":{"type":"string","title":"Customer Id","description":"Customer account the fleet belongs to at Michelin.","default":""},"mcf_group_id":{"type":"string","title":"Mcf Group Id","description":"Michelin-side group whose devices feed this Pysae group.","default":""},"username":{"type":"string","title":"Username","description":"Account the Michelin API is called with.","default":""},"password":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Password","description":"Password of that account, masked."}},"type":"object","title":"McfIntegrationSchema","description":"Michelin Connected Fleet, which reports the position of its own devices.\n\nFeeding those positions into Pysae puts equipment on the map that no Pysae\nDriver session covers."},"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."},"MessageNotificationsConfigSchema":{"properties":{"monthly_limit":{"type":"integer","maximum":10000.0,"exclusiveMinimum":0.0,"title":"Monthly Limit","description":"Notifications the group may send over a calendar month."},"nb_sender":{"type":"integer","maximum":100.0,"exclusiveMinimum":0.0,"title":"Nb Sender","description":"Sender numbers the notifications may go out from."}},"type":"object","required":["monthly_limit","nb_sender"],"title":"MessageNotificationsConfigSchema","description":"How many traveller notifications the group may send, and from how many senders."},"MessageNotificationsFeatureConfig":{"properties":{"monthly_limit":{"type":"integer","title":"Monthly Limit","description":"Notifications the group may send over a calendar month.","default":250},"nb_sender":{"type":"integer","title":"Nb Sender","description":"Sender numbers the notifications may go out from.","default":1}},"type":"object","title":"MessageNotificationsFeatureConfig","description":"How many traveller notifications the group may send, and from how many senders."},"MessageNotificationsIntegrationSchema":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether the group currently runs the integration.","default":true},"api_key":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Api Key","description":"Credential the integration authenticates with, masked."},"api_url":{"type":"string","title":"Api Url","description":"Base URL the integration is reached at.","default":""},"phone_numbers":{"items":{"type":"string"},"type":"array","title":"Phone Numbers","description":"Numbers the alerts are sent to. An empty list silences the integration, whichever alert is enabled below."},"urgency_enabled":{"type":"boolean","title":"Urgency Enabled","description":"Whether a driver-raised urgency triggers an SMS.","default":false},"long_duties_enabled":{"type":"boolean","title":"Long Duties Enabled","description":"Whether a duty running past the threshold triggers an SMS.","default":false},"long_duties_threshold":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Long Duties Threshold","description":"Duty length in minutes past which the alert fires. Null, or zero, fires none."}},"type":"object","title":"MessageNotificationsIntegrationSchema","description":"SMS alerting, which relays urgent operational events to a phone list."},"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."},"MinDriverVersionSchema":{"properties":{"min_driver_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Min Driver Version","description":"Minimum driver app version required for this group. Devices with a version below this will be blocked (HTTP 426)."}},"type":"object","title":"MinDriverVersionSchema","description":"Floor the group sets on the Pysae Driver app version."},"MissingRecaptcha":{"properties":{"code":{"type":"string","const":"MISSING_RECAPTCHA","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"Missing recaptcha response","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/MissingRecaptchaPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"MissingRecaptcha","description":"Missing recaptcha response"},"MissingRecaptchaPayload":{"properties":{},"type":"object","title":"MissingRecaptchaPayload","description":"Context of the MissingRecaptcha error: the values identifying the entities involved in this specific occurrence."},"MongoSet_Feature_":{"items":{"$ref":"#/components/schemas/Feature"},"type":"array","uniqueItems":true,"description":"Set of distinct values, carried as an array of unique items."},"NamespaceStatsSchema":{"properties":{"namespace":{"type":"string","title":"Namespace","description":"Key prefix the namespace groups its entries under."},"key_count":{"type":"integer","title":"Key Count","description":"Keys currently held in the namespace."},"avg_ttl_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Ttl Seconds","description":"Mean remaining lifetime in seconds, averaged over a sample and counting only the keys that carry an expiry. Null when none of them does."},"estimated_memory_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimated Memory Bytes","description":"Memory the namespace takes, in bytes. Extrapolated from the mean size of a sample times the key count, not measured over every key. Null when the sample yields nothing."}},"type":"object","required":["namespace","key_count","avg_ttl_seconds","estimated_memory_bytes"],"title":"NamespaceStatsSchema","description":"What one namespace of the Redis cache currently holds."},"NoActiveDeviceSchema":{"properties":{"ts":{"type":"null","title":"Ts","description":"Always null: no peak was reached."},"max_allowed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Allowed","description":"Vehicles the group's subscription covers, null when uncapped."},"concurrent_duties":{"type":"integer","const":0,"title":"Concurrent Duties","description":"Always zero: no duty ran.","default":0}},"type":"object","title":"NoActiveDeviceSchema","description":"Stands in for the daily peak when the group ran no duty at all."},"NoPublishedGtfs":{"properties":{"code":{"type":"string","const":"NO_PUBLISHED_GTFS","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The group does not currently have a gtfs published","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/NoPublishedGtfsPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"NoPublishedGtfs","description":"The group does not currently have a gtfs published"},"NoPublishedGtfsPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group running on no GTFS."}},"type":"object","required":["group_id"],"title":"NoPublishedGtfsPayload","description":"Context of the NoPublishedGtfs error: the values identifying the entities involved in this specific occurrence."},"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."},"NocratesAddress":{"properties":{"address_id":{"type":"integer","title":"Address Id","description":"Identifier of the address in Nocrates."},"street_number":{"type":"integer","title":"Street Number","description":"Number in the street."},"street_suffix":{"type":"string","title":"Street Suffix","description":"Qualifier on that number, such as bis or ter."},"street_name":{"type":"string","title":"Street Name","description":"Name of the street."},"zip_code":{"type":"string","title":"Zip Code","description":"Postal code of the town."},"town":{"type":"string","title":"Town","description":"Town the address is in."},"location_label":{"type":"string","title":"Location Label","description":"Name the place is known by, when it has one."},"longitude":{"type":"number","title":"Longitude","description":"Longitude of the address."},"latitude":{"type":"number","title":"Latitude","description":"Latitude of the address."}},"type":"object","required":["address_id","street_number","street_suffix","street_name","zip_code","town","location_label","longitude","latitude"],"title":"NocratesAddress","description":"Where a booked ride is picked up or dropped off."},"NocratesIntegrationSchema":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether the group currently runs the integration.","default":true},"api_key":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Api Key","description":"Credential the integration authenticates with, masked."},"api_url":{"type":"string","title":"Api Url","description":"Base URL the integration is reached at.","default":""},"client_id":{"type":"string","title":"Client Id","description":"OAuth client the token request identifies as.","default":""},"client_secret":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Client Secret","description":"Secret of that client, masked."},"token_url":{"type":"string","title":"Token Url","description":"Endpoint the access token is obtained from.","default":""},"poll_days":{"type":"integer","title":"Poll Days","description":"Days of rides fetched at each poll, counting from the current day in the group's time zone. Anything below 1 polls the current day alone.","default":1}},"type":"object","title":"NocratesIntegrationSchema","description":"Nocrates, the demand-responsive transport system rides are booked in.\n\nPysae polls it for the rides to come and pushes them to the drivers."},"NocratesPassenger":{"properties":{"person_id":{"type":"integer","title":"Person Id","description":"Identifier of the passenger in Nocrates."},"last_name":{"type":"string","title":"Last Name","description":"Family name of the passenger."},"first_name":{"type":"string","title":"First Name","description":"Given name of the passenger."}},"type":"object","required":["person_id","last_name","first_name"],"title":"NocratesPassenger","description":"Person a booked ride was reserved for."},"NocratesRideSchema":{"properties":{"ride_id":{"type":"integer","title":"Ride Id","description":"Identifier of the ride in Nocrates."},"booking_id":{"type":"integer","title":"Booking Id","description":"Identifier of the booking the ride was created from."},"date":{"type":"string","format":"date-time","title":"Date","description":"Day the ride is to be served."},"contract":{"type":"string","title":"Contract","description":"Commercial contract the ride is run under."},"pickup_time":{"$ref":"#/components/schemas/NocratesTimeWindow","description":"When the passenger is to be collected."},"drop_off_time":{"$ref":"#/components/schemas/NocratesTimeWindow","description":"When the passenger is to be set down."},"pickup_address":{"$ref":"#/components/schemas/NocratesAddress","description":"Where the passenger is to be collected."},"drop_off_address":{"$ref":"#/components/schemas/NocratesAddress","description":"Where the passenger is to be set down."},"passenger":{"$ref":"#/components/schemas/NocratesPassenger","description":"Who booked the ride."},"deep_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deep Link","description":"Link opening the ride in Nocrates itself. Null for now: the form of that link is not settled, and the field is in the contract ahead of it."}},"type":"object","required":["ride_id","booking_id","date","contract","pickup_time","drop_off_time","pickup_address","drop_off_address","passenger"],"title":"NocratesRideSchema","description":"A demand-responsive ride booked in Nocrates, as the driver receives it."},"NocratesTimeWindow":{"properties":{"window_start":{"type":"string","title":"Window Start","description":"Earliest time the ride may be served at, as `HH:MM:SS`."},"window_end":{"type":"string","title":"Window End","description":"Latest time the ride may be served at, as `HH:MM:SS`."},"duration":{"type":"string","title":"Duration","description":"Time the leg is expected to take, as `HH:MM:SS`."}},"type":"object","required":["window_start","window_end","duration"],"title":"NocratesTimeWindow","description":"Span a booked ride is to be served in, rather than a fixed time."},"OnDemandMeasuresSchema":{"properties":{"km":{"type":"number","title":"Km","description":"Kilometres driven in on-demand service"},"boarding":{"type":"integer","title":"Boarding","description":"Passengers boarded"},"alighting":{"type":"integer","title":"Alighting","description":"Passengers alighted"},"total_boarding":{"type":"integer","title":"Total Boarding","description":"Passengers boarded, including the custom categories"}},"type":"object","required":["km","boarding","alighting","total_boarding"],"title":"OnDemandMeasuresSchema","description":"The two measures, over a day or over the whole period."},"OnDemandRouteArchived":{"properties":{"code":{"type":"string","const":"ON_DEMAND_ROUTE_ARCHIVED","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"An archived on-demand route can only be restored. It cannot be edited nor duplicated.","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/OnDemandRouteArchivedPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"OnDemandRouteArchived","description":"An archived on-demand route can only be restored. It cannot be edited nor duplicated."},"OnDemandRouteArchivedPayload":{"properties":{"route_id":{"type":"string","title":"Route Id","description":"Route that is archived."}},"type":"object","required":["route_id"],"title":"OnDemandRouteArchivedPayload","description":"Context of the OnDemandRouteArchived error: the values identifying the entities involved in this specific occurrence."},"OnDemandRouteDuplicateStop":{"properties":{"code":{"type":"string","const":"ON_DEMAND_ROUTE_DUPLICATE_STOP","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The same stop_id was submitted twice. Two stops sharing an identity would make the passages and the counts recorded against them indistinguishable, with no way to tell them apart afterwards. Omit the stop_id of the stop being added.","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/OnDemandRouteDuplicateStopPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"OnDemandRouteDuplicateStop","description":"The same stop_id was submitted twice. Two stops sharing an identity would make the passages and the counts recorded against them indistinguishable, with no way to tell them apart afterwards. Omit the stop_id of the stop being added."},"OnDemandRouteDuplicateStopPayload":{"properties":{"route_id":{"type":"string","title":"Route Id","description":"Route the stops were submitted on."},"stop_id":{"type":"string","title":"Stop Id","description":"Identifier submitted more than once."}},"type":"object","required":["route_id","stop_id"],"title":"OnDemandRouteDuplicateStopPayload","description":"Context of the OnDemandRouteDuplicateStop error: the values identifying the entities involved in this specific occurrence."},"OnDemandRouteInvalidPeriod":{"properties":{"code":{"type":"string","const":"ON_DEMAND_ROUTE_INVALID_PERIOD","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The validity period ends before it starts","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/OnDemandRouteInvalidPeriodPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"OnDemandRouteInvalidPeriod","description":"The validity period ends before it starts"},"OnDemandRouteInvalidPeriodPayload":{"properties":{"valid_from":{"type":"string","title":"Valid From","description":"First day submitted."},"valid_until":{"type":"string","title":"Valid Until","description":"Last day submitted, which falls before the first."}},"type":"object","required":["valid_from","valid_until"],"title":"OnDemandRouteInvalidPeriodPayload","description":"Context of the OnDemandRouteInvalidPeriod error: the values identifying the entities involved in this specific occurrence."},"OnDemandRouteNotArchived":{"properties":{"code":{"type":"string","const":"ON_DEMAND_ROUTE_NOT_ARCHIVED","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"This on-demand route is not archived, nothing to restore","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/OnDemandRouteNotArchivedPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"OnDemandRouteNotArchived","description":"This on-demand route is not archived, nothing to restore"},"OnDemandRouteNotArchivedPayload":{"properties":{"route_id":{"type":"string","title":"Route Id","description":"Route the restore was asked for."},"status":{"type":"string","title":"Status","description":"Status it is actually in."}},"type":"object","required":["route_id","status"],"title":"OnDemandRouteNotArchivedPayload","description":"Context of the OnDemandRouteNotArchived 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."},"OnDemandRoutePayloadSchema":{"properties":{"route_short_name":{"type":"string","maxLength":8,"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 `#`.","examples":["01af9c","Ab8C62"]},"route_text_color":{"type":"string","title":"Route Text Color","description":"Colour of the text on that badge, six hex digits without `#`.","default":"000000","examples":["01af9c","Ab8C62"]},"status":{"$ref":"#/components/schemas/OnDemandRouteStatusSchema","description":"Whether the route runs, is paused, or is retired."},"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/OnDemandRouteStopPayloadSchema"},"type":"array","minItems":1,"title":"Stops","description":"Every stop of the route, in the order they are served. The list replaces the one in place, so a stop left out is removed."}},"type":"object","required":["route_short_name","route_long_name","route_color","status","valid_from","valid_until","stops"],"title":"OnDemandRoutePayloadSchema","description":"Body of both the creation and the full update.\n\nRoute fields are spelled as in the GTFS — ``route_short_name`` for the\nbadge, ``route_long_name`` for the full name — so a client can render an\non-demand route with the components it already uses for a regular line.\n\nColours follow the GTFS form too: six hex digits, **no leading ``#``**.\nThat is what every other colour on this API carries\n(``pysae.common.types.color``), and mixing the two forms is exactly what\nwould force a shared component back into a TAD special case.\n\nDates travel as ISO ``YYYY-MM-DD``, the usual wire form; the GTFS\n``YYYYMMDD`` spelling is a storage detail and never surfaces here."},"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."},"OnDemandRouteSchema":{"properties":{"route_id":{"type":"string","title":"Route Id","description":"Identifier the route is addressed by."},"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/OnDemandRouteStatusSchema","description":"Whether the route runs, is paused, or is retired."},"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/OnDemandRouteStopSchema"},"type":"array","title":"Stops","description":"Every stop of the route, in the order they are served."},"stop_count":{"type":"integer","title":"Stop Count","description":"Number of stops, so a listing does not have to count them"}},"type":"object","required":["route_id","route_short_name","route_long_name","route_color","route_text_color","status","valid_from","valid_until","stops","stop_count"],"title":"OnDemandRouteSchema","description":"An on-demand route as stored, with its stops."},"OnDemandRouteStatusSchema":{"type":"string","enum":["active","inactive","archived"],"title":"OnDemandRouteStatusSchema","description":"Wire form of the status.\n\nDeclared here rather than reused from the domain: the API contract is free\nto evolve apart from the domain, which is the whole point of the schema\nlayer. The values must stay aligned — a repository test pins the same\nproperty between the domain and the DAL."},"OnDemandRouteStopPayloadSchema":{"properties":{"stop_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stop Id","description":"Omit for a new stop. Send the existing value back to keep a stop, including when renaming or moving it."},"stop_name":{"type":"string","title":"Stop Name","description":"Name of the stop, as shown to the driver."},"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_name","stop_lat","stop_lon"],"title":"OnDemandRouteStopPayloadSchema","description":"A stop as submitted by a client.\n\nOmit ``stop_id`` to add a stop. Send it back untouched to keep an existing\none: it is what the recorded passages and passenger counts point at, so a\nstop whose id changes loses its history. An id the route does not hold is\nrefused."},"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."},"OnDemandRouteStopSchema":{"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."},"stop_name":{"type":"string","title":"Stop Name","description":"Name of the stop, as shown to the driver."},"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":"OnDemandRouteStopSchema","description":"A stop of a persisted route.\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."},"OnDemandRouteUnknownStop":{"properties":{"code":{"type":"string","const":"ON_DEMAND_ROUTE_UNKNOWN_STOP","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"A submitted stop_id does not belong to this route. Omit it to add a stop; a stop_id may never be chosen by the client, or the passages and counts recorded against another stop would be captured. It is the stop id owned by the route, never a stop_id of the GTFS feed.","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/OnDemandRouteUnknownStopPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"OnDemandRouteUnknownStop","description":"A submitted stop_id does not belong to this route. Omit it to add a stop; a stop_id may never be chosen by the client, or the passages and counts recorded against another stop would be captured. It is the stop id owned by the route, never a stop_id of the GTFS feed."},"OnDemandRouteUnknownStopPayload":{"properties":{"route_id":{"type":"string","title":"Route Id","description":"Route the stop was submitted on."},"stop_id":{"type":"string","title":"Stop Id","description":"Identifier the route does not hold."}},"type":"object","required":["route_id","stop_id"],"title":"OnDemandRouteUnknownStopPayload","description":"Context of the OnDemandRouteUnknownStop error: the values identifying the entities involved in this specific occurrence."},"OnDemandRouteWithoutStop":{"properties":{"code":{"type":"string","const":"ON_DEMAND_ROUTE_WITHOUT_STOP","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"An on-demand route needs at least one stop","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/OnDemandRouteWithoutStopPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"OnDemandRouteWithoutStop","description":"An on-demand route needs at least one stop"},"OnDemandRouteWithoutStopPayload":{"properties":{},"type":"object","title":"OnDemandRouteWithoutStopPayload","description":"Context of the OnDemandRouteWithoutStop error: the values identifying the entities involved in this specific occurrence."},"OnDemandServiceSchema":{"properties":{"id":{"type":"string","title":"Id","description":"Identifier of the service run"},"route_id":{"type":"string","title":"Route Id","description":"Identifier of the on-demand route served"},"route_short_name":{"type":"string","title":"Route Short Name","description":"Short name of the route, for a badge"},"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 route badge, six hex digits, no `#`"},"route_text_color":{"type":"string","title":"Route Text Color","description":"Text colour of the route badge, six hex digits, no `#`"},"device_id":{"type":"string","title":"Device Id","description":"Identifier of the device that ran the service"},"driver_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Driver Id","description":"Identifier of the driver on duty at the start"},"vehicle_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vehicle Id","description":"Identifier of the vehicle assigned at the start"},"started_at":{"type":"string","format":"date-time","title":"Started At","description":"When the driver started the service"},"ended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ended At","description":"When the service ended; null while it runs"},"boarding":{"type":"integer","title":"Boarding","description":"Passengers boarded during the run"},"alighting":{"type":"integer","title":"Alighting","description":"Passengers alighted during the run"},"total_boarding":{"type":"integer","title":"Total Boarding","description":"Passengers boarded, including the custom categories"},"stop_passages":{"type":"integer","title":"Stop Passages","description":"Stop arrivals recorded during the run"},"km":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Km","description":"Kilometres driven during the run. Null when they are not known at that grain — a service run before the measure carried the run it belongs to. Never zero in that case: a zero means the vehicle did not move. A run that was already under way when the measure shipped carries only the part driven after it, the rest staying at the day's grain."}},"type":"object","required":["id","route_id","route_short_name","route_long_name","route_color","route_text_color","device_id","started_at","boarding","alighting","total_boarding","stop_passages"],"title":"OnDemandServiceSchema","description":"One on-demand service run, from its start to its end.\n\nThe unit is the run — a device on a route, from the start to the end — and\nnot the round trip: the module has no course, no rotation and no direction\nof travel. A device chaining two runs on the same route the same day comes\nback as two entries, never merged.\n\n``ended_at`` is null while the service runs. It also stays null on a service\nthe driver never ended, which is the regular-service behaviour: a duty\nwithout a checkout stays open too.\n\nBoth route names and both route colours travel with the run so a client can\nrender its badge without re-crossing the list of routes — which would not\nname an archived one it no longer holds.\n\nDriver and vehicle come out as identifiers: the screen resolves them through\nits own stores, as the duty list already does."},"OnDemandStatsByDaySchema":{"properties":{"km":{"type":"number","title":"Km","description":"Kilometres driven in on-demand service"},"boarding":{"type":"integer","title":"Boarding","description":"Passengers boarded"},"alighting":{"type":"integer","title":"Alighting","description":"Passengers alighted"},"total_boarding":{"type":"integer","title":"Total Boarding","description":"Passengers boarded, including the custom categories"},"date":{"type":"string","format":"date","title":"Date","description":"Day the measures belong to. Only days carrying data appear, so the series has gaps rather than zeroed entries."}},"type":"object","required":["km","boarding","alighting","total_boarding","date"],"title":"OnDemandStatsByDaySchema","description":"The measures of one day, every route of the request folded together."},"OnDemandStatsByRouteSchema":{"properties":{"km":{"type":"number","title":"Km","description":"Kilometres driven in on-demand service"},"boarding":{"type":"integer","title":"Boarding","description":"Passengers boarded"},"alighting":{"type":"integer","title":"Alighting","description":"Passengers alighted"},"total_boarding":{"type":"integer","title":"Total Boarding","description":"Passengers boarded, including the custom categories"},"route_id":{"type":"string","title":"Route Id","description":"Identifier of the on-demand route"},"route_short_name":{"type":"string","title":"Route Short Name","description":"Short name of the route, for a badge"},"route_long_name":{"type":"string","title":"Route Long Name","description":"Full name of the route"}},"type":"object","required":["km","boarding","alighting","total_boarding","route_id","route_short_name","route_long_name"],"title":"OnDemandStatsByRouteSchema","description":"The measures of one route, aggregated over the whole period.\n\nBoth names travel with the figures so a client can label an axis without\nre-crossing the list of routes — which would not name an archived one it no\nlonger holds."},"OnDemandStatsSchema":{"properties":{"total":{"$ref":"#/components/schemas/OnDemandMeasuresSchema","description":"The period as a whole, every day and every route summed."},"days":{"items":{"$ref":"#/components/schemas/OnDemandStatsByDaySchema"},"type":"array","title":"Days","description":"One entry per day carrying data, in ascending date order."},"routes":{"items":{"$ref":"#/components/schemas/OnDemandStatsByRouteSchema"},"type":"array","title":"Routes","description":"One entry per on-demand route carrying data. At most one entry when the request scopes a single route."}},"type":"object","required":["total","days","routes"],"title":"OnDemandStatsSchema","description":"Statistics of a period: in total, day by day, and route by route.\n\n``days`` and ``routes`` hold only the dates and the routes that carry data,\nso empty lists mean the period has none — an empty state to display, not an\nerror. Neither is ever padded with zeroed entries.\n\nThe sum of ``routes`` equals ``total``, exactly as the sum of ``days``\ndoes: the two series are folds of the same aggregation."},"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."},"ParagonIntegrationSchema":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether the group currently runs the integration.","default":true},"api_key":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Api Key","description":"Credential the integration authenticates with, masked."},"api_url":{"type":"string","title":"Api Url","description":"Base URL the integration is reached at.","default":""},"hosts":{"items":{"type":"string"},"type":"array","title":"Hosts","description":"Ticketing units on the vehicle network, each as `address:port`."}},"type":"object","title":"ParagonIntegrationSchema","description":"Paragon ticketing system, which the driver's duty start is relayed to."},"PartialImportIntoPopulatedDraft":{"properties":{"code":{"type":"string","const":"HASTUS_PARTIAL_IMPORT_INTO_POPULATED_DRAFT","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"A partial Hastus import (route_ids) cannot target a GTFS draft that already contains routes outside the imported scope; import into a fresh draft or run a full import","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/PartialImportIntoPopulatedDraftPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"PartialImportIntoPopulatedDraft","description":"A partial Hastus import (route_ids) cannot target a GTFS draft that already contains routes outside the imported scope; import into a fresh draft or run a full import"},"PartialImportIntoPopulatedDraftPayload":{"properties":{},"type":"object","title":"PartialImportIntoPopulatedDraftPayload","description":"Context of the PartialImportIntoPopulatedDraft error: the values identifying the entities involved in this specific occurrence."},"PassengerCountContentSchema":{"properties":{"boarding":{"type":"integer","title":"Boarding","description":"Passengers boarding under the standard category.","default":0},"alighting":{"type":"integer","title":"Alighting","description":"Passengers alighting.","default":0},"total_boarding":{"type":"integer","title":"Total Boarding","description":"Passengers boarding, every category together. Recomputed on the way in from `boarding` and the extra keys of the request, so a value sent here is overwritten.","default":0},"custom":{"additionalProperties":{"type":"integer"},"type":"object","title":"Custom","description":"Boardings per agency-defined category, keyed by category name. Filled from the extra keys of the request; entries passed here directly are kept as they are and do not feed `total_boarding`.","default":{}}},"type":"object","title":"PassengerCountContentSchema","description":"The figures counted at one stop, as the counting system reports them.\n\nAgency-defined categories are sent as extra keys alongside the standard\nones; on the way in they are moved into `custom` and added to\n`total_boarding`."},"PassengerCountCreateSchema":{"properties":{"trip":{"$ref":"#/components/schemas/GtfsDatedTrip","description":"Run the count is attached to. The stop's own metadata — name, coordinates, code — is resolved server-side from this run and `stop_sequence`, never sent."},"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, and is rejected when no deviation of that run declares it."},"passenger_count":{"$ref":"#/components/schemas/PassengerCountContentSchema","description":"What was counted at that stop."},"vehicle_load":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Vehicle Load","description":"Passengers on board once the stop is served, when the device knows the figure. Left out, the API derives it from the counts — boardings minus alightings on the first count of the run, then adjusted by that same difference at each following one."}},"type":"object","required":["trip","stop_sequence","passenger_count"],"title":"PassengerCountCreateSchema","description":"A count taken by the driver app at one stop of the run in progress.\n\nThe device is read from the path, so the body only carries the run, where\nalong it the count was taken, and the figures."},"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."},"PasswordChangeAuthSchema":{"properties":{"new":{"type":"string","title":"New","description":"New password of the account."},"old":{"type":"string","title":"Old","description":"Current password of the account."}},"type":"object","required":["new","old"],"title":"PasswordChangeAuthSchema","description":"Password change authenticated by the current password of the account."},"PasswordChangeByTokenSchema":{"properties":{"new":{"type":"string","title":"New","description":"New password of the account."},"token":{"type":"string","title":"Token","description":"Reset token issued for the account. It is single-use and expires."}},"type":"object","required":["new","token"],"title":"PasswordChangeByTokenSchema","description":"Password change authenticated by a reset token, for a user signed out."},"PasswordResetUnavailable":{"properties":{"code":{"type":"string","const":"PASSWORD_RESET_UNAVAILABLE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"This account holds no local password and no pending invitation, so no reset link can be issued for it","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/PasswordResetUnavailablePayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"PasswordResetUnavailable","description":"This account holds no local password and no pending invitation, so no reset link can be issued for it"},"PasswordResetUnavailablePayload":{"properties":{"user_id":{"type":"string","title":"User Id","description":"Identifier of the account no reset link was issued for."}},"type":"object","required":["user_id"],"title":"PasswordResetUnavailablePayload","description":"Context of the PasswordResetUnavailable error: the values identifying the entities involved in this specific occurrence."},"PlanningImportSchema":{"properties":{"id":{"type":"string","title":"Id","description":"Identifier of the history entry."},"ts":{"type":"string","title":"Ts","description":"When the attempt was recorded, in UTC.","examples":["2020-11-22T11:12:13"]},"filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filename","description":"Name the caller declared for the imported file through the ``filename`` query parameter. Null when it declared none."},"format":{"$ref":"#/components/schemas/ImportFormat","description":"Format this attempt was submitted in."},"status":{"$ref":"#/components/schemas/PlanningImportStatus","description":"Whether the attempt was stored or refused."},"date_range_start":{"anyOf":[{"type":"string","examples":["20201122"]},{"type":"null"}],"title":"Date Range Start","description":"Earliest service date the imported lines cover. Only set on a successful attempt."},"date_range_end":{"anyOf":[{"type":"string","examples":["20201122"]},{"type":"null"}],"title":"Date Range End","description":"Latest service date the imported lines cover. Only set on a successful attempt."},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"What the import failed on, truncated past 8000 characters with a ``… [truncated]`` marker appended. Only set on a failed attempt."}},"type":"object","required":["id","ts","format","status"],"title":"PlanningImportSchema","description":"One attempt at importing a planning, kept as history."},"PlanningImportStatus":{"type":"string","enum":["success","error"],"title":"PlanningImportStatus","description":"Whether a planning import attempt went through.\n\nAn ``error`` entry carries its cause and covers no date range."},"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."},"QipIntegrationSchema":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether the group currently runs the integration.","default":true},"api_key":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Api Key","description":"Credential the integration authenticates with, masked."},"api_url":{"type":"string","title":"Api Url","description":"Base URL the integration is reached at.","default":""},"hosts":{"items":{"type":"string"},"type":"array","title":"Hosts","description":"Addresses of the counting units on the vehicle network."},"protocol":{"type":"string","title":"Protocol","description":"Protocol the units speak: qip or ibis-ip.","default":""},"door_detection":{"type":"boolean","title":"Door Detection","description":"Whether the units report door openings.","default":false}},"type":"object","title":"QipIntegrationSchema","description":"IRIS passenger counting, which the vehicle occupancy is read from."},"QrCodeSchema":{"properties":{"content":{"type":"string","minLength":1,"contentMediaType":"application/octet-stream","title":"Content","description":"Payload encoded into the QR code."},"filename":{"type":"string","minLength":1,"title":"Filename","description":"Name of the PNG the code is returned as, without its extension. Must be unique across the request, the codes coming back in a single archive."},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label","description":"Text drawn under the code, the image widened for it when needed. Left out, the code is returned bare."}},"type":"object","required":["content","filename"],"title":"QrCodeSchema","description":"A QR code to render, and the PNG file it comes back as."},"QuotaDevicesReached":{"properties":{"code":{"type":"string","const":"QUOTA_DEVICES_REACHED","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"There are too many devices registered","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/QuotaDevicesReachedPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"QuotaDevicesReached","description":"There are too many devices registered"},"QuotaDevicesReachedPayload":{"properties":{},"type":"object","title":"QuotaDevicesReachedPayload","description":"Context of the QuotaDevicesReached error: the values identifying the entities involved in this specific occurrence."},"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."},"RailDataIntegrationSchema":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether the group currently runs the integration.","default":true},"api_key":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Api Key","description":"Credential the integration authenticates with, masked."},"api_url":{"type":"string","title":"Api Url","description":"Base URL the integration is reached at.","default":""},"dataset_url":{"type":"string","title":"Dataset Url","description":"GTFS source of the overlay: a transport.data.gouv.fr dataset (page or API URL) or a direct GTFS zip URL — https only","default":""},"gtfs_rt_trip_updates_url":{"type":"string","title":"Gtfs Rt Trip Updates Url","description":"Optional GTFS-RT TripUpdates feed URL of the source (https only)","default":""},"gtfs_rt_service_alerts_url":{"type":"string","title":"Gtfs Rt Service Alerts Url","description":"Optional GTFS-RT ServiceAlerts feed URL of the source (https only)","default":""}},"type":"object","title":"RailDataIntegrationSchema","description":"Rail source whose timetables feed the next-departure display of connecting trains.\n\nDeclaring it adds the group's own feed on top of the national baseline; the\ndepartures shown are filtered on the UIC codes attached to the group."},"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."},"RailStationLinkNotFound":{"properties":{"code":{"type":"string","const":"RAIL_STATION_LINK_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"No link attaches this stop to this rail station","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/RailStationLinkNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RailStationLinkNotFound","description":"No link attaches this stop to this rail station"},"RailStationLinkNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Group the link was looked up in."},"stop_id":{"type":"string","title":"Stop Id","description":"Stop the link was expected on."},"uic":{"type":"string","title":"Uic","description":"Rail station the stop was expected to attach to."}},"type":"object","required":["group_id","stop_id","uic"],"title":"RailStationLinkNotFoundPayload","description":"Context of the RailStationLinkNotFound error: the values identifying the entities involved in this specific occurrence."},"RailStationLinkPutSchema":{"properties":{"stop_id":{"type":"string","title":"Stop Id","description":"Identifier of the stop in your network's GTFS (`stops.txt`). Not validated against the currently published GTFS: a link whose stop is unknown is accepted and flagged as orphan when listed."},"uic":{"type":"string","title":"Uic","description":"UIC code of the rail station to attach the stop to, e.g. `87597005`. Must belong to the rail-station referential."},"stop_name":{"type":"string","title":"Stop Name","description":"Display name of the stop, snapshotted on the link for UI purposes. Refreshed on every re-submission of the same link."}},"type":"object","required":["stop_id","uic","stop_name"],"title":"RailStationLinkPutSchema","description":"Attachment of one of the group's stops to a rail station.\n\nSubmitting the same stop again replaces the link rather than adding one."},"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."},"RatingCreateSchema":{"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."}},"type":"object","required":["driver_version","rating","comment","driver_id"],"title":"RatingCreateSchema","description":"Rating a driver gives the Pysae Driver app, from the app itself."},"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."},"ReportsConfigSchema-Input":{"properties":{"categories":{"$ref":"#/components/schemas/CategoriesSchema","description":"Delay intervals the punctuality reports are built on."}},"type":"object","required":["categories"],"title":"ReportsConfigSchema","description":"How the group's punctuality reports are computed."},"ReportsConfigSchema-Output":{"properties":{"categories":{"$ref":"#/components/schemas/CategoriesSchema","description":"Delay intervals the punctuality reports are built on."}},"type":"object","required":["categories"],"title":"ReportsConfigSchema","description":"How the group's punctuality reports are computed."},"ResetUrlNotConfigured":{"properties":{"code":{"type":"string","const":"RESET_URL_NOT_CONFIGURED","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"No reset_url was supplied and PASSWORD_RESET_FALLBACK_URL is unset or not on an allowed domain","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/ResetUrlNotConfiguredPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"ResetUrlNotConfigured","description":"No reset_url was supplied and PASSWORD_RESET_FALLBACK_URL is unset or not on an allowed domain"},"ResetUrlNotConfiguredPayload":{"properties":{},"type":"object","title":"ResetUrlNotConfiguredPayload","description":"Context of the ResetUrlNotConfigured error: the values identifying the entities involved in this specific occurrence."},"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."},"RoleNotFound":{"properties":{"code":{"type":"string","const":"ROLE_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The role 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/RoleNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"RoleNotFound","description":"The role has not been found"},"RoleNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group the role was looked up on."},"user_id":{"type":"string","title":"User Id","description":"Identifier of the user holding no role on the group."}},"type":"object","required":["group_id","user_id"],"title":"RoleNotFoundPayload","description":"Context of the RoleNotFound error: the values identifying the entities involved in this specific occurrence."},"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."},"RoleUpdateSchema":{"properties":{"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":"RoleUpdateSchema","description":"New access level of a user on the group. It replaces the current one."},"RootConfigSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the network the group operates.","default":""},"driver_trip_format":{"type":"string","title":"Driver Trip Format","description":"Pattern naming a trip on the devices. `%dt` theoretical departure, `%th` headsign, `%tn` trip short name, `%rsn` route short name, `%rln` route long name, `%fs` first stop, `%ls` last stop, `%bl` block id.","default":"%dt-%th"},"driver_ontime_interval":{"items":{"type":"integer"},"type":"array","title":"Driver Ontime Interval","description":"Delay window in seconds, as `[start, end]`, the Pysae Driver app shows the driver as on time in.","default":[0,300]},"delay_device_online":{"type":"integer","title":"Delay Device Online","description":"Seconds without an exchange with a device running the Pysae Driver app, past which it counts as offline.","default":120},"delay_device_offline_visible":{"type":"integer","title":"Delay Device Offline Visible","description":"Seconds without an exchange with a device running the Pysae Driver app, past which its vehicle leaves the map.","default":300},"delay_device_online_router":{"type":"integer","title":"Delay Device Online Router","description":"Seconds without an exchange with an on-board router, past which it counts as offline.","default":120},"delay_device_offline_visible_router":{"type":"integer","title":"Delay Device Offline Visible Router","description":"Seconds without an exchange with an on-board router, past which its vehicle leaves the map.","default":300},"delay_device_online_telematic":{"type":"integer","title":"Delay Device Online Telematic","description":"Seconds without an exchange with an on-board telematics unit, past which it counts as offline.","default":120},"delay_device_offline_visible_telematic":{"type":"integer","title":"Delay Device Offline Visible Telematic","description":"Seconds without an exchange with an on-board telematics unit, past which its vehicle leaves the map.","default":300},"notifications":{"type":"boolean","title":"Notifications","description":"Notifications toggle the API stores without acting on it.","default":true},"retention_period":{"type":"integer","title":"Retention Period","description":"Months of history the group keeps: the cutoff the driver anonymisation endpoint applies.","default":36},"keep_old_shapes":{"type":"boolean","title":"Keep Old Shapes","description":"Whether a GTFS published without shapes inherits those of the previous one instead of losing its itineraries.","default":false}},"type":"object","title":"RootConfigSchema","description":"Settings of the group that belong to no narrower section."},"RouteGTFSSchema-Input":{"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":"integer","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``."},"RouteGTFSSchema-Output":{"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."},"RouterConfig":{"properties":{"login":{"type":"string","title":"Login","description":"Login of the on-board router."},"password":{"type":"string","title":"Password","description":"Password of the on-board router."}},"type":"object","required":["login","password"],"title":"RouterConfig","description":"Credentials of the on-board router. Superseded by the integrations."},"RouterConfigSchema":{"properties":{"login":{"type":"string","title":"Login","description":"Login of the on-board router."},"password":{"type":"string","title":"Password","description":"Password of the on-board router."}},"type":"object","required":["login","password"],"title":"RouterConfigSchema","description":"Credentials of the on-board router. Superseded by the integrations."},"RoutesConfigSchema":{"properties":{"private_routes":{"items":{"type":"string"},"type":"array","title":"Private Routes","description":"Routes kept out of the traveller-facing feeds and displays, while staying visible to the operator.","default":[]},"deactivated_routes":{"items":{"type":"string"},"type":"array","title":"Deactivated Routes","description":"Routes left out of the punctuality and kilometre reports.","default":[]},"frequency_routes":{"items":{"type":"string"},"type":"array","title":"Frequency Routes","description":"Routes run at a frequency: their trips are followed by headway rather than by timetable.","default":[]}},"type":"object","title":"RoutesConfigSchema","description":"Routes the group singles out for a particular treatment."},"RumConfigurationSchema":{"properties":{"sessionSampleRate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Sessionsamplerate","description":"Share of sessions reported, on the 0 to 100 scale the monitoring SDK expects. The API stores it without bounding it."},"sessionReplaySampleRate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Sessionreplaysamplerate","description":"Share of the reported sessions also recorded for replay, on the same scale."}},"type":"object","title":"RumConfigurationSchema","description":"How much real-user monitoring the Pysae applications send.\n\nBoth rates default to zero, so a group that never set one is not monitored\nat all."},"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."},"SeipraIntegrationSchema":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether the group currently runs the integration.","default":true},"api_key":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Api Key","description":"Credential the integration authenticates with, masked."},"api_url":{"type":"string","title":"Api Url","description":"Base URL the integration is reached at.","default":""},"ip_address":{"type":"string","title":"Ip Address","description":"Address of the on-board equipment on the vehicle network. The Pysae Driver app reaches it there; the API only stores it.","default":""},"port":{"type":"integer","title":"Port","description":"Port the equipment is reached on.","default":0}},"type":"object","title":"SeipraIntegrationSchema","description":"Seipra passenger information display, driven over the vehicle network."},"SelectGroupSchema":{"properties":{"_id":{"type":"string","title":"Id","description":"Identifier of the group."},"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group, same as `_id`."},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Colour the Pysae applications theme the group with."},"name":{"type":"string","title":"Name","description":"Name of the network the group operates."}},"type":"object","required":["_id","group_id","name"],"title":"SelectGroupSchema","description":"Just enough of a group to offer it in a group picker."},"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."},"SessionCountSchemaV4":{"properties":{"date":{"type":"string","title":"Date","description":"Day the sessions were counted on, as `YYYYMMDD` in the group's timezone."},"count":{"type":"integer","exclusiveMinimum":0.0,"title":"Count","description":"Number of sessions opened that day."},"app":{"$ref":"#/components/schemas/App","description":"Public application the sessions were on."}},"type":"object","required":["date","count","app"],"title":"SessionCountSchemaV4","description":"Sessions opened on one public application over one day."},"Severity":{"type":"string","enum":["Fatal","Error","Warning","Information"],"title":"Severity","description":"Represents the severity of an Issue."},"SftpIntegrationNotConfiguredException":{"properties":{"code":{"type":"string","const":"SFTP_INTEGRATION_NOT_CONFIGURED","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The group does not have a valid SFTP integration configured.","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/SftpIntegrationNotConfiguredExceptionPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"SftpIntegrationNotConfiguredException","description":"The group does not have a valid SFTP integration configured."},"SftpIntegrationNotConfiguredExceptionPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group holding no SFTP integration."}},"type":"object","required":["group_id"],"title":"SftpIntegrationNotConfiguredExceptionPayload","description":"Context of the SftpIntegrationNotConfiguredException error: the values identifying the entities involved in this specific occurrence."},"SftpIntegrationSchema":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether the group currently runs the integration.","default":true},"api_key":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Api Key","description":"Credential the integration authenticates with, masked."},"api_url":{"type":"string","title":"Api Url","description":"Base URL the integration is reached at.","default":""},"host":{"type":"string","title":"Host","description":"Host the files are uploaded to.","default":""},"port":{"type":"integer","title":"Port","description":"SSH port of that host.","default":22},"username":{"type":"string","title":"Username","description":"Account the upload authenticates as.","default":""},"password":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Password","description":"Password of that account, masked."},"dest_dir":{"type":"string","title":"Dest Dir","description":"Remote directory the files land in. Left empty, they are written at the server's root path.","default":""}},"type":"object","title":"SftpIntegrationSchema","description":"SFTP host the group's exports are delivered to."},"SftpSendFailedException":{"properties":{"code":{"type":"string","const":"SFTP_SEND_FAILED","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The SFTP upload to the remote host failed.","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/SftpSendFailedExceptionPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"SftpSendFailedException","description":"The SFTP upload to the remote host failed."},"SftpSendFailedExceptionPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group the export was sent for."},"reason":{"type":"string","title":"Reason","description":"What the remote host refused the upload with."}},"type":"object","required":["group_id","reason"],"title":"SftpSendFailedExceptionPayload","description":"Context of the SftpSendFailedException error: the values identifying the entities involved in this specific occurrence."},"ShapeDistTraveledSchema":{"properties":{"nb_trips_updated":{"type":"integer","title":"Nb Trips Updated","description":"Trips whose distances were recomputed."},"nb_stop_times_updated":{"type":"integer","title":"Nb Stop Times Updated","description":"Stop times that got a distance along the shape."}},"type":"object","required":["nb_trips_updated","nb_stop_times_updated"],"title":"ShapeDistTraveledSchema","description":"What computing the distance travelled along the itineraries rewrote."},"ShapeGTFSCreateSchema":{"properties":{"coordinates":{"items":{"items":{"type":"number"},"type":"array"},"type":"array","title":"Coordinates","description":"Points of the line, in order, each as `[longitude, latitude]`."},"shape_id":{"type":"string","title":"Shape Id","description":"Identifier trips reference the itinerary by."}},"type":"object","required":["coordinates","shape_id"],"title":"ShapeGTFSCreateSchema","description":"Itinerary added to a GTFS, given by the line its vehicles follow.\n\nIt is created attached to no route."},"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."},"ShapeGTFSUpsertSchema":{"properties":{"coordinates":{"items":{"items":{"type":"number"},"type":"array"},"type":"array","title":"Coordinates","description":"Points of the line, in order, each as `[longitude, latitude]`."}},"type":"object","required":["coordinates"],"title":"ShapeGTFSUpsertSchema","description":"New line for an itinerary, replacing whatever it held.\n\nThe itinerary keeps the routes it was already attached to; only its\ngeometry changes."},"Silv1IntegrationSchema":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether the group currently runs the integration.","default":true},"api_key":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Api Key","description":"Credential the integration authenticates with, masked."},"api_url":{"type":"string","title":"Api Url","description":"Base URL the integration is reached at.","default":""},"ip_address":{"type":"string","title":"Ip Address","description":"Address of the on-board equipment on the vehicle network. The Pysae Driver app reaches it there; the API only stores it.","default":""},"port":{"type":"integer","title":"Port","description":"Port the equipment is reached on.","default":0}},"type":"object","title":"Silv1IntegrationSchema","description":"SILV1 passenger information display, driven over the vehicle network."},"SimulationCreateSchema":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Name of the simulation, for the operator to recognise it."},"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 simulation plays. Left out, it runs on the group's current one."},"permanent":{"type":"boolean","title":"Permanent","description":"Whether the simulation is restarted when it stops.","default":false},"options":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Options","description":"Extra arguments appended to the simulator command line, on top of the group and the session the API supplies."}},"type":"object","title":"SimulationCreateSchema","description":"A simulated run of the network, driving devices as a real service would."},"SimulationNotFound":{"properties":{"code":{"type":"string","const":"SIMULATION_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The simulation 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/SimulationNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"SimulationNotFound","description":"The simulation has not been found"},"SimulationNotFoundPayload":{"properties":{"simulation_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Simulation Id","description":"Identifier of the unknown simulation.","examples":["670f84254c28ffdaae0f462d"]},"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group the simulation was looked up in."}},"type":"object","required":["simulation_id","group_id"],"title":"SimulationNotFoundPayload","description":"Context of the SimulationNotFound error: the values identifying the entities involved in this specific occurrence."},"SimulationSchema":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Name of the simulation, for the operator to recognise it."},"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 simulation plays. Left out, it runs on the group's current one."},"permanent":{"type":"boolean","title":"Permanent","description":"Whether the simulation is restarted when it stops.","default":false},"options":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Options","description":"Extra arguments appended to the simulator command line, on top of the group and the session the API supplies."},"_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Id","description":"Identifier of the simulation.","examples":["670f84254c28ffdaae0f462d"]},"status":{"$ref":"#/components/schemas/SimulationStatus","description":"Where the simulation stands.","default":"stopped"}},"type":"object","required":["_id"],"title":"SimulationSchema","description":"A simulation of the group, and where it stands."},"SimulationStatus":{"type":"string","enum":["starting","started","stopping","stopped"],"title":"SimulationStatus","description":"Where a simulation stands, from its request to its shutdown."},"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."},"SoundAnnouncementAuthorRequired":{"properties":{"code":{"type":"string","const":"SOUND_ANNOUNCEMENT_AUTHOR_REQUIRED","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"Writing a sound announcement requires a session bound to a user","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/SoundAnnouncementAuthorRequiredPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"SoundAnnouncementAuthorRequired","description":"Writing a sound announcement requires a session bound to a user"},"SoundAnnouncementAuthorRequiredPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Group the write targeted."}},"type":"object","required":["group_id"],"title":"SoundAnnouncementAuthorRequiredPayload","description":"Context of the SoundAnnouncementAuthorRequired error: the values identifying the entities involved in this specific occurrence."},"SoundAnnouncementContentSchema":{"properties":{"language":{"$ref":"#/components/schemas/SoundAnnouncementLanguage","description":"Language of this text. Only `fr` can be submitted in V1, but the shape carries every language an announcement may hold."},"text":{"type":"string","title":"Text","description":"What the on-board audio module reads out."},"estimated_duration_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Estimated Duration Seconds","description":"Measured length of the rendered audio preview, in seconds. `null` until a preview has been generated for this text. Per language, because two languages read to two lengths."}},"type":"object","required":["language","text"],"title":"SoundAnnouncementContentSchema","description":"One text, in one language, as the API returns it."},"SoundAnnouncementContentWriteSchema":{"properties":{"language":{"$ref":"#/components/schemas/SoundAnnouncementWriteLanguageSchema","description":"Language of this text. Only `fr` is accepted in V1."},"text":{"type":"string","title":"Text","description":"What the on-board audio module reads out. May carry the variable markers `{destination}` and `{arrêt}`, which are stored verbatim and resolved at announcement time. May be empty."}},"additionalProperties":false,"type":"object","required":["language","text"],"title":"SoundAnnouncementContentWriteSchema","description":"One text, in one language, as a client submits it.\n\nCarries no duration: it is measured server-side from the audio the preview\nservice renders, and a client that sent one would be claiming a\nmeasurement it cannot make. Sending one is refused, not ignored."},"SoundAnnouncementLanguage":{"type":"string","enum":["fr","en","ar"],"title":"SoundAnnouncementLanguage","description":"ISO 639-1 code of a content's language.\n\nOnly ``FR`` is created and exposed in V1; the other two are the languages\nthe design foresees, declared here so a second content never needs a\nschema change. Arabic implies RTL rendering, which is not handled."},"SoundAnnouncementNotADraft":{"properties":{"code":{"type":"string","const":"SOUND_ANNOUNCEMENT_NOT_A_DRAFT","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"Only a draft announcement can be deleted; archive it","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/SoundAnnouncementNotADraftPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"SoundAnnouncementNotADraft","description":"Only a draft announcement can be deleted; archive it"},"SoundAnnouncementNotADraftPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Group the announcement belongs to."},"announcement_id":{"type":"string","title":"Announcement Id","description":"Announcement left untouched."},"status":{"$ref":"#/components/schemas/SoundAnnouncementStatus","description":"Status that forbids the deletion."}},"type":"object","required":["group_id","announcement_id","status"],"title":"SoundAnnouncementNotADraftPayload","description":"Context of the SoundAnnouncementNotADraft error: the values identifying the entities involved in this specific occurrence."},"SoundAnnouncementNotFound":{"properties":{"code":{"type":"string","const":"SOUND_ANNOUNCEMENT_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"No sound announcement carries this id in this group","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/SoundAnnouncementNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"SoundAnnouncementNotFound","description":"No sound announcement carries this id in this group"},"SoundAnnouncementNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Group the announcement was looked up in."},"announcement_id":{"type":"string","title":"Announcement Id","description":"Id that matched nothing."}},"type":"object","required":["group_id","announcement_id"],"title":"SoundAnnouncementNotFoundPayload","description":"Context of the SoundAnnouncementNotFound error: the values identifying the entities involved in this specific occurrence."},"SoundAnnouncementPageSchema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/SoundAnnouncementSummarySchema"},"type":"array","title":"Items","description":"Rows of this page, most recently edited first."},"total":{"type":"integer","title":"Total","description":"Amount of announcements 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 rows asked per page."}},"type":"object","required":["items","total","page","page_size"],"title":"SoundAnnouncementPageSchema","description":"One page of the library, and what it takes to walk it."},"SoundAnnouncementSchema":{"properties":{"id":{"type":"string","title":"Id","description":"Identifier of the announcement."},"title":{"type":"string","title":"Title","description":"Name of the announcement."},"status":{"$ref":"#/components/schemas/SoundAnnouncementStatus","description":"Where the announcement stands. Only `published` is broadcast."},"contents":{"items":{"$ref":"#/components/schemas/SoundAnnouncementContentSchema"},"type":"array","title":"Contents","description":"Texts of the announcement, one per language."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When it was created."},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"When it was last edited."},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At","description":"When it was last published, kept afterwards. `null` when it never was. Says what happened, not where it stands."},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Archived At","description":"When it was last archived. `null` when it never was."},"last_action_by":{"type":"string","title":"Last Action By","description":"User who last created, edited, published or archived it."}},"type":"object","required":["id","title","status","contents","created_at","updated_at","last_action_by"],"title":"SoundAnnouncementSchema","description":"One announcement with every one of its language contents."},"SoundAnnouncementStatus":{"type":"string","enum":["draft","published","unpublished","archived"],"title":"SoundAnnouncementStatus"},"SoundAnnouncementSummarySchema":{"properties":{"id":{"type":"string","title":"Id","description":"Identifier of the announcement."},"title":{"type":"string","title":"Title","description":"Name of the announcement."},"excerpt":{"type":"string","title":"Excerpt","description":"Beginning of the French text, cut on a word boundary. Empty when the announcement carries no French text."},"status":{"$ref":"#/components/schemas/SoundAnnouncementStatus","description":"Where the announcement stands."},"estimated_duration_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Estimated Duration Seconds","description":"Measured length of the French text's audio preview, in seconds. `null` until a preview has been generated."},"usages":{"items":{"$ref":"#/components/schemas/SoundAnnouncementUsage"},"type":"array","title":"Usages","description":"Where the announcement is played from. **Always empty in V1**: none of the usages is wired yet, and the field is not simulated. Read it as unknown, not as unused."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When it was created."},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"When it was last edited."},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At","description":"When it was last published."},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Archived At","description":"When it was last archived."}},"type":"object","required":["id","title","excerpt","status","usages","created_at","updated_at"],"title":"SoundAnnouncementSummarySchema","description":"One row of the library."},"SoundAnnouncementUsage":{"type":"string","enum":["automatic","driver_console","multichannel"],"title":"SoundAnnouncementUsage","description":"Where an announcement is played from — the \"Type\" column of the library.\n\nDeclared in full, wired for none: see\n:attr:`SoundAnnouncementSummary.usages`."},"SoundAnnouncementVariable":{"type":"string","enum":["destination","arrêt"],"title":"SoundAnnouncementVariable","description":"A placeholder the vocalising equipment resolves at announcement time.\n\nThe stored value is the marker's *name*; the marker itself is the name\nwrapped in braces (:func:`variable_marker`). Two only in V1, and a network\ncannot mint its own."},"SoundAnnouncementVariableSchema":{"properties":{"variable":{"$ref":"#/components/schemas/SoundAnnouncementVariable","description":"Name of the variable, as it reads inside the marker."},"marker":{"type":"string","title":"Marker","description":"Literal to insert into the text, braces included — insert this rather than composing it from the name. Stored verbatim and resolved at announcement time."},"example_value":{"type":"string","title":"Example Value","description":"What the marker stands for in a preview, before a real trip supplies a value. Generic, and never stored."}},"type":"object","required":["variable","marker","example_value"],"title":"SoundAnnouncementVariableSchema","description":"One variable the editor can insert into a text."},"SoundAnnouncementWriteLanguageSchema":{"type":"string","enum":["fr"],"title":"SoundAnnouncementWriteLanguageSchema","description":"The languages a client may *submit*, which is one.\n\nDeliberately narrower than what can be read back: only French is created\nin V1, so anything else is refused rather than stored and forgotten.\nOpening a language later means adding a value here — a widening no client\nhas to follow.\n\nReads use the model's own language set instead, because the model is\nmultilingual and a document may legitimately carry a content this enum\ndoes not name. Narrowing the read side too would answer 500 on a document\nthe write side never accepted but the DAL allows."},"SoundAnnouncementWriteSchema":{"properties":{"title":{"type":"string","title":"Title","description":"Name of the announcement in the library. May be empty."},"contents":{"items":{"$ref":"#/components/schemas/SoundAnnouncementContentWriteSchema"},"type":"array","title":"Contents","description":"One text per language, at most one per language. An empty list is valid — it is the state of a freshly opened editor."}},"additionalProperties":false,"type":"object","required":["title","contents"],"title":"SoundAnnouncementWriteSchema","description":"Body of a creation and of an edit alike.\n\nBoth carry the title *and* the contents: the stored search key is derived\nfrom the two together, so an edit that submitted one without the other\ncould not fold the one it left out. This is why editing is a `PUT`.\n\nThe status is absent, and sending one is refused: an announcement is\ncreated as a draft and moves only through the lifecycle endpoints."},"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."},"StateLoadInProgress":{"properties":{"code":{"type":"string","const":"STATE_LOAD_IN_PROGRESS","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"A state load is already running for this group","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/StateLoadInProgressPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"StateLoadInProgress","description":"A state load is already running for this group"},"StateLoadInProgressPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group whose state is already loading."}},"type":"object","required":["group_id"],"title":"StateLoadInProgressPayload","description":"Context of the StateLoadInProgress error: the values identifying the entities involved in this specific occurrence."},"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."},"StopCloseAreaSchema":{"properties":{"stop_sequence":{"anyOf":[{"type":"integer"},{"type":"number"}],"title":"Stop Sequence","description":"Position of the stop in the trip. A fractional value designates a temporary stop, absent from the GTFS."},"stop_id":{"type":"string","title":"Stop Id","description":"Identifier of the stop."},"stop_radius":{"type":"integer","title":"Stop Radius","description":"Distance in metres delimiting the area around the stop."}},"type":"object","required":["stop_sequence","stop_id","stop_radius"],"title":"StopCloseAreaSchema","description":"The stop an event is about, and the radius of its close area."},"StopDetectionSchema":{"properties":{"stop_sequence":{"anyOf":[{"type":"integer"},{"type":"number"}],"title":"Stop Sequence","description":"Position of the stop in the trip. A fractional value designates a temporary stop, absent from the GTFS."},"stop_id":{"type":"string","title":"Stop Id","description":"Identifier of the stop."},"detection_radius":{"type":"integer","title":"Detection Radius","description":"Distance in metres within which the app considered the stop reached."}},"type":"object","required":["stop_sequence","stop_id","detection_radius"],"title":"StopDetectionSchema","description":"The stop an event is about, and the radius its detection used."},"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-Input":{"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_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stop Id","description":"Identifier of the stop, to re-locate it if the GTFS moved."},"stop_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stop Index","description":"Rank of the stop in the trip, counted from its first."},"stop_occurrence_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stop Occurrence Index","description":"Which visit this is, for a stop the trip serves more than once."}},"type":"object","required":["stop_sequence","information"],"title":"StopInfoSchema","description":"A message the operator attaches to one stop of the trip."},"StopReference":{"properties":{"stop_sequence":{"type":"number","title":"Stop Sequence","description":"Position of the stop in the trip, per the current GTFS."},"stop_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stop Id","description":"Identifier of the stop, to re-locate it if the GTFS moved."},"stop_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stop Index","description":"Rank of the stop in the trip, counted from its first."},"stop_occurrence_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stop Occurrence Index","description":"Which visit this is, for a stop the trip serves more than once."}},"type":"object","required":["stop_sequence"],"title":"StopReference","description":"Identifies a stop within a trip in a way that survives GTFS changes.\n\n``stop_sequence`` is the value used today and remains the source of truth\nwhen the GTFS hasn't moved. The other fields are optional because they\nwere introduced after the model existed, so old documents may not have\nthem. When present they let the read-time resolver re-locate the stop\nwhen ``stop_sequence`` no longer matches the current GTFS."},"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."},"SystemMetadataSchema":{"properties":{"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."},"app_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Version","description":"Version of the Pysae Driver app installed. Must parse as a semantic version: a build tag is refused rather than stored."},"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 app is working against."}},"type":"object","title":"SystemMetadataSchema","description":"What the Pysae Driver app reports about the device it runs on."},"TaskIdSchema":{"properties":{"task_id":{"type":"string","title":"Task Id","description":"Identifier the task's progress is read back with."}},"type":"object","required":["task_id"],"title":"TaskIdSchema","description":"Handle of a background task, to poll it for its outcome."},"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."},"TeamArchived":{"properties":{"code":{"type":"string","const":"TEAM_ARCHIVED","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"You cannot attribute an archived team","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/TeamArchivedPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"TeamArchived","description":"You cannot attribute an archived team"},"TeamArchivedPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group the team belongs to."},"team_id":{"type":"string","title":"Team Id","description":"Identifier of the archived team."},"team_name":{"type":"string","title":"Team Name","description":"Name of the archived team."}},"type":"object","required":["group_id","team_id","team_name"],"title":"TeamArchivedPayload","description":"Context of the TeamArchived error: the values identifying the entities involved in this specific occurrence."},"TeamCreateSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the team, unique within the group — a depot, an area, a subcontractor."},"color":{"type":"string","title":"Color","description":"Colour the Pysae applications use to tell this team apart."},"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."}},"type":"object","required":["name","color"],"title":"TeamCreateSchema","description":"Team to create in the group."},"TeamInUse":{"properties":{"code":{"type":"string","const":"TEAM_IN_USE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"You cannot archive/delete a team that is in use","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/TeamInUsePayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"TeamInUse","description":"You cannot archive/delete a team that is in use"},"TeamInUseForbiddenAction":{"type":"string","enum":["current_gtfs"],"title":"TeamInUseForbiddenAction","description":"What a team is still used for, blocking its archival or its deletion."},"TeamInUsePayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group the team belongs to."},"team_id":{"type":"string","title":"Team Id","description":"Identifier of the team still in use."},"forbidden_action":{"$ref":"#/components/schemas/TeamInUseForbiddenAction","description":"What the team is still used for."}},"type":"object","required":["group_id","team_id","forbidden_action"],"title":"TeamInUsePayload","description":"Context of the TeamInUse error: the values identifying the entities involved in this specific occurrence."},"TeamNameAlreadyTaken":{"properties":{"code":{"type":"string","const":"TEAM_NAME_ALREADY_TAKEN","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"You cannot have duplicate team name","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/TeamNameAlreadyTakenPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"TeamNameAlreadyTaken","description":"You cannot have duplicate team name"},"TeamNameAlreadyTakenPayload":{"properties":{"team_name":{"type":"string","title":"Team Name","description":"Team name another team of the group already carries."}},"type":"object","required":["team_name"],"title":"TeamNameAlreadyTakenPayload","description":"Context of the TeamNameAlreadyTaken error: the values identifying the entities involved in this specific occurrence."},"TeamNotFound":{"properties":{"code":{"type":"string","const":"TEAM_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The team 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/TeamNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"TeamNotFound","description":"The team has not been found"},"TeamNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group the team was looked up in."},"team_id":{"type":"string","title":"Team Id","description":"Identifier of the unknown team."}},"type":"object","required":["group_id","team_id"],"title":"TeamNotFoundPayload","description":"Context of the TeamNotFound error: the values identifying the entities involved in this specific occurrence."},"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."},"TeamUpdateSchema":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"New name of the team, unique within the group."},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Colour the Pysae applications use to tell this team apart."},"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":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Archived","description":"Whether the team is archived: it stays attached to its past data but is no longer offered for new assignments."}},"type":"object","title":"TeamUpdateSchema","description":"Fields of a team to change. Any field left out keeps its current value."},"Temporality":{"type":"string","enum":["passed","current","future"],"title":"Temporality","description":"Where the trip sits against the present moment."},"TemporaryStopSchema":{"properties":{"last_stop_delta":{"type":"integer","title":"Last Stop Delta","description":"Offset in seconds from the reference stop's scheduled time."},"stop_lat":{"type":"number","title":"Stop Lat","description":"Latitude the stop is served at, in degrees."},"stop_lon":{"type":"number","title":"Stop Lon","description":"Longitude the stop is served at, in degrees."},"stop_id":{"type":"string","title":"Stop Id","description":"Identifier of the stop. It points into the GTFS for a `REUSE`, and is the deviation's own for a `SHIFT` or an `AD_HOC`."},"stop_name":{"type":"string","title":"Stop Name","description":"Name travellers see for the stop."},"stop_sequence":{"type":"number","title":"Stop Sequence","description":"Position of the stop in the deviated trip. A fractional value slots it between two scheduled stops."},"type":{"$ref":"#/components/schemas/TemporaryStopType","description":"What the deviation does: move, create or reuse a stop."},"reference_stop_sequence":{"type":"integer","title":"Reference Stop Sequence","description":"Position of the scheduled stop this one is anchored on."},"reference_stop_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference Stop Id","description":"Identifier of the anchor stop, to re-locate it if the GTFS moved."},"reference_stop_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reference Stop Index","description":"Rank of the anchor stop in the trip, counted from its first."},"reference_stop_occurrence_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reference Stop Occurrence Index","description":"Which visit the anchor is, for a stop the trip serves more than once."}},"type":"object","required":["last_stop_delta","stop_lat","stop_lon","stop_id","stop_name","stop_sequence","type","reference_stop_sequence"],"title":"TemporaryStopSchema","description":"A stop to add to the trip, or to move one of its stops to.\n\nIt is anchored on a scheduled stop — `reference_stop_sequence` — and offset\nfrom it by `last_stop_delta`, so one deviation covering many trips lands at\nthe right time on each."},"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."},"TokenRequestSchema":{"properties":{"g_recaptcha_response":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"G Recaptcha Response","description":"reCAPTCHA response proving the request is human. Required unless the caller is a superuser."},"reset_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reset Url","description":"Base URL the reset email points to. It must be on a Pysae domain. Left out, the API falls back on its configured front URL."}},"type":"object","title":"TokenRequestSchema","description":"What the caller supplies to have a password reset token issued."},"TokenSchema":{"properties":{"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token","description":"The token itself, returned to a superuser call only — null otherwise, the token then only reaching the user by email."},"expire":{"type":"string","format":"date-time","title":"Expire","description":"Moment past which the token no longer resets anything."}},"type":"object","required":["token","expire"],"title":"TokenSchema","description":"Password reset token issued for an account."},"TooManyUnresolvedStaff":{"properties":{"code":{"type":"string","const":"CADENCITY_TOO_MANY_UNRESOLVED_STAFF","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The ratio of unresolved staff numbers exceeds the configured threshold; the import was refused without writing.","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/TooManyUnresolvedStaffPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"TooManyUnresolvedStaff","description":"The ratio of unresolved staff numbers exceeds the configured threshold; the import was refused without writing."},"TooManyUnresolvedStaffPayload":{"properties":{"skipped_staff_numbers":{"items":{"type":"string"},"type":"array","title":"Skipped Staff Numbers","description":"Staff numbers of the export that match no driver of the group, sorted; every line carrying one of them was left out."},"skipped_ratio":{"type":"number","title":"Skipped Ratio","description":"Share of the distinct staff numbers of the export that could not be resolved, between 0 and 1."},"threshold":{"type":"number","title":"Threshold","description":"Share above which the import is refused, read from ``CADENCITY_MAX_SKIPPED_STAFF_RATIO``."}},"type":"object","required":["skipped_staff_numbers","skipped_ratio","threshold"],"title":"TooManyUnresolvedStaffPayload","description":"Context of the TooManyUnresolvedStaff error: the values identifying the entities involved in this specific occurrence."},"TransitArchiveCompressedTooLarge":{"properties":{"code":{"type":"string","const":"TRANSIT_ARCHIVE_COMPRESSED_TOO_LARGE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The uploaded transit archive exceeds the maximum compressed size","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/TransitArchiveCompressedTooLargePayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"TransitArchiveCompressedTooLarge","description":"The uploaded transit archive exceeds the maximum compressed size"},"TransitArchiveCompressedTooLargePayload":{"properties":{"max_bytes":{"type":"integer","title":"Max Bytes","description":"Largest archive accepted as sent, in bytes. The cap belongs to the format the archive was uploaded as, GTFS or Hastus."}},"type":"object","required":["max_bytes"],"title":"TransitArchiveCompressedTooLargePayload","description":"Context of the TransitArchiveCompressedTooLarge error: the values identifying the entities involved in this specific occurrence."},"TransitArchiveUncompressedTooLarge":{"properties":{"code":{"type":"string","const":"TRANSIT_ARCHIVE_UNCOMPRESSED_TOO_LARGE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The uploaded transit archive exceeds the maximum uncompressed size","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/TransitArchiveUncompressedTooLargePayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"TransitArchiveUncompressedTooLarge","description":"The uploaded transit archive exceeds the maximum uncompressed size"},"TransitArchiveUncompressedTooLargePayload":{"properties":{"max_bytes":{"type":"integer","title":"Max Bytes","description":"Largest archive accepted once expanded, in bytes. The cap belongs to the format the archive was uploaded as, GTFS or Hastus."}},"type":"object","required":["max_bytes"],"title":"TransitArchiveUncompressedTooLargePayload","description":"Context of the TransitArchiveUncompressedTooLarge error: the values identifying the entities involved in this specific occurrence."},"TransitFileType":{"type":"string","enum":["gtfs"],"title":"TransitFileType","description":"Format of the transit archive being imported.\n\nOnly GTFS is accepted today; the field exists so a second format can be\nadded without changing the request shape."},"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."},"TripComplementaryInfoCommentSchema":{"properties":{"comment":{"type":"string","title":"Comment","description":"Text of the comment, kept for the operator."}},"type":"object","required":["comment"],"title":"TripComplementaryInfoCommentSchema","description":"Free-form comment the operator attaches to the trip."},"TripComplementaryInfoStopInfosSchema":{"properties":{"stop_infos":{"items":{"$ref":"#/components/schemas/StopInfoSchema-Input"},"type":"array","title":"Stop Infos","description":"One message per stop the operator wrote about."}},"type":"object","required":["stop_infos"],"title":"TripComplementaryInfoStopInfosSchema","description":"Messages the operator attaches to stops of the trip."},"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."},"TripEventSchemaCreate":{"properties":{"event_type":{"$ref":"#/components/schemas/EventType","description":"What happened on the trip."},"plan_id":{"type":"string","title":"Plan Id","description":"Identifier of the GTFS the trip is read against."},"trip_id":{"type":"string","title":"Trip Id","description":"Trip the event happened on."},"trip_date":{"type":"string","title":"Trip Date","description":"Service day of the trip, as `YYYYMMDD`. It tells apart the occurrences of a trip that runs every day."},"driver_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Driver Id","description":"Driver running the trip, when known."},"vehicle_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vehicle Id","description":"Vehicle running the trip, when known."},"date":{"anyOf":[{"type":"string","examples":["2020-11-22T11:12:13","22/11/2020 11:12:13"]},{"type":"integer","examples":[1606003200]},{"type":"number","examples":[1606003200.5]}],"title":"Date","description":"Moment the event happened."},"content":{"anyOf":[{"$ref":"#/components/schemas/StopCloseAreaSchema"},{"$ref":"#/components/schemas/StopDetectionSchema"},{"type":"null"}],"title":"Content","description":"Which stop the event is about, and the radius it was decided on. Absent for events that concern no stop."},"device_id":{"type":"string","title":"Device Id","description":"Device the event comes from."}},"type":"object","required":["event_type","plan_id","trip_id","trip_date","device_id"],"title":"TripEventSchemaCreate","description":"An event on a trip, reported for a named device."},"TripEventSchemaDeviceCreate":{"properties":{"event_type":{"$ref":"#/components/schemas/EventType","description":"What happened on the trip."},"plan_id":{"type":"string","title":"Plan Id","description":"Identifier of the GTFS the trip is read against."},"trip_id":{"type":"string","title":"Trip Id","description":"Trip the event happened on."},"trip_date":{"type":"string","title":"Trip Date","description":"Service day of the trip, as `YYYYMMDD`. It tells apart the occurrences of a trip that runs every day."},"driver_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Driver Id","description":"Driver running the trip, when known."},"vehicle_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vehicle Id","description":"Vehicle running the trip, when known."},"date":{"anyOf":[{"type":"string","examples":["2020-11-22T11:12:13","22/11/2020 11:12:13"]},{"type":"integer","examples":[1606003200]},{"type":"number","examples":[1606003200.5]}],"title":"Date","description":"Moment the event happened."},"content":{"anyOf":[{"$ref":"#/components/schemas/StopCloseAreaSchema"},{"$ref":"#/components/schemas/StopDetectionSchema"},{"type":"null"}],"title":"Content","description":"Which stop the event is about, and the radius it was decided on. Absent for events that concern no stop."}},"type":"object","required":["event_type","plan_id","trip_id","trip_date"],"title":"TripEventSchemaDeviceCreate","description":"An event a device reports about the trip it is running."},"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."},"TripIncidentsCommentTemplate":{"properties":{"html_body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Html Body","description":"Body of the comment, as HTML."}},"type":"object","title":"TripIncidentsCommentTemplate","description":"Template of the comment opening an incident ticket."},"TripIncidentsConfig-Input":{"properties":{"ticket_template":{"anyOf":[{"$ref":"#/components/schemas/TripIncidentsTicketTemplate"},{"type":"null"}],"description":"Template the tickets are created from."},"incident_label_values":{"items":{"type":"string"},"type":"array","title":"Incident Label Values","description":"Incident labels the operator picks from when reporting.","default":[]},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type","description":"Ticketing system the incidents are filed into."},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain","description":"Domain of the ticketing instance the incidents go to."},"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token","description":"Credential authenticating against the ticketing system."}},"type":"object","title":"TripIncidentsConfig","description":"Where the trip incidents reported by the operator are filed."},"TripIncidentsConfig-Output":{"properties":{"ticket_template":{"anyOf":[{"$ref":"#/components/schemas/TripIncidentsTicketTemplate"},{"type":"null"}],"description":"Template the tickets are created from."},"incident_label_values":{"items":{"type":"string"},"type":"array","title":"Incident Label Values","description":"Incident labels the operator picks from when reporting.","default":[]},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type","description":"Ticketing system the incidents are filed into."},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain","description":"Domain of the ticketing instance the incidents go to."},"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token","description":"Credential authenticating against the ticketing system."}},"type":"object","title":"TripIncidentsConfig","description":"Where the trip incidents reported by the operator are filed."},"TripIncidentsTicketTemplate":{"properties":{"comment":{"anyOf":[{"$ref":"#/components/schemas/TripIncidentsCommentTemplate"},{"type":"null"}],"description":"Template of the comment opening the ticket."},"subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject","description":"Subject line of the ticket."}},"type":"object","title":"TripIncidentsTicketTemplate","description":"Template the incident tickets are created from."},"TripListConfiguration":{"properties":{"merging":{"$ref":"#/components/schemas/TripListMergingConfiguration","description":"Duplicates the list folds into a single row.","default":{"device":false,"gtfs":true}}},"type":"object","title":"TripListConfiguration","description":"How the trip list presents the trips of a service day."},"TripListConfigurationSchema":{"properties":{"merging":{"$ref":"#/components/schemas/TripListMergingConfigurationSchema","description":"Which duplicates the list folds together."}},"type":"object","required":["merging"],"title":"TripListConfigurationSchema","description":"How the trip list presents the trips of a service day."},"TripListMergingConfiguration":{"properties":{"device":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Device","description":"Whether the takings of one trip by several devices are folded into a single row, their kilometres summed.","default":false},"gtfs":{"type":"boolean","title":"Gtfs","description":"Whether a trip carried by several GTFS datasets appears once instead of once per dataset.","default":true}},"type":"object","title":"TripListMergingConfiguration","description":"Which duplicates of a same trip the trip list folds into a single row."},"TripListMergingConfigurationSchema":{"properties":{"device":{"type":"boolean","title":"Device","description":"Whether the takings of one trip by several devices are folded into a single row, their kilometres summed."},"gtfs":{"type":"boolean","title":"Gtfs","description":"Whether a trip carried by several GTFS datasets appears once instead of once per dataset."}},"type":"object","required":["device","gtfs"],"title":"TripListMergingConfigurationSchema","description":"Which duplicates of a same trip the trip list folds into a single row."},"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."},"TripPopulateForceMode":{"type":"string","enum":["check_only","drop_and_create","false","true"],"title":"TripPopulateForceMode","description":"How hard the trip population is pushed for the requested date.\n\n- ``false``: populate only when the group's state is stale for that date.\n- ``true``: populate whatever the state says, upserting the trips.\n- ``drop_and_create``: same, after dropping the existing state.\n- ``check_only``: run the staleness check and stop, writing nothing —\n  ``304`` when there is nothing to do, ``204`` otherwise."},"TripSchema-Input":{"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."},"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."},"TripUpdateCreateSchema":{"properties":{"delay":{"type":"integer","title":"Delay","description":"Delay in seconds","default":0,"examples":[11]},"is_canceled":{"type":"boolean","title":"Is Canceled","description":"Whether the trip is cancelled outright.","default":false},"skipped_stop_time_seqs":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Skipped Stop Time Seqs","description":"Sequences skipped, not by id but sequence index"},"skipped_stops":{"anyOf":[{"items":{"$ref":"#/components/schemas/StopReference"},"type":"array"},{"type":"null"}],"title":"Skipped Stops","description":"GTFS-resilient counterpart of skipped_stop_time_seqs. When provided by the client the server skips the enrichment step. When omitted the server computes the references from the trip's stop_times at write time."},"temporary_stops":{"anyOf":[{"items":{"$ref":"#/components/schemas/TemporaryStopSchema"},"type":"array"},{"type":"null"}],"title":"Temporary Stops","description":"Stops the trip serves instead, or in addition."},"shape":{"anyOf":[{"items":{"$ref":"#/components/schemas/Coordinates-Input"},"type":"array"},{"type":"null"}],"title":"Shape","description":"Itinerary the trip follows instead of its GTFS shape."},"delays":{"anyOf":[{"items":{"$ref":"#/components/schemas/Delay-Input"},"type":"array"},{"type":"null"}],"title":"Delays","description":"Per-stop shifts of the timetable."},"trips":{"items":{"type":"string"},"type":"array","title":"Trips","description":"Trips the modification applies to, one document written per trip. Leave empty to select them with `route_id` or `shape_id`, which writes a single document instead and resolves the trips at read time.","default":[]},"route_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Id","description":"Selects every trip of that route over the range, instead of naming them."},"shape_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Shape Id","description":"Selects every trip following that shape over the range. Takes precedence over `route_id`."},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Name the operator gives the modification, for their own use."},"excluded_trip_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Excluded Trip Ids","description":"Trips the selector would have caught but must not."}},"type":"object","title":"TripUpdateCreateSchema","description":"A modification to apply to one or more trips over a date range.\n\nEither name the trips — `trips`, or the `trip_id` query parameter — or give\na `route_id` / `shape_id` selector; the API refuses a body that does\nneither. The GTFS is never rewritten: the modification layers over it and\nsurfaces in the traveller-facing feeds."},"TripUpdatePatchSchema":{"properties":{"date":{"anyOf":[{"type":"string","examples":["20201122"]},{"type":"null"}],"title":"Date","description":"New first day the modification applies to."},"end_date":{"anyOf":[{"type":"string","examples":["20201122"]},{"type":"null"}],"title":"End Date","description":"New last day the modification applies to, included."},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Name the operator gives the modification, for their own use."},"excluded_trip_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Excluded Trip Ids","description":"Trips the selector would have caught but must not."}},"type":"object","title":"TripUpdatePatchSchema","description":"Partial update: every field is optional, only those explicitly sent are applied.\n\nThe other fields of a trip-update (delays, shape, skipped_stops, ...)\nare not editable through this endpoint and must go through the\ncreate/replace endpoints."},"TripUpdateSchema":{"properties":{"date":{"type":"string","title":"Date","description":"First day the modification applies to.","examples":["20201122"]},"trip_id":{"type":"string","title":"Trip Id","description":"Trip the modification applies to."},"end_date":{"anyOf":[{"type":"string","examples":["20201122"]},{"type":"null"}],"title":"End Date","description":"Last day the modification applies to, included. Absent when it covers the single day of `date`."},"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":"Note the operator attached to the modification."},"delay":{"anyOf":[{"type":"integer","examples":[11]},{"type":"null"}],"title":"Delay","description":"Delay in seconds"},"is_canceled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Canceled","description":"Whether the trip is cancelled outright."},"skipped_stop_time_seqs":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Skipped Stop Time Seqs","description":"Sequences skipped, not by id but sequence index"},"skipped_stops":{"anyOf":[{"items":{"$ref":"#/components/schemas/StopReference"},"type":"array"},{"type":"null"}],"title":"Skipped Stops","description":"The same skipped stops as `skipped_stop_time_seqs`, carried in a form that survives a GTFS change. The two never differ."},"stop_infos":{"anyOf":[{"items":{"$ref":"#/components/schemas/pysae__api__trip_updates__schemas__StopInfoSchema"},"type":"array"},{"type":"null"}],"title":"Stop Infos","description":"Messages attached to stops of the trip."},"temporary_stops":{"anyOf":[{"items":{"$ref":"#/components/schemas/pysae__api__trip_updates__models__TemporaryStop"},"type":"array"},{"type":"null"}],"title":"Temporary Stops","description":"Stops the trip serves instead, or in addition."},"shape":{"anyOf":[{"items":{"$ref":"#/components/schemas/pysae__api__trip_updates__models__Coordinates"},"type":"array"},{"type":"null"}],"title":"Shape","description":"Itinerary the trip follows instead of its GTFS shape."},"delays":{"anyOf":[{"items":{"$ref":"#/components/schemas/pysae__api__trip_updates__models__Delay"},"type":"array"},{"type":"null"}],"title":"Delays","description":"Per-stop shifts of the timetable."},"km_delta":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Km Delta","description":"Signed km difference deviated - nominal (+ = longer).","readOnly":true}},"type":"object","required":["date","trip_id","km_delta"],"title":"TripUpdateSchema","description":"A modification in force on a trip, with what it changes."},"TripUpdateSoftDeleteSchema":{"properties":{"trip_update_ids":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Trip Update Ids","description":"MongoDB _id of the trip-updates to end."}},"type":"object","required":["trip_update_ids"],"title":"TripUpdateSoftDeleteSchema","description":"Modifications to end, without erasing what they already produced."},"TripUpdateUseSchema":{"properties":{"total":{"type":"integer","title":"Total","description":"Modifications counted in all.","default":0},"comment":{"type":"integer","title":"Comment","description":"Of those, the ones carrying a comment.","default":0},"stop_infos":{"type":"integer","title":"Stop Infos","description":"Of those, the ones attaching a message to a stop.","default":0},"is_canceled":{"type":"integer","title":"Is Canceled","description":"Of those, the ones cancelling the trip.","default":0},"delay":{"type":"integer","title":"Delay","description":"Of those, the ones delaying the whole trip.","default":0},"skipped_stop_time_seqs":{"type":"integer","title":"Skipped Stop Time Seqs","description":"Of those, the ones skipping a stop.","default":0},"temporary_stops":{"type":"integer","title":"Temporary Stops","description":"Of those, the ones moving or adding a stop.","default":0},"shape":{"type":"integer","title":"Shape","description":"Of those, the ones defining another itinerary.","default":0},"delays":{"type":"integer","title":"Delays","description":"Of those, the ones shifting the timetable per stop.","default":0}},"type":"object","title":"TripUpdateUseSchema","description":"How many modifications the group wrote, counted per kind of change.\n\nA modification changing several things counts once per kind, so the parts\ndo not add up to `total`."},"TripUpdateValidationResultSchema":{"properties":{"status":{"$ref":"#/components/schemas/pysae__api__trip_updates__schemas__ValidationStatus","description":"`error` as soon as one modification no longer applies."},"deviation_valid":{"type":"integer","minimum":0.0,"title":"Deviation Valid","description":"Number of active (end_date >= today, non-obsolete) trip-updates that pass every check against the target GTFS. Populated for both ``valid`` and ``error`` outcomes.","default":0},"deviation_errors":{"anyOf":[{"items":{"$ref":"#/components/schemas/DeviationErrorSchema"},"type":"array"},{"type":"null"}],"title":"Deviation Errors","description":"The modifications that no longer apply, with their reasons. Absent on a `valid` outcome."}},"type":"object","required":["status"],"title":"TripUpdateValidationResultSchema","description":"Whether the group's active modifications still apply to a target GTFS.\n\nMeant to be called before publishing a GTFS, to see which modifications it\nwould break."},"TripValidationRules":{"properties":{"start_distance_max":{"type":"integer","title":"Start Distance Max","description":"Distance in metres between the first stop and where the trip was actually taken, past which its start is reported as off.","default":1000},"start_delay_max":{"type":"integer","title":"Start Delay Max","description":"Delay in seconds on the scheduled departure, past which the start is reported as late.","default":1800},"start_delay_min":{"type":"integer","title":"Start Delay Min","description":"Delay in seconds on the scheduled departure, below which the start is reported as early. Negative.","default":-1800},"vk_percent_min":{"type":"integer","title":"Vk Percent Min","description":"Share, as a percentage of the theoretical distance, of reliable kilometres below which the trip is reported as under-driven.","default":80}},"type":"object","title":"TripValidationRules","description":"Thresholds past which a trip is reported as problematic.\n\nA trip breaching one of them is flagged, never dropped: the operator\narbitrates."},"TripValidationRulesSchema":{"properties":{"start_distance_max":{"type":"integer","title":"Start Distance Max","description":"Distance in metres between the first stop and where the trip was actually taken, past which its start is reported as off."},"start_delay_max":{"type":"integer","title":"Start Delay Max","description":"Delay in seconds on the scheduled departure, past which the start is reported as late."},"start_delay_min":{"type":"integer","title":"Start Delay Min","description":"Delay in seconds on the scheduled departure, below which the start is reported as early. Negative."},"vk_percent_min":{"type":"integer","title":"Vk Percent Min","description":"Share, as a percentage of the theoretical distance, of reliable kilometres below which the trip is reported as under-driven."}},"type":"object","required":["start_distance_max","start_delay_max","start_delay_min","vk_percent_min"],"title":"TripValidationRulesSchema","description":"Thresholds past which a trip is reported as problematic.\n\nA trip breaching one of them is flagged, never dropped: the operator\narbitrates."},"TripsConfigSchema-Input":{"properties":{"trip_list_configuration":{"$ref":"#/components/schemas/TripListConfigurationSchema","description":"Presentation of the trips of a service day.","default":{"merging":{"device":false,"gtfs":true}}},"trip_validation_rules":{"$ref":"#/components/schemas/TripValidationRulesSchema","description":"Limits a taken trip is checked against before reporting.","default":{"start_distance_max":1000,"start_delay_max":1800,"start_delay_min":-1800,"vk_percent_min":80}}},"type":"object","title":"TripsConfigSchema","description":"How the group's trips are listed and checked."},"TripsConfigSchema-Output":{"properties":{"trip_list_configuration":{"$ref":"#/components/schemas/TripListConfigurationSchema","description":"Presentation of the trips of a service day.","default":{"merging":{"device":false,"gtfs":true}}},"trip_validation_rules":{"$ref":"#/components/schemas/TripValidationRulesSchema","description":"Limits a taken trip is checked against before reporting.","default":{"start_distance_max":1000,"start_delay_max":1800,"start_delay_min":-1800,"vk_percent_min":80}}},"type":"object","title":"TripsConfigSchema","description":"How the group's trips are listed and checked."},"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."},"UnauthorizedArchivedDevice":{"properties":{"code":{"type":"string","const":"UNAUTHORIZED_ARCHIVED_DEVICE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The device requested is archived in this group","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/UnauthorizedArchivedDevicePayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"UnauthorizedArchivedDevice","description":"The device requested is archived in this group"},"UnauthorizedArchivedDevicePayload":{"properties":{"device_id":{"type":"string","title":"Device Id","description":"Identifier of the archived device that was refused."}},"type":"object","required":["device_id"],"title":"UnauthorizedArchivedDevicePayload","description":"Context of the UnauthorizedArchivedDevice error: the values identifying the entities involved in this specific occurrence."},"UnauthorizedDeviceSessionOnly":{"properties":{"code":{"type":"string","const":"UNAUTHORIZED_DEVICE_SESSION_ONLY","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"Endpoint should be called by device session (with `device_id`) only","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/UnauthorizedDeviceSessionOnlyPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"UnauthorizedDeviceSessionOnly","description":"Endpoint should be called by device session (with `device_id`) only"},"UnauthorizedDeviceSessionOnlyPayload":{"properties":{"session_id":{"type":"string","title":"Session Id","description":"Identifier of the session used for the call, which is not a device session."}},"type":"object","required":["session_id"],"title":"UnauthorizedDeviceSessionOnlyPayload","description":"Context of the UnauthorizedDeviceSessionOnly error: the values identifying the entities involved in this specific occurrence."},"UnauthorizedWrongGroupCode":{"properties":{"code":{"type":"string","const":"UNAUTHORIZED_WRONG_GROUP_CODE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"Group access code is wrong","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/UnauthorizedWrongGroupCodePayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"UnauthorizedWrongGroupCode","description":"Group access code is wrong"},"UnauthorizedWrongGroupCodePayload":{"properties":{"group_code":{"type":"string","title":"Group Code","description":"Group access code submitted by the device."}},"type":"object","required":["group_code"],"title":"UnauthorizedWrongGroupCodePayload","description":"Context of the UnauthorizedWrongGroupCode error: the values identifying the entities involved in this specific occurrence."},"UnknowledgedUrgencyNotFound":{"properties":{"code":{"type":"string","const":"UNKNOWLEDGE_URGENCY_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The requested urgency does not exist or is already marked as acknowledged","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/UnknowledgedUrgencyNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"UnknowledgedUrgencyNotFound","description":"The requested urgency does not exist or is already marked as acknowledged"},"UnknowledgedUrgencyNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group the urgency was looked up in."},"urgency_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Urgency Id","description":"Identifier of the urgency that is unknown, or already acknowledged.","examples":["670f84254c28ffdaae0f462d"]},"user_teams":{"anyOf":[{"items":{"type":"string"},"type":"array","uniqueItems":true},{"$ref":"#/components/schemas/AllTeams"}],"title":"User Teams","description":"Teams the lookup was restricted to, the ones the caller may act on."}},"type":"object","required":["group_id","urgency_id","user_teams"],"title":"UnknowledgedUrgencyNotFoundPayload","description":"Context of the UnknowledgedUrgencyNotFound error: the values identifying the entities involved in this specific occurrence."},"UnresolvedUrgencyNotFound":{"properties":{"code":{"type":"string","const":"UNRESOLVED_URGENCY_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The requested urgency does not exist, has not been acknowledged yet, or is already marked as resolved","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/UnresolvedUrgencyNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"UnresolvedUrgencyNotFound","description":"The requested urgency does not exist, has not been acknowledged yet, or is already marked as resolved"},"UnresolvedUrgencyNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group the urgency was looked up in."},"urgency_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Urgency Id","description":"Identifier of the urgency that is unknown, not yet acknowledged, or already resolved.","examples":["670f84254c28ffdaae0f462d"]},"user_teams":{"anyOf":[{"items":{"type":"string"},"type":"array","uniqueItems":true},{"$ref":"#/components/schemas/AllTeams"}],"title":"User Teams","description":"Teams the lookup was restricted to, the ones the caller may act on."}},"type":"object","required":["group_id","urgency_id","user_teams"],"title":"UnresolvedUrgencyNotFoundPayload","description":"Context of the UnresolvedUrgencyNotFound error: the values identifying the entities involved in this specific occurrence."},"UnsafePurgePatternError":{"properties":{"code":{"type":"string","const":"UNSAFE_PURGE_PATTERN","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The purge pattern is too broad or targets a protected namespace","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/UnsafePurgePatternErrorPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"UnsafePurgePatternError","description":"The purge pattern is too broad or targets a protected namespace"},"UnsafePurgePatternErrorPayload":{"properties":{"pattern":{"type":"string","title":"Pattern","description":"Pattern the purge was asked for."},"reason":{"type":"string","title":"Reason","description":"Why that pattern was refused."}},"type":"object","required":["pattern","reason"],"title":"UnsafePurgePatternErrorPayload","description":"Context of the UnsafePurgePatternError error: the values identifying the entities involved in this specific occurrence."},"UnsupportedFileContentType":{"properties":{"code":{"type":"string","const":"UNSUPPORTED_FILE_CONTENT_TYPE","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The file format is not supported","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/UnsupportedFileContentTypePayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"UnsupportedFileContentType","description":"The file format is not supported"},"UnsupportedFileContentTypePayload":{"properties":{"supported_content_type":{"items":{"type":"string"},"type":"array","uniqueItems":true,"title":"Supported Content Type","description":"Media types the endpoint accepts."},"given_content_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Given Content Type","description":"Media type of the uploaded file, when it declared one."},"filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filename","description":"Name of the rejected file, when it carried one."}},"type":"object","required":["supported_content_type"],"title":"UnsupportedFileContentTypePayload","description":"Context of the UnsupportedFileContentType error: the values identifying the entities involved in this specific occurrence."},"UpcomingFile":{"properties":{"current_file":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current File","description":"Identifier of the GTFS that was to be published."},"setup_ts":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Setup Ts","description":"Epoch seconds recorded for the setup of the publication."},"ts":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ts","description":"Epoch seconds recorded for the publication itself."},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id","description":"Identifier of the user who scheduled it."}},"type":"object","title":"UpcomingFile","description":"A GTFS publication that was scheduled on the group.\n\nLeftover of an earlier publication mechanism: nothing produces it any more,\nit is only carried along so existing documents round-trip, and the\npublication history is served by the GTFS endpoints instead."},"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/pysae__api__trips__v4__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/pysae__api__trips__v4__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/pysae__api__trips__v4__schemas__Coordinates"},"type":"array"},{"type":"null"}],"title":"Shape","description":"Itinerary the deviation follows instead of the GTFS one."},"delays":{"anyOf":[{"items":{"$ref":"#/components/schemas/pysae__api__trips__v4__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."},"UrgencyCreateSchema":{"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":{"anyOf":[{"type":"string","examples":["2020-11-22T11:12:13","22/11/2020 11:12:13"]},{"type":"integer","examples":[1606003200]},{"type":"number","examples":[1606003200.5]}],"title":"Device Time","description":"When the device says the urgency was raised, read from its own clock."},"trip":{"anyOf":[{"$ref":"#/components/schemas/TripSchema-Input"},{"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."}},"type":"object","required":["device_id","device_position","device_time"],"title":"UrgencyCreateSchema","description":"An alert a driver raises from the app, with the context of the moment."},"UrgencyCreatedSchema":{"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]}},"type":"object","required":["device_id","device_position","device_time","id","api_time"],"title":"UrgencyCreatedSchema","description":"An urgency as recorded, with what the server added to the request."},"UrgencyResolutionCreateSchema":{"properties":{"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","title":"UrgencyResolutionCreateSchema","description":"How an operator closes an urgency."},"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."},"UserCreateRoleSchema":{"properties":{"email":{"type":"string","title":"Email","description":"Email address of the 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":[]},"reset_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reset Url","description":"Base URL the invitation email points to. It must be on a Pysae domain. Left out, the API falls back on its configured front URL."}},"type":"object","required":["email","role"],"title":"UserCreateRoleSchema","description":"Role to grant on the group, to a user identified by their email address.\n\nThe user account is created when no account carries that email yet, and is\nthen invited by email to set its password."},"UserCreateSchema":{"properties":{"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.","default":false},"email":{"type":"string","title":"Email","description":"Email address the user signs in with, unique across all accounts."},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password","description":"Initial password. Left out, the account holds none and the user sets it from the invitation link."},"date_added":{"type":"string","format":"date-time","title":"Date Added","description":"Creation date of the account."},"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."}},"additionalProperties":false,"type":"object","required":["email"],"title":"UserCreateSchema","description":"User account to create. Its roles are granted per group, separately."},"UserEmailAlreadyTaken":{"properties":{"code":{"type":"string","const":"USER_EMAIL_ALREADY_TAKEN","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"You cannot have the same email as an other user","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/UserEmailAlreadyTakenPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"UserEmailAlreadyTaken","description":"You cannot have the same email as an other user"},"UserEmailAlreadyTakenPayload":{"properties":{"email":{"type":"string","title":"Email","description":"Email address another user already carries."}},"type":"object","required":["email"],"title":"UserEmailAlreadyTakenPayload","description":"Context of the UserEmailAlreadyTaken error: the values identifying the entities involved in this specific occurrence."},"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)."},"UserLimitConfigSchema":{"properties":{"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit","description":"Users the group may hold, null when uncapped."}},"type":"object","required":["limit"],"title":"UserLimitConfigSchema","description":"Cap the group currently sets on its users."},"UserLimitSchema":{"properties":{"limit":{"type":"integer","title":"Limit","description":"Users the group may hold."}},"type":"object","required":["limit"],"title":"UserLimitSchema","description":"New cap on the users the group may hold."},"UserNotFound":{"properties":{"code":{"type":"string","const":"USER_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The user 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/UserNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"UserNotFound","description":"The user has not been found"},"UserNotFoundPayload":{"properties":{"group_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id","description":"Identifier of the group the user was looked up in, absent when the lookup was not scoped to a group."},"user_id":{"type":"string","title":"User Id","description":"Identifier of the unknown user."}},"type":"object","required":["user_id"],"title":"UserNotFoundPayload","description":"Context of the UserNotFound error: the values identifying the entities involved in this specific occurrence."},"UserRestrictedUpdateSchema":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"New display name. Left out, the current one is kept."},"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","title":"UserRestrictedUpdateSchema","description":"Fields a user may change on their own account."},"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."},"UserUpdateSchema":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"New display name. Left out, the current one is kept."},"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."},"superuser":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Superuser","description":"Whether the account reaches every group without holding a role on it. Reserved for Pysae staff."},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"New sign-in email address, unique across all accounts. Renaming it changes how the user authenticates."}},"type":"object","title":"UserUpdateSchema","description":"Fields of a user account to change. Any field left out keeps its value."},"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."},"ValidationErrorEntrySchema":{"properties":{"type":{"$ref":"#/components/schemas/ValidationErrorType","description":"Why the modification does not apply."},"ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Ids","description":"Identifiers concerned by the error. Populated for ``MISSING_SHAPE`` (one shape_id), ``MISSING_ROUTE`` (one route_id) and ``MISSING_STOP`` (one or more stop_ids). ``None`` for ``SHAPE_CHANGED`` and ``NO_IMPACTED_TRIP``."}},"type":"object","required":["type"],"title":"ValidationErrorEntrySchema","description":"One reason a modification no longer applies, with what it points at."},"ValidationErrorType":{"type":"string","enum":["MISSING_SHAPE","MISSING_ROUTE","MISSING_STOP","SHAPE_CHANGED","NO_IMPACTED_TRIP"],"title":"ValidationErrorType","description":"Why a modification no longer applies to the GTFS it was checked against.\n\n`SHAPE_CHANGED` is the one that does not stem from something missing: the\nreference geometry moved under the deviation. `NO_IMPACTED_TRIP` is raised\nby the duplication check only: the selector resolves to no trip over the\ntarget period."},"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."},"VehicleBulkStatusResultSchema":{"properties":{"id_amount":{"type":"integer","title":"Id Amount","description":"Number of vehicle ids received."},"modified_amount":{"type":"integer","title":"Modified Amount","description":"Number of vehicles actually updated."}},"type":"object","required":["id_amount","modified_amount"],"title":"VehicleBulkStatusResultSchema","description":"Result schema for bulk status update."},"VehicleBulkStatusSchema":{"properties":{"status":{"$ref":"#/components/schemas/VehicleStatus","description":"Status every listed vehicle is moved to."},"ids":{"items":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","examples":["670f84254c28ffdaae0f462d"]},"type":"array","uniqueItems":true,"title":"Ids","description":"Vehicles the change applies to. Duplicates are collapsed."}},"type":"object","required":["status","ids"],"title":"VehicleBulkStatusSchema","description":"API v4 schema for bulk status update."},"VehicleCreateSchema":{"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":[]}},"additionalProperties":false,"type":"object","required":["fleet_number"],"title":"VehicleCreateSchema","description":"API v4 schema for creating a vehicle using the 'status' field."},"VehicleDataSchema":{"properties":{"energy_level":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Energy Level","description":"Energy level of a vehicle (fuel or battery), in percentage (0-100)"},"odometer":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Odometer","description":"Odometer reading of the vehicle, in kilometers"},"engine_state":{"anyOf":[{"$ref":"#/components/schemas/EngineState"},{"type":"null"}],"description":"Engine state reported by the telematic provider (driving or stopped)."}},"type":"object","title":"VehicleDataSchema","description":"What the on-board equipment reports about the vehicle itself."},"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."},"VehicleExploitationSendSftpResult":{"properties":{"filename":{"type":"string","title":"Filename","description":"Name the export was written under on the host."},"bytes_sent":{"type":"integer","title":"Bytes Sent","description":"Size of the export, in bytes."}},"type":"object","required":["filename","bytes_sent"],"title":"VehicleExploitationSendSftpResult","description":"What was uploaded to the group's SFTP host."},"VehicleImportResultSchema":{"properties":{"created":{"type":"integer","title":"Created","description":"Vehicles added to the group."},"modified":{"type":"integer","title":"Modified","description":"Vehicles of the group changed."},"ignored":{"type":"integer","title":"Ignored","description":"Lines the import left the group unchanged for."}},"type":"object","required":["created","modified","ignored"],"title":"VehicleImportResultSchema","description":"What a vehicle import actually changed."},"VehicleImportValidationError":{"properties":{"team_name_not_existing":{"anyOf":[{"$ref":"#/components/schemas/ErrorImportTeams"},{"type":"null"}],"description":"Lines naming a team the group does not hold."},"user_missing_team":{"anyOf":[{"$ref":"#/components/schemas/ErrorImportTeams"},{"type":"null"}],"description":"Lines naming a team the caller has no access to."},"missing_field":{"anyOf":[{"$ref":"#/components/schemas/ErrorImportFields"},{"type":"null"}],"description":"Lines missing a required column."},"invalid_format_field":{"anyOf":[{"$ref":"#/components/schemas/ErrorImportFields"},{"type":"null"}],"description":"Lines whose column value does not match its format."},"vehicle_not_found":{"anyOf":[{"$ref":"#/components/schemas/ErrorImportVehicleNotFound"},{"type":"null"}],"description":"Lines updating a vehicle the group does not hold."}},"type":"object","title":"VehicleImportValidationError","description":"Everything a vehicle import was refused for, grouped by cause.\n\nEach cause is absent when the file raised none of it. The import is\nall-or-nothing: a single cause leaves the vehicles untouched."},"VehicleImportValidationFailed":{"properties":{"code":{"type":"string","const":"VEHICLE_IMPORT_VALIDATION_FAILED","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"At vehicle import, some validation errors happened","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/VehicleImportValidationFailedPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"VehicleImportValidationFailed","description":"At vehicle import, some validation errors happened"},"VehicleImportValidationFailedPayload":{"properties":{"error":{"$ref":"#/components/schemas/VehicleImportValidationError","description":"Everything the import was refused for, grouped by cause."}},"type":"object","required":["error"],"title":"VehicleImportValidationFailedPayload","description":"Context of the VehicleImportValidationFailed error: the values identifying the entities involved in this specific occurrence."},"VehicleLenientKeyNotFound":{"properties":{"code":{"type":"string","const":"VEHICLE_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The vehicle 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/VehicleLenientKeyNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"VehicleLenientKeyNotFound","description":"The vehicle has not been found"},"VehicleLenientKeyNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group the vehicle was looked up in."},"vehicle_lenient_key":{"type":"string","title":"Vehicle Lenient Key","description":"Key the vehicle was looked up by: its id, its fleet number or its licence plate."}},"type":"object","required":["group_id","vehicle_lenient_key"],"title":"VehicleLenientKeyNotFoundPayload","description":"Context of the VehicleLenientKeyNotFound error: the values identifying the entities involved in this specific occurrence."},"VehicleLoadSchema":{"properties":{"vehicle_load":{"type":"integer","title":"Vehicle Load","description":"Passengers on board. Replaces the running total the counts maintain rather than adding to it."}},"type":"object","required":["vehicle_load"],"title":"VehicleLoadSchema","description":"The load the driver declares, outside of any stop count."},"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."},"VehicleNotFound":{"properties":{"code":{"type":"string","const":"VEHICLE_NOT_FOUND","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"The vehicle 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/VehicleNotFoundPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"VehicleNotFound","description":"The vehicle has not been found"},"VehicleNotFoundPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group the vehicle was looked up in."},"vehicle_id":{"type":"string","maxLength":24,"minLength":24,"pattern":"[0-9a-fA-F]{24}","title":"Vehicle Id","description":"Identifier of the unknown vehicle.","examples":["670f84254c28ffdaae0f462d"]}},"type":"object","required":["group_id","vehicle_id"],"title":"VehicleNotFoundPayload","description":"Context of the VehicleNotFound error: the values identifying the entities involved in this specific occurrence."},"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."},"VehicleStatusSchema":{"properties":{"status":{"$ref":"#/components/schemas/VehicleStatus","description":"New operating status of the vehicle."}},"additionalProperties":false,"type":"object","required":["status"],"title":"VehicleStatusSchema","description":"API v4 schema for updating vehicle status."},"VehicleType":{"type":"string","enum":["bus","car","minibus","other"],"title":"VehicleType","description":"The kinds of vehicle a network can declare in its fleet."},"VehicleUpdateSchema":{"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":[]}},"additionalProperties":false,"type":"object","required":["fleet_number"],"title":"VehicleUpdateSchema","description":"Full state of the vehicle to store, replacing the one on record."},"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`."},"VoipCallbackCreateSchema":{"properties":{"instavox_id":{"type":"string","title":"Instavox Id","description":"Instavox COMMAND_REQUEST id (used for dedupe)"},"sender_device_id":{"type":"string","title":"Sender Device Id","description":"Instavox device the request came from"},"sender_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sender User Id","description":"Instavox user behind the request, when known"},"type":{"$ref":"#/components/schemas/VoipCommandRequestType","description":"What the driver asked for (1 = call alert, 2 = radio check)"},"received_at":{"type":"string","format":"date-time","title":"Received At","description":"UTC time the request was received at"},"is_resolved":{"type":"boolean","title":"Is Resolved","description":"Whether the operator had already 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 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":"Label of the vehicle the device was assigned at reception"},"driver_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Driver Name","description":"Name of the driver signed in on the device at reception"}},"type":"object","required":["instavox_id","sender_device_id","type","received_at"],"title":"VoipCallbackCreateSchema","description":"A callback request to record, as the caller received it from Instavox.\n\nThe labels are a snapshot taken by the caller at reception, not values the\nAPI resolves: they keep saying who called even after the device, the\nvehicle or the driver has been reassigned."},"VoipCallbackInstavoxIdConflict":{"properties":{"code":{"type":"string","const":"VOIP_CALLBACK_INSTAVOX_ID_CONFLICT","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"Another VoIP callback already uses this instavox_id 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/VoipCallbackInstavoxIdConflictPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"VoipCallbackInstavoxIdConflict","description":"Another VoIP callback already uses this instavox_id for the group"},"VoipCallbackInstavoxIdConflictPayload":{"properties":{"group_id":{"type":"string","title":"Group Id","description":"Identifier of the group the callback belongs to."},"instavox_id":{"type":"string","title":"Instavox Id","description":"Instavox COMMAND_REQUEST id another callback of the group already holds."}},"type":"object","required":["group_id","instavox_id"],"title":"VoipCallbackInstavoxIdConflictPayload","description":"Context of the VoipCallbackInstavoxIdConflict error: the values identifying the entities involved in this specific occurrence."},"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."},"VoipCallbackUpdateSchema":{"properties":{"sender_device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sender Device Id","description":"New Instavox device to credit the request to"},"sender_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sender User Id","description":"New Instavox user behind the request"},"type":{"anyOf":[{"$ref":"#/components/schemas/VoipCommandRequestType"},{"type":"null"}],"description":"New request type (1 = call alert, 2 = radio check)"},"received_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Received At","description":"New UTC reception time"},"is_resolved":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Resolved","description":"Whether the operator has acknowledged the request. The usual reason to call this endpoint."},"instavox_device_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instavox Device Label","description":"New Instavox device label"},"pysae_device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pysae Device Id","description":"New Pysae device paired with the sender device"},"pysae_device_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pysae Device Label","description":"New Pysae device display label"},"vehicle_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vehicle Label","description":"New label of the vehicle to show"},"driver_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Driver Name","description":"New name of the driver to show"}},"type":"object","title":"VoipCallbackUpdateSchema","description":"The parts of a callback to change, the omitted ones left as they are.\n\n``instavox_id`` is not among them: the identifier the dedupe rests on is\nfixed once the callback is recorded, and is only changed by replacing it."},"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."},"WebreatheIntegrationSchema":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether the integration is enabled","default":true},"api_url":{"type":"string","title":"Api Url","description":"Webreathe API URL"},"api_key":{"type":"string","format":"password","title":"Api Key","description":"Webreathe API key","writeOnly":true}},"type":"object","required":["api_url","api_key"],"title":"WebreatheIntegrationSchema","description":"Webreathe passenger counting, polled over its API rather than on board.\n\nPysae calls it for the occupancy of each vehicle; the IP variant reads the\ncounting units on the vehicle network instead."},"WebreatheIpIntegrationSchema":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether the group currently runs the integration.","default":true},"api_key":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Api Key","description":"Credential the integration authenticates with, masked."},"api_url":{"type":"string","title":"Api Url","description":"Base URL the integration is reached at.","default":""},"ip_address":{"type":"string","title":"Ip Address","description":"Address of the on-board equipment on the vehicle network. The Pysae Driver app reaches it there; the API only stores it.","default":""},"port":{"type":"integer","title":"Port","description":"Port the equipment is reached on.","default":0}},"type":"object","title":"WebreatheIpIntegrationSchema","description":"Webreathe passenger counting, in its TCP/IP variant.\n\nPysae reads the occupancy of the vehicle from it; the serial variant\ncarries no address."},"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."},"WrongRecaptcha":{"properties":{"code":{"type":"string","const":"WRONG_RECAPTCHA","title":"Code","description":"Stable identifier of the error, meant to key the message the client displays."},"details":{"type":"string","const":"Incorrect recaptcha","title":"Details","description":"English description of the error, for logs and debugging — never displayed to an end user."},"payload":{"$ref":"#/components/schemas/WrongRecaptchaPayload","description":"Context of this occurrence: the entities the failed call was about."}},"type":"object","required":["code","details","payload"],"title":"WrongRecaptcha","description":"Incorrect recaptcha"},"WrongRecaptchaPayload":{"properties":{},"type":"object","title":"WrongRecaptchaPayload","description":"Context of the WrongRecaptcha 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__gtfs__files__models__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."},"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__trip_updates__models__Coordinates":{"prefixItems":[{"type":"number","title":"Lat"},{"type":"number","title":"Lng"}],"type":"array","maxItems":2,"minItems":2},"pysae__api__trip_updates__models__Delay":{"properties":{"stop_sequence":{"type":"number","title":"Stop Sequence","description":"Position of the stop in the trip, per the current GTFS."},"delay":{"type":"integer","title":"Delay","description":"Shift in seconds applied at that stop: positive delays it, negative brings it forward."},"stop_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stop Id","description":"Identifier of the stop, to re-locate it if the GTFS moved."},"stop_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stop Index","description":"Rank of the stop in the trip, counted from its first."},"stop_occurrence_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stop Occurrence Index","description":"Which visit this is, for a stop the trip serves more than once."}},"type":"object","required":["stop_sequence","delay"],"title":"Delay","description":"A stop of the trip whose timetable the operator shifted."},"pysae__api__trip_updates__models__TemporaryStop":{"properties":{"last_stop_delta":{"type":"integer","title":"Last Stop Delta","description":"Offset in seconds from the reference stop's scheduled time."},"reference_stop_sequence":{"type":"integer","title":"Reference Stop Sequence","description":"Position of the scheduled stop this one is anchored on."},"arrival_time":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Arrival Time","description":"Arrival time on the trip being read, resolved from the anchor. Not stored: it is computed per trip."},"departure_time":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Departure Time","description":"Departure time on the trip being read, resolved from the anchor. Not stored: it is computed per trip."},"stop_lat":{"type":"number","title":"Stop Lat","description":"Latitude the stop is served at, in degrees."},"stop_lon":{"type":"number","title":"Stop Lon","description":"Longitude the stop is served at, in degrees."},"stop_id":{"type":"string","title":"Stop Id","description":"Identifier of the stop. It points into the GTFS for a `REUSE`, and is the deviation's own for a `SHIFT` or an `AD_HOC`."},"stop_name":{"type":"string","title":"Stop Name","description":"Name travellers see for the stop."},"stop_sequence":{"type":"number","title":"Stop Sequence","description":"Position of the stop in the deviated trip. A fractional value slots it between two scheduled stops."},"type":{"$ref":"#/components/schemas/TemporaryStopType","description":"What the deviation did: moved, created or reused a stop."},"reference_stop_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference Stop Id","description":"Identifier of the anchor stop, to re-locate it if the GTFS moved."},"reference_stop_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reference Stop Index","description":"Rank of the anchor stop in the trip, counted from its first."},"reference_stop_occurrence_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reference Stop Occurrence Index","description":"Which visit the anchor is, for a stop the trip serves more than once."}},"type":"object","required":["last_stop_delta","reference_stop_sequence","stop_lat","stop_lon","stop_id","stop_name","stop_sequence","type"],"title":"TemporaryStop","description":"A stop the deviation adds to the trip, or moves it to.\n\nIt is anchored on a scheduled stop — ``reference_stop_sequence`` — and\noffset from it by ``last_stop_delta``, so one deviation document covering\nmany trips yields the right times on each."},"pysae__api__trip_updates__schemas__StopInfoSchema":{"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_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stop Id","description":"Identifier of the stop, to re-locate it if the GTFS moved."},"stop_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stop Index","description":"Rank of the stop in the trip, counted from its first."},"stop_occurrence_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stop Occurrence Index","description":"Which visit this is, for a stop the trip serves more than once."}},"type":"object","required":["stop_sequence","information"],"title":"StopInfoSchema","description":"A message the operator attaches to one stop of the trip."},"pysae__api__trip_updates__schemas__ValidationStatus":{"type":"string","enum":["valid","error"],"title":"ValidationStatus","description":"Whether every active modification still applies to the target GTFS."},"pysae__api__trips__v4__schemas__Coordinates":{"prefixItems":[{"type":"number"},{"type":"number"}],"type":"array","maxItems":2,"minItems":2,"description":"A point of an itinerary, serialized as a `[latitude, longitude]` pair."},"pysae__api__trips__v4__schemas__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."},"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__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."},"pysae__api__trips__v4__schemas__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."},"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","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__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","vehicle"],"title":"Role Needed","description":"Roles that would have granted the call.","default":["admin","vehicle"]}},"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":["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__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","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__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","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__15":{"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__16":{"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":["operator","regulator","technical","admin"],"title":"Role Needed","description":"Roles that would have granted the call.","default":["operator","regulator","technical","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__17":{"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":["technical","admin"],"title":"Role Needed","description":"Roles that would have granted the call.","default":["technical","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__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":["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__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","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__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":["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__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","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__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":["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__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","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__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":["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__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__100":{"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__101":{"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__102":{"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__16","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__103":{"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__16","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__104":{"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__16","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__105":{"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__106":{"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__17","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__107":{"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__108":{"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__109":{"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__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__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__110":{"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__111":{"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__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__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__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__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__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__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__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__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__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__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__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__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__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__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__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__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__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__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__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__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__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__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__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__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__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__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__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__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__27":{"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__28":{"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__29":{"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__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__30":{"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__31":{"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__32":{"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__33":{"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__34":{"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__35":{"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__36":{"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__37":{"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__38":{"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__39":{"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__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__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__40":{"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__41":{"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__42":{"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__43":{"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__44":{"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__45":{"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__46":{"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__47":{"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__48":{"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__49":{"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__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__50":{"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__51":{"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__52":{"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__53":{"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__54":{"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__55":{"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__56":{"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__57":{"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__58":{"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__59":{"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__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__60":{"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__61":{"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__62":{"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__63":{"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__64":{"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__65":{"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__66":{"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__67":{"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__68":{"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__69":{"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__70":{"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__71":{"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__72":{"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__73":{"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__74":{"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__75":{"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__76":{"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__15","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__77":{"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__78":{"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__79":{"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__15","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__80":{"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__81":{"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__82":{"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__83":{"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__84":{"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__85":{"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__86":{"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__87":{"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__88":{"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__89":{"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__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__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__90":{"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__91":{"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__92":{"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__93":{"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__94":{"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__95":{"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__96":{"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__97":{"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__98":{"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__99":{"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"}},"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":"groups","description":"The operated network, and the scope of nearly every call. A group owns its data, its published GTFS and its operating settings."},{"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":"password","description":"Setting and resetting the password of a user account."},{"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":"frequencies","description":"Service described by a headway over a time span rather than by exact times, for a route running often enough not to be timetabled."},{"name":"planning","description":"The forecast assignment of resources to trips: which driver and which vehicle operate which trip, on which date."},{"name":"hastus","description":"Import of planning produced by the Hastus scheduling system."},{"name":"cadencity","description":"Import of planning produced by the Cadencity system."},{"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":"duty-checklist","description":"The checks a driver fills in when signing on or off — vehicle condition, cleanliness, faults observed. Their composition is set per group."},{"name":"trip-events","description":"Timestamped facts that occurred during a trip: passing a stop, departure, arrival, a change of state."},{"name":"trip-updates","description":"Gaps against the schedule decided by the operator: a stop skipped, moved or added, a trip diverted or cancelled."},{"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":"current-trip","description":"The trip a device is operating right now, as the Pysae Driver app reads and updates it."},{"name":"trip-filter","description":"What restricts the trips a device is offered, so a driver is shown their own service rather than the whole day."},{"name":"trip-complementary-infos","description":"Free-form notes attached to a trip or to one of its stops, for what the schedule cannot carry."},{"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":"location","description":"Positions reported by the devices, and the metadata qualifying how they were obtained."},{"name":"location-metadata","description":"How a reported position was obtained — accuracy, source, and the state of the device that produced it."},{"name":"simulations","description":"Replays of recorded activity, used to exercise the chain without a vehicle on the road."},{"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":"qrcodes","description":"QR codes a driver scans to identify a vehicle or a stop."},{"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":"archival-configuration","description":"How long a group's data stays queryable live, and how it is archived past that."},{"name":"anonymisation","description":"Removal of the personal data a group no longer needs to keep, applied against its retention period."},{"name":"integration","description":"Third-party systems a group exchanges data with — ticketing, passenger information, counting, telephony — and the on-board equipment the Pysae Driver app drives."},{"name":"nocrates","description":"Rides booked in the Nocrates demand-responsive transport system."},{"name":"rail","description":"Rail departures shown alongside the network's own service, and the stops attached to a rail station."},{"name":"exports","description":"Long-running exports produced in the background and fetched once ready."},{"name":"config","description":"Settings of a group, read and written section by section."},{"name":"admin","description":"Platform administration, reserved to Pysae operators: caches, maintenance and inspection."},{"name":"system-metadata","description":"What the platform reports about itself."},{"name":"session-counters","description":"Counters following the sessions open on a group."},{"name":"rum-configuration","description":"How much real-user monitoring the Pysae applications report."},{"name":"ndp","description":"Endpoints serving the Pysae Driver app. They are hosted on a dedicated deployment sized for the volume the app produces."},{"name":"version-driver-check","description":"Whether a reported Pysae Driver version is still allowed to operate."},{"name":"vehicles-data","description":"Vehicle reference data as the Pysae Driver app reads it."},{"name":"vehicles-location","description":"Vehicle positions as the Pysae Driver app reports them."}],"servers":[{"url":"https://api.pysae.com","description":"prod"}]}