Shipwell Carriers API

List and manage carriers and carrier relationships in your network, including compliance and performance master data, carrier tags, and the carrier assignments attached to shipments. Endpoint shapes are modeled from the documented carriers, carrier-relationships, and carrier-tags groups.

OpenAPI Specification

shipwell-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Shipwell v2 Core API
  description: >-
    Partial, honestly-modeled OpenAPI description of the Shipwell transportation
    management system (TMS) API. Shipwell is an AI-powered freight execution
    platform; its public documentation and full API reference live at
    https://docs.shipwell.com/ but the complete platform and API are enterprise
    and contract-gated, so exact request and response schemas are best confirmed
    against the live reference and an authenticated account.


    Endpoints marked "confirmed" below appear directly in Shipwell's public docs
    (shipment create/list/get, shipment notes, carrier assignments, tenders, and
    the events list). Endpoints marked "modeled" are honestly inferred from the
    documented resource groups (quoting, spot-negotiations, carrier-bids,
    carriers, carrier-relationships, orders, purchase-orders, webhooks) and are
    included to represent the shape of each logical API - verify them before use.


    Base URLs. Most of the v2 Core API is served under
    https://api.shipwell.com/v2 with a fully separate sandbox at
    https://sandbox-api.shipwell.com/v2. The newer Orders API is served under the
    host root without the /v2 prefix (for example https://api.shipwell.com/orders).
    Requests are authenticated with company-scoped API keys passed in the
    Authorization header (the docs call this the AuthToken scheme). Production and
    sandbox use separate keys, and objects created in one environment cannot be
    manipulated from the other.
  version: '2.0'
  contact:
    name: Shipwell
    url: https://docs.shipwell.com/
servers:
  - url: https://api.shipwell.com/v2
    description: Production (v2 Core API)
  - url: https://sandbox-api.shipwell.com/v2
    description: Sandbox (v2 Core API)
  - url: https://api.shipwell.com
    description: Production host root (Orders API, served without the /v2 prefix)
security:
  - authToken: []
tags:
  - name: Shipments
    description: Multimodal freight shipments - the central platform resource. (confirmed)
  - name: Quoting
    description: Rates, quotes, RFQs, spot negotiations, and carrier bids. (modeled)
  - name: Carriers
    description: Carriers, carrier relationships, and carrier assignments. (partly confirmed)
  - name: Orders
    description: Orders and purchase orders consolidated onto shipments. (modeled)
  - name: Events and Webhooks
    description: Real-time supply-chain events and webhook subscriptions. (partly confirmed)
paths:
  /shipments/:
    get:
      operationId: listShipments
      tags:
        - Shipments
      summary: List shipments
      description: Returns a paginated list of shipments visible to the authenticated company. (confirmed)
      parameters:
        - name: page
          in: query
          required: false
          schema:
            type: integer
        - name: page_size
          in: query
          required: false
          schema:
            type: integer
      responses:
        '200':
          description: A paginated list of shipments.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ShipmentList'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createShipment
      tags:
        - Shipments
      summary: Create a shipment
      description: >-
        Creates a shipment. Minimum fields include metadata, mode, equipment_type,
        service_level, stops (at least one pickup and one dropoff), and line_items.
        (confirmed)
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ShipmentInput'
      responses:
        '201':
          description: The created shipment.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Shipment'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /shipments/{shipmentId}/:
    parameters:
      - $ref: '#/components/parameters/ShipmentId'
    get:
      operationId: getShipment
      tags:
        - Shipments
      summary: Retrieve a shipment
      description: Retrieves a single shipment by its ID. (confirmed)
      responses:
        '200':
          description: The requested shipment.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Shipment'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateShipment
      tags:
        - Shipments
      summary: Update a shipment
      description: Updates an existing shipment. (confirmed)
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ShipmentInput'
      responses:
        '200':
          description: The updated shipment.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Shipment'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
  /shipments/{shipmentId}/notes/:
    parameters:
      - $ref: '#/components/parameters/ShipmentId'
    get:
      operationId: listShipmentNotes
      tags:
        - Shipments
      summary: List notes for a shipment or shipment quote
      description: Lists the notes attached to a shipment or shipment quote. (confirmed)
      responses:
        '200':
          description: A list of shipment notes.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ShipmentNote'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createShipmentNote
      tags:
        - Shipments
      summary: Create a shipment note
      description: Adds a note to a shipment. (confirmed)
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ShipmentNote'
      responses:
        '201':
          description: The created shipment note.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ShipmentNote'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /shipments/{shipmentId}/carrier-assignments/:
    parameters:
      - $ref: '#/components/parameters/ShipmentId'
    post:
      operationId: createCarrierAssignment
      tags:
        - Carriers
      summary: Create a new carrier assignment
      description: Assigns a carrier to a shipment. (confirmed)
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CarrierAssignment'
      responses:
        '201':
          description: The created carrier assignment.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CarrierAssignment'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /shipments/tenders/{tenderId}/:
    parameters:
      - name: tenderId
        in: path
        required: true
        description: The ID of the tender.
        schema:
          type: string
    put:
      operationId: updateTender
      tags:
        - Shipments
      summary: Update a tendered shipment
      description: >-
        Updates a tendered shipment to a Shipwell company. Only valid for
        shipments created by posting to this endpoint. (confirmed)
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        '200':
          description: The updated tender.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
  /quotes/:
    post:
      operationId: createQuote
      tags:
        - Quoting
      summary: Request a quote / rates
      description: >-
        Requests rates and quotes for a shipment (an RFQ). Modeled from the
        documented quoting resource group - confirm the exact path, request, and
        response schema against the live reference. (modeled)
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QuoteRequest'
      responses:
        '201':
          description: The created quote / rate request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Quote'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /quotes/{quoteId}/:
    parameters:
      - name: quoteId
        in: path
        required: true
        description: The ID of the quote.
        schema:
          type: string
    get:
      operationId: getQuote
      tags:
        - Quoting
      summary: Retrieve a quote
      description: Retrieves a quote and its returned rates. (modeled)
      responses:
        '200':
          description: The requested quote.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Quote'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /carriers/:
    get:
      operationId: listCarriers
      tags:
        - Carriers
      summary: List carriers
      description: >-
        Lists carriers in your network, including compliance and performance
        master data. Modeled from the documented carriers resource group. (modeled)
      responses:
        '200':
          description: A list of carriers.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Carrier'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /carriers/{carrierId}/:
    parameters:
      - name: carrierId
        in: path
        required: true
        description: The ID of the carrier.
        schema:
          type: string
    get:
      operationId: getCarrier
      tags:
        - Carriers
      summary: Retrieve a carrier
      description: Retrieves a single carrier by its ID. (modeled)
      responses:
        '200':
          description: The requested carrier.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Carrier'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /orders:
    servers:
      - url: https://api.shipwell.com
        description: Orders API served under the host root (no /v2 prefix).
    get:
      operationId: listOrders
      tags:
        - Orders
      summary: List orders
      description: >-
        Lists orders. The newer Orders API is served under the host root without
        the /v2 prefix (https://api.shipwell.com/orders). Modeled from the
        documented orders resource group. (modeled)
      responses:
        '200':
          description: A list of orders.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Order'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createOrder
      tags:
        - Orders
      summary: Create an order
      description: Creates an order that can later be consolidated onto a shipment. (modeled)
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Order'
      responses:
        '201':
          description: The created order.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /orders/{orderId}:
    servers:
      - url: https://api.shipwell.com
        description: Orders API served under the host root (no /v2 prefix).
    parameters:
      - name: orderId
        in: path
        required: true
        description: The ID of the order.
        schema:
          type: string
    get:
      operationId: getOrder
      tags:
        - Orders
      summary: Retrieve an order
      description: Retrieves a single order by its ID. (modeled)
      responses:
        '200':
          description: The requested order.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /events/:
    get:
      operationId: listEvents
      tags:
        - Events and Webhooks
      summary: Retrieve a list of events
      description: >-
        Retrieves supply-chain events, including shipment tracking timeline
        updates. (confirmed)
      parameters:
        - name: page
          in: query
          required: false
          schema:
            type: integer
      responses:
        '200':
          description: A list of events.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Event'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /events/event-names-by-version/:
    get:
      operationId: listEventNames
      tags:
        - Events and Webhooks
      summary: List available event names by version
      description: >-
        Returns the up-to-date list of event names available for webhook
        subscriptions, keyed by version. (confirmed)
      responses:
        '200':
          description: A map of event names by version.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
  /webhooks/:
    get:
      operationId: listWebhooks
      tags:
        - Events and Webhooks
      summary: List webhook subscriptions
      description: Lists the webhook subscriptions configured for your company. (modeled)
      responses:
        '200':
          description: A list of webhook subscriptions.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Webhook'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createWebhook
      tags:
        - Events and Webhooks
      summary: Create a webhook subscription
      description: >-
        Creates a webhook subscription. Shipwell delivers matching events by HTTP
        POST to the configured endpoint URL. (partly confirmed)
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Webhook'
      responses:
        '201':
          description: The created webhook subscription.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Webhook'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
components:
  securitySchemes:
    authToken:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        Company-scoped API key passed in the Authorization header (the docs refer
        to this as the AuthToken scheme). Production and sandbox use separate
        keys. Keys can be permission-restricted.
  parameters:
    ShipmentId:
      name: shipmentId
      in: path
      required: true
      description: The ID of the shipment.
      schema:
        type: string
  responses:
    Unauthorized:
      description: Missing or invalid API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: The requested resource was not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ValidationError:
      description: The request payload failed validation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    Error:
      type: object
      properties:
        error_description:
          type: string
        errors:
          type: array
          items:
            type: object
            additionalProperties: true
    Address:
      type: object
      properties:
        address_1:
          type: string
        city:
          type: string
        state_province:
          type: string
        postal_code:
          type: string
        country:
          type: string
    Stop:
      type: object
      properties:
        ordinal_index:
          type: integer
        is_pickup:
          type: boolean
        is_dropoff:
          type: boolean
        planned_date:
          type: string
          format: date
        planned_time_window_start:
          type: string
        planned_time_window_end:
          type: string
        location:
          type: object
          properties:
            location_name:
              type: string
            address:
              $ref: '#/components/schemas/Address'
    LineItem:
      type: object
      properties:
        description:
          type: string
        total_packages:
          type: string
        package_weight:
          type: string
        weight_unit:
          type: string
    ShipmentInput:
      type: object
      required:
        - stops
        - line_items
      properties:
        metadata:
          type: object
          additionalProperties: true
        mode:
          type: object
          additionalProperties: true
        equipment_type:
          type: object
          additionalProperties: true
        service_level:
          type: object
          additionalProperties: true
        stops:
          type: array
          items:
            $ref: '#/components/schemas/Stop'
        line_items:
          type: array
          items:
            $ref: '#/components/schemas/LineItem'
    Shipment:
      allOf:
        - $ref: '#/components/schemas/ShipmentInput'
        - type: object
          properties:
            id:
              type: string
            reference_id:
              type: string
            state:
              type: string
    ShipmentList:
      type: object
      properties:
        results:
          type: array
          items:
            $ref: '#/components/schemas/Shipment'
        page:
          type: integer
        total_count:
          type: integer
    ShipmentNote:
      type: object
      properties:
        id:
          type: string
        message:
          type: string
        additional_data:
          type: object
          additionalProperties: true
    CarrierAssignment:
      type: object
      properties:
        id:
          type: string
        carrier:
          type: string
        rate:
          type: number
        currency:
          type: string
    QuoteRequest:
      type: object
      properties:
        shipment:
          type: string
          description: ID of the shipment to rate, or an inline shipment payload.
        mode:
          type: array
          items:
            type: string
        equipment_type:
          type: array
          items:
            type: string
    Quote:
      type: object
      properties:
        id:
          type: string
        status:
          type: string
        rates:
          type: array
          items:
            type: object
            properties:
              carrier:
                type: string
              total:
                type: number
              currency:
                type: string
              transit_days:
                type: integer
    Carrier:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        scac:
          type: string
        dot_number:
          type: string
        mc_number:
          type: string
        compliance_status:
          type: string
    Order:
      type: object
      properties:
        id:
          type: string
        order_number:
          type: string
        status:
          type: string
        line_items:
          type: array
          items:
            $ref: '#/components/schemas/LineItem'
    Event:
      type: object
      properties:
        id:
          type: string
        event_name:
          type: string
        version:
          type: string
        occurred_at:
          type: string
          format: date-time
        data:
          type: object
          additionalProperties: true
    Webhook:
      type: object
      required:
        - url
      properties:
        id:
          type: string
        url:
          type: string
          format: uri
        event_names:
          type: array
          items:
            type: string
        is_active:
          type: boolean