Skip to content

Customizations

Customizations allow you to tailor Entropy Data to your organization's specific needs. You can customize data product filters, the data contract editor, the marketplace info card, and access request forms.

Customizations are configured per organization using a YAML configuration. The wording of outgoing emails is customized separately, see Email Templates.

Editing Customizations

To edit your organization's customizations:

  1. Navigate to Organization Settings (click on your organization name in the top navigation, then select "Settings")
  2. Go to the Customization page
  3. Edit the YAML configuration in the editor
  4. Save your changes

Configuration Schema

The customization configuration supports six main sections:

  • dataProduct: Customize data product filters, status values, and marketplace visibility
  • dataContract: Customize the data contract editor
  • access: Customize access request and agreement forms
  • marketplace: Customize the marketplace page
  • teams: Customize the Teams pages (e.g. team tag visibility)
  • yamlFormat: Control YAML serialization in the data contract editor

Data Product Customizations

You can customize data products by overriding standard properties, adding custom properties and custom sections, configuring custom filters, and controlling marketplace visibility.

Configurable Sections

The following sections of the data product can be customized:

SectionDescription
rootTop-level data product properties (name, status, type, domain, etc.)
descriptionODPS description sub-fields (purpose, usage, limitations)
outputPortsOutput port properties
supportSupport and communication channels (the tool selector)
teamThe team block embedded in the data product editor
team.membersThe team members block embedded in the data product editor

Every section accepts a hidden: true to hide the entire block, plus standardProperties, customProperties, and customSections.

Standard Properties

Override the behavior of built-in data product properties:

dataProduct:
  root:
    standardProperties:
      - property: "status"
        required: true
        enum:
          - value: "draft"
            label: "Draft"
            showInMarketplace: false
          - value: "active"
            label: "Active"
            showInMarketplace: true
      - property: "tenant"
        hidden: true
  description:
    standardProperties:
      - property: "purpose"
        required: true
        description: "Describe the business purpose of this data product"
PropertyTypeDescription
propertystringName of the standard property to customize (required)
titlestringOverride the display title
descriptionstringOverride the description/help text
placeholderstringPlaceholder text for the input
requiredbooleanWhether the field is required
hiddenbooleanHide the field from the form
readOnlybooleanMake the field read-only
enumarrayRestrict values to a specific list
patternstringRegex pattern for validation
patternMessagestringError message when pattern validation fails
minLengthintegerMinimum length for text fields
maxLengthintegerMaximum length for text fields
defaultanyDefault value
generationStrategystringAuto-generation strategy for the property value. Currently supported on the id property with value uuid — pre-fills a random UUID for new data products instead of leaving the field empty.

Available Standard Properties

dataProduct.root:

PropertySupports
idrequired, readOnly, title, description, placeholder, pattern, patternMessage, minLength, maxLength, generationStrategy (uuid)
namerequired, readOnly, title, description, placeholder, pattern, patternMessage, minLength, maxLength
statusrequired, readOnly, enum (with marketplace visibility and disabled conditions)
typehidden, required, readOnly, title, description, enum
domainhidden, required, readOnly, title, description
descriptionreadOnly, description, placeholder
tagshidden, readOnly, title, description
tenanthidden, required, readOnly, title, description, placeholder, pattern, patternMessage, minLength, maxLength

dataProduct.description (ODPS only):

PropertySupports
purposerequired, readOnly, description, minLength, maxLength
usagereadOnly, description, minLength, maxLength
limitationsreadOnly, description, minLength, maxLength

dataProduct.outputPorts:

PropertySupports
idrequired, readOnly, title, description, placeholder, pattern, patternMessage, minLength, maxLength
namerequired, readOnly, title, description, placeholder, pattern, patternMessage, minLength, maxLength
statusrequired, readOnly, title, description, enum
descriptionhidden, required, readOnly, title, description, placeholder, pattern, patternMessage, minLength, maxLength
typeenum (restrict the selectable server types, with optional label override)
versionhidden
environmenthidden
serverhidden (hides the entire Server card)
tagshidden

Setting hidden: true on description or tags removes that field from both the output port edit form and its details view. version, environment, and server behave the same way.

Data Product Status Enum

