The Ticketing API supports push notifications through webhook subscriptions, enabling real‑time delivery of case‑related events to customer‑defined endpoints.

You have full control over your webhook subscriptions, including the ability to subscribe exclusively to new case creation events, or subscribe to both case creation and subsequent case updates.

Webhook endpoints and associated authentication credentials can be configured, updated, and refreshed programmatically using the API methods described below. This allows for fully automated lifecycle management of webhook integrations, ensuring alignment with customer security, availability, and operational requirements.

Set up subscription

This endpoint registers a new webhook subscription for a specific namespace. By creating a webhook, your system can receive real-time HTTP callbacks (POST or PUT requests) whenever a specific action occurs on a specific case within that namespace.

FeatureDetails
MethodPOST
Endpoint/apis/v1/namespaces/{namespace}/webhook

Path parameters

ParameterTypeRequiredDescription
namespaceStringYesThe unique identifier for the namespace. (e.g., 7 in the example)

Headers

HeaderValueRequiredDescription
AuthorizationBearer <TOKEN>YesA valid API Bearer token for authentication
Content-Typeapplication/jsonYesSpecifies the media type of the resource (standard for JSON APIs)

Request body

The request body is divided into standard metadata and a spec object containing the endpoint details. Please note that you can set different endpoints for actions “create” and “update”, they need to be executed separately in any scenario. Action “delete” will unsubscribe you from the selected webhook subscription.

FieldNESTED PROPERTYTypeRequiredDescription
kindStringYesSet value “webhook”
versionStringYesSet value “v1”
namespaceStringYesMust match the {namespace} in the URL
nameStringYesA unique, user-defined name for this specific webhook configuration. Needs to be different for the different “action” values – create and update. Please store the “name” as you will need it to update the subscription when needed.
metadataObjectYesEmpty object {}
specObjectYesThe specification object contains detailed information
urlStringYesThe destination URL (endpoint) where the event payload will be sent
versionStringYesSet value “v1alpha”
kindStringYesSet value “case”
actionStringYesThe specific lifecycle event that triggers the webhook. Possible values: create, update
credentialObjectYesCredentials associated with the endpoint
typeStringYesSet value “basic”
secretsObjectYesBasic authentication object
typeStringYesSet value “plaintext”
valuesObjectYesUser and Password object
valueStringYesUsername that GTT will use for Basic authentication, associated with the URL
nameStringYesSet value “username”
valueStringYesPassword that GTT will use for Basic authentication,
associated with the URL
nameStringYesSet value “password”

Response body

The response will mirror your subscription with filled “metadata” for the webhooks creation.

FieldNESTED PROPERTYTypeRequiredDescription
kindStringYesSet value “webhook”
versionStringYesSet value “v1”
namespaceStringYesThe ID of the {namespace} the case belongs to
nameStringYesThe unique identifier you have given the webhook
metadataObjectYesA key-value map for additional custom data
specObjectYesThe specification object contains detailed information
urlStringYesThe destination URL (endpoint) where the event payload will be sent
credentialObjectYesCredentials associated with the endpoint
typeStringYesSet value “basic”
urlStringYesSet value “null”. URL link to your credentials
secretsObjectYesBasic authentication object
typeStringYesSet value “plaintext”
valuesObjectYesUser and Password object
valueStringYesUsername that GTT will use for Basic authentication, associated with the URL
nameStringYesSet value “username”
valueStringYesPassword that GTT will use for Basic authentication, associated with the URL
nameStringYesSet value “password”
versionStringYesSet value “v1alpha”
kindStringYesSet value “case”
actionStringYesThe specific lifecycle event that you have subscriber for. Possible values: create, update

Example request

