All following information relates to the D-Tools System Integrator (on-premises or hosted server) API. This API is not for D-Tools Cloud, but just for the D-Tools System Integrator.
Please take a moment to review our overall API capabilities and considerations. This will help you understand how our API works and will answer most of the preliminary questions you may have. This page is updated when new features become available.
The D-Tools SI API is Cloud-based and has been created to bridge the data from the on-premises (or hosted) D-Tools instance to a cloud API Server, where it becomes available for subscription and updates from/to a 3rd party application.
It is important to understand how our API has been designed in relationship to our product: As an on-premises application (regardless if the server is installed locally or is hosted), SI has no directly accessible API. Instead, we have created a middle-ware solution running on our cloud, simulating a queue for data. When you POST data to the API, that data is stored on the API until it is applied to D-Tools SI. To consume data from the API, D-Tools SI must first export data to the API. The export of data (i.e. project export) can be done manually or automatically
Cloud API
Service URL - https://api.d-tools.com/si/
Service Documentation - https://api.d-tools.com/si/doc
Features Available
Projects and Change Orders
Publish (POST) New SI project and change orders
Update (POST) Existing SI project
Subscribe (GET) SI projects and Change orders
Catalog
Subscribe (GET) Products
Create or Update (POST) Products
Tasks
Subscribe (GET) Tasks
Service Orders
Publish (POST) New Service Orders
Subscribe (GET) Service Orders
Purchase Orders
Subscribe (GET) Purchase Orders
Service Plan
Subscribe (GET) Service Plans
Time Sheets
Subscribe (GET) Time Sheets
Clients
Publish (POST) New Clients.
Update (POST) Existing Clients
Subscribe (GET) Clients (will be available in v21 - mid-February release)
Webhooks (will be available in v21 - mid-February release)
Please note that the old Change Order method (before SI2017, and based on revision compare) is deprecated. Please use the Change Order feature in D-Tools and the Projects / Change Orders Subscribe service to retrieve Change Orders data.
Webhooks
Our webhooks offer a comprehensive range of features and functionalities, tailored to meet diverse user requirements and preferences:
Authentication Options: Users have the flexibility to choose from various authentication methods:
Basic Authentication only (username and password).
Headers only (excluding username and password).
Both Basic Authentication and Headers.
None: Leaving all fields blank.
API Key Integration: The inclusion of the API key in the webhook post object enhances both security and integration efficiency.
Webhook Post Object Elements:
API Key: Links to the Integration and SI License.
Id: The identifier of the object posted, which can be used to retrieve the full object from the API.
Type: Options include Create, Update, or Delete (with Delete currently supported only in projects).
Module: Various types such as Product, Project, Partial Project, Purchase Order, Service Order, Service Plan, or Time Sheet.
UpdatedOn: Records the UTC date and time of the publication.
Enhanced Reliability: The webhook code in SI v22 logs both successful and failed attempts. In case of failure, the system executes three retry attempts at intervals of approximately 5, 15, and 30 minutes. After four total attempts, no further attempts are made.
Logging and Monitoring: The new Log button in the Manage Webhooks section in SI displays logs of successful and unsuccessful attempts for a selected webhook, including fields like Status, Number/Name, Date, Error, Attempts, and Last Attempted time.
Webhooks are incredibly useful for automating reactions to events within a system or application. They function as user-defined HTTP callbacks which are triggered by specific events. When an event occurs, the source site makes an HTTP request to the URL configured for the webhook. This mechanism allows for real-time data transmission, efficient inter-system communication, and immediate response to events.
Real-world Example: Imagine a scenario in a sales management system where every time a new sale is recorded, a webhook is triggered. This webhook could be configured to automatically send an HTTP request to a CRM (Customer Relationship Management) system. The request would contain details of the sale (like sale amount, customer information, and product details) encapsulated in the webhook post object. This real-time update would enable the CRM system to immediately log this new sale, update the customer's purchase history, and potentially trigger other processes like inventory adjustment or personalized customer follow-up emails. This automation not only saves time but also ensures that all systems are synchronized with the latest data, improving efficiency and customer experience.
Below is an example of a JSON payload for a webhook that incorporates the features described above. This example assumes a scenario where a new sale has been recorded, and the webhook is triggered to update a CRM system:
{ "ApiKey": "my_api_key", "Type": "Update", "Module": "Project", "Ids": [ "5791e708-4c59-4d8c-9fec-11635bc93679" ], "UpdatedOn": "2024-02-13T18:28:48.6806156" }
This JSON structure contains the following elements, and it is not customizable:
APIKey: Unique identifier for the Integration and SI License.
Id: Identifier of the sale object.
Type: Denotes the action type, here it is a "Create" action.
Module: Specifies the module type, in this case, "Sales".
UpdatedOn: The UTC timestamp of when the webhook was triggered.
Authentication: Shows the use of Basic Authentication with a username and password.
Headers: These include additional HTTP headers that may be required for the request.
IP Address and Server Location
We call our API (https://api.d-tools.com) on the IP 52.34.10.235.
This server is located in the US, West Oregon data center of AWS.
The SI Client directly calls the API endpoint on the AWS server (api.d-tools.com) and it does not go through the SI Server when doing Export to integration.
Automation
We offer four settings related to Automation:
Revision Creation:
Automatically Create a Revision on "Update Project".
Automatic Update (From the API to SI) - The SI Server can automatically pull data from the API and update the SI database for the following services
Update Clients
Project Creation
Change Orders Creation
Catalog Products Creation and Updates
Automatic Update (From SI to the API)
Export Catalog (Group of Items) - Can choose the Integration and Price Type
Projects - Export Projects based on Specific Project statuses and independent integrations. We have defined three use cases for the logic involving automation export, as follows:
a. Always, automatically Export a project with "any statuses" to the default integration upon project check-in. This option will always export the project to the API upon project check-in, regardless of the project status. This scenario is for companies that are using Project Management Apps, which require that the project be pushed as they are built/changed/approved/lost, etc... This will give a sense of real-time visibility on third-party integrations.
b. Always, automatically Export a project with "specific status(es)" only, to the default integration upon project check-in. This is similar to the use case noted above, where multiple recurring pushes are set up. The difference is that only specific status(es) are selected.
c. Conditionally, automatically Export a project with "specific status(es)" to the default integration upon project check-in. The condition is, if the project status changes, export. If it doesn't change, don't export. As an example, this scenario would be for companies using third-party accounting apps, where they would specify a single status to export to their accounting app, and only (automatically) push it once.
Please go to Start > Setup > Contol Panel > Manage Integrations > Settings to set up your automation.
Integration to SI (Import Timer)
The first run is 15 minutes after the SI Windows service starts (the service will start when the machine starts or it is restarted).
Then every 4 hrs from the first run.
Catalog Automation (SI to Integration)
The first run is 30 minutes after the SI Windows service starts (the service will start when the machine starts or it is restarted).
Then every 24 hrs from the first run.
Considerations
Very Important to understand: Our API works as a "queue" for:
Projects and Catalog "list of equipment(s)" that are manually exported to the API.
If exported by D-Tools SI, it becomes available for consumption by a third-party application
If exported by a Third-party application, it becomes available for consumption by D-Tools
For a Project,
If the project does not exist in D-Tools SI, it becomes available for "New Project from an integration"
If the project exists in D-Tools SI, it becomes available for "Update from an integration"
A catalog can contain up to 10000 records.
To access the API, users must be on the latest version of D-Tools. The access with an outdated version is not supported and may not work.
To access the API, users must be enrolled in the Software Assurance (SA) program.
Change Orders. D-Tools can handle change orders from existing D-Tools projects, and export the changes or the updated project to their third-party integration. The integration call works for both projects and change orders. We have an enhanced Change Order function (available on SI2018 or later), and users will likely prefer to Manage Change Orders in SI. Here is a link that explains this function: https://docs.d-tools.com/en/collections/9249189-change-orders.
Installation Tasks and Service Orders are not part of our API. Based on the general idea of division/separation of software capabilities, installation, and service management is likely a feature to be handled on their third-party integration, so it is not a current concern.
Certain features can be disabled in SI, either by the “privileges” (set on each user group) or by the licensing type. However, since D-Tools SI is an on-premises app, users with a full license have complete control, and privileges are managed by each company.
Ideally, a workflow, similar to the one described below, should be created in collaboration between our teams. This should help guide our customers on how the integration works and what results are expected if they follow this process.
Our integration should revolve around integrating projects and updating the projects back and forth as applicable. Good flexibility is to allow users to be able to add items on both applications (there are good use cases to advocate those options, and for usability purposes, this should be permitted) but this brings a consolidation concern. A good way to handle this concern is by suggesting users to create or map items only when a project is created in their third-party integration from D-Tools or updated in D-Tools from their third-party integration.
For an initial database matching effort, we would recommend a manual export/import of vendors, clients, and parts; we can use our export/import functionality, available through a CSV file, or bridged through QuickBooks or Outlook. Consecutive pushes/updates should be handled through the project's export and import. We don’t recommend developing code for the initial database creation. There are many variables to how users may want to proceed with this step, and it seems easier to manually perform this initial function.
D-Tools does not handle any accounting operations or inventory capabilities. if using QuickBooks, D-Tools users should consider integrating with QuickBooks through their third-party integration or from D-Tools.
There is an API key associated with each of the license keys. This is required on the calls to the API, as described in the documentation. For information on how to use the API Key, please review the following link: https://docs.d-tools.com/en/articles/9203156-api-key.
Manage Integrations: For information on how to Manage your integrations, please review the following link: https://docs.d-tools.com/en/articles/9225701-manage-integrations-window-in-si.
When a project is exported from D-Tools to their third-party integration, all available information on both the project and itemized project_items is parsed. This includes Project Name, Client Name, Addresses, and for each item, Manufacturer, Model, IP address, Serial Number, Vendor, and many more. For a complete list, please visit:
Project related data: https://api.d-tools.com/SI/doc/ResourceModel?modelName=Project
Project’s items related data: https://api.d-tools.com/SI/doc/ResourceModel?modelName=ProjectItem
Labor Endpoints Considerations
Fixed Labor, We pass the quantity of 1 or the quantity of multiple fixed labor if the call aggregates similar items together. Labor Hours are always zero for fixed labor.
Variable (or Calculated) labor: We pass the labor hours in both the labor hours field and the quantity fields (quantity and labor hours are the same for variable labor items)
Phase or Labor Type Labor: It gets aggregated as a “new” labor line item (type 2) where the quantity equals total labor hours.
Equipment: Labor hours are the associated labor hours for that specific product. The Product Phase (if assigned) is also available on the “Phase” endpoint.
Suggested Pattern
If the user elects to use the CRM capabilities from their third-party integration, the process will start there
When a user wants to create an SI project from their third-party integration opportunity, they export their third-party integration Opportunity to SI.
In SI, the user selects “New project from an integration”
If not using an initial third-party integration Opportunity then users would create a “New Project” in SI, and the process would start here.
A user manages the project in SI until he/she is ready to send it back to their third-party integration. This is one of the most important abstractions to consider when developing an integration pattern.
The user has an automation scheme enabled or will click on “Export” to their third-party integration, and the project is sent to our API
Their third-party integration consumes the project data from our API, and ideally, they would have the flexibility to map the SI project to a new or existing opportunity and create their third-party integration project/opportunity accordingly.
If the user wants to manage Change Orders in SI, they can push each Change Order to their third-party integration. For this capability, users may want the flexibility to push each CO to the same or new opportunity.
If the user makes changes to their third-party integration project and wishes to update the respective D-Tools project with their information, this is also available. We don’t necessarily recommend this process, but it is available. We don’t recommend it because, from a process perspective, one of the two applications should be elected to make changes to the projects. Nonetheless, it is available.
Aggregation of Project Items
Aggregation of Project Items (to display quantity and significantly reduce the size of the call) is available on the "SubscribeProjects (Get a specific project for a given project id published by an SI user) Service. You can group by:
Item
Location
System
Phase
Please note that the value of the following fields determines the quantity of items grouped together (quantity)
TypeId
LaborType
Manufacturer
Model
PackageName
PartNumber
IsOfe
IsNonBillable
UnitCost
UnitPrice
LaborHours
IsTaxable
TaxId
Vendor
Considerations on "Quantity" of Similar Items
In D-Tools SI V18, we added two new fields for the project item: “Quantity” and “TotalQuantity”.
TotalQuantity = item quantity * parent item quantity * package item quantity * solution item quantity.
For bulk wire, the quantity is the wire length * total quantity
For variable labor items, the quantity is the labor hours * total quantity
For other items, the quantity is the total quantity
When we import items from the API if the project_items quantity is based on a group of similar products, we will not split items to 1 since in V18 we import with the quantity itself. Quantity is also a new field in the V18 interface.
API Testing
API testing can be performed using the Postman App. You can download and register for free on the following link.
Link: http://www.getpostman.com/.