CNH

CNH FieldOps API

The CNH FieldOps API replaces the previously available CNH Ag Data and CONNECT Machine Data APIs and provides a unified, OAuth 2.0 secured REST API for both agronomic machinery and construction equipment connected to a FieldOps account. Vehicle telemetry follows the ISO 15143-3 specification with two profiles - CP (CAN Parameter, default) and MH (Machine Health) - and supports time-series data such as locations, operating hours, idle hours, fuel and DEF remaining, peak speed, distance, fault codes, and engine condition. Additional endpoint groups cover Equipment, Operations By Vehicle, Prescriptions (send Rx files), Farm Setup (Grower / Farm / Field / Boundary), Files, and Webhooks.

OpenAPI Specification

cnh-fieldops-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: CNH FieldOps API
  description: >-
    The CNH FieldOps API provides programmatic access to agronomic data and
    vehicle telemetry for both agronomic machinery and construction equipment
    connected to a FieldOps account. It replaces the previously available Ag
    Data and CONNECT Machine Data APIs and is offered to integration partners
    of CNH Industrial brands including Case IH, New Holland, STEYR, Case CE,
    and New Holland Construction. Vehicle telemetry follows the ISO 15143-3
    specification and supports two profiles: CP (CAN Parameter) and MH (Machine
    Health). Authentication uses OAuth 2.0 with refresh and access tokens.
  version: 1.0.0
  contact:
    name: CNH Developer Support
    url: https://develop.cnh.com/
  license:
    name: CNH Industrial Privacy Policy
    url: https://www.cnhindustrial.com/en-us/privacy/pages/default.aspx
servers:
  - url: https://api.fieldops.cnh.com
    description: CNH FieldOps API
security:
  - oauth2: []
tags:
  - name: Tokens
    description: OAuth refresh and access token management.
  - name: Equipment
    description: Fleet and equipment details.
  - name: Vehicle Telemetry
    description: ISO 15143-3 vehicle telemetry, fault codes, and metrics.
  - name: Operations
    description: Operations by vehicle.
  - name: Prescriptions
    description: Send prescription Rx files to vehicles or FieldOps.
  - name: Farm Setup
    description: Grower, farm, field, and boundary management.
  - name: Files
    description: Upload and manage files attached to operations.
  - name: Webhooks
    description: Subscribe to FieldOps event notifications.
