TonicDM Product API (0.0.5)

Main Product API

Download OpenAPI description
Languages
Servers
Mock server
https://developers-internal.tonicdm.com/_mock/tonicdm-product/
Server located in the USA
https://us-api.tonicdm.com/
Server located in Germany
https://de-api.tonicdm.com/
Server located in Ireland
https://ie-api.tonicdm.com/

Organizations & People

Data on People and Organizations (includes both staff and contacts, so these do not need to be looked up separately and combined).

Operations

Get Persons

Request

Gets data on one or more Persons: the User themselves, Mailboxes in their Tenant and/or Contacts in their Contact Organizations.

If called with no parameters (ie. /persons) it will return data for all Persons in no specific order.

If called with just the data_quantity=id_only parameter (ie. /persons/me with data_quantity=id_only), it will return just the personId of the user.

A specific set of persons' data can be returned by providing the filterIds parameter with an array of Person id (ie. /persons with filterIds={personId},{personId}).

If caching the Person data on the client side, the data_quantity=id_only option can be chosen to get the list of GUIDs that match the filtering/sorting/paging requirements, with the Person data coming from your client side cache, having been retrieved by providing the filterIds parameter with an array of id.

Note that staff in the user's own Organization are Persons just like their Contacts.

Query
searchQuerystring(JSON)

A JSON-encoded string containing the query options.

Example: searchQuery={"example"}
filterIdsArray of strings(CompactUUID)

Returns data for the specified GUIDs

Example: filterIds={id},{id},{id}
filterOrganizationIdsArray of strings(CompactUUID)

Returns data for the specified Organization GUIDs

Example: filterOrganizationIds={OrganizationId},{OrganizationId},{OrganizationId}
filterStatusesArray of strings(Status)

Provide the values of one or more statuses separated by comma (no spaces). If no value is supplied, active is assumed.

Items Enum"active""inactive""deleted"
Example: filterStatuses=active,inactive
filterDisciplinesArray of strings(CompactUUID)

provide the GUIDs of one or more disciplines separated by comma (no spaces)

Example: filterDisciplines={id},{id},{id}
filterOfficeIdsArray of strings(CompactUUID)

Provide the GUIDs of one or more offices separated by comma (no spaces).

Example: filterOfficeIds={id},{id},{id}
dataQuantityboolean

If caching data on the client side, the data_quantity=id_only|basic|complete option can be passed to manage the completeness of the data received and therefore rate limiting.

Default false
Example: dataQuantity=true
pageSizeinteger[ 1 .. 1000 ]

The number of results to return per page

Default 50
Example: pageSize=100
pageNumberinteger

Which page of the results to return

Example: pageNumber=1
sortBystring

The field by which to sort the results

Enum"name""email""title""office"
sortDirectionstring

The sort direction for the results

Enum"asc""desc"
curl -i -X GET \
  'https://developers-internal.tonicdm.com/_mock/tonicdm-product/core/persons?dataQuantity=true&filterDisciplines={id}%2C{id}%2C{id}&filterIds={id}%2C{id}%2C{id}&filterOfficeIds={id}%2C{id}%2C{id}&filterOrganizationIds={OrganizationId}%2C{OrganizationId}%2C{OrganizationId}&filterStatuses=active%2Cinactive&pageNumber=1&pageSize=100&searchQuery={%22example%22}&sortBy=name&sortDirection=asc' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

Successfully read the resource you requested. One or more records are returned in the form of an array.

