Foundational · Schema

AppGraphNeighborsResponse

Upstream/downstream neighbors of one app-graph entity (design 11 §3.3): ACCESS edges uniformly for every entity kind (read = incoming, write = outgoing, ADR-226d3631), plus the TRIGGERS control arm for Operations (incoming upstream, outgoing downstream).

CompanyData GovernanceAIData ManagementLineage

Properties

Name Type Description
entity object The focal entity itself, projected as a canvas card (FOU-15252). For an Operation this carries its own `ports` and `port_flow_edges` — the neighbour and trigger arms only ever hydrate the *opposite* e
upstream array
downstream array
upstreamTotal integer Total upstream (incoming ACCESS + incoming TRIGGERS) neighbours across all pages. Page with offset/page_size until you have seen this many (FOU-14755).
downstreamTotal integer Total downstream (outgoing ACCESS + outgoing TRIGGERS) neighbours across all pages.
View JSON Schema on GitHub

JSON Schema

foundational-app-graph-neighbors-response-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/foundational/json-schema/foundational-app-graph-neighbors-response-schema.json",
  "title": "AppGraphNeighborsResponse",
  "description": "Upstream/downstream neighbors of one app-graph entity (design 11 §3.3): ACCESS edges\nuniformly for every entity kind (read = incoming, write = outgoing, ADR-226d3631), plus the\nTRIGGERS control arm for Operations (incoming upstream, outgoing downstream).",
  "x-generated": "2026-10-29",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/foundational-openapi.json#/components/schemas/AppGraphNeighborsResponse",
  "properties": {
    "entity": {
      "anyOf": [
        {
          "$ref": "#/$defs/APIOperationEntity"
        },
        {
          "$ref": "#/$defs/APICarrierEntity"
        },
        {
          "oneOf": [
            {
              "$ref": "#/$defs/TableEntity"
            },
            {
              "$ref": "#/$defs/DashboardEntity"
            },
            {
              "$ref": "#/$defs/FileEntity"
            },
            {
              "$ref": "#/$defs/ExecutedQueryEntity"
            },
            {
              "$ref": "#/$defs/SalesforceResourceEntity"
            },
            {
              "$ref": "#/$defs/SpreadsheetEntity"
            },
            {
              "$ref": "#/$defs/WebResourceEntity"
            },
            {
              "$ref": "#/$defs/PowerPlatformDataflowEntity"
            },
            {
              "$ref": "#/$defs/StreamEntity"
            },
            {
              "$ref": "#/$defs/WarehouseTaskEntity"
            },
            {
              "$ref": "#/$defs/DataShareEntity"
            }
          ]
        },
        {
          "$ref": "#/$defs/BaseEntity"
        },
        {
          "type": "null"
        }
      ],
      "title": "Entity",
      "description": "The focal entity itself, projected as a canvas card (FOU-15252). For an Operation this carries its own `ports` and `port_flow_edges` — the neighbour and trigger arms only ever hydrate the *opposite* end of a relationship, so without this the entity the user clicked renders portless. `None` only when the focal entity has no renderable app-layer projection."
    },
    "upstream": {
      "items": {
        "$ref": "#/$defs/AppGraphNeighborView"
      },
      "type": "array",
      "title": "Upstream"
    },
    "downstream": {
      "items": {
        "$ref": "#/$defs/AppGraphNeighborView"
      },
      "type": "array",
      "title": "Downstream"
    },
    "upstreamTotal": {
      "type": "integer",
      "title": "Upstreamtotal",
      "description": "Total upstream (incoming ACCESS + incoming TRIGGERS) neighbours across all pages. Page with offset/page_size until you have seen this many (FOU-14755).",
      "default": 0
    },
    "downstreamTotal": {
      "type": "integer",
      "title": "Downstreamtotal",
      "description": "Total downstream (outgoing ACCESS + outgoing TRIGGERS) neighbours across all pages.",
      "default": 0
    }
  },
  "type": "object",
  "required": [
    "upstream",
    "downstream"
  ],
  "$defs": {
    "APICarrierEntity": {
      "properties": {
        "id": {
          "type": "string",
          "title": "Id"
        },
        "certification": {
          "anyOf": [
            {
              "$ref": "#/$defs/APICertification"
            },
            {
              "type": "null"
            }
          ],
          "description": "The certification of the entity: the one set on the entity itself, else the one on its nearest ancestor (see `ancestors`) that has one"
        },
        "certificationInheritedFrom": {
          "anyOf": [
            {
              "$ref": "#/$defs/APILocationRef"
            },
            {
              "type": "null"
            }
          ],
          "description": "The ancestor `certification` is inherited from; null when the certification is the entity's own or it has none"
        },
        "entityType": {
          "type": "string",
          "const": "CARRIER",
          "title": "Entitytype",
          "default": "CARRIER"
        },
        "ancestors": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/APILocationRef"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "title": "Ancestors",
          "description": "The locations the entity sits in, outermost first: its containers (account, database, schema, ...) and, for a column, its table. The entity inherits the certification and the custom tags set on them, unless it has its own."
        },
        "family": {
          "type": "string",
          "title": "Family",
          "description": "CarrierKey.Family name, e.g. TOPIC, GLUE_JOB, DAG_ID"
        },
        "namespace": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Namespace"
        },
        "address": {
          "type": "string",
          "title": "Address"
        },
        "selector": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Selector"
        },
        "displayName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Displayname"
        },
        "breadcrumbs": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "title": "Breadcrumbs",
          "description": "The containers this entity sits in, outermost first — an Informatica operation's `[repo_schema, folder]`, an Airflow task's `[dag_id]` (ADR-5f80bba8). The app-layer counterpart of a dataset's `db › schema` descriptor, and empty whenever the entity genuinely has no hierarchy (an Airflow DAG's namespace is unset), which the frontend renders as an icon-only row rather than a placeholder. Excludes the platform, which every surface already renders as an icon."
        },
        "matchStatus": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "matched",
                "producer_only",
                "consumer_only"
              ]
            },
            {
              "type": "null"
            }
          ],
          "title": "Matchstatus",
          "description": "Resolution state derived from the carrier's incoming edges: matched (has both a producer and a consumer), producer_only, or consumer_only (design 11 §5.1). None when it was not resolved against the graph."
        }
      },
      "type": "object",
      "required": [
        "id",
        "family",
        "address"
      ],
      "title": "APICarrierEntity",
      "description": "The API projection of a ``Carrier`` entity (design 01 §4). See :class:`APIOperationEntity`\nfor the construction-path rationale."
    },
    "APICertification": {
      "type": "string",
      "enum": [
        "certified",
        "deprecated"
      ],
      "title": "APICertification"
    },
    "APIColumnEntitySlim": {
      "properties": {
        "id": {
          "type": "string",
          "title": "Id"
        },
        "entityId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Entityid",
          "description": "The column's own entity id: the id lineage walks and diff entries name it by. `id` addresses it in this API."
        },
        "name": {
          "type": "string",
          "title": "Name",
          "description": "The name of the column"
        },
        "columnType": {
          "anyOf": [
            {
              "$ref": "#/$defs/ColumnType"
            },
            {
              "type": "null"
            }
          ],
          "description": "The type of the column"
        },
        "parentId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Parentid",
          "description": "The immediate owning Port or parent Field"
        },
        "certification": {
          "anyOf": [
            {
              "$ref": "#/$defs/APICertification"
            },
            {
              "type": "null"
            }
          ],
          "description": "The certification of the column: the one set on the column itself, else the one on its nearest ancestor (its table, then its containers) that has one"
        },
        "certificationInheritedFrom": {
          "anyOf": [
            {
              "$ref": "#/$defs/APILocationRef"
            },
            {
              "type": "null"
            }
          ],
          "description": "The ancestor `certification` is inherited from; null when the certification is the column's own or it has none"
        },
        "labels": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "title": "Labels",
          "description": "The column's labels, embedded with `labels`: the tags scans found on it and the custom tags in effect on it, its own and, per tag name it has none of, its nearest ancestor's. A tag with several values joins them with ', '."
        },
        "owners": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/PublicEntityOwner"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "title": "Owners",
          "description": "The column's owners, embedded with `owners`: its own and every ancestor's, each user once."
        }
      },
      "type": "object",
      "required": [
        "id",
        "name"
      ],
      "title": "APIColumnEntitySlim"
    },
    "APIEntityType": {
      "type": "string",
      "enum": [
        "TABLE",
        "DASHBOARD",
        "FILE",
        "STREAM",
        "WAREHOUSE_TASK",
        "SALESFORCE_RESOURCE",
        "SPREADSHEET",
        "WEB_RESOURCE",
        "POWER_PLATFORM_DATAFLOW",
        "EXECUTED_QUERY",
        "COLUMN",
        "DASHBOARD_COLUMN",
        "FILE_COLUMN",
        "STREAM_COLUMN",
        "WAREHOUSE_TASK_COLUMN",
        "SALESFORCE_RESOURCE_COLUMN",
        "SPREADSHEET_COLUMN",
        "WEB_RESOURCE_COLUMN",
        "POWER_PLATFORM_DATAFLOW_COLUMN",
        "EXECUTED_QUERY_COLUMN",
        "OPERATION",
        "PORT",
        "CARRIER",
        "UNKNOWN"
      ],
      "title": "APIEntityType",
      "description": "Enum for the types of entities that can be returned in the lineage response"
    },
    "APILastRun": {
      "properties": {
        "outcome": {
          "$ref": "#/$defs/RunOutcome"
        },
        "status": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Status",
          "description": "The status exactly as the connector served it"
        },
        "startedAt": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Startedat",
          "description": "When the run started, as served"
        },
        "finishedAt": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Finishedat",
          "description": "When the run finished, as served"
        },
        "durationSeconds": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Durationseconds"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Error",
          "description": "The run's error message, when it failed with one"
        }
      },
      "type": "object",
      "required": [
        "outcome"
      ],
      "title": "APILastRun",
      "description": "The latest run a connector reported for an Operation (or one of its placements)."
    },
    "APILocationRef": {
      "properties": {
        "locationId": {
          "type": "string",
          "title": "Locationid",
          "description": "The location's id. The certification and tag endpoints take it as `entity_id`, so a value set on a container applies to everything under it."
        },
        "level": {
          "type": "string",
          "title": "Level",
          "description": "A container's level, such as `account`, `db` or `schema`, or an entity's type, such as `table`"
        },
        "name": {
          "type": "string",
          "title": "Name",
          "description": "The container's or entity's name"
        }
      },
      "type": "object",
      "required": [
        "locationId",
        "level",
        "name"
      ],
      "title": "APILocationRef",
      "description": "A location a certification or custom tags can be set on: a container (an account, a database, a schema,\na BI project or folder, ...) or an entity."
    },
    "APIOperationEntity": {
      "properties": {
        "id": {
          "type": "string",
          "title": "Id"
        },
        "certification": {
          "anyOf": [
            {
              "$ref": "#/$defs/APICertification"
            },
            {
              "type": "null"
            }
          ],
          "description": "The certification of the entity: the one set on the entity itself, else the one on its nearest ancestor (see `ancestors`) that has one"
        },
        "certificationInheritedFrom": {
          "anyOf": [
            {
              "$ref": "#/$defs/APILocationRef"
            },
            {
              "type": "null"
            }
          ],
          "description": "The ancestor `certification` is inherited from; null when the certification is the entity's own or it has none"
        },
        "entityType": {
          "type": "string",
          "const": "OPERATION",
          "title": "Entitytype",
          "default": "OPERATION"
        },
        "ancestors": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/APILocationRef"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "title": "Ancestors",
          "description": "The locations the entity sits in, outermost first: its containers (account, database, schema, ...) and, for a column, its table. The entity inherits the certification and the custom tags set on them, unless it has its own."
        },
        "kind": {
          "type": "string",
          "title": "Kind",
          "description": "OperationKind name, e.g. TASK, DAG, FUNCTION"
        },
        "platform": {
          "type": "string",
          "title": "Platform",
          "description": "Operation.Platform name, e.g. AIRFLOW"
        },
        "executionMode": {
          "type": "string",
          "title": "Executionmode",
          "description": "ExecutionMode name: BATCH or CONTINUOUS"
        },
        "name": {
          "type": "string",
          "title": "Name"
        },
        "displayName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Displayname"
        },
        "namespace": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Namespace"
        },
        "configParams": {
          "items": {
            "$ref": "#/$defs/APIParamBinding"
          },
          "type": "array",
          "title": "Configparams"
        },
        "parentId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Parentid",
          "description": "Containment parent entity id (e.g. a TASK's DAG), when this operation is contained in exactly one container; the frontend derives containment child ids from it (design 11 §6.1, ADR-96f314e8/ADR-215f2779). Since ADR-85e440ea an Operation is minted per definition, so containment is carried by `placements`: this field is the single-container convenience projection and is None for a definition reused across containers — read `placements` for the general case."
        },
        "placements": {
          "items": {
            "$ref": "#/$defs/APIPlacement"
          },
          "type": "array",
          "title": "Placements",
          "description": "Every container this operation is placed in, with that placement's own run history (ADR-85e440ea). A definition reused across N containers has N entries; the per-placement facts live here rather than in `config_params`, which would otherwise hold N nameless copies of each."
        },
        "runSummary": {
          "anyOf": [
            {
              "$ref": "#/$defs/APIRunSummary"
            },
            {
              "type": "null"
            }
          ],
          "description": "The operation's runs, typed: as its first placement with run params reports them, else as its own `config_params` do. None when nothing reports a run fact. A placement's own runs are on `placements[].run_summary`"
        },
        "templateMultiplicity": {
          "anyOf": [
            {
              "$ref": "#/$defs/APITemplateMultiplicity"
            },
            {
              "type": "null"
            }
          ],
          "description": "The ×N template marker (F5), present only for a template fan-out operation"
        },
        "fusesWithEntityId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Fuseswithentityid",
          "description": "The id of the single table this operation 1:1-fuses with (a MODEL that writes exactly one table whose only producer is this operation, design 10 §4.1); the frontend collapses the model↔table pair into one fused card. None when the operation is not fusable."
        },
        "ports": {
          "items": {
            "$ref": "#/$defs/APIPortEntity"
          },
          "type": "array",
          "title": "Ports",
          "description": "The operation's ports — its grouped PARAM/PAYLOAD inputs and RETURN outputs (design 01 §3, ADR-96f314e8), rendered as column-like rows on the operation card. Graph-derived, so populated only when this operation is served as a canvas card (neighbors / triggers); empty on the pure proto projection (provenance / search rows)."
        },
        "portFlowEdges": {
          "items": {
            "$ref": "#/$defs/PortFlowEdgeView"
          },
          "type": "array",
          "title": "Portflowedges",
          "description": "The PORT_FLOW edges (port→port arg/return data flow, ADR-96f314e8) incident to this operation's ports, with their per-caller ParamBindings. Same graph-derived, card-only population as `ports`."
        },
        "breadcrumbs": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "title": "Breadcrumbs",
          "description": "The containers this entity sits in, outermost first — an Informatica operation's `[repo_schema, folder]`, an Airflow task's `[dag_id]` (ADR-5f80bba8). The app-layer counterpart of a dataset's `db › schema` descriptor, and empty whenever the entity genuinely has no hierarchy (an Airflow DAG's namespace is unset), which the frontend renders as an icon-only row rather than a placeholder. Excludes the platform, which every surface already renders as an icon."
        },
        "portColumnFlowEdges": {
          "items": {
            "$ref": "#/$defs/PortColumnFlowEdgeView"
          },
          "type": "array",
          "title": "Portcolumnflowedges",
          "description": "The column-granular PORT_FLOW edges (ADR-2c23c57d) incident to this operation's port fields — the arm whose far end is a dataset column rather than another operation's port, which makes this operation a visible hop in column lineage. Same graph-derived, card-only population as `ports`."
        }
      },
      "type": "object",
      "required": [
        "id",
        "kind",
        "platform",
        "executionMode",
        "name"
      ],
      "title": "APIOperationEntity",
      "description": "The API projection of an ``Operation`` entity (design 01 §2, design 11 §6.1).\n\nConstructed directly from the proto ``Entity`` via :func:`api_operation_entity_from_proto`\n— never through ``from_entity_type``/``api_entity_from_entity`` (ADR-3c1fad53:\napp-graph entities have no dataset-document representation and are served by their own surface)."
    },
    "APIParamBinding": {
      "properties": {
        "name": {
          "type": "string",
          "title": "Name"
        },
        "kind": {
          "type": "string",
          "title": "Kind"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Value",
          "description": "The resolved value, when resolvable"
        },
        "valueSource": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Valuesource",
          "description": "How value was obtained: literal, config:<key>, env:<VAR>, arg:<caller_port>, ..."
        }
      },
      "type": "object",
      "required": [
        "name",
        "kind"
      ],
      "title": "APIParamBinding",
      "description": "The API projection of ``ParamBinding`` (design 01 §3.1)."
    },
    "APIPlacement": {
      "properties": {
        "containerId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Containerid",
          "description": "The containing DAG/workflow operation's entity id"
        },
        "instanceKey": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Instancekey",
          "description": "Platform-native placement id (Informatica OPB_TASK_INST.INSTANCE_ID, an Airflow task_id). Unique only within its container, so never an identity on its own."
        },
        "displayName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Displayname",
          "description": "The name this placement carries when it differs from the definition's name"
        },
        "runParams": {
          "items": {
            "$ref": "#/$defs/APIParamBinding"
          },
          "type": "array",
          "title": "Runparams",
          "description": "This placement's own run history (last_run_*, row counts)"
        },
        "runSummary": {
          "anyOf": [
            {
              "$ref": "#/$defs/APIRunSummary"
            },
            {
              "type": "null"
            }
          ],
          "description": "This placement's runs, typed: its `run_params` read over the operation's `config_params`. None when the placement serves no run params"
        }
      },
      "type": "object",
      "title": "APIPlacement",
      "description": "One occurrence of an Operation inside a container (ADR-85e440ea).\n\nSince an Operation is minted per definition, \"which container is this in\" and \"how did its last\nrun go\" are per-placement facts: a session reused by three workflows has three placements, each\nwith its own outcome. ``run_params`` reuses the ``config_params`` binding shape and names, so the\ninspector's prefix grouping applies to it unchanged."
    },
    "APIPortCoverageGap": {
      "properties": {
        "gap": {
          "type": "string",
          "title": "Gap"
        },
        "valuePath": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "title": "Valuepath"
        },
        "callSiteKey": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Callsitekey"
        },
        "runId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Runid"
        }
      },
      "type": "object",
      "required": [
        "gap"
      ],
      "title": "APIPortCoverageGap",
      "description": "One retained unsupported-evidence observation for a Port."
    },
    "APIPortEntity": {
      "properties": {
        "id": {
          "type": "string",
          "title": "Id"
        },
        "certification": {
          "anyOf": [
            {
              "$ref": "#/$defs/APICertification"
            },
            {
              "type": "null"
            }
          ],
          "description": "The certification of the entity: the one set on the entity itself, else the one on its nearest ancestor (see `ancestors`) that has one"
        },
        "certificationInheritedFrom": {
          "anyOf": [
            {
              "$ref": "#/$defs/APILocationRef"
            },
            {
              "type": "null"
            }
          ],
          "description": "The ancestor `certification` is inherited from; null when the certification is the entity's own or it has none"
        },
        "entityType": {
          "type": "string",
          "const": "PORT",
          "title": "Entitytype",
          "default": "PORT"
        },
        "ancestors": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/APILocationRef"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "title": "Ancestors",
          "description": "The locations the entity sits in, outermost first: its containers (account, database, schema, ...) and, for a column, its table. The entity inherits the certification and the custom tags set on them, unless it has its own."
        },
        "name": {
          "type": "string",
          "title": "Name",
          "description": "The port's identifier within its Operation. Identity-bearing, and not necessarily the name of whatever sits on the other end of its edge (ADR-d121cc23)"
        },
        "displayName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Displayname",
          "description": "The port's human label, when it differs from `name` — an Informatica port is keyed by its widget instance but labelled with the dataset it moves. Cosmetic; render this and fall back to `name`"
        },
        "kind": {
          "type": "string",
          "title": "Kind",
          "description": "PortKind name: PARAM, RETURN, or PAYLOAD"
        },
        "index": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Index",
          "description": "Positional ordinal for positional args (mirrors Column.index)"
        },
        "parentId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Parentid",
          "description": "The containing Operation's entity id (ADR-96f314e8)"
        },
        "children": {
          "items": {
            "$ref": "#/$defs/APIColumnEntitySlim"
          },
          "type": "array",
          "title": "Children",
          "description": "The port's field children (design 01 §3), shown in the inspector"
        },
        "fieldsTruncated": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "title": "Fieldstruncated",
          "description": "True when `children` is only a bounded partial projection of the Port's stored Field tree. False means field hydration completed; omitted means this endpoint did not hydrate Fields."
        },
        "breadcrumbs": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "title": "Breadcrumbs",
          "description": "The containers this port sits in, outermost first, ENDING IN ITS OWNING OPERATION's name — unlike `APIOperationEntity.breadcrumbs`, which ends at that operation's containers. A port is rendered as a row of its own in search, where the operation is the crumb that tells two same-named ports apart (FOU-16141). Empty when the owning operation has no location, which the clients render as an icon-only row."
        },
        "coverageGaps": {
          "items": {
            "$ref": "#/$defs/APIPortCoverageGap"
          },
          "type": "array",
          "title": "Coveragegaps",
          "description": "Machine-readable reasons why finer-grained flow could not safely be materialized"
        }
      },
      "type": "object",
      "required": [
        "id",
        "name",
        "kind"
      ],
      "title": "APIPortEntity",
      "description": "The API projection of a ``Port`` entity (design 01 §3, ADR-96f314e8) — a parameter or return of\nan Operation, child of it via ``parent_id``. Its field children reuse the slim column projection\n(ADR-96f314e8: a port's fields are Column subtypes). See :class:`APIOperationEntity` for the\nconstruction-path rationale (never through ``from_entity_type``)."
    },
    "APIPortFlowEvidence": {
      "properties": {
        "callSiteKey": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Callsitekey"
        },
        "conditionExpr": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Conditionexpr"
        }
      },
      "type": "object",
      "title": "APIPortFlowEvidence",
      "description": "Paired call-site and predicate evidence for one collapsed PORT_FLOW contribution."
    },
    "APIRunSummary": {
      "properties": {
        "lastRun": {
          "anyOf": [
            {
              "$ref": "#/$defs/APILastRun"
            },
            {
              "type": "null"
            }
          ]
        },
        "runCount": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Runcount",
          "description": "How many runs the connector counted"
        },
        "runCountWindowDays": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Runcountwindowdays",
          "description": "`run_count` covers the last this many days, when it is a windowed count"
        },
        "runCountSince": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Runcountsince",
   

# --- truncated at 32 KB (128 KB total) ---
# Full source: https://artifacts.apis.io/foundational/json-schema/foundational-app-graph-neighbors-response-schema.json

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/foundational-app-graph-neighbors-response"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.