Skip to the main content
John Deere Logo

Develop with Deere


Operations Center - Equipment

Click here for more information on how to get started.

Overview

Equipment is hardware used to do work such as a machine or an implement. Some equipment may require that it be paired with additional equipment to function. Currently supported equipment classes are machines and implements.

A machine is a motorized piece of equipment used to do work. A machine can be self-propelled or human propelled, and it may need to be paired with additional equipment to do work. The Equipment API endpoints allow access to information about each machine and the associated device data.

equipment tractor

An implement is a piece of equipment that must be paired with a machine to do work. It cannot be self-propelled, but it determines the type of work the paired machine will perform. Examples include a planter, disk, corn head, and spray boom. The Equipment API endpoints allow access to information about each implement.

equipment field_finisher

A device is a component that requires software to function. Examples include a modem, display, and position receiver. The Equipment API endpoints allow access to information about paired devices if necessary.

mtg

Equipment Make, Type, and Model

In the equipment API endpoints section, we have provided documentation related to our reference database API for equipment makes, types, and models to assist with applications that will be creating third party managed equipment in Operations Center. The API responses from this API are only to provide the appropriate make, type and model IDs and used in the equipment creation request. Please see the Equipment Measurements API documentation section referenced below for information on creating third party managed equipment and sending in measurement data for those devices (if connected to a telematic device).

Related Resources

Equipment Measurements

The measurements resource allows an application the ability to post in measurement data such as speed, GPS location, engine state, odometer, and engine hour values for third party created and managed equipment.

Alerts

The alerts resource provides the information captured on the telematics terminal when an alert occurred with a machine. These are also referred to as DTCs or Diagnostic Trouble Codes.

Device State Reports

A device state report provides the details for the connected telematics device for a specified date range. There are several attributes in included about the state of the telematics terminal and connectivity.

Engine Hours

The engine hours resource provides the last reported number of hours that a machine’s engine has recorded. Each response includes a timestamp and the source of that record.

Hours of Operations

The hours of operation resource provide the durations for which the engine was on or off during a specified time range. The last known state of the machine is also accessible.

Breadcrumbs

The breadcrumbs resource provides detailed equipment locations along with other sensor data for a specified time range. These are recorded as the equipment is working only.

Location History

The location history resource provides latitude, longitude, and altitude for a specified time range. These records are given on the telematic device’s regular call intervals.


Endpoints

The term “equipment” in the context of this API refers to any machine or implement connected with a modem, or non-connected equipment created by end users or third-party applications in Operations Center. The main endpoint for this API set is meant to be a filterable based on whether the application is interested in machines or implements and to obtain information about paired devices and other metadata related to them.

Get equipment

GET

/equipment
This resource allows the client to view the list of a user's equipment. It can be called with a filter for specific organizations, machine or implement types, but can also be called without a filter to provide a list of all equipment accessible by the user across each organization the user has access to. Equipment will only be returned from organizations the user has access to and are connected to the calling application. If the client requests multiple organizations in the filter, and a user or the client does not have access to that organization, the entire response will be a 403 Forbidden. Please see the OAuth 2 documentation here for more details on obtaining a user token and connecting the user’s organizations to your application..

OAuth Scope Required: eq1

Request URI

GET https://equipmentapi.deere.com/isg/equipment

Accept: application/json

ParameterTypeDescription & ExampleIn
ids

array

List of OrganizationEquipment Ids (these ids are unique across all orgs)

Example: 1,2,3

query

serialNumbers

array

List of serial numbers of the equipment

Example: A01775E760247,1DW410ETHFF669067

query

organizationIds

array

List of OrganizationIds

Example: 1,2,3

query

principalIds

array

List of PrincipalIds

Example: 1,2,3

query

capableOf

string

Allowed Values: Connectivity,!Connectivity

query

categories

array

Example: Machine,Implement | Machine | Implement

Allowed Values: Machine,Implement

query

organizationRole.type

string

Allowed Values: Controlling,NonControlling

query

archived

boolean

true or false

query

embed

string

embed 'pairingDetails' is only supported along with 'devices' or 'equipment' embeds

Allowed Values: devices,equipment,icon,pairingDetails

query

pageOffset

integer

Refers to starting record value

Example: 200

query

itemLimit

integer

Refers to number of items per page(default 100 max 5000)

Example: 200

query

