General FAQs

The Api method end points can be found in the sandbox for each interface token.

In order to access the API, the Api Private Token must be Base64 encoded before it is sent in the request header as "X-Api-Token".


C# Example

string URL = "https://capi.ulprospector.com/api/v1/property";
string DATA = string.Empty;

HttpClient client = new HttpClient();
client.BaseAddress = new Uri(URL);
byte[] cred = UTF8Encoding.UTF8.GetBytes("Your Key Goes Here");
client.DefaultRequestHeaders.Add("X-Api-Token", Convert.ToBase64String(cred));
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

HttpContent content = new StringContent(DATA, UTF8Encoding.UTF8, "application/json");
HttpResponseMessage messge = client.GetAsync(URL).Result;   
string description = string.Empty;
if (messge.IsSuccessStatusCode)
{
    string result = messge.Content.ReadAsStringAsync().Result;
    description = result;
}

Note: Failure to properly encode will return
HTTP Response body 
~BEGIN~
{"Error":"A record matching the provided 'X-Api-Token' could not be found.","Result":null}
~END~

Term Description
Entry An Entry is an item that has a particular set of data associated with it. Within the UL Prospector database, and Entry almost always refers to a particular product.
Filter A Filter is query that narrows a search. There are three types of filters: list ("list"), numeric range ("numericrange"), and keyword ("keyword").
Interface An interface is a configuration involving units, properties, formatting, languages, etc. for a particular set of materials.
Property A Property represents a particular attribute of an Entry (product). Properties can have various data types, including text, pick-list (text list), numeric, and numeric-range. A few examples of properties include a product’s supplier, product name, availability, and density. Many properties are associated to a particular Test Method: for example Density (ISO 1183).
Test Method Test Method refers to the standard associated with all the data for a particular property. For example, ISO specifies how a Density is to be tested (ISO 1183)
Unit Unit refers to the unit or measurement for a particular quantity. For example, mass can be measured in “kg.”
Unit Class Unit Class refers Units available for a particular quantity. For example, kg and lb are both units of mass.

Often when starting a search we know the property we are wanting to filter on. In this case we will say it is Uses (220). Using the /api/v1/search/range Method with no filters set will return you a list of all the available values for a given property. In the following case we set the property to Uses (220)

{
  "PropertyIds": [
    220
  ],
  "Language": "en",
  "Filters": [
  ]
}
The reults are as follows
{
  "220": {
    "PropertyType": "List",
    "PropertyId": 220,
    "Min": null,
    "Max": null,
    "UnitId": null,
    "Unit": null,
    "Note": null,
    "Values": [
      {
        "Id": 239,
        "Text": "Abrasive Cleaning Material"
      },
      {
        "Id": 295,
        "Text": "Acoustic Barrier"
      },
      {
        "Id": 508,
        "Text": "Additive"
      },
      {
        "Id": 108,
        "Text": "Adhesives"
      },
      {
        "Id": 11,
        "Text": "Aerospace Applications"
      },
      {
        "Id": 275,
        "Text": "Agricultural Applications"
      },
      {
        "Id": 170,
        "Text": "Aircraft Applications"
      },
      {
        "Id": 121,
        "Text": "Aircraft Interiors"
      },
      {
        "Id": 86,
        "Text": "Appliance Components"
      },
      {
        "Id": 7,
        "Text": "Appliances"
      },
      ...
    ]
  }
}

Filtering Values on a search - The following shows a Search Result /api/v1/search/result with the filter set for Uses (220) and filtering "Aircraft Applications" (170) and "Aircraft Interiors" (121)

{
  "PropertyIds": [
    30260,
    100,
    80
  ],
  "Sorts": [
    {
      "PropertyId": 100,
      "Ascending": true
    }
  ],
  "Page": 1,
  "PageSize": 25,
  "Language": "en",
  "Filters": [
    {
      "Type": "list",
      "PropertyId": 220,
      "ItemIds": [
       170,121
      ]
    }
  ],
  "UnitSystem": 0
}

You can request the property values for a given list of materials specified by a query. If not query exists, the entire list is returned.

Step 1: Submit an empty query to the SearchResults method along with desired property ids

Use the /api/v1/search/results method with no filters set -- sorted by supplier

Request:

{
    "PropertyIds": [ 30260, 100, 80, 3580 ],
    "Sorts": [ { "PropertyId": 100, "Ascending": true } ],
    "Page": 0,
    "PageSize": 25,
    "Language": "en",
    "Filters": []
}
                

Note: Requesting the entire linecard in one call is not advised and will cause performance issues. Instead step through the pages using the page count returned in the dataset.

Response Body:

{
    "ResultSummary": {
        "ResultCount": 302,
        "RequestedPage": 0,
        "PageCount": 13
    },
    "PropertySummary": [...],
    "ActionSummary": [...],
    "Data": [...]
}
                