curl--location--request POST 'https://test.api.gtt.services/apis/v1/namespaces/7/webhook'\
    --header 'Content-Type: application/json'\
    --header 'Authorization: Bearer <YOUR_ACCESS_TOKEN>'
    --body {
        "kind": "webhook",

        "version": "v1",
        "namespace": "7",
        "name": "case-v1alpha-create",
        "metadata": {},
        "spec": {
            "url": "https://testendpoint.net/create",
            "version": "v1alpha",
            "kind": "case",
            "action": "create",
            "credential": {
                "type": "basic",
                "secrets": {
                    "type": "plaintext",
                    "values": [{
                            "value": "myusername",
                            "name": "username"
                        },
                        {
                            "value": "mypassword",
                            "name": "password"
                        }
                    ]
                }
            }
        }

Example response (success)

{
    "kind": "webhook",
    "version": "v1",
    "namespace": "7",
    "name": "case-v1alpha-create",
    "metadata": {
        "dateCreated": 1777016997284,
        "dateUpdated": 1777016997284
    },
    "spec": {
        "url": "https://testendpoint.net/create",
        "credential": {
            "type": "basic",
            "url": null,
            "secrets": {
                "type": "plaintext",
                "values": [{
                        "value": "myusername",
                        "name": "username"
                    },

                    {
                        "value": "mypassword",
                        "name": "password"
                    }
                ]
            }
        },
        "version": "v1alpha",
        "kind": "case",
        "action": "create"
    }
}

Update subscription

This action will allow you to change the URL and/or credentials to your webhook subscriptions.

Please note that you will need the “name” of the subscription to execute an update.

FeatureDetails
MethodPUT
Endpoint/apis/v1/namespaces/{namespace}/webhook/{name}

Path parameters

ParameterTypeRequiredDescription
namespaceStringYesThe unique identifier for the namespace. (e.g., 7 in the example)
nameStringYesThe unique “name” identifier you have given the webhook during subscription set up

Headers

HeaderValueRequiredDescription
AuthorizationBearer <TOKEN>YesA valid API Bearer token for authentication
Content-Typeapplication/jsonYesSpecifies the media type of the resource (standard for JSON APIs)

Request body

The request body is divided into standard metadata and a spec object containing the endpoint details. Please note that you can set different endpoints for actions “create” and “update”, they need to be executed separately in any scenario. Action “delete” will unsubscribe you from the selected webhook subscription.

FieldNESTED PROPERTYTypeRequiredDescription
kindStringYesSet value “webhook”
versionStringYesSet value “v1”
namespaceStringYesMust match the {namespace} in the URL
nameStringYesThe unique “name” identifier you have given the webhook during subscription set up
metadataObjectYesEmpty object {}
specObjectYesThe specification object contains detailed information
urlStringYesThe destination URL (endpoint) where the event payload will be sent
versionStringYesSet value “v1alpha”
kindStringYesSet value “case”
actionStringYesThe specific lifecycle event that triggers the webhook. Possible values: create, update, delete
credentialObjectYesCredentials associated with the endpoint
typeStringYesSet value “basic”
secretsObjectYesBasic authentication object
typeStringYesSet value “plaintext”
valuesObjectYesUser and Password object
valueStringYesUsername that GTT will use for Basic authentication, associated with the URL
nameStringYesSet value “username”
valueStringYesPassword that GTT will use for Basic authentication,
associated with the URL
nameStringYesSet value “password”

Response body

The response will mirror your subscription update with filled “metadata” for the webhooks.

FieldNESTED PROPERTYTypeRequiredDescription
kindStringYesSet value “webhook”
versionStringYesSet value “v1”
namespaceStringYesThe ID of the {namespace} the case belongs to
nameStringYesThe unique identifier you have given the webhook
metadataObjectYesA key-value map for additional custom data
specObjectYesThe specification object contains detailed information
urlStringYesThe destination URL (endpoint) where the event payload will be sent
credentialObjectYesCredentials associated with the endpoint
typeStringYesSet value “basic”
urlStringYesSet value “null”. URL link to your credentials
secretsObjectYesBasic authentication object
typeStringYesSet value “plaintext”
valuesObjectYesUser and Password object
valueStringYesUsername that GTT will use for Basic authentication, associated with the URL
nameStringYesSet value “username”
valueStringYesPassword that GTT will use for Basic authentication, associated with the URL
nameStringYesSet value “password”
versionStringYesSet value “v1alpha”
kindStringYesSet value “case”
actionStringYesThe specific lifecycle event that you have subscriber for. Possible values: create, update, delete

Example request

curl--location--request PUT 'https://test.api.gtt.services/apis/v1/namespaces/7/webhook/case-v1alpha-create'\
    --header 'Content-Type: application/json'\
    --header 'Authorization: Bearer <YOUR_ACCESS_TOKEN>'
    --body {
        "kind": "webhook",
        "version": "v1",
        "namespace": "7",
        "name": "case-v1alpha-create",
        "metadata": {},
        "spec": {
            "url": "https://testendpoint.net/create",
            "version": "v1alpha",
            "kind": "case",
            "action": "create",
            "credential": {
                "type": "basic",
                "secrets": {
                    "type": "plaintext",
                    "values": [{
                            "value": "myusername2",
                            "name": "username"
                        },
                        {
                            "value": "mypassword2",
                            "name": "password"
                        }
                    ]
                }
            }
        }
    }

Example response (success)

{
    "kind": "webhook",
    "version": "v1",
    "namespace": "7",
    "name": "case-v1alpha-create",
    "metadata": {
        "dateCreated": 1777016997284,
        "dateUpdated": 1777016997284
    },
    "spec": {
        "url": "https://testendpoint.net/create",
        "credential": {
            "type": "basic",

            "url": null,
            "secrets": {
                "type": "plaintext",
                "values": [{
                        "value": "myusername2",
                        "name": "username"
                    },
                    {
                        "value": "mypassword2",
                        "name": "password"
                    }
                ]
            }
        },
        "version": "v1alpha",
        "kind": "case",
        "action": "create"
    }
}

List webhook subscriptions

This call will retrieve all your subscriptions for webhooks associated to a specific namespace.

FeatureDetails
MethodGET
Endpoint/apis/v1/namespaces/{namespace}/webhook

Path parameters

ParameterTypeRequiredDescription
namespaceStringYesThe unique identifier for the namespace. (e.g., 7 in the example)

Headers

HeaderValueRequiredDescription
AuthorizationBearer <TOKEN>YesA valid API Bearer token for authentication
Content-Typeapplication/jsonYesSpecifies the media type of the resource (standard for JSON APIs)

Response body

The response will mirror your subscription update with filled “metadata” for the webhooks.

FieldNESTED PROPERTYTypeRequiredDescription
kindStringYesSet value “webhook”
versionStringYesSet value “v1”
namespaceStringYesThe ID of the {namespace} the case belongs to
nameStringYesThe unique identifier you have given the webhook
metadataObjectYesA key-value map for additional custom data
specObjectYesThe specification object contains detailed information
urlStringYesThe destination URL (endpoint) where the event payload will be sent
credentialObjectYesCredentials associated with the endpoint
typeStringYesSet value “basic”
urlStringYesSet value “null”. URL link to your credentials
secretsObjectYesBasic authentication object
typeStringYesSet value “plaintext”
valuesObjectYesUser and Password object
valueStringYesUsername that GTT will use for Basic authentication, associated with the URL
nameStringYesSet value “username”
valueStringYesPassword that GTT will use for Basic authentication, associated with the URL
nameStringYesSet value “password”
versionStringYesSet value “v1alpha”
kindStringYesSet value “case”
actionStringYesThe specific lifecycle event that you have subscriber for. Possible values: create, update

Example request

curl --location --request GET 'https://test.api.gtt.services/apis/v1alpha/namespaces/7/webhook' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <YOUR_ACCESS_TOKEN>'

Example response (success)

[{
        "kind": "webhook",
        "version": "v1",
        "namespace": "7",
        "name": "case-v1alpha-create",
        "metadata": {
            "dateUpdated": 1777032490395
        },
        "spec": {
            "url": "https://testendpoint.net/create",
            "credential": {
                "type": "basic",
                "url": null,
                "secrets": {
                    "type": "plaintext",
                    "values": [{
                            "value": "myusername",
                            "name": "username"
                        },
                        {
                            "value": "mypassword",

                            "name": "password"
                        }
                    ]
                }
            },
            "version": "v1alpha",
            "kind": "case",
            "action": "craeted"
        }
    },
    {
        "kind": "webhook",
        "version": "v1",
        "namespace": "7",
        "name": "case-v1alpha-update",
        "metadata": {
            "dateUpdated": 1777032448975
        },
        "spec": {
            "url": "https://testendpoint.net/update",
            "credential": {
                "type": "basic",
                "url": null,
                "secrets": {
                    "type": "plaintext",
                    "values": [{
                            "value": "myusername",
                            "name": "username"
                        },
                        {
                            "value": "mypassword",
                            "name": "password"
                        }
                    ]
                }
            },
            "version": "v1alpha",
            "kind": "case",
            "action": "update"
        }
    }
]

Case create webhook

When a new case is created within your namespace, the system automatically triggers a webhook notification to your customer‑configured endpoint using a standard HTTP POST request.

The webhook payload exposes a defined set of case attributes that enable you to apply filtering, routing, or downstream processing logic based on business requirements. These attributes may be used to selectively process cases by characteristics such as:

  • Case type (e.g., Incident or Request)
  • Channel indicator, which allows you to distinguish cases generated by automated GTT monitoring systems from those created through other sources.

This capability enables you to control which cases are ingested, acted upon, or propagated within your own system.

Please note that cases created by you through the Ticketing API will NOT generate case creation webhook events. This behaviour is intentional to prevent event loops and duplicate processing within the integration.

FeatureDetails
MethodPOST
EndpointYour specified endpoint

Webhook body

FieldNESTED PROPERTYTypeRequiredDescription
kindStringYesSet value “case”
versionStringYesSet value “v1alpha”
namespaceStringYesYour {namespace} ID
nameStringYesA unique system identifier for the case record
metadataObjectYesEmpty object {}
specObjectYesThe specification object contains detailed information
numberStringYesThe human-readable case number (e.g., “CS0071728”)
stateStringYesThe current lifecycle status of the case (e.g., “New”)
case_typeStringYesIs the case of type Incident or Request
channelStringYesThe channel which initiated the case opening. Table provided in the Appendix
subcategoryStringYesA specific classification of the issue (e.g., “Service Down”). Table provided in the Appendix
customer_ticket_referenceStringNoAn optional reference ID provided by the customer for their internal tracking (can be null)
account_nameStringYesThe name of the customer account associated with the case
gnidStringYesThe unique GTT Global Identifier for the service
opened_atStringYesTimestamp of when the case was created in UTC. (Format: YYYY-MM-DD HH:MM:SS)
priorityStringYesThe priority in which the case is handled (e.g., “1 – Critical”) Table provided in the Appendix
short_descriptionStringYesShort Description of the issue
descriptionStringYesA detailed description of the issue, often including error messages, Service IDs, or hostnames

Example POST

{
    "kind": "case",
    "version": "v1alpha",
    "namespace": "7",
    "name": "CS0148471",
    "metadata": {},
    "spec": {
        "number": "CS0148471",
        "state": "New",
        "case_type": "Incident",

        "channel": "Phone",
        "subcategory": "Service Down",
        "customer_ticket_reference": "",
        "account_name": "Sample Customer",
        "gnid": "1234567",
        "opened_at": "2026-04-02 11:50:40",
        "priority": "1 - Critical",
        "short_description": "Customer site unreachable",
        "description": "Ping timeout to CE router"
    }
}

Case update webhook

When an existing case is updated within your namespace, the system automatically triggers a webhook notification to your customer‑configured endpoint using a standard HTTP PUT request.

The webhook payload exposes a defined set of case attributes including any work notes (comments) added to the case.

Please note that comments created by you through the Ticketing API will NOT generate case update webhook events. This behaviour is intentional to prevent event loops and duplicate processing within the integration.

There is different structure of the body of the webhooks depending on the state in which the GTT case is in.

  • Payload when case is worked on. State can be = “New” or “In Progress” or “Pending” or “Force Majeure” or “Monitoring”.
  • Payload when case state is Resolved.
  • Payload when case state is Closed.
  • Payload when case state is Cancelled.

Case is worked on

The majority of notifications will come to you in this format, payload includes all fields that have a possibly of changing throughout the case life.

FeatureDetails
MethodPUT
EndpointYour specified endpoint

Webhook body

FieldNESTED PROPERTYTypeRequiredDescription
kindStringYesSet value “case”
versionStringYesSet value “v1alpha”
namespaceStringYesYour {namespace} ID
nameStringYesA unique system identifier for the case record
metadataObjectYesEmpty object {}
specObjectYesThe specification object contains detailed information
numberStringYesThe human-readable case number (e.g., “CS0071728”)
stateStringYesThe current lifecycle status of the case (e.g., “Pending”)
subcategoryStringYesA specific classification of the issue (e.g., “Service Down”)
customer_ticket_referenceStringNoAn optional reference ID provided by the customer for their internal tracking (can be null)
gnidStringYesThe unique GTT Global Identifier for the service.
priorityStringYesThe priority in which the case is handled (e.g., “1 – Critical”) Table provided in the Appendix
due_dateStringYesTimestamp of the next action date for the case update in UTC. (Format: YYYY-MM-DD HH:MM:SS)
escalation_levelStringYesThe current escalation level that the case is in (e.g., “1”). Table provided in the Appendix
additional_commentStringYesText of the posted update
additional_comment_authorStringYesUser that added the update
additional_comment_dateStringYesDate and time update was created in UTC. (Format: YYYY-MM-DD HH:MM:SS)

Example PUT

{
    "kind": "case",
    "version": "v1alpha",
    "namespace": "7",
    "name": "CS0148471",
    "metadata": {},
    "spec": {
        "number": "CS0148471",
        "state": "Pending",
        "subcategory": "Service Down",
        "customer_ticket_reference": "XYZ1235",
        "gnid": "1234567",
        "priority": "1 - Critical",
        "due_date": "2026-04-03 13:00:00",
        "escalation_level": "None",
        "additional_comment": "Please provide picture of equipment...",
        "additional_comment_author": "gtt.test.user",
        "additional_comment_date": "2026-04-02 11:59:30"
    }
}

Case is resolved

When your case is resolved by an engineer, you will receive a notification with “State = Resolved” and resolution details. In very specific cases it’s possible to receive this notification more than once with different additional comments, but the same resolution.

FeatureDetails
MethodPUT
EndpointYour specified endpoint

Webhook body

FieldNESTED PROPERTYTypeRequiredDescription
kindStringYesSet value “case”
versionStringYesSet value “v1alpha”
namespaceStringYesYour {namespace} ID
nameStringYesA unique system identifier for the case record
metadataObjectYesEmpty object {}
specObjectYesThe specification object contains detailed information
numberStringYesThe human-readable case number (e.g., “CS0071728”)
stateStringYesThe current lifecycle status of the case (e.g., “Resolved”)
customer_ticket_referenceStringNoAn optional reference ID provided by the customer for their internal tracking (can be null)
work_endStringYesDate and time in which the issue was resolved in UTC. (Format: YYYY-MM-DD HH:MM:SS). Time is in the past.
close_notesStringYesResolution summary
resolved_byStringYesUser that provided the resolution
resolution_codeStringYesResolution categorization – provided only for cases of type Request (e.g., “Successful”) Table provided in the Appendix
additional_commentStringNoText of the posted additional comment. Can be blank

Example PUT

{
    "kind": "case",
    "version": "v1alpha",
    "namespace": "7",
    "name": "CS0148471",
    "metadata": {},
    "spec": {
        "number": "CS0148471",
        "state": "Resolved",
        "customer_ticket_reference": "XYZ1235",
        "work_end": "2026-04-03 12:01:00",
        "close_notes": "Resolution details",
        "resolved_by": "gtt.test.user",
        "additional_comment": ""
    }
}

Case is closed

After your case is resolved it will automatically close, within the time period outlined in the Case Statuses table in the Appendix. Once a case is closed it cannot be reopened or updated. You will receive this notification only once per case.

FeatureDetails
MethodPUT
EndpointYour specified endpoint

Webhook body

FieldNESTED PROPERTYTypeRequiredDescription
kindStringYesSet value “case”
versionStringYesSet value “v1alpha”
namespaceStringYesYour {namespace} ID
nameStringYesA unique system identifier for the case record
metadataObjectYesEmpty object {}
specObjectYesThe specification object contains detailed information
numberStringYesThe human-readable case number (e.g., “CS0071728”)
stateStringYesThe current lifecycle status of the case (e.g., “Closed”)
customer_ticket_referenceStringNoAn optional reference ID provided by the customer for their internal tracking (can be null)
work_endStringYesDate and time in which the issue was resolved in UTC. (Format: YYYY-MM-DD HH:MM:SS). Time is in the past.
close_notesStringYesResolution summary
resolution_codeStringYesResolution categorization – provided only for cases of type Request (e.g., “Successful”) Table provided in the Appendix

Example PUT

{
    "kind": "case",
    "version": "v1alpha",
    "namespace": "7",
    "name": "CS0148471",
    "metadata": {},
    "spec": {
        "number": "CS0148471",
        "state": "Closed",
        "customer_ticket_reference": "XYZ1235",
        "work_end": "2026-04-03 12:01:00",
        "close_notes": "Resolution details"
    }
}

Case is cancelled

If your case is cancelled, it cannot be reopened. Case cancellation really occurs, typically if the case is opened with the wrong type, or if it’s a duplicate.

FeatureDetails
MethodPUT
EndpointYour specified endpoint

Webhook body

FieldNESTED PROPERTYTypeRequiredDescription
kindStringYesSet value “case”
versionStringYesSet value “v1alpha”
namespaceStringYesYour {namespace} ID
nameStringYesA unique system identifier for the case record
metadataObjectYesEmpty object {}
specObjectYesThe specification object contains detailed information
numberStringYesThe human-readable case number (e.g., “CS0071728”)
stateStringYesThe current lifecycle status of the case (e.g., “Cancelled”)
customer_ticket_referenceStringNoAn optional reference ID provided by the customer for their internal tracking (can be null)
close_notesStringYesCancellation reason. Can be blank.

Example PUT

{
    "kind": "case",
    "version": "v1alpha",
    "namespace": "7",
    "name": "CS0148472",

    "metadata": {},
    "spec": {
        "number": "CS0148472",
        "state": "Cancelled",
        "customer_ticket_reference": "",
        "close_notes": "Duplicated of case CS0148471"
    }
}