ConfigHub · Schema

Trigger

Defines an automated function invocation that executes in response to specific Unit lifecycle events in ConfigHub. Triggers can be used to implement validation rules, automated transformations, or other custom logic that should run when configuration changes occur. Each Trigger is associated with a specific Space and can be configured to execute on events. Triggers can be either validating (checking configuration validity without modifying it) or mutating (making changes to the configuration). They can be disabled, and validating triggers can be set to Warn mode to produce non-blocking ValidationWarnings instead of ValidationErrors.

CompanyConfigurationDevOpsKubernetesGitOpsPlatform

Properties

Name Type Description
Annotations object An optional map of Annotation key/value pairs for tools to attach information to entities.
Arguments arraynull Function arguments
BackingUnitID string
BridgeWorkerID string Unique identifier for a Bridge Worker to execute the function specified by the Trigger. If neither it nor ChannelID is specified, use the builtin function executor.
ChannelID string Unique identifier for a Channel whose client executes the function specified by the Trigger. At most one of BridgeWorkerID and ChannelID is set. A Trigger that references an Invocation takes the Invoc
Clearance object
CreatedAt string The timestamp when the entity was created in "2023-01-01T12:00:00Z" format.
DeleteGates object An optional set of gates that, if any is present, will block deletion.
Description string A longer description which explains what the trigger checks and how to fix validation failures. Shown as a pop-up when hovering over an ApplyGate in the UI.
Disabled boolean Disabled indicates whether this trigger is currently disabled. When disabled, the trigger will not be executed even when matching events occur.
DisplayName string Friendly name for the entity.
EntityType string The type of entity.
Event string Event specifies the type of event that will activate this trigger. Valid values are Mutation and PostClone
FailOpenAfter integernull Duration after which a disconnected BridgeWorker's triggers are treated as fail-open. Can only be set when BridgeWorkerID is set. A Trigger on a Channel fails closed instead: it waits for the Channel'
FunctionName string Function name
Guards object Guards to record on the paths this trigger's function writes, naming the reasons those paths hold what they hold, so a later operation must be cleared for them before overwriting. Sibling to Protect:
Hash string SHA256 hash of the trigger's specification fields, used to detect changes.
HiddenReason string The reason the entity is hidden, if it is. A hidden entity is left out of List and Search results, and of what bulk operations act on, unless the include_hidden parameter names its reason or is *, or
InvocationID string InvocationID is the identifier of the function to be invoked, if there is a corresponding Invocation.
Labels object An optional map of Label key/value pairs to specify identifying attributes of entities for the purpose of grouping and filtering them.
OrganizationID string Unique identifier for an organization.
OtherDataSource string Specifies the source of additional configuration data to pass to functions that need it (e.g., vet-immutable needs a baseline revision to compare against). Uses revision specifier format such as LastR
Permissions object Permissions to access this trigger.
Protect boolean Protect indicates whether the paths this trigger's function writes are recorded as protected local overrides, so a later merge from upstream does not overwrite them. A change claims nothing by default
Slug string Unique URL-safe identifier for the entity.
SpaceID string Unique identifier for a space.
SpaceSlug string Slug of the Space this entity belongs to. (readonly)
ToolchainType string ToolchainType specifies the type of toolchain this trigger works with. This determines which configuration formats the trigger can process.
TriggerID string TriggerID uniquely identifies a trigger within the system.
UnitFilterID string References a Filter entity (with From=Unit) to restrict which Units this Trigger applies to.
UpdatedAt string The timestamp when the entity was last updated in "2023-01-01T12:00:00Z" format.
UpstreamTriggerID string
Validating boolean Validating indicates whether this is a validating function (true) or not (false). When false, the function can be either mutating (modifying configuration) or readonly returning an AttributeValueList
Version integer An entity-specific sequence number used for optimistic concurrency control. The value read must be sent in calls to Update.
Warn boolean Warn indicates whether this trigger produces ValidationWarnings instead of ValidationErrors when its validating function fails. ValidationWarnings are non-blocking.
WhereResource string Restricts which resources within a Unit's configuration data the Trigger's function operates on, using ConfigHub metadata path expressions.
WhereUnit string A filter expression to restrict which Units this Trigger applies to. It takes what the where parameter of the Unit list does, attributes of what a Unit refers to included, as in `Space.Labels.Environm
View JSON Schema on GitHub

JSON Schema

confighub-trigger-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/confighub/json-schema/confighub-trigger-schema.json",
  "title": "Trigger",
  "description": "Defines an automated function invocation that executes in response to specific\nUnit lifecycle events in ConfigHub. Triggers can be used to implement validation rules,\nautomated transformations, or other custom logic that should run when configuration\nchanges occur. Each Trigger is associated with a specific Space and can be configured\nto execute on events.\n\nTriggers can be either validating (checking configuration validity without modifying it)\nor mutating (making changes to the configuration). They can be disabled, and validating\ntriggers can be set to Warn mode to produce non-blocking ValidationWarnings instead of ValidationErrors.",
  "x-generated": "2026-10-29",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/confighub-openapi.json#/components/schemas/Trigger",
  "required": [
    "Slug",
    "Event",
    "ToolchainType"
  ],
  "type": "object",
  "properties": {
    "Annotations": {
      "type": "object",
      "additionalProperties": {
        "maxLength": 1024,
        "pattern": "^(.|\\n)*$",
        "type": "string"
      },
      "description": "An optional map of Annotation key/value pairs for tools to attach information to entities.",
      "x-confighub-where": {
        "dataType": "map[string]string"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "Arguments": {
      "type": [
        "array",
        "null"
      ],
      "items": {
        "$ref": "#/$defs/FunctionArgument"
      },
      "description": "Function arguments",
      "x-confighub-where": {
        "dataType": "JSON"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "BackingUnitID": {
      "type": "string",
      "format": "uuid",
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "uuid",
        "references": "Unit"
      }
    },
    "BridgeWorkerID": {
      "type": "string",
      "description": "Unique identifier for a Bridge Worker to execute the function specified by the Trigger. If neither it nor ChannelID is specified, use the builtin function executor.",
      "format": "uuid",
      "x-confighub-where": {
        "dataType": "uuid",
        "references": "BridgeWorker",
        "expandable": true
      }
    },
    "ChannelID": {
      "type": "string",
      "description": "Unique identifier for a Channel whose client executes the function specified by the Trigger. At most one of BridgeWorkerID and ChannelID is set. A Trigger that references an Invocation takes the Invocation's.",
      "format": "uuid",
      "x-confighub-where": {
        "dataType": "uuid",
        "references": "Channel",
        "expandable": true
      }
    },
    "Clearance": {
      "$ref": "#/$defs/Clearance"
    },
    "CreatedAt": {
      "type": "string",
      "description": "The timestamp when the entity was created in \"2023-01-01T12:00:00Z\" format.",
      "format": "date-time",
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "time"
      },
      "x-go-type-skip-optional-pointer": true,
      "x-omitzero": true
    },
    "DeleteGates": {
      "type": "object",
      "additionalProperties": {
        "type": "boolean"
      },
      "description": "An optional set of gates that, if any is present, will block deletion.",
      "x-confighub-where": {
        "dataType": "map[string]bool"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "Description": {
      "type": "string",
      "description": "A longer description which explains what the trigger checks and how to fix validation failures. Shown as a pop-up when hovering over an ApplyGate in the UI.",
      "x-confighub-where": {
        "dataType": "string"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "Disabled": {
      "type": "boolean",
      "description": "Disabled indicates whether this trigger is currently disabled.\n\t\tWhen disabled, the trigger will not be executed even when matching events occur.",
      "x-confighub-where": {
        "dataType": "bool"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "DisplayName": {
      "type": "string",
      "description": "Friendly name for the entity.",
      "x-confighub-where": {
        "dataType": "string"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "EntityType": {
      "type": "string",
      "description": "The type of entity.",
      "readOnly": true,
      "x-go-type-skip-optional-pointer": true
    },
    "Event": {
      "type": "string",
      "description": "Event specifies the type of event that will activate this trigger. Valid values are Mutation and PostClone",
      "x-confighub-where": {
        "dataType": "string"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "FailOpenAfter": {
      "type": [
        "integer",
        "null"
      ],
      "description": "Duration after which a disconnected BridgeWorker's triggers are treated as fail-open. Can only be set when BridgeWorkerID is set. A Trigger on a Channel fails closed instead: it waits for the Channel's client.",
      "x-go-type-skip-optional-pointer": true
    },
    "FunctionName": {
      "type": "string",
      "description": "Function name",
      "x-confighub-where": {
        "dataType": "string"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "Guards": {
      "allOf": [
        {
          "$ref": "#/$defs/GuardStamp"
        }
      ],
      "description": "Guards to record on the paths this trigger's function writes, naming the reasons those paths hold what they hold, so a later operation must be cleared for them before overwriting. Sibling to Protect: Protect claims the paths, Guards say why. Add and overwrite only -- retiring a guard is the /guard API (cub unit set-guard --remove-guard). Only meaningful for a mutating trigger, and part of the trigger's Hash, unlike Protect.",
      "x-confighub-where": {
        "dataType": "map[string]string"
      }
    },
    "Hash": {
      "type": "string",
      "description": "SHA256 hash of the trigger's specification fields, used to detect changes.",
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "string"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "HiddenReason": {
      "maxLength": 64,
      "pattern": "^([A-Za-z0-9]([\\-_.A-Za-z0-9]*[A-Za-z0-9])?)?$",
      "type": "string",
      "description": "The reason the entity is hidden, if it is. A hidden entity is left out of List and Search results, and of what bulk operations act on, unless the include_hidden parameter names its reason or is *, or the where parameter names the entity by Slug or ID. ConfigHub/YAML Units are created hidden with the reason BackingUnit unless given another.",
      "x-confighub-where": {
        "dataType": "string"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "InvocationID": {
      "type": "string",
      "description": "InvocationID is the identifier of the function to be invoked, if there is a corresponding Invocation.",
      "format": "uuid",
      "x-confighub-where": {
        "dataType": "uuid",
        "references": "Invocation",
        "expandable": true
      }
    },
    "Labels": {
      "type": "object",
      "additionalProperties": {
        "maxLength": 128,
        "pattern": "^[\\-_@/#$%&~+=!?.,:;(){}\\[\\]<>|A-Za-z0-9](([\\-_@/#$%&~+=!?.,:;(){}\\[\\]<>|A-Za-z0-9]| )*[\\-_@/#$%&~+=!?.,:;(){}\\[\\]<>|A-Za-z0-9])?$",
        "type": "string"
      },
      "description": "An optional map of Label key/value pairs to specify identifying attributes of entities for the purpose of grouping and filtering them.",
      "x-confighub-where": {
        "dataType": "map[string]string"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "OrganizationID": {
      "type": "string",
      "description": "Unique identifier for an organization.",
      "format": "uuid",
      "x-confighub-where": {
        "dataType": "uuid",
        "references": "Organization",
        "expandable": true
      },
      "x-go-type-skip-optional-pointer": true,
      "x-omitzero": true
    },
    "OtherDataSource": {
      "type": "string",
      "description": "Specifies the source of additional configuration data to pass to functions that need it (e.g., vet-immutable needs a baseline revision to compare against). Uses revision specifier format such as LastReleasedRevisionNum or Before:HeadRevisionNum. When empty, the function is passed the sources its signature lists in OtherDataExpected.",
      "x-confighub-where": {
        "dataType": "string"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "Permissions": {
      "allOf": [
        {
          "$ref": "#/$defs/Permissions"
        }
      ],
      "description": "Permissions to access this trigger.",
      "x-confighub-where": {
        "dataType": "map[string]map[string]map[uuid]bool"
      }
    },
    "Protect": {
      "type": "boolean",
      "description": "Protect indicates whether the paths this trigger's function writes are recorded as protected local overrides, so a later merge from upstream does not overwrite them. A change claims nothing by default and so does a trigger; set this for a trigger that decides a value on the Unit's behalf and will not be back to decide it again, such as a PostClone trigger customizing a variant. Only meaningful for a mutating trigger.",
      "x-confighub-where": {
        "dataType": "bool"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "Slug": {
      "maxLength": 128,
      "pattern": "^[A-Za-z0-9]([\\-_.A-Za-z0-9]*[A-Za-z0-9])?$",
      "type": "string",
      "description": "Unique URL-safe identifier for the entity.",
      "x-confighub-where": {
        "dataType": "string"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "SpaceID": {
      "type": "string",
      "description": "Unique identifier for a space.",
      "format": "uuid",
      "x-confighub-where": {
        "dataType": "uuid",
        "references": "Space",
        "expandable": true
      },
      "x-go-type-skip-optional-pointer": true,
      "x-omitzero": true
    },
    "SpaceSlug": {
      "type": "string",
      "description": "Slug of the Space this entity belongs to. (readonly)",
      "readOnly": true,
      "x-go-type-skip-optional-pointer": true
    },
    "ToolchainType": {
      "required": [
        "true"
      ],
      "type": "string",
      "description": "ToolchainType specifies the type of toolchain this trigger works with.\n\t\tThis determines which configuration formats the trigger can process.",
      "x-confighub-where": {
        "dataType": "string"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "TriggerID": {
      "type": "string",
      "description": "TriggerID uniquely identifies a trigger within the system.",
      "format": "uuid",
      "x-confighub-where": {
        "dataType": "uuid"
      },
      "x-go-type-skip-optional-pointer": true,
      "x-omitzero": true
    },
    "UnitFilterID": {
      "type": "string",
      "description": "References a Filter entity (with From=Unit) to restrict which Units this Trigger applies to.",
      "format": "uuid",
      "x-confighub-where": {
        "dataType": "uuid",
        "references": "Filter",
        "expandable": true
      }
    },
    "UpdatedAt": {
      "type": "string",
      "description": "The timestamp when the entity was last updated in \"2023-01-01T12:00:00Z\" format.",
      "format": "date-time",
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "time"
      },
      "x-go-type-skip-optional-pointer": true,
      "x-omitzero": true
    },
    "UpstreamTriggerID": {
      "type": "string",
      "format": "uuid",
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "uuid",
        "references": "Trigger"
      }
    },
    "Validating": {
      "type": "boolean",
      "description": "Validating indicates whether this is a validating function (true) or not (false).\n\t\tWhen false, the function can be either mutating (modifying configuration) or readonly returning an AttributeValueList (extracting values without modification).\n\t\tValidating functions check configuration validity without modifying it.\n\t\tThis value is returned by ConfigHub based on the corresponding property of the specified function.",
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "bool"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "Version": {
      "type": "integer",
      "description": "An entity-specific sequence number used for optimistic concurrency control. The value read must be sent in calls to Update.",
      "format": "int64",
      "readOnly": false,
      "x-go-type-skip-optional-pointer": true
    },
    "Warn": {
      "type": "boolean",
      "description": "Warn indicates whether this trigger produces ValidationWarnings instead of ValidationErrors when its validating function fails. ValidationWarnings are non-blocking.",
      "x-confighub-where": {
        "dataType": "bool"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "WhereResource": {
      "type": "string",
      "description": "Restricts which resources within a Unit's configuration data the Trigger's function operates on, using ConfigHub metadata path expressions.",
      "x-confighub-where": {
        "dataType": "string"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "WhereUnit": {
      "type": "string",
      "description": "A filter expression to restrict which Units this Trigger applies to. It takes what the where parameter of the Unit list does, attributes of what a Unit refers to included, as in `Space.Labels.Environment = 'prod'` and `UpstreamUnit.Slug = 'base'`.",
      "x-confighub-where": {
        "dataType": "string"
      },
      "x-go-type-skip-optional-pointer": true
    }
  },
  "x-confighub-where": {
    "Clearance": {
      "dataType": "JSON"
    }
  },
  "$defs": {
    "Clearance": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/ClearanceRequirement"
      }
    },
    "ClearanceRequirement": {
      "type": "object",
      "properties": {
        "Key": {
          "type": "string",
          "description": "The guard key this requirement is about",
          "x-go-type-skip-optional-pointer": true
        },
        "Operator": {
          "type": "string",
          "description": "Exists, In, NotIn, or DoesNotExist",
          "x-go-type-skip-optional-pointer": true
        },
        "Values": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The values In and NotIn compare against; unused by Exists and DoesNotExist",
          "x-go-type-skip-optional-pointer": true
        }
      }
    },
    "FunctionArgument": {
      "type": "object",
      "properties": {
        "Evaluator": {
          "type": "string"
        },
        "ParameterName": {
          "type": "string"
        },
        "Value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "integer",
              "format": "int64"
            },
            {
              "type": "boolean"
            }
          ]
        }
      }
    },
    "GuardStamp": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    },
    "Permissions": {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/$defs/Subjects"
      }
    },
    "Subjects": {
      "type": "object",
      "properties": {
        "GroupIDs": {
          "type": "object",
          "additionalProperties": {
            "type": "boolean"
          },
          "x-go-type-skip-optional-pointer": true
        },
        "UserIDs": {
          "type": "object",
          "additionalProperties": {
            "type": "boolean"
          },
          "x-go-type-skip-optional-pointer": true
        }
      }
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/confighub-trigger"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.