paths:
  /oauth/token:
    post:
      operationId: createAccessToken
      summary: Exchange refresh token for access token
      description: Exchange a refresh token for a short-lived access token.
      tags:
        - Tokens
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - grant_type
                - refresh_token
              properties:
                grant_type:
                  type: string
                  enum: [refresh_token]
                refresh_token:
                  type: string
                  description: Long-lived refresh token issued by CNH Developer Portal.
      responses:
        '200':
          description: Token issued.
          content:
            application/json:
              schema:
                type: object
                properties:
                  access_token: { type: string }
                  refresh_token: { type: string }
                  token_type: { type: string }
                  expires_in: { type: integer }
        '401':
          description: Invalid or expired refresh token.
  /equipment:
    get:
      operationId: listEquipment
      summary: List equipment
      description: Returns equipment registered to the authenticated user's FieldOps account.
      tags:
        - Equipment
      parameters:
        - name: brand
          in: query
          schema:
            type: string
            enum: [CASE_IH, NEW_HOLLAND, STEYR, CASE_CE, NEW_HOLLAND_CONSTRUCTION]
        - name: vehicleType
          in: query
          schema:
            type: string
            enum: [TRACTOR, COMBINE, SPRAYER, CONSTRUCTION]
      responses:
        '200':
          description: Equipment list.
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Equipment'
        '401': { description: Unauthorized }
  /equipment/{vehicleId}:
    get:
      operationId: getEquipment
      summary: Get equipment by vehicle ID
      tags:
        - Equipment
      parameters:
        - name: vehicleId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Equipment detail.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Equipment'
        '404': { description: Not found }
  /telemetry/{vehicleId}:
    get:
      operationId: getVehicleTelemetry
      summary: Get vehicle telemetry (ISO 15143-3)
      description: >-
        Returns telemetry for a single vehicle following ISO 15143-3. Use the
        `profile` parameter to select CP (CAN Parameter, default) or MH
        (Machine Health) data. Supply `startDate` and `endDate` (recommended:
        one-day window) to constrain the response and improve performance.
      tags:
        - Vehicle Telemetry
      parameters:
        - name: vehicleId
          in: path
          required: true
          schema:
            type: string
        - name: profile
          in: query
          schema:
            type: string
            enum: [CP, MH]
            default: CP
        - name: startDate
          in: query
          schema:
            type: string
            format: date-time
        - name: endDate
          in: query
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Telemetry payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Telemetry'
        '400': { description: Invalid date range }
  /telemetry/{vehicleId}/fault-codes:
    get:
      operationId: getFaultCodes
      summary: Get fault codes for a vehicle
      tags:
        - Vehicle Telemetry
      parameters:
        - name: vehicleId
          in: path
          required: true
          schema:
            type: string
        - name: startDate
          in: query
          schema:
            type: string
            format: date-time
        - name: endDate
          in: query
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Fault codes.
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        code: { type: string }
                        severity: { type: string }
                        timestamp: { type: string, format: date-time }
                        description: { type: string }
  /metrics/{vehicleId}:
    get:
      operationId: getVehicleMetrics
      summary: Get aggregated metrics for a vehicle
      description: >-
        Aggregated daily metrics including operating hours, idle hours, fuel
        remaining ratio, distance, and peak daily speed.
      tags:
        - Vehicle Telemetry
      parameters:
        - name: vehicleId
          in: path
          required: true
          schema:
            type: string
        - name: startDate
          in: query
          required: true
          schema:
            type: string
            format: date
        - name: endDate
          in: query
          required: true
          schema:
            type: string
            format: date
      responses:
        '200':
          description: Metrics payload.
  /operations/by-vehicle/{vehicleId}:
    get:
      operationId: listOperationsByVehicle
      summary: List operations by vehicle
      tags:
        - Operations
      parameters:
        - name: vehicleId
          in: path
          required: true
          schema:
            type: string
        - name: startDate
          in: query
          schema:
            type: string
            format: date-time
        - name: endDate
          in: query
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Operations list.
  /prescriptions:
    post:
      operationId: sendPrescription
      summary: Send prescription Rx file to vehicle or FieldOps
      tags:
        - Prescriptions
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - target
                - prescriptionFileUrl
              properties:
                target:
                  type: string
                  enum: [VEHICLE, FIELDOPS]
                vehicleId:
                  type: string
                fieldId:
                  type: string
                prescriptionFileUrl:
                  type: string
                  format: uri
      responses:
        '202':
          description: Prescription accepted for delivery.
  /growers:
    get:
      operationId: listGrowers
      summary: List growers
      tags:
        - Farm Setup
      responses:
        '200':
          description: Growers list.
  /farms:
    get:
      operationId: listFarms
      summary: List farms
      tags:
        - Farm Setup
      parameters:
        - name: growerId
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Farms list.
  /fields:
    get:
      operationId: listFields
      summary: List fields
      tags:
        - Farm Setup
      parameters:
        - name: farmId
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Fields list.
  /webhooks:
    get:
      operationId: listWebhooks
      summary: List webhook subscriptions
      tags:
        - Webhooks
      responses:
        '200':
          description: Webhook list.
    post:
      operationId: createWebhook
      summary: Create webhook subscription
      tags:
        - Webhooks
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - url
                - events
              properties:
                url:
                  type: string
                  format: uri
                events:
                  type: array
                  items:
                    type: string
      responses:
        '201':
          description: Webhook created.
components:
  securitySchemes:
    oauth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://develop.cnh.com/oauth/authorize
          tokenUrl: https://develop.cnh.com/oauth/token
          scopes:
            telemetry: Access vehicle telemetry data
            equipment: Access equipment metadata
            farm: Access farm setup
            prescriptions: Send prescription Rx files
            webhooks: Manage webhook subscriptions
  schemas:
    Equipment:
      type: object
      properties:
        vehicleId: { type: string }
        brand: { type: string }
        model: { type: string }
        serialNumber: { type: string }
        year: { type: integer }
        vehicleType: { type: string }
    Telemetry:
      type: object
      properties:
        vehicleId: { type: string }
        profile: { type: string, enum: [CP, MH] }
        windowStart: { type: string, format: date-time }
        windowEnd: { type: string, format: date-time }
        location: { $ref: '#/components/schemas/Location' }
        operatingHours: { type: number }
        idleHours: { type: number }
        fuelRemainingRatio: { type: number }
        defRemaining: { type: number }
        peakDailySpeed: { type: number }
        errorTags: { type: string }
    Location:
      type: object
      properties:
        latitude: { type: number }
        longitude: { type: number }
        altitude: { type: number }
        gpsFix: { type: boolean }