Skip to main content

Ongedocumenteerde API endpoints

  • January 16, 2026
  • 8 replies
  • 209 views

Jerdi-Deltion
Forum|alt.badge.img+2

Bij deze een topic om ongedocumenteerde API endpoints op een centrale plek vast te leggen.
Deze lijst zal vast niet compleet zijn, maar daar is deze community voor.
Post hieronder een comment met wat er mist en dan voeg ik het toe aan de lijst!

 

WARNING:
Gebruik van de endpoints is op eigen risico. TOPdesk kan op elk moment wijzigingen doorvoeren of de endpoint uitschakelen, zonder voorafgaande melding.
Dit kan dan leiden tot breaking changes.



Share & Subscribe API

Method: GET,

URL: /tas/api/shareandsubscribe/sharees?incidentId={ID}
Method: POST,

URL: /tas/api/shareandsubscribe/sharees?incidentId={ID}

Body: "person-id-to-share"


Voorbeeld POST:

URL: /tas/api/shareandsubscribe/sharees?incidentId=bffdf204-3097-49ca-9ada-3c02fe1d5b00

Body: "c32c9c81-464f-40b1-a52b-68a4f3fded7a"

Geproxied de API aan roepen via SERVICES

Method: Alles dat voor het API endpoint werkt

URL: /services/internal-tas-proxy/tas/api

 Email designs ophalen

Method: GET

URL: /services/action-v1/api/emailDesigns

Verbindingen ophalen

Method: GET

URL: /services/action-v1/api/httpRequestConnections

Storing notificaties ophalen

Method: GET

URL: /services/action-v1/api/failureNotifications

 Automatisch Acties ophalen (Overview)

Method: GET

URL: /services/action-v1/api/actions/overviewItems

Automatisch Acties ophalen (Item)

Method: GET

URL: /services/action-v1/api/actions/{MODULE}/{ID}

MODULES: webhook, tas_change, tas_incident, tas_problem, assetManagement

Voorbeeld: /services/action-v1/api/actions/tas_incident/12345678-f56a-4cb7-a230-204a0b88e989
 

Deze lijst is nog wel langer maar reageer vooral in de comments met alles wat hier nog niet staat!

8 replies

Forum|alt.badge.img+6

Ik zal straks ook nog een aantal leuke delen! 


Forum|alt.badge.img+6

Imports - Supporting Files

 

Get a list of Imports

GET /services/import-to-api-v1/api/supportingfiles/imports

Output example:

