Trimble Agriculture Data API

The Trimble Agriculture Data API (PTxAg FarmENGAGE API) provides REST endpoints for managing farms, fields, crop zones, boundaries, equipment activities, work orders, prescriptions, materials, and imagery. Enables third-party integrators to exchange precision agriculture data between field devices and farm management platforms. Base URL: https://cloud.api.trimble.com/Trimble-Ag-Software/externalApi/3.0

OpenAPI Specification

trimble-agriculture-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Trimble Agriculture Data API
  description: >-
    The Trimble Agriculture Data API (PTxAg FarmENGAGE API) provides REST endpoints
    for managing farms, fields, crop zones, boundaries, equipment activities, work orders,
    prescriptions, materials, and imagery. Enables third-party integrators to exchange
    precision agriculture data between field devices and farm management platforms.
    Serves over 180 million customer acres globally. Access requires registration at
    the Trimble Ag Developer Network.
  version: 3.0.0
  contact:
    url: https://agdeveloper.trimble.com/
    email: [email protected]
servers:
  - url: https://cloud.api.trimble.com/Trimble-Ag-Software/externalApi/3.0
    description: Trimble Agriculture Cloud API
security:
  - bearerAuth: []
paths:

  # ── Organizations ──────────────────────────────────────────────────
  /organizations:
    get:
      operationId: listOrganizations
      summary: List Organizations
      description: Returns a list of organizations the authenticated user can access.
      tags:
        - Organizations
      responses:
        '200':
          description: List of organizations
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Organization'
        '401':
          description: Unauthorized

  /organizations/{organizationId}:
    get:
      operationId: getOrganizationById
      summary: Get Organization
      description: Retrieve details for a specific organization.
      tags:
        - Organizations
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Organization unique identifier
      responses:
        '200':
          description: Organization details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Organization'
        '404':
          description: Organization not found

  # ── Farms ──────────────────────────────────────────────────────────
  /organizations/{organizationId}/farms:
    get:
      operationId: listFarms
      summary: List Farms
      description: Returns all farms for an organization.
      tags:
        - Farms
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: List of farms
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Farm'
    post:
      operationId: createFarm
      summary: Create Farm
      description: Create a new farm within an organization.
      tags:
        - Farms
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FarmInput'
      responses:
        '201':
          description: Farm created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Farm'
        '200':
          description: Farm created (alternate success)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Farm'

  /organizations/{organizationId}/farms/{farmId}:
    get:
      operationId: getFarmById
      summary: Get Farm
      description: Retrieve details for a specific farm.
      tags:
        - Farms
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: farmId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Farm details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Farm'
    put:
      operationId: updateFarm
      summary: Update Farm
      description: Update a farm's details.
      tags:
        - Farms
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: farmId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FarmInput'
      responses:
        '200':
          description: Farm updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Farm'
    delete:
      operationId: deleteFarm
      summary: Delete Farm
      description: Delete a farm from an organization.
      tags:
        - Farms
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: farmId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Farm deleted

  # ── Fields ─────────────────────────────────────────────────────────
  /organizations/{organizationId}/farms/{farmId}/fields:
    get:
      operationId: listFields
      summary: List Fields
      description: Returns all fields for a farm.
      tags:
        - Fields
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: farmId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: List of fields
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Field'
    post:
      operationId: createField
      summary: Create Field
      description: Create a new field within a farm.
      tags:
        - Fields
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: farmId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FieldInput'
      responses:
        '200':
          description: Field created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Field'

  /organizations/{organizationId}/farms/{farmId}/fields/{fieldId}:
    get:
      operationId: getFieldById
      summary: Get Field
      description: Retrieve details for a specific field.
      tags:
        - Fields
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: farmId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: fieldId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Field details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Field'
    put:
      operationId: updateField
      summary: Update Field
      description: Update a field's details or boundary geometry.
      tags:
        - Fields
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: farmId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: fieldId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FieldInput'
      responses:
        '200':
          description: Field updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Field'
    delete:
      operationId: deleteField
      summary: Delete Field
      description: Delete a field from a farm.
      tags:
        - Fields
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: farmId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: fieldId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Field deleted

  # ── Crop Zones ─────────────────────────────────────────────────────
  /organizations/{organizationId}/cropzones:
    get:
      operationId: listCropZones
      summary: List Crop Zones
      description: Returns crop zones for an organization. Crop zones organize crop information by field and season.
      tags:
        - Crop Zones
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: season
          in: query
          schema:
            type: integer
          description: Filter by crop year/season
        - name: farmId
          in: query
          schema:
            type: string
            format: uuid
          description: Filter by farm
        - name: fieldId
          in: query
          schema:
            type: string
            format: uuid
          description: Filter by field
      responses:
        '200':
          description: List of crop zones
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CropZone'
    post:
      operationId: createCropZone
      summary: Create Crop Zone
      description: Create a new crop zone for a field and season.
      tags:
        - Crop Zones
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CropZoneInput'
      responses:
        '200':
          description: Crop zone created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CropZone'

  /organizations/{organizationId}/cropzones/{cropZoneId}:
    get:
      operationId: getCropZoneById
      summary: Get Crop Zone
      description: Retrieve details for a specific crop zone.
      tags:
        - Crop Zones
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: cropZoneId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Crop zone details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CropZone'

  # ── Equipment Activities ───────────────────────────────────────────
  /organizations/{organizationId}/equipmentactivities:
    get:
      operationId: listEquipmentActivities
      summary: List Equipment Activities
      description: >-
        Returns equipment activity records (in-field jobs such as planting,
        fertilizing, spraying, or harvesting) created from precision ag displays.
      tags:
        - Equipment Activities
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: startDate
          in: query
          schema:
            type: string
            format: date-time
          description: Filter activities starting after this time
        - name: endDate
          in: query
          schema:
            type: string
            format: date-time
          description: Filter activities ending before this time
        - name: cropZoneId
          in: query
          schema:
            type: string
            format: uuid
          description: Filter by crop zone
        - name: activityType
          in: query
          schema:
            type: string
            enum: [Planting, Fertilizing, Spraying, Harvesting, Tillage, Irrigation]
          description: Filter by activity type
      responses:
        '200':
          description: List of equipment activities
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EquipmentActivity'

  /organizations/{organizationId}/equipmentactivities/{activityId}:
    get:
      operationId: getEquipmentActivityById
      summary: Get Equipment Activity
      description: Retrieve details and as-applied data for a specific equipment activity.
      tags:
        - Equipment Activities
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: activityId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Equipment activity details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EquipmentActivity'

  /organizations/{organizationId}/equipmentactivities/{activityId}/asapplied:
    get:
      operationId: getAsAppliedData
      summary: Get As-Applied Data
      description: >-
        Download as-applied data for a specific equipment activity in a
        format suitable for third-party analysis or regulatory compliance.
      tags:
        - Equipment Activities
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: activityId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: format
          in: query
          schema:
            type: string
            enum: [json, geojson, shapefile]
          description: Download format
      responses:
        '200':
          description: As-applied data download
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsAppliedData'

  # ── Work Orders ────────────────────────────────────────────────────
  /organizations/{organizationId}/workorders:
    get:
      operationId: listWorkOrders
      summary: List Work Orders
      description: Returns work orders for an organization.
      tags:
        - Work Orders
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: status
          in: query
          schema:
            type: string
            enum: [Planned, Assigned, InProgress, Completed, Cancelled]
          description: Filter by work order status
      responses:
        '200':
          description: List of work orders
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/WorkOrder'
    post:
      operationId: createWorkOrder
      summary: Create Work Order
      description: >-
        Create a work order to plan, assign, and communicate a job to farm
        equipment operators. Work orders can remotely preconfigure Precision-IQ
        Display tasks.
      tags:
        - Work Orders
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WorkOrderInput'
      responses:
        '200':
          description: Work order created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkOrder'

  /organizations/{organizationId}/workorders/{workOrderId}:
    get:
      operationId: getWorkOrderById
      summary: Get Work Order
      description: Retrieve details for a specific work order.
      tags:
        - Work Orders
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: workOrderId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Work order details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkOrder'
    put:
      operationId: updateWorkOrder
      summary: Update Work Order
      description: Update a work order's status or details.
      tags:
        - Work Orders
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: workOrderId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WorkOrderInput'
      responses:
        '200':
          description: Work order updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkOrder'

  # ── Prescriptions ──────────────────────────────────────────────────
  /organizations/{organizationId}/prescriptions:
    get:
      operationId: listPrescriptions
      summary: List Prescriptions
      description: Returns prescription files for an organization.
      tags:
        - Prescriptions
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: cropZoneId
          in: query
          schema:
            type: string
            format: uuid
          description: Filter by crop zone
      responses:
        '200':
          description: List of prescriptions
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Prescription'
    post:
      operationId: createPrescription
      summary: Create Prescription
      description: >-
        Upload a prescription file to be sent to Trimble displays for
        variable-rate application in the field.
      tags:
        - Prescriptions
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PrescriptionInput'
      responses:
        '200':
          description: Prescription created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Prescription'

  /organizations/{organizationId}/prescriptions/{prescriptionId}:
    get:
      operationId: getPrescriptionById
      summary: Get Prescription
      description: Retrieve a specific prescription file.
      tags:
        - Prescriptions
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: prescriptionId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Prescription details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Prescription'
    delete:
      operationId: deletePrescription
      summary: Delete Prescription
      description: Delete a prescription file.
      tags:
        - Prescriptions
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: prescriptionId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Prescription deleted

  # ── Materials ──────────────────────────────────────────────────────
  /organizations/{organizationId}/materials:
    get:
      operationId: listMaterials
      summary: List Materials
      description: Returns materials (seeds, fertilizers, chemicals) for an organization.
      tags:
        - Materials
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: type
          in: query
          schema:
            type: string
            enum: [Seed, Fertilizer, Chemical, Other]
          description: Filter by material type
      responses:
        '200':
          description: List of materials
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Material'
    post:
      operationId: createMaterial
      summary: Create Material
      description: Add a material to the organization's product library.
      tags:
        - Materials
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MaterialInput'
      responses:
        '200':
          description: Material created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Material'

  # ── Imagery ────────────────────────────────────────────────────────
  /organizations/{organizationId}/imagery:
    get:
      operationId: listImagery
      summary: List Imagery
      description: Returns uploaded GeoTIFF imagery processed for crop zones.
      tags:
        - Imagery
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: cropZoneId
          in: query
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: List of imagery records
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ImageryRecord'
    post:
      operationId: uploadImagery
      summary: Upload Imagery
      description: >-
        Upload a GeoTIFF image. It will be processed and clipped to any crop
        zones whose boundaries overlap the imagery area.
      tags:
        - Imagery
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                  description: GeoTIFF image file
                name:
                  type: string
                  description: Image name
                date:
                  type: string
                  format: date
                  description: Date the imagery was captured
      responses:
        '200':
          description: Imagery uploaded and queued for processing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImageryRecord'

  # ── Boundaries ─────────────────────────────────────────────────────
  /organizations/{organizationId}/boundaries:
    get:
      operationId: listBoundaries
      summary: List Boundaries
      description: Returns all field and crop zone boundaries for an organization.
      tags:
        - Boundaries
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: fieldId
          in: query
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: List of boundaries
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Boundary'