The status property supports extended enum formats with marketplace visibility and conditional disabling:

enum:
  - value: "draft"
    label: "Draft"
    showInMarketplace: false
  - value: "active"
    label: "Active"
    showInMarketplace: true
  - value: "deprecated"
    label: "Deprecated"
    showInMarketplace: true
    disabledCondition: "status == 'active'"
  - value: "end-of-life"
    label: "End of Life"
    showInMarketplace: false
    disabledCondition: "status == 'active' || status == 'deprecated'"
PropertyTypeDescription
valuestringThe stored value (required)
labelstringDisplay label shown in the UI
showInMarketplacebooleanWhether data products with this status appear in the marketplace
disabledConditionstringConditional expression to disable this option

When showInMarketplace is false, data products with that status are hidden from the marketplace but still visible in the data product list.

Use disabledCondition to enforce lifecycle workflows (e.g., preventing backwards status transitions). When the condition evaluates to true, the option is grayed out in the dropdown.

Output Port Type Restriction

By default, the output port type dropdown offers every server type supported by your organization. Configure an enum on the type property to restrict the dropdown to a specific set of server types. Each option's value is the server-type id; an optional label overrides the text shown in the dropdown (the stored value is always the id).

dataProduct:
  outputPorts:
    standardProperties:
      - property: "type"
        enum:
          - value: "api"
            label: "REST API"   # optional — overrides the dropdown label only
          - value: "s3"
          - value: "snowflake"

Existing output ports are never broken by this setting: an output port whose stored type is not in the list keeps its value and is shown as Other in the dropdown. The restriction only limits what can be selected for new or edited output ports.

Support Channel Tools

The Support and Communication Channels editor offers a tool for each channel (Slack, Microsoft Teams, Email, Discord, Google Chat, Ticket System, Other). Configure the tool standard property under dataProduct.support to restrict or hide it.

An enum restricts the dropdown to exactly the listed tool ids; an optional label overrides the displayed text. With no (or an empty) enum, all tools are offered.

dataProduct:
  support:
    standardProperties:
      - property: "tool"
        enum:
          - "slack"
          - value: "teams"
            label: "Microsoft Teams"   # optional label override
          - "email"

The dropdown always includes a None option so the (optional) tool can be cleared. other appears only when it is listed in the enum. An already-saved tool that is no longer in the list is preserved — ODPS support[].tool is a free-form string, so the restriction only narrows the UI.

To hide the tool selector entirely, set hidden: true:

dataProduct:
  support:
    standardProperties:
      - property: "tool"
        hidden: true

Custom Properties

Add custom properties to capture organization-specific metadata on data products. Custom properties can be defined at different section levels (root, description, team, team.members, outputPorts).

dataProduct:
  root:
    customProperties:
      - property: "riskAssessment"
        title: "Risk Assessment"
        description: "The risk assessment according to internal policies."
        type: "select"
        enum:
          - "low risk"
          - "medium risk"
          - "high risk"
      - property: "dataResidency"
        title: "Data Residency"
        description: "The region where the data is stored and processed."
        type: "select"
        enum:
          - "EU"
          - "US"
          - "APAC"
          - "Global"
          - "Other"
PropertyTypeDescription
propertystringProperty name (required)
titlestringDisplay title (required)
typestringInput type (required). See supported types below
descriptionstringHelp text for the property
requiredbooleanWhether the field is required
defaultanyDefault value
placeholderstringPlaceholder text
conditionstringConditional display expression
enumarrayOptions for select/multiselect types. Simple strings or value-label pairs (see Enum Formats)
minimumnumberMinimum value for number/integer types
maximumnumberMaximum value for number/integer types
stepnumberStep of a number input
minLengthintegerMinimum length for text fields
maxLengthintegerMaximum length for text fields
rowsintegerVisible rows of a textarea (default 3)
minItemsintegerMinimum number of rows of an array property
maxItemsintegerMaximum number of rows of an array property
patternstringRegex pattern for validation
patternMessagestringError message when pattern validation fails
hiddenbooleanHide the property from form UIs (edit form and details view) while preserving its stored YAML value untouched — useful for fields managed via API/automation. Raw-YAML editors are unaffected.
positionAfterstringName of the property this one should render after

