Skip to main content

InvGate Service Management Integration Guide

Overview

The InvGate Service Management integration connects NINA workflows to InvGate's service desk platform (formerly InvGate Service Desk), covering the complete Service Desk API v1 surface — 163 operations across 19 resources:

Ticket Management:

  • Incident — Create, retrieve, update, and search requests; comments, observers, and collaborators; the full status lifecycle (cancel, reject, reopen, reassign, waiting-for states, solution accept/reject, promote to major incident); approvals; custom fields; links and related CIs
  • Attribute — Priority, type, source, and status lookups for populating ticket fields
  • Category — Request category listings

Organization & Users:

  • User — Lookup by ID/email/username plus full administration (create, update, enable/disable, convert, password management, session tokens)
  • Group / Company / Location — Membership and observer management
  • Help Desk / Level — Help desk, level, and observer listings

Content & Configuration:

  • Knowledge Base — Articles, categories, and attachments
  • Custom Field — Field definitions and list/tree option management
  • Internal Note / Time Tracking / Breaking News — Supporting service desk content
  • Trigger / CI / Data Export / Workflow / System — Automation triggers, configuration items, exports, workflow deployment, and instance info

Authentication uses HTTP Basic auth with a dedicated API username/password pair generated by your InvGate instance. All resources share the same credential.

Note: InvGate ships two products with separate APIs. This integration covers Service Management (service desk/ticketing). Asset Management (formerly Insight) is a different API and is not part of this integration.


Credential Configuration

Authentication

FieldDescriptionExample
UsernameAPI username from your InvGate instancesd-user-xxxxxx
PasswordAPI password paired with the username********
Base URLYour instance's API endpointhttps://yourcompany.cloud.invgate.net/api/v1

How to Get Your InvGate API Credentials

  1. Log in to your InvGate Service Management instance as an administrator
  2. Navigate to SettingsIntegrations APICredentials and copy the API username and password
  3. Navigate to SettingsIntegrations APIResources and copy the Base URL (it already includes the /api/v1 path)

