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.
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 |
JSON Schema
{
"$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.
Call it yourself
curl for this page
curl "https://apis.io/api/v1/json-schemas/confighub-trigger"
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.