{
  "links": [
    {
      "rel": "nextPage",
      "uri": "https://equipmentapi.deere.com/isg/equipment?organizationIds=1234&categories=machine&embed=equipment,devices,pairingDetails,icon&pageOffset=200&itemLimit=100"
    }
  ],
  "total": 1,
  "values": [
    {
      "@type": "Machine",
      "name": "1H0S680SCE0766303",
      "serialNumber": "1H0S680SCE0766303",
      "engineSerialNumber": "RG6135U000500",
      "ERID": "d3d0bd20-e09f-11ee-92e2-0e5cd6a962d7",
      "isSerialNumberCertified": true,
      "modelYear": "2014",
      "id": 217373,
      "make": [
        {
          "@type": "EquipmentMake",
          "name": "JOHN DEERE",
          "certified": false,
          "deereOrSubsidiary": true,
          "id": 1,
          "ERID": "0e8031fe-fe81-11ea-bec7-124fe3772e59"
        }
      ],
      "type": [
        {
          "@type": "EquipmentMake",
          "name": "Combine",
          "id": 222,
          "ERID": "80619ff7-11fa-11ee-bb58-0e5cd6a962d7"
        }
      ],
      "isgType": [
        {
          "@type": "EquipmentISGType",
          "name": "Combine",
          "id": 2,
          "ERID": "d8dce5b0-cc8d-4c34-afac-27d93793bd86"
        }
      ],
      "model": [
        {
          "@type": "EquipmentModel",
          "name": "S680",
          "certified": true,
          "id": 65985,
          "ERID": "f2e7d596-35c6-11e7-af34-123e49453e98"
        }
      ],
      "principalId": 217373,
      "icon": [
        {
          "@type": "EquipmentIcon",
          "name": "combine",
          "iconStyle": {
            "primaryColor": "#367C2B",
            "secondaryColor": "#FFDE00"
          }
        }
      ],
      "telematicsCapable": true,
      "archived": false,
      "organization": [
        {
          "@type": "Resource",
          "id": 1234
        }
      ],
      "organizationRole": [
        {
          "@type": "Controlling",
          "effectiveTS": "2024-03-15T09:00:29.101Z",
          "event": "TRANSFER"
        }
      ],
      "devices": [
        {
          "@type": "TelematicsGateway",
          "serialNumber": "PCMAMGC609250",
          "make": [
            {
              "@type": "DeviceMake",
              "name": "John Deere",
              "id": 1,
              "ERID": "f8b43e74-3088-4a38-9d66-30aae1ed1a11"
            }
          ],
          "type": [
            {
              "@type": "DeviceType",
              "name": "Modem",
              "commonName": "TelematicsGateway",
              "id": 1,
              "ERID": "d469a324-2036-11ee-bb58-0e5cd6a962d7"
            }
          ],
          "model": [
            {
              "@type": "DeviceModel",
              "name": "JDLink Modem-3G",
              "id": 2,
              "ERID": "08ac5768-60f5-4adc-933f-e99f04350567"
            }
          ],
          "firmwareVersion": [
            {
              "@type": "Version",
              "name": "14.01.469"
            }
          ],
          "organization": [
            {
              "@type": "Resource",
              "id": 1234
            }
          ],
          "organizationRole": [
            {
              "@type": "Controlling",
              "effectiveTS": "2024-03-15T09:00:29.109Z",
              "event": "TRANSFER"
            }
          ],
          "archived": false,
          "principalId": 271278,
          "pairingDetails": [
            {
              "paired": true,
              "associationTimestamp": "2024-03-15T09:00:29Z",
              "disassociationTimestamp": null,
              "confirmationTimestamp": "2024-03-15T09:00:29Z",
              "location": null
            }
          ],
          "pairingStatus": "PAIRED",
          "orderNumber": 527398,
          "genericConfigurationVersion": [
            {
              "@type": "Version",
              "name": "D511DABE-2A48-5F5A-E100-01D3AD8223AA"
            }
          ],
          "decommissioned": false,
          "stolen": false,
          "id": 271278,
          "ERID": "39543208-e0a2-11ee-92e2-0e5cd6a962d7"
        }
      ]
    }
  ]
}


Create equipment

POST

/organizations/{organizationId}/equipment
This resource allows the client to create a piece of equipment within a user’s organization.

Getting Started
The process of contributing equipment to John Deere can be broken down into three primary steps.
  1. Determine the Equipment’s make, type, and model IDs
  2. Create the Equipment
  3. Contribute Measurements. Please see the Equipment Measurements (POST) API for more information on uploading measurements for the created equipment.
Determining the Equipment’s make, type, and model
  1. Call the GET /equipmentMakes API endpoint to get a list of all equipment makes and a respective “id” of the equipment make you require.
  2. Call the GET /equipmentMakes/{id}/equipmentTypes endpoint to get a list of associated equipment types for that specific equipment make and obtain a respective “id” for a specific type you require.
  3. Call the GET /equipmentMakes/{id}/equipmentTypes/{id}/equipmentModels to obtain the final “id” of the equipment model you require.
  4. Alternatively, you may call the GET /equipmentModels endpoint if you know the model name you are searching for. For example /equipmentModels?equipmentModelName=9RX*&embed=make,type which will include all models with search string results and include make and type “id” as well as model “id”.
