> ## 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.

# Get all components

> Get all components



## OpenAPI

````yaml /api-reference/bundled.yaml get /v0/cross-service-components
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/cross-service-components:
    get:
      tags:
        - cross-service-components
      summary: Get all components
      description: Get all components
      operationId: getCrossServiceComponents
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrossServiceComponentsResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    CrossServiceComponentsResponse:
      type: object
      description: The response for the cross service components.
      properties:
        components:
          type: array
          items:
            $ref: '#/components/schemas/CrossServiceComponent'
        edge_mappings:
          type: array
          items:
            $ref: '#/components/schemas/EdgeMapping'
      required:
        - components
        - edge_mappings
    ErrorResponse:
      type: object
      required:
        - message
      properties:
        id:
          type: number
        title:
          type: string
        message:
          type: string
    CrossServiceComponent:
      type: object
      description: The component for the cross service components.
      oneOf:
        - $ref: '#/components/schemas/CodeComponent'
        - $ref: '#/components/schemas/DataStoreComponent'
      discriminator:
        propertyName: type
        mapping:
          CODE:
            $ref: '#/components/schemas/CodeComponent'
          DATA_STORE:
            $ref: '#/components/schemas/DataStoreComponent'
    EdgeMapping:
      type: object
      description: The edge mapping for the cross service components.
      properties:
        id:
          type: string
          description: The id of the edge.
        crossServiceFieldMappings:
          type: array
          description: The field mappings for the cross service components.
          items:
            type: object
            properties:
              sourceField:
                type: string
              destinationField:
                type: string
            required:
              - sourceField
              - destinationField
        source:
          type: object
          description: The source of the edge.
          properties:
            componentId:
              type: string
              description: The id of the component.
            sourceComponentName:
              type: string
              description: The name of the source component.
            egressId:
              type: string
              description: The id of the source egress.
            payloadName:
              type: string
              description: The payload name of the source egress.
            type:
              type: string
              description: The type of the source connection.
              example: egress
          required:
            - sourceComponentName
            - type
        destination:
          type: object
          description: The destination of the edge.
          properties:
            componentId:
              type: string
              description: The id of the component.
            destinationComponentName:
              type: string
              description: The name of the destination component.
            ingressId:
              type: string
              description: The id of the destination ingress.
            payloadName:
              type: string
              description: The payload name of the destination ingress.
            type:
              type: string
              description: The type of the destination connection.
              example: ingress
          required:
            - destinationComponentName
            - type
        type:
          type: string
          const: EDGE
      required:
        - id
        - crossServiceFieldMappings
        - source
        - destination
        - type
    CodeComponent:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier for the component.
        runId:
          type: string
          description: The ID of the run that the component belongs to
        name:
          type: string
          description: The name of the component.
        ingresses:
          description: The ingresses associated with the component.
          type: array
          items:
            $ref: '#/components/schemas/Ingress'
        egresses:
          description: The egresses associated with the component.
          type: array
          items:
            $ref: '#/components/schemas/Egress'
        paths:
          description: The paths associated with the component.
          type: array
          items:
            $ref: '#/components/schemas/Path'
        friendly_name:
          type: string
          description: Optional user-defined friendly name for the component.
        type:
          type: string
          description: The type of the component.
          const: CODE
        metadata:
          allOf:
            - $ref: '#/components/schemas/StaticAnalysisCodeMetadata'
            - type: object
              properties:
                extras:
                  type: object
                  description: Additional metadata for the code component.
                  additionalProperties:
                    type: string
        collectionMechanism:
          type: string
          description: The mechanism used to collect data for this component (SCA or BYOL).
          enum:
            - SCA
            - BYOL
      required:
        - id
        - type
        - runId
        - name
        - ingresses
        - egresses
        - paths
        - metadata
    DataStoreComponent:
      type: object
      description: The data store component for the cross service components.
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier for the component.
        runId:
          type: string
          description: The ID of the run that the component belongs to.
        friendly_name:
          type: string
          description: Optional user-defined friendly name for the component.
        type:
          type: string
          description: The type of the component.
          const: DATA_STORE
        metadata:
          allOf:
            - $ref: '#/components/schemas/StaticAnalysisCodeMetadata'
            - type: object
              properties:
                type:
                  type: string
                  description: The type of the data store.
                name:
                  type: string
                  description: The name of the data store.
                extras:
                  type: object
                  description: Additional metadata for the data store.
                  additionalProperties: {}
        schema:
          type: object
          properties:
            fields:
              type: array
              items:
                type: object
                properties:
                  name:
                    type: string
                  type:
                    type: string
                required:
                  - name
                  - type
          required:
            - fields
        collectionMechanism:
          type: string
          description: The mechanism used to collect data for this component (SCA or BYOL).
          enum:
            - SCA
            - BYOL
      required:
        - id
        - type
        - metadata
        - schema
    Ingress:
      allOf:
        - $ref: '#/components/schemas/DataFlowBoundary'
    Egress:
      allOf:
        - $ref: '#/components/schemas/DataFlowBoundary'
    Path:
      type: object
      properties:
        pathId:
          type: string
          format: uuid
          description: >-
            Unique identifier for this path. Generated as a UUID v4 when the
            path is first created.
        ingress:
          type: object
          properties:
            id:
              type: string
              format: uuid
              description: The unique identifier of the ingress where the path starts.
            codeAnchorId:
              type: string
              format: uuid
              description: >-
                The unique identifier of the code anchor node where the path
                starts (optional for BYOL imports).
            description:
              type: string
              description: An AI-generated summary of the ingress point.
          required:
            - id
        egress:
          type: object
          properties:
            id:
              type: string
              format: uuid
              description: The unique identifier of the egress where the path ends.
            codeAnchorId:
              type: string
              format: uuid
              description: >-
                The unique identifier of the code anchor node where the path
                starts (optional for BYOL imports).
            description:
              type: string
              description: An AI-generated summary of the egress point.
          required:
            - id
        codeAnchors:
          type: array
          items:
            $ref: '#/components/schemas/CodeAnchor'
          description: A list of node IDs that are part of this path.
        fieldMappings:
          description: >-
            A list of field mappings that describe how fields are mapped along
            the path.
          type: array
          items:
            type: object
            properties:
              ingressField:
                type: string
                description: The name of the ingress field in the mapping.
              egressField:
                type: string
                description: The name of the egress field in the mapping.
              notes:
                type: string
                description: Additional notes about the field mapping.
              kind:
                $ref: '#/components/schemas/FieldMappingKind'
              fieldDataFlowPath:
                type: array
                description: The field data flow path that represents this mapping
                items:
                  $ref: '#/components/schemas/CodeAnchor'
            required:
              - ingressField
              - egressField
        transformationSummary:
          type: string
          description: >-
            An AI-generated summary of the data transformation that occurs along
            this path.
        transformationSummaryDetailed:
          type: string
          description: >-
            A detailed AI-generated summary of the data transformation that
            occurs along this path.
        payloadName:
          type: string
          description: The name of the payload for the path between ingress and egress.
        friendlyPayloadName:
          type: string
          description: user dictated name for the payload
        completeness:
          $ref: '#/components/schemas/Completeness'
          description: Completeness indicators for a ground truth path
        pathType:
          $ref: '#/components/schemas/PathType'
        isSuppressed:
          type: boolean
          default: false
        pathNotes:
          type: string
          description: user added notes about the suppression/un-suppression
        suppressedAt:
          type: object
          properties:
            timestamp:
              type: string
              format: date-time
            versionId:
              type: string
          description: only set if is_suppressed
      required:
        - ingress
        - egress
        - codeAnchors
        - fieldMappings
    StaticAnalysisCodeMetadata:
      type: object
      description: Metadata about the code that is being analyzed
      additionalProperties: true
      required:
        - repo_uri
        - repo_branch
        - repo_commit
        - project_root
      properties:
        repo_uri:
          type: string
          description: URI of the code repository
        repo_ui_url:
          type: string
          description: URL of the code repository UI (e.g. GitHub URL)
        repo_branch:
          type: string
          description: Branch of the code repository
        repo_commit:
          type: string
          description: Commit hash of the code
        project_root:
          type: string
          description: Root directory targeted by the static analysis tool
        external_component_id:
          type: string
          description: ID of the external component that was analyzed
        repo_name:
          type: string
          description: Name of the code repository
        event_repo:
          type: string
          description: Name of the repository from the GitHub event
        job_trigger:
          type: string
          enum:
            - MERGE_TO_MAIN
            - PULL_REQUEST_COMMENT
            - PULL_REQUEST_CREATED
            - PULL_REQUEST_UPDATED
            - MANUAL
            - UNKNOWN
          description: Type of the GitHub event
        repo_commit_timestamp:
          type: string
          description: Timestamp of the commit
        is_default_branch:
          type: boolean
          description: Whether this is the default branch of the code repository
        namespace:
          type: string
          description: Namespace of the customer (e.g. dev, qa, prod)
        docker_image_version:
          type: string
          description: Version of the Docker image used
        has_uncommitted_changes:
          type: boolean
          description: Whether there are uncommitted changes in the code repository
        operating_system:
          type: string
          description: Operating system of the machine that ran the static analysis tool
        sca_config_version:
          type: string
          description: Version (git SHA) of the SCA configuration files used
        scan_duration_ms:
          type: integer
          format: int64
          description: >-
            Total elapsed time, in milliseconds, spent running the Gable scan
            command for this component
        raw_payload_size_bytes:
          type: integer
          format: int64
          description: Size, in bytes, of the raw scan payload generated before upload
        upload_duration_ms:
          type: integer
          format: int64
          description: >-
            Total elapsed time, in milliseconds, spent processing the SCA
            results upload
        pr_base_branch:
          type: object
          properties:
            branch:
              type: string
              description: Base branch of the pull request
            commit:
              type: string
              description: Commit hash of the base branch
          description: Base branch of the pull request, if this was run from a pull request
        pr_number:
          type: integer
          description: Number of the pull request
        gable_cli_version:
          type: string
          description: Version of the Gable CLI used for this run
        sca_prime_version:
          type: string
          description: Version of the SCA Prime binary used for this run
        dependencies:
          type: array
          items:
            $ref: '#/components/schemas/StaticAnalysisDependencyMetadata'
          description: Dependencies of the code repository
    DataFlowBoundary:
      type: object
      properties:
        id:
          description: The unique identifier for the ingress/egress.
          type: string
          format: uuid
        kind:
          description: The kind of the ingress/egress.
          type: string
        signatureName:
          description: >-
            The name of the package, class, or method that the ingress/egress
            point is associated with.
          type: string
        payloadName:
          description: The name of the ingress/egress node.
          type: string
        friendly_name:
          description: Optional user-defined friendly name for the ingress/egress.
          type: string
        schema:
          $ref: '#/components/schemas/GableSchemaStruct'
          description: The schema of the ingress/egress.
      required:
        - id
        - kind
        - schema
    CodeAnchor:
      type: object
      properties:
        anchorId:
          type: string
          description: Unique identifier for the anchor.
        name:
          type: string
          description: Human readable name of the code anchor.
        codeUri:
          $ref: '#/components/schemas/CodeURI'
        url:
          type: string
          description: URL to the code anchor.
      required:
        - anchorId
        - name
        - codeUri
    FieldMappingKind:
      type: string
      description: >
        How a field mapping participates in the path.

        - DataFlow: the ingress field's value flows into the egress field
        (default).

        - KeyValueBridge: the mapping bridges a key/value pair rather than
        copying a single value.

        - ControlFlow: the ingress field influences whether/how the egress field
        is produced, but is not its value.

        When absent, treat as DataFlow.
      enum:
        - DataFlow
        - KeyValueBridge
        - ControlFlow
    Completeness:
      type: object
      properties:
        ingress:
          $ref: '#/components/schemas/CompletenessClassification'
          description: >-
            The completeness of non-schema ingress elements (name, signature,
            code anchor, etc.).
        ingress_schema:
          $ref: '#/components/schemas/CompletenessClassification'
          description: The completeness of the ingress's field schema.
        egress:
          $ref: '#/components/schemas/CompletenessClassification'
          description: >-
            The completeness of non-schema egress elements (name, signature,
            code anchor, etc.).
        egress_schema:
          $ref: '#/components/schemas/CompletenessClassification'
          description: The completeness of the egress's field schema.
        field_mappings:
          $ref: '#/components/schemas/CompletenessClassification'
          description: The completeness of the field mappings.
      required:
        - ingress
        - ingress_schema
        - egress
        - egress_schema
        - field_mappings
    PathType:
      type: string
      description: >-
        Indicates how a path was created - either from a scan or via user
        override.
      enum:
        - SCAN_OUTPUT
        - USER_OVERRIDE
    StaticAnalysisDependencyMetadata:
      type: object
      description: Metadata about a dependency of the code repository
      properties:
        repo_name:
          type: string
          description: Name of the dependency repository
        commit_sha:
          type: string
          description: Associated commit hash of the dependency repository
        commit_timestamp:
          type: string
          description: Timestamp of the commit
    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
    CodeURI:
      type: object
      description: >-
        Code URI is a unique identifier for a code location. It is used to
        identify the code location in the codebase.
      properties:
        file:
          type: string
          description: Relative file path in the repo.
        lineStart:
          type: integer
        lineEnd:
          type: integer
        columnStart:
          type: integer
        columnEnd:
          type: integer
      required:
        - file
        - lineStart
        - columnStart
    CompletenessClassification:
      type: string
      description: A completeness classification of a ground truth element.
      enum:
        - UNKNOWN
        - KNOWN_INCOMPLETE
        - KNOWN_COMPLETE
    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'
    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
    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
    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
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-KEY

````