Supported Types

TypeDescription
textSingle-line text input
textareaMulti-line text input
numberDecimal number input
integerWhole number input
selectDropdown selection (single value)
multiselectDropdown selection (multiple values)
arrayList of text values, edited as rows
yamlAny value (object, list, or scalar) edited as free-form YAML
booleanCheckbox (true/false)
dateDate picker
datetimeDate and time picker
urlURL input with validation
emailEmail input with validation

Structured Values

Most types bind a single scalar value. The yaml and array types capture structured metadata, and the value is stored with its real type in the specification's customProperties — an object stays an object, a list stays a list — rather than as quoted text:

dataProduct:
  root:
    customProperties:
      - property: "retentionConfig"
        title: "Retention Config"
        description: "Retention policy applied to this data product."
        type: "yaml"
      - property: "costCenters"
        title: "Cost Centers"
        type: "array"
        minItems: 1
        maxItems: 5
  outputPorts:
    customProperties:
      - property: "slaProperties"
        title: "SLA Properties"
        type: "yaml"

A yaml property is edited in a YAML editor with live validation, and accepts any value:

customProperties:
  - property: "retentionConfig"
    value:
      days: 365
      enabled: true
      tiers:
        - "hot"
        - "cold"

An array property is edited as a list of text rows, bounded by minItems and maxItems, and is stored as a list:

customProperties:
  - property: "costCenters"
    value:
      - "CC-1000"
      - "CC-2000"

Enum Formats (Data Products)

Options for select and multiselect can be plain strings, or value-label pairs when the stored value should differ from the label shown in the dropdown:

customProperties:
  - property: "dataResidency"
    title: "Data Residency"
    type: "select"
    enum:
      - value: "eu"
        label: "European Union"
      - value: "us"
        label: "United States"
      - "Other"          # a plain string uses the value as its label

Conditional Display

Use the condition property to show or hide fields based on other property values:

customProperties:
  - property: "retentionPeriod"
    title: "Retention Period"
    type: "text"
    condition: "status == 'active'"

Supported operators: ==, !=, &&, ||, contains, null checks.

Custom Sections

Organize custom properties into dedicated sections on the data product detail and edit pages:

dataProduct:
  root:
    customProperties:
      - property: "riskAssessment"
        title: "Risk Assessment"
        description: "The risk assessment according to internal policies."
        type: "select"
        enum:
          - "low risk"
          - "medium risk"
          - "high risk"
      - property: "dataResidency"
        title: "Data Residency"
        description: "The region where the data is stored and processed."
        type: "select"
        enum:
          - "EU"
          - "US"
          - "APAC"
          - "Global"
          - "Other"
    customSections:
      - section: "compliance"
        title: "Compliance"
        description: "Example of custom properties"
        positionAfter: "description"
        expanded: true
        customProperties:
          - "riskAssessment"
          - "dataResidency"
PropertyTypeDescription
sectionstringUnique identifier for the section (required)
titlestringDisplay title for the section (required)
descriptionstringOptional description shown below the title
positionAfterstringWhere to place the section (see positions below)
expandedbooleanWhether the section is expanded by default
customPropertiesstring[]List of custom property names to include

Section Positions

The positionAfter value controls where the section appears on the page:

ValuePlaced after
overview / fundamentalsThe overview/fundamentals card
descriptionThe description section
teamThe team section
outputPortsThe output ports section
inputPortsThe input ports section

Custom properties not assigned to any section are rendered inline within their parent card.

Custom Filters

Custom filters appear in the data product list sidebar and allow filtering by custom field values.

dataProduct:
  customFilters:
    - displayName: "Subject Area"
      customField: "subjectArea"
    - displayName: "Business Unit"
      customField: "businessUnit"
PropertyTypeRequiredDescription
displayNamestringYesThe label shown in the UI for this filter
customFieldstringYesThe name of the custom field to filter on

Data Contract Editor Customizations

You can customize the data contract editor to show, hide, or modify standard properties, add custom properties, and organize them into custom sections.

For detailed documentation on all customization options, see the Data Contract Editor Customization documentation.

Configurable Sections

