Skip to main content
id
string
required
key
string
required

Stable reference handle; used as @config:key in values

name
string
required
dateCreated
string<date-time>
required
dateUpdated
string<date-time>
required
owner
string

The userId of the owner (or raw owner name/email for legacy records)

ownerEmail
string

The email address of the owner, when the owner can be resolved to a known user.

parent
string

The key of the config this one inherits from (lineage parent — the primary spine). Synthesized into $extends at resolution time and never stored in value.

extends
string[]

Additional composition bases (config keys) layered on top of parent, in precedence order (later overrides earlier; all override parent; this config's own keys win last). Like parent, set via this field — never via a @config: entry in value.

value
object

This config's own base value as a JSON object (its declared fields only — inherited fields are layered in at resolution time, not stored here). Per-environment/project variants are expressed via scopedOverrides, not here.

scopedOverrides
object[]

Ordered, first-match-wins environment/project-scoped variant selection. Each entry points at a flavor config (a child config, by key) whose value is deep-merged onto this config's resolved value when the (environment, project) scope matches — resolved at build time, per layer. This is how you create an environment-scoped override (as opposed to a plain child config): make a child config for the override value, then add it here with its scope. Send the complete list to replace it; an empty array clears all overrides. Entries must reference existing configs, may not reference this config itself, and may not be unreachable (fully subsumed by an earlier entry).

scopedConfig
object

Present ONLY when this config is an environment/project-scoped override (a "flavor") of another config. Its value is a patch that applies solely within the listed environments/projects, layered onto parent at resolution — it is NOT a standalone config. A plain config (including an ordinary child that just inherits from a parent) omits this field entirely. Read-only: create/change the relationship via the parent config's scopedOverrides, never by setting this directly.

description
string
Maximum string length: 10000
project
string

The project this config belongs to (empty = all projects)

archived
boolean
schema
object

This config's own field definitions as a JSON Schema document (its contribution to the family's effective schema). Inherited fields are owned by ancestors and are not repeated here.

extensible
boolean

Whether this config family permits extra keys beyond the declared fields (child configs, feature rules, ad-hoc overrides). Only the root config's flag applies. Absent = inherit the org default.

invariants
object[]

Cross-field validation rules (relational checks JSON Schema can't express, e.g. implications or comparing two fields), evaluated against the resolved value at publish.

locked
boolean

Whether this Config is locked to a published revision. Drafts can still be created and edited while locked, but no change can be published until a user with Bypass draft approvals access unlocks it.

experimentGuard
boolean

Whether the experiment guard is enabled. When enabled, publishing a value used by a running experiment returns a warning that must be acknowledged with ignoreWarnings: true. Disabling the guard requires Bypass draft approvals access.

lockedRevision
object

The pinned published revision (present only when locked). Fetch it via GET /configs-revisions/:key/:version for a value guaranteed not to disappear or mutate — use it to pin reproducible builds.

lockedBy
string

Id of the user who locked the config (when locked).

dateLocked
string<date-time>

When the config was locked (when locked).