Bodyapplication/jsonArray [
idstring(CompactUUID)^[0-9a-fA-F]{32}$

UUID without hyphens (32 characters)

Example: "8e8aa42241794371ae9d0ed7b67a8c86"
emailAddressesArray of objects(PersonEmailAddress)

Zero or more email addresses that person currently uses, or previously used.

]
Response
application/json
[ { "id": "9af493dfdabb48089b068ddad94c6287", "datetimeCreated": "2021-11-03T16:21:02+00:00", "datetimeUpdated": "2024-04-20T16:21:02+00:00", "status": "active", "emailAddresses": [ … ], "name": "Rita Coolidge", "title": "Principal", "deskPhone": null, "mobilePhone": null, "office": { … }, "disciplines": null, "certifications": null, "customerDataWarehouseId": 123, "customerErpId": "a8fc7aaf-cd16-4ee4-ae97-e75808257ae1", "customerCrmId": "a9ea117f-84bc-421d-bad4-5bd69924a699" }, { "id": "496061e05a9b43a98d7cdfb0ad15e158", "datetimeCreated": "2021-11-03T16:21:02+00:01", "datetimeUpdated": "2024-04-20T16:21:02+00:01", "status": "active", "emailAddresses": [ … ], "name": "Steve Novosel", "title": "Architect", "deskPhone": null, "mobilePhone": null, "office": { … }, "disciplines": null, "certifications": null, "customerDataWarehouseId": 124, "customerErpId": "fc95ced9-8c56-4a53-89b2-1c7217ea5a9c", "customerCrmId": "fcdaf58d-5497-47a2-af3d-077c928eda27" } ]

New Person

Request

Note that the Organization the Person will belong to is determined automatically by TonicDM.

Some automated processes use this endpoint to check if a contact should be created or not. This is done by passing SelectiveNonCreation as TRUE. This will create the contact if they're a business email address only, and not create the contact if they have a system or personal email address, for example person@company.com would be created but person@gmail.com or no-reply@dropbox.com would not. This allows you to request a contact to be created without filtering the quality of the email address first. If SelectiveNonCreation is FALSEa contact will be created.

If you want to pass in the Organization information, do that as a second step using PATCH to the organizations endpoint submitting the organizationId returned in the response body. Similarly, adding an Office to the Person needs to be done using PATCH to the /persons endpoint submitting and officeId that would have been looked up using GET to the /offices endpoint submitting the organizationId returned in the response body.

Bodyapplication/jsonrequired
emailAddressesArray of objects(PersonEmailAddress)

Zero or more email addresses that person currently uses, or previously used.

curl -i -X POST \
  https://developers-internal.tonicdm.com/_mock/tonicdm-product/core/persons \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "emailAddresses": [
      {
        "status": "active",
        "emailAddress": "user@example.com",
        "name": "string",
        "title": "string",
        "deskPhone": {
          "countryCode": 0,
          "phoneNumber": 0,
          "extension": 0
        },
        "mobilePhone": {
          "countryCode": 0,
          "phoneNumber": 0,
          "extension": 0
        },
        "office": {
          "status": "active",
          "name": "string",
          "address": "string",
          "phone": {
            "countryCode": 0,
            "phoneNumber": 0,
            "extension": 0
          }
        },
        "disciplines": [
          {
            "id": "string"
          }
        ],
        "certifications": [
          {
            "id": "8e8aa42241794371ae9d0ed7b67a8c86",
            "certificationDefinitionId": "string",
            "dateExpires": "2019-08-24"
          }
        ],
        "personId": "string",
        "dateActive": "2019-08-24",
        "dateInactive": "2019-08-24",
        "isPrime": true,
        "customerDataWarehouseId": "string",
        "customerErpId": "string",
        "customerCrmId": "string"
      }
    ]
  }'

Responses

Successfully created the resource you sent

Bodyapplication/json
idstring(CompactUUID)^[0-9a-fA-F]{32}$

UUID without hyphens (32 characters)

Example: "8e8aa42241794371ae9d0ed7b67a8c86"
emailAddressesArray of objects(PersonEmailAddress)

Zero or more email addresses that person currently uses, or previously used.

Response
application/json
{ "id": "496061e05a9b43a98d7cdfb0ad15e158", "datetimeCreated": "2021-11-03T16:21:02+00:01", "datetimeUpdated": "2024-04-20T16:21:02+00:01", "status": "active", "emailAddresses": [ { … } ], "name": "Steve Novosel", "title": "Architect", "deskPhone": null, "mobilePhone": null, "office": { "id": "570e423760dc4c9784d20a38216f0597", "datetimeCreated": "2021-11-03T16:21:02+00:01", "datetimeUpdated": "2024-04-20T16:21:02+00:01", "status": "active", "name": "London", "address": "123 Dundas Street\\nLondon", "phone": { … } }, "disciplines": null, "certifications": null, "customerDataWarehouseId": 124, "customerErpId": "fc95ced9-8c56-4a53-89b2-1c7217ea5a9c", "customerCrmId": "fcdaf58d-5497-47a2-af3d-077c928eda27" }