The following sections of the data contract editor can be customized:

SectionDescriptionStorage Location
rootTop-level contract properties (id, version, status, etc.)customProperties
descriptionDescription section (title, description, purpose)description.customProperties
schemaSchema configurationschema[*].customProperties
schema.propertiesIndividual schema field propertiesschema[*].properties[*].customProperties
serversServer/connection configurationservers[*].customProperties
teamTeam informationteam.customProperties
team.membersTeam member detailsteam.members[*].customProperties
rolesRole definitionsroles[*].customProperties
supportSupport informationsupport[*].customProperties

Standard Properties

You can customize standard (built-in) properties of the data contract by overriding their behavior:

dataContract:
  root:
    standardProperties:
      - property: "status"
        enum:
          - "draft"
          - "active"
          - "retired"
      - property: "version"
        required: true
        pattern: "^\\d+\\.\\d+\\.\\d+$"
        patternMessage: "Version must follow semantic versioning (e.g., 1.0.0)"
  schema.properties:
    standardProperties:
      - property: "classification"
        hidden: true
  team:
    standardProperties:
      - property: "tags"
        hidden: true          # hide the team tags field

Standard-property hidden is honored per level (root, description, schema, schema.properties, servers, team, team.members, roles, support). For the full list of properties available at each level, see the Data Contract Editor Customization documentation.

PropertyTypeDescription
propertystringName of the standard property to customize (required)
titlestringOverride the display title
descriptionstringOverride the description/help text
placeholderstringPlaceholder text for the input
requiredbooleanWhether the field is required
hiddenbooleanHide the field from the editor
enumstring[] or value/label[]Restrict values to a specific list. Accepts plain strings or value/label objects (see Enum Formats)
patternstringRegex pattern for validation
patternMessagestringError message when pattern validation fails
defaultanyDefault value for new contracts
generationStrategystringAuto-generation strategy for the property value. Currently supported on the id property of dataContract.root with value uuid — pre-fills a random UUID for new data contracts instead of using a name-derived slug or leaving the field empty.

Restricting Server Types

By default, the server type dropdown in the data contract editor offers every server type supported by your organization. Configure an enum on the type property of the servers section to restrict it to a specific set. Each option's value is the server-type id; an optional label overrides the dropdown text (the stored value is always the id).

dataContract:
  servers:
    standardProperties:
      - property: "type"
        enum:
          - value: "snowflake"
            label: "Snowflake (EU)"   # optional — overrides the dropdown label only
          - value: "databricks"

Server types already used by a contract stay selectable, so existing servers are never lost when the restriction is applied — the restriction only limits the choices for new servers.

Custom Properties

Add custom properties to capture organization-specific metadata:

dataContract:
  root:
    customProperties:
      - property: "legalEntity"
        title: "Legal Entity"
        description: "This is an example for a custom property"
        type: "text"
      - property: "retentionConfig"
        title: "Retention Config"
        description: "A structured object value, edited as free-form YAML"
        type: "yaml"
      - property: "contacts"
        title: "Contacts"
        description: "A list of objects, edited as free-form YAML"
        type: "yaml"
  schema.properties:
    customProperties:
      - property: "businessCriticality"
        title: "Business Criticality"
        type: "select"
        enum:
          - "low"
          - "medium"
          - "high"
          - "critical"
      - property: "businessImpact"
        title: "Business Impact"
        type: "textarea"
        description: "Impact if data is unavailable, inaccurate, or delayed (financial, operational, legal, reputational)"
        placeholder: "e.g., Revenue loss of $10k/hour if unavailable"
        condition: "team.name == 'sales-team'"
PropertyTypeDescription
propertystringProperty path, typically prefixed with custom. (required)
titlestringDisplay title for the property (required)
typestringInput type (required). See supported types below
descriptionstringHelp text for the property
requiredbooleanWhether the field is required
defaultanyDefault value
placeholderstringPlaceholder text
conditionstringConditional display expression
enumstring[]Options for select/multiselect types
minimumnumberMinimum value for number/integer types
maximumnumberMaximum value for number/integer types
minLengthintegerMinimum length for text fields
maxLengthintegerMaximum length for text fields
patternstringRegex pattern for validation
patternMessagestringError message when pattern validation fails
hiddenbooleanHide the property from form UIs while preserving its stored YAML value untouched (raw-YAML editors are unaffected)
positionAfterstringRender this property inline after a named anchor (see Inline Positioning)