A manufacturer product index (mpi) lists products by manufacturer/supplier. In order to create an mpi, we must first submit a propertyquery with no filters to the PropertyRange method requesting property 100 (manufacturer/supplier). This will give us a list of all manufacturers/suppliers for the business unit. Then, for each manufacturer/supplier id returned in the first query, we submit another propertyquery filtered by that manufacturer/supplier id requesting property 40 (product name). This returns a list of product lines for that given manufacturer/supplier.

Step 1: Request a range of manufacturer/suppliers for the business unit.

Use the /api/v1/search/range method with no filters set -- requesting property id 100
Request:
{
    "PropertyIds": [
    100
    ],
    "Language": "en",
    "Filters": []
}
                
Response Body:
{
    "100": {
        "PropertyType": "List",
        "PropertyId": 100,
        "Min": null,
        "Max": null,
        "UnitId": null,
        "Unit": null,
        "Note": null,
        "Values": [
            {
            "Id": 1443,
            "Text": "3D Systems"
            },
            {
            "Id": 3673,
            "Text": "3DXTECH"
            },
            {
            "Id": 1890,
            "Text": "3M Advanced Materials Division"
            },
            {
            "Id": 1330,
            "Text": "4Plas"
            },
            {
            "Id": 1389,
            "Text": "5M s.r.o."
            },
            ...
        ]
    }
}
                

Step 2: Request a range of product names for each manufacturer/supplier id obtained in step 1.

Use the /api/v1/search/range method filtered by given manufacturer/supplier id -- requesting property id 40
Request:
{
    "PropertyIds": [ 40 ],
    "Language": "en",
    "Filters": [ 
        { 
        "Type": "list",
        "PropertyId": 100,
        "ItemIds": [ 1443 ]
        }
    ]
}
                
Response Body:
{
    "40": {
        "PropertyType": "List",
        "PropertyId": 40,
        "Min": null,
        "Max": null,
        "UnitId": null,
        "Unit": null,
        "Note": null,
        "Values": [
            {
            "Id": 3785,
            "Text": "Accura®"
            },
            {
            "Id": 3783,
            "Text": "CastForm™"
            },
            ...
        ]
    }
}
                

The following is an example of returning results data for Property 80 (Generic Symbol) and Linkcode of 1 (ABS) The request is for three columns of data, Properties (30260 - Product, 100 - Manufacturer / Supplier, 80 - Generic Symbol) We are requesting Page 1 of the results set and 25 rows per page. The data will be sorted ascending by property 100.

{
  "PropertyIds": [
    30260,
    100,
    80
  ],
  "Sorts": [
    {
      "PropertyId": 100,
      "Ascending": true
    }
  ],
  "Page": 1,
  "PageSize": 25,
  "Language": "en",
  "Filters": [
    {
      "Type": "list",
      "PropertyId": 80,
      "ItemIds": [
        1
      ]
    }
  ],
  "UnitSystem": 0
}

The results set will begin with a summary of the results returned. This information can be used to page through the results with the PageCount and RequestedPage.
...
    {
  "ResultSummary": {
    "ResultCount": 2815,
    "RequestedPage": 1,
    "PageCount": 113
  },...
Property Summary - Property information on the returned results.
...
"PropertySummary": [
    {
      "PropertyId": 30260,
      "Name": "Product",
      "Unit": "",
      "UnitId": 0,
      "Standard": null,
      "PropertyType": "Text"
    },
    {
      "PropertyId": 100,
      "Name": "Manufacturer / Supplier",
      "Unit": "",
      "UnitId": 0,
      "Standard": null,
      "PropertyType": "List"
    },
    {
      "PropertyId": 80,
      "Name": "Generic Symbol",
      "Unit": "",
      "UnitId": 0,
      "Standard": null,
      "PropertyType": "List"
    }
  ],...
Action Summary - Contains information on different action links
...

  "ActionSummary": [
    {
      "Name": "Datasheet"
    }
  ],...
Data - Result Value Data
...
  "Data": [
    {
      "EntryId": 379497,
      "PropertyData": [
        {
          "PropertyId": 30260,
          "Values": [
            {
              "Value": "3DXMAX® ESD-Safe ABS 3D Filament",
              "Note": ""
            }
          ]
        },
        {
          "PropertyId": 100,
          "Values": [
            {
              "Value": "3DXTECH",
              "Note": ""
            }
          ]
        },
        {
          "PropertyId": 80,
          "Values": [
            {
              "Value": "ABS",
              "Note": ""
            }
          ]
        }
      ],
      "ActionData": [
        [
          {
            "Url": "https://capi.ulprospector.com/special-lit-document",
            "Title": "Datasheet"
          }
        ]
      ]
    },...