Skip to main content
10-Marble
May 9, 2016 8:53 PM UTC
Question

ThingWorx REST API Cheat Sheet

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
Jun 28, 2017 5:08 PM UTC

Thanks both, I fixed the link

Translate
13-Aquamarine
Oct 27, 2018 2:53 AM UTC

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:

Translate