Notes:

  • The API credentials are separate from your normal InvGate user login — UI usernames/passwords will not work against the API
  • The base URL is instance-specific (https://<instance>.cloud.invgate.net/api/v1); there is no shared global endpoint

Creating a Credential in NINA

  1. Navigate to CredentialsAdd New Credential
  2. Select integration service: InvGate Service Management
  3. Auth type: Basic Authentication
  4. Fill in Username, Password, and Base URL
  5. Click Test Connection then Save

The connection test calls InvGate's lightweight /sd.version endpoint to verify the credentials without touching any ticket data.


Supported Resources and Operations

Incident

Manage service desk requests (tickets) — create, retrieve, update, search, comment, approvals, links, observers, and lifecycle transitions.

Core ticket operations

OperationHTTPDescriptionRequired params
createPOST /incidentCreates a new request in the system (use setCustomField to add custom field values afterwards)creator_id, type_id, customer_id, title, category_id, priority_id
getGET /incidentReturns the information of the given requestid
updatePUT /incidentChange attributes of a requestid
searchGET /incidentsLists the requestsids
searchByStatusGET /incidents.by.statusLists all open requests matching the status specified by parameter
searchByAgentGET /incidents.by.agentLists the requests from a given agent
searchByCustomerGET /incidents.by.customerLists the open requests from a customer
searchByHelpdeskGET /incidents.by.helpdeskLists the open requests from a help desk
searchByCIsGET /incidents.by.cisReturns all the requests linked to a CI, considering its IDs, its groups and the ID of the integration it belongs toci_ids, group, cis_source_id
searchBySentimentGET /incidents.by.sentimentLists the open requests from a sentiment
searchByViewGET /incidents.by.viewLists the requests from a view IDview_id
searchDetailsByViewGET /incidents.details.by.viewLists the requests with their details from a view IDview_id
searchLastHourGET /incidents.last.hourLists all the requests that were created within the last hour
getStatusGET /incident.attributes.statusLists all the status. If an ID is provided, only the one that matches the specified ID will be listed

Comments, observers & collaborators

OperationHTTPDescriptionRequired params
addCommentPOST /incident.commentAdds a reply to a requestcomment, author_id, request_id
getCommentsGET /incident.commentGets the replies from a given requestrequest_id
getObserversGET /incident.observerLists all the IDs of the request's observersrequest_id
addObserverPOST /incident.observerAdds a user as observerrequest_id, author_id
getCollaboratorsGET /incident.collaboratorLists the collaborators IDsrequest_id
addCollaboratorPOST /incident.collaboratorRequests collaboration from the defined userrequest_id, author_id

Lifecycle & status transitions

OperationHTTPDescriptionRequired params
cancelPOST /incident.cancelCancel a requestrequest_id, author_id
rejectPOST /incident.rejectRejects a requestrequest_id, author_id
reopenPUT /incident.reopenReopens a requestrequest_id
reassignPOST /incident.reassignReassigns a request to a help desk and/or agentrequest_id, author_id, group_id
waitingForAgentPOST /incident.waitingfor.agentSets the agent waiting status to the requestrequest_id
waitingForCustomerPOST /incident.waitingfor.customerSets the waiting for customer status to the requestrequest_id
waitingForDatePOST /incident.waitingfor.dateSets the waiting for date status to the requestrequest_id, timestamp
waitingForIncidentPOST /incident.waitingfor.incidentSets the request in the waiting for another request statusrequest_id, wait_request_id
waitingForExternalEntityPOST /incident.waitingfor.external_entitySets the request in the waiting for external entity status. The entity should be already linkedrequest_id, entity_link_id
acceptSolutionPUT /incident.solution.acceptAccepts the solution of a requestid, rating
rejectSolutionPUT /incident.solution.rejectRejects the solution of a requestid, comment
promoteToMajorIncidentPOST /incident.promote.to.major.incidentPromotes the given request to a major incident and returns the ID of the created major incidentrequest_id, author_id

Approvals

OperationHTTPDescriptionRequired params
getApprovalsGET /incident.approvalLists the approvals instances that the given request hasrequest_id
acceptApprovalPUT /incident.approval.acceptAccepts an approvaluser_id, approval_id
rejectApprovalPUT /incident.approval.rejectRejects an approvaluser_id, approval_id
cancelApprovalPUT /incident.approval.cancelCancels an approvaluser_id, approval_id
addApprovalVoterPOST /incident.approval.add_voterAdds a voter to an approvaluser_id, approval_id
getApprovalPossibleVotersGET /incident.approval.possible_votersLists users that could accept or reject the approvalapproval_id
listApprovalStatusesGET /incident.approval.statusLists the statuses of the approvals
listApprovalTypesGET /incident.approval.typeLists the available approvals types
listApprovalVoteStatusesGET /incident.approval.vote_statusLists the status of the approval votes
getCustomApprovalsGET /incident.custom_approvalLists the custom approvals templates that the given request hasrequest_id
createCustomApprovalPOST /incident.custom_approvalRequests a custom approval in the given requestrequest_id, author_id, approval_id
addSpontaneousApprovalPOST /incident.spontaneous_approvalCreates a spontaneous approvalrequest_id, author_id, description, approval_user_id
OperationHTTPDescriptionRequired params
setCustomFieldPOST /incident.custom_fieldCreates values for a custom field from a request. Different types of data can be sent in the values variable. No value (empty string) means erase value. When sending files, the name of the file has to be in the values array (including its extension), and the file(s) itself should be sent in the body of the requestrequest_id, values, custom_field_uid, author_id
patchCustomFieldPATCH /incident.custom_fieldAdd values for a multiple custom field from a request. This only works for the custom field with type CI. It can only be sent one CI name at a time in the values variable. It must be the complete name of the CI and all the CIs that have that exact name will be added to the multiple custom field
deleteCustomFieldDELETE /incident.custom_fieldDeletes value in the associated custom field
getLinksGET /incident.linkLists all the linked requests from a given requestrequest_id
addLinkPOST /incident.linkLinks a request to another requestrequest_id, request_ids
relateCIByKeywordPOST /incident.relate.ci.by.keywordRelates a request to every CI that matches a certain keywordrequest_id, keyword
getLinkedCIsCountersGET /incident.linked_cis.counters.fromReturns counters with the number of incidents of each statusfrom, cis_source_id
getExternalEntitiesGET /incident.external_entityLists all the external entities linked to a requestrequest_id
addExternalEntityPOST /incident.external_entityLinks a request to an external entityrequest_id, external_entity_id
getAttachmentsGET /incident.attachmentReturns the requested attachmentid
getTasksGET /incident.tasksRetrieves the list of tasks linked to a specified requestrequest_id

Attribute

Request attribute lookups: priorities, types, sources, and statuses.

OperationHTTPDescriptionRequired params
listPrioritiesGET /incident.attributes.priorityLists all the priorities, or only one if an ID its provided
listSourcesGET /incident.attributes.sourceLists all the sources. If an ID is provided, only the one that matches the specified ID will be listed
listStatusesGET /incident.attributes.statusLists all the status. If an ID is provided, only the one that matches the specified ID will be listed
listTypesGET /incident.attributes.typeLists all the types. If an ID is provided, only the one that matches the specified ID will be listed

Category

List request categories.

OperationHTTPDescriptionRequired params
listGET /categoriesLists all the categories, or the required one if an ID is provided

Help Desk

Help desks, their levels, and observers.

OperationHTTPDescriptionRequired params
addObserverPOST /helpdesks.observersAdd users as observers to a help deskid, observer_users
deleteObserverDELETE /helpdesks.observersRemoves observers from a help desk
getObserversGET /helpdesks.observersReturns all active help desks and their observers, or the observers for the specified help desks
listGET /helpdesksReturns all the active help desks, or one in particular
listWithLevelsGET /helpdesksandlevelsReturns all the help desks and levels, or one in particular

Level

Help desk levels and their observers.

OperationHTTPDescriptionRequired params
addObserverPOST /levels.observersAdd users as observers to a help desk levelid, observer_users
deleteObserverDELETE /levels.observersRemoves observers from a help desk level
getObserversGET /levels.observersReturns all active help desk levels and their observers, or the observers for the specified help desk levels
listGET /levelsReturns all active help desks' levels, or one in particular

User

Users: lookup, administration, and group/company/location membership.

OperationHTTPDescriptionRequired params
changePasswordPUT /user.passwordChanges the password of a userid, password
convertPOST /user.convertChanges the user from external into internal and sends an email to the user requesting a new passwordid
createPOST /userCreates a new username, lastname, email
createTokenPOST /user.tokenCreates a new session token for the user that matches the input IDid
deleteDELETE /userDeletes a user
disablePUT /user.disableDisables a userid
enablePUT /user.enableEnables a userid
getGET /userReturns the info of a userid
getByGET /user.byRetrieves the user matching the username or email and displays some basic information about the user. At least one of the input parameters is required
getGroupsGET /users.groupsReturns the user's groups, companies, helpdesks and locationsids
listGET /usersRetrieves users and displays some basic information about them. It's possible to specify an array of user IDs in order to filter specific users; otherwise, it retrieves all users
listByGET /users.byRetrieves users matching username, email or any of their phone numbers and displays basic information about them
resetPasswordPOST /user.password.resetSends an email to the user requesting a new passwordid, type
updatePUT /userUpdates the info of a userid

Group

User groups, their members, and observers.

OperationHTTPDescriptionRequired params
addObserverPOST /groups.observersAdd users as observers to a groupid, observer_users
addUserPOST /groups.usersAdds a user to a groupid, users
createPOST /groupsCreates a group of usersname
deleteDELETE /groupsErases a group of users
deleteObserverDELETE /groups.observersRemoves observers from a group
deleteUserDELETE /groups.usersRemoves a user from a group
getObserversGET /groups.observersReturns all active groups and their observers, or the observers for the specified groups
getUsersGET /groups.usersLists the members of a groupid
listGET /groupsReturns all active groups of users, or one in particular if an ID or name is provided

Company

Companies, their members, groups, and observers.

OperationHTTPDescriptionRequired params
addGroupPOST /companies.groupsRelates a users group to a companyid, groups
addObserverPOST /companies.observersAdd users as observers to a companyid, observer_users
addUserPOST /companies.usersAdds a user to a company. If the company contains groups, the users will also be added to those groupsid, users
createPOST /companiesCreates a new companyname
deleteDELETE /companiesErases an existing company
deleteGroupDELETE /companies.groupsSuppresses the relationship between a users group and a company
deleteObserverDELETE /companies.observersRemoves observers from a company
deleteUserDELETE /companies.usersRemoves a user from a company. If the user is within a group that belongs to that company, they will also be removed from that group
getGroupsGET /companies.groupsLists all the users groups related to a companyid
getObserversGET /companies.observersReturns all active companies and their observers, or the observers for the specified companies
getUsersGET /companies.usersLists the members of a companyid
listGET /companiesReturns all the active companies
updatePUT /companiesModifies an existing companyid

Location

Locations, their members, and observers.

OperationHTTPDescriptionRequired params
addObserverPOST /locations.observersAdd users as observers to a locationid, observer_users
addUserPOST /locations.usersAdds users to a locationid, users
createPOST /locationsCreates a locationname
deleteDELETE /locationsErases an existing location and its sublocations
deleteObserverDELETE /locations.observersRemoves observers from a location
deleteUserDELETE /locations.usersRemoves users from a location
getObserversGET /locations.observersReturns all active locations and their observers, or the observers for the specified locations
getUsersGET /locations.usersLists the members of a locationid
listGET /locationsReturns all active locations, or one in particular

Knowledge Base

Knowledge Base articles, categories, and attachments.

OperationHTTPDescriptionRequired params
addArticleAttachmentPOST /kb.articles.attachmentsAdds attachments to an articlearticle_id, author_id
createArticlePOST /kb.articlesCreates an articlecategory_id, content, title, author_id
createCategoryPOST /kb.categoriesCreates a new Knowledge Base categoryname
deleteArticleDELETE /kb.articlesDeletes an article from a given ID
deleteArticleAttachmentDELETE /kb.articles.attachmentsDeletes an attachment from an article
deleteCategoryDELETE /kb.categoriesDeletes a Knowledge Base category
getArticleAttachmentsGET /kb.articles.attachmentsLists the attachments from an articlearticle_id
getArticlesGET /kb.articlesLists all the articles with their properties
getArticlesByCategoryGET /kb.articles.by.categoryLists all the articles that belong to a certain categorycategory_id
getArticlesByIdsGET /kb.articles.by.idsLists articles by IDids
getArticlesByKeywordsGET /kb.articles.by.keywordsSearches for articles by keywordskeywords
getCategoriesGET /kb.categoriesLists all the Knowledge Base categories
getCategoriesByIdsGET /kb.categories.by.idsLists Knowledge Base categories by some given IDsids
updateArticlePUT /kb.articlesModifies an article given a certain IDauthor_id, id
updateCategoryPUT /kb.categoriesModifies a Knowledge Base categoryid

Custom Field

Custom field definitions and list/tree option management.

OperationHTTPDescriptionRequired params
addListOptionPOST /cf.field.options.listConfigures list type custom fields. If the key already exists, the previous value will be overwrittentype, uid, key_values
addTreeOptionPOST /cf.field.options.treeAdds configuration to the tree type custom fields. If the key already exists, the previous value will be overwrittenuid, name
deleteListOptionDELETE /cf.field.options.listErases keys from the list type custom fields configuration
deleteTreeOptionDELETE /cf.field.options.treeErases the options from the tree type custom fields and any of its children
getListOptionsGET /cf.field.options.listLists the configuration of custom fields that are a list typeuid
getTreeOptionsGET /cf.field.options.treeReturns the structure of the tree type custom fields options. The hash is system internal, but it is used to make modificationsuid
listFieldTypesGET /cf.fields.typesReturns a list of all the supported custom field types, with a brief description of the data type for each field
listFieldsGET /cf.fields.allReturns a list of all the active custom fields
listFieldsByCategoryGET /cf.fields.by.categoryReturns a list of the custom fields related to a category IDcategory_id
listSharedFieldsGET /cf.fields.shared.allReturns a list of all the active shared custom fields
updateTreeOptionPUT /cf.field.options.treeModifies the configuration of the tree type custom fields. If there is no such key, it will be addedhash, uid

Internal Note

Internal notes on requests.

OperationHTTPDescriptionRequired params
createPOST /internalnotesCreates an internal noteobject_type, object_id, author_id, description, title
deleteDELETE /internalnotesDeletes an internal note
getGET /internalnotesLists all the internal notes, or one in particularid
updatePUT /internalnotesUpdates the info of an internal noteid, author_id

Time Tracking

Time tracking records and categories.

OperationHTTPDescriptionRequired params
createPOST /timetrackingLogs the indicated time within a requestrequest_id, to, user_id
deleteDELETE /timetrackingDeletes a time log entry from a request
getGET /timetrackingLists all the available time tracking records within a specific time interval or a request ID
listCategoriesGET /timetracking.attributes.categoryLists all the time tracking categories, or the required one if an ID is provided

Breaking News

Breaking news announcements and their updates.

OperationHTTPDescriptionRequired params
addStatusUpdatePOST /breakingnews.statusCreates a new update to the given Breaking Newsid, body
createPOST /breakingnewsCreates Breaking Newsbody, type_id, title
getGET /breakingnewsReturns the requested Breaking Newsid
getStatusUpdatesGET /breakingnews.statusReturns the updates of the requested Breaking Newsid
listAllGET /breakingnews.allLists all the Breaking News
listStatusesGET /breakingnews.attributes.statusLists all the possible status for the Breaking News' and their descriptions. If an ID is provided, only one will be listed
listTypesGET /breakingnews.attributes.typeLists all the importance types of the Breaking News. If an ID its provided, only one will be listed
updatePUT /breakingnewsModifies a set of Breaking Newsid

Trigger

User-defined triggers and their executions.

OperationHTTPDescriptionRequired params
listGET /triggersIf no ID is specified, it returns a list with all the user defined triggers. Otherwise, it returns the trigger matching the specific trigger ID (if it exists)
listExecutionsGET /triggers.executionsReturns a list detailing each time that a specific trigger was executed in the last hour. If no trigger ID is provided, it returns all the times that user defined triggers were executed in the last hour

Configuration Item

Configuration items referenced from custom fields.

OperationHTTPDescriptionRequired params
getByIdsGET /cis.by.idReturns an array of CIs, linked through custom fields and shared custom fields, with their IDs and propertiesci_internal_ids

Data Export

Data export downloads.

OperationHTTPDescriptionRequired params
getGET /data.exportReturns the data export URLid

Workflow

Workflow deployment and initial fields.

OperationHTTPDescriptionRequired params
deployPUT /wf.deployDeploys the last version of the workflowworkflow_id
getInitialFieldsByCategoryGET /wf.initialfields.by.categoryLists the initial fields needed to create a request from a workflowcategory_id

System

Instance information.

OperationHTTPDescriptionRequired params
getVersionGET /sd.versionReturns the current version of the InvGate Service Management instance

Examples

Create a Request (Incident)

{
"integration_service": "invgate-service-management",
"resource": "incident",
"operation": "create",
"parameters": {
"creator_id": 1,
"customer_id": 1,
"type_id": 1,
"title": "VPN access not working",
"description": "User reports VPN disconnects every few minutes",
"category_id": 1,
"priority_id": 3
}
}

The response includes the new request's ID as a string: {"status": "OK", "info": "Request 42 was created", "request_id": "42"}.

Get a Request

{
"integration_service": "invgate-service-management",
"resource": "incident",
"operation": "get",
"parameters": {
"id": 42,
"comments": true
}
}

List Open Requests by Status

{
"integration_service": "invgate-service-management",
"resource": "incident",
"operation": "searchByStatus",
"parameters": {
"status_id": 1,
"limit": 20,
"offset": 0
}
}

Add a Comment

{
"integration_service": "invgate-service-management",
"resource": "incident",
"operation": "addComment",
"parameters": {
"request_id": 42,
"author_id": 1,
"comment": "Escalating to network team",
"customer_visible": true
}
}

Cancel a Request

{
"integration_service": "invgate-service-management",
"resource": "incident",
"operation": "cancel",
"parameters": {
"request_id": 42,
"author_id": 1,
"comment": "Duplicate of request 41"
}
}

Find a User by Email

{
"integration_service": "invgate-service-management",
"resource": "user",
"operation": "getBy",
"parameters": {
"email": "[email protected]"
}
}

List Priorities (for dropdowns / ID resolution)

{
"integration_service": "invgate-service-management",
"resource": "attribute",
"operation": "listPriorities",
"parameters": {}
}

Returns the fixed 5-level scale: [{"id":1,"name":"Low"}, {"id":2,"name":"Medium"}, {"id":3,"name":"High"}, {"id":4,"name":"Urgent"}, {"id":5,"name":"Critical"}].


Common Workflow Patterns

Alert-to-Ticket Pipeline

  1. Receive an alert from an upstream node (SIEM, EDR, monitoring)
  2. getBy (user) — resolve the on-call or reporting user's ID from their email
  3. create (incident) — open a request with the alert details, mapping severity to priority_id
  4. addObserver — subscribe stakeholders to the new request

Ticket Triage & Status Tracking

  1. searchByStatus (incident) — fetch new requests (status_id 1)
  2. get — pull full details including comments for each candidate
  3. reassign — route to the right help desk or agent
  4. waitingForCustomer / waitingForDate — park requests pending input, or cancel / reject invalid ones

Approval-Gated Change Flow

  1. createCustomApproval (incident) — attach an approval to a change request
  2. getApprovalPossibleVoters — discover who can vote
  3. addApprovalVoter — assign the approvers
  4. Poll getApprovals and branch on the outcome; acceptSolution / rejectSolution to close the loop

Knowledge Base Sync

  1. getArticlesByKeywords (knowledgeBase) — look for an existing article before creating tickets
  2. createArticle — publish a remediation guide from resolved-ticket data
  3. getCategories / createCategory — keep article taxonomy aligned

Troubleshooting

IssueResolution
invalid credentials (status 401) with a login-page noteThe API username/password is wrong, or you used UI login credentials — copy the API pair from Settings → Integrations API → Credentials
Connection works in the browser but fails in NINAThe base URL must include /api/v1 — copy it verbatim from Settings → Integrations API → Resources
unsupported operation errorsOperation keys are camelCase (e.g. searchByStatus, waitingForAgent) — check the tables above
Create/update rejected with missing field errorsInvGate requires numeric IDs for creator_id, customer_id, category_id, type_id, priority_id — resolve them via the attribute, category, and user lookups first
Can't find a "set status" operationInvGate has no generic status setter — use the discrete lifecycle operations (cancel, reject, reopen, waitingFor*, acceptSolution, …); read statuses via listStatuses
request_id type confusioncreate returns the request ID as a string; numeric and string IDs are both accepted as inputs
waitingForDate rejects the dateSupply timestamp as a Unix epoch string (e.g. "1781251158")
Type/category IDs differ between instancesRequest types and categories are instance-specific (e.g. some instances add "Change Request", "Major incident") — always resolve them via listTypes / list rather than hardcoding

Security Considerations

  1. Protect API Credentials: Store the username/password exclusively through NINA credential management — never in workflow parameters or logs
  2. Powerful Admin Operations: This integration exposes user administration (changePassword, resetPassword, createToken, disable) and workflow.deploy — restrict which workflows and users may invoke them
  3. Least Privilege: If InvGate allows scoping the API user, limit it to the modules your workflows need
  4. Sensitive Ticket Data: Requests often contain PII and internal infrastructure details — treat workflow outputs accordingly
  5. Credential Rotation: Rotate the API password periodically and immediately after suspected exposure

Additional Resources

Updated: 2026-06-12