Skip to main content
10-Marble
May 9, 2016
Question

ThingWorx REST API Cheat Sheet

  • May 9, 2016
  • 12 replies
  • 35417 views

There is now an official REST API guide on the ThingWorx Developer Zone and there will be more to come in the future as we update our documentation/guides/tutorials/etc.

 

 

 

Good starting point for learning about ThingWorx REST APIS

http://support.ptc.com/cs/help/thingworx_hc/thingworx_7.0_hc/

The following sections will be useful to you for general reference:

              -ThingWorx REST API

              -ThingWorx Platform API Documentation

 

Get a list of services on a specific thing

Using the following GET request you can get a list of all available service on a given thing. If done through your browser, then you will be able to click on each individual service to learn more about the parameters needed.

${platform}/Thingworx/Things/${thingName}/serviceDefinitions

All of these services can be executed via the REST API using the following format: ${Platform}/Thingworx/Things/${thing name}/Services/${add service and query parameters here}.

              NOTE: the same thing can be done on other entities such as ThingTempaltes or Thing Shapes by replacing the "Things/${thing name}" part with "ThingTemplates/${thing template name}" or "ThingShapes/${thing shape name}" etc.

 

Entity Services:

EntityServices is a resource that allows you to control the typical Create, Read, Update and Delete (CRUD) services for all entities ont eh platform. Using the method listed above, you canget a list of all available services using the following REST call:

${platform}/Thingworx/Resources/EntityServices/ServiceDefinitions

Each of these services can be executed using the following endpoint structure: ${Platform}/Thingworx/Resources/EntityServices/Services/${service name}.

 

NOTE: any of the methods listed with "/Services/" as part of the URL you can find a matching service through Composer (ThingWorx UI) in the "services" section for a given thing or resource. You can execute many different services this way.

 

API call Examples:

All of the following API calls will be preceded with the following:

             https ://{your ThingWorx host here}/Thingworx/

 

Note: in order to use appKeys instead of basic auth, you will need the following query parameters in your calls:

?appKey={your appkey}&x-thingworx-session=true

 

List Things:

NOTE: The same can be done for any other entity type on the platform

Method: Get

URL: /Things

Headers: Accept: “application/json”

 

            Expected Response:

                Status Code: 200

                Example Response Body:

...

"rows":

  {

      "isSystemObject": true

      "name": "MyThing1"

      "description": "some description"

      "homeMashup": "MonitoringAlertHistory"

      "avatar": "/Thingworx/Things/MyThing1/Avatar"

      "tags": []

  }

  {

      "isSystemObject": false

      "name": "MyThing2"

      "description": "another description"

      "homeMashup": ""

      "avatar": "/Thingworx/Things/MyThing2/Avatar"

      "tags": []

  }

...

 

Create Thing:

NOTE: After creating a thing you will need to enable then restart it in order to use it. Those calls are listed next.

 

              Method: POST

              URL: /Resources/EntityServices/Services/CreateThing

              Content-Type: "application/json"

 

              Post Body:

{

      "name":{name of the thing to create},

      "description":{description for the thing you are creating}

      "thingTemplateName":{name of the template to base the thing on, can use

      "GenericThing" if there is not a specialized template}

}

 

            example:

{

      "name": "myThing",

      "description":"thing description",

      "thingTemplateName":"GenericThing"

}

 

            Expected Response:

                Status Code: 200

                Example Response Body:

                No Body

 

Enable Thing:

              Method: POST

              URL: /Things/{Thing Name}/Services/EnableThing

              Content-Type: "application/json"

              Post Body:

              {}

 

              Expected Response:

                   Status Code: 200

                   Example Response Body:

                   No Body

 

Restart Thing:

              Method: POST

              URL: /Things/{Thing Name}/Services/RestartThing

              Content-Type: "application/json"

              Post Body:

              {}

 

              Expected Response:

                   Status Code: 200

                   Example Response Body:

                   No Body

 

 

Add Property Definition:

              Method: POST

              URL: /Things/{ThingName}/Services/AddPropertyDefinition

              Content-Type:"application/json"

  Post Body: NOTE: There are many different inputs you can have for this, these are the simple ones that are likely all you will need

{

    "name":{name of your property},

    "description":{description of this property},

    "type":{type of the property, must be a valid type such as "STRING" or "NUMBER"},

}

 

              Example Post Body:

{

    "name": "myProperty",

    "description":"This is a String Property",

    "type":"STRING"

}

 

              Expected Response:

                   Status Code: 200

                   Example Response Body:

                   No Body

 

 

Get All Property Values:

              Method: GET

              URL: /Things/{ThingName}/Properties

              Accept:"application/json"

 

  This will return json formatted information about the thing, you will want the values under "rows"

              Expected Response:

                   Status Code: 200

                   Example Response Body:

...

rows:

    [

          {

              "myProperty": "test"

              "name": "myThing"

              "description": "property description"

              "thingTemplate": "GenericThing"

              "tags": []

          }

    ]

 

 

Get Single Property Value:

              Method: GET

              URL: /Things/{ThingName}/Properties/{property name}?appKey={appKey}

              Accept:"application/json"

 

  This will return json formatted information about the thing, you will want the values under "rows"

              Expected Response:

                   Status Code: 200

                   Example Response Body:

...

rows:

    [

          {

              "myProperty": "test"

          }

    ]

 

 

Set Property Values:

              Method: PUT

              URL: /Things/{ThingName}/Properties/{propertyName}

              Content-Type:"application/json"

              Post Body:

{

    {name of property}:{value of property}

}

 

              Example Post Body:

{

    "myProperty":"test"

}

 

              Expected Response:

                   Status Code: 200

                   Example Response Body:

                   No Body

 

Add Event Definition:

              Method: POST

              URL: /Things/{ThingName}/Services/AddPropertyDefinition

              Content-Type:"application/json"

              Post Body:

{

    "name":{name of the event},

    "description":{description of the event},

    "dataShape":{data shape on the platform to use for event information, this needs to exsist ahead of time}

}

 

              Example Post Body:

{

    "name": "myEvent",

    "description": "This event triggers when a tag moves out of a given zone",

    "dataShape": "3DZoneShape"

}

 

              Expected Response:

                   Status Code: 200

                   Example Response Body:

                   No Body

 

Trigger Event:

              Method: POST

              URL: /Things/{ThingName}/Events/{name of event to trigger}

              Content-Type:"application/json"

              Post Body:

              {json formatted data that matches the field for your defined dataShape}

 

              Example Post Bodies:

 

              1. Empty dataShape:

                              {}

              2. Example dataShape with zone and time:

{

    "Zone":3,

    "Time":"4/6/2016 10:31:15"

}

 

              Expected Response:

                   Status Code: 200

                   Example Response Body:

                   No Body

12 replies

danme10-MarbleAuthor
10-Marble
June 28, 2017

Thanks both, I fixed the link

13-Aquamarine
October 27, 2018

for Add Event  Definition, I think the URL was wrote the wrong word
Correct should be "URL: /Things/{ThingName}/Services/AddEventDefinition"

 

Add Event Definition:

              Method: POST

              URL: /Things/{ThingName}/Services/AddPropertyEventDefinition

              Content-Type:"application/json"

              Post Body: