DTN

DTN Logistics API

Logistics-focused pavement data endpoints

Operations 2

GET /logistics Get Logistics Data #
POST /logistics Get Logistics Data by Route #

Documentation

📖
Documentation
https://devportal.dtn.com/catalog/Weather/dtn-weather-conditions-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Weather/dtn-observation-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Weather/dtn-precipitation-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Other%20APIs/financial-market-data/documentation
📖
Documentation
https://devportal.dtn.com/catalog/WebSocket/agency-bulletin-websocket-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Weather/dtn-agency-bulletin-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Weather/dtn-alerting-API/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Other%20APIs/dtn-astronomical-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Weather/dtn-climatology-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Other%20APIs/dtn-developer-portal-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Weather/dtn-energy-event-index-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Aviation/dtn-enhanced-flight-hazards-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Weather/dtn-lightning-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/WebSocket/dtn-lightning-websocket/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Aviation/dtn-metars-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Weather/dtn-map-tile-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Weather/dtn-marine-weather-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Aviation/dtn-notams-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Aviation/dtn-pireps-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Weather/pavement-conditions-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Weather/dtn-probabilistic-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Refined%20Fuels/dtn-refined-fuels-demand/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Weather/dtn-renewables-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Aviation/dtn-sigmets-airmets/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Marine%20and%20Offshore/dtn-shipping-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Agriculture/dtn-soil-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Weather/dtn-storm-impact-analytics/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Weather/dtn-storm-risk-analytics-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Aviation/dtn-tafs-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Weather/dtn-tropical-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/WebSocket/dtn-websocket-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Aviation/dtn-windsaloft-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Refined%20Fuels/digital-commerce-orders/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Refined%20Fuels/energy-digital-commerce-integrations-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Agriculture/farm-intel-api/documentation
📖
Documentation
https://devportal.dtn.com/catalog/Weather/radarscope-radar-products/documentation

Specifications

Other Resources

🔗
Reference
https://devportal.dtn.com/catalog/Weather/dtn-weather-conditions-api/documentation
🔗
Portal
https://devportal.dtn.com/
🔗
Postman
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-weather-conditions-api/postman-collection/2.2.0
🔗
ReleaseNotes
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-weather-conditions-api/release-notes/2.2.0
🔗
Portal
https://api.weather.mg/
🔗
Postman
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-observation-api/postman-collection/2.0.0
🔗
ReleaseNotes
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-observation-api/release-notes/2.0.0
🔗
Postman
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-precipitation-api/postman-collection/1.0.0
🔗
Postman
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/financial-market-data/postman-collection/1.0.2
🔗
ReleaseNotes
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/agency-bulletin-websocket-api/release-notes/1.0.0
🔗
ReleaseNotes
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-agency-bulletin-api/release-notes/2.0.0
🔗
Postman
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-astronomical-api/postman-collection/2.0.0
🔗
ReleaseNotes
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-astronomical-api/release-notes/2.0.0
🔗
Postman
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-climatology-api/postman-collection/1.0.0
🔗
Postman
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-developer-portal-api/postman-collection/1.0.0
🔗
Postman
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-energy-event-index-api/postman-collection/1.0.0
🔗
Postman
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-enhanced-flight-hazards-api/postman-collection/1.10.2
🔗
ReleaseNotes
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-enhanced-flight-hazards-api/release-notes/1.10.2
🔗
ReleaseNotes
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-lightning-websocket/release-notes/1.0.0
🔗
Postman
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-metars-api/postman-collection/1.9.0
🔗
ReleaseNotes
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-metars-api/release-notes/1.9.0
🔗
Postman
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-map-tile-api/postman-collection/2.0.16
🔗
ReleaseNotes
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-map-tile-api/release-notes/2.0.16
🔗
Postman
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-marine-weather-api/postman-collection/1.0.0
🔗
ReleaseNotes
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-marine-weather-api/release-notes/1.0.0
🔗
Postman
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-notams-api/postman-collection/1.10.1
🔗
ReleaseNotes
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-notams-api/release-notes/1.10.1
🔗
Postman
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-pireps-api/postman-collection/1.9.0
🔗
ReleaseNotes
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-pireps-api/release-notes/1.9.0
🔗
ReleaseNotes
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/pavement-conditions-api/release-notes/2.0.2
🔗
Postman
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-probabilistic-api/postman-collection/1.0.0
🔗
Postman
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-renewables-api/postman-collection/1.0.0
🔗
ReleaseNotes
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-renewables-api/release-notes/1.0.0
🔗
Postman
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-sigmets-airmets/postman-collection/1.9.0
🔗
ReleaseNotes
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-sigmets-airmets/release-notes/1.9.0
🔗
Postman
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-soil-api/postman-collection/1.0.0
🔗
ReleaseNotes
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-soil-api/release-notes/1.0.0
🔗
Postman
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-storm-impact-analytics/postman-collection/1.0.0
🔗
Postman
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-storm-risk-analytics-api/postman-collection/1.0.0
🔗
ReleaseNotes
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-storm-risk-analytics-api/release-notes/1.0.0
🔗
Postman
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-tafs-api/postman-collection/1.9.0
🔗
ReleaseNotes
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-tafs-api/release-notes/1.9.0
🔗
Postman
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-tropical-api/postman-collection/1.0.6
🔗
ReleaseNotes
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-tropical-api/release-notes/1.0.6
🔗
Postman
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-windsaloft-api/postman-collection/1.9.0
🔗
ReleaseNotes
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/dtn-windsaloft-api/release-notes/1.9.0
🔗
ReleaseNotes
https://dev-portal-api.prd.coreservices.zones.dtn.com/v1/apis/digital-commerce-orders/release-notes/1.0.0

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/dtn-logistics-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

