The Technology Performance Exchange API provides programmatic access to product and performance data.

Data Access

Registered users of the site can query the site via the search resource and download a product and its corresponding performance data with the download resource.

The API is only available to authenticated users. If querying the API in a web browser, for example, you must first login to the site.

Search Resource

The search resource retrieves products from the site across all technology categories. The parameter specifies the keyword to search on. Each result will contain product information as well as an asssociated URI which can then be used to download a product and its data.

Request URL

GET https://<baseurl>/api/search/


The following parameter(s) must be passed in the request to specify the output of the query:

keywordYesType:stringThe keyword to search on



Download Resource

The download resource allows you to download a product and all of its related performance data in csv format. A product's URI, returned by the search resource, is used to download the data. The Request URL can also be built from the product's unique identifier (UUID)

Request URL

GET https://<baseurl>/api/download/


The following parameter(s) must be passed in the request to specify the output of the query:

UUIDYesType:stringThe product's unique TPEx identifier



Fields Resource

The fields resource allows you to retrieve a list of all performance fields associated with a technology category as well as related meta data such as display name and technical description. This can be used to better understand the information returned by the search resource.

Request URL

GET https://<baseurl>/api/fields/<technologyID>


The following parameter(s) must be passed in the request to specify the output of the query:

technologyIDYesType:stringThe technology category's unique identifier

The following table lists each technology category and its respective identifier:

Technology CategorytechnologyID
Lamp Ballastslmpbls
Non-SSL Lampsnnslmp
Non-SSL Luminairesnnslmn
SSL Replacement Lampsslrplc
SSL Luminairesslmnrs
Heat Pump Water Heatershtpmpw
Hot-Water Boilershtwtrb
Steam Boilersstmblr
Positive Displacement Refrigeration Compressorspstvds
Rooftop Unitsrftpnt
Rotodynamic Pumpsrtdynm
Indoor Unitsndrnt
Outdoor Unitstdrnt
Mini-Split Systemsmnsplt
Low-Voltage, Dry Type Distribution Transformerslwvltg
Photovoltaic Modulesphtvlt
Gas-Fired Unit Heatersgsfrdn
Refrigerated Casesrfrgrt



Data Upload

Manufacturer and Brand Owner users can upload product information and associated performance data programmatically via the API. Third-Party Test Laboratory and Contributing Evaluator users can upload performance data associated with an existing product programmatically. A Ruby gem is available to facilitate these tasks. Download the TPEx gem.

Using the TPEx Gem


You will need Ruby version 1.9.3 installed on your computer as well as the RubyGems package.

Download the TPEx gem. From the command line, navigate to the directory where you downloaded the gem and run the following commands:

  • gem install tpex
  • gem install colored
  • gem install hashie

Using the Gem

The general workflow for uploading data to the TPEx via the API is shown below.

  1. Login to the TPEx site
  2. Set the security token
  3. Post the product (manufacturers only)
  4. Post file (optional)
  5. Post performance data for the product

You can then write a simple Ruby script that uses the gem, as outlined in the following steps:


Make sure to include the gem:

require 'tpex'

Initialize the client:

client = TPEX.client(username:"<TPEX_USERNAME>", password:"<TPEX_PASSWORD>", logging:nil, endpoint:'')



Get a token and assign it:

token = client.get_access_token()
client.access_token = token

Posting a Product

The steps to post a new product are as follows.

Assemble a hash of your product data:

product_fields = {
  manufacturer: ,
  certified: ,
  tags: ,
  model_no: data,
  brand: ,
  product_line: ,
  femp: ,
  upc: ,

Build a product object out of the hash:

product = client.build_product(product_fields)

Post the product, and wrap it in a rescue statement for helpful feedback. If an error occurs in the process, the product_response variable will have the details of the error.

  product_response = client.post_product(product)
rescue StandardError => e
  print “failure”
  print “success”

Posting a File

Follow these instructions if you have a file to attach, such as a spec sheet.

The file must fisrt be base64 encoded:

filedata = Base64.strict_encode64(

Build the file into an object the client understands:

specification_sheet = client.build_file(:file => filedata, :filename => filename, :filesize => filedata.length)

Post the file object and save the response:

specification_sheet_response = client.post_file(specification_sheet)

Save the fid for use when posting the performance node later:

fid = specification_sheet_response.fid

Posting performance data

Posting performance data follows a very similar format to product data.

Prepare a hash of all your performance fields. Each technology category has its own set of field mappings. The following templates have the mappings for the technology categories that can currently be uploaded to the TPEx via the API:

Template file fields ending in "_src" are used to indicate the origin of the associated field's data. The following table contains the list of valid options for the "_src" fields. Please use the "machine name" in the templates.

Machine NameDescription
nonmeasppdcNon-Measurable Physical Property/Design Criteria
selfmsrfldSelf-Measured, Field
selfmsrlabSelf-Measured, Laboratory
msrotrfldMeasured By Others, Field
msrotrlabMeasured By Others, Laboratory
calcselfmsrfldCalculated Using Self-Measured Field Data
calcselfmsrlabCalculated Using Self-Measured Laboratory Data
calcotrmsrfldCalculated Using Others' Measured Field Data
calcotrmsrlabCalculated Using Others' Measured Laboratory Data
rptextunkReported by External Source, Derivation Unknown
calcextunkCalculated Using External Data, Derivation Unknown

Template files also contain fields for you to list performance map filenames, where appropriate. Performance map templates, listed below, can be filled out and placed in a directory named "files" in the same directory as your API template file. They will be uploaded when the template file is processed.

Build a performance node object out of your hash:

perf = client.build_performance_node(performance_fields)

Post the performance node. The perf_response variable will hold all the return values from the call.

  perf_response = client.post_performance_node(perf)
rescue StandardError => e
  print “failure”
  print “success”

Cleaning up

At the end of your script, logout:


Example Script

The following parser script is an example script that uses the TPEx gem. It can be used as a starting point for using the gem and customized to fit your needs. Download the parser script.

To run the script, pass the content type and template file name as arguments. For example:

ruby parser.rb 'Non-SSL Lamps' 'non_ssl_lamps.csv'