components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        OAuth 2.0 bearer token. Register at agdeveloper.trimble.com to obtain
        API credentials.

  schemas:
    Organization:
      type: object
      required: [id, name]
      properties:
        id:
          type: string
          format: uuid
          description: Organization unique identifier
        name:
          type: string
          description: Organization display name
        country:
          type: string
          description: Country code (ISO 3166-1 alpha-2)

    Farm:
      type: object
      required: [id, name]
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
          description: Farm name
        organizationId:
          type: string
          format: uuid
        address:
          type: string
        city:
          type: string
        state:
          type: string
        country:
          type: string

    FarmInput:
      type: object
      required: [name]
      properties:
        name:
          type: string
        address:
          type: string
        city:
          type: string
        state:
          type: string
        country:
          type: string

    Field:
      type: object
      required: [id, name]
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
          description: Field name
        farmId:
          type: string
          format: uuid
        area:
          type: number
          format: float
          description: Field area in hectares
        boundary:
          $ref: '#/components/schemas/GeoJsonGeometry'
          description: Field boundary as GeoJSON geometry

    FieldInput:
      type: object
      required: [name]
      properties:
        name:
          type: string
        area:
          type: number
          format: float
        boundary:
          $ref: '#/components/schemas/GeoJsonGeometry'

    CropZone:
      type: object
      required: [id, fieldId, season]
      properties:
        id:
          type: string
          format: uuid
        fieldId:
          type: string
          format: uuid
        farmId:
          type: string
          format: uuid
        season:
          type: integer
          description: Crop year (e.g., 2026)
        cropType:
          type: string
          description: Crop being grown (e.g., Corn, Soybeans, Wheat)
        variety:
          type: string
          description: Crop variety or hybrid
        area:
          type: number
          format: float
          description: Crop zone area in hectares
        boundary:
          $ref: '#/components/schemas/GeoJsonGeometry'

    CropZoneInput:
      type: object
      required: [fieldId, season, cropType]
      properties:
        fieldId:
          type: string
          format: uuid
        season:
          type: integer
        cropType:
          type: string
        variety:
          type: string
        boundary:
          $ref: '#/components/schemas/GeoJsonGeometry'

    EquipmentActivity:
      type: object
      required: [id, activityType]
      properties:
        id:
          type: string
          format: uuid
        activityType:
          type: string
          enum: [Planting, Fertilizing, Spraying, Harvesting, Tillage, Irrigation]
          description: Type of in-field operation
        cropZoneId:
          type: string
          format: uuid
        operatorId:
          type: string
          format: uuid
        equipmentId:
          type: string
          format: uuid
        startTime:
          type: string
          format: date-time
        endTime:
          type: string
          format: date-time
        area:
          type: number
          format: float
          description: Area covered in hectares
        materials:
          type: array
          items:
            type: object
            properties:
              materialId:
                type: string
                format: uuid
              applicationRate:
                type: number
                description: Application rate per unit area
              unit:
                type: string
        status:
          type: string
          enum: [InProgress, Completed, Cancelled]

    AsAppliedData:
      type: object
      properties:
        activityId:
          type: string
          format: uuid
        format:
          type: string
        data:
          description: GeoJSON or other format data for as-applied records
        downloadUrl:
          type: string
          format: uri
          description: Presigned URL to download the full dataset

    WorkOrder:
      type: object
      required: [id, title, status]
      properties:
        id:
          type: string
          format: uuid
        title:
          type: string
          description: Work order title or name
        description:
          type: string
        status:
          type: string
          enum: [Planned, Assigned, InProgress, Completed, Cancelle

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