{"openapi":"3.0.2","info":{"title":"Pavement Conditions API","version":"2.0.2","description":"The Pavement Conditions API v2 offers users pavement temperature and condition details for road segments in a specified area with enhanced GeoJSON support and pagination. DTN supplies road data on segments across North America and Europe, allowing users to request data for a geographic area or specific roadway within the database.\n\n**What's New in v2.0.2:**\n- Route Generation \n \n — A new `GET /v2/directions` endpoint generates route geometry via the Mapbox Directions API.\n\n- Query Pavement Conditions Along a Route or Route-Based Filtering (RB Filter)\n\n - Pavement data can be filtered using either `startPoint` and `endPoint` coordinates or a GeoJSON geometry provided in the request body.\n - When `startPoint` and `endPoint` are supplied to the `v2/logistics` or `v2/pavement/conditions` endpoints, a route is automatically generated internally via the Mapbox API.\n - Pagination is determined by the number of route `segments` when RB Filter is active.\n - Each paginated response includes a `statistics` object summarizing covered, uncovered, and total segment counts.\n - Results may be optionally narrowed by a weather `parameter` filter.\n - Results may also be optionally narrowed by Estimated Time of Arrival (`etaFilter`).\n\n- Added pavementValidEndTime in returned data\n\n**Authentication**: This API uses Bearer token authentication. When obtaining your access token, use the following audience values:\n- **Production**: `https://pavement-condition.prd.wx.zones.dtn.com`\n- **Staging**: `https://pavement-condition.stg.wx.zones.dtn.com`","contact":{"name":"Ben Hershey","url":"https://pavement-condition.prd.wx.zones.dtn.com","email":"ben.hershey@dtn.com"}},"servers":[{"url":"https://pavement-condition.prd.wx.zones.dtn.com/v2","description":"Production server"},{"url":"https://pavement-condition.stg.wx.zones.dtn.com/v2","description":"Staging server"}],"tags":[{"name":"Parameters","description":"Parameter metadata endpoints"},{"name":"Pavement Conditions","description":"Pavement condition data endpoints"},{"name":"Logistics","description":"Logistics-focused pavement data endpoints"},{"name":"Directions","description":"Cacheable route geometry endpoints (Mapbox Directions API)"},{"name":"Health","description":"Service health endpoints"}],"paths":{"/parameters":{"get":{"tags":["Parameters"],"summary":"Get Parameters","description":"Retrieves parameter details for v2 API. If the `name` query parameter is empty, it returns all parameters.\n**v2 includes pagination parameters**: total, limit, page, nextOffset\n\n| Variable Name | Description | Imperial Unit | Metric Unit |\n| ------------- | ----------- | ------------- | ----------- |\n| total | Total number of records available inside the BBox | N/A | N/A |\n| limit | Maximum number of records per page | N/A | N/A |\n| page | Current page number | N/A | N/A |\n| nextOffset | Offset for the next page of results | N/A | N/A |\n| id | Database table primary key ID | N/A | N/A |\n| segmentId | Road segment identifier (string) | N/A | N/A |\n| lat | Latitude for center point of road segment | Degrees | Degrees |\n| lon | Longitude for center point of road segment | Degrees | Degrees |\n| timestamp | Date/time for when the output variables are valid (UTC) - Use this for assigning time to the output | N/A | N/A |\n| pavementCreationTime | Date/time when the pavement model was run (UTC) | N/A | N/A |\n| pavementValidTime | Date/time for when the output variables are valid (UTC) | N/A | N/A |\n| pavementValidEndTime | Date/time for when the pavement forecast validity period ends (UTC) | N/A | N/A |\n| airTemp | Air temperature | Fahrenheit | Celsius |\n| visibility | Visibility distance | mi | km |\n| windDirection | Wind direction relative to true North (range from 0 to 360) | Degrees | Degrees |\n| windGust | Wind gust speed | mi/hr | km/hr |\n| windSpeed | Wind speed | mi/hr | km/hr |\n| iceRate | Ice precipitation rate | in/hr | mm/hr |\n| liquidRate | Liquid precipitation rate | in/hr | mm/hr |\n| snowRate | Snow precipitation rate | in/hr | mm/hr |\n| mobilityIndex | Mobility of vehicles compared to expected traffic patterns (100% mobility means traffic movement is expected to be unaffected by the conditions) - Same as in MDSS | Percent | Percent |\n| pavementTemperature | Temperature of the road surface | Fahrenheit | Celsius |\n| blowingSnowAlertLevel | Level of blowing snow intensity (2 - Lowest, 5 - Highest) | N/A | N/A |\n| compactedSnowDepth | Depth of compacted snow on the road | in | mm |\n| frostDepth | Depth of frost on the road | in | mm |\n| iceDepth | Depth of ice on the road | in | mm |\n| liquidDepth | Depth of liquid on the road | in | mm |\n| snowDepth | Depth of snow on the road | in | mm |\n| unbondedIceDepth | Depth of ice on the road that is not bonded to the road surface | in | mm |\n| pavementCondition | Classification of the road condition. Possible conditions are dry, slush, chemical_wet, damp, wet, frost, ice, snow, compacted_snow - Same as in MDSS | N/A | N/A |\n| crashRiskIndex | Crash risk factor compared to average conditions (ex: 2.0 means the risk of crash is two times the average) | N/A | N/A |\n| crashRiskUncertainty | One standard deviation on the crash risk factor (statistical error) | N/A | N/A |\n| geometry | Array of coordinate pairs representing the road geometry | N/A | N/A |\n| osmClass | OpenStreetMap road classification (e.g., motorway, trunk, primary) | N/A | N/A |\n| roadName | Name of the road or highway | N/A | N/A |\n| createdAt | Record creation timestamp | N/A | N/A |\n| updatedAt | Record last update timestamp | N/A | N/A |\n","operationId":"getParametersV2","parameters":[{"name":"name","in":"query","description":"Name of the parameter to retrieve","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response - returns parameter details including pagination parameters.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Parameter"}},"examples":{"parameters":{"value":[{"name":"total","unit":"N/A","imperial_unit":"N/A","type":"integer","precision":"N/A","description":"Total number of records available inside the BBox","notes":""},{"name":"pavementTemperature","unit":"Fahrenheit","imperial_unit":"Celsius","type":"float","precision":14,"description":"Temperature of the road surface","notes":""}]}}}}},"204":{"description":"No matching parameter found.","content":{"application/json":{}}},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"}},"security":[{"clientCredentials":[]}]}},"/pavement/conditions":{"get":{"tags":["Pavement Conditions"],"summary":"Get Pavement Conditions","description":"Retrieves pavement conditions for road segments in GeoJSON FeatureCollection format. Returns up to 1000 records by default.\nData is grouped by segment ID with pagination metadata included in the response.\n\n**Query modes:**\n- By bounding box (`bbox`) — returns all segments within the area\n- By route (`startPoint` + `endPoint`) — uses Mapbox Directions API to generate a route, then returns segments along it\n\n**Filtering options:**\n- Pavement data can be filtered using either `startPoint` and `endPoint` coordinates or a bounding box (`bbox`).\n - Results may be optionally narrowed by a weather `parameter` filter.\n - Results may also be optionally narrowed by Estimated Time of Arrival (`etaFilter`).\n\n**Return Data:**\n\n| Field Name | Description | Imperial Unit | Metric Unit |\n| ---------- | ----------- | ------------- | ----------- |\n| id | Database table primary key ID | N/A | N/A |\n| segmentId | Road segment identifier (string) | N/A | N/A |\n| lat | Latitude for center point of road segment | Degrees | Degrees |\n| lon | Longitude for center point of road segment | Degrees | Degrees |\n| timestamp | Date/time for when the output variables are valid (UTC) | N/A | N/A |\n| pavementCreationTime | Date/time when the pavement model was run (UTC) | N/A | N/A |\n| pavementValidTime | Date/time for when the output variables are valid (UTC) | N/A | N/A |\n| pavementValidEndTime | Date/time for when the pavement forecast validity period ends (UTC) | N/A | N/A |\n| airTemp | Air temperature | Fahrenheit | Celsius |\n| visibility | Visibility distance | mi | km |\n| windDirection | Wind direction relative to true North (range from 0 to 360) | Degrees | Degrees |\n| windGust | Wind gust speed | mi/hr | km/hr |\n| windSpeed | Wind speed | mi/hr | km/hr |\n| iceRate | Ice precipitation rate | in/hr | mm/hr |\n| liquidRate | Liquid precipitation rate | in/hr | mm/hr |\n| snowRate | Snow precipitation rate | in/hr | mm/hr |\n| mobilityIndex | Mobility of vehicles compared to expected traffic patterns (100% mobility means traffic movement is expected to be unaffected by the conditions) | Percent | Percent |\n| pavementTemperature | Temperature of the road surface | Fahrenheit | Celsius |\n| blowingSnowAlertLevel | Level of blowing snow intensity (2 - Lowest, 5 - Highest) | N/A | N/A |\n| compactedSnowDepth | Depth of compacted snow on the road | in | mm |\n| frostDepth | Depth of frost on the road | in | mm |\n| iceDepth | Depth of ice on the road | in | mm |\n| liquidDepth | Depth of liquid on the road | in | mm |\n| snowDepth | Depth of snow on the road | in | mm |\n| unbondedIceDepth | Depth of ice on the road that is not bonded to the road surface | in | mm |\n| pavementCondition | Classification of the road condition. Possible conditions are dry, slush, chemical_wet, damp, wet, frost, ice, snow, compacted_snow | N/A | N/A |\n| crashRiskIndex | Crash risk factor compared to average conditions (ex: 2.0 means the risk of crash is two times the average) | N/A | N/A |\n| crashRiskUncertainty | One standard deviation on the crash risk factor (statistical error) | N/A | N/A |\n| roadName | Name of the road or highway | N/A | N/A |\n| osmClass | OpenStreetMap road classification (e.g., motorway, trunk, primary) | N/A | N/A |\n| geometry | GeoJSON geometry representing the road segment (LineString or MultiLineString) | N/A | N/A |\n| createdAt | Record creation timestamp | N/A | N/A |\n| updatedAt | Record last update timestamp | N/A | N/A |\n\n**Sample Requests:**\n\n1. **Get default data (1000 records):**\n ```\n GET /v2/pavement/conditions\n ```\n\n2. **Get data for specific geographic area (US):**\n ```\n GET /v2/pavement/conditions?bbox=-156.1317111,19.6270521,-155.9317111,19.8270521\n ```\n\n3. **Get data for European area:**\n ```\n GET /v2/pavement/conditions?bbox=3.555,49.470,6.262,50.849\n ```\n\n4. **Get specific page:**\n ```\n GET /v2/pavement/conditions?bbox=-156.1317111,19.6270521,-155.9317111,19.8270521&limit=1000&page=2\n ```\n\n5. **Filter by time range:**\n ```\n GET /v2/pavement/conditions?bbox=-156.1317111,19.6270521,-155.9317111,19.8270521&startTime=2025-12-04T20:00:00.000Z&endTime=2025-12-05T20:00:00.000Z\n ```\n\n6. **Get data in metric units:**\n ```\n GET /v2/pavement/conditions?units=metric\n ```\n\n7. **Route-based filtering with departure time:**\n ```\n GET /v2/pavement/conditions?startPoint=-93.3905,45.1310&endPoint=-93.2695,45.1420&departAt=2026-03-13T15:00:00.000Z\n ```\n\n8. **Route-based filtering with arrival time:**\n ```\n GET /v2/pavement/conditions?startPoint=-93.3905,45.1310&endPoint=-93.2695,45.1420&arriveAt=2026-03-13T16:00:00.000Z\n ```\n\n9. **Route-based with ETA filter (single forecast per segment):**\n ```\n GET /v2/pavement/conditions?startPoint=-93.3905,45.1310&endPoint=-93.2695,45.1420&departAt=2026-03-13T15:00:00.000Z&etaFilter=true\n ```\n\n10. **Route-based with parameter filter:**\n ```\n GET /v2/pavement/conditions?startPoint=-93.3905,45.1310&endPoint=-93.2695,45.1420&departAt=2026-03-13T15:00:00.000Z¶meter=crashRiskIndex,mobilityIndex\n ```\n","operationId":"getPavementConditionsV2","parameters":[{"name":"bbox","in":"query","description":"Bounding box coordinates to filter results by geographic area.\nFormat: `minLongitude,minLatitude,maxLongitude,maxLatitude`\n","required":false,"schema":{"type":"string"},"example":"-156.1317111,19.6270521,-155.9317111,19.8270521"},{"name":"limit","in":"query","description":"Maximum number of records to return. Default is 1000.","required":false,"schema":{"type":"integer","default":1000},"example":1000},{"name":"page","in":"query","description":"Page number for pagination. Default is 1.","required":false,"schema":{"type":"integer","default":1},"example":1},{"name":"startTime","in":"query","description":"Filter records with timestamp greater than or equal to this value.\nFormat: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)\n","required":false,"schema":{"type":"string","format":"date-time"},"example":"2025-12-04T20:00:00.000Z"},{"name":"endTime","in":"query","description":"Filter records with timestamp less than or equal to this value.\nFormat: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)\n","required":false,"schema":{"type":"string","format":"date-time"},"example":"2025-12-05T20:00:00.000Z"},{"name":"units","in":"query","description":"Unit system for response values. Default is imperial.","required":false,"schema":{"type":"string","enum":["metric","imperial"],"default":"imperial"},"example":"imperial"},{"name":"startPoint","in":"query","description":"Starting point coordinates for Mapbox route generation.\nFormat: `longitude,latitude`\n","required":false,"schema":{"type":"string"},"example":"-93.3905,45.1310"},{"name":"endPoint","in":"query","description":"Ending point coordinates for Mapbox route generation.\nFormat: `longitude,latitude`\n","required":false,"schema":{"type":"string"},"example":"-93.2695,45.1420"},{"name":"departAt","in":"query","description":"Departure time for the route. Mutually exclusive with `arriveAt`.\nWhen provided, the response includes per-feature `arrivalTime` and top-level `properties.arrivalTimeUTC`.\nFormat: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)\n","required":false,"schema":{"type":"string","format":"date-time"},"example":"2026-03-13T15:00:00.000Z"},{"name":"arriveAt","in":"query","description":"Desired arrival time at the destination. Mutually exclusive with `departAt`.\nWhen provided, the response includes per-feature `departureTime` and top-level `properties.departureTimeUTC`.\nFormat: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)\n","required":false,"schema":{"type":"string","format":"date-time"},"example":"2026-03-13T16:00:00.000Z"},{"name":"bufferMeters","in":"query","description":"Buffer distance in meters around the route for spatial query. Default is 5.","required":false,"schema":{"type":"integer","default":5},"example":5},{"name":"etaFilter","in":"query","description":"When true, filters condition data to only return the record matching the segment's arrival time window.\nRequires `departAt` and either `startPoint`/`endPoint` or duration in body.\n","required":false,"schema":{"type":"boolean","default":false},"example":true},{"name":"parameter","in":"query","description":"Comma-separated list of field names to include in the response data.\nWhen provided, only the specified fields are returned per condition record.\nUse the /v2/parameters endpoint to see valid options.\n","required":false,"schema":{"type":"string"},"example":"crashRiskIndex,mobilityIndex"}],"responses":{"200":{"description":"Successful response with GeoJSON FeatureCollection and pagination metadata.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PavementConditionsResponse"},"examples":{"pavementConditions":{"value":{"pagination":{"total":26496,"limit":10,"nextOffset":10},"geojson":{"type":"FeatureCollection","features":[{"type":"Feature","id":"SL-100727058","geometry":{"type":"MultiLineString","coordinates":[[[5.0157406,49.7305403],[5.0144574,49.7288971],[5.0137122,49.7278154]],[[4.9970947,49.6874619],[4.9966223,49.6868132],[4.9960744,49.6862484]]]},"properties":{"segmentId":"SL-100727058","roadName":null,"osmClass":"R-N-58-000","data":[{"id":6638317100,"lat":49.70771017429127,"lon":5.0404408386138515,"timestamp":"2026-06-14T15:00:00.000Z","pavementCreationTime":"2026-06-15T15:39:49.000Z","pavementValidTime":"2026-06-14T15:00:00.000Z","pavementValidEndTime":"2026-06-14T16:00:00.000Z","airTemp":19.05,"visibility":36.04,"windDirection":309,"windGust":34.92,"windSpeed":15.84,"iceRate":0,"liquidRate":0,"snowRate":0,"mobilityIndex":100,"pavementTemperature":34.69,"blowingSnowAlertLevel":2,"compactedSnowDepth":0,"frostDepth":0,"iceDepth":0,"liquidDepth":0,"snowDepth":0,"unbondedIceDepth":0,"pavementCondition":"dry","crashRiskIndex":0.97,"crashRiskUncertainty":0,"createdAt":"2026-06-15T15:53:04.676Z","updatedAt":"2026-06-15T15:53:04.676Z"}]}}]}}}}}}},"400":{"description":"Bad Request - Invalid units parameter","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}},"example":{"error":"Invalid unit. Allowed values are \"metric\" or \"imperial\"."}}}},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"503":{"description":"Service Unavailable - Data partition temporarily unavailable for the requested region.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"service-unavailable","title":"Backend or Database Unavailable","status":503,"detail":"No active partition available for domain: EuropeV2. No metadata entry found for key=active_folder_EuropeV2","instance":"urn:dtn:one-transport-api:/v2/pavement/conditions:requestId:b0d7ac21-459c-45a5-ab6f-e09cea96cf9e","error":"No metadata entry found for key=active_folder_EuropeV2"}}}}},"security":[{"clientCredentials":[]}]},"post":{"tags":["Pavement Conditions"],"summary":"Get Pavement Conditions by Route","description":"Retrieves pavement conditions along a route in GeoJSON FeatureCollection format.\nSupports two modes:\n\n**Option 1 - Mapbox waypoints (query params):**\nProvide `startPoint` and `endPoint` to automatically generate a route via Mapbox Directions API.\nOptionally provide `departAt` or `arriveAt` (mutually exclusive) for per-segment timing.\n\n**Option 2 - Direct route (body):**\nProvide a GeoJSON LineString or FeatureCollection in the request body.\n\n**Filtering options:**\n- Pavement data can be filtered using either `startPoint` and `endPoint` coordinates or a GeoJSON geometry provided in the request body.\n - Results may be optionally narrowed by a weather `parameter` filter.\n - Results may also be optionally narrowed by Estimated Time of Arrival (`etaFilter`).\n\nQuery parameters take priority over the request body when both are provided.\n\n**Timing behavior:**\n- When `departAt` is provided: each feature includes `arrivalTime` and the response includes `properties.arrivalTimeUTC` (departAt + route duration)\n- When `arriveAt` is provided: each feature includes `departureTime` and the response includes `properties.departureTimeUTC` (arriveAt - route duration)\n\n**Sample Requests:**\n\n1. **Route via Mapbox with departure time:**\n ```\n POST /v2/pavement/conditions?startPoint=-93.3905,45.1310&endPoint=-93.2695,45.1420&departAt=2026-03-13T15:00:00.000Z\n ```\n\n2. **Route via Mapbox with arrival time:**\n ```\n POST /v2/pavement/conditions?startPoint=-93.3905,45.1310&endPoint=-93.2695,45.1420&arriveAt=2026-03-13T16:00:00.000Z\n ```\n\n3. **Direct route via body:**\n ```\n POST /v2/pavement/conditions\n Body: { \"type\": \"LineString\", \"coordinates\": [[-93.39, 45.13], [-93.27, 45.14]] }\n ```\n","operationId":"getConditionsByRoute","parameters":[{"name":"departAt","in":"query","description":"Departure time for the route. Mutually exclusive with `arriveAt`.\nWhen provided, the response includes per-feature `arrivalTime` and top-level `properties.arrivalTimeUTC`.\nFormat: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)\n","required":false,"schema":{"type":"string","format":"date-time"},"example":"2026-03-13T15:00:00.000Z"},{"name":"arriveAt","in":"query","description":"Desired arrival time at the destination. Mutually exclusive with `departAt`.\nWhen provided, the response includes per-feature `departureTime` and top-level `properties.departureTimeUTC`.\nFormat: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)\n","required":false,"schema":{"type":"string","format":"date-time"},"example":"2026-03-13T16:00:00.000Z"},{"name":"bufferMeters","in":"query","description":"Buffer distance in meters around the route for spatial query. Default is 5.","required":false,"schema":{"type":"integer","default":5},"example":5},{"name":"limit","in":"query","description":"Maximum number of records to return. Default is 100 for route-based requests.\nMaximum allowed is 300 for route-based requests.\n","required":false,"schema":{"type":"integer","default":100,"maximum":300},"example":100},{"name":"page","in":"query","description":"Page number for pagination. Default is 1.","required":false,"schema":{"type":"integer","default":1},"example":1},{"name":"startTime","in":"query","description":"Filter records with timestamp greater than or equal to this value.\nFormat: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)\n","required":false,"schema":{"type":"string","format":"date-time"},"example":"2025-12-04T20:00:00.000Z"},{"name":"endTime","in":"query","description":"Filter records with timestamp less than or equal to this value.\nFormat: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)\n","required":false,"schema":{"type":"string","format":"date-time"},"example":"2025-12-05T20:00:00.000Z"},{"name":"units","in":"query","description":"Unit system for response values. Default is imperial.","required":false,"schema":{"type":"string","enum":["metric","imperial"],"default":"imperial"},"example":"imperial"},{"name":"etaFilter","in":"query","description":"When true, filters condition data to only return the record matching the segment's arrival time window.\nRequires `departAt` and either `startPoint`/`endPoint` or duration in body.\n","required":false,"schema":{"type":"boolean","default":false},"example":true},{"name":"parameter","in":"query","description":"Comma-separated list of field names to include in the response data.\nWhen provided, only the specified fields are returned per condition record.\nUse the /v2/parameters endpoint to see valid options.\n","required":false,"schema":{"type":"string"},"example":"crashRiskIndex,mobilityIndex"}],"requestBody":{"description":"GeoJSON route geometry. Required when `startPoint`/`endPoint` query params are not provided.\nAccepts a LineString or FeatureCollection with LineString features.\n","required":false,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/LineStringRoute"},{"$ref":"#/components/schemas/FeatureCollectionRoute"}]},"examples":{"lineString":{"summary":"LineString route","value":{"type":"LineString","coordinates":[[-93.3905,45.131],[-93.35,45.135],[-93.2695,45.142]]}},"featureCollection":{"summary":"FeatureCollection route","value":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"LineString","coordinates":[[-93.3905,45.131],[-93.2695,45.142]]}}]}}}}}},"responses":{"200":{"description":"Successful response with GeoJSON FeatureCollection, pagination metadata, and route timing properties.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteConditionsResponse"},"examples":{"departAtResponse":{"summary":"Response with departAt (shows arrivalTimeUTC)","value":{"pagination":{"total":50,"limit":1000,"nextOffset":50},"geojson":{"type":"FeatureCollection","features":[{"type":"Feature","id":40341366,"geometry":{"type":"LineString","coordinates":[[-93.3905,45.131],[-93.35,45.135]]},"properties":{"routeId":40341366,"roadName":"I-94","osmClass":"motorway","arrivalTime":"2026-03-13T15:05:00.000Z","data":[{"id":1001,"lat":45.131,"lon":-93.3905,"timestamp":"2026-03-13T15:00:00.000Z","airTemp":32.5,"pavementCondition":"wet"}]}}]},"properties":{"arrivalTimeUTC":"2026-03-13T15:30:00.000Z"}}},"arriveAtResponse":{"summary":"Response with arriveAt (shows departureTimeUTC)","value":{"pagination":{"total":50,"limit":1000,"nextOffset":50},"geojson":{"type":"FeatureCollection","features":[{"type":"Feature","id":40341366,"geometry":{"type":"LineString","coordinates":[[-93.3905,45.131],[-93.35,45.135]]},"properties":{"routeId":40341366,"roadName":"I-94","osmClass":"motorway","departureTime":"2026-03-13T15:25:00.000Z","data":[{"id":1001,"lat":45.131,"lon":-93.3905,"timestamp":"2026-03-13T15:00:00.000Z","airTemp":32.5,"pavementCondition":"wet"}]}}]},"properties":{"departureTimeUTC":"2026-03-13T15:00:00.000Z"}}}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}},"examples":{"mutuallyExclusive":{"value":{"error":"Cannot use both departAt and arriveAt"}},"invalidBody":{"value":{"error":"Body must be a LineString or FeatureCollection"}},"invalidDepartureTime":{"value":{"error":"'departureTime' is not a valid parameter. Use 'departAt' instead."}}}}}},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"description":"No conditions found along the route","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}},"example":{"error":"No conditions found along route(s)"}}}},"502":{"description":"Bad Gateway - External service (Mapbox) failure or unreachable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service Unavailable - Data partition temporarily unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"clientCredentials":[]}]}},"/logistics":{"get":{"tags":["Logistics"],"summary":"Get Logistics Data","description":"Retrieves logistics-focused pavement data in GeoJSON FeatureCollection format. Returns up to 1000 records by default.\nData is grouped by segment ID with pagination metadata included in the response.\n\n**Query modes:**\n- By bounding box (`bbox`) — returns all segments within the area\n- By route (`startPoint` + `endPoint`) — uses Mapbox Directions API to generate a route, then returns segments along it\n\n**Filtering options:**\n- Pavement data can be filtered using either `startPoint` and `endPoint` coordinates or a bounding box (`bbox`).\n - Results may be optionally narrowed by a weather `parameter` filter.\n - Results may also be optionally narrowed by Estimated Time of Arrival (`etaFilter`).\n\n**Return Data:**\n\n| Field Name | Description | Imperial Unit | Metric Unit |\n| ---------- | ----------- | ------------- | ----------- |\n| id | Database table primary key ID | N/A | N/A |\n| segmentId | Road segment identifier (string) | N/A | N/A |\n| lat | Latitude for center point of road segment | Degrees | Degrees |\n| lon | Longitude for center point of road segment | Degrees | Degrees |\n| timestamp | Date/time for when the output variables are valid (UTC) | N/A | N/A |\n| pavementCreationTime | Date/time when the pavement model was run (UTC) | N/A | N/A |\n| pavementValidTime | Date/time for when the output variables are valid (UTC) | N/A | N/A |\n| pavementValidEndTime | Date/time for when the pavement forecast validity period ends (UTC) | N/A | N/A |\n| airTemp | Air temperature | Fahrenheit | Celsius |\n| visibility | Visibility distance | mi | km |\n| windDirection | Wind direction relative to true North (range from 0 to 360) | Degrees | Degrees |\n| windGust | Wind gust speed | mi/hr | km/hr |\n| windSpeed | Wind speed | mi/hr | km/hr |\n| iceRate | Ice precipitation rate | in/hr | mm/hr |\n| liquidRate | Liquid precipitation rate | in/hr | mm/hr |\n| snowRate | Snow precipitation rate | in/hr | mm/hr |\n| pavementTemperature | Temperature of the road surface | Fahrenheit | Celsius |\n| pavementCondition | Classification of the road condition. Possible conditions are dry, slush, chemical_wet, damp, wet, frost, ice, snow, compacted_snow | N/A | N/A |\n| crashRiskIndex | Crash risk factor compared to average conditions (ex: 2.0 means the risk of crash is two times the average) | N/A | N/A |\n| crashRiskUncertainty | One standard deviation on the crash risk factor (statistical error) | N/A | N/A |\n| roadName | Name of the road or highway | N/A | N/A |\n| osmClass | OpenStreetMap road classification (e.g., motorway, trunk, primary) | N/A | N/A |\n| geometry | GeoJSON geometry representing the road segment (LineString or MultiLineString) | N/A | N/A |\n| createdAt | Record creation timestamp | N/A | N/A |\n| updatedAt | Record last update timestamp | N/A | N/A |\n\n**Sample Requests:**\n\n1. **Get default data (1000 records):**\n ```\n GET /v2/logistics\n ```\n\n2. **Get data for specific geographic area (US):**\n ```\n GET /v2/logistics?bbox=-156.1317111,19.6270521,-155.9317111,19.8270521\n ```\n\n3. **Get data for European area:**\n ```\n GET /v2/logistics?bbox=3.555,49.470,6.262,50.849\n ```\n\n3. **Get specific page:**\n ```\n GET /v2/logistics?bbox=-156.1317111,19.6270521,-155.9317111,19.8270521&limit=1000&page=2\n ```\n\n4. **Filter by time range:**\n ```\n GET /v2/logistics?bbox=-156.1317111,19.6270521,-155.9317111,19.8270521&startTime=2025-12-04T20:00:00.000Z&endTime=2025-12-05T20:00:00.000Z\n ```\n\n5. **Get data in metric units:**\n ```\n GET /v2/logistics?units=metric\n ```\n\n6. **Route-based filtering with departure time:**\n ```\n GET /v2/logistics?startPoint=-93.3905,45.1310&endPoint=-93.2695,45.1420&departAt=2026-03-13T15:00:00.000Z\n ```\n\n7. **Route-based filtering with arrival time:**\n ```\n GET /v2/logistics?startPoint=-93.3905,45.1310&endPoint=-93.2695,45.1420&arriveAt=2026-03-13T16:00:00.000Z\n ```\n\n8. **Route-based with ETA filter (single forecast per segment):**\n ```\n GET /v2/logistics?startPoint=-93.3905,45.1310&endPoint=-93.2695,45.1420&departAt=2026-03-13T15:00:00.000Z&etaFilter=true\n ```\n\n9. **Route-based with parameter filter:**\n ```\n GET /v2/logistics?startPoint=-93.3905,45.1310&endPoint=-93.2695,45.1420&departAt=2026-03-13T15:00:00.000Z¶meter=crashRiskIndex,mobilityIndex\n ```\n","operationId":"getLogisticsV2","parameters":[{"name":"bbox","in":"query","description":"Bounding box coordinates to filter results by geographic area.\nFormat: `minLongitude,minLatitude,maxLongitude,maxLatitude`\n","required":false,"schema":{"type":"string"},"example":"-156.1317111,19.6270521,-155.9317111,19.8270521"},{"name":"limit","in":"query","description":"Maximum number of records to return. Default is 1000.","required":false,"schema":{"type":"integer","default":1000},"example":1000},{"name":"page","in":"query","description":"Page number for pagination. Default is 1.","required":false,"schema":{"type":"integer","default":1},"example":1},{"name":"startTime","in":"query","description":"Filter records with timestamp greater than or equal to this value.\nFormat: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)\n","required":false,"schema":{"type":"string","format":"date-time"},"example":"2025-12-04T20:00:00.000Z"},{"name":"endTime","in":"query","description":"Filter records with timestamp less than or equal to this value.\nFormat: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)\n","required":false,"schema":{"type":"string","format":"date-time"},"example":"2025-12-05T20:00:00.000Z"},{"name":"units","in":"query","description":"Unit system for response values. Default is imperial.","required":false,"schema":{"type":"string","enum":["metric","imperial"],"default":"imperial"}},{"name":"startPoint","in":"query","description":"Starting point coordinates for Mapbox route generation.\nFormat: `longitude,latitude`\n","required":false,"schema":{"type":"string"},"example":"-93.3905,45.1310"},{"name":"endPoint","in":"query","description":"Ending point coordinates for Mapbox route generation.\nFormat: `longitude,latitude`\n","required":false,"schema":{"type":"string"},"example":"-93.2695,45.1420"},{"name":"departAt","in":"query","description":"Departure time for the route. Mutually exclusive with `arriveAt`.\nWhen provided, the response includes per-feature `arrivalTime` and top-level `properties.arrivalTimeUTC`.\nFormat: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)\n","required":false,"schema":{"type":"string","format":"date-time"},"example":"2026-03-13T15:00:00.000Z"},{"name":"arriveAt","in":"query","description":"Desired arrival time at the destination. Mutually exclusive with `departAt`.\nWhen provided, the response includes per-feature `departureTime` and top-level `properties.departureTimeUTC`.\nFormat: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)\n","required":false,"schema":{"type":"string","format":"date-time"},"example":"2026-03-13T16:00:00.000Z"},{"name":"bufferMeters","in":"query","description":"Buffer distance in meters around the route for spatial query. Default is 5.","required":false,"schema":{"type":"integer","default":5},"example":5},{"name":"etaFilter","in":"query","description":"When true, filters condition data to only return the record matching the segment's arrival time window.\nRequires `departAt` and either `startPoint`/`endPoint` or duration in body.\n","required":false,"schema":{"type":"boolean","default":false},"example":true},{"name":"parameter","in":"query","description":"Comma-separated list of field names to include in the response data.\nWhen provided, only the specified fields are returned per condition record.\nUse the /v2/parameters endpoint to see valid options.\n","required":false,"schema":{"type":"string"},"example":"crashRiskIndex,mobilityIndex"}],"responses":{"200":{"description":"Successful response with GeoJSON FeatureCollection and pagination metadata.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogisticsResponse"}}}},"400":{"description":"Bad Request - Invalid units parameter","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}},"example":{"error":"Invalid unit. Allowed values are \"metric\" or \"imperial\"."}}}},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"503":{"description":"Service Unavailable - Data partition temporarily unavailable for the requested region.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"service-unavailable","title":"Backend or Database Unavailable","status":503,"detail":"No active partition available for domain: EuropeV2. No metadata entry found for key=active_folder_EuropeV2","instance":"urn:dtn:one-transport-api:/v2/logistics:requestId:b0d7ac21-459c-45a5-ab6f-e09cea96cf9e","error":"No metadata entry found for key=active_folder_EuropeV2"}}}}},"security":[{"clientCredentials":[]}]},"post":{"tags":["Logistics"],"summary":"Get Logistics Data by Route","description":"Retrieves logistics-focused pavement data along a route in GeoJSON FeatureCollection format.\nSupports two modes:\n\n**Option 1 - Mapbox waypoints (query params):**\nProvide `startPoint` and `endPoint` to automatically generate a route via Mapbox Directions API.\nOptionally provide `departAt` or `arriveAt` (mutually exclusive) for per-segment timing.\n\n**Option 2 - Direct route (body):**\nProvide a GeoJSON LineString or FeatureCollection in the request body.\n\n**Filtering options:**\n- Pavement data can be filtered using either `startPoint` and `endPoint` coordinates or a GeoJSON geometry provided in the request body.\n - Results may be optionally narrowed by a weather `parameter` filter.\n - Results may also be optionally narrowed by Estimated Time of Arrival (`etaFilter`).\n\nQuery parameters take priority over the request body when both are provided.\n\n**Timing behavior:**\n- When `departAt` is provided: each feature includes `arrivalTime` and the response includes `properties.arrivalTimeUTC` (departAt + route duration)\n- When `arriveAt` is provided: each feature includes `departureTime` and the response includes `properties.departureTimeUTC` (arriveAt - route duration)\n\n**Sample Requests:**\n\n1. **Route via Mapbox with departure time:**\n ```\n POST /v2/logistics?startPoint=-93.3905,45.1310&endPoint=-93.2695,45.1420&departAt=2026-03-13T15:00:00.000Z\n ```\n\n2. **Route via Mapbox with arrival time:**\n ```\n POST /v2/logistics?startPoint=-93.3905,45.1310&endPoint=-93.2695,45.1420&arriveAt=2026-03-13T16:00:00.000Z\n ```\n\n3. **Direct route via body:**\n ```\n POST /v2/logistics\n Body: { \"type\": \"LineString\", \"coordinates\": [[-93.39, 45.13], [-93.27, 45.14]] }\n ```\n","operationId":"getLogisticsByRoute","parameters":[{"name":"departAt","in":"query","description":"Departure time for the route. Mutually exclusive with `arriveAt`.\nWhen provided, the response includes per-feature `arrivalTime` and top-level `properties.arrivalTimeUTC`.\nFormat: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)\n","required":false,"schema":{"type":"string","format":"date-time"},"example":"2026-03-13T15:00:00.000Z"},{"name":"arriveAt","in":"query","description":"Desired arrival time at the destination. Mutually exclusive with `departAt`.\nWhen provided, the response includes per-feature `departureTime` and top-level `properties.departureTimeUTC`.\nFormat: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)\n","required":false,"schema":{"type":"string","format":"date-time"},"example":"2026-03-13T16:00:00.000Z"},{"name":"bufferMeters","in":"query","description":"Buffer distance in meters around the route for spatial query. Default is 5.","required":false,"schema":{"type":"integer","default":5},"example":5},{"name":"limit","in":"query","description":"Maximum number of records to return. Default is 1000.","required":false,"schema":{"type":"integer","default":1000},"example":1000},{"name":"page","in":"query","description":"Page number for pagination. Default is 1.","required":false,"schema":{"type":"integer","default":1},"example":1},{"name":"startTime","in":"query","description":"Filter records with timestamp greater than or equal to this value.\nFormat: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)\n","required":false,"schema":{"type":"string","format":"date-time"},"example":"2025-12-04T20:00:00.000Z"},{"name":"endTime","in":"query","description":"Filter records with timestamp less than or equal to this value.\nFormat: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)\n","required":false,"schema":{"type":"string","format":"date-time"},"example":"2025-12-05T20:00:00.000Z"},{"name":"units","in":"query","description":"Unit system for response values. Default is imperial.","required":false,"schema":{"type":"string","enum":["metric","imperial"],"default":"imperial"}},{"name":"etaFilter","in":"query","description":"When true, filters condition data to only return the record matching the segment's arrival time window.\nRequires `departAt` and either `startPoint`/`endPoint` or duration in body.\n","required":false,"schema":{"type":"boolean","default":false},"example":true},{"name":"parameter","in":"query","description":"Comma-separated list of field names to include in the response data.\nWhen provided, only the specified fields are returned per condition record.\nUse the /v2/parameters endpoint to see valid options.\n","required":false,"schema":{"type":"string"},"example":"crashRiskIndex,mobilityIndex"}],"requestBody":{"description":"GeoJSON route geometry. Required when `startPoint`/`endPoint` query params are not provided.\nAccepts a LineString or FeatureCollection with LineString features.\n","required":false,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/LineStringRoute"},{"$ref":"#/components/schemas/FeatureCollectionRoute"}]}}}},"responses":{"200":{"description":"Successful response with GeoJSON FeatureCollection, pagination metadata, and route timing properties.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteLogisticsResponse"},"examples":{"departAtResponse":{"summary":"Response with departAt (shows arrivalTimeUTC)","value":{"pagination":{"total":50,"limit":1000,"nextOffset":50},"geojson":{"type":"FeatureCollection","features":[{"type":"Feature","id":40341366,"geometry":{"type":"LineString","coordinates":[[-93.3905,45.131],[-93.35,45.135]]},"properties":{"routeId":40341366,"roadName":"I-94","osmClass":"motorway","arrivalTime":"2026-03-13T15:05:00.000Z","data":[{"id":1001,"lat":45.131,"lon":-93.3905,"timestamp":"2026-03-13T15:00:00.000Z","airTemp":32.5,"pavementCondition":"wet"}]}}]},"properties":{"arrivalTimeUTC":"2026-03-13T15:30:00.000Z"}}}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}},"examples":{"mutuallyExclusive":{"value":{"error":"Cannot use both departAt and arriveAt"}}}}}},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"description":"No conditions found along the route","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}},"example":{"error":"No conditions found along route(s)"}}}},"502":{"description":"Bad Gateway - External service (Mapbox) failure or unreachable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service Unavailable - Data partition temporarily unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"clientCredentials":[]}]}},"/directions":{"get":{"tags":["Directions"],"summary":"Get Route Directions","description":"Returns cacheable route geometry from the Mapbox Directions API as a GeoJSON FeatureCollection.\nThis endpoint decouples route geometry from weather/pavement data, enabling independent caching\nof the route so the frontend can lock in a stable geometry for navigation (similar to Waze/Google Maps).\n\nThe `geojson` field in the response is directly compatible with the POST `/v2/pavement/conditions`\nand POST `/v2/logistics` endpoints — it can be passed as the `route` body without transformation.\n\n**Timing behavior:**\n- When `departAt` is provided: each feature includes `arrivalTimeUTC` (departAt + route duration)\n- When `arriveAt` is provided: each feature includes `departureTimeUTC` (arriveAt - route duration)\n- When neither is provided: current server time is used as `departAt` and `arrivalTimeUTC` is computed\n\n**Alternative routes:**\n- When `alternatives=true`: returns 1–3 routes sorted by ascending duration\n- When `alternatives=false` or omitted: returns exactly 1 route\n\n**Sample Requests:**\n\n1. **Basic route with departure time:**\n ```\n GET /v2/directions?startPoint=-93.3905,45.1310&endPoint=-93.2695,45.1420&departAt=2026-03-13T15:00:00.000Z\n ```\n\n2. **Route with arrival time:**\n ```\n GET /v2/directions?startPoint=-93.3905,45.1310&endPoint=-93.2695,45.1420&arriveAt=2026-03-13T16:00:00.000Z\n ```\n\n3. **Multiple alternative routes:**\n ```\n GET /v2/directions?startPoint=-93.3905,45.1310&endPoint=-93.2695,45.1420&departAt=2026-03-13T15:00:00.000Z&alternatives=true\n ```\n\n4. **Default timing (uses current server time as departure):**\n ```\n GET /v2/directions?startPoint=-93.3905,45.1310&endPoint=-93.2695,45.1420\n ```\n","operationId":"getDirections","parameters":[{"name":"startPoint","in":"query","description":"Starting point coordinates for the route.\nFormat: `longitude,latitude`\n","required":true,"schema":{"type":"string"},"example":"-93.3905,45.1310"},{"name":"endPoint","in":"query","description":"Ending point coordinates for the route.\nFormat: `longitude,latitude`\n","required":true,"schema":{"type":"string"},"example":"-93.2695,45.1420"},{"name":"departAt","in":"query","description":"Departure time for the route. Mutually exclusive with `arriveAt`.\nWhen provided, `arrivalTimeUTC` is calculated as `departAt + route duration`.\nFormat: ISO 8601 UTC with \"Z\" suffix (e.g., 2026-03-13T15:00:00Z)\n","required":false,"schema":{"type":"string","format":"date-time"},"example":"2026-03-13T15:00:00Z"},{"name":"arriveAt","in":"query","description":"Desired arrival time at the destination. Mutually exclusive with `departAt`.\nWhen provided, `departureTimeUTC` is calculated as `arriveAt - route duration`.\nFormat: ISO 8601 UTC with \"Z\" suffix (e.g., 2026-03-13T16:00:00Z)\n","required":false,"schema":{"type":"string","format":"date-time"},"example":"2026-03-13T16:00:00Z"},{"name":"alternatives","in":"query","description":"When \"true\", returns up to 3 alternative routes sorted by ascending duration.\nWhen \"false\" or omitted, returns exactly 1 route.\n","required":false,"schema":{"type":"string","enum":["true","false"],"default":"false"},"example":"true"}],"responses":{"200":{"description":"Successful response with GeoJSON FeatureCollection containing route geometry and timing metadata.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DirectionsResponse"},"examples":{"departAtResponse":{"summary":"Response with departAt (shows arrivalTimeUTC)","value":{"geojson":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"LineString","coordinates":[[-93.3905,45.131],[-93.37,45.135],[-93.2695,45.142]]},"properties":{"duration":1800,"distance":15000,"arrivalTimeUTC":"2026-03-13T15:30:00.000Z","departureTimeUTC":null}}]},"properties":{"arrivalTimeUTC":"2026-03-13T15:30:00.000Z"}}},"arriveAtResponse":{"summary":"Response with arriveAt (shows departureTimeUTC)","value":{"geojson":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"LineString","coordinates":[[-93.3905,45.131],[-93.37,45.135],[-93.2695,45.142]]},"properties":{"duration":1800,"distance":15000,"arrivalTimeUTC":null,"departureTimeUTC":"2026-03-13T15:30:00.000Z"}}]},"properties":{"departureTimeUTC":"2026-03-13T15:30:00.000Z"}}},"alternativesResponse":{"summary":"Response with alternatives=true (multiple routes)","value":{"geojson":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"LineString","coordinates":[[-93.3905,45.131],[-93.37,45.135],[-93.2695,45.142]]},"properties":{"duration":1800,"distance":15000,"arrivalTimeUTC":"2026-03-13T15:30:00.000Z","departureTimeUTC":null}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[-93.3905,45.131],[-93.32,45.15],[-93.2695,45.142]]},"properties":{"duration":2100,"distance":17500,"arrivalTimeUTC":"2026-03-13T15:35:00.000Z","departureTimeUTC":null}}]},"properties":{"arrivalTimeUTC":"2026-03-13T15:30:00.000Z"}}}}}}},"400":{"description":"Bad Request - Invalid or missing parameters","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}},"examples":{"missingStartPoint":{"value":{"error":"startPoint is required"}},"invalidFormat":{"value":{"error":"startPoint must be in format 'longitude,latitude' (e.g., -93.3905,45.1310)"}},"mutuallyExclusive":{"value":{"error":"Cannot use both departAt and arriveAt"}},"invalidAlternatives":{"value":{"error":"alternatives must be 'true' or 'false'"}}}}}},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"description":"No routes found between the specified waypoints","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}}},"example":{"message":"No routes found between the specified waypoints"}}}},"500":{"description":"Internal Server Error - Mapbox token not configured","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}}},"example":{"message":"Mapbox access token not configured"}}}},"502":{"description":"Bad Gateway - Mapbox API failure or unreachable","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}}},"example":{"message":"Failed to get routes from Mapbox"}}}}},"security":[{"clientCredentials":[]}]}},"/health-check":{"get":{"x-internal":true,"tags":["Health"],"summary":"Health Check","description":"The health check endpoint provides information about the health of a web service.\n","responses":{"200":{"$ref":"#/components/responses/HealthCheckReport"},"503":{"$ref":"#/components/responses/InternalServerErrorResponse"}},"operationId":"healthCheck","security":[]}}},"components":{"schemas":{"Error":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}}},"HealthCheck":{"type":"object","properties":{"status":{"type":"string"},"version":{"type":"string"},"info":{"type":"string"},"timestamp":{"type":"string","format":"date-time"},"env":{"type":"string"}}},"Parameter":{"type":"object","properties":{"name":{"type":"string"},"unit":{"type":"string"},"imperial_unit":{"type":"string"},"type":{"type":"string"},"precision":{"oneOf":[{"type":"number"},{"type":"string"}]},"description":{"type":"string"},"notes":{"type":"string"}}},"PavementConditionsResponse":{"type":"object","properties":{"pagination":{"type":"object","properties":{"total":{"type":"integer","description":"Total number of records available"},"limit":{"type":"integer","description":"Maximum number of records per page"},"nextOffset":{"type":"integer","description":"Offset for the next page"}}},"geojson":{"type":"object","properties":{"type":{"type":"string","enum":["FeatureCollection"]},"features":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["Feature"]},"id":{"type":"string","description":"Segment ID"},"geometry":{"type":"object","description":"GeoJSON geometry for the road segment (LineString or MultiLineString)","properties":{"type":{"type":"string","enum":["LineString","MultiLineString"]},"coordinates":{"type":"array","description":"Coordinate array (structure depends on geometry type)","items":{"type":"array","items":{"type":"number"}}}}},"properties":{"type":"object","properties":{"segmentId":{"type":"string"},"roadName":{"type":"string"},"osmClass":{"type":"string"},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"lat":{"type":"number"},"lon":{"type":"number"},"timestamp":{"type":"string","format":"date-time"},"pavementCreationTime":{"type":"string","format":"date-time"},"pavementValidTime":{"type":"string","format":"date-time"},"pavementValidEndTime":{"type":"string","format":"date-time"},"airTemp":{"type":"number"},"visibility":{"type":"number"},"windDirection":{"type":"number"},"windGust":{"type":"number"},"windSpeed":{"type":"number"},"iceRate":{"type":"number"},"liquidRate":{"type":"number"},"snowRate":{"type":"number"},"mobilityIndex":{"type":"number"},"pavementTemperature":{"type":"number"},"blowingSnowAlertLevel":{"type":"integer"},"compactedSnowDepth":{"type":"number"},"frostDepth":{"type":"number"},"iceDepth":{"type":"number"},"liquidDepth":{"type":"number"},"snowDepth":{"type":"number"},"unbondedIceDepth":{"type":"number"},"pavementCondition":{"type":"string"},"crashRiskIndex":{"type":"number"},"crashRiskUncertainty":{"type":"number"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}}}}}}}}}}}},"LogisticsResponse":{"type":"object","properties":{"pagination":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"nextOffset":{"type":"integer"}}},"geojson":{"type":"object","properties":{"type":{"type":"string","enum":["FeatureCollection"]},"features":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["Feature"]},"id":{"type":"string"},"geometry":{"type":"object","description":"GeoJSON geometry for the road segment (LineString or MultiLineString)","properties":{"type":{"type":"string","enum":["LineString","MultiLineString"]},"coordinates":{"type":"array","description":"Coordinate array (structure depends on geometry type)","items":{"type":"array","items":{"type":"number"}}}}},"properties":{"type":"object","properties":{"segmentId":{"type":"string"},"roadName":{"type":"string"},"osmClass":{"type":"string"},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"lat":{"type":"number"},"lon":{"type":"number"},"timestamp":{"type":"string","format":"date-time"},"pavementCreationTime":{"type":"string","format":"date-time"},"pavementValidTime":{"type":"string","format":"date-time"},"pavementValidEndTime":{"type":"string","format":"date-time"},"airTemp":{"type":"number"},"visibility":{"type":"number"},"windDirection":{"type":"number"},"windGust":{"type":"number"},"windSpeed":{"type":"number"},"iceRate":{"type":"number"},"liquidRate":{"type":"number"},"snowRate":{"type":"number"},"pavementTemperature":{"type":"number"},"pavementCondition":{"type":"string"},"crashRiskIndex":{"type":"number"},"crashRiskUncertainty":{"type":"number"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}}}}}}}}}}}},"LineStringRoute":{"type":"object","required":["type","coordinates"],"properties":{"type":{"type":"string","enum":["LineString"]},"coordinates":{"type":"array","minItems":2,"items":{"type":"array","minItems":2,"items":{"type":"number"}}}}},"FeatureCollectionRoute":{"type":"object","required":["type","features"],"properties":{"type":{"type":"string","enum":["FeatureCollection"]},"features":{"type":"array","minItems":1,"items":{"type":"object","required":["type","geometry"],"properties":{"type":{"type":"string","enum":["Feature"]},"geometry":{"$ref":"#/components/schemas/LineStringRoute"}}}}}},"DirectionsResponse":{"type":"object","properties":{"geojson":{"type":"object","description":"GeoJSON FeatureCollection containing route geometries. Directly compatible as the `route` body for POST /v2/pavement/conditions and POST /v2/logistics.","properties":{"type":{"type":"string","enum":["FeatureCollection"]},"features":{"type":"array","minItems":1,"maxItems":3,"items":{"type":"object","properties":{"type":{"type":"string","enum":["Feature"]},"geometry":{"type":"object","properties":{"type":{"type":"string","enum":["LineString"]},"coordinates":{"type":"array","minItems":2,"description":"Array of [longitude, latitude] coordinate pairs","items":{"type":"array","minItems":2,"items":{"type":"number"}}}}},"properties":{"type":"object","properties":{"duration":{"type":"number","description":"Route duration in seconds"},"distance":{"type":"number","description":"Route distance in meters"},"arrivalTimeUTC":{"type":"string","format":"date-time","nullable":true,"description":"Calculated arrival time (departAt + duration). Null when arriveAt is used."},"departureTimeUTC":{"type":"string","format":"date-time","nullable":true,"description":"Calculated departure time (arriveAt - duration). Null when departAt is used."}}}}}}}},"properties":{"type":"object","description":"Top-level timing summary based on the first route.","properties":{"arrivalTimeUTC":{"type":"string","format":"date-time","description":"Arrival time from the first route. Present when departAt is used or no time param provided."},"departureTimeUTC":{"type":"string","format":"date-time","description":"Departure time from the first route. Present when arriveAt is used."}}}}},"RouteConditionsResponse":{"type":"object","properties":{"pagination":{"type":"object","properties":{"total":{"type":"integer","description":"Total number of records available"},"limit":{"type":"integer","description":"Maximum number of records per page"},"nextOffset":{"type":"integer","description":"Offset for the next page"}}},"geojson":{"type":"object","properties":{"type":{"type":"string","enum":["FeatureCollection"]},"features":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["Feature"]},"id":{"type":"integer","description":"Route ID"},"geometry":{"type":"object","properties":{"type":{"type":"string","enum":["LineString"]},"coordinates":{"type":"array","items":{"type":"array","items":{"type":"number"}}}}},"properties":{"type":"object","properties":{"routeId":{"type":"integer"},"roadName":{"type":"string"},"osmClass":{"type":"string"},"arrivalTime":{"type":"string","format":"date-time","description":"Estimated arrival time at this segment (present when departAt is used)"},"departureTime":{"type":"string","format":"date-time","description":"Estimated departure time from this segment (present when arriveAt is used)"},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"lat":{"type":"number"},"lon":{"type":"number"},"timestamp":{"type":"string","format":"date-time"},"pavementCreationTime":{"type":"string","format":"date-time"},"pavementValidTime":{"type":"string","format":"date-time"},"pavementValidEndTime":{"type":"string","format":"date-time"},"airTemp":{"type":"number"},"visibility":{"type":"number"},"windDirection":{"type":"number"},"windGust":{"type":"number"},"windSpeed":{"type":"number"},"iceRate":{"type":"number"},"liquidRate":{"type":"number"},"snowRate":{"type":"number"},"mobilityIndex":{"type":"number"},"pavementTemperature":{"type":"number"},"blowingSnowAlertLevel":{"type":"integer"},"compactedSnowDepth":{"type":"number"},"frostDepth":{"type":"number"},"iceDepth":{"type":"number"},"liquidDepth":{"type":"number"},"snowDepth":{"type":"number"},"unbondedIceDepth":{"type":"number"},"pavementCondition":{"type":"string"},"crashRiskIndex":{"type":"number"},"crashRiskUncertainty":{"type":"number"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}}}}}}}}}},"properties":{"type":"object","description":"Route timing metadata. Only present when startPoint/endPoint query params are used with departAt or arriveAt.","properties":{"arrivalTimeUTC":{"type":"string","format":"date-time","description":"Estimated arrival time at the destination (departAt + route duration). Present when departAt is used."},"departureTimeUTC":{"type":"string","format":"date-time","description":"Estimated departure time from the origin (arriveAt - route duration). Present when arriveAt is used."}}}}},"RouteLogisticsResponse":{"type":"object","properties":{"pagination":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"nextOffset":{"type":"integer"}}},"geojson":{"type":"object","properties":{"type":{"type":"string","enum":["FeatureCollection"]},"features":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["Feature"]},"id":{"type":"integer"},"geometry":{"type":"object","properties":{"type":{"type":"string","enum":["LineString"]},"coordinates":{"type":"array","items":{"type":"array","items":{"type":"number"}}}}},"properties":{"type":"object","properties":{"routeId":{"type":"integer"},"roadName":{"type":"string"},"osmClass":{"type":"string"},"arrivalTime":{"type":"string","format":"date-time","description":"Estimated arrival time at this segment (present when departAt is used)"},"departureTime":{"type":"string","format":"date-time","description":"Estimated departure time from this segment (present when arriveAt is used)"},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"lat":{"type":"number"},"lon":{"type":"number"},"timestamp":{"type":"string","format":"date-time"},"pavementCreationTime":{"type":"string","format":"date-time"},"pavementValidTime":{"type":"string","format":"date-time"},"pavementValidEndTime":{"type":"string","format":"date-time"},"airTemp":{"type":"number"},"visibility":{"type":"number"},"windDirection":{"type":"number"},"windGust":{"type":"number"},"windSpeed":{"type":"number"},"iceRate":{"type":"number"},"liquidRate":{"type":"number"},"snowRate":{"type":"number"},"pavementTemperature":{"type":"number"},"pavementCondition":{"type":"string"},"crashRiskIndex":{"type":"number"},"crashRiskUncertainty":{"type":"number"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}}}}}}}}}},"properties":{"type":"object","description":"Route timing metadata. Only present when startPoint/endPoint query params are used with departAt or arriveAt.","properties":{"arrivalTimeUTC":{"type":"string","format":"date-time","description":"Estimated arrival time at the destination (departAt + route duration). Present when departAt is used."},"departureTimeUTC":{"type":"string","format":"date-time","description":"Estimated departure time from the origin (arriveAt - route duration). Present when arriveAt is used."}}}}}},"securitySchemes":{"clientCredentials":{"type":"oauth2","x-receive-token-in":"request-body","flows":{"clientCredentials":{"tokenUrl":"https://api.auth.dtn.com/v1/tokens/authorize"}},"description":"# Using DAIS for M2M/API Auth\nYou have been given a Client ID and a Client Secret, which are used to request a DTN Access Token. DTN Access Tokens are required when making calls to each and every DTN API endpoint. The following information provides additional details on these tokens and how they are generated.\n## What is an Access Token and how is it different from an API Key?\nAn API Key is a random string of characters that an API uses to authorize whether or not a calling client has approved access to an endpoint. These keys are a non-standard approach to API authorization and are generally issued on a per-API basis.\n\nAn Access Token is also a string of characters but is a base-64 encoded JavaScript Object Notation Web Token, or JWT. JWTs are a widely accepted standard that use OAuth concepts and approaches. \n\nBoth API Keys and Access Tokens are used in an Authorization Request Header as a Bearer, meaning there is no difference in where you put this string of characters when you make calls to DTN APIs.\n## How to generate an Access Token?\nWhen requested, an Access Token is generated for your specific Client (ID/Secret) and for a specific API. The DTN Auth and Identity Service (DAIS) generates new Access Tokens for your client. The DAIS endpoint is `POST https://api.auth.dtn.com/v1/tokens/authorize`.\n\nThis endpoint takes two Header parameters:\n * `Content-Type: application/json`\n * `Accept: application/json`\n\nThis endpoint takes four parameters in the Request Body:\n * `grant_type`: this should always be client_credentials for generating machine-to-machine tokens.\n * `client_id`: this is the Client ID or Application ID using the token and is given to you by DTN's Identity Team. This ID will never change for your client/application.\n * `client_secret`: this is the Client Secret that is associated with the Application ID and is given to you by DTN's Identity Team. This key is subject to rotation for security purposes but always with the client's knowledge.\n * `audience`: this is the API for which this Access Token will be used. For the DTN Pavement Conditions API, you need to use the following audience: https://pavement-condition.prd.wx.zones.dtn.com\n\nYou can use this CURL command template as a reference for obtaining an access token:\n ```\n curl --location --request POST 'https://api.auth.dtn.com/v1/tokens/authorize' \\\n--header 'Accept: application/json' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\n\"grant_type\": \"client_credentials\",\n\"client_id\": \"insert your client id here\",\n\"client_secret\": \"insert your client secret here\",\n\"audience\": \"insert your audience here\"\n}' \n ```\n\n*This document, for demonstration purposes, supplies a client_id and client_secret in all code examples. This client/application is for a fictitious API and cannot be used in practice to gain unauthorized access to any other DTN API.*\nUpon generating a new Access Token, you should receive an HTTP Response from DAIS similar to this:\n ```\n {\n \"data\": {\n \"access_token\": \"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InpfX21pZW13NGhoTmdvQWQxR3N6ciJ9.eyJodHRwczovL2F1dGguZHRuLmNvbS9jdXN0b21lcklkIjoiMTIzNDU2Nzg5MERlbW8iLCJodHRwczovL2F1dGguZHRuLmNvbS9wcm9kdWN0Q29kZSI6IkRlbW9BcGlQIiwiaHR0cHM6Ly9hdXRoLmR0bi5jb20vcmVxdWVzdGVySXAiOiIxOC4yMTMuMTc0LjI3IiwiaHR0cHM6Ly9hdXRoLmR0bi5jb20vcnBzIjoiMTAwIiwiaHR0cHM6Ly9hdXRoLmR0bi5jb20vdGllciI6IkJhc2ljIiwiaHR0cHM6Ly9hdXRoLmR0bi5jb20vcXVvdGEiOiI5OTk5OTkiLCJpc3MiOiJodHRwczovL2lkLmF1dGguZHRuLmNvbS8iLCJzdWIiOiJuZnlPM0tpS1BSOE4wREtSNUNMOGpTOUdGQkNEZXlGTUBjbGllbnRzIiwiYXVkIjoiaHR0cHM6Ly9kZW1vLWFwaS5hdXRoLmR0bi5jb20vIiwiaWF0IjoxNjU2MDk5MDY4LCJleHAiOjE2NTYwOTkxNTgsImF6cCI6Im5meU8zS2lLUFI4TjBES1I1Q0w4alM5R0ZCQ0RleUZNIiwic2NvcGUiOiJyZWFkOmRlbW8gY3JlYXRlOmRlbW8gdXBkYXRlOmRlbW8iLCJndHkiOiJjbGllbnQtY3JlZGVudGlhbHMiLCJwZXJtaXNzaW9ucyI6WyJyZWFkOmRlbW8iLCJjcmVhdGU6ZGVtbyIsInVwZGF0ZTpkZW1vIl19.0VHdyp1w9PPFVI0FPheAwuKZwb5C25rwP-LPMXcSNoRmouvga1DZtNLA67ZzE_sAlc_VpaDRr6daLKr_Alw4347mw9sdjP8wKR27kCZa9JZK5PGQMmXHscATbzBEJYpCPklfyGaajgymqTBGnedcv8F0UvlRzQPsFeRPnVoX7BWOSXpMbyToGiXWkQLBQT7r96KAmLZOPJFZspPtjw-wH2mSL2WNa_nkB4j5vMGhGxlKiNRsKb30TH_WAel2hsxNlcPK3XHCmrMTYsNnu7HNqOTMn2i0__0rvBrhSWEw-_grqQDmWFJuWd7Qhi1q81AaJcdqgoSa_efz93QFclJUNw\",\n \"scope\": \"read:demo create:demo update:demo\",\n \"expires_in\": 90,\n \"token_type\": \"Bearer\"\n },\n \"meta\": {\n \"date_time\": \"2022-06-24T19:09:42.963Z\",\n \"name\": \"v1.tokens.authorize\",\n \"uuid\": \"ee6f9feb-dcf8-4421-a6fd-efd6beabdaa9\",\n \"start_timestamp\": 1656097782509,\n \"end_timestamp\": 1656097782963,\n \"execution_time\": 454\n }\n }\n ```\nLooking at this Response, you will see:\n * `access_token`: contains the JWT Access Token string you will use as your Bearer token.\n * `scope`: contains the scopes that this Access Token gives you permissions to access.\n * `expires_in`: contains the length of time before this Access Token will expire, in seconds.\n * `token_type`: verifies that this Access Token should be used as a Bearer token.\n\n## How to use an Access Token after one is generated?\nOnce a new Access Token is obtained, it is used in each call to a DTN API endpoint as a Bearer token in an Authorization Request Header. For example:\n ```\n Header: 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InpfX21pZW13NGhoTmdvQWQxR3N6ciJ9.eyJodHRwczovL2F1dGguZHRuLmNvbS9jdXN0b21lcklkIjoiMTIzNDU2Nzg5MERlbW8iLCJodHRwczovL2F1dGguZHRuLmNvbS9wcm9kdWN0Q29kZSI6IkRlbW9BcGlQIiwiaHR0cHM6Ly9hdXRoLmR0bi5jb20vcmVxdWVzdGVySXAiOiIxOC4yMTMuMTc0LjI3IiwiaHR0cHM6Ly9hdXRoLmR0bi5jb20vcnBzIjoiMTAwIiwiaHR0cHM6Ly9hdXRoLmR0bi5jb20vdGllciI6IkJhc2ljIiwiaHR0cHM6Ly9hdXRoLmR0bi5jb20vcXVvdGEiOiI5OTk5OTkiLCJpc3MiOiJodHRwczovL2lkLmF1dGguZHRuLmNvbS8iLCJzdWIiOiJuZnlPM0tpS1BSOE4wREtSNUNMOGpTOUdGQkNEZXlGTUBjbGllbnRzIiwiYXVkIjoiaHR0cHM6Ly9kZW1vLWFwaS5hdXRoLmR0bi5jb20vIiwiaWF0IjoxNjU2MDk5MDY4LCJleHAiOjE2NTYwOTkxNTgsImF6cCI6Im5meU8zS2lLUFI4TjBES1I1Q0w4alM5R0ZCQ0RleUZNIiwic2NvcGUiOiJyZWFkOmRlbW8gY3JlYXRlOmRlbW8gdXBkYXRlOmRlbW8iLCJndHkiOiJjbGllbnQtY3JlZGVudGlhbHMiLCJwZXJtaXNzaW9ucyI6WyJyZWFkOmRlbW8iLCJjcmVhdGU6ZGVtbyIsInVwZGF0ZTpkZW1vIl19.0VHdyp1w9PPFVI0FPheAwuKZwb5C25rwP-LPMXcSNoRmouvga1DZtNLA67ZzE_sAlc_VpaDRr6daLKr_Alw4347mw9sdjP8wKR27kCZa9JZK5PGQMmXHscATbzBEJYpCPklfyGaajgymqTBGnedcv8F0UvlRzQPsFeRPnVoX7BWOSXpMbyToGiXWkQLBQT7r96KAmLZOPJFZspPtjw-wH2mSL2WNa_nkB4j5vMGhGxlKiNRsKb30TH_WAel2hsxNlcPK3XHCmrMTYsNnu7HNqOTMn2i0__0rvBrhSWEw-_grqQDmWFJuWd7Qhi1q81AaJcdqgoSa_efz93QFclJUNw'\n ```\n\n## Deconstructing the Access Token\nA DTN Access Token carries information within its JWT Body that is available on every API call. By deconstructing the JWT token, our Access Tokens will resemble:\n ```\n {\n \"https://auth.dtn.com/customerId\": \"1234567890Demo\",\n \"https://auth.dtn.com/productCode\": \"DemoApiP\",\n \"https://auth.dtn.com/requesterIp\": \"18.213.174.27\",\n \"https://auth.dtn.com/rps\": \"100\",\n \"https://auth.dtn.com/tier\": \"Basic\",\n \"https://auth.dtn.com/quota\": \"999999\",\n \"iss\": \"https://id.auth.dtn.com/\",\n \"sub\": \"nfyO3KiKPR8N0DKR5CL8jS9GFBCDeyFM@clients\",\n \"aud\": \"https://demo-api.auth.dtn.com/\",\n \"iat\": 1656099068,\n \"exp\": 1656099158,\n \"azp\": \"nfyO3KiKPR8N0DKR5CL8jS9GFBCDeyFM\",\n \"scope\": \"read:demo create:demo update:demo\",\n \"gty\": \"client-credentials\",\n \"permissions\": [\n \"read:demo\",\n \"create:demo\",\n \"update:demo\"\n ]\n }\n ```\n### Description of Claims\n\n | Claim | Type | Description |\n | -----------------------------------| --------------------------------------------| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n | `https://auth.dtn.com/customerId` | String | Custom DTN claim containing the Customer ID found in the DTN Order Management/Salesforce system associated with this token. |\n | `https://auth.dtn.com/productCode` | String | Custom DTN claim containing the Identity product code associated with this token. |\n | `https://auth.dtn.com/requesterIp` | String | Custom DTN claim containing the IP address of the requesting client. |\n | `https://auth.dtn.com/rps` | String | Custom DTN claim containing the maximum rate per second this customer is authorized to utilize. |\n | `https://auth.dtn.com/tier` | String | Custom DTN claim containing the data tier the customer purchased for the requested access. |\n | `https://auth.dtn.com/quota` | String | Custom DTN claim containing the maximum yearly quota the customer purchased for calling DTN endpoints for the specific product. |\n | `iss` | String (URI) | The Security Token Service (STS) that issues and returns the token. If this value is not from `https://id.auth.dtn.com/`, the token should not be considered trusted. |\n | `sub` | String (URI) | The principle about which the token asserts information (the User ID or Client ID within the Identity Provider). A User ID will start with a prefix of `auth0\\|`, while the Client ID will end with the suffix `@clients`. |\n | `aud` | String \\| Array (Strings) (URI \\| [URI, …]) | Identifies the intended recipient(s) of the token – its audience. The token should be rejected if the audience does not contain values expected by the calling application. |\n | `iat` | Number (Timestamp) | “Issued At” indicates when the authentication for this token occurred. |\n | `exp` | Number (Timestamp) | The “expiration time” on or after which the JWT must not be accepted for processing. |\n | `azp` | String | The application/client ID of the client using the token. The application can cat as itself or on behalf of a user. |\n | `gty` | String (Space-delimited) | The grant type that was used to request the token – not an RFC 7519 registered claim (Auth0-specific). |\n | `permissions` | Array (Strings) | The grant type that was used to request the token – not an RFC 7519 registered claim (Auth0-specific). |\n\n "}},"responses":{"InternalServerErrorResponse":{"description":"Internal Server Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"UnauthorizedResponse":{"description":"Unauthorized - Missing or invalid Bearer token","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"ForbiddenResponse":{"description":"Forbidden - No valid Bearer token provided","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"HealthCheckReport":{"description":"Health Check report","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthCheck"}}}}}}}