Creating the Equipment
Make a POST request to the /organizations/{orgId}/equipment API to create the piece of equipment in the user’s org.
  • In this request you will provide the type of the equipment, a serialNumber (optional), name (displayed to the user in Operations Center), and the equipment make, type, and model IDs.
    • type: Machine or Implement
    • serialNumber: A string identifier that is 30 characters or fewer. Must be unique within an organization.
    • name: The name displayed in Operation Center, 30 characters or fewer. Must be unique within an organization.
    • make: The ID for the Make of the vehicle, found from the previous step of this document.
    • type: The ID for the Type of the vehicle, found from the API in previous step of this document.
    • model: The id for the Model of the vehicle, found from the API in the previous step of this document.
  • A successful POST will result in a 201 Created response. The “location” header in the response will contain the URI to the new equipment, with the final segment being the organization specific machine ID (ie “https://equipmentapi.deere.com/isg/equipment/12345” is a link to the machine 12345).
  • If you attempt to create a machine with a serialNumber that already exists in that organization, you get a response code 400 Bad Request. The body will include the error information.

OAuth Scope Required: eq2

Request URI

POST https://equipmentapi.deere.com/isg/organizations/{organizationId}/equipment

Accept: application/json

Content-Type: application/json
ParameterTypeDescription & ExampleIn
organizationId

Required

integer

Example: 1234

path

FieldTypeDescription & Example
name
string
Equipment Name.
Example: Cates 8360R 055358
serialNumber

Required

string
Serial Number of the Equipment and passed on the query parameter
Example: 1RW8360RLCD055358
EquipmentMake

Required

string
EquipmentMake
Example: 1
EquipmentType

Required

string
EquipmentType
Example: 414
EquipmentModel

Required

string
EquipmentModel
Example: 585917
{
  "@type": "Machine",
  "name": "Equipment Name",
  "serialNumber": "THISMACHINETESTSN",
  "make": {
    "@type": "EquipmentMake",
    "id": 1
  },
  "type": {
    "@type": "EquipmentType",
    "id": 145
  },
  "model": {
    "@type": "EquipmentModel",
    "id": 66280
  }
}

201 Created


View equipment details by Id

GET

/equipment/{id}
This resource allows the client to view the details of one piece of equipment.

OAuth Scope Required: eq1

Request URI

GET https://equipmentapi.deere.com/isg/equipment/{id}

Accept: application/json

ParameterTypeDescription & ExampleIn
id

Required

integer

Example: 1111

path

embed

string

embed 'pairingDetails' is only supported along with 'devices' or 'equipment' embeds

Allowed Values: devices,equipment,pairingDetails,icon,offsets,capabilities

query

{
  "@type": "Machine",
  "name": "1H0S680SCE0766303",
  "serialNumber": "1H0S680SCE0766303",
  "engineSerialNumber": "RG6135U000500",
  "ERID": "d3d0bd20-e09f-11ee-92e2-0e5cd6a962d7",
  "isSerialNumberCertified": true,
  "modelYear": "2014",
  "id": 217373,
  "make": [
    {
      "@type": "EquipmentMake",
      "name": "JOHN DEERE",
      "certified": false,
      "deereOrSubsidiary": true,
      "id": 1,
      "ERID": "0e8031fe-fe81-11ea-bec7-124fe3772e59"
    }
  ],
  "type": [
    {
      "@type": "EquipmentMake",
      "name": "Combine",
      "id": 222,
      "ERID": "80619ff7-11fa-11ee-bb58-0e5cd6a962d7"
    }
  ],
  "isgType": [
    {
      "@type": "EquipmentISGType",
      "name": "Combine",
      "id": 2,
      "ERID": "d8dce5b0-cc8d-4c34-afac-27d93793bd86"
    }
  ],
  "model": [
    {
      "@type": "EquipmentModel",
      "name": "S680",
      "certified": true,
      "id": 65985,
      "ERID": "f2e7d596-35c6-11e7-af34-123e49453e98"
    }
  ],
  "principalId": 217373,
  "icon": [
    {
      "@type": "EquipmentIcon",
      "name": "combine",
      "iconStyle": {
        "primaryColor": "#367C2B",
        "secondaryColor": "#FFDE00"
      }
    }
  ],
  "telematicsCapable": true,
  "archived": false,
  "organization": [
    {
      "@type": "Resource",
      "id": 1234
    }
  ],
  "organizationRole": [
    {
      "@type": "Controlling",
      "effectiveTS": "2024-03-15T09:00:29.101Z",
      "event": "TRANSFER"
    }
  ],
  "devices": [
    {
      "@type": "TelematicsGateway",
      "serialNumber": "PCMAMGC609250",
      "make": [
        {
          "@type": "DeviceMake",
          "name": "John Deere",
          "id": 1,
          "ERID": "f8b43e74-3088-4a38-9d66-30aae1ed1a11"
        }
      ],
      "type": [
        {
          "@type": "DeviceType",
          "name": "Modem",
          "commonName": "TelematicsGateway",
          "id": 1,
          "ERID": "d469a324-2036-11ee-bb58-0e5cd6a962d7"
        }
      ],
      "model": [
        {
          "@type": "DeviceModel",
          "name": "JDLink Modem-3G",
          "id": 2,
          "ERID": "08ac5768-60f5-4adc-933f-e99f04350567"
        }
      ],
      "firmwareVersion": [
        {
          "@type": "Version",
          "name": "14.01.469"
        }
      ],
      "organization": [
        {
          "@type": "Resource",
          "id": 1234
        }
      ],
      "organizationRole": [
        {
          "@type": "Controlling",
          "effectiveTS": "2024-03-15T09:00:29.109Z",
          "event": "TRANSFER"
        }
      ],
      "archived": false,
      "principalId": 271278,
      "pairingDetails": [
        {
          "paired": true,
          "associationTimestamp": "2024-03-15T09:00:29Z",
          "disassociationTimestamp": null,
          "confirmationTimestamp": "2024-03-15T09:00:29Z",
          "location": null
        }
      ],
      "pairingStatus": "PAIRED",
      "orderNumber": 527398,
      "genericConfigurationVersion": [
        {
          "@type": "Version",
          "name": "D511DABE-2A48-5F5A-E100-01D3AD8223AA"
        }
      ],
      "decommissioned": false,
      "stolen": false,
      "id": 271278,
      "ERID": "39543208-e0a2-11ee-92e2-0e5cd6a962d7"
    }
  ]
}


Update equipment

PUT

/equipment/{id}
This resource allows the client to update a piece of equipment within a user’s organization. Clients will only be able to update a piece of equipment that was contributed via the POST /equipment API. John Deere controlled equipment can only be managed via the Equipment application in Operations Center.

OAuth Scope Required: eq2

Request URI

PUT https://equipmentapi.deere.com/isg/equipment/{id}

Accept: application/json

Content-Type: application/json
ParameterTypeDescription & ExampleIn
id

Required

integer

Example: 1111

path

{
  "@type": "Machine",
  "name": "Equipment Name",
  "serialNumber": "THISMACHINETESTSN",
  "make": {
    "@type": "EquipmentMake",
    "id": 1
  },
  "type": {
    "@type": "EquipmentType",
    "id": 145
  },
  "model": {
    "@type": "EquipmentModel",
    "id": 66280
  }
}

204 No Content


Delete equipment

DELETE

/equipment/{id}
This resource allows the client to delete a piece of equipment within a user’s organization. Clients will only be able to delete a piece of equipment that was contributed via the POST /equipment API. John Deere controlled equipment can only be managed via the Equipment application in Operations Center.

OAuth Scope Required: eq2

Request URI

DELETE https://equipmentapi.deere.com/isg/equipment/{id}

Accept: application/json

ParameterTypeDescription & ExampleIn
id

Required

integer

Example: 1111

path

204 No Content


Get equipment makes

GET

/equipmentMakes
This resource allows the client to view equipment makes and their associated IDs and names.

OAuth Scope Required: eq1

Request URI

GET https://equipmentapi.deere.com/isg/equipmentMakes

Accept: application/json

ParameterTypeDescription & ExampleIn
deprecated

Required

boolean

Deprecated value should be false

Example: false

path

{
  "links": [],
  "values": [
    {
      "@type": "EquipmentMake",
      "name": "JOHN DEERE",
      "certified": false,
      "deereOrSubsidiary": true,
      "id": 1,
      "ERID": "0e8031fe-fe81-11ea-bec7-124fe3772e59"
    }
  ]
}


View equipment by make Id

GET

/equipmentMakes/{equipmentMakeId}
This resource allows the client to view equipment makes by an equipment make ID.

OAuth Scope Required: eq1

Request URI

GET https://equipmentapi.deere.com/isg/equipmentMakes/{equipmentMakeId}

Accept: application/json

ParameterTypeDescription & ExampleIn
equipmentMakeId

Required

integer

ID for Equipment Make

Example: 1111

path

{
  "@type": "EquipmentMake",
  "name": "JOHN DEERE",
  "certified": false,
  "deereOrSubsidiary": true,
  "id": 1,
  "ERID": "0e8031fe-fe81-11ea-bec7-124fe3772e59"
}


Get equipment types by make id

GET

/equipmentMakes/{equipmentMakeId}/equipmentTypes
This resource allows the client to view equipment types by providing an equipment make ID.

OAuth Scope Required: eq1

Request URI

GET https://equipmentapi.deere.com/isg/equipmentMakes/{equipmentMakeId}/equipmentTypes

Accept: application/json

ParameterTypeDescription & ExampleIn
equipmentMakeId

Required

integer

ID for Equipment Make

Example: 1111

path

deprecated

Required

boolean

Deprecated value should be false

Example: false

path

{
  "links": [],
  "values": [
    {
      "@type": "EquipmentType",
      "name": "Scraper",
      "category": "Implement",
      "id": 121,
      "ERID": "15e10ade-33ae-40a1-9b06-7800c7581a17"
    }
  ]
}


View equipment type details by providing an equipment make ID

GET

/equipmentMakes/{equipmentMakeId}/equipmentTypes/{equipmentTypeId}
This resource allows the client to view equipment type details by providing an equipment make ID.

OAuth Scope Required: eq1

Request URI

GET https://equipmentapi.deere.com/isg/equipmentMakes/{equipmentMakeId}/equipmentTypes/{equipmentTypeId}

Accept: application/json

ParameterTypeDescription & ExampleIn
equipmentMakeId

Required

integer

ID for Equipment Make

Example: 1111

path

equipmentTypeId

Required

integer

ID for Equipment Type

Example: 2222

path

{
  "@type": "EquipmentType",
  "name": "Scraper",
  "category": "Implement",
  "id": 121,
  "ERID": "15e10ade-33ae-40a1-9b06-7800c7581a17"
}


Get equipment types

GET

/equipmentTypes
This resource allows the client to view equipment types and their associated IDs and names.

OAuth Scope Required: eq1

Request URI

GET https://equipmentapi.deere.com/isg/equipmentTypes

Accept: application/json

ParameterTypeDescription & ExampleIn
deprecated

Required

boolean

Deprecated value should be false

Example: false

path

{
  "links": [],
  "values": [
    {
      "@type": "EquipmentType",
      "name": "Scraper",
      "GUID": "15e10ade-33ae-40a1-9b06-7800c7581a17",
      "category": "Implement",
      "certified": true,
      "marketSegment": "Construction",
      "icon": "scraper",
      "allowsCustomModel": true,
      "id": "121"
    }
  ]
}


Get equipment models by make id and type id

GET

/equipmentMakes/{equipmentMakeId}/equipmentTypes/{equipmentTypeId}/equipmentModels
This resource allows the client to view equipment models by providing an equipment make ID and equipment type ID.

Request URI

GET https://equipmentapi.deere.com/isg/equipmentMakes/{equipmentMakeId}/equipmentTypes/{equipmentTypeId}/equipmentModels

Accept: application/json

ParameterTypeDescription & ExampleIn
equipmentMakeId

Required

integer

ID for Equipment Make

Example: 1111

path

equipmentTypeId

Required

integer

ID for Equipment Type

Example: 2222

path

deprecated

Required

boolean

Deprecated value should be false

Example: false

path

{
  "links": [],
  "values": [
    {
      "@type": "EquipmentModel",
      "name": "3812 GOOSENECK",
      "category": "Implement",
      "certified": true,
      "id": "744542",
      "ERID": "0c4e2f8b-b1d2-4ecd-98a0-8b5495b5c946"
    }
  ]
}


View details of an equipment model by an equipment make ID and equipment type ID and equipment model ID

GET

/equipmentMakes/{equipmentMakeId}/equipmentTypes/{equipmentTypeId}/equipmentModels/{equipmentModelId}
This resource allows the client to view details of an equipment model by providing an equipment make ID and equipment type ID and equipment model ID.

Request URI

GET https://equipmentapi.deere.com/isg/equipmentMakes/{equipmentMakeId}/equipmentTypes/{equipmentTypeId}/equipmentModels/{equipmentModelId}

Accept: application/json

ParameterTypeDescription & ExampleIn
equipmentMakeId

Required

integer

ID for Equipment Make

Example: 1111

path

equipmentTypeId

Required

integer

ID for Equipment Type

Example: 2222

path

equipmentModelId

Required

integer

ID for Equipment Model

Example: 3333

path

{
  "@type": "EquipmentModel",
  "name": "3812 GOOSENECK",
  "category": "Implement",
  "certified": true,
  "ERID": "0c4e2f8b-b1d2-4ecd-98a0-8b5495b5c946",
  "id": 744542
}


Get equipment models

GET

/equipmentModels
This resource allows the client to view equipment models in our reference database and their associated IDs and names.

Request URI

GET https://equipmentapi.deere.com/isg/equipmentModels

Accept: application/json

ParameterTypeDescription & ExampleIn
deprecated

Required

boolean

Deprecated value should be false

Example: false

path

embed

string

Embed additional attributes if required.

Example: make,type

Allowed Values: make,type,isgType

query

equipmentModelName

string

It should be equipment model name

Example: 9RX420,9RX*

Allowed Values: string or partial string with * wildcard search

query

{
  "links": [],
  "values": [
    {
      "@type": "EquipmentModel",
      "name": "9RX420",
      "serialNumber": "1H0S680SCE0766303",
      "engineSerialNumber": "RG6135U000500",
      "ERID": "d3d0bd20-e09f-11ee-92e2-0e5cd6a962d7",
      "isSerialNumberCertified": true,
      "modelYear": "2014",
      "id": 217373,
      "make": [
        {
          "@type": "EquipmentMake",
          "name": "JOHN DEERE",
          "certified": false,
          "deereOrSubsidiary": true,
          "id": 1,
          "ERID": "0e8031fe-fe81-11ea-bec7-124fe3772e59"
        }
      ],
      "type": [
        {
          "@type": "EquipmentMake",
          "name": "Combine",
          "id": 222,
          "ERID": "80619ff7-11fa-11ee-bb58-0e5cd6a962d7"
        }
      ],
      "isgType": [
        {
          "@type": "EquipmentISGType",
          "name": "Combine",
          "id": 2,
          "ERID": "d8dce5b0-cc8d-4c34-afac-27d93793bd86"
        }
      ],
      "model": [
        {
          "@type": "EquipmentModel",
          "name": "S680",
          "certified": true,
          "id": 65985,
          "ERID": "f2e7d596-35c6-11e7-af34-123e49453e98"
        }
      ]
    },
    {
      "@type": "EquipmentModel",
      "name": "9RX -870",
      "category": "Machine",
      "certified": false,
      "make": [
        {
          "@type": "EquipmentMake",
          "name": "JOHN DEERE",
          "certified": false,
          "deereOrSubsidiary": true,
          "id": 1,
          "ERID": "db18bdc4-025a-11eb-97e4-0e8d658c7ba3"
        }
      ],
      "type": [
        {
          "@type": "EquipmentType",
          "name": "Four-wheel Drive Tractor",
          "id": 145,
          "ERID": "6e816bfb-955f-4687-a362-1133ab26cef9"
        }
      ],
      "isgType": [
        {
          "@type": "EquipmentISGType",
          "name": "Tractor",
          "id": 1,
          "ERID": "82115264-9385-460c-bfbe-177a59445fd9"
        }
      ],
      "id": "787077",
      "ERID": "f3d97337-e566-439a-8f6b-4a1c76be055d"
    }
  ]
}


Authentication (OAuth 2)

The John Deere Precision Tech API endpoints use OAuth 2.0 for authentication. OAuth is an open protocol, and these APIs currently only support the authorization code grant type for external applications.

You can also see our sample code for examples of navigating our OAuth 2 authentication code flow.

  1. Create an Application on Developer.Deere.com

    You must be a validated John Deere user to create an application on developer.deere.com. If you do not have a John Deere username and password, you can create one using the Create an Account option on our digital tools home page here: https://www.deere.com/en/digital-tools/. You must be able to sign into the developer.deere.com to use the Create Application option in the My Applications section of the website. Please follow the steps of the Create Application workflow on the website before proceeding to the next steps.

    Once your application is created, the Security section of the application Details will provide you with the Application ID and Secret necessary for the next steps to sign your API token requests.

    A note on Redirect URIs (Callback URLs):

    During the creation of the application (or found after creation in the application Details/Security section) you will need to define one or any number of Redirect URIs (Callback URLs). These are required for the OAuth 2 authentication flow. If you do not have this when creating the application, there is an example given in that section when creating the application that you may use for now which is http://localhost:9090/callback

    If Redirect URIs are not added to your application properly or used in the authentication process in a different format than listed in the application details (for example encoded vs non-encoded), your users will experience a 400 Bad Redirect error during authentication.

  2. Call the OAuth 2 well-known URL

    With your application client or a web browser window, make a GET request to https://signin.johndeere.com/oauth2/aus78tnlaysMraFhC1t7/.well-known/oauth-authorization-server. This URL contains the authorization and token endpoints, as well as the available scopes mentioned in the steps below.

    {
        "issuer": "https://signin.johndeere.com/oauth2/aus78tnlaysMraFhC1t7",
        "authorization_endpoint": "https://signin.johndeere.com/oauth2/aus78tnlaysMraFhC1t7/v1/authorize",
        "token_endpoint": "https://signin.johndeere.com/oauth2/aus78tnlaysMraFhC1t7/v1/token",
        "registration_endpoint": "https://signin.johndeere.com/oauth2/v1/clients",
        "jwks_uri": "https://signin.johndeere.com/oauth2/aus78tnlaysMraFhC1t7/v1/keys",
        "response_types_supported": [
            "code",
            "token",
            "id_token",
            "code id_token",
            "code token",
            "id_token token",
            "code id_token token"
        ],
        "response_modes_supported": [
            "query",
            "fragment",
            "form_post",
            "okta_post_message"
        ],
        "grant_types_supported": [
            "authorization_code",
            "implicit",
            "refresh_token",
            "password",
            "client_credentials",
            "urn:ietf:params:oauth:grant-type:device_code"
        ],
        "subject_types_supported": [
            "public"
        ],
        "scopes_supported": [
            "ag1",
            "ag2",
            "ag3",
            "eq1",
            "eq2",
            "files",
            "finance1",
            "finance2",
            "org1",
            "org2",
            "work1",
            "work2",
            "openid",
            "profile",
            "email",
            "address",
            "phone",
            "offline_access",
            "device_sso"
        ],
        "token_endpoint_auth_methods_supported": [
            "client_secret_basic",
            "client_secret_post",
            "client_secret_jwt",
            "private_key_jwt",
            "none"
        ],
        "claims_supported": [
            "ver",
            "jti",
            "iss",
            "aud",
            "iat",
            "exp",
            "cid",
            "uid",
            "scp",
            "sub"
        ],
        "code_challenge_methods_supported": [
            "S256"
        ],
        "introspection_endpoint": "https://signin.johndeere.com/oauth2/aus78tnlaysMraFhC1t7/v1/introspect",
        "introspection_endpoint_auth_methods_supported": [
            "client_secret_basic",
            "client_secret_post",
            "client_secret_jwt",
            "private_key_jwt",
            "none"
        ],
        "revocation_endpoint": "https://signin.johndeere.com/oauth2/aus78tnlaysMraFhC1t7/v1/revoke",
        "revocation_endpoint_auth_methods_supported": [
            "client_secret_basic",
            "client_secret_post",
            "client_secret_jwt",
            "private_key_jwt",
            "none"
        ],
        "end_session_endpoint": "https://signin.johndeere.com/oauth2/aus78tnlaysMraFhC1t7/v1/logout",
        "request_parameter_supported": true,
        "request_object_signing_alg_values_supported": [
            "HS256",
            "HS384",
            "HS512",
            "RS256",
            "RS384",
            "RS512",
            "ES256",
            "ES384",
            "ES512"
        ],
        "device_authorization_endpoint": "https://signin.johndeere.com/oauth2/aus78tnlaysMraFhC1t7/v1/device/authorize",
        "dpop_signing_alg_values_supported": [
            "RS256",
            "RS384",
            "RS512",
            "ES256",
            "ES384",
            "ES512"
        ]
    }
  3. Acquire an authorization code

    The authorization code is obtained by using the authorization server as an intermediary between the client and resource owner. The client directs the resource owner to an authorization server, and once authorized the server redirects the resource owner back to the client with the authorization code. Along with the GET request to the authorization server URL, you will need to send a response type code parameter, along with OAuth scopes, client ID, state, and redirect URI.

    auth_code_1

    The authorization URL for the user to follow (in a web browser) should look like this:

    GET

    'https://signin.johndeere.com/oauth2/aus78tnlaysMraFhC1t7/v1/authorize?response_type=code&scope={scopes}&client_id={clientId}&state={state}&redirect_uri={redirect_uri}

    A note on OAuth Scopes and Data Permissions:

    In the  Dev Docs API sections, the required OAuth scopes will be referenced for each method and endpoint. For the OAuth access token, you must request the required scopes for each endpoint your application will be using. DO NOT request all scopes available on our authorization server as not all are required for your application, and your users should be prompted to only accept scopes (permissions) necessary for the API calls you will be making.

    The OAuth scopes your application requests initially for a user access token will directly relate to the permissions granted when the user makes the organization connection to your application. Please refer to the scopes table below. These scopes directly relate to user, partner, and Connected Software Company data access permissions referenced in Team Manager.

    Note: If the user has less permissions in their own organization(s) or their partner organization(s) than the scopes you are requesting initially, only the user’s permission set will be assumed in the connection from the selected organization to your application. We will not grant more permissions to your application than the connecting user has.

    Once the connection from the user’s organization is made to your application, you may request a higher-level scope or new scopes for the user access token, however, the connection permissions must also be adjusted by the user in https://connections.deere.com for the requesting application. Before adjusting those permission levels in the Connections website, the user must have obtained those permissions in their own organization or must be shared by the partner organizations that are currently connected.

    Scope

    User/Connection Permission

    Description

    org1

    Organization Management Access Level 1

    View Staff, Operators, and Partners

    org2

    Organization Management Access Level 1

    Organization Management Access Level 2

    View Staff, Operators, and Partners

    Modify Staff, Operators, and Partners

    eq1

    Equipment Access Level 1

    RDA

    Setup & WDT

    View Equipment

    Remote Display Access

    Setup File Creator, Products, and Wireless Data Transfer

    eq2

    Equipment Access Level 1

    Equipment Access Level 2

    Equipment Access Level 3

    RDA

    Setup & WDT

    View Equipment

    Edit Equipment (also View Detailed Machine Measurements)

    Manage Equipment

    Remote Display Access

    Setup File Creator, Products, and Wireless Data Transfer

    ag1

    Locations Access Level 1

    View Locations (Clients, Farms, Fields and Associated Data)

    ag2

    Locations Access Level 1

    Locations Access Level 2

    View Locations (Clients, Farms, Fields and Associated Data)

    Analyze Production Data (Website Access Only)

    ag3

    Locations Access Level 1

    Locations Access Level 2

    Locations Access Level 3

    View Locations (Clients, Farms, Fields and Associated Data)

    Analyze Production Data (Website Access Only)

    Manage Locations & Production Data (Website and API Access)

    files

    Files API Access

    Equipment Access Level 3

    Setup & WDT

    Files API Access (ag3 scope also required for most file types)

    Manage Equipment

    Setup File Creator, Products, and Wireless Data Transfer

    finance1

    Financial Access Level 1

    View Financials

    finance2

    Financial Access Level 1

    Financial Access Level 2

    View Financials

    Manage Financials

    work1

    Work and Crop Plans Access Level 1

    View Work and Crop Plans

    work2

    Work and Crop Plans Access Level 1

    Work and Crop Plans Access Level 2

    View Work and Crop Plans

    View Work and Crop Plans

    offline_access

    API Authentication Only

    Request a Refresh Token

    To summarize the Authorization Code steps:

    1. The customer initiates a request for data from a client application, and the client sends an OAuth request to the authorization server with the proper headers.

    2. The customer is redirected to the John Deere sign-in page.

    3. The customer signs into John Deere, and the request is redirected back to the authorization server.

    4. The customer is then presented with the scope allowance screen. (During first token request, or with modified scopes)

    5. Scope acceptance is sent back to the OAuth server, and the customer is then redirected back to the client application with the authorization code.

  4. Acquire an Access Token

    Once the application has the authorization code, the client then requests an access token from the token server by sending a grant type authorization_code parameter, along with the authorization code, a redirect URI, and the client credentials. The authorization server authenticates the client and issues an access token and a refresh token (only if offline_access scope was requested in the previous step). The access token will expire after 12 hours after which it must be refreshed (see the last step).

    auth_code_1

    POST

    https://signin.johndeere.com/oauth2/aus78tnlaysMraFhC1t7/v1/token

    Content-Type: application/x-www-form-urlencoded

    • grant_type=authorization_code

    • code={auth_code_from_authorize_call_response}

    • redirect_uri={redirect_uri}

    • client_id={client_id}

    • client_secret={client_secret}

  5. Post authorization redirect to enable organization access

    Once the client obtains a valid access token, there is an additional step required to enable organization data access for your client application. If this step is skipped, the client will receive a 403 Forbidden response when trying the access data for any organization to which the user has access

    auth_code_1
    1. Make a call to GET /organizations. If you see a ‘connections’ link in the response, your client has not granted access to that organization.

      Note: A user may have access to multiple organizations but may not enable access to all of them. A ‘connections’ may always be returned for an organization the user chooses not to allow your application access to.

      Example Response:

      [
        {
          "@type": "Organization",
          "name": "Spahn Ranch",
          "type": "customer",
          "member": true,
          "internal": false,
          "id": "283480",
          "links": [
            {
              "@type": "Link",
              "rel": "self",
              "uri": "https://apiqa.tal.deere.com/platform/organizations/283480"
            },
            {
              "@type": "Link",
              "rel": "connections",
              "uri": "https://connections.deere.com/connections/deere-sld8shg8ee0o8ns8nhdh88hn/select-organizations"
            }
          ]
        }
      ]
    2. Redirect the user to Operations Center (in a web browser) using the URI provided in the ‘connections’ link. You can also provide a redirect_uri query parameter so the user will be redirected back to your application after the organization selection process is completed. The redirect_uri that is provided must match one of the Redirect URIs listed in your application profile. The redirect_uri must also be URL encoded (i.e. “https://example.client.com/callback” should be passed as “https%3A%2F%2Fexample.client.com%2Fcallback”).

      Example URI: https://connections.deere.com/connections/{clientId}/select-organizations?redirect_uri={redirectUri}

    3. The user selects the organization(s) to which your client can have access.

      auth_code_1

    4. Once the organization selection is complete, the user will be redirected back to your application based on the redirect_uri query parameter that was provided. If the redirect_uri query parameter is not provided or is invalid, then the user will remain on the Connections application in Operations Center.

      Additionally, the GET /organizations endpoint will no longer include the ‘connections’ link and instead will include a ‘manage_connections’ link. This will link into the management modal in Connections for the application in the organization. Having the ‘manage_connections’ link implies that a connection between an application and organization is fully established.

      Example Response:

      [
        {
          "@type": "Organization",
          "name": "Spahn Ranch",
          "type": "customer",
          "member": true,
          "internal": false,
          "id": "283480",
          "links": [
            {
              "@type": "Link",
              "rel": "self",
              "uri": "https://apiqa.tal.deere.com/platform/organizations/283480"
            },
            {
              "@type": "Link",
              "rel": "manage_connections",
              "uri": "https://connections-qual.deere.com/connections/deere-sld8shg8ee0o8ns8nhdh88hn/connections-dialog?orgId=283480"
            }
          ]
        }
      ]
    5. Avoid getting into a redirect loop and only perform the connections redirect one time per user session. There are a few scenarios in Operations Center when a user either decides not to or is unable to complete the organization selection step. If your application does not have access to an organization after completing the connections redirect, we suggest that you inform the user that the connection was not completed and they may need to login to Operations Center to modify the Connection manually.

  6. Use the access token to call API resource

    Once the client obtains the valid access token and the user has enabled organization access for the client, they can use this token to call the appropriate resource server (API) to obtain the data needed.

    auth_code_1

    For API call structure, parameters, and headers, refer to the Dev Docs section.

    All your API calls should include an Authorization: Bearer {token} utilizing the obtained token.

  7. Setup Token Refresh Process

    The client application will need to pass a refresh token to the authorization (token) server to obtain a new access token before the access token expires (12 hours). For this you will pass through a refresh_token grant type parameter, along with the refresh_token to the token server.

    Even if the customer did not request a resource call, the client would need to initiate a periodic refresh of this token to keep it 'hot'. The refresh token will expire after 365 days if it is not used. If the refresh token expires, the customer will need to re-authenticate. As long as you continue to refresh the access token with this refresh token, it will remain active indefinitely (unless the customer removes all organization connections on https://connections.deere.com to your application).

    POST

    https://signin.johndeere.com/oauth2/aus78tnlaysMraFhC1t7/v1/token

    Accept: application/json

    Content-Type: application/x-www-form-urlencoded

    • grant_type=refresh_token

    • refresh_token={refresh_token}

    • redirect_uri={redirect_uri}

    • scope={scopes}

    • client_id={client_id}

    • client_secret={client_secret}


Using Postman to call the MyJohnDeere API (OAuth 2)

Postman is a third-party API client, which you can use to test your John Deere API calls. You may use the Postman website or the desktop application for calling APIs while in Sandbox to see and follow REST API responses. Other API test clients may work for this as well. The below instructions will provide the initial setup steps to get Postman configured and obtain an OAuth 2 token.

  1. Download and install Postman on your computer (link above), or you may use the web version.

  2. Open Postman, click on Settings at the top, and in General settings turn off all of the Headers options.

  3. In the top nav section of the Postman client application, you can hit the + sign to add a new request to your console.

  4. In the Auth section of that new request tab, there is a dropdown to select the type of authorization you’ll be using. Select the OAuth2 option.

  5. The screen will change, and you will see Type is set as OAuth 2.0.

  6. Add auth data to should be set as Request Headers.

  7. Header Prefix should be set as Bearer.

  8. Within the Configure New Token section, you will need to add values to each of the fields or configure the options before selecting the Get New Access Token button (or it will error out).

    1. Add a Token Name (can be anything).

    2. Leave the Grant Type as Authorization Code.

    3. The Callback URL for redirecting the authorization code back to Postman is https://www.getpostman.com/oauth2/callback. The Callback URL can be set to anything in this example. Remember that if you will be using this Postman callback URL, it (and any other Callback URL you use) will need to be synced with your OAuth client. See step 2 in this document for help in syncing this Callback URL with your application.

    4. The Auth URL and Access Token URL can be found with opening a new Postman request window and doing a GET on this URL https://signin.johndeere.com/oauth2/aus78tnlaysMraFhC1t7/.well-known/oauth-authorization-server. No Auth is needed for this GET request. You can also open this URL in any internet browser window.

    5. For the Client ID and Client Secret Developer.Deere.com, login, and access your application profile in the "My Applications" section.

    6. In the Details window, under the Security section, you will find this information. What Postman calls the Client ID is called "Application Id" in this window. What Postman calls the Client Secret is called "Secret" in this window. Copy the necessary information into the Postman token section.

    7. The Scope box should be populated with only the scopes require for the API calls you are making (space delimited). The scopes required for your API calls can be found in the Dev Docs section of every API under each endpoint’s documentation.

    8. State is an opaque value to prevent cross-site forgery. Enter any unique string in this box (ex. 12345).

    9. For Client Authentication, this option should be set to Send client credentials in body for this example. (not selecting this option will result in an error)

  9. Once the steps above are complete, press the Get New Access Token button to proceed to the John Deere sign in page where a valid Operations Center user can sign in. If this is the first time the user is obtaining an API token for your application, they will be presented with the scopes acceptance screen, to which they must choose Allow Access (Don’t Allow will result in a token with no assigned scopes).

  10. In the Details window, the first two pieces of information that OAuth requires are found in the Application Details section (illustration below). What Postman calls the Client ID is called "Application Id" in this window. What Postman calls the Client Secret is called "Secret" in this window. Copy the necessary information into the Postman token section.

  11. Once the token is obtained and shown in the Postman screen, select the Use Token button to apply the token to your current API call. (you do not need to configure Authorization headers on the API call, as Postman will do this for you)

  12. The next step is to enter the URL of the API call and configure an Accept header. To test, please configure the API URL to be GET https://sandboxapi.deere.com/platform/organizations. In the Headers section, please configure an Accept header with a value of application/vnd.deere.axiom.v3+json. (you may leave the default Postman headers in the request, if applicable)

  13. Only once all the steps above are completed, can you hit the Send button in the API request to make the API call and receive a 200 OK response and response body.

  14. If you can’t complete this process or have any questions, please feel free to use the Support button in the top navigation of the page to contact us.



Common Error Codes

When a client application is making requests to John Deere APIs, it will encounter HTTP response errors that should be handled appropriately. Below you will find most of these errors and instructions on handling them.

400 Bad Request

HTTP Code: 400
Response code: Bad Request

This error means that either the POST/PUT body used in the request is incorrect, or if this error is seen in the OAuth 2 POST /token request, it means the refresh token is invalid. Before contacting API Support, please attempt to update the request body or get a valid token for the user. Please see the OAuth 2 documentation here.

401 Unauthorized

HTTP Code: 401
Response code: Server Authorization Failed

This error means that either the application does not have a license for the endpoint, or the user token is expired. Before contacting API Support, please attempt to get a valid token for the user, or use the refresh token process to get a new access token. Please see the OAuth 2 documentation here. Information about what APIs a client application can call by default are listed here, and all other APIs listed on the website are only accessible via a given license.

403 Forbidden

HTTP Code: 403
Response code: Access Denied

This error pertains to the user not having access to this resource. You should only request resources found while navigating the REST endpoints for the user. If the client calls for a resource the user does not have access to, the request will be denied. You can prevent this error by beginning your calls with /platform, and following the returned links to discover resource IDs available to the user (most are found under the /organizations link).

HTTP Code: 403
Response: The client does not have a proper access for this API

This error relates to missing OAuth 2 scopes for the user token. Along with this error code, you will see the client ID, license needed, and read/write/delete scopes needed for that license to make the corresponding requests.

HTTP Code: 403
Response: Requested org is in a restricted state

This error relates to our updates Orgs Terms & Conditions process. We have a guide for handling these requests here.

404 Not Found

HTTP Code: 404
Response code: The requested resource was not found

This error means that the resource ID requested is not valid. All resource IDs should be parsed from API responses immediately before requesting access to it. If IDs are stored for long periods of time, user access to that resource could change or be removed.

429 Too Many Requests

HTTP Code: 429
Response code: HTTP_TOO_MANY_REQUESTS

When the John Deere Servers are overwhelmed by requests, clients may receive a HTTP 429 response. That response may include a "Retry-After" header with a numeric value indicating the number of seconds the client should wait before trying again. When you receive a 429 response with that header, you have to wait at least for the specified time before retrying the request. If a customer is actively waiting for the result, you may need to return an error instead of waiting. If your application is fully asynchronous, always wait the Retry-After amount.

503 Service Unavailable

HTTP Code: 503
Response code: : HTTP_SERVICE_UNAVAILABLE

When John Deere Servers have a backend or server problem, they MAY return a corresponding Retry-After header along with a 503 response. If a 503 is returned without a Retry-After header then John Deere Servers cannot estimate a reasonable recovery time. Your application should enter an exponential back-off loop or return an error in this case. If a Retry-After header is returned, wait the number of seconds given and try again

For all other possible status codes, please refer to this resource that is publicly available (provided by Wikipedia).