Freight Waves Data API

Billable index data queries by item, level, and lane.

OpenAPI Specification

freight-waves-data-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: FreightWaves SONAR Authentication Data API
  description: The FreightWaves SONAR API delivers freight-market intelligence — index values (rates, volumes, tender rejections, capacity signals, etc.) by geography (market, lane, national) and date. Access is via a bearer token obtained from the Credential authenticate endpoint. Data calls are billable; lookup calls (indexes, qualifiers, levels, lanes, zip3, latest) are free. This specification is a faithful capture of the publicly documented SONAR API reference; it is not published by FreightWaves as OpenAPI.
  version: '2.0'
  x-generated: '2026-07-19'
  x-method: generated
  x-source: https://api.sonar.surf/Help/
  contact:
    name: SONAR Support
    url: https://knowledge.gosonar.com/
servers:
- url: https://api.freightwaves.com
  description: SONAR API production
security:
- bearerAuth: []
tags:
- name: Data
  description: Billable index data queries by item, level, and lane.
paths:
  /data/{index}/{qualifier}/{date}:
    get:
      operationId: getIndexData
      tags:
      - Data
      summary: Get index data for a single date
      description: Return the value of an index for a qualifier (market/lane/level) on a single date. Billable call.
      parameters:
      - name: index
        in: path
        required: true
        schema:
          type: string
        example: OTRI
        description: Index ticker (e.g. OTRI).
      - name: qualifier
        in: path
        required: true
        schema:
          type: string
        example: ATL
        description: Qualifier — market
        lane: null
        or level code (e.g. ATL: null
        NATIONAL: null
        XMKT).: null
      - name: date
        in: path
        required: true
        schema:
          type: string
          format: date
        example: '2019-02-20'
        description: Observation date (YYYY-MM-DD).
      responses:
        '200':
          description: Index data points.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DataPoint'
        '401':
          description: Missing or invalid bearer token.
        '429':
          description: Rate limit exceeded (100 requests/minute).
  /data/{index}/{qualifier}/{startDate}/{endDate}:
    get:
      operationId: getIndexDataRange
      tags:
      - Data
      summary: Get index data for a date range
      description: Return index values for a qualifier across an inclusive date range. Billable call.
      parameters:
      - name: index
        in: path
        required: true
        schema:
          type: string
        example: OTRI
      - name: qualifier
        in: path
        required: true
        schema:
          type: string
        example: ATL
      - name: startDate
        in: path
        required: true
        schema:
          type: string
          format: date
        example: '2019-02-01'
      - name: endDate
        in: path
        required: true
        schema:
          type: string
          format: date
        example: '2019-02-20'
      responses:
        '200':
          description: Index data points for the range.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DataPoint'
        '401':
          description: Missing or invalid bearer token.
        '429':
          description: Rate limit exceeded (100 requests/minute).
components:
  schemas:
    DataPoint:
      type: object
      properties:
        index:
          type: string
          example: OTRI
        qualifier:
          type: string
          example: ATL
        date:
          type: string
          format: date
        value:
          type: number
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'Bearer token from POST /Credential/authenticate, sent as `Authorization: Bearer <token>`. Tokens are valid for one year.'