{
"imports": [
{
"configuration": {
"sourceType": "",
"archivingReasonToUse": "",
"briefDescription": "",
"canCreateNewRecords": true,
"canUpdateExistingActiveRecords": true,
"canUpdateExistingArchivedRecords": true,
"cardTypeKey": "person",
"failureNotificationOptions": {
"strategy": "USE_DEFAULT",
"sendOnDoneWithErrors": true
},
"fieldMapping": {
"email": {
"type": "SOURCE_VALUE",
"emptyValueFallback": "",
"ignoreEmptySourceValue": false,
"onlyImportedIfTargetFieldIsEmpty": false,
"sourceField": "mail",
"tooLongValueAction": "SKIP_RECORD",
"unrecognizedForeignValueAction": "SKIP_RECORD"
},
"jobTitle": {
"type": "SOURCE_VALUE",
"emptyValueFallback": "",
"ignoreEmptySourceValue": false,
"onlyImportedIfTargetFieldIsEmpty": false,
"sourceField": "jobTitle",
"tooLongValueAction": "SKIP_RECORD",
"unrecognizedForeignValueAction": "SKIP_RECORD"
},
"branch": {
"type": "SOURCE_VALUE",
"emptyValueFallback": "",
"ignoreEmptySourceValue": false,
"onlyImportedIfTargetFieldIsEmpty": false,
"sourceField": "companyName",
"targetFieldOnForeignCard": "name",
"tooLongValueAction": "SKIP_RECORD",
"unrecognizedForeignValueAction": "SKIP_RECORD"
},
"tasLoginName": {
"type": "SOURCE_VALUE",
"emptyValueFallback": "",
"ignoreEmptySourceValue": false,
"onlyImportedIfTargetFieldIsEmpty": false,
"sourceField": "userPrincipalName",
"tooLongValueAction": "SKIP_RECORD",
"unrecognizedForeignValueAction": "SKIP_RECORD"
},
"firstName": {
"type": "SOURCE_VALUE",
"emptyValueFallback": "",
"ignoreEmptySourceValue": false,
"onlyImportedIfTargetFieldIsEmpty": false,
"sourceField": "givenName",
"tooLongValueAction": "SKIP_RECORD",
"unrecognizedForeignValueAction": "SKIP_RECORD"
},
"picture": {
"type": "SOURCE_PICTURE"
},
"telephone": {
"type": "SOURCE_VALUE",
"emptyValueFallback": "",
"ignoreEmptySourceValue": false,
"onlyImportedIfTargetFieldIsEmpty": false,
"sourceField": "businessPhones",
"tooLongValueAction": "SKIP_RECORD",
"unrecognizedForeignValueAction": "SKIP_RECORD"
},
"networkLoginName": {
"type": "SOURCE_VALUE",
"emptyValueFallback": "",
"ignoreEmptySourceValue": false,
"onlyImportedIfTargetFieldIsEmpty": false,
"sourceField": "onPremisesSamAccountName",
"tooLongValueAction": "SKIP_RECORD",
"unrecognizedForeignValueAction": "SKIP_RECORD"
},
"department": {
"type": "SOURCE_VALUE",
"emptyValueFallback": "",
"ignoreEmptySourceValue": false,
"onlyImportedIfTargetFieldIsEmpty": false,
"sourceField": "department",
"targetFieldOnForeignCard": "name",
"tooLongValueAction": "SKIP_RECORD",
"unrecognizedForeignValueAction": "CREATE_NEW"
},
"lastName": {
"type": "SOURCE_VALUE",
"emptyValueFallback": "",
"ignoreEmptySourceValue": false,
"onlyImportedIfTargetFieldIsEmpty": false,
"sourceField": "surname",
"tooLongValueAction": "SKIP_RECORD",
"unrecognizedForeignValueAction": "SKIP_RECORD"
},
"employeeNumber": {
"type": "SOURCE_VALUE",
"emptyValueFallback": "",
"ignoreEmptySourceValue": false,
"onlyImportedIfTargetFieldIsEmpty": false,
"sourceField": "employeeId",
"tooLongValueAction": "SKIP_RECORD",
"unrecognizedForeignValueAction": "SKIP_RECORD"
},
"mainframeLoginName": {
"type": "SOURCE_VALUE",
"emptyValueFallback": "",
"ignoreEmptySourceValue": false,
"onlyImportedIfTargetFieldIsEmpty": false,
"sourceField": "onPremisesSecurityIdentifier",
"tooLongValueAction": "SKIP_RECORD",
"unrecognizedForeignValueAction": "SKIP_RECORD"
},
"mobileNumber": {
"type": "SOURCE_VALUE",
"emptyValueFallback": "",
"ignoreEmptySourceValue": false,
"onlyImportedIfTargetFieldIsEmpty": false,
"sourceField": "mobilePhone",
"tooLongValueAction": "SKIP_RECORD",
"unrecognizedForeignValueAction": "SKIP_RECORD"
}
},
"keyFieldNames": [
"tasLoginName"
],
"missingRecordAction": "ARCHIVE",
"module": "supportingfiles",
"preFilter": {
"azureFilterConfig": {
"groupIds": [
""
]
}
},
"scheduleExpression": "0 0 3 * * ?",
"sourceFilter": {
"conditions": [
{
"sourceField": "givenName",
"type": "NOT_EMPTY",
"value": ""
},
{
"sourceField": "surname",
"type": "NOT_EMPTY",
"value": ""
},
{
"sourceField": "mail",
"type": "NOT_EMPTY",
"value": ""
},
{
"sourceField": "userPrincipalName",
"type": "NOT_EMPTY",
"value": ""
}
],
"type": "AND"
},
"triggerOnSchedule": true,
"version": "1.1"
},
"connectionId": 1,
"creationDate": "",
"creator": "",
"creatorName": "",
"id": "",
"lastStartDate": "",
"modificationDate": "",
"modifier": "",
"modifierName": ""
}
]
}

 

