ConfigHub · Schema

Unit

Unit is the core unit of operation in ConfigHub. It contains a blob of configuration Data of a single supported Config Type (configuration format). This blob is typically a text document that contains a collection of Kubernetes or infrastructure resources, or an application configuration file. Applying / deploying or destroying the configuration happens as a single *transaction* from ConfigHub's perspective. In reality, it is most often a multi-step workflow performed by the underlying configuration / deployment tool. The resources must belong to a single infrastructure provider and the actuation mechanism must be able to resolve references and ordering dependencies among the resources within the document. For example, if one resource needs to be fully provisioned to provide input to another resource, then the actuation code is responsible for handling this. Revisions store historical copies of the configuration data. Configuration data can be restored from prior Revisions. Units can also be cloned to create new variants of a configuration.

CompanyConfigurationDevOpsKubernetesGitOpsPlatform

Properties

Name Type Description
Annotations object An optional map of Annotation key/value pairs for tools to attach information to entities.
ApplyGates object Deprecated: use ValidationErrors, which this is a copy of. Returned for compatibility with clients written before the field was renamed; it cannot be set.
ApplyWarnings object Deprecated: use ValidationWarnings, which this is a copy of. Returned for compatibility with clients written before the field was renamed; it cannot be set.
ChangeSetID string Unique identifier for the ChangeSet to which the current Revision belongs. Optional. Units are not required to belong to ChangeSets.
Conflicts object
CreatedAt string The timestamp when the entity was created in "2023-01-01T12:00:00Z" format.
DataHash string The SHA256 hash of the configuration data, encoded as hexadecimal. It is also the ETag the data endpoint serves, so a caller that listed Units can ask for a body conditionally without fetching it firs
DataSize integer The size of the configuration data in bytes. The configuration itself is not part of the Unit; read it from the data endpoint.
DeleteGates object An optional set of gates that, if any is present, will block deletion.
DestroyGates object An optional set of gates that, if any is present, will block destroy operations.
DisplayName string Friendly name for the entity.
EntityType string The type of entity.
FromLinkID array IDs of Links originating from this Unit.
HeadMutationNum integer Sequence number the head Mutation.
HeadRevisionID string Unique identifier of the head Revision -- the same Revision HeadRevisionNum numbers. Use include=HeadRevisionNum to expand it.
HeadRevisionNum integer Sequence number the head Revision.
HeadUnitActionNum integer Sequence number of the head unit action (queued operation).
HeadUnitEventNum integer Sequence number of the head unit event.
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
Labels object An optional map of Label key/value pairs to specify identifying attributes of entities for the purpose of grouping and filtering them.
LastChangeDescription string LastChangeDescription is a human-readable description of the last change. This description is copied to the new Revision when the Data is changed.
LastReleasedRevisionNum integer Sequence number of the last Revision published in a Release, or for a backing Unit the last Revision its entity took. 0 if there is none.
LinkFindings object
NeededPaths array Attribute paths that this Unit needs from upstream Units via NeedsProvides Links. Computed from get-needed and stored on data updates.
OrganizationID string Unique identifier for an organization.
PathAnnotations object Annotations on locations within the Unit's configuration data, by resource and path.
Permissions object Permissions to access this unit.
ProvidedPaths array Attribute paths that this Unit provides to downstream Units via NeedsProvides Links. Computed from get-provided and stored on data updates.
ProviderType string ProviderType says whether and how the Unit is delivered. None keeps it off every Target and out of Releases, ConfigHub marks configuration ConfigHub applies to itself, and OCI or empty means it is pub
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)
TargetID string TargetID is the identifier of the target this unit is associated with. This defines where the configuration will be applied. It must be set to a valid Target before the Unit can be Applied, Destroyed,
ToolchainType string ToolchainType specifies the type of toolchain for this unit. Possible values include "Kubernetes/YAML", "AppConfig/Properties", "AppConfig/YAML", "AppConfig/TOML", "AppConfig/INI", "AppConfig/JSON", "
UnitID string Unique identifier for a Unit.
UpdatedAt string The timestamp when the entity was last updated in "2023-01-01T12:00:00Z" format.
UpstreamRevisionNum integer Sequence number for the Revision of the Unit this unit was cloned from, or 0. This is updated to the upstream Unit's head revision number when the Unit is upgraded. To change this revision number, cha
UpstreamSpaceID string Unique identifier for the Space of the Unit this unit was cloned from, if any.
UpstreamUnitID string Unique identifier for Unit this unit was cloned from, if any. To change or remove the upstream unit, change or delete the corresponding Link of UpdateType UpgradeUnit from this Unit to the upstream Un
ValidationErrors object A map of "//" to true of Triggers invoking validating functions that did not pass on the latest configuration data. These block Release operations.
ValidationResults object A map from gate/warning name to the list of validation results that caused the gate or warning.
ValidationTriggerIDs object Map from each gate name in ValidationErrors and ValidationWarnings, and in the head Revision's ValidationPassed, to the ID of the Trigger that produced it. A gate no Trigger produced has no entry. The
ValidationWarnings object A map of "//" to true of Triggers with Warn=true invoking validating functions that did not pass on the latest configuration data. These do not block Release o
ValueTriggerIDs object Map from each key in Values to the ID of the Trigger that produced it.
Values object Map from "//" to the first output Value with that attribute name of the function invocation specified by the Trigger. Units not resolved since the Space slug
Version integer An entity-specific sequence number used for optimistic concurrency control. The value read must be sent in calls to Update.
View JSON Schema on GitHub

