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).
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. |
JSON Schema
{
"$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.
Call it yourself
curl for this page
curl "https://apis.io/api/v1/json-schemas/foundational-app-graph-neighbors-response"
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.