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

# List a component's multi-hop upstream and downstream dependencies.

> EXPERIMENTAL. Walk connected strand edges from every enabled field mapping of one component, upstream from each ingress field and downstream from each egress field, up to `maxHops` hops, and return every component, payload and field reached as flat hop records. Only the components within `maxHops` edges of the start component are evaluated, each at its latest scan. A single walk that would cross a composition contract limit is dropped and reported through `truncated` instead of failing the read.



## OpenAPI

````yaml /api-reference/bundled.yaml get /v0/experimental/component/{id}/discriminator_dependencies
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.54.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: debug
  - name: settings
  - name: slack
  - name: sso
  - name: webhook
  - name: notifications
  - name: telemetry
  - name: component
  - name: components
  - name: sca
  - name: cross-service-components
  - name: lineage
  - name: events
  - name: measurements
  - name: defect-report
  - name: data-tagging
    description: Tag vocabulary management and field level tagging of lineage boundaries.
paths:
  /v0/experimental/component/{id}/discriminator_dependencies:
    get:
      tags:
        - lineage
      summary: List a component's multi-hop upstream and downstream dependencies.
      description: >-
        EXPERIMENTAL. Walk connected strand edges from every enabled field
        mapping of one component, upstream from each ingress field and
        downstream from each egress field, up to `maxHops` hops, and return
        every component, payload and field reached as flat hop records. Only the
        components within `maxHops` edges of the start component are evaluated,
        each at its latest scan. A single walk that would cross a composition
        contract limit is dropped and reported through `truncated` instead of
        failing the read.
      operationId: getExperimentalComponentDiscriminatorDependencies
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            format: uuid
          description: UUID of the component the walks start on.
        - in: query
          name: maxHops
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 5
            default: 5
          description: How many edges to follow from the component in each direction.
      responses:
        '200':
          description: Every dependency reached within the hop budget.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DiscriminatorDependenciesResponse'
        '400':
          description: Bad Request (maxHops outside 1..5)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Component not found / not authorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    DiscriminatorDependenciesResponse:
      type: object
      description: >-
        A component's cross-service dependencies within a hop budget, as flat
        hop records. Consumers fold the records themselves: group by
        `componentId` for a per-component summary (nearest hop, distinct
        fields), by `startGroupId` for the dependencies of one payload group,
        and filter by `hops` for a tighter radius without another read.
      properties:
        componentId:
          type: string
          format: uuid
        maxHops:
          type: integer
          description: The hop budget the walks ran with.
        truncated:
          type: boolean
          description: >-
            At least one field's walk crossed a composition contract limit and
            was dropped, so the lists are incomplete for that field.
        upstream:
          type: array
          description: >-
            Every payload field the component's ingress fields come from,
            nearest hop first.
          items:
            $ref: '#/components/schemas/DiscriminatorDependencyHop'
        downstream:
          type: array
          description: >-
            Every payload field the component's egress fields flow to, nearest
            hop first.
          items:
            $ref: '#/components/schemas/DiscriminatorDependencyHop'
      required:
        - componentId
        - maxHops
        - truncated
        - upstream
        - downstream
      additionalProperties: false
    ErrorResponse:
      type: object
      required:
        - message
      properties:
        id:
          type: number
        title:
          type: string
        message:
          type: string
    DiscriminatorDependencyHop:
      type: object
      description: >-
        One field reached on another component by walking `hops` connected
        strand edges from one of the start component's field-mapping rows.
        Display fields are render-only identity; `payload` is the reached
        payload's address, copied verbatim from the edge register, and is the
        only value to write back.
      properties:
        hops:
          type: integer
          minimum: 1
          description: How many edges the walk followed to reach this field.
        componentId:
          type: string
          format: uuid
          description: The component reached.
        componentName:
          type: string
        componentType:
          description: >-
            The reached component's kind, or null when its registry record was
            not readable at projection time.
          anyOf:
            - type: string
              enum:
                - CODE
                - DATA_STORE
            - type: 'null'
        payload:
          $ref: '#/components/schemas/DiscriminatorGroupAddress'
        groupId:
          description: >-
            The field-mapping group the walk landed on, or null when it landed
            on a data store field or on no field at all (`matched: false`).
          anyOf:
            - type: string
            - type: 'null'
        matched:
          type: boolean
          description: >-
            Whether the translated field joined a field on the reached
            component. False when the edge's mapping names a field the component
            does not expose on that side: the component is still reached, and
            the chain ends there.
        fieldPath:
          type: string
          description: The field reached, canonical dot-separated form.
        edgeId:
          type: string
          format: uuid
          description: The edge whose crossing reached this field.
        suppressed:
          type: boolean
          description: The landed group or its payload is suppressed on its component.
        startGroupId:
          type: string
          description: The start component's payload group the walk began from.
        startFieldPath:
          type: string
          description: >-
            The start component's field the walk began from: an ingress field
            when walking upstream, an egress field when walking downstream.
      required:
        - hops
        - componentId
        - componentName
        - componentType
        - payload
        - groupId
        - matched
        - fieldPath
        - edgeId
        - suppressed
        - startGroupId
        - startFieldPath
      additionalProperties: false
    DiscriminatorGroupAddress:
      type: object
      description: The metadata coordinates for a discriminator group
      properties:
        componentId:
          type: string
          format: uuid
          description: The component this group lives on. Must equal the route component.
        level:
          $ref: '#/components/schemas/DiscriminatorLevel'
        ancestors:
          type: array
          description: >-
            Root-to-immediate-parent ancestor chain. Empty for a `payload`;
            exactly one `payload` entry for a `field_mapping`. Every ancestor
            carries the same component and config identity as this wrapper.
          items:
            $ref: '#/components/schemas/DiscriminatorGroupAncestor'
        coordinates:
          $ref: '#/components/schemas/DiscriminatorGroupCoordinates'
      required:
        - componentId
        - level
        - ancestors
        - coordinates
      additionalProperties: false
    DiscriminatorLevel:
      type: string
      description: >-
        A level in the product_canonical group hierarchy. `payload` is the root
        level; `field_mapping` is its child. The group_by dimensions for each
        level are defined by the config, not enumerated by this API (see
        DiscriminatorGroupCoordinates).
      enum:
        - payload
        - field_mapping
    DiscriminatorGroupAncestor:
      type: object
      description: >-
        One ancestor group in a canonical address chain. Ancestors are ordered
        root-to-immediate-parent: a `field_mapping` carries its `payload`, and a
        `payload` carries none. The chain's depth and each level's coordinate
        dimensions are the discriminator config's, not this API's — copy an
        ancestor's coordinates verbatim rather than rebuilding them. The service
        derives the parent chain from these coordinates; clients never supply an
        authoritative parent group ID.
      properties:
        level:
          $ref: '#/components/schemas/DiscriminatorLevel'
        coordinates:
          $ref: '#/components/schemas/DiscriminatorGroupCoordinates'
      required:
        - level
        - coordinates
      additionalProperties: false
    DiscriminatorGroupCoordinates:
      type: object
      description: >-
        Discriminator-group coordinates — the durable address of a group, as
        key-value pairs of the facts the group is grouped by. Keys are the
        discriminator config's group_by dimensions for the group's level,
        verbatim; the dimension vocabulary is defined by the config, not by this
        API. Values are the exact grouping facts; null is the engine's null
        coordinate (fact unknown). Edges and BYO metadata attach to lineage by
        these coordinates, never by group ID (group IDs are derived from
        coordinates by the discriminator engine and are only stable within one
        discriminator config).
      additionalProperties:
        description: >-
          A grouping fact. The engine's coordinate value algebra: null, boolean,
          integer, string, or array of strings.
        anyOf:
          - type: 'null'
          - type: boolean
          - type: integer
          - type: string
          - type: array
            items:
              type: string
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-KEY

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.