JSON Schema

confighub-unit-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/confighub/json-schema/confighub-unit-schema.json",
  "title": "Unit",
  "description": "Unit is the core unit of operation in ConfigHub. It contains a blob of configuration Data of a single supported Config Type (configuration format). This blob is typically a text document that contains a collection of Kubernetes or infrastructure resources, or an application configuration file. Applying / deploying or destroying the configuration happens as a single *transaction* from ConfigHub's perspective. In reality, it is most often a multi-step workflow performed by the underlying configuration / deployment tool. The resources must belong to a single infrastructure provider and the actuation mechanism must be able to resolve references and ordering dependencies among the resources within the document. For example, if one resource needs to be fully provisioned to provide input to another resource, then the actuation code is responsible for handling this. Revisions store historical copies of the configuration data. Configuration data can be restored from prior Revisions. Units can also be cloned to create new variants of a configuration.",
  "x-generated": "2026-10-29",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/confighub-openapi.json#/components/schemas/Unit",
  "required": [
    "Slug",
    "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
    },
    "ApplyGates": {
      "type": "object",
      "additionalProperties": {
        "type": "boolean"
      },
      "description": "Deprecated: use ValidationErrors, which this is a copy of. Returned for compatibility with clients written before the field was renamed; it cannot be set.",
      "readOnly": true,
      "deprecated": true,
      "x-confighub-where": {
        "dataType": "map[string]bool",
        "deprecatedAliasOf": "ValidationErrors"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "ApplyWarnings": {
      "type": "object",
      "additionalProperties": {
        "type": "boolean"
      },
      "description": "Deprecated: use ValidationWarnings, which this is a copy of. Returned for compatibility with clients written before the field was renamed; it cannot be set.",
      "readOnly": true,
      "deprecated": true,
      "x-confighub-where": {
        "dataType": "map[string]bool",
        "deprecatedAliasOf": "ValidationWarnings"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "ChangeSetID": {
      "type": "string",
      "description": "Unique identifier for the ChangeSet to which the current Revision belongs. Optional. Units are not required to belong to ChangeSets.",
      "format": "uuid",
      "x-confighub-where": {
        "dataType": "uuid",
        "references": "ChangeSet",
        "expandable": true
      }
    },
    "Conflicts": {
      "allOf": [
        {
          "$ref": "#/$defs/MutationConflictList"
        }
      ],
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "JSON"
      }
    },
    "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
    },
    "DataHash": {
      "type": "string",
      "description": "The SHA256 hash of the configuration data, encoded as hexadecimal. It is also the ETag the data endpoint serves, so a caller that listed Units can ask for a body conditionally without fetching it first.",
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "string"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "DataSize": {
      "type": "integer",
      "description": "The size of the configuration data in bytes. The configuration itself is not part of the Unit; read it from the data endpoint.",
      "format": "int64",
      "readOnly": true,
      "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
    },
    "DestroyGates": {
      "type": "object",
      "additionalProperties": {
        "type": "boolean"
      },
      "description": "An optional set of gates that, if any is present, will block destroy operations.",
      "x-confighub-where": {
        "dataType": "map[string]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
    },
    "FromLinkID": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/UUID"
      },
      "description": "IDs of Links originating from this Unit.",
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "[]uuid",
        "references": "Link",
        "expandable": true
      },
      "x-go-type-skip-optional-pointer": true
    },
    "HeadMutationNum": {
      "type": "integer",
      "description": "Sequence number the head Mutation.",
      "format": "int64",
      "readOnly": true,
      "x-go-type-skip-optional-pointer": true,
      "x-omitzero": true
    },
    "HeadRevisionID": {
      "type": "string",
      "description": "Unique identifier of the head Revision -- the same Revision HeadRevisionNum numbers. Use include=HeadRevisionNum to expand it.",
      "format": "uuid",
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "uuid"
      },
      "x-go-type-skip-optional-pointer": true,
      "x-omitzero": true
    },
    "HeadRevisionNum": {
      "type": "integer",
      "description": "Sequence number the head Revision.",
      "format": "int64",
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "int",
        "references": "Revision",
        "expandable": true
      },
      "x-go-type-skip-optional-pointer": true,
      "x-omitzero": true
    },
    "HeadUnitActionNum": {
      "type": "integer",
      "description": "Sequence number of the head unit action (queued operation).",
      "format": "int64",
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "int"
      },
      "x-go-type-skip-optional-pointer": true,
      "x-omitzero": true
    },
    "HeadUnitEventNum": {
      "type": "integer",
      "description": "Sequence number of the head unit event.",
      "format": "int64",
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "int"
      },
      "x-go-type-skip-optional-pointer": true,
      "x-omitzero": 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
    },
    "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
    },
    "LastChangeDescription": {
      "type": "string",
      "description": "LastChangeDescription is a human-readable description of the last change. This description is copied to the new Revision when the Data is changed.",
      "x-confighub-where": {
        "dataType": "string"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "LastReleasedRevisionNum": {
      "type": "integer",
      "description": "Sequence number of the last Revision published in a Release, or for a backing Unit the last Revision its entity took. 0 if there is none.",
      "format": "int64",
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "int",
        "references": "Revision",
        "expandable": true
      },
      "x-go-type-skip-optional-pointer": true,
      "x-omitzero": true
    },
    "LinkFindings": {
      "allOf": [
        {
          "$ref": "#/$defs/LinkFindingList"
        }
      ],
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "JSON"
      }
    },
    "NeededPaths": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/AttributeValue"
      },
      "description": "Attribute paths that this Unit needs from upstream Units via NeedsProvides Links. Computed from get-needed and stored on data updates.",
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "JSON"
      },
      "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
    },
    "PathAnnotations": {
      "allOf": [
        {
          "$ref": "#/$defs/PathAnnotationList"
        }
      ],
      "description": "Annotations on locations within the Unit's configuration data, by resource and path.",
      "readOnly": true
    },
    "Permissions": {
      "allOf": [
        {
          "$ref": "#/$defs/Permissions"
        }
      ],
      "description": "Permissions to access this unit.",
      "x-confighub-where": {
        "dataType": "map[string]map[string]map[uuid]bool"
      }
    },
    "ProvidedPaths": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/AttributeInfo"
      },
      "description": "Attribute paths that this Unit provides to downstream Units via NeedsProvides Links. Computed from get-provided and stored on data updates.",
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "JSON"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "ProviderType": {
      "type": "string",
      "description": "ProviderType says whether and how the Unit is delivered. None keeps it off every Target and out of Releases, ConfigHub marks configuration ConfigHub applies to itself, and OCI or empty means it is published in its Space's Releases.",
      "x-confighub-where": {
        "dataType": "string"
      },
      "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
    },
    "TargetID": {
      "type": "string",
      "description": "TargetID is the identifier of the target this unit is associated with. This defines where the configuration will be applied. It must be set to a valid Target before the Unit can be Applied, Destroyed, Imported, or Refreshed.",
      "format": "uuid",
      "x-confighub-where": {
        "dataType": "uuid",
        "references": "Target",
        "expandable": true
      }
    },
    "ToolchainType": {
      "type": "string",
      "description": "ToolchainType specifies the type of toolchain for this unit. Possible values include \"Kubernetes/YAML\", \"AppConfig/Properties\", \"AppConfig/YAML\", \"AppConfig/TOML\", \"AppConfig/INI\", \"AppConfig/JSON\", \"AppConfig/Env\", \"AppConfig/Text\", \"ConfigHub/YAML\".",
      "x-confighub-where": {
        "dataType": "string"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "UnitID": {
      "type": "string",
      "description": "Unique identifier for a Unit.",
      "format": "uuid",
      "x-confighub-where": {
        "dataType": "uuid"
      },
      "x-go-type-skip-optional-pointer": true,
      "x-omitzero": 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
    },
    "UpstreamRevisionNum": {
      "type": "integer",
      "description": "Sequence number for the Revision of the Unit this unit was cloned from, or 0. This is updated to the upstream Unit's head revision number when the Unit is upgraded. To change this revision number, change the UpstreamLastMergedRevisionNum of the corresponding Link of UpdateType UpgradeUnit from this Unit to the upstream Unit.",
      "format": "int64",
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "int",
        "references": "Revision"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "UpstreamSpaceID": {
      "type": "string",
      "description": "Unique identifier for the Space of the Unit this unit was cloned from, if any.",
      "format": "uuid",
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "uuid",
        "references": "Space",
        "expandable": true
      }
    },
    "UpstreamUnitID": {
      "type": "string",
      "description": "Unique identifier for Unit this unit was cloned from, if any. To change or remove the upstream unit, change or delete the corresponding Link of UpdateType UpgradeUnit from this Unit to the upstream Unit.",
      "format": "uuid",
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "uuid",
        "references": "Unit",
        "expandable": true
      }
    },
    "ValidationErrors": {
      "type": "object",
      "additionalProperties": {
        "type": "boolean"
      },
      "description": "A map of \"<space slug>/<trigger slug>/<function name>\" to true of Triggers invoking validating functions that did not pass on the latest configuration data. These block Release operations.",
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "map[string]bool"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "ValidationResults": {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/$defs/ValidationResultList"
      },
      "description": "A map from gate/warning name to the list of validation results that caused the gate or warning.",
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "JSON"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "ValidationTriggerIDs": {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/$defs/UUID"
      },
      "description": "Map from each gate name in ValidationErrors and ValidationWarnings, and in the head Revision's ValidationPassed, to the ID of the Trigger that produced it. A gate no Trigger produced has no entry. The Trigger may since have been renamed, moved, or deleted, so find it by this ID rather than by the slugs in the gate name.",
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "map[string]uuid"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "ValidationWarnings": {
      "type": "object",
      "additionalProperties": {
        "type": "boolean"
      },
      "description": "A map of \"<space slug>/<trigger slug>/<function name>\" to true of Triggers with Warn=true invoking validating functions that did not pass on the latest configuration data. These do not block Release operations.",
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "map[string]bool"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "ValueTriggerIDs": {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/$defs/UUID"
      },
      "description": "Map from each key in Values to the ID of the Trigger that produced it.",
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "map[string]uuid"
      },
      "x-go-type-skip-optional-pointer": true
    },
    "Values": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      },
      "description": "Map from \"<space slug>/<trigger slug>/<attribute name>\" to the first output Value with that attribute name of the function invocation specified by the Trigger. Units not resolved since the Space slug was added have \"<trigger slug>/<attribute name>\" keys.",
      "readOnly": true,
      "x-confighub-where": {
        "dataType": "map[string]string"
      },
      "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
    }
  },
  "$defs": {
    "AttributeDetails": {
      "type": "object",
      "properties": {
        "BoundLinkID": {
          "type": "string",
          "description": "ID of the Link that bound this needed path to a provided value",
          "format": "uuid",
          "x-go-type-skip-optional-pointer": true,
          "x-omitzero": true
        },
        "BoundProvidedProperties": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "ProvidedProperties of the provided path that was bound to this needed path, for cross-link score comparison",
          "x-go-type-skip-optional-pointer": true
        },
        "DefaultValue": {
          "description": "Value a defaulting function writes at this path, if any",
          "x-go-type-skip-optional-pointer": true
        },
        "Description": {
          "type": "string",
          "description": "Description of the attribute",
          "x-go-type-skip-optional-pointer": true
        },
        "IsNeeded": {
          "type": "boolean",
          "description": "Whether this attribute is a needed value",
          "x-go-type-skip-optional-pointer": true
        },
        "IsProvided": {
          "type": "boolean",
          "description": "Whether this attribute is a provided value",
          "x-go-type-skip-optional-pointer": true
        },
        "NeededPreferred": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Preferred properties for matching; more matches produce a stronger match preference",
          "x-go-type-skip-optional-pointer": true
        },
        "NeededRequired": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Required properties that a provided value must have in order to match",
          "x-go-type-skip-optional-pointer": true
        },
        "ProvidedProperties": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Key/value properties describing what this provided value offers, for matching",
          "x-go-type-skip-optional-pointer": true
        }
      }
    },
    "AttributeInfo": {
      "type": "object",
      "properties": {
        "AttributeName": {
          "type": "string",
          "description": "Name of the registered attribute",
          "x-go-type-skip-optional-pointer": true
        },
        "DataType": {
          "type": "string",
          "description": "Data type if the attribute value.",
          "x-go-type-skip-optional-pointer": true
        },
        "Details": {
          "allOf": [
            {
              "$ref": "#/$defs/AttributeDetails"
            }
          ],
          "description": "Additional attribute details"
        },
        "Path": {
          "type": "string",
          "description": "Path of the attribute",
          "x-go-type-skip-optional-pointer": true
        },
        "ResourceCategory": {
          "type": "string",
          "description": "Category of configuration element represented in the configuration data; Kubernetes resources are of category Resource, and application configuration files are of category AppConfig",
          "x-go-type-skip-optional-pointer": true
        },
        "ResourceName": {
          "type": "string",
          "description": "Name of a resource in the system under management represented in the configuration data; Kubernetes resources are represented in the form <metadata.namespace>/<metadata.name>; not all ToolchainTypes necessarily use '/' as a separator between any scope(s) and name or other client-chosen ID",
          "x-go-type-skip-optional-pointer": true
        },
        "ResourceNameStableCore": {
          "type": "string",
          "description": "Name of a resource in the system under management represented in the configuration data with generated prefixes and suffixes stripped; empty if nothing to strip",
          "x-go-type-skip-optional-pointer": true
        },
        "ResourceNameWithoutScope": {
          "type": "string",
          "description": "Name of a resource in the system under management represented in the configuration data, without any uniquifying scope, such as Namespace, Project, Account, Region, etc.; Kubernetes resources are represented in the form <metadata.name>",
          "x-go-type-skip-optional-pointer": true
        },
        "ResourceType": {
          "type": "string",
          "description": "Type of a resource in the system under management represented in the configuration data; Kubernetes resources are represented in the form <apiVersion>/<kind> (aka group-version-kind)",
          "x-go-type-skip-optional-pointer": true
        }
      }
    },
    "AttributeValue": {
      "type": "object",
      "properties": {
        "AttributeName": {
          "type": "string",
          "description": "Name of the registered attribute",
          "x-go-type-skip-optional-pointer": true
        },
        "Comment": {
          "type": "string",
          "description": "Line comment on the attribute at the specified Path",
          "x-go-type-skip-optional-pointer": true
        },
        "DataType": {
          "type": "string",
          "description": "Data type if the attribute value.",
          "x-go-type-skip-optional-pointer": true
        },
        "Details": {
          "allOf": [
            {
              "$ref": "#/$defs/AttributeDetails"
            }
          ],
          "description": "Additional attribute details"
        },
        "FunctionName": {
          "type": "string",
          "description": "Name of the function invocation corresponding to the output",
          "x-go-type-skip-optional-pointer": true
        },
        "Index": {
          "type": "integer",
          "description": "Index of the function invocation corresponding to the output. Useful in the case that multiple function invocations in the same executor call return AttributeValueList output.",
          "x-go-type-skip-optional-pointer": true
        },
        "Issues": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Issue"
          },
          "description": "Issues found with the attribute",
          "x-go-type-skip-optional-pointer": true
        },
        "Path": {
          "type": "string",
          "description": "Path of the attribute",
          "x-go-type-skip-optional-pointer": true
        },
        "ResourceCategory": {
          "type": "string",
          "description": "Category of configuration element represented in the configuration data; Kubernetes resources are of category Resource, and application configuration files are of category AppConfig",
          "x-go-type-skip-optional-pointer": true
        },
        "ResourceName": {
          "type": "string",
          "description": "Name of a resource in the system under management represented in the configuration data; Kubernetes resources are represented in the form <metadata.namespace>/<metadata.name>; not all ToolchainTypes necessarily use '/' as a separator between any scope(s) and name or other client-chosen ID",
          "x-go-type-skip-optional-pointer": true
        },
        "ResourceNameStableCore": {
          "type": "string",
          "description": "Name of a resource in the system under management represented in the configuration data with generated prefixes and suffixes stripped; empty if nothing to strip",
          "x-go-type-skip-optional-pointer": true
        },
        "ResourceNameWithoutScope": {
          "type": "string",
          "description": "Name of a resource in the system under management represented in the configuration data, without any uniquifying scope, such as Namespace, Project, Account, Region, etc.; Kubernetes resources are represented in the form <metadata.name>",
          "x-go-type-skip-optional-pointer": true
        },
        "ResourceType": {
          "type": "string",
          "description": "Type of a resource in the system under management represented in the configuration data; Kubernetes resources are represented in the form <apiVersion>/<kind> (aka group-version-kind)",
          "x-go-type-skip-optional-pointer": true
        },
        "Score": {
          "type": "string",
          "description": "Score of finding attributed to this Path",
          "x-go-type-skip-optional-pointer": true
        },
        "Value": {
          "description": "Value of the attribute at the specified Path",
          "x-go-type-skip-optional-pointer": true
        }
      }
    },
    "AttributeValueList": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/AttributeValue"
      }
    },
    "GuardDelta": {
      "type": "object",
      "properties": {
        "Path": {
          "type": "string",
          "description": "The path whose guards changed; empty for the resource as a whole",
          "x-go-type-skip-optional-pointer": true
        },
        "Remove": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Guard keys removed",
          "x-go-type-skip-optional-pointer": true
        },
        "Set": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Guard keys added or changed, with their new values",
          "x-go-type-skip-optional-pointer": true
        }
      }
    },
    "Issue": {
      "type": "object",
      "properties": {
        "Identifier": {
          "type": "string",
          "description": "Identifier for the kind of issue found, such as a number, alphanumeric code, or policy/rule name. Use especially with validation functions that check multiple policies/rules.",
          "x-go-type-skip-optional-pointer": true
        },
        "Message": {
          "type": "string",
          "description": "A more detailed and specific explanation of the issue found",
          "x-go-type-skip-optional-pointer": true
        }
      }
    },
    "LinkFinding": {
      "type": "object",
      "properties": {
        "Details": {
          "type": "string",
          "description": "Explanation the Reason alone cannot carry, such as the error a failed resolve reported",
          "x-go-type-skip-optional-pointer": true
        },
        "Entry": {
          "type": "string",
          "description": "The Link's entry the finding is about, as its list and position, such as ManualBindings[0]",
          "x-go-type-skip-optional-pointer": true
        },
        "Key": {
          "type": "string",
          "description": "The Key of the Link's entry the finding is about, when the entry has one",
          "x-go-type-skip-optional-pointer": true
        },
        "LinkID": {
          "type": "string",
          "description": "The Link whose resolve recorded the finding",
          "format": "uuid",
          "x-go-type-skip-optional-pointer": true,
          "x-omitzero": true
        },
        "Path": {
          "type": "string",
          "description": "The path the finding is about; empty for a resource-level finding",
          "x-go-type-skip-optional-pointer": true
        },
        "Reason": {
          "type": "string",
          "description": "What the resolve could not do: NeededNotFound, ProvidedNotFound, or ResolveFailed",
          "x-go-type-skip-optional-pointer": true
        },
        "Resource": {
          "allOf": [
            {
              "$ref": "#/$defs/ResourceInfo"
            }
          ],
          "description": "The resource the finding is about, in the Unit Reason names; empty for a finding about the resolve as a whole"
        },
        "UnitID": {
          "type": "string",
          "description": "The other Unit involved: the Link's upstream Unit",
          "format": "uuid",
          "x-go-type-skip-optional-pointer": true,
          "x-omitzero": true
        }
      }
    },
    "LinkFindingList": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/LinkFinding"
      }
    },
    "MutationConflict": {
      "type": "object",
      "properties": {
        "Details": {
          "type": "string",
          "description": "Explanation the Reason alone cannot carry, such as the error text of a failed replay",
          "x-go-type-skip-optional-pointer": true
        },
        "Guard": {
          "allOf": [
            {
              "$ref": "#/$defs/WithheldGuard"
            }
          ],
          "description": "For Guarded: the guard the operation's clearance did not cover"
        },
        "GuardChange": {
          "allOf": [
            {
              "$ref": "#/$defs/GuardDelta"
            }
          ],
          "description": "For GuardWithheld: the guard change that did not propagate"
        },
        "Path": {
          "type": "string",
          "description": "Path of the mutation; empty for resource-level conflicts",
          "x-go-type-skip-optional-pointer": true
        },
        "Reason": {
          "type": "string",
          "description": "Why the mutation was dropped",
          "x-go-type-skip-optional-pointer": true
        },
        "Resource": {
          "allOf": [
            {
              "$ref": "#/$defs/ResourceInfo"
            }
          ],
          "description": "Resource the mutation applied to"
        },
        "Source": {
          "allOf": [
            {
              "$ref": "#/$defs/MutationInfo"
            }
          ],
          "description": "The dropped source-side mutation"
        }

# --- truncated at 32 KB (41 KB total) ---
# Full source: https://artifacts.apis.io/confighub/json-schema/confighub-unit-schema.json

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-unit"
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.