Run a import by ID

POST /services/import-to-api-v1/api/supportingfiles/imports/${ID}/execute

Parameter Type Omschrijving Verplicht
ID string (uuid) The import ID true

 

Output example:

{
"id": "execution_id"
}

 

Get a list of import history

GET /services/import-to-api-v1/api/supportingfiles/executions/history?page=1&search=

Parameter Type Omschrijving Verplicht
page int Page number true
search string Search string false

 

Output example:

{
"numberOfPages": 91,
"results": [
{
"configuration": {
"sourceType": "",
"archivingReasonToUse": "",
"briefDescription": "",
"canCreateNewRecords": true,
"canUpdateExistingActiveRecords": true,
"canUpdateExistingArchivedRecords": true,
"cardTypeKey": "",
"failureNotificationOptions": {
"strategy": "USE_DEFAULT",
"sendOnDoneWithErrors": true
},
"fieldMapping": {
"employeeNumber": {
"type": "SOURCE_VALUE",
"emptyValueFallback": "",
"ignoreEmptySourceValue": false,
"onlyImportedIfTargetFieldIsEmpty": false,
"sourceField": "employeeId",
"tooLongValueAction": "SKIP_RECORD",
"unrecognizedForeignValueAction": "SKIP_RECORD"
},
"email": {
"type": "SOURCE_VALUE",
"emptyValueFallback": "",
"ignoreEmptySourceValue": false,
"onlyImportedIfTargetFieldIsEmpty": false,
"sourceField": "mail",
"tooLongValueAction": "SKIP_RECORD",
"unrecognizedForeignValueAction": "SKIP_RECORD"
},
"mobileNumber": {
"type": "SOURCE_VALUE",
"emptyValueFallback": "",
"ignoreEmptySourceValue": false,
"onlyImportedIfTargetFieldIsEmpty": false,
"sourceField": "mobilePhone",
"tooLongValueAction": "SKIP_RECORD",
"unrecognizedForeignValueAction": "SKIP_RECORD"
},
"picture": {
"type": "SOURCE_PICTURE"
},
"lastName": {
"type": "SOURCE_VALUE",
"emptyValueFallback": "",
"ignoreEmptySourceValue": false,
"onlyImportedIfTargetFieldIsEmpty": false,
"sourceField": "surname",
"tooLongValueAction": "SKIP_RECORD",
"unrecognizedForeignValueAction": "SKIP_RECORD"
},
"telephone": {
"type": "SOURCE_VALUE",
"emptyValueFallback": "",
"ignoreEmptySourceValue": false,
"onlyImportedIfTargetFieldIsEmpty": false,
"sourceField": "businessPhones",
"tooLongValueAction": "SKIP_RECORD",
"unrecognizedForeignValueAction": "SKIP_RECORD"
},
"branch": {
"type": "SOURCE_VALUE",
"emptyValueFallback": "",
"ignoreEmptySourceValue": false,
"onlyImportedIfTargetFieldIsEmpty": false,
"sourceField": "companyName",
"targetFieldOnForeignCard": "name",
"tooLongValueAction": "SKIP_RECORD",
"unrecognizedForeignValueAction": "SKIP_RECORD"
},
"loginPermission": {
"type": "FIXED_VALUE",
"onlyImportedIfTargetFieldIsEmpty": false,
"value": true
},
"firstName": {
"type": "SOURCE_VALUE",
"emptyValueFallback": "",
"ignoreEmptySourceValue": false,
"onlyImportedIfTargetFieldIsEmpty": false,
"sourceField": "givenName",
"tooLongValueAction": "SKIP_RECORD",
"unrecognizedForeignValueAction": "SKIP_RECORD"
},
"networkLoginName": {
"type": "SOURCE_VALUE",
"emptyValueFallback": "",
"ignoreEmptySourceValue": false,
"onlyImportedIfTargetFieldIsEmpty": false,
"sourceField": "onPremisesSamAccountName",
"tooLongValueAction": "SKIP_RECORD",
"unrecognizedForeignValueAction": "SKIP_RECORD"
},
"jobTitle": {
"type": "SOURCE_VALUE",
"emptyValueFallback": "",
"ignoreEmptySourceValue": false,
"onlyImportedIfTargetFieldIsEmpty": false,
"sourceField": "jobTitle",
"tooLongValueAction": "SKIP_RECORD",
"unrecognizedForeignValueAction": "SKIP_RECORD"
},
"linkedPerson": {
"type": "SOURCE_VALUE",
"emptyValueFallback": "",
"ignoreEmptySourceValue": false,
"onlyImportedIfTargetFieldIsEmpty": false,
"sourceField": "userPrincipalName",
"targetFieldOnForeignCard": "tasLoginName",
"tooLongValueAction": "SKIP_RECORD",
"unrecognizedForeignValueAction": "SKIP_RECORD"
},
"department": {
"type": "SOURCE_VALUE",
"emptyValueFallback": "",
"ignoreEmptySourceValue": false,
"onlyImportedIfTargetFieldIsEmpty": false,
"sourceField": "department",
"targetFieldOnForeignCard": "name",
"tooLongValueAction": "SKIP_RECORD",
"unrecognizedForeignValueAction": "CREATE_NEW"
},
"loginName": {
"type": "SOURCE_VALUE",
"emptyValueFallback": "",
"ignoreEmptySourceValue": false,
"onlyImportedIfTargetFieldIsEmpty": false,
"sourceField": "userPrincipalName",
"tooLongValueAction": "SKIP_RECORD",
"unrecognizedForeignValueAction": "SKIP_RECORD"
}
},
"keyFieldNames": [
"loginName"
],
"missingRecordAction": "ARCHIVE",
"module": "supportingfiles",
"preFilter": {
"azureFilterConfig": {
"groupIds": [
""
]
}
},
"scheduleExpression": "0 30 * * * ?",
"sourceFilter": {
"conditions": [
{
"sourceField": "userPrincipalName",
"type": "NOT_EMPTY",
"value": ""
},
{
"sourceField": "accountEnabled",
"type": "EQUAL",
"value": "True"
}
],
"type": "AND"
},
"triggerOnSchedule": true,
"version": "1.1"
},
"id": "",
"importId": "",
"modifier": "",
"modifierName": "",
"startDate": "",
"starter": "",
"starterName": "",
"status": "",
"triggerType": "",
}
]
}

 

