ToolHound API Call

Updated by Dean Perry

ToolHound provides a comprehensive RESTful API for programmatic access to your tool management system. You can find the complete API documentation by appending /api-docs to your ToolHound URL. For example:

  • On-Premise: https://www.myserver.com/api-docs
  • Cloud: https://www.mytoolhound.com/api-docs

The base URL for making API calls is:

  • On-Premise: https://www.myserver.com/api
  • Cloud: https://www.mytoolhound.com/api

All API calls require authentication via a web token, which you can obtain by calling your application URL followed by /connect/token. This token is database-specific and must be included as a bearer token in all subsequent requests. Best practice is to obtain a new token for each session rather than storing it long-term - get a token, perform your required operations, then discard it.

Watch this video for a step-by-step walkthrough of using the ToolHound web API.
Additional documentation and sample code are available from our password-protected download link in the Documentation folder. We also provide Postman export files containing multiple sample API calls that you can import and test with your specific URL and authentication token. You can obtain the download link and password from your update notice or by contacting Support.

Authentication: Getting a Token

To make any API calls, you must first obtain an authentication token using the following request:

POST /connect/token

Host: https://www.myserver.com

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

grant_type=password&username=admin&password=12345678&company=th1&timezoneoffset=420&timezone=America/New_York&source=X

Required parameters:

grant_type: must always be "password"

username: a valid ToolHound username

password: the password for the given username

company: company alias corresponding to the database name

timezoneoffset: integer value indicating minutes offset from GMT for the local time zone

timezone: IANA time zone identifier (e.g., America/New_York) Required for versions 6.2022.10.27 and higher

source: character value indicating the application accessing the system (displayed as the source on many records)

Example response:

{

"token_type": "Bearer",

"access_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IlhORzBWTVBYWURDTjEzTlBUMVRJSzBPRktDUEpZVlJOMEJSRklYVDciLCJ0eXAiOiJKV1QifQ.eyJzdWIiOiI3MGI0Yzk3MC0xYmZhLTQ4YWEtYmI1Ni01OWU3ODRlNjU4ZmYiLCJjb21wYW55IjoidGgxIiwidGltZXpvbmVvZmZzZXQiOiI0MjAiLCJ1c2VyaWQiOiIxMDAwMDAiLCJsb2NhbGVpZCI6IkVOLVVTIiwibG9jYXRpb25pZCI6IjAiLCJlbnRpdHlpZCI6IjAiLCJzb3VyY2UiOiJYIiwidG9rZW5fdXNhZ2UiOiJhY2Nlc3NfdG9rZW4iLCJqdGkiOiI5MTQzOGYwOS0zYzAyLTRlZDQtOTVhZi02N2QwMGNlZWFjYTkiLCJhdWQiOiJodHRwczovL2xvY2FsaG9zdDo0NDM3MC8iLCJuYmYiOjE1ODMyNTEwODksImV4cCI6MTU4MzQyMzg4OSwiaWF0IjoxNTgzMjUxMDg5LCJpc3MiOiJodHRwczovL2xvY2FsaG9zdDo0NDM3MC8ifQ.fFQ2tXiOvQNYRYurSLIVWxnF0yKw6MBk4znXlljBj_DmiwzHmaf_OrfTG_GqXe1_r2zL2HXBgmrNKq9x33YlBPjZV3wKLDJIWC4ks61MksoymGIDTJCUzBuK5CyKhoMJf-8CPb1fFzMpGhPU8uL2oSm8d_THJmb8FHmIkpCXlLMxL7op_zMJp_Ak2B-BKh6iKO9VqHj_f61OU3UsuR8neyLa4DNhgKrp6bnYK3kuW1OyboEwhnYNDi12jF_DVimsj_-e1kKnsVIDqzlCFL311cVYOy39YMbWoEutSqmW8fT2T1KrV4t4z1p9Z6PjRREeKoNw_wdZFFFRaz70qHvbAQ",

"expires_in": 172800

}

The access_token value must be included in the Authorization header of all subsequent API calls. The token expires after the time specified in expires_in (in seconds, currently set to 48 hours).

API Example: Employer Import

Below is an example of using the EmployerImport API to add a new Employer record or update an existing one:

POST /api/EmployerImport/ImportRow

Host: https://www.myserver.com

Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IlhORzBWTVBYWURDTjEzTlBUMVRJSzBPRktDUEpZVlJOMEJSRklYVDciLCJ0eXAiOiJKV1QifQ.eyJzdWIiOiI3MGI0Yzk3MC0xYmZhLTQ4YWEtYmI1Ni01OWU3ODRlNjU4ZmYiLCJjb21wYW55IjoidGgxIiwidGltZXpvbmVvZmZzZXQiOiI0MjAiLCJ1c2VyaWQiOiIxMDAwMDAiLCJsb2NhbGVpZCI6IkVOLVVTIiwibG9jYXRpb25pZCI6IjAiLCJlbnRpdHlpZCI6IjAiLCJzb3VyY2UiOiJYIiwidG9rZW5fdXNhZ2UiOiJhY2Nlc3NfdG9rZW4iLCJqdGkiOiI5MTQzOGYwOS0zYzAyLTRlZDQtOTVhZi02N2QwMGNlZWFjYTkiLCJhdWQiOiJodHRwczovL2xvY2FsaG9zdDo0NDM3MC8iLCJuYmYiOjE1ODMyNTEwODksImV4cCI6MTU4MzQyMzg4OSwiaWF0IjoxNTgzMjUxMDg5LCJpc3MiOiJodHRwczovL2xvY2FsaG9zdDo0NDM3MC8ifQ.fFQ2tXiOvQNYRYurSLIVWxnF0yKw6MBk4znXlljBj_DmiwzHmaf_OrfTG_GqXe1_r2zL2HXBgmrNKq9x33YlBPjZV3wKLDJIWC4ks61MksoymGIDTJCUzBuK5CyKhoMJf-8CPb1fFzMpGhPU8uL2oSm8d_THJmb8FHmIkpCXlLMxL7op_zMJp_Ak2B-BKh6iKO9VqHj_f61OU3UsuR8neyLa4DNhgKrp6bnYK3kuW1OyboEwhnYNDi12jF_DVimsj_-e1kKnsVIDqzlCFL311cVYOy39YMbWoEutSqmW8fT2T1KrV4t4z1p9Z6PjRREeKoNw_wdZFFFRaz70qHvbAQ

Content-Type: application/json

{

"EmployerID": "2282",

"OrganizationName": "Edmonton LRT",

"Visibility": "95462",

"Address": "",

"City": "Edmonton",

"CountryCode": "",

"StateProv": "Alberta",

"PostCode": "",

"Contact": "Bob Jones",

"ContactTitle": "EQ Mgr",

"Telephone": "",

"MobilePhone": "",

"HomePhone": "",

"Fax": "",

"Email": "toolhound@toolhound.com",

"Active": "Y",

"UserField1": "Yes",

"UserField2": "Prj CA LRT",

"UserField3": "Tool Hound"

}

​Copyright © 2020-2025 ToolHound Inc. All Rights Reserved.


How did we do?