Edit Person

Request

Note that you cannot change the Organization that a person belongs to as this is determined automatically by TonicDM. To delete a Person, PATCH their status to inactive or deleted (soft deleted).

Bodyapplication/jsonrequired
idstring(CompactUUID)^[0-9a-fA-F]{32}$

UUID without hyphens (32 characters)

Example: "8e8aa42241794371ae9d0ed7b67a8c86"
emailAddressesArray of objects(PersonEmailAddress)

Zero or more email addresses that person currently uses, or previously used.

curl -i -X PATCH \
  https://developers-internal.tonicdm.com/_mock/tonicdm-product/core/persons \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "id": "8e8aa42241794371ae9d0ed7b67a8c86",
    "emailAddresses": [
      {
        "status": "active",
        "emailAddress": "user@example.com",
        "name": "string",
        "title": "string",
        "deskPhone": {
          "countryCode": 0,
          "phoneNumber": 0,
          "extension": 0
        },
        "mobilePhone": {
          "countryCode": 0,
          "phoneNumber": 0,
          "extension": 0
        },
        "office": {
          "status": "active",
          "name": "string",
          "address": "string",
          "phone": {
            "countryCode": 0,
            "phoneNumber": 0,
            "extension": 0
          }
        },
        "disciplines": [
          {
            "id": "string"
          }
        ],
        "certifications": [
          {
            "id": "8e8aa42241794371ae9d0ed7b67a8c86",
            "certificationDefinitionId": "string",
            "dateExpires": "2019-08-24"
          }
        ],
        "personId": "string",
        "dateActive": "2019-08-24",
        "dateInactive": "2019-08-24",
        "isPrime": true,
        "customerDataWarehouseId": "string",
        "customerErpId": "string",
        "customerCrmId": "string"
      }
    ]
  }'

Responses

Successfully updated the resource you requested

Bodyapplication/json
idstring(CompactUUID)^[0-9a-fA-F]{32}$

UUID without hyphens (32 characters)

Example: "8e8aa42241794371ae9d0ed7b67a8c86"
emailAddressesArray of objects(PersonEmailAddress)

Zero or more email addresses that person currently uses, or previously used.

Response
application/json
{ "id": "1edb8a0bb607442ba167b9d28a75778c", "datetimeCreated": "2021-11-03T16:21:02+00:02", "datetimeUpdated": "2024-04-20T16:21:02+00:02", "status": "active", "emailAddresses": [ { … }, { … } ], "name": "Stuart de Silva", "title": "Senior Designer", "deskPhone": null, "mobilePhone": null, "office": { "id": "89df34cecd394e179436abc435368e53", "datetimeCreated": "2021-11-03T16:21:02+00:02", "datetimeUpdated": "2024-04-20T16:21:02+00:02", "status": "active", "name": "Dublin", "address": "50 Merrion Square South\\nDublin", "phone": { … } }, "disciplines": null, "certifications": null, "customerDataWarehouseId": 125, "customerErpId": "1b8c8dfc-daeb-42fd-8f50-b709a6dadf1a", "customerCrmId": "39b1011e-e21a-4518-8825-7b63f2fabe92" }

Projects & Teams

Operations

Notes

Operations relating to the Notes that can be attached to various items.

Operations

Disciplines & Certification Definitions

Disciplines & Certification Definitions recognize areas of professional expertise.

Operations

Filesets

APIs to the Fileset module for accessing all files attached to objects in TonicDM.

Operations

Manual Uploading

APIs to the Fileset module for uploading files to the TonicDM cloud.

Operations

Cloud File Systems

Managing cloud file systems that TonicDM can connect to.

Operations

Correspondence

Managing Correspondence Data

Operations

File Transfers

APIs to the File Transfers Workflow module.

Operations

RFIs

APIs to the RFIs Workflow module.

Operations

Submittals

APIs to the Submittals Workflow module.

Operations

PCOs

APIs to the PCOs Workflow module.

Operations

COs

APIs to the COs Workflow module.

Operations

Tasks

APIs to the Tasks Workflow module.

Operations