User-defined Templates

User-defined templates allow you create a set of tests, alert rules, dashboards, and tags from a single template configuration file that you define. The ThousandEyes platform supports many monitoring scenarios and third-party applications, such as Microsoft 365, Webex, and others using a predefined set of certified templates. You may, however, have additional needs that are not covered. You can use user-defined templates to support monitoring use cases that the ThousandEyes platform doesn't currently offer through its certified offerings. For more information about templates, see Templates.


When you create a template, all users within your account group can have the option to select it when deploying a new test template. To grant access to users in your account group, enable the View Test Templates permission for each user. Users will also need the "Edit Tests" permission to deploy the templates. If the template has other assets, such as alert rules, tags, or dashboards, users in the account group will also need to have the respective edit permission for each asset type.

Creating a User-defined Template with the ThousandEyes API

If this is your first time using the ThousandEyes API, see Thousand Eyes Developer Reference: Overview to get started.

Using createTestTemplate

To create a new template, use the createTestTemplate endpoint (


Templates currently support configuring tags, tests, alert rules, and dashboards. Each of these assets is configured using a schema you can specify in your configuration file. The API documentation for each type of asset is listed in the table below. Examples of each asset's configuration are in the next section, Example Schemas.

The table below lists where you can find a reference to the schema for each type of asset:

Asset TypeSchema Reference Link

Tags (formerly "Labels")


Alert Rules


You can also reference the id of another type of asset within each schema you define for each asset. For example, to assign an alert rule asset to a test asset, you can reference the id of a test you are already defining in the configuration file for the template you are creating. Because the ThousandEyes platform creates each template asset type in a specific order, an asset can only reference other assets that are created before it.

The order the ThousandEyes platform creates template assets is:

  1. Tags (formerly "Labels")

  2. Tests

  3. Alert Rules

  4. Dashboards

The following table illustrates which assets of a different type each asset can reference:

Asset TypeCan Reference





Alert Rules

Tags, Tests


Tags, Tests, Alert Rules

Example Schema

The template schema below describes a straightforward Slack monitor that includes an HTTP server, API test, and DNS test. The target is automatically determined from the Slack tenant name, and the DNS test will automatically determine the name servers.


  "name": "Slack",

  "description": "Template for creating a set of tests to monitor Slack; will monitor your Slack vanity URL (<tenant>, Slack DNS servers, and the Slack API (",

  "summary": "A template for monitoring your `<tenant>` instance and \`\`; includes Network, DNS, and Web tests",

  "icon": "slack",

  "isBuiltIn": false,

  "certificationLevel": "User",

  "userInputs": {

    "tenant": {

      "name": "Slack Tenant Name",

      "title": "",

      "description": "Your Slack tenant name; will be used to determine target as <tenant>",

      "type": "string"


    "agents": {

      "name": "Which agents should we run tests from?",

      "title": "",

      "type": "any"



  "tests": {

    "apiTest": {

      "interval": "60",

      "type": "http-server",

      "url": "",

      "testName": "{{name}} - {{userInputs.tenant}} - API",

      "agents": "{{userInputs.agents}}"


    "tenantTest": {

      "httpInterval": "60",

      "interval": "60",

      "type": "page-load",

      "url": "https://{{userInputs.tenant}}",

      "testName": "{{name}} - {{userInputs.tenant}} - Web",

      "agents": "{{userInputs.agents}}"


    "dnsTest": {

      "domain": "{{userInputs.tenant}} A",

      "interval": "60",

      "type": "dns-server",

      "dnsServers": \[\],

      "testName": "{{name}} - {{userInputs.tenant}} - DNS",

      "agents": "{{userInputs.agents}}"



  "labels": {},

  "tags": {},

  "alertRules": {},

  "dashboards": {}


Last updated