Get import result

GET /services/import-to-api-v1/api/supportingfiles/executions/${ID}/progress

Parameter Type Omschrijving Verplicht
ID string (uuid) The execution ID true

 

Output example:

{
"errors": [],
"id": "",
"lastResultIndex": 5714100,
"modifier": "",
"modifierName": "",
"progressPercentage": 100,
"results": [
{
"executionId": "",
"status": "",
"details": {
"id": "",
"entityKey": {
"loginName": ""
},
"errors": [
{
"errorCode": "internal_error_with_details",
"errorMessage": "",
"fields": [],
"values": []
}
]
}
}
],
"startDate": "",
"starter": "",
"starterName": "",
"status": "DONE",
"summary": null,
"triggerType": ""
}

 


Forum|alt.badge.img+2
  • New Member
  • January 26, 2026

heb er op het moment maar 1 maar deze is wel de basis voor mijn actiereeks die behandelaren archiveert als ze een bepaalde tijd niet ingelogd hebben in TOPdesk.

 

dit is de service achter het rapport overzicht active behandelaars:

/services/active-user-overview/api/all-user-activity


Sanne van Opstal-Brakel
Community Manager
Forum|alt.badge.img+8

Ik merk dat klanten veel naar deze post kijken wat ansich echt helemaal top is, maar ik wil hier wel eventjes een kanttekening bij maken...
 

We zien dat deze API-endpoints worden gebruikt, maar ik wil even benadrukken dat dit een ongedocumenteerde en niet-ondersteunde endpoints zijn.

 

Gebruik hiervan is op eigen risico. We kunnen op elk moment wijzigingen doorvoeren of de endpoint uitschakelen, zonder voorafgaande melding. Dit kan dan leiden tot breaking changes.

 