Supported Types

TypeDescription
textSingle-line text input
textareaMulti-line text input
numberDecimal number input
integerWhole number input
selectDropdown selection (single value)
multiselectDropdown selection (multiple values)
arrayArray of text values
yamlAny value (object, list, or scalar) edited as free-form YAML
booleanCheckbox (true/false)
dateDate picker
datetimeDate and time picker
urlURL input with validation
emailEmail input with validation

Inline Positioning

By default, custom properties render grouped below the standard sections. Use positionAfter to place a property inline, right after a named anchor — either a standard property at the same level, or another custom property:

dataContract:
  schema.properties:
    customProperties:
      - property: "ownerEmail"
        title: "Owner Email"
        type: "email"
        positionAfter: "physicalName"   # renders between Physical Name and Logical Type
      - property: "preImmuta"
        title: "Pre-Immuta Security Policy"
        type: "text"
        positionAfter: "classification" # renders between Classification and Critical Data Element

Currently honored at the schema.properties level (the property detail drawer). At other levels, custom properties with positionAfter render in their default location at the bottom.

Supported anchors in schema.properties: name, businessName, physicalName, logicalType, physicalType, description, examples, classification, criticalDataElement, encryptedName, tags, transformSourceObjects, transformLogic, transformDescription — plus any other custom property name at the same level.

Enum Formats

Enums can be defined as simple strings or as value-label pairs for more control over display:

Simple strings:

enum:
  - "public"
  - "internal"
  - "confidential"

Value-label pairs:

enum:
  - value: "pub"
    label: "Public"
  - value: "int"
    label: "Internal"
  - value: "conf"
    label: "Confidential"

Conditional Display

Use the condition property to show or hide fields based on other property values:

customProperties:
  - property: "custom.retentionPeriod"
    title: "Retention Period"
    type: "text"
    condition: "status == 'active'"

Condition syntax:

  • Reference root properties directly: status == 'active'
  • Reference other levels with prefix: schema.type, schema.properties.piiCategory
  • Supported operators: ==, !=, &&, ||
  • Array checks: tags contains 'gdpr'
  • Null checks: tenant != null

Custom Sections

Organize custom properties into dedicated sections in the editor:

dataContract:
  schema.properties:
    customProperties:
      - property: "businessCriticality"
        title: "Business Criticality"
        type: "select"
        enum:
          - "low"
          - "medium"
          - "high"
          - "critical"
      - property: "businessImpact"
        title: "Business Impact"
        type: "textarea"
        description: "Impact if data is unavailable, inaccurate, or delayed"
        condition: "team.name == 'sales-team'"
    customSections:
      - section: "business-criticality"
        title: "Business Criticality"
        positionAfter: "classificationAndSecurity"
        expanded: true
        customProperties:
          - "businessCriticality"
          - "businessImpact"
PropertyTypeDescription
sectionstringUnique identifier for the section (required)
titlestringDisplay title for the section (required)
descriptionstringOptional description shown below the title
positionAfterstringPlace this section after a named section (see Section Positions). Currently only honored at schema.properties.
expandedbooleanWhether the section is expanded by default
customPropertiesstring[]List of custom property names to include in this section

Section Positions (Data Contract Editor)

At the schema.properties level, positionAfter accepts these section identifiers (the custom section is rendered as a sibling right after the named section):

ValuePlaced after
metadataThe Metadata section
semanticsThe Semantics section
logicalTypeOptionsThe Logical Type Options section
constraintsThe Constraints section
classificationAndSecurityThe Classification & Security section
transformationsThe Transformations section
dataQualityThe Data Quality section
authoritativeDefinitionsThe Authoritative Definitions section
relationshipsThe Relationships section

Sections without positionAfter render in a group below the standard sections.

Note: positionAfter on customSections anchors to section IDs, not to field names. To place a custom property inline between standard fields, use positionAfter on customProperties instead.

The customProperties list must reference property names defined under the same level. Names must match exactly — if a reference can't be resolved, the section is skipped and a warning is logged to the browser console ([Customization] customSection "..." references unknown customProperties: ...). Open the browser developer tools to diagnose.

Access Customizations

You can customize access request and agreement forms by overriding standard properties, adding custom properties, and organizing them into custom sections. This replaces the need for hardcoded per-customer template overrides.

Custom properties defined in the access section are stored as custom fields on the access agreement and are visible on the request access form, the agreement detail page, and the edit form.

Configuration Structure

The access configuration has two sub-sections:

SectionDescription
rootDefines standard property overrides, custom properties, and custom sections for the edit form and details view
requestAccessControls which custom properties appear on the request access form. References properties defined in root.customProperties by name

If requestAccess is omitted, all custom properties from root are shown on the request access form.

Standard Properties

Override the behavior of built-in access agreement properties:

access:
  root:
    standardProperties:
      - property: "purpose"
        required: true
        title: "Business Purpose"
        description: "Why do you need access to this data?"
      - property: "individualAgreements"
        hidden: true
PropertySupports
purposerequired, title, description, placeholder, hidden
individualAgreementsrequired, title, description, placeholder, hidden
startDaterequired, title, description, hidden
endDaterequired, title, description, hidden
nextReassessmentDaterequired, title, description, hidden

Custom Properties

Add custom properties to capture additional information during access requests:

access:
  root:
    customProperties:
      - property: "consumerEnvironment"
        title: "Consumer Environment"
        type: "select"
        required: true
        enum:
          - "DEV"
          - "TEST"
          - "INT"
          - "PROD"
      - property: "awsPrincipalRoleArn"
        title: "AWS Principal Role ARN"
        type: "text"
        required: true
        description: "AWS Principal / Role ARN for S3 access"
      - property: "gcpServiceAccount"
        title: "GCP Service Account"
        type: "text"
        description: "Service account email for BigQuery access"

Custom properties support the same types and options as data product custom properties. See the Supported Types section above.

Custom Sections

Organize custom properties into dedicated sections on the agreement detail and edit pages:

access:
  root:
    customProperties:
      - property: "consumerEnvironment"
        title: "Consumer Environment"
        type: "select"
        required: true
        enum:
          - "DEV"
          - "TEST"
          - "INT"
          - "PROD"
      - property: "awsPrincipalRoleArn"
        title: "AWS Principal Role ARN"
        type: "text"
        required: true
        description: "AWS Principal / Role ARN for S3 access"
    customSections:
      - section: "infrastructure"
        title: "Infrastructure"
        description: "Technical details for provisioning access"
        customProperties:
          - "consumerEnvironment"
          - "awsPrincipalRoleArn"

Filtering Request Access Properties

By default, all custom properties defined in root are shown on the request access form. Use requestAccess.customProperties to show only a subset:

access:
  root:
    customProperties:
      - property: "consumerEnvironment"
        title: "Consumer Environment"
        type: "select"
        required: true
        enum:
          - "DEV"
          - "TEST"
          - "INT"
          - "PROD"
      - property: "awsPrincipalRoleArn"
        title: "AWS Principal Role ARN"
        type: "text"
        required: true
      - property: "internalNotes"
        title: "Internal Notes"
        type: "textarea"
  requestAccess:
    customProperties:
      - "consumerEnvironment"
      - "awsPrincipalRoleArn"

In this example, consumerEnvironment and awsPrincipalRoleArn appear on the request access form, while internalNotes is only visible on the edit form and detail page.

Marketplace Customizations

Customize the info card displayed on the marketplace page to provide organization-specific guidance.

marketplace:
  infoCard:
    headline: "Our Data Catalog"
    text: "Welcome to our internal data catalog. Find and request access to data products."
    linkText: "Learn More"
    linkUrl: "https://wiki.example.com/data-catalog"
PropertyTypeDescription
headlinestringHeadline text for the info card
textstringDescription text explaining the marketplace
linkTextstringText for the call-to-action link button
linkUrlstringURL for the link button (must be a valid URL)

Teams Customizations

Customize the standalone Teams pages (list, detail, edit, and the tag filter).

teams:
  tags:
    hidden: false
PropertyTypeDescription
tags.hiddenbooleanWhether the team tags field is hidden across the Teams pages. Defaults to true — team tags are hidden for every organization unless you explicitly set teams.tags.hidden: false. Only UI surfaces are gated (list column, row badges, detail block, edit input, and the tag filter); the underlying tag data and backend tag filtering are unaffected.

YAML Format Customizations

Control how the data contract editor serializes YAML.

yamlFormat:
  removeTrailingWhitespace: true
  addFinalNewline: true
PropertyTypeDescription
removeTrailingWhitespacebooleanStrip trailing whitespace from each line in the serialized YAML
addFinalNewlinebooleanEnsure the YAML file ends with a final newline

Complete Example

Here is a complete example combining all customization options:

dataProduct:
  root:
    standardProperties:
      - property: "status"
        required: true
        enum:
          - value: "draft"
            label: "Draft"
            showInMarketplace: false
          - value: "active"
            label: "Active"
            showInMarketplace: true
          - value: "deprecated"
            label: "Deprecated"
            showInMarketplace: true
            disabledCondition: "status == 'active'"
          - value: "retired"
            label: "Retired"
            showInMarketplace: false
            disabledCondition: "status == 'active' || status == 'deprecated'"
      - property: "tenant"
        hidden: true
    customProperties:
      - property: "riskAssessment"
        title: "Risk Assessment"
        description: "The risk assessment according to internal policies."
        type: "select"
        enum:
          - "low risk"
          - "medium risk"
          - "high risk"
      - property: "dataResidency"
        title: "Data Residency"
        description: "The region where the data is stored and processed."
        type: "select"
        enum:
          - "EU"
          - "US"
          - "APAC"
          - "Global"
          - "Other"
    customSections:
      - section: "compliance"
        title: "Compliance"
        description: "Example of custom properties"
        positionAfter: "description"
        expanded: true
        customProperties:
          - "riskAssessment"
          - "dataResidency"
  description:
    standardProperties:
      - property: "purpose"
        required: true
  outputPorts:
    standardProperties:
      - property: "status"
        enum:
          - "active"
          - "deprecated"
          - "retired"
      - property: "type"
        enum:
          - value: "api"
            label: "REST API"
          - value: "s3"
          - value: "snowflake"

dataContract:
  root:
    customProperties:
      - property: "legalEntity"
        title: "Legal Entity"
        description: "This is an example for a custom property"
        type: "text"
  servers:
    standardProperties:
      - property: "type"
        enum:
          - value: "snowflake"
            label: "Snowflake (EU)"
          - value: "databricks"
  schema.properties:
    customProperties:
      - property: "businessCriticality"
        title: "Business Criticality"
        type: "select"
        enum:
          - "low"
          - "medium"
          - "high"
          - "critical"
      - property: "businessImpact"
        title: "Business Impact"
        type: "textarea"
        description: "Impact if data is unavailable, inaccurate, or delayed (financial, operational, legal, reputational)"
        placeholder: "e.g., Revenue loss of $10k/hour if unavailable"
        condition: "team.name == 'sales-team'"
    customSections:
      - section: "business-criticality"
        title: "Business Criticality"
        customProperties:
          - "businessCriticality"
          - "businessImpact"

access:
  root:
    standardProperties:
      - property: "purpose"
        required: true
        title: "Business Purpose"
    customProperties:
      - property: "consumerEnvironment"
        title: "Consumer Environment"
        type: "select"
        required: true
        enum:
          - "DEV"
          - "TEST"
          - "INT"
          - "PROD"
      - property: "awsPrincipalRoleArn"
        title: "AWS Principal Role ARN"
        type: "text"
        required: true
        description: "AWS Principal / Role ARN for S3 access"
    customSections:
      - section: "infrastructure"
        title: "Infrastructure"
        customProperties:
          - "consumerEnvironment"
          - "awsPrincipalRoleArn"
  requestAccess:
    customProperties:
      - "consumerEnvironment"

marketplace:
  infoCard:
    headline: "Data Marketplace"
    text: "Discover and request access to data products across the organization."
    linkText: "Documentation"
    linkUrl: "https://docs.example.com/data-catalog"