dtn-logistics-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Pavement Conditions Logistics 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: Logistics
  description: Logistics-focused pavement data endpoints
paths:
  /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&parameter=crashRiskIndex,mobilityIndex\n   ```\n"
      operationId: getLogisticsV2
      parameters:
      - name: bbox
        in: query
        description: 'Bounding box coordinates to filter results by geographic area.

          Format: `minLongitude,minLatitude,maxLongitude,maxLatitude`

          '
        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.

          Format: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)

          '
        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.

          Format: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)

          '
        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.

          Format: `longitude,latitude`

          '
        required: false
        schema:
          type: string
        example: -93.3905,45.1310
      - name: endPoint
        in: query
        description: 'Ending point coordinates for Mapbox route generation.

          Format: `longitude,latitude`

          '
        required: false
        schema:
          type: string
        example: -93.2695,45.1420
      - name: departAt
        in: query
        description: 'Departure time for the route. Mutually exclusive with `arriveAt`.

          When provided, the response includes per-feature `arrivalTime` and top-level `properties.arrivalTimeUTC`.

          Format: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)

          '
        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`.

          When provided, the response includes per-feature `departureTime` and top-level `properties.departureTimeUTC`.

          Format: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)

          '
        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.

          Requires `departAt` and either `startPoint`/`endPoint` or duration in body.

          '
        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.

          When provided, only the specified fields are returned per condition record.

          Use the /v2/parameters endpoint to see valid options.

          '
        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`.

          When provided, the response includes per-feature `arrivalTime` and top-level `properties.arrivalTimeUTC`.

          Format: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)

          '
        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`.

          When provided, the response includes per-feature `departureTime` and top-level `properties.departureTimeUTC`.

          Format: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)

          '
        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.

          Format: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)

          '
        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.

          Format: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)

          '
        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.

          Requires `departAt` and either `startPoint`/`endPoint` or duration in body.

          '
        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.

          When provided, only the specified fields are returned per condition record.

          Use the /v2/parameters endpoint to see valid options.

          '
        required: false
        schema:
          type: string
        example: crashRiskIndex,mobilityIndex
      requestBody:
        description: 'GeoJSON route geometry. Required when `startPoint`/`endPoint` query params are not provided.

          Accepts a LineString or FeatureCollection with LineString features.

          '
        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: []
components:
  schemas:
    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.
    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'
    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
    Error:
      type: object
      properties:
        type:
          type: string
        title:
          type: string
        status:
          type: integer
        detail:
          type: string
        instance:
          type: string
  responses:
    ForbiddenResponse:
      description: Forbidden - No valid Bearer token provided
      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'
  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) an

# --- truncated at 32 KB (43 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/dtn/refs/heads/main/openapi/dtn-logistics-api-openapi.yml