> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gable.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Validate a contract

> Validate a contract



## OpenAPI

````yaml /api-reference/bundled.yaml post /v0/contract/validate
openapi: 3.1.0
info:
  title: Gable API
  description: >
    API to interact with the Gable platform

    ## Authorization

    All API requests require an API key to be passed in the `X-API-KEY` header.
    For instructions on finding your API key and api endpoint check out the [API
    Key documentation](../docs/api-keys.md).

    Example: `curl -H "X-API-KEY: <your-api-key>"
    https://api-{organization}.gable.ai/v0/ping`
  contact:
    name: Gable Engineering
    url: https://gable.ai
    email: engineers@gable.ai
  version: 1.28.0
servers:
  - url: https://{hostname}.gable.ai
    description: Gable API
    variables:
      hostname:
        default: demo-api
        description: Customer environment assigned by Gable
security:
  - ApiKeyAuth: []
tags:
  - name: action
  - name: api-keys
  - name: auth
  - name: changelog
  - name: config
  - name: contract
  - name: data-asset
  - name: debug
  - name: s3
  - name: settings
  - name: slack
  - name: sso
  - name: webhook
  - name: notifications
  - name: constraints
  - name: telemetry
  - name: component
  - name: components
  - name: sca
  - name: cross-service-components
  - name: lineage
  - name: events
  - name: measurements
  - name: defect-report
  - name: experimental
paths:
  /v0/contract/validate:
    post:
      tags:
        - contract
      summary: Validate a contract
      description: Validate a contract
      operationId: validateContract
      requestBody:
        description: Contract
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostContractRequest'
      responses:
        '200':
          description: Response when validation could be completed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckResponse'
components:
  schemas:
    PostContractRequest:
      oneOf:
        - $ref: '#/components/schemas/ContractInput'
        - type: array
          items:
            $ref: '#/components/schemas/ContractInput'
    CheckResponse:
      type: object
      required:
        - success
        - message
      properties:
        message:
          type: string
        success:
          type: boolean
    ContractInput:
      type: object
      description: >-
        The metadata and schema for the Contract that is sent to Gable to be
        validated and uploaded. It may or may not contain a valid contract.
      required:
        - id
        - status
        - contractSpec
      properties:
        id:
          description: Unique identifier for the contract in UUID format
          type: string
          format: uuid
        parentRowId:
          description: Unique identifier for a contract's parent row id in UUID format
          type: string
          format: uuid
        version:
          description: Version of the contract (semantic versioning)
          type: string
        status:
          $ref: '#/components/schemas/ContractStatus'
        gitHash:
          description: >-
            full length git hash corresponding to the commit this contract was
            added/updated
          type: string
          minLength: 40
          maxLength: 40
        gitRepo:
          description: full link to the git repo this contract lives in
          type: string
          format: uri
        gitUser:
          description: git user who added this contract
          type: string
        reviewers:
          description: >-
            optional list of users who reviewed the merged PR that this contract
            added/updated in
          type: array
          items:
            type: string
        filePath:
          description: path to the contract file from the root of the git repository
          type: string
          pattern: ^([^/]+\/)*[^/]+$
        mergedAt:
          description: >-
            date time at which the PR that added/updated this contract was
            merged
          type: string
          format: date-time
        enforcementLevel:
          description: alert level for contract
          type: string
          enum:
            - RECORD
            - NOTIFY
            - ALERT
            - BLOCK
            - INACTIVE
          nullable: true
        contractSpec:
          $ref: '#/components/schemas/ContractSpec'
          description: >-
            This is the possible contract specification. If it is valid, it
            will  match the contract specification schema. However, we have to
            allow  for invalid contracts to be passed to Gable even if we reject
            them.
          additionalProperties: true
        lastEditorUserId:
          description: >-
            Unique identifier for the user who last edited the contract through
            the UI
          type: string
          format: uuid
          nullable: true
        lastEditorEmail:
          description: Email of the user who last edited the contract through the UI
          type: string
          nullable: true
        lastEditorFirstName:
          description: First name of the user who last edited the contract through the UI
          type: string
          nullable: true
        lastEditorLastName:
          description: Last name of the user who last edited the contract through the UI
          type: string
          nullable: true
        lastEditorGithubHandle:
          description: >-
            GitHub handle of the user who last edited the contract through the
            UI
          type: string
          nullable: true
    ContractStatus:
      type: string
      description: status of the contract
      enum:
        - ACTIVE
        - DEPRECATED
        - DRAFT
        - ARCHIVED
    ContractSpec:
      type: object
      required:
        - id
        - doc
        - name
        - namespace
        - owner
        - schema
      properties:
        id:
          description: Unique identifier for the contract in UUID format
          type: string
          format: uuid
        dataAssetResourceName:
          $ref: '#/components/schemas/DataAssetResourceName'
        dataAssetResourceNameList:
          type: array
          items:
            $ref: '#/components/schemas/DataAssetResourceName'
          description: >-
            Optional array of data asset resource names for contracts that apply
            to multiple specific assets. When present, this takes precedence
            over dataAssetResourceName.
        doc:
          description: Description of the contract
          type: string
        name:
          description: >-
            The name of the contract. When combined with the contract namespace,
            it represents a unique name in the Gable platform.  Only
            alphanumeric characters (upper and lowercase) and underscores are
            allowed
          type: string
        namespace:
          description: >-
            The namespace of the contract. When combined with the contract name,
            it represents a unique name in the Gable platform.  Only
            alphanumeric characters (upper and lowercase) and underscores are
            allowed
          type: string
        owner:
          description: The owner of the contract
          type: string
          format: email
        restrictPii:
          description: If true, fields that look like PII will cause contract violations.
          type: boolean
        schema:
          type: array
          items:
            $ref: '#/components/schemas/GableSchemaContractField'
    DataAssetResourceName:
      type: string
      pattern: >-
        ^(protobuf|avro|json_schema|java|postgres|mysql|mssql|snowflake|bigquery|python|pyspark|typescript|s3|dataframe|kotlin|swift|php)://(?=.*[a-zA-Z0-9])[a-zA-Z0-9_@\.:/-]+[:/](?=.*[a-zA-Z0-9])[a-zA-Z0-9
        _\./-\{\}\-]+$
      description: >-
        The unique identifier of the data asset. It follows the pattern
        '{data_asset_type}://{data_asset_source}:{data_asset_name}'
    GableSchemaContractField:
      allOf:
        - oneOf:
            - $ref: '#/components/schemas/GableSchemaStruct'
            - $ref: '#/components/schemas/GableSchemaNull'
            - $ref: '#/components/schemas/GableSchemaBool'
            - $ref: '#/components/schemas/GableSchemaInt'
            - $ref: '#/components/schemas/GableSchemaFloat'
            - $ref: '#/components/schemas/GableSchemaString'
            - $ref: '#/components/schemas/GableSchemaBytes'
            - $ref: '#/components/schemas/GableSchemaList'
            - $ref: '#/components/schemas/GableSchemaMap'
            - $ref: '#/components/schemas/GableSchemaEnum'
            - $ref: '#/components/schemas/GableSchemaUnion'
            - $ref: '#/components/schemas/GableSchemaAliasReference'
            - $ref: '#/components/schemas/GableSchemaUnknown'
        - type: object
          properties:
            name:
              type: string
            optional:
              type: boolean
        - type: object
          properties:
            constraints:
              type: object
              additionalProperties: true
    GableSchemaStruct:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - struct
        name:
          type: string
        fields:
          type: array
          items:
            $ref: '#/components/schemas/GableSchemaField'
        alias:
          type: string
          pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
        doc:
          type: string
        logical:
          type: string
    GableSchemaNull:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - 'null'
        alias:
          type: string
          pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
        doc:
          type: string
        logical:
          type: string
    GableSchemaBool:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - bool
        alias:
          type: string
          pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
        doc:
          type: string
        logical:
          type: string
    GableSchemaInt:
      type: object
      required:
        - type
        - bits
      properties:
        type:
          type: string
          enum:
            - int
        bits:
          type: integer
          minimum: 1
          maximum: 2147483647
        signed:
          type: boolean
          default: true
        alias:
          type: string
          pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
        doc:
          type: string
        logical:
          $ref: '#/components/schemas/LogicalEnumTemporal'
        unit:
          type: string
          enum:
            - year
            - month
            - day
            - hour
            - minute
            - second
            - millisecond
            - microsecond
            - nanosecond
            - picosecond
        timezone:
          type: string
    GableSchemaFloat:
      type: object
      required:
        - type
        - bits
      properties:
        type:
          type: string
          enum:
            - float
        bits:
          type: integer
          minimum: 1
          maximum: 2147483647
        alias:
          type: string
          pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
        doc:
          type: string
        logical:
          type: string
    GableSchemaString:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - string
        bytes:
          type: integer
          minimum: 1
          maximum: 9223372036854776000
        variable:
          type: boolean
          default: true
        alias:
          type: string
          pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
        doc:
          type: string
        logical:
          $ref: '#/components/schemas/LogicalEnumText'
    GableSchemaBytes:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - bytes
        bytes:
          type: integer
          minimum: 1
          maximum: 9223372036854776000
        variable:
          type: boolean
        alias:
          type: string
          pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
        doc:
          type: string
        logical:
          $ref: '#/components/schemas/LogicalEnumNumeric'
        precision:
          type: integer
          minimum: 1
          maximum: 2147483647
        scale:
          type: integer
          minimum: 0
          maximum: 2147483647
        unit:
          type: string
          enum:
            - year
            - month
            - day
            - hour
            - minute
            - second
            - millisecond
            - microsecond
            - nanosecond
            - picosecond
      if:
        properties:
          variable:
            const: false
        required:
          - variable
      then:
        required:
          - bytes
    GableSchemaList:
      type: object
      required:
        - type
        - values
      properties:
        type:
          type: string
          enum:
            - list
        values:
          $ref: '#/components/schemas/GableSchemaType'
        length:
          type: integer
          minimum: 1
          maximum: 9223372036854776000
        variable:
          type: boolean
          default: true
        alias:
          type: string
          pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
        doc:
          type: string
    GableSchemaMap:
      type: object
      required:
        - type
        - keys
        - values
      properties:
        type:
          type: string
          enum:
            - map
        keys:
          $ref: '#/components/schemas/GableSchemaType'
        values:
          $ref: '#/components/schemas/GableSchemaType'
        alias:
          type: string
          pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
        doc:
          type: string
        logical:
          type: string
    GableSchemaEnum:
      type: object
      required:
        - type
        - symbols
      properties:
        type:
          type: string
          enum:
            - enum
        symbols:
          type: array
          items:
            type: string
        alias:
          type: string
          pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
        doc:
          type: string
        logical:
          type: string
    GableSchemaUnion:
      type: object
      required:
        - type
        - types
      properties:
        type:
          type: string
          enum:
            - union
        types:
          type: array
          items:
            $ref: '#/components/schemas/GableSchemaType'
        alias:
          type: string
          pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
        doc:
          type: string
        logical:
          type: string
    GableSchemaAliasReference:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          not:
            $ref: '#/components/schemas/GableSchemaTypeName'
        doc:
          type: string
        logical:
          type: string
      additionalProperties: true
      not:
        required:
          - alias
    GableSchemaUnknown:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - unknown
        alias:
          type: string
          pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
        doc:
          type: string
        logical:
          type: string
    GableSchemaField:
      oneOf:
        - $ref: '#/components/schemas/GableSchemaFieldStruct'
        - $ref: '#/components/schemas/GableSchemaFieldNull'
        - $ref: '#/components/schemas/GableSchemaFieldBool'
        - $ref: '#/components/schemas/GableSchemaFieldInt'
        - $ref: '#/components/schemas/GableSchemaFieldFloat'
        - $ref: '#/components/schemas/GableSchemaFieldString'
        - $ref: '#/components/schemas/GableSchemaFieldBytes'
        - $ref: '#/components/schemas/GableSchemaFieldList'
        - $ref: '#/components/schemas/GableSchemaFieldMap'
        - $ref: '#/components/schemas/GableSchemaFieldEnum'
        - $ref: '#/components/schemas/GableSchemaFieldUnion'
        - $ref: '#/components/schemas/GableSchemaFieldAliasReference'
        - $ref: '#/components/schemas/GableSchemaFieldUnknown'
      discriminator:
        propertyName: type
        mapping:
          struct:
            $ref: '#/components/schemas/GableSchemaFieldStruct'
          'null':
            $ref: '#/components/schemas/GableSchemaFieldNull'
          bool:
            $ref: '#/components/schemas/GableSchemaFieldBool'
          int:
            $ref: '#/components/schemas/GableSchemaFieldInt'
          float:
            $ref: '#/components/schemas/GableSchemaFieldFloat'
          string:
            $ref: '#/components/schemas/GableSchemaFieldString'
          bytes:
            $ref: '#/components/schemas/GableSchemaFieldBytes'
          list:
            $ref: '#/components/schemas/GableSchemaFieldList'
          map:
            $ref: '#/components/schemas/GableSchemaFieldMap'
          enum:
            $ref: '#/components/schemas/GableSchemaFieldEnum'
          union:
            $ref: '#/components/schemas/GableSchemaFieldUnion'
          aliasReference:
            $ref: '#/components/schemas/GableSchemaFieldAliasReference'
          unknown:
            $ref: '#/components/schemas/GableSchemaFieldUnknown'
    LogicalEnumTemporal:
      type: string
      enum:
        - Date
        - Time
        - Duration
        - Timestamp
    LogicalEnumText:
      type: string
      enum:
        - UUID
        - org.iso.8601.Date
        - org.iso.8601.DateTime
        - org.iso.8601.Time
    LogicalEnumNumeric:
      type: string
      enum:
        - Decimal
        - Interval
    GableSchemaType:
      oneOf:
        - $ref: '#/components/schemas/GableSchemaTypeName'
        - oneOf:
            - $ref: '#/components/schemas/GableSchemaStruct'
            - $ref: '#/components/schemas/GableSchemaNull'
            - $ref: '#/components/schemas/GableSchemaBool'
            - $ref: '#/components/schemas/GableSchemaInt'
            - $ref: '#/components/schemas/GableSchemaFloat'
            - $ref: '#/components/schemas/GableSchemaString'
            - $ref: '#/components/schemas/GableSchemaBytes'
            - $ref: '#/components/schemas/GableSchemaList'
            - $ref: '#/components/schemas/GableSchemaMap'
            - $ref: '#/components/schemas/GableSchemaEnum'
            - $ref: '#/components/schemas/GableSchemaUnion'
            - $ref: '#/components/schemas/GableSchemaAliasReference'
            - $ref: '#/components/schemas/GableSchemaUnknown'
          discriminator:
            propertyName: type
            mapping:
              struct:
                $ref: '#/components/schemas/GableSchemaStruct'
              'null':
                $ref: '#/components/schemas/GableSchemaNull'
              bool:
                $ref: '#/components/schemas/GableSchemaBool'
              int:
                $ref: '#/components/schemas/GableSchemaInt'
              float:
                $ref: '#/components/schemas/GableSchemaFloat'
              string:
                $ref: '#/components/schemas/GableSchemaString'
              bytes:
                $ref: '#/components/schemas/GableSchemaBytes'
              list:
                $ref: '#/components/schemas/GableSchemaList'
              map:
                $ref: '#/components/schemas/GableSchemaMap'
              enum:
                $ref: '#/components/schemas/GableSchemaEnum'
              union:
                $ref: '#/components/schemas/GableSchemaUnion'
              aliasReference:
                $ref: '#/components/schemas/GableSchemaAliasReference'
              unknown:
                $ref: '#/components/schemas/GableSchemaUnknown'
    GableSchemaTypeName:
      type: string
      enum:
        - 'null'
        - bool
        - int
        - float
        - string
        - bytes
        - list
        - map
        - struct
        - enum
        - union
    GableSchemaFieldStruct:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - struct
        name:
          type: string
        fields:
          type: array
          items:
            $ref: '#/components/schemas/GableSchemaField'
        alias:
          type: string
          pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
        doc:
          type: string
        logical:
          type: string
        optional:
          type: boolean
    GableSchemaFieldNull:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - 'null'
        alias:
          type: string
          pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
        doc:
          type: string
        logical:
          type: string
        name:
          type: string
        optional:
          type: boolean
    GableSchemaFieldBool:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - bool
        alias:
          type: string
          pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
        doc:
          type: string
        logical:
          type: string
        name:
          type: string
        optional:
          type: boolean
    GableSchemaFieldInt:
      type: object
      required:
        - type
        - bits
      properties:
        type:
          type: string
          enum:
            - int
        bits:
          type: integer
          minimum: 1
          maximum: 2147483647
        signed:
          type: boolean
          default: true
        alias:
          type: string
          pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
        doc:
          type: string
        logical:
          $ref: '#/components/schemas/LogicalEnumTemporal'
        unit:
          type: string
          enum:
            - year
            - month
            - day
            - hour
            - minute
            - second
            - millisecond
            - microsecond
            - nanosecond
            - picosecond
        timezone:
          type: string
        name:
          type: string
        optional:
          type: boolean
    GableSchemaFieldFloat:
      type: object
      required:
        - type
        - bits
      properties:
        type:
          type: string
          enum:
            - float
        bits:
          type: integer
          minimum: 1
          maximum: 2147483647
        alias:
          type: string
          pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
        doc:
          type: string
        logical:
          type: string
        name:
          type: string
        optional:
          type: boolean
    GableSchemaFieldString:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - string
        bytes:
          type: integer
          minimum: 1
          maximum: 9223372036854776000
        variable:
          type: boolean
          default: true
        alias:
          type: string
          pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
        doc:
          type: string
        logical:
          $ref: '#/components/schemas/LogicalEnumText'
        name:
          type: string
        optional:
          type: boolean
    GableSchemaFieldBytes:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - bytes
        bytes:
          type: integer
          minimum: 1
          maximum: 9223372036854776000
        variable:
          type: boolean
        alias:
          type: string
          pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
        doc:
          type: string
        logical:
          $ref: '#/components/schemas/LogicalEnumNumeric'
        precision:
          type: integer
          minimum: 1
          maximum: 2147483647
        scale:
          type: integer
          minimum: 0
          maximum: 2147483647
        unit:
          type: string
          enum:
            - year
            - month
            - day
            - hour
            - minute
            - second
            - millisecond
            - microsecond
            - nanosecond
            - picosecond
        name:
          type: string
        optional:
          type: boolean
      if:
        properties:
          variable:
            const: false
        required:
          - variable
      then:
        required:
          - bytes
    GableSchemaFieldList:
      type: object
      required:
        - type
        - values
      properties:
        type:
          type: string
          enum:
            - list
        values:
          $ref: '#/components/schemas/GableSchemaType'
        length:
          type: integer
          minimum: 1
          maximum: 9223372036854776000
        variable:
          type: boolean
          default: true
        alias:
          type: string
          pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
        doc:
          type: string
        name:
          type: string
        optional:
          type: boolean
    GableSchemaFieldMap:
      type: object
      required:
        - type
        - keys
        - values
      properties:
        type:
          type: string
          enum:
            - map
        keys:
          $ref: '#/components/schemas/GableSchemaType'
        values:
          $ref: '#/components/schemas/GableSchemaType'
        alias:
          type: string
          pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
        doc:
          type: string
        logical:
          type: string
        name:
          type: string
        optional:
          type: boolean
    GableSchemaFieldEnum:
      type: object
      required:
        - type
        - symbols
      properties:
        type:
          type: string
          enum:
            - enum
        symbols:
          type: array
          items:
            type: string
        alias:
          type: string
          pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
        doc:
          type: string
        logical:
          type: string
        name:
          type: string
        optional:
          type: boolean
    GableSchemaFieldUnion:
      type: object
      required:
        - type
        - types
      properties:
        type:
          type: string
          enum:
            - union
        types:
          type: array
          items:
            $ref: '#/components/schemas/GableSchemaType'
        alias:
          type: string
          pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
        doc:
          type: string
        logical:
          type: string
        name:
          type: string
        optional:
          type: boolean
    GableSchemaFieldAliasReference:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          not:
            $ref: '#/components/schemas/GableSchemaTypeName'
        doc:
          type: string
        logical:
          type: string
        name:
          type: string
        optional:
          type: boolean
      additionalProperties: true
      not:
        required:
          - alias
    GableSchemaFieldUnknown:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - unknown
        alias:
          type: string
          pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
        doc:
          type: string
        logical:
          type: string
        name:
          type: string
        optional:
          type: boolean
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-KEY

````