Voor stabiele en ondersteunde integraties adviseren we daarom om uitsluitend gebruik te maken van de gedocumenteerde API-endpoints.


Forum|alt.badge.img+6

Ik merk dat klanten veel naar deze post kijken wat ansich echt helemaal top is, maar ik wil hier wel eventjes een kanttekening bij maken...
 

We zien dat deze API-endpoints worden gebruikt, maar ik wil even benadrukken dat dit een ongedocumenteerde en niet-ondersteunde endpoints zijn.

 

Gebruik hiervan is op eigen risico. We kunnen op elk moment wijzigingen doorvoeren of de endpoint uitschakelen, zonder voorafgaande melding. Dit kan dan leiden tot breaking changes.

 

Voor stabiele en ondersteunde integraties adviseren we daarom om uitsluitend gebruik te maken van de gedocumenteerde API-endpoints.

Ik sluit mij hier volledig bij aan. Het is ook op eigen risico. Maar, er is blijkbaar wel behoefte naar deze ongedocumenteerde functionaliteit(en).
 

Hoe kijkt TOPdesk hiernaar? Even los van het feit voor TIPs.   


Jerdi-Deltion
Forum|alt.badge.img+2
  • Author
  • Starter
  • February 2, 2026

Ik merk dat klanten veel naar deze post kijken wat ansich echt helemaal top is, maar ik wil hier wel eventjes een kanttekening bij maken...
 

We zien dat deze API-endpoints worden gebruikt, maar ik wil even benadrukken dat dit een ongedocumenteerde en niet-ondersteunde endpoints zijn.

 

Gebruik hiervan is op eigen risico. We kunnen op elk moment wijzigingen doorvoeren of de endpoint uitschakelen, zonder voorafgaande melding. Dit kan dan leiden tot breaking changes.

 

Voor stabiele en ondersteunde integraties adviseren we daarom om uitsluitend gebruik te maken van de gedocumenteerde API-endpoints.

Ik heb een extra duidelijke warning boven in het bericht gezet!

Ik ben overigens ook benieuwd naar hoe TOPdesk kijkt naar het feit dat er toch interesse is voor de endpoints en of het misschien een goed idee is om de API uit te breiden/compleet te maken.


Sanne van Opstal-Brakel
Community Manager
Forum|alt.badge.img+8

Dank voor jullie vragen ​@Jerdi-Deltion  en ​@Rico Roodenburg!  

De beste manier om aan te geven dat je behoefte hebt aan een bepaald API‑endpoint, is door hiervoor een feature request in te dienen via TIP. Op die manier komt het signaal via de juiste route bij onze Product Management‑teams terecht. Zij nemen deze input mee wanneer er wordt gekeken naar uitbreidingen of verbeteringen aan bestaande modules en de bijbehorende API’s.

 

Wanneer modules worden geüpdatet, evalueren we regelmatig welke API’s beschikbaar zijn, waar extra behoefte ligt en of bepaalde functionaliteiten wel of niet als open endpoint beschikbaar kunnen of moeten worden gesteld. Dat proces gebeurt zorgvuldig, omdat we willen voorkomen dat we endpoints aanbieden die we op termijn niet kunnen blijven ondersteunen.

 

Wat misschien ook goed is om te noemen: binnen TOPdesk maken we tijdens ontwikkeling steeds meer gebruik van API’s. Daardoor kun je soms via de developer tools in je browser endpoints tegenkomen die technisch bestaan, maar niet bedoeld zijn voor publiek gebruik. Omdat deze niet zijn gedocumenteerd, is er geen garantie dat ze blijven werken, bij een update kunnen ze zo verdwijnen of veranderen. Dat maakt het gebruik ervan dus echt op eigen risico.


Forum|alt.badge.img
  • New Member
  • February 5, 2026

We have been pushing with TIP and our account manager for years to get shares available via API in a supported way since we are trying to move our email notification in automated action since we have fields that needs to be adjusted dynamically (we are a bilingual university) and as such we need to maintain a lot more event if we need to do them in the email action. 

Also at this point share has been available for years in incident but no move on the approved endpoint which leads us to use it as a patch to meet our needs. (same problem with the change api being a lot more limited compared to incident for instance)