MCP 服务器

GraphOS MCP Server

io.github.apollographql/graphos-mcp-server
开发者工具 知识与文档 公开且可连接 MCP 2025-11-25

此 MCP 可以做什么

Searches Apollo documentation and inspects GraphOS graph variants, launches, schemas, lint results, operations, clients, and subgraph metrics.

ApolloConnectorsSpec
Returns the Apollo Connectors specification for guidance on creating or modifying GraphQL schemas that use @connect or @source.
只读 幂等
输入模式
{'type': 'object', 'properties': {}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'required': ['connectorTools'], 'properties': {'connectorTools': {'type': 'object', 'required': ['spec'], 'properties': {'spec': {'type': 'string', 'description': 'A specification for Apollo Connectors'}}, 'description': 'Fields that back Connector-related MCP tools'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}}
ApolloDocsRead
Reads an Apollo documentation page by slug in chunks. Use slugs returned by ApolloDocsSearch.
只读 幂等
输入模式
{'type': 'object', 'required': ['slug', 'chunkIndex'], 'properties': {'slug': {'type': 'string', 'description': 'The slug returned from the ApolloDocsSearch tool'}, 'chunkIndex': {'type': 'integer', 'description': 'The character index to start reading from, will return up to the next 10000 characters'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'required': ['documentation'], 'properties': {'documentation': {'type': 'object', 'properties': {'page': {'anyOf': [{'type': 'object', 'required': ['url', 'slug', 'contentSlice'], 'properties': {'url': {'type': 'string', 'description': 'The full URL of the documentation page'}, 'slug': {'type': 'string', 'description': 'Unique slug identifier for the page'}, 'contentSlice': {'type': 'object', 'required': ['content', 'index', 'totalCount'], 'properties': {'index': {'type': 'integer', 'description': 'The index of the section'}, 'content': {'type': 'string', 'description': 'The content of the section'}, 'totalCount': {'type': 'integer', 'description': 'Total number of sections available'}}, 'description': 'The content of the page, optionally sliced based on input parameters'}}}, {'type': 'null'}], 'description': 'Retrieve a specific documentation page by its slug'}}, 'description': 'Access documentation pages and search functionality'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}}
ApolloDocsSearch
Searches official Apollo documentation for GraphQL, GraphOS, Apollo Router, Apollo Client, MCP Server, schema design, deployment, and Connectors. Returns URLs, slugs, and excerpts.
只读 幂等
输入模式
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'string', 'description': 'Use terms that would lead to broad result with a maximum of 2 keywords.'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'required': ['documentation'], 'properties': {'documentation': {'type': 'object', 'required': ['search'], 'properties': {'search': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'firstFiveHundredCharacters'], 'properties': {'slug': {'type': 'string', 'description': 'Unique slug identifier for the page'}, 'firstFiveHundredCharacters': {'type': 'object', 'required': ['content'], 'properties': {'content': {'type': 'string', 'description': 'The content of the section'}}, 'description': 'The content of the page, optionally sliced based on input parameters'}}}, 'description': 'Search for documentation pages matching the query'}}, 'description': 'Access documentation pages and search functionality'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}}
DeleteGraph
Delete a graph, the same write that `rover graph delete` performs. This is a soft delete: the data is not removed permanently and Apollo support can restore the graph. Every variant of the graph stops serving, so confirm the graph ID with the user before you call this. Returns null on success. Provide the graph ID.
可能执行破坏性操作
输入模式
{'type': 'object', 'required': ['graphId'], 'properties': {'graphId': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'properties': {'delete': {'anyOf': [{'description': 'Always null'}, {'type': 'null'}], 'description': 'Soft delete a graph. Data associated with the graph is not permanently deleted; Apollo support can undo.'}}}, {'type': 'null'}], 'description': 'Provides access to mutation fields for modifying a Studio graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}}
DeleteSubgraph
Remove a subgraph from a variant and start composition, the same write that `rover subgraph delete` performs. Returns the composition errors that the removal causes. This deletes the subgraph from the variant and can break the running router. Set dryRun to true first: the response then reports the composition result that the removal would produce, including updatedGateway, and deletes nothing. Provide the graph ID, the variant name, and the subgraph name.
可能执行破坏性操作
输入模式
{'type': 'object', 'required': ['graphId', 'variant', 'subgraphName'], 'properties': {'dryRun': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'default': False, 'description': 'Do not remove the service, but recompose without it and report any errors.'}, 'graphId': {'type': 'string'}, 'variant': {'type': 'string'}, 'subgraphName': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'required': ['removeImplementingServiceAndTriggerComposition'], 'properties': {'removeImplementingServiceAndTriggerComposition': {'type': 'object', 'required': ['updatedGateway', 'errors'], 'properties': {'errors': {'type': 'array', 'items': {'anyOf': [{'type': 'object', 'required': ['message', 'locations'], 'properties': {'code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'A machine-readable error code.'}, 'message': {'type': 'string', 'description': 'A human-readable message describing the error.'}, 'locations': {'type': 'array', 'items': {'anyOf': [{'type': 'object', 'required': ['line', 'column'], 'properties': {'line': {'type': 'integer', 'description': 'Line number.'}, 'column': {'type': 'integer', 'description': 'Column number.'}}}, {'type': 'null'}]}, 'description': 'Source locations related to the error.'}}}, {'type': 'null'}]}, 'description': "A list of errors that occurred during composition. Errors mean that Apollo was unable to compose the graph variant's subgraphs into a supergraph schema. If any errors are present, gateways / routers are not updated."}, 'updatedGateway': {'type': 'boolean', 'description': 'Whether this composition result resulted in a new supergraph schema passed to Uplink (`true`), or the build failed for any reason (`false`). For dry runs, this value is `true` if Uplink _would have_ been updated with the result.'}}, 'description': 'Removes a subgraph. If composition is successful, this will update running routers.'}}}, {'type': 'null'}], 'description': 'Provides access to mutation fields for modifying a Studio graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}}
GetCheckResults
Read the outcome of one schema check run: the overall status, and for each task in the run the composition errors, the lint diagnostics, the schema changes with the client operations they affect, the downstream variant results, and the custom check violations. Rover can start a check but cannot read a past run, so use this after GetSchemaChecks gives you a check ID. Provide the graph ID and the check ID. The affected operations are paged with affectedOperationsLimit and affectedOperationsOffset; the change list is capped by the server, and areChangesTruncated reports when that happened.
只读 幂等
输入模式
{'type': 'object', 'required': ['graphId', 'checkId'], 'properties': {'checkId': {'type': 'string'}, 'graphId': {'type': 'string'}, 'affectedOperationsLimit': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': 20, 'description': 'The maximum number of affected queries to return. Must be 50 or fewer.#The maximum number of affected queries to return. Must be 50 or fewer.#The maximum number of affected queries to return. Must be 50 or fewer.#The maximum number of affected queries to return. Must be 50 or fewer.'}, 'affectedOperationsOffset': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': 0, 'description': 'How many items to skip before starting to return results.\nFor example, with `limit: 10` and `offset: 10`, you get items 11â\x80\x9320.#How many items to skip before starting to return results.\nFor example, with `limit: 10` and `offset: 10`, you get items 11â\x80\x9320.#How many items to skip before starting to return results.\nFor example, with `limit: 10` and `offset: 10`, you get items 11â\x80\x9320.#How many items to skip before starting to return results.\nFor example, with `limit: 10` and `offset: 10`, you get items 11â\x80\x9320.'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'properties': {'checkWorkflow': {'anyOf': [{'type': 'object', 'required': ['id', 'status', 'createdAt', 'tasks'], 'properties': {'id': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}, 'tasks': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'status'], 'properties': {'id': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}, 'result': {'anyOf': [{'type': 'object', 'required': ['violations'], 'properties': {'violations': {'type': 'array', 'items': {'type': 'object', 'required': ['level', 'message', 'rule'], 'properties': {'rule': {'type': 'string', 'description': 'The rule being violated. This is used to group multiple violations together in Studio. Max character length is 128.'}, 'level': {'$ref': '#/definitions/ViolationLevel', 'description': 'The violation level for the rule.'}, 'message': {'type': 'string', 'description': 'A human-readable message describing the rule violation, rendered as markdown in Apollo Studio. Maximum length: 512 characters.'}, 'coordinate': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The schema coordinate of this rule violation as defined by RFC:\n\t\thttps://github.com/graphql/graphql-wg/blob/main/rfcs/SchemaCoordinates.md\n\t\tOptional for violations that aren't specific to a single schema element"}}}}}}, {'type': 'null'}]}, 'status': {'$ref': '#/definitions/CheckWorkflowTaskStatus', 'description': 'The status of this task. All tasks start with the PENDING status while initializing. If any\n prerequisite task fails, then the task status becomes BLOCKED. Otherwise, if all prerequisite\n tasks pass, then this task runs (still having the PENDING status). Once the task completes, the\n task status will become either PASSED or FAILED.'}, 'results': {'anyOf': [{'type': 'array', 'items': {'type': 'object', 'required': ['blocking', 'downstreamGraphID', 'downstreamVariantName'], 'properties': {'blocking': {'type': 'boolean', 'description': 'Whether the downstream check workflow blocks the upstream check workflow from completing.'}, 'downstreamGraphID': {'type': 'string', 'description': 'The ID of the graph that the downstream variant belongs to.'}, 'downstreamVariantName': {'type': 'string', 'description': 'The name of the downstream variant.'}, 'failsUpstreamWorkflow': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'description': 'Whether the downstream check workflow is causing the upstream check workflow to fail. This occurs\nwhen the downstream check workflow is both blocking and failing. This may be null while the\ndownstream check workflow is pending.'}}}}, {'type': 'null'}], 'description': "A list of results for all downstream checks triggered as part of the source variant's checks workflow.\nThis value is null if the task hasn't been initialized yet, or if the build task fails (the build task is a\nprerequisite to this task). This value is _not_ null _while_ the task is running. The returned list is empty\nif the source variant has no downstream variants."}, 'targetURL': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'A studio UI url to view the details of this check workflow task'}, '__typename': {'type': 'string', 'description': 'The typename of this object'}, 'hasWarnings': {'type': 'boolean', 'description': 'True if this Proposal check passed with warnings, otherwise false.'}, 'severityLevel': {'$ref': '#/definitions/ProposalChangeMismatchSeverity', 'description': "The configured severity at the time the check was run. If the check failed, this is the severity that should be shown. While this Check is PENDING defaults to Service's severityLevel."}, 'proposalCoverage': {'$ref': '#/definitions/ProposalCoverage', 'description': "Indicates the level of coverage a check's changeset is in approved Proposals. PENDING while Check is still running."}, 'coreSchemaModified': {'type': 'boolean', 'description': "Whether the build's output supergraph core schema differs from that of the active publish for\nthe workflow's variant at the time this field executed (NOT at the time the check workflow\nstarted)."}}}, 'description': 'The set of check tasks associated with this workflow, e.g. composition, operations, etc.'}, 'status': {'$ref': '#/definitions/CheckWorkflowStatus', 'description': 'Overall status of the workflow, based on the underlying task statuses.'}, 'createdAt': {'description': 'ISO 8601, extended format with nanoseconds, Zulu (or "[+-]seconds" as a string or number relative to now)'}, 'startedAt': {'anyOf': [{'description': 'ISO 8601, extended format with nanoseconds, Zulu (or "[+-]seconds" as a string or number relative to now)'}, {'type': 'null'}], 'description': 'The timestamp when the check workflow started.'}, 'gitContext': {'anyOf': [{'type': 'object', 'properties': {'commit': {'anyOf': [{'oneOf': [{'type': 'string'}, {'type': 'integer'}]}, {'type': 'null'}]}}}, {'type': 'null'}], 'description': 'Contextual parameters supplied by the runtime environment where the check was run.'}, 'baseVariant': {'anyOf': [{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': "The variant's name (e.g., `staging`)."}}}, {'type': 'null'}], 'description': 'The variant provided as a base to check against. Only the differences from the\nbase schema will be tested in operations checks.'}, 'completedAt': {'anyOf': [{'description': 'ISO 8601, extended format with nanoseconds, Zulu (or "[+-]seconds" as a string or number relative to now)'}, {'type': 'null'}], 'description': 'The timestamp when the check workflow completed.'}, 'implementingServiceName': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'The name of the implementing service that was responsible for triggering the validation.'}}}, {'type': 'null'}], 'description': 'Get a check workflow for this graph by its ID'}}}, {'type': 'null'}], 'description': 'Returns details of the graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}, 'definitions': {'LintRule': {'enum': ['ALL_ELEMENTS_REQUIRE_DESCRIPTION', 'CONTACT_DIRECTIVE_MISSING', 'DEFINED_TYPES_ARE_UNUSED', 'DEPRECATED_DIRECTIVE_MISSING_REASON', 'DIRECTIVE_COMPOSITION', 'DIRECTIVE_NAMES_SHOULD_BE_CAMEL_CASE', 'DOES_NOT_PARSE', 'ENUM_PREFIX', 'ENUM_SUFFIX', 'ENUM_USED_AS_INPUT_WITHOUT_SUFFIX', 'ENUM_USED_AS_OUTPUT_DESPITE_SUFFIX', 'ENUM_VALUES_SHOULD_BE_SCREAMING_SNAKE_CASE', 'FIELD_NAMES_SHOULD_BE_CAMEL_CASE', 'FROM_SUBGRAPH_DOES_NOT_EXIST', 'INCONSISTENT_ARGUMENT_PRESENCE', 'INCONSISTENT_BUT_COMPATIBLE_ARGUMENT_TYPE', 'INCONSISTENT_BUT_COMPATIBLE_FIELD_TYPE', 'INCONSISTENT_DEFAULT_VALUE_PRESENCE', 'INCONSISTENT_DESCRIPTION', 'INCONSISTENT_ENTITY', 'INCONSISTENT_ENUM_VALUE_FOR_INPUT_ENUM', 'INCONSISTENT_ENUM_VALUE_FOR_OUTPUT_ENUM', 'INCONSISTENT_EXECUTABLE_DIRECTIVE_LOCATIONS', 'INCONSISTENT_EXECUTABLE_DIRECTIVE_PRESENCE', 'INCONSISTENT_EXECUTABLE_DIRECTIVE_REPEATABLE', 'INCONSISTENT_INPUT_OBJECT_FIELD', 'INCONSISTENT_INTERFACE_VALUE_TYPE_FIELD', 'INCONSISTENT_NON_REPEATABLE_DIRECTIVE_ARGUMENTS', 'INCONSISTENT_OBJECT_VALUE_TYPE_FIELD', 'INCONSISTENT_RUNTIME_TYPES_FOR_SHAREABLE_RETURN', 'INCONSISTENT_TYPE_SYSTEM_DIRECTIVE_LOCATIONS', 'INCONSISTENT_TYPE_SYSTEM_DIRECTIVE_REPEATABLE', 'INCONSISTENT_UNION_MEMBER', 'INPUT_ARGUMENT_NAMES_SHOULD_BE_CAMEL_CASE', 'INPUT_TYPE_SUFFIX', 'INTERFACE_PREFIX', 'INTERFACE_SUFFIX', 'MERGED_NON_REPEATABLE_DIRECTIVE_ARGUMENTS', 'NO_EXECUTABLE_DIRECTIVE_INTERSECTION', 'NULLABLE_PATH_VARIABLE', 'OBJECT_PREFIX', 'OBJECT_SUFFIX', 'OVERRIDDEN_FIELD_CAN_BE_REMOVED', 'OVERRIDE_DIRECTIVE_CAN_BE_REMOVED', 'OVERRIDE_MIGRATION_IN_PROGRESS', 'QUERY_DOCUMENT_DECLARATION', 'RESTY_FIELD_NAMES', 'TAG_DIRECTIVE_USES_UNKNOWN_NAME', 'TYPE_NAMES_SHOULD_BE_PASCAL_CASE', 'TYPE_PREFIX', 'TYPE_SUFFIX', 'UNUSED_ENUM_TYPE'], 'type': 'string'}, 'ChangeCategory': {'enum': ['ADDITION', 'EDIT', 'REMOVAL', 'DEPRECATION'], 'type': 'string', 'description': 'Defines a set of categories that a schema change\ncan be grouped by.'}, 'ChangeSeverity': {'enum': ['FAILURE', 'NOTICE'], 'type': 'string'}, 'ViolationLevel': {'enum': ['ERROR', 'INFO', 'WARNING'], 'type': 'string'}, 'ProposalCoverage': {'enum': ['FULL', 'NONE', 'OVERRIDDEN', 'PARTIAL', 'PENDING'], 'type': 'string'}, 'CheckWorkflowStatus': {'enum': ['FAILED', 'PASSED', 'PENDING'], 'type': 'string'}, 'LintDiagnosticLevel': {'enum': ['ERROR', 'IGNORED', 'WARNING'], 'type': 'string', 'description': 'The severity level of an lint result.'}, 'CheckWorkflowTaskStatus': {'enum': ['BLOCKED', 'FAILED', 'PASSED', 'PENDING'], 'type': 'string'}, 'ProposalChangeMismatchSeverity': {'enum': ['ERROR', 'OFF', 'WARN'], 'type': 'string'}}}
GetClientMetrics
Traffic broken down by client for a graph over a time window, as compact CSV. Columns: start timestamp, end exclusive timestamp, client name, client version, operation name, request count, request latency p50 ms, request latency p99 ms, request with error count. Answers which clients call a graph, which client versions are still on the wire, and which client drives errors or latency. Clients that do not report `apollographql-client-name`/`-version` come back with empty name and version columns. Ranked by `orderBy` descending: default REQUEST_COUNT (busiest); REQUEST_WITH_ERROR_COUNT for most error-prone, REQUEST_LATENCY_P99_MS for slowest. `variantName` and `operationName` scope to one or more variants or operations by exact name (omit for all). Rows are one per client + version + operation, so a busy graph has far more groups than the other metrics tools: scope by `operationName` or raise `limit` when a breakdown looks truncated. Keep the default `resolution` of ENTIRE_RANGE for totals and top-N, which gives one row per group ranked over the whole window. DAY/HOUR/MINUTE give one row per group per bucket ranked within each bucket, so a window total then needs a per-group sum plus a `limit` big enough to cover every bucket; too small a `limit` silently undercounts. Only HOUR and MINUTE accept a `to` of now, so use them for bursts in the last 24 hours. Avoid MONTH: it labels buckets by calendar month, not by the requested window.
只读 幂等
输入模式
{'type': 'object', 'required': ['graphId', 'from', 'to'], 'properties': {'to': {'$ref': '#/definitions/Timestamp', 'description': 'The ending timestamp for the report. Must be in the format: 2025-01-01T08:00:00Z (ISO 8601).'}, 'from': {'$ref': '#/definitions/Timestamp', 'description': 'The starting timestamp for the report. Must be in the format: 2025-01-01T00:00:00Z (ISO 8601).'}, 'limit': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': 50, 'description': 'Maximum number of records to return (default: 100, max 10000).'}, 'graphId': {'type': 'string'}, 'orderBy': {'anyOf': [{'$ref': '#/definitions/OperationInsightsTimeseriesReportMetric'}, {'type': 'null'}], 'default': 'REQUEST_COUNT'}, 'resolution': {'anyOf': [{'$ref': '#/definitions/TimeseriesReportResolution'}, {'type': 'null'}], 'default': 'ENTIRE_RANGE', 'description': "The resolution of the time groups for the report. This resolution will affect the range of times that can be used for the 'from' and\n'to' timestamps:\n- For the MINUTE resolution, the total time between 'from' and 'to' must be no more than 1 day, and the 'from' time must be no earlier than 30 days ago.\n- For the HOUR resolution, the total time between 'from' and 'to' must be no more than 7 days, and the 'from' time must be no earlier than 90 days ago.\n- For the DAY, MONTH, and ENTIRE_RANGE resolutions, the 'from' time must be no earlier than 549 days ago (approx 18 months), and the 'to' time must be no later than 1 day ago.\nIf these criteria are not met, this will return a REQUEST_INVALID error."}, 'variantName': {'anyOf': [{'type': 'array', 'items': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, {'type': 'null'}]}, 'operationName': {'anyOf': [{'type': 'array', 'items': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, {'type': 'null'}]}}, 'definitions': {'Timestamp': {'description': 'ISO 8601, extended format with nanoseconds, Zulu (or "[+-]seconds" as a string or number relative to now)'}, 'TimeseriesReportResolution': {'enum': ['DAY', 'ENTIRE_RANGE', 'HOUR', 'MINUTE', 'MONTH'], 'type': 'string', 'description': 'The size of each time bucket in a timeseries report.\n\nValues:\nDAY: One-day buckets.\nENTIRE_RANGE: Single bucket containing the entire time range.\nHOUR: One-hour buckets.\nMINUTE: One-minute buckets.\nMONTH: One-month buckets.'}, 'OperationInsightsTimeseriesReportMetric': {'enum': ['REQUEST_COUNT', 'REQUEST_LATENCY_P50_MS', 'REQUEST_LATENCY_P90_MS', 'REQUEST_LATENCY_P99_MS', 'REQUEST_WITH_ERROR_COUNT'], 'type': 'string', 'description': '\n\nValues:\nREQUEST_COUNT: \nREQUEST_LATENCY_P50_MS: \nREQUEST_LATENCY_P90_MS: \nREQUEST_LATENCY_P99_MS: \nREQUEST_WITH_ERROR_COUNT: '}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'required': ['operationInsightsTimeseriesReport'], 'properties': {'operationInsightsTimeseriesReport': {'type': 'object', 'properties': {'csv': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'A CSV representation of the results. This includes a header and rows that have a column for start and end timestamp and all requested dimensions and metrics.'}}, 'description': ' Returns a timeseries of operation metrics across a specified time range for this graph. This will return specified metrics (request count,\n avg latency, etc) grouped by time and the specified dimensions (query ID, query name, client name, etc). This API is rate limited and only\n allows a small number of requests per minute, and will return a RATE_LIMIT_EXCEEDED error if too many requests are made for a graph. If a\nrequest to this field times out, we recommend that you try a shorter time range or fewer dimensions.'}}}, {'type': 'null'}], 'description': 'Returns details of the graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}}
GetContractConfig
Read the filter configuration of a contract variant: the tags it includes, the tags it excludes, the source variant it is built from, and a human-readable description of the configuration. This is the same read that `rover contract describe` performs. A contract variant is a filtered view of another variant's schema, built by including and excluding schema elements by tag. The filter configuration does not include whether unreachable types are hidden. The description states it, so read it there before you update a contract with PublishContract. A variant that is not a contract returns null for the filter configuration. Provide the graph ID and the contract variant name.
只读 幂等
输入模式
{'type': 'object', 'required': ['graphId', 'variant'], 'properties': {'graphId': {'type': 'string'}, 'variant': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'properties': {'variant': {'anyOf': [{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': "The variant's name (e.g., `staging`)."}, 'sourceVariant': {'anyOf': [{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': "The variant's name (e.g., `staging`)."}}}, {'type': 'null'}], 'description': 'The variant this variant is derived from. This property currently only exists on contract variants.'}, 'contractFilterConfig': {'anyOf': [{'type': 'object', 'required': ['include', 'exclude'], 'properties': {'exclude': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Tags of schema elements to exclude from the contract schema.'}, 'include': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Tags of schema elements to include in the contract schema.'}}}, {'type': 'null'}], 'description': 'The filter configuration used to build a contract schema. The configuration consists of lists of tags for schema elements to include or exclude in the resulting schema.'}, 'contractFilterConfigDescription': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "A human-readable description of the filter configuration of this contract variant, or null if this isn't a contract\nvariant."}}}, {'type': 'null'}], 'description': 'Provides details of the graph variant with the provided `name`, if a variant\nwith that name exists for this graph. Otherwise, returns null.\n\n For a list of _all_ variants associated with a graph, use `Graph.variants` instead.'}}}, {'type': 'null'}], 'description': 'Returns details of the graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}}
GetGraphSchema
Read the schema (SDL) that is currently published to a graph variant, with its hash and publication time. This is the same read that `rover graph fetch` performs. The response holds the whole document and is not truncated. A large federated graph measured over 800,000 characters, roughly 200,000 tokens, which exceeds the context window of most models. Prefer GetSubgraphSchema, which reads one subgraph at a time, and use this tool only when you need the whole API schema. Provide the graph ID and the variant name.
只读 幂等
输入模式
{'type': 'object', 'required': ['graphId', 'variant'], 'properties': {'graphId': {'type': 'string'}, 'variant': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'properties': {'variant': {'anyOf': [{'type': 'object', 'properties': {'latestPublication': {'anyOf': [{'type': 'object', 'required': ['publishedAt', 'schema'], 'properties': {'schema': {'type': 'object', 'required': ['hash', 'document'], 'properties': {'hash': {'oneOf': [{'type': 'string'}, {'type': 'integer'}], 'description': "The GraphQL schema document's SHA256 hash, represented as a hexadecimal string."}, 'document': {'type': 'string', 'description': 'A GraphQL document, such as a schema in SDL syntax.'}}, 'description': 'The schema that was published to the variant.'}, 'publishedAt': {'description': 'ISO 8601, extended format with nanoseconds, Zulu (or "[+-]seconds" as a string or number relative to now)'}}}, {'type': 'null'}], 'description': "The details of the variant's most recent publication."}}}, {'type': 'null'}], 'description': 'Provides details of the graph variant with the provided `name`, if a variant\nwith that name exists for this graph. Otherwise, returns null.\n\n For a list of _all_ variants associated with a graph, use `Graph.variants` instead.'}}}, {'type': 'null'}], 'description': 'Returns details of the graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}}
GetLatestLaunch
Inspect the most recent launch for a graph variant: status, completion time, subgraph changes, composition errors, and a schema diff summary vs the previous launch (additions/removals/edits/deprecations plus affected operations). Use to assess schema composition health and the impact of recent schema changes. Also returns the latest approved launch for comparison. Provide the graph ID and variant name.
只读 幂等
输入模式
{'type': 'object', 'required': ['graphId', 'variant'], 'properties': {'graphId': {'type': 'string'}, 'variant': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'properties': {'variant': {'anyOf': [{'type': 'object', 'properties': {'latestLaunch': {'anyOf': [{'type': 'object', 'required': ['id', 'status'], 'properties': {'id': {'oneOf': [{'type': 'string'}, {'type': 'integer'}], 'description': 'The unique identifier for this launch.'}, 'status': {'$ref': '#/definitions/LaunchStatus', 'description': "The launch's status. If a launch is superseded, its status remains `LAUNCH_INITIATED`. To check for a superseded launch, use `supersededAt`."}, 'completedAt': {'anyOf': [{'description': 'ISO 8601, extended format with nanoseconds, Zulu (or "[+-]seconds" as a string or number relative to now)'}, {'type': 'null'}], 'description': 'The timestamp when the launch completed. This value is null until the launch completes.'}, 'publication': {'anyOf': [{'type': 'object', 'properties': {'diffToPrevious': {'anyOf': [{'type': 'object', 'required': ['changeSummary'], 'properties': {'changeSummary': {'type': 'object', 'required': ['total', 'field'], 'properties': {'field': {'type': 'object', 'required': ['additions', 'removals', 'edits'], 'properties': {'edits': {'type': 'integer', 'description': 'Number of changes that are field edits. This includes fields changing type and any field\ndeprecation and description changes, but also includes any argument changes and any input object\nfield changes.'}, 'removals': {'type': 'integer', 'description': 'Number of changes that are removals of fields from object, interface, and input types.'}, 'additions': {'type': 'integer', 'description': 'Number of changes that are additions of fields to object, interface, and input types.'}}, 'description': 'Counts for changes to fields of objects, input objects, and interfaces.'}, 'total': {'type': 'object', 'required': ['additions', 'removals', 'edits', 'deprecations'], 'properties': {'edits': {'type': 'integer', 'description': 'Number of changes that are edits. This includes types changing kind, fields and arguments\nchanging type, arguments changing default value, and any description changes. This also includes\nedits to @deprecated reason strings.'}, 'removals': {'type': 'integer', 'description': 'Number of changes that are removals. This includes removing types, removing fields from object,\ninput object, and interface types, removing values from enums, removing members from interfaces\nand unions, and removing arguments. This also includes removing @deprecated usages.'}, 'additions': {'type': 'integer', 'description': 'Number of changes that are additions. This includes adding types, adding fields to object, input\nobject, and interface types, adding values to enums, adding members to interfaces and unions, and\nadding arguments.'}, 'deprecations': {'type': 'integer', 'description': 'Number of changes that are new usages of the @deprecated directive.'}}, 'description': 'Counts for all changes.'}}, 'description': 'Numeric summaries for each type of change in the diff.'}, 'affectedQueries': {'anyOf': [{'type': 'array', 'items': {'type': 'object', 'required': ['id'], 'properties': {'id': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}, 'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'Name provided for the operation, which can be empty string if it is an anonymous operation'}, 'isValid': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'description': 'Determines if this query validates against the proposed schema'}, 'markedAsSafe': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'description': 'Whether the changes were marked as safe and its severity was downgraded for that reason'}, 'markedAsIgnored': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'description': 'Whether this operation was ignored and its severity was downgraded for that reason'}}}}, {'type': 'null'}], 'description': 'Operations affected by all changes in the diff.'}}}, {'type': 'null'}], 'description': 'A schema diff comparing against the schema from the most recent previous successful publication.'}, 'compositionResult': {'anyOf': [{'type': 'object', 'required': ['errors'], 'properties': {'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message', 'locations'], 'properties': {'code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'A machine-readable error code.'}, 'message': {'type': 'string', 'description': 'A human-readable message describing the error.'}, 'locations': {'type': 'array', 'items': {'anyOf': [{'type': 'object', 'required': ['line', 'column'], 'properties': {'line': {'type': 'integer', 'description': 'Line number.'}, 'column': {'type': 'integer', 'description': 'Column number.'}}}, {'type': 'null'}]}, 'description': 'Source locations related to the error.'}}}, 'description': "A list of errors that occurred during composition. Errors mean that Apollo was unable to compose the graph variant's subgraphs into a supergraph schema. If any errors are present, gateways / routers are not updated."}}}, {'type': 'null'}], 'description': 'The result of federated composition executed for this publication. This result includes either a supergraph schema or error details, depending on whether composition succeeded. This value is null when the publication is for a non-federated graph.'}}}, {'type': 'null'}], 'description': 'A specific publication of a graph variant pertaining to this launch.'}, 'subgraphChanges': {'anyOf': [{'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'oneOf': [{'type': 'string'}, {'type': 'integer'}], 'description': "The subgraph's name."}}}}, {'type': 'null'}], 'description': 'A list of subgraph changes that are included in this launch.'}}}, {'type': 'null'}], 'description': 'Latest launch for the variant, whether successful or not.'}, 'latestApprovedLaunch': {'anyOf': [{'type': 'object', 'required': ['id', 'status'], 'properties': {'id': {'oneOf': [{'type': 'string'}, {'type': 'integer'}], 'description': 'The unique identifier for this launch.'}, 'status': {'$ref': '#/definitions/LaunchStatus', 'description': "The launch's status. If a launch is superseded, its status remains `LAUNCH_INITIATED`. To check for a superseded launch, use `supersededAt`."}, 'completedAt': {'anyOf': [{'description': 'ISO 8601, extended format with nanoseconds, Zulu (or "[+-]seconds" as a string or number relative to now)'}, {'type': 'null'}], 'description': 'The timestamp when the launch completed. This value is null until the launch completes.'}}}, {'type': 'null'}], 'description': 'Latest approved launch for the variant, and what is served through Uplink.'}}}, {'type': 'null'}], 'description': 'Provides details of the graph variant with the provided `name`, if a variant\nwith that name exists for this graph. Otherwise, returns null.\n\n For a list of _all_ variants associated with a graph, use `Graph.variants` instead.'}}}, {'type': 'null'}], 'description': 'Returns details of the graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}, 'definitions': {'LaunchStatus': {'enum': ['LAUNCH_COMPLETED', 'LAUNCH_FAILED', 'LAUNCH_INITIATED'], 'type': 'string'}}}
GetLaunch
Inspect a single launch by ID for full detail: status, timestamps, which subgraphs changed, composition errors, and the schema diff summary. Use to drill into a specific launch — e.g. a failed or superseded one found via GetLaunchHistory (pass its id here). Provide the graph ID, variant name, and launch ID.
只读 幂等
输入模式
{'type': 'object', 'required': ['graphId', 'variant', 'launchId'], 'properties': {'graphId': {'type': 'string'}, 'variant': {'type': 'string'}, 'launchId': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'properties': {'variant': {'anyOf': [{'type': 'object', 'properties': {'launch': {'anyOf': [{'type': 'object', 'required': ['id', 'status', 'createdAt'], 'properties': {'id': {'oneOf': [{'type': 'string'}, {'type': 'integer'}], 'description': 'The unique identifier for this launch.'}, 'status': {'$ref': '#/definitions/LaunchStatus', 'description': "The launch's status. If a launch is superseded, its status remains `LAUNCH_INITIATED`. To check for a superseded launch, use `supersededAt`."}, 'createdAt': {'description': 'ISO 8601, extended format with nanoseconds, Zulu (or "[+-]seconds" as a string or number relative to now)'}, 'completedAt': {'anyOf': [{'description': 'ISO 8601, extended format with nanoseconds, Zulu (or "[+-]seconds" as a string or number relative to now)'}, {'type': 'null'}], 'description': 'The timestamp when the launch completed. This value is null until the launch completes.'}, 'publication': {'anyOf': [{'type': 'object', 'properties': {'diffToPrevious': {'anyOf': [{'type': 'object', 'required': ['changeSummary'], 'properties': {'changeSummary': {'type': 'object', 'required': ['total'], 'properties': {'total': {'type': 'object', 'required': ['additions', 'removals', 'edits', 'deprecations'], 'properties': {'edits': {'type': 'integer', 'description': 'Number of changes that are edits. This includes types changing kind, fields and arguments\nchanging type, arguments changing default value, and any description changes. This also includes\nedits to @deprecated reason strings.'}, 'removals': {'type': 'integer', 'description': 'Number of changes that are removals. This includes removing types, removing fields from object,\ninput object, and interface types, removing values from enums, removing members from interfaces\nand unions, and removing arguments. This also includes removing @deprecated usages.'}, 'additions': {'type': 'integer', 'description': 'Number of changes that are additions. This includes adding types, adding fields to object, input\nobject, and interface types, adding values to enums, adding members to interfaces and unions, and\nadding arguments.'}, 'deprecations': {'type': 'integer', 'description': 'Number of changes that are new usages of the @deprecated directive.'}}, 'description': 'Counts for all changes.'}}, 'description': 'Numeric summaries for each type of change in the diff.'}}}, {'type': 'null'}], 'description': 'A schema diff comparing against the schema from the most recent previous successful publication.'}, 'compositionResult': {'anyOf': [{'type': 'object', 'required': ['errors'], 'properties': {'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message', 'locations'], 'properties': {'code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'A machine-readable error code.'}, 'message': {'type': 'string', 'description': 'A human-readable message describing the error.'}, 'locations': {'type': 'array', 'items': {'anyOf': [{'type': 'object', 'required': ['line', 'column'], 'properties': {'line': {'type': 'integer', 'description': 'Line number.'}, 'column': {'type': 'integer', 'description': 'Column number.'}}}, {'type': 'null'}]}, 'description': 'Source locations related to the error.'}}}, 'description': "A list of errors that occurred during composition. Errors mean that Apollo was unable to compose the graph variant's subgraphs into a supergraph schema. If any errors are present, gateways / routers are not updated."}}}, {'type': 'null'}], 'description': 'The result of federated composition executed for this publication. This result includes either a supergraph schema or error details, depending on whether composition succeeded. This value is null when the publication is for a non-federated graph.'}}}, {'type': 'null'}], 'description': 'A specific publication of a graph variant pertaining to this launch.'}, 'subgraphChanges': {'anyOf': [{'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'oneOf': [{'type': 'string'}, {'type': 'integer'}], 'description': "The subgraph's name."}}}}, {'type': 'null'}], 'description': 'A list of subgraph changes that are included in this launch.'}}}, {'type': 'null'}], 'description': 'Retrieve a launch for this variant by ID.'}}}, {'type': 'null'}], 'description': 'Provides details of the graph variant with the provided `name`, if a variant\nwith that name exists for this graph. Otherwise, returns null.\n\n For a list of _all_ variants associated with a graph, use `Graph.variants` instead.'}}}, {'type': 'null'}], 'description': 'Returns details of the graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}, 'definitions': {'LaunchStatus': {'enum': ['LAUNCH_COMPLETED', 'LAUNCH_FAILED', 'LAUNCH_INITIATED'], 'type': 'string'}}}
GetLaunchHistory
Retrieve recent launches for a graph variant (most recent first) to detect deployment instability such as repeated failures or frequent superseded launches. Each entry includes the launch id, status, and timestamps, so you can identify a specific launch and drill into it with GetLaunch. Use to assess deployment stability. Provide the graph ID, variant name, and optionally a limit (default 20 most recent launches, max 100 per page) and an offset to page further back.
只读 幂等
输入模式
{'type': 'object', 'required': ['graphId', 'variant'], 'properties': {'limit': {'type': 'integer', 'default': 20}, 'offset': {'type': 'integer', 'default': 0}, 'graphId': {'type': 'string'}, 'variant': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'properties': {'variant': {'anyOf': [{'type': 'object', 'properties': {'launchSummaries': {'anyOf': [{'type': 'array', 'items': {'type': 'object', 'required': ['id', 'status', 'createdAt'], 'properties': {'id': {'oneOf': [{'type': 'string'}, {'type': 'integer'}], 'description': 'The unique identifier for this launch.'}, 'status': {'$ref': '#/definitions/LaunchStatus', 'description': "The launch's status. If a launch is superseded, its status remains `LAUNCH_INITIATED`. To check for a superseded launch, use `supersededAt`."}, 'createdAt': {'description': 'ISO 8601, extended format with nanoseconds, Zulu (or "[+-]seconds" as a string or number relative to now)'}, 'completedAt': {'anyOf': [{'description': 'ISO 8601, extended format with nanoseconds, Zulu (or "[+-]seconds" as a string or number relative to now)'}, {'type': 'null'}], 'description': 'The timestamp when the launch completed. This value is null until the launch completes.'}}}}, {'type': 'null'}], 'description': 'A list of launches metadata ordered by date, asc or desc depending on orderBy. The maximum limit is 100.'}}}, {'type': 'null'}], 'description': 'Provides details of the graph variant with the provided `name`, if a variant\nwith that name exists for this graph. Otherwise, returns null.\n\n For a list of _all_ variants associated with a graph, use `Graph.variants` instead.'}}}, {'type': 'null'}], 'description': 'Returns details of the graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}, 'definitions': {'LaunchStatus': {'enum': ['LAUNCH_COMPLETED', 'LAUNCH_FAILED', 'LAUNCH_INITIATED'], 'type': 'string'}}}
GetLintResults
Retrieve schema lint violations from a graph's most recent schema checks: each diagnostic's coordinate, severity level, message, rule, and source location, plus error/warning/total/ignored counts. Use to assess schema quality and naming/best-practice violations. Provide the graph ID and optionally a limit (default 5 most recent schema checks).
只读 幂等
输入模式
{'type': 'object', 'required': ['graphId'], 'properties': {'limit': {'type': 'integer', 'default': 5}, 'graphId': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'required': ['checkWorkflows'], 'properties': {'checkWorkflows': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'status', 'tasks'], 'properties': {'id': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}, 'tasks': {'type': 'array', 'items': {'type': 'object', 'properties': {'result': {'anyOf': [{'type': 'object', 'required': ['diagnostics', 'stats'], 'properties': {'stats': {'type': 'object', 'required': ['errorsCount', 'warningsCount', 'totalCount', 'ignoredCount'], 'properties': {'totalCount': {'type': 'integer', 'description': 'Total number of lint rules violated.'}, 'errorsCount': {'type': 'integer', 'description': 'Total number of lint errors.'}, 'ignoredCount': {'type': 'integer', 'description': 'Total number of lint rules ignored.'}, 'warningsCount': {'type': 'integer', 'description': 'Total number of lint warnings.'}}, 'description': 'Stats generated from the resulting diagnostics.'}, 'diagnostics': {'type': 'array', 'items': {'type': 'object', 'required': ['coordinate', 'level', 'message', 'rule', 'sourceLocations'], 'properties': {'rule': {'$ref': '#/definitions/LintRule', 'description': 'The lint rule being violated.'}, 'level': {'$ref': '#/definitions/LintDiagnosticLevel', 'description': "The graph's configured level for the rule."}, 'message': {'type': 'string', 'description': 'The message describing the rule violation.'}, 'coordinate': {'type': 'string', 'description': 'The schema coordinate of this diagnostic.'}, 'sourceLocations': {'type': 'array', 'items': {'type': 'object', 'properties': {'end': {'anyOf': [{'type': 'object', 'required': ['line', 'column'], 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}, {'type': 'null'}]}, 'start': {'anyOf': [{'type': 'object', 'required': ['line', 'column'], 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}, {'type': 'null'}]}, 'subgraphName': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}}, 'description': 'The human readable position in the file of the rule violation.'}}}, 'description': 'The set of lint rule violations found in the schema.'}}}, {'type': 'null'}]}, 'status': {'$ref': '#/definitions/CheckWorkflowTaskStatus'}}}, 'description': 'The set of check tasks associated with this workflow, e.g. composition, operations, etc.'}, 'status': {'$ref': '#/definitions/CheckWorkflowStatus', 'description': 'Overall status of the workflow, based on the underlying task statuses.'}, 'completedAt': {'anyOf': [{'description': 'ISO 8601, extended format with nanoseconds, Zulu (or "[+-]seconds" as a string or number relative to now)'}, {'type': 'null'}], 'description': 'The timestamp when the check workflow completed.'}, 'implementingServiceName': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'The name of the implementing service that was responsible for triggering the validation.'}}}, 'description': 'Get check workflows for this graph ordered by creation time, most recent first.'}}}, {'type': 'null'}], 'description': 'Returns details of the graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}, 'definitions': {'LintRule': {'enum': ['ALL_ELEMENTS_REQUIRE_DESCRIPTION', 'CONTACT_DIRECTIVE_MISSING', 'DEFINED_TYPES_ARE_UNUSED', 'DEPRECATED_DIRECTIVE_MISSING_REASON', 'DIRECTIVE_COMPOSITION', 'DIRECTIVE_NAMES_SHOULD_BE_CAMEL_CASE', 'DOES_NOT_PARSE', 'ENUM_PREFIX', 'ENUM_SUFFIX', 'ENUM_USED_AS_INPUT_WITHOUT_SUFFIX', 'ENUM_USED_AS_OUTPUT_DESPITE_SUFFIX', 'ENUM_VALUES_SHOULD_BE_SCREAMING_SNAKE_CASE', 'FIELD_NAMES_SHOULD_BE_CAMEL_CASE', 'FROM_SUBGRAPH_DOES_NOT_EXIST', 'INCONSISTENT_ARGUMENT_PRESENCE', 'INCONSISTENT_BUT_COMPATIBLE_ARGUMENT_TYPE', 'INCONSISTENT_BUT_COMPATIBLE_FIELD_TYPE', 'INCONSISTENT_DEFAULT_VALUE_PRESENCE', 'INCONSISTENT_DESCRIPTION', 'INCONSISTENT_ENTITY', 'INCONSISTENT_ENUM_VALUE_FOR_INPUT_ENUM', 'INCONSISTENT_ENUM_VALUE_FOR_OUTPUT_ENUM', 'INCONSISTENT_EXECUTABLE_DIRECTIVE_LOCATIONS', 'INCONSISTENT_EXECUTABLE_DIRECTIVE_PRESENCE', 'INCONSISTENT_EXECUTABLE_DIRECTIVE_REPEATABLE', 'INCONSISTENT_INPUT_OBJECT_FIELD', 'INCONSISTENT_INTERFACE_VALUE_TYPE_FIELD', 'INCONSISTENT_NON_REPEATABLE_DIRECTIVE_ARGUMENTS', 'INCONSISTENT_OBJECT_VALUE_TYPE_FIELD', 'INCONSISTENT_RUNTIME_TYPES_FOR_SHAREABLE_RETURN', 'INCONSISTENT_TYPE_SYSTEM_DIRECTIVE_LOCATIONS', 'INCONSISTENT_TYPE_SYSTEM_DIRECTIVE_REPEATABLE', 'INCONSISTENT_UNION_MEMBER', 'INPUT_ARGUMENT_NAMES_SHOULD_BE_CAMEL_CASE', 'INPUT_TYPE_SUFFIX', 'INTERFACE_PREFIX', 'INTERFACE_SUFFIX', 'MERGED_NON_REPEATABLE_DIRECTIVE_ARGUMENTS', 'NO_EXECUTABLE_DIRECTIVE_INTERSECTION', 'NULLABLE_PATH_VARIABLE', 'OBJECT_PREFIX', 'OBJECT_SUFFIX', 'OVERRIDDEN_FIELD_CAN_BE_REMOVED', 'OVERRIDE_DIRECTIVE_CAN_BE_REMOVED', 'OVERRIDE_MIGRATION_IN_PROGRESS', 'QUERY_DOCUMENT_DECLARATION', 'RESTY_FIELD_NAMES', 'TAG_DIRECTIVE_USES_UNKNOWN_NAME', 'TYPE_NAMES_SHOULD_BE_PASCAL_CASE', 'TYPE_PREFIX', 'TYPE_SUFFIX', 'UNUSED_ENUM_TYPE'], 'type': 'string'}, 'CheckWorkflowStatus': {'enum': ['FAILED', 'PASSED', 'PENDING'], 'type': 'string'}, 'LintDiagnosticLevel': {'enum': ['ERROR', 'IGNORED', 'WARNING'], 'type': 'string', 'description': 'The severity level of an lint result.'}, 'CheckWorkflowTaskStatus': {'enum': ['BLOCKED', 'FAILED', 'PASSED', 'PENDING'], 'type': 'string'}}}
GetMyIdentity
Resolve the caller's identity from their API key or OAuth token. Call this FIRST when the user asks about "my graph" but has not provided a graph ID. For a graph/service key, `me` resolves to a Graph: use `id` as the graphId and `variants[].name` as the variant for the graph-scoped health-check tools, so the user does not have to supply either. For a user (personal key or OAuth), `me` resolves to a User instead: there's no single graph, so each org membership's `graphs[].id` / `graphs[].variants[].name` lists the graphId/variant options the graph-scoped tools need, across every org the user belongs to. Also handles service-account keys.
只读 幂等
输入模式
{'type': 'object', 'properties': {}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'me': {'anyOf': [{'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'oneOf': [{'type': 'string'}, {'type': 'integer'}], 'description': "The identity's identifier, which is unique among objects of its type."}, 'name': {'type': 'string', 'description': "The identity's human-readable name."}, 'account': {'anyOf': [{'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'oneOf': [{'type': 'string'}, {'type': 'integer'}], 'description': "Globally unique identifier, which isn't guaranteed stable (can be changed by administrators)."}, 'name': {'type': 'string', 'description': "Name of the organization, which can change over time and isn't unique. If the organization has no company\nname set, this falls back to the organization's ID."}}}, {'type': 'null'}], 'description': 'The organization that this graph belongs to.'}, 'variants': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': "The variant's name (e.g., `staging`)."}}}, 'description': 'A list of the variants for this graph.'}, '__typename': {'type': 'string', 'description': 'The typename of this object'}, 'memberships': {'type': 'array', 'items': {'type': 'object', 'required': ['account'], 'properties': {'account': {'type': 'object', 'required': ['id', 'name', 'graphs'], 'properties': {'id': {'oneOf': [{'type': 'string'}, {'type': 'integer'}], 'description': "Globally unique identifier, which isn't guaranteed stable (can be changed by administrators)."}, 'name': {'type': 'string', 'description': "Name of the organization, which can change over time and isn't unique. If the organization has no company\nname set, this falls back to the organization's ID."}, 'graphs': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'variants'], 'properties': {'id': {'oneOf': [{'type': 'string'}, {'type': 'integer'}], 'description': "The graph's globally unique identifier."}, 'name': {'type': 'string'}, 'variants': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': "The variant's name (e.g., `staging`)."}}}, 'description': 'A list of the variants for this graph.'}}}, 'description': 'Graphs belonging to this organization.'}}, 'description': 'The organization that the user belongs to.'}}}, 'description': "A list of the user's memberships in Apollo Studio organizations."}, 'organization': {'anyOf': [{'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'oneOf': [{'type': 'string'}, {'type': 'integer'}], 'description': "Globally unique identifier, which isn't guaranteed stable (can be changed by administrators)."}, 'name': {'type': 'string', 'description': "Name of the organization, which can change over time and isn't unique. If the organization has no company\nname set, this falls back to the organization's ID."}}}, {'type': 'null'}], 'description': 'The organization this service account belongs to.'}}}, {'type': 'null'}], 'description': 'Returns details of the authenticated `User` or `Graph` executing this query. If this is an unauthenticated query (i.e., no API key is provided), this field returns null.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}}
GetOperationMetrics
Top operations by usage/health for a graph over a time window, as compact CSV. Columns: start timestamp, end exclusive timestamp, operation name, request count, request latency p50 ms, request latency p99 ms, request with error count. Ranked by `orderBy` descending: default REQUEST_COUNT (busiest); REQUEST_WITH_ERROR_COUNT for most error-prone, REQUEST_LATENCY_P99_MS for slowest. `variantName` scopes to one or more variants (omit for all). `clients` scopes to one or more clients; omit `clientVersion` to match every version of that client, and use GetClientMetrics to discover the names a graph sees. Keep the default `resolution` of ENTIRE_RANGE for totals and top-N, which gives one row per operation ranked over the whole window. DAY/HOUR/MINUTE give one row per operation per bucket ranked within each bucket, so a window total then needs a per-operation sum plus a `limit` big enough to cover every bucket; too small a `limit` silently undercounts. Only HOUR and MINUTE accept a `to` of now, so use them for bursts in the last 24 hours. Avoid MONTH: it labels buckets by calendar month, not by the requested window.
只读 幂等
输入模式
{'type': 'object', 'required': ['graphId', 'from', 'to'], 'properties': {'to': {'$ref': '#/definitions/Timestamp', 'description': 'The ending timestamp for the report. Must be in the format: 2025-01-01T08:00:00Z (ISO 8601).'}, 'from': {'$ref': '#/definitions/Timestamp', 'description': 'The starting timestamp for the report. Must be in the format: 2025-01-01T00:00:00Z (ISO 8601).'}, 'limit': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': 50, 'description': 'Maximum number of records to return (default: 100, max 10000).'}, 'clients': {'anyOf': [{'type': 'array', 'items': {'anyOf': [{'$ref': '#/definitions/OperationInsightsTimeseriesReportClientFilterInInput'}, {'type': 'null'}]}}, {'type': 'null'}]}, 'graphId': {'type': 'string'}, 'orderBy': {'anyOf': [{'$ref': '#/definitions/OperationInsightsTimeseriesReportMetric'}, {'type': 'null'}], 'default': 'REQUEST_COUNT'}, 'resolution': {'anyOf': [{'$ref': '#/definitions/TimeseriesReportResolution'}, {'type': 'null'}], 'default': 'ENTIRE_RANGE', 'description': "The resolution of the time groups for the report. This resolution will affect the range of times that can be used for the 'from' and\n'to' timestamps:\n- For the MINUTE resolution, the total time between 'from' and 'to' must be no more than 1 day, and the 'from' time must be no earlier than 30 days ago.\n- For the HOUR resolution, the total time between 'from' and 'to' must be no more than 7 days, and the 'from' time must be no earlier than 90 days ago.\n- For the DAY, MONTH, and ENTIRE_RANGE resolutions, the 'from' time must be no earlier than 549 days ago (approx 18 months), and the 'to' time must be no later than 1 day ago.\nIf these criteria are not met, this will return a REQUEST_INVALID error."}, 'variantName': {'anyOf': [{'type': 'array', 'items': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, {'type': 'null'}]}}, 'definitions': {'Timestamp': {'description': 'ISO 8601, extended format with nanoseconds, Zulu (or "[+-]seconds" as a string or number relative to now)'}, 'TimeseriesReportResolution': {'enum': ['DAY', 'ENTIRE_RANGE', 'HOUR', 'MINUTE', 'MONTH'], 'type': 'string', 'description': 'The size of each time bucket in a timeseries report.\n\nValues:\nDAY: One-day buckets.\nENTIRE_RANGE: Single bucket containing the entire time range.\nHOUR: One-hour buckets.\nMINUTE: One-minute buckets.\nMONTH: One-month buckets.'}, 'OperationInsightsTimeseriesReportMetric': {'enum': ['REQUEST_COUNT', 'REQUEST_LATENCY_P50_MS', 'REQUEST_LATENCY_P90_MS', 'REQUEST_LATENCY_P99_MS', 'REQUEST_WITH_ERROR_COUNT'], 'type': 'string', 'description': '\n\nValues:\nREQUEST_COUNT: \nREQUEST_LATENCY_P50_MS: \nREQUEST_LATENCY_P90_MS: \nREQUEST_LATENCY_P99_MS: \nREQUEST_WITH_ERROR_COUNT: '}, 'OperationInsightsTimeseriesReportClientFilterInInput': {'type': 'object', 'properties': {'clientName': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'The client name.'}, 'clientVersion': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'The client version.'}}, 'description': 'The named type and version of the clients to include or exclude in the operation timeseries report.'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'required': ['operationInsightsTimeseriesReport'], 'properties': {'operationInsightsTimeseriesReport': {'type': 'object', 'properties': {'csv': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'A CSV representation of the results. This includes a header and rows that have a column for start and end timestamp and all requested dimensions and metrics.'}}, 'description': ' Returns a timeseries of operation metrics across a specified time range for this graph. This will return specified metrics (request count,\n avg latency, etc) grouped by time and the specified dimensions (query ID, query name, client name, etc). This API is rate limited and only\n allows a small number of requests per minute, and will return a RATE_LIMIT_EXCEEDED error if too many requests are made for a graph. If a\nrequest to this field times out, we recommend that you try a shorter time range or fewer dimensions.'}}}, {'type': 'null'}], 'description': 'Returns details of the graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}}
GetPersistedQueryListStatus
Check whether a graph variant has a Persisted Query List (PQL), and return its ID, its name, and its current build (revision and operation count). Pass the ID to PublishPersistedQueries. Use to assess PQL configuration — a production variant with no PQL is a security gap. Provide the graph ID and variant name.
只读 幂等
输入模式
{'type': 'object', 'required': ['graphId', 'variant'], 'properties': {'graphId': {'type': 'string'}, 'variant': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'properties': {'variant': {'anyOf': [{'type': 'object', 'properties': {'persistedQueryList': {'anyOf': [{'type': 'object', 'required': ['id', 'name', 'currentBuild'], 'properties': {'id': {'oneOf': [{'type': 'string'}, {'type': 'integer'}], 'description': 'The immutable ID for this Persisted Query List.'}, 'name': {'type': 'string', 'description': "The list's name; can be changed and does not need to be unique."}, 'currentBuild': {'type': 'object', 'required': ['revision', 'totalOperationsInList'], 'properties': {'revision': {'type': 'integer', 'description': 'The revision of this Persisted Query List. Revision 0 is the initial empty list; each publish increments the revision by 1.'}, 'totalOperationsInList': {'type': 'integer', 'description': 'The total number of operations in the list after this build. Compare to PersistedQueriesPublish.operationCounts.'}}, 'description': 'The current build of this PQL.'}}}, {'type': 'null'}], 'description': 'The Persisted Query List linked to this variant, if any.'}}}, {'type': 'null'}], 'description': 'Provides details of the graph variant with the provided `name`, if a variant\nwith that name exists for this graph. Otherwise, returns null.\n\n For a list of _all_ variants associated with a graph, use `Graph.variants` instead.'}}}, {'type': 'null'}], 'description': 'Returns details of the graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}}
GetReadme
Read the README of a graph variant, with the time it was last updated and who updated it. This is the same read that `rover readme fetch` performs. The README is the Markdown document shown on the variant's page in GraphOS Studio. Provide the graph ID and the variant name.
只读 幂等
输入模式
{'type': 'object', 'required': ['graphId', 'variant'], 'properties': {'graphId': {'type': 'string'}, 'variant': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'properties': {'variant': {'anyOf': [{'type': 'object', 'required': ['readme'], 'properties': {'readme': {'type': 'object', 'required': ['id', 'content'], 'properties': {'id': {'oneOf': [{'type': 'string'}, {'type': 'integer'}], 'description': "The README's unique ID. `a15177c0-b003-4837-952a-dbfe76062eb1` for the default README"}, 'content': {'type': 'string', 'description': 'The contents of the README in plaintext.'}, 'lastUpdatedBy': {'anyOf': [{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': "The identity's human-readable name."}}}, {'type': 'null'}], 'description': 'The actor that most recently updated the README (usually a `User`). `null` for the default README, or if the `User` was deleted.'}, 'lastUpdatedTime': {'anyOf': [{'description': 'ISO 8601, extended format with nanoseconds, Zulu (or "[+-]seconds" as a string or number relative to now)'}, {'type': 'null'}], 'description': 'The timestamp when the README was most recently updated. `null` for the default README'}}}}}, {'type': 'null'}], 'description': 'Provides details of the graph variant with the provided `name`, if a variant\nwith that name exists for this graph. Otherwise, returns null.\n\n For a list of _all_ variants associated with a graph, use `Graph.variants` instead.'}}}, {'type': 'null'}], 'description': 'Returns details of the graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}}
GetSchemaChecks
List past schema checks for a graph: each check's ID, status, timestamps, the subgraph it checked, the variant it ran against, the commit, and the status of each task in the check, plus the total count for the filter. Rover can start a check but cannot read past runs, so use this to find a check and then pass its id to GetCheckResults for the failure detail. Provide the graph ID. Optionally filter by status (PASSED, FAILED, PENDING), subgraph names, branches, variants, authors, or check IDs, and page with limit and offset.
只读 幂等
输入模式
{'type': 'object', 'required': ['graphId'], 'properties': {'ids': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}]}, 'limit': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': 20}, 'offset': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': 0}, 'status': {'anyOf': [{'$ref': '#/definitions/CheckFilterInputStatusOption'}, {'type': 'null'}]}, 'authors': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}]}, 'graphId': {'type': 'string'}, 'branches': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}]}, 'variants': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}]}, 'subgraphs': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}]}}, 'definitions': {'CheckFilterInputStatusOption': {'enum': ['FAILED', 'PENDING', 'PASSED'], 'type': 'string', 'description': 'Options for filtering CheckWorkflows by status\nThis should always match CheckWorkflowStatus\n\nValues:\nFAILED: \nPENDING: \nPASSED: '}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'required': ['totalCheckWorkflowCount', 'checkWorkflows'], 'properties': {'checkWorkflows': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'status', 'createdAt', 'tasks'], 'properties': {'id': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}, 'tasks': {'type': 'array', 'items': {'type': 'object', 'required': ['status'], 'properties': {'status': {'$ref': '#/definitions/CheckWorkflowTaskStatus', 'description': 'The status of this task. All tasks start with the PENDING status while initializing. If any\n prerequisite task fails, then the task status becomes BLOCKED. Otherwise, if all prerequisite\n tasks pass, then this task runs (still having the PENDING status). Once the task completes, the\n task status will become either PASSED or FAILED.'}, '__typename': {'type': 'string', 'description': 'The typename of this object'}}}, 'description': 'The set of check tasks associated with this workflow, e.g. composition, operations, etc.'}, 'status': {'$ref': '#/definitions/CheckWorkflowStatus', 'description': 'Overall status of the workflow, based on the underlying task statuses.'}, 'createdAt': {'description': 'ISO 8601, extended format with nanoseconds, Zulu (or "[+-]seconds" as a string or number relative to now)'}, 'startedAt': {'anyOf': [{'description': 'ISO 8601, extended format with nanoseconds, Zulu (or "[+-]seconds" as a string or number relative to now)'}, {'type': 'null'}], 'description': 'The timestamp when the check workflow started.'}, 'gitContext': {'anyOf': [{'type': 'object', 'properties': {'commit': {'anyOf': [{'oneOf': [{'type': 'string'}, {'type': 'integer'}]}, {'type': 'null'}]}}}, {'type': 'null'}], 'description': 'Contextual parameters supplied by the runtime environment where the check was run.'}, 'baseVariant': {'anyOf': [{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': "The variant's name (e.g., `staging`)."}}}, {'type': 'null'}], 'description': 'The variant provided as a base to check against. Only the differences from the\nbase schema will be tested in operations checks.'}, 'completedAt': {'anyOf': [{'description': 'ISO 8601, extended format with nanoseconds, Zulu (or "[+-]seconds" as a string or number relative to now)'}, {'type': 'null'}], 'description': 'The timestamp when the check workflow completed.'}, 'implementingServiceName': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'The name of the implementing service that was responsible for triggering the validation.'}}}, 'description': 'Get check workflows for this graph ordered by creation time, most recent first.'}, 'totalCheckWorkflowCount': {'type': 'integer', 'description': 'Count checkWorkflows for the given filter. Used for paginating with checkWorkflows.'}}}, {'type': 'null'}], 'description': 'Returns details of the graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}, 'definitions': {'CheckWorkflowStatus': {'enum': ['FAILED', 'PASSED', 'PENDING'], 'type': 'string'}, 'CheckWorkflowTaskStatus': {'enum': ['BLOCKED', 'FAILED', 'PASSED', 'PENDING'], 'type': 'string'}}}
GetSubgraphMetrics
Top subgraphs/connectors by traffic/health for a graph over a time window, as compact CSV. Columns: start timestamp, end exclusive timestamp, fetch service name, fetch count, fetch latency p50 ms, fetch latency p99 ms, fetch with errors count. Ranked by `orderBy` descending: default FETCH_COUNT (busiest); FETCH_WITH_ERRORS_COUNT for most error-prone, FETCH_LATENCY_P99_MS for slowest. `variantName` scopes to one or more variants (omit for all). `subgraphName` scopes to one or more subgraphs by exact name (omit for all); pattern/substring matching is not supported. `clients` scopes to the fetches driven by one or more clients; omit `clientVersion` to match every version of that client, and use GetClientMetrics to discover the names a graph sees. Keep the default `resolution` of ENTIRE_RANGE for totals and top-N, which gives one row per subgraph ranked over the whole window. DAY/HOUR/MINUTE give one row per subgraph per bucket ranked within each bucket, so a window total then needs a per-subgraph sum plus a `limit` big enough to cover every bucket; too small a `limit` silently undercounts. Only HOUR and MINUTE accept a `to` of now, so use them for bursts in the last 24 hours. Avoid MONTH: it labels buckets by calendar month, not by the requested window.
只读 幂等
输入模式
{'type': 'object', 'required': ['graphId', 'from', 'to'], 'properties': {'to': {'$ref': '#/definitions/Timestamp', 'description': 'The ending timestamp for the report. Must be in the format: 2025-01-01T08:00:00Z (ISO 8601).'}, 'from': {'$ref': '#/definitions/Timestamp', 'description': 'The starting timestamp for the report. Must be in the format: 2025-01-01T00:00:00Z (ISO 8601).'}, 'limit': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': 50, 'description': 'Maximum number of records to return (default: 100, max 10000).'}, 'clients': {'anyOf': [{'type': 'array', 'items': {'anyOf': [{'$ref': '#/definitions/SubgraphInsightsTimeseriesReportClientFilterInInput'}, {'type': 'null'}]}}, {'type': 'null'}]}, 'graphId': {'type': 'string'}, 'orderBy': {'anyOf': [{'$ref': '#/definitions/SubgraphInsightsTimeseriesReportMetric'}, {'type': 'null'}], 'default': 'FETCH_COUNT'}, 'resolution': {'anyOf': [{'$ref': '#/definitions/TimeseriesReportResolution'}, {'type': 'null'}], 'default': 'ENTIRE_RANGE', 'description': "The resolution of the time groups for the report. This resolution will affect the range of times that can be used for the 'from' and\n'to' timestamps:\n- For the MINUTE resolution, the total time between 'from' and 'to' must be no more than 1 day, and the 'from' time must be no earlier than 30 days ago.\n- For the HOUR resolution, the total time between 'from' and 'to' must be no more than 7 days, and the 'from' time must be no earlier than 90 days ago.\n- For the DAY, MONTH, and ENTIRE_RANGE resolutions, the 'from' time must be no earlier than 549 days ago (approx 18 months), and the 'to' time must be no later than 1 day ago.\nIf these criteria are not met, this will return a REQUEST_INVALID error."}, 'variantName': {'anyOf': [{'type': 'array', 'items': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, {'type': 'null'}]}, 'subgraphName': {'anyOf': [{'type': 'array', 'items': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, {'type': 'null'}]}}, 'definitions': {'Timestamp': {'description': 'ISO 8601, extended format with nanoseconds, Zulu (or "[+-]seconds" as a string or number relative to now)'}, 'TimeseriesReportResolution': {'enum': ['DAY', 'ENTIRE_RANGE', 'HOUR', 'MINUTE', 'MONTH'], 'type': 'string', 'description': 'The size of each time bucket in a timeseries report.\n\nValues:\nDAY: One-day buckets.\nENTIRE_RANGE: Single bucket containing the entire time range.\nHOUR: One-hour buckets.\nMINUTE: One-minute buckets.\nMONTH: One-month buckets.'}, 'SubgraphInsightsTimeseriesReportMetric': {'enum': ['FETCH_COUNT', 'FETCH_LATENCY_P50_MS', 'FETCH_LATENCY_P90_MS', 'FETCH_LATENCY_P99_MS', 'FETCH_WITH_ERRORS_COUNT'], 'type': 'string', 'description': 'Metrics available for subgraph and connector timeseries fetches, representing aggregated data\ncollected over the given time window for the selected dimensions. Each request from the router to a downstream subgraph\nor connector service is counted as a fetch.\n\nValues:\nFETCH_COUNT: The total number of fetch requests sent from the router to the downstream subgraph or connector service as part of its query plan execution.\nFETCH_LATENCY_P50_MS: The 50th percentile (median) latency of fetches (in milliseconds).\nFETCH_LATENCY_P90_MS: The 90th percentile latency of fetch requests (in milliseconds).\nFETCH_LATENCY_P99_MS: The 99th percentile latency of fetch requests (in milliseconds).\nFETCH_WITH_ERRORS_COUNT: The number of fetch requests that resulted in error responses from the downstream service.'}, 'SubgraphInsightsTimeseriesReportClientFilterInInput': {'type': 'object', 'properties': {'clientName': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'The client name.'}, 'clientVersion': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'The client version.'}}, 'description': 'The named type and version of the clients to include or exclude in the subgraph and connector timeseries report.'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'required': ['subgraphInsightsTimeseriesReport'], 'properties': {'subgraphInsightsTimeseriesReport': {'type': 'object', 'properties': {'csv': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'A CSV representation of the results. This includes a header and rows that have a column for start and end timestamp and all requested dimensions and metrics.'}}, 'description': ' Returns a timeseries of subgraph and connector fetch metrics across a specified time range for this graph. Each\nrequest from the router to a subgraph or connector service is counted as a fetch. A single GraphQL operation can\nresult in multiple fetches, depending on the operation shape and query plan. This will return specified metrics (fetch\ncount, avg latency, etc.) grouped by time and the specified dimensions (fetch service ID, fetch service name, client\nname, etc.). This API is rate limited and only allows a small number of requests per minute, and will return a\nRATE_LIMIT_EXCEEDED error if too many requests are made for a graph. If a request to this field times out, we\nrecommend that you try a shorter time range or fewer dimensions.'}}}, {'type': 'null'}], 'description': 'Returns details of the graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}}
GetSubgraphSchema
Read one subgraph's published schema (SDL) from a variant, with its routing URL, revision, and last update time. This is the same read that `rover subgraph fetch` performs. Read one subgraph at a time: a whole supergraph document is much larger and can pass the token limit of the model. Provide the graph ID, the variant name, and the subgraph name. Use GetVariantDetails first if you do not know the subgraph names.
只读 幂等
输入模式
{'type': 'object', 'required': ['graphId', 'variant', 'subgraphName'], 'properties': {'graphId': {'type': 'string'}, 'variant': {'type': 'string'}, 'subgraphName': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'properties': {'variant': {'anyOf': [{'type': 'object', 'properties': {'subgraph': {'anyOf': [{'type': 'object', 'required': ['name', 'revision', 'updatedAt', 'activePartialSchema'], 'properties': {'url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The URL of the subgraph's GraphQL endpoint."}, 'name': {'type': 'string', 'description': "The subgraph's name."}, 'revision': {'type': 'string', 'description': 'The current user-provided version/edition of the subgraph. Typically a Git SHA or docker image ID.'}, 'updatedAt': {'description': 'ISO 8601, extended format with nanoseconds, Zulu (or "[+-]seconds" as a string or number relative to now)'}, 'activePartialSchema': {'type': 'object', 'required': ['sdl'], 'properties': {'sdl': {'type': 'string', 'description': 'The subgraph schema document as SDL.'}}, 'description': "The subgraph's current active schema, used in supergraph composition for the the associated variant."}}}, {'type': 'null'}], 'description': "Returns the details of the subgraph with the provided `name`, or null if this variant doesn't include a subgraph with that name."}}}, {'type': 'null'}], 'description': 'Provides details of the graph variant with the provided `name`, if a variant\nwith that name exists for this graph. Otherwise, returns null.\n\n For a list of _all_ variants associated with a graph, use `Graph.variants` instead.'}}}, {'type': 'null'}], 'description': 'Returns details of the graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}}
GetSupergraphSchema
Read the composed supergraph schema (SDL) for a graph variant, with the composition ID and any composition errors. This is the same read that `rover supergraph fetch` performs. A supergraph schema is the single schema that composition builds from every subgraph, and it carries federation directives that the API schema does not. The response holds the whole document and is not truncated, and a supergraph schema is larger than the API schema it produces. Expect the same order of size: a large federated graph exceeds 800,000 characters, roughly 200,000 tokens. A variant that is not federated has no composition result, and the tool returns null for it rather than an empty document. Provide the graph ID and the variant name.
只读 幂等
输入模式
{'type': 'object', 'required': ['graphId', 'variant'], 'properties': {'graphId': {'type': 'string'}, 'variant': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'properties': {'variant': {'anyOf': [{'type': 'object', 'properties': {'latestPublication': {'anyOf': [{'type': 'object', 'required': ['publishedAt'], 'properties': {'publishedAt': {'description': 'ISO 8601, extended format with nanoseconds, Zulu (or "[+-]seconds" as a string or number relative to now)'}, 'compositionResult': {'anyOf': [{'type': 'object', 'required': ['graphCompositionID', 'errors'], 'properties': {'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'A machine-readable error code.'}, 'message': {'type': 'string', 'description': 'A human-readable message describing the error.'}}}, 'description': "A list of errors that occurred during composition. Errors mean that Apollo was unable to compose the graph variant's subgraphs into a supergraph schema. If any errors are present, gateways / routers are not updated."}, 'supergraphSdl': {'anyOf': [{'type': 'string', 'description': 'A GraphQL document, such as a schema in SDL syntax.'}, {'type': 'null'}], 'description': 'Supergraph SDL generated by composition.'}, 'graphCompositionID': {'oneOf': [{'type': 'string'}, {'type': 'integer'}], 'description': 'The unique ID for this instance of composition.'}}}, {'type': 'null'}], 'description': 'The result of federated composition executed for this publication. This result includes either a supergraph schema or error details, depending on whether composition succeeded. This value is null when the publication is for a non-federated graph.'}}}, {'type': 'null'}], 'description': "The details of the variant's most recent publication."}}}, {'type': 'null'}], 'description': 'Provides details of the graph variant with the provided `name`, if a variant\nwith that name exists for this graph. Otherwise, returns null.\n\n For a list of _all_ variants associated with a graph, use `Graph.variants` instead.'}}}, {'type': 'null'}], 'description': 'Returns details of the graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}}
GetTopOperations
Identify the most-used operations on a graph variant for a time range, with request counts, types, and signatures. Use to find high-traffic operations, detect unused operations, and prioritize findings by traffic impact. Provide graph ID, variant, and a from/to time range (ISO 8601 timestamps; `to` must be at least 6 hours before now), plus an optional limit (default 50). This report is rate limited.
只读 幂等
输入模式
{'type': 'object', 'required': ['graphId', 'variant', 'from', 'to'], 'properties': {'to': {'$ref': '#/definitions/Timestamp', 'description': "The ending timestamp for the report.\n\n- Must be in the format: 2025-01-01T08:00:00Z (ISO 8601).\n- Must be at least 6 hours from the current time.\n  - The duration between 'from' and 'to' must not exceed 31 days."}, 'from': {'$ref': '#/definitions/Timestamp', 'description': "The starting timestamp for the report.\n\n- Must be in the format: 2025-01-01T00:00:00Z (ISO 8601).\n  - Must be within the last 549 days.\n  - The duration between 'from' and 'to' must not exceed 31 days."}, 'limit': {'type': 'integer', 'default': 50, 'description': 'Maximum number of records to return (default: 10)'}, 'graphId': {'type': 'string'}, 'variant': {'type': 'string'}}, 'definitions': {'Timestamp': {'description': 'ISO 8601, extended format with nanoseconds, Zulu (or "[+-]seconds" as a string or number relative to now)'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'properties': {'variant': {'anyOf': [{'type': 'object', 'required': ['topOperationsReport'], 'properties': {'topOperationsReport': {'type': 'array', 'items': {'type': 'object', 'required': ['operationId', 'requestCount'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'The operation name or null if the operation is unnamed.'}, 'type': {'anyOf': [{'$ref': '#/definitions/OperationType'}, {'type': 'null'}], 'description': 'The operation type or null if the operation type could not be determined from the signature.'}, 'signature': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The operation's signature body or null if the signature is unavailable due to parse errors."}, 'operationId': {'type': 'string', 'description': 'The unique id for this operation.'}, 'requestCount': {'description': 'Long type'}}}, 'description': 'Returns a list of the top operations reported for this variant within a given time range. This API is rate limited,\nand will return an error if too many requests are made for a graph.'}}}, {'type': 'null'}], 'description': 'Provides details of the graph variant with the provided `name`, if a variant\nwith that name exists for this graph. Otherwise, returns null.\n\n For a list of _all_ variants associated with a graph, use `Graph.variants` instead.'}}}, {'type': 'null'}], 'description': 'Returns details of the graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}, 'definitions': {'OperationType': {'enum': ['MUTATION', 'QUERY', 'SUBSCRIPTION'], 'type': 'string'}}}
GetVariantDetails
Retrieve metadata for a graph variant: its identifier, federation version, the URL of its GraphQL endpoint, and its subgraph inventory (names only). Use this to assess a variant's composition setup, such as subgraph inventory and federation version compliance. Provide the graph ID and variant name (e.g., "production").
只读 幂等
输入模式
{'type': 'object', 'required': ['graphId', 'variant'], 'properties': {'graphId': {'type': 'string'}, 'variant': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'properties': {'variant': {'anyOf': [{'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'oneOf': [{'type': 'string'}, {'type': 'integer'}], 'description': "The variant's global identifier in the form `graphID@variant`."}, 'url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The URL of the variant's GraphQL endpoint for query and mutation operations. For subscription operations, use `subscriptionUrl`."}, 'name': {'type': 'string', 'description': "The variant's name (e.g., `staging`)."}, 'subgraphs': {'anyOf': [{'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': "The subgraph's name."}}}}, {'type': 'null'}], 'description': 'A list of the subgraphs included in this variant. This value is null for non-federated variants. Set `includeDeleted` to `true` to include deleted subgraphs.'}, 'federationVersion': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'Federation version this variant uses'}}}, {'type': 'null'}], 'description': 'Provides details of the graph variant with the provided `name`, if a variant\nwith that name exists for this graph. Otherwise, returns null.\n\n For a list of _all_ variants associated with a graph, use `Graph.variants` instead.'}}}, {'type': 'null'}], 'description': 'Returns details of the graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}}
LintSchema
Lint a GraphQL schema document against the graph's lint rules and return each diagnostic's coordinate, severity level, message, rule, and source location, plus the error, warning, total, and ignored counts. This is the same check that `rover graph lint` and `rover subgraph lint` run. Nothing is published and no state changes. Provide the graph ID and the schema as SDL. Optionally provide baseSdl to report only the diagnostics that the new schema introduces against that base.
只读 幂等
输入模式
{'type': 'object', 'required': ['graphId', 'sdl'], 'properties': {'sdl': {'type': 'string', 'description': 'The schema to lint.'}, 'baseSdl': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'The schema to diff rule violations against, if not provided the full set of rule violations will be returned for the proposed sdl.'}, 'graphId': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'required': ['lintSchema'], 'properties': {'lintSchema': {'type': 'object', 'required': ['diagnostics', 'stats'], 'properties': {'stats': {'type': 'object', 'required': ['errorsCount', 'warningsCount', 'totalCount', 'ignoredCount'], 'properties': {'totalCount': {'type': 'integer', 'description': 'Total number of lint rules violated.'}, 'errorsCount': {'type': 'integer', 'description': 'Total number of lint errors.'}, 'ignoredCount': {'type': 'integer', 'description': 'Total number of lint rules ignored.'}, 'warningsCount': {'type': 'integer', 'description': 'Total number of lint warnings.'}}, 'description': 'Stats generated from the resulting diagnostics.'}, 'diagnostics': {'type': 'array', 'items': {'type': 'object', 'required': ['coordinate', 'level', 'message', 'rule', 'sourceLocations'], 'properties': {'rule': {'$ref': '#/definitions/LintRule', 'description': 'The lint rule being violated.'}, 'level': {'$ref': '#/definitions/LintDiagnosticLevel', 'description': "The graph's configured level for the rule."}, 'message': {'type': 'string', 'description': 'The message describing the rule violation.'}, 'coordinate': {'type': 'string', 'description': 'The schema coordinate of this diagnostic.'}, 'sourceLocations': {'type': 'array', 'items': {'type': 'object', 'properties': {'end': {'anyOf': [{'type': 'object', 'required': ['line', 'column'], 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}, {'type': 'null'}]}, 'start': {'anyOf': [{'type': 'object', 'required': ['line', 'column'], 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}, {'type': 'null'}]}, 'subgraphName': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}}, 'description': 'The human readable position in the file of the rule violation.'}}}, 'description': 'The set of lint rule violations found in the schema.'}}, 'description': "Lint a single schema using the graph's linter configuration."}}}, {'type': 'null'}], 'description': 'Provides access to mutation fields for modifying a Studio graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}, 'definitions': {'LintRule': {'enum': ['ALL_ELEMENTS_REQUIRE_DESCRIPTION', 'CONTACT_DIRECTIVE_MISSING', 'DEFINED_TYPES_ARE_UNUSED', 'DEPRECATED_DIRECTIVE_MISSING_REASON', 'DIRECTIVE_COMPOSITION', 'DIRECTIVE_NAMES_SHOULD_BE_CAMEL_CASE', 'DOES_NOT_PARSE', 'ENUM_PREFIX', 'ENUM_SUFFIX', 'ENUM_USED_AS_INPUT_WITHOUT_SUFFIX', 'ENUM_USED_AS_OUTPUT_DESPITE_SUFFIX', 'ENUM_VALUES_SHOULD_BE_SCREAMING_SNAKE_CASE', 'FIELD_NAMES_SHOULD_BE_CAMEL_CASE', 'FROM_SUBGRAPH_DOES_NOT_EXIST', 'INCONSISTENT_ARGUMENT_PRESENCE', 'INCONSISTENT_BUT_COMPATIBLE_ARGUMENT_TYPE', 'INCONSISTENT_BUT_COMPATIBLE_FIELD_TYPE', 'INCONSISTENT_DEFAULT_VALUE_PRESENCE', 'INCONSISTENT_DESCRIPTION', 'INCONSISTENT_ENTITY', 'INCONSISTENT_ENUM_VALUE_FOR_INPUT_ENUM', 'INCONSISTENT_ENUM_VALUE_FOR_OUTPUT_ENUM', 'INCONSISTENT_EXECUTABLE_DIRECTIVE_LOCATIONS', 'INCONSISTENT_EXECUTABLE_DIRECTIVE_PRESENCE', 'INCONSISTENT_EXECUTABLE_DIRECTIVE_REPEATABLE', 'INCONSISTENT_INPUT_OBJECT_FIELD', 'INCONSISTENT_INTERFACE_VALUE_TYPE_FIELD', 'INCONSISTENT_NON_REPEATABLE_DIRECTIVE_ARGUMENTS', 'INCONSISTENT_OBJECT_VALUE_TYPE_FIELD', 'INCONSISTENT_RUNTIME_TYPES_FOR_SHAREABLE_RETURN', 'INCONSISTENT_TYPE_SYSTEM_DIRECTIVE_LOCATIONS', 'INCONSISTENT_TYPE_SYSTEM_DIRECTIVE_REPEATABLE', 'INCONSISTENT_UNION_MEMBER', 'INPUT_ARGUMENT_NAMES_SHOULD_BE_CAMEL_CASE', 'INPUT_TYPE_SUFFIX', 'INTERFACE_PREFIX', 'INTERFACE_SUFFIX', 'MERGED_NON_REPEATABLE_DIRECTIVE_ARGUMENTS', 'NO_EXECUTABLE_DIRECTIVE_INTERSECTION', 'NULLABLE_PATH_VARIABLE', 'OBJECT_PREFIX', 'OBJECT_SUFFIX', 'OVERRIDDEN_FIELD_CAN_BE_REMOVED', 'OVERRIDE_DIRECTIVE_CAN_BE_REMOVED', 'OVERRIDE_MIGRATION_IN_PROGRESS', 'QUERY_DOCUMENT_DECLARATION', 'RESTY_FIELD_NAMES', 'TAG_DIRECTIVE_USES_UNKNOWN_NAME', 'TYPE_NAMES_SHOULD_BE_PASCAL_CASE', 'TYPE_PREFIX', 'TYPE_SUFFIX', 'UNUSED_ENUM_TYPE'], 'type': 'string'}, 'LintDiagnosticLevel': {'enum': ['ERROR', 'IGNORED', 'WARNING'], 'type': 'string', 'description': 'The severity level of an lint result.'}}}
PublishContract
Create or update a contract variant and start a launch for it, the same write that `rover contract publish` performs. A contract variant is a filtered view of another variant's schema, built by including and excluding schema elements by tag. The filter configuration replaces the previous one in full, so send the complete include and exclude lists rather than only the tags you want to change. The same applies to hideUnreachableTypes, which has no default: when you update a contract, pass the value it has now. GetContractConfig states that value in its description. Returns the contract variant and a link to the launch, or the error messages that stopped it. Provide the graph ID, the contract variant name, the source variant, the include and exclude tag lists, and whether to hide unreachable types.
可能执行破坏性操作
输入模式
{'type': 'object', 'required': ['graphId', 'contractVariant', 'include', 'exclude', 'hideUnreachableTypes'], 'properties': {'exclude': {'type': 'array', 'items': {'type': 'string'}}, 'graphId': {'type': 'string'}, 'include': {'type': 'array', 'items': {'type': 'string'}}, 'sourceVariant': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'The graphRef of the variant the contract will be derived from, e.g. `my-graph@production`. Once set, this value cannot be changed.'}, 'initiateLaunch': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'default': True, 'description': 'Whether a launch and schema publish should be initiated after updating configuration. Defaults to `true`.'}, 'contractVariant': {'type': 'string', 'description': 'The name of the contract variant, e.g. `public-api`. Once set, this value cannot be changed.'}, 'hideUnreachableTypes': {'type': 'boolean'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'required': ['upsertContractVariant'], 'properties': {'upsertContractVariant': {'anyOf': [{'type': 'object', 'required': ['contractVariant'], 'properties': {'launchUrl': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The URL of the Studio page for this update's associated launch, if available."}, 'contractVariant': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': "The variant's name (e.g., `staging`)."}}, 'description': 'The updated contract variant'}}}, {'type': 'object', 'required': ['errorMessages'], 'properties': {'errorMessages': {'type': 'array', 'items': {'type': 'string'}, 'description': 'A list of all errors that occurred when attempting to create or update a contract variant.'}}}], 'description': 'Creates a contract schema from a source variant and a set of filter configurations'}}}, {'type': 'null'}], 'description': 'Provides access to mutation fields for modifying a Studio graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}}
PublishGraphSchema
Publish a schema to a graph variant, the same write that `rover graph publish` performs. Use this for a monograph; use PublishSubgraph for one subgraph of a federated graph. Returns a result code, whether the publish succeeded, a human-readable message, and the hash of the published schema. This changes the schema registry and can change what clients see. Run RunSchemaCheck first to see the effect on client operations. Provide the graph ID, the variant name, and the schema as SDL. Optionally provide the git branch and commit to label the publication.
可能执行破坏性操作
输入模式
{'type': 'object', 'required': ['graphId', 'variant', 'schemaDocument'], 'properties': {'branch': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'commit': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'graphId': {'type': 'string'}, 'variant': {'type': 'string'}, 'schemaDocument': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'properties': {'uploadSchema': {'anyOf': [{'type': 'object', 'required': ['code', 'success', 'message'], 'properties': {'code': {'type': 'string', 'description': 'A machine-readable response code that indicates the type of result (e.g., `UPLOAD_SUCCESS` or `NO_CHANGES`)'}, 'message': {'type': 'string', 'description': 'A Human-readable message describing the type of result.'}, 'success': {'type': 'boolean', 'description': 'Whether the schema publish operation succeeded (`true`) or encountered errors (`false`).'}, 'publication': {'anyOf': [{'type': 'object', 'required': ['publishedAt', 'schema'], 'properties': {'schema': {'type': 'object', 'required': ['hash'], 'properties': {'hash': {'oneOf': [{'type': 'string'}, {'type': 'integer'}], 'description': "The GraphQL schema document's SHA256 hash, represented as a hexadecimal string."}}, 'description': 'The schema that was published to the variant.'}, 'publishedAt': {'description': 'ISO 8601, extended format with nanoseconds, Zulu (or "[+-]seconds" as a string or number relative to now)'}}}, {'type': 'null'}], 'description': 'If the publish operation succeeded, this contains its details. Otherwise, this is null.'}}}, {'type': 'null'}], 'description': 'Publish a schema to this variant, either via a document or an introspection query result.'}}}, {'type': 'null'}], 'description': 'Provides access to mutation fields for modifying a Studio graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}}
PublishPersistedQueries
Publish operations to a persisted query list, the same write that `rover persisted-queries publish` performs. A persisted query list is the set of operations a router accepts when it is configured to reject anything else. Operations you do not mention stay in the list unchanged: pass operations to add or replace entries, and remove to drop them. Returns the new revision and the total operation count, or reports that nothing changed. Use GetPersistedQueryListStatus to find the list ID and its current revision. Provide the graph ID and the persisted query list ID.
可能执行破坏性操作
输入模式
{'type': 'object', 'required': ['graphId', 'listId'], 'properties': {'listId': {'type': 'string'}, 'remove': {'anyOf': [{'type': 'array', 'items': {'$ref': '#/definitions/PersistedQueryIdInput'}}, {'type': 'null'}]}, 'graphId': {'type': 'string'}, 'operations': {'anyOf': [{'type': 'array', 'items': {'$ref': '#/definitions/PersistedQueryInput'}}, {'type': 'null'}]}, 'allowOverwrittenOperations': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}]}}, 'definitions': {'OperationType': {'enum': ['MUTATION', 'QUERY', 'SUBSCRIPTION'], 'type': 'string', 'description': '\n\nValues:\nMUTATION: \nQUERY: \nSUBSCRIPTION: '}, 'GraphQLDocument': {'type': 'string', 'description': 'A GraphQL document, such as a schema in SDL syntax.'}, 'PersistedQueryInput': {'type': 'object', 'required': ['body', 'id', 'name', 'type'], 'properties': {'id': {'type': 'string', 'description': "An opaque identifier for this operation. This should map uniquely to an operation body; editing the body should generally result in a new ID. Apollo's tools generally use the lowercase hex SHA256 of the operation body."}, 'body': {'$ref': '#/definitions/GraphQLDocument', 'description': 'The GraphQL document for this operation, including all necessary fragment definitions.'}, 'name': {'type': 'string', 'description': 'A name for the operation. Typically this is the name of the actual GraphQL operation in the body. This does not need to be unique within a Persisted Query List; as a client project evolves and its operations change, multiple operations with the same name (but different body and id) can be published.'}, 'type': {'$ref': '#/definitions/OperationType', 'description': "The operation's type."}, 'clientName': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'An optional client name to associate with the operation. Two operations with the same ID but different client names are treated as distinct operations.'}}, 'description': 'Operations to be published to the Persisted Query List.'}, 'PersistedQueryIdInput': {'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': "An opaque identifier for this operation. For a given client name, this should map uniquely to an operation body; editing the body should generally result in a new ID. Apollo's tools generally use the lowercase hex SHA256 of the operation body."}, 'clientName': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'An optional client name to associate with the operation. Two operations with the same ID but different client names are treated as distinct operations. An operation with the same ID and a null client name is treated as a distinct operation as well.'}}, 'description': 'Full identifier for an operation in a Persisted Query List.'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'required': ['persistedQueryList'], 'properties': {'persistedQueryList': {'type': 'object', 'required': ['publishOperations'], 'properties': {'publishOperations': {'anyOf': [{'type': 'object', 'required': ['unchanged', 'build'], 'properties': {'build': {'type': 'object', 'required': ['revision', 'totalOperationsInList'], 'properties': {'revision': {'type': 'integer', 'description': 'The revision of this Persisted Query List. Revision 0 is the initial empty list; each publish increments the revision by 1.'}, 'totalOperationsInList': {'type': 'integer', 'description': 'The total number of operations in the list after this build. Compare to PersistedQueriesPublish.operationCounts.'}}, 'description': 'The build created by this publish operation.'}, 'unchanged': {'type': 'boolean', 'description': 'Returns `true` if no changes were made by this publish (and no new revision was created). Otherwise, returns `false`.'}}}, {'type': 'object', 'required': ['message'], 'properties': {'message': {'type': 'string', 'description': 'The error message.'}}}, {'type': 'object', 'required': ['message'], 'properties': {'message': {'type': 'string'}}}], 'description': 'Updates this Persisted Query List by publishing a set of operations and removing other operations. Operations not mentioned remain in the list unchanged.'}}, 'description': 'Provides access to mutation fields for modifying a Persisted Query List with the provided ID.'}}}, {'type': 'null'}], 'description': 'Provides access to mutation fields for modifying a Studio graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}}
PublishReadme
Replace the README of a graph variant, the same write that `rover readme publish` performs. The README is the Markdown document shown on the variant's page in GraphOS Studio. The new text replaces the whole README, so read the current one with GetReadme first if you intend to keep any of it. Provide the graph ID, the variant name, and the full README text.
可能执行破坏性操作
输入模式
{'type': 'object', 'required': ['graphId', 'variant', 'readme'], 'properties': {'readme': {'type': 'string', 'description': 'The full new text of the README, as a Markdown-formatted string.'}, 'graphId': {'type': 'string'}, 'variant': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'properties': {'variant': {'anyOf': [{'type': 'object', 'properties': {'updateVariantReadme': {'anyOf': [{'type': 'object', 'required': ['name', 'readme'], 'properties': {'name': {'type': 'string', 'description': "The variant's name (e.g., `staging`)."}, 'readme': {'type': 'object', 'required': ['id', 'content'], 'properties': {'id': {'oneOf': [{'type': 'string'}, {'type': 'integer'}], 'description': "The README's unique ID. `a15177c0-b003-4837-952a-dbfe76062eb1` for the default README"}, 'content': {'type': 'string', 'description': 'The contents of the README in plaintext.'}, 'lastUpdatedTime': {'anyOf': [{'description': 'ISO 8601, extended format with nanoseconds, Zulu (or "[+-]seconds" as a string or number relative to now)'}, {'type': 'null'}], 'description': 'The timestamp when the README was most recently updated. `null` for the default README'}}}}}, {'type': 'null'}], 'description': 'Updates the [README](https://www.apollographql.com/docs/studio/org/graphs/#the-readme-page) of this variant.'}}}, {'type': 'null'}], 'description': 'Make changes to a graph variant.'}}}, {'type': 'null'}], 'description': 'Provides access to mutation fields for modifying a Studio graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}}
PublishSubgraph
Publish a subgraph schema to a variant and start composition, the same write that `rover subgraph publish` performs. Returns whether the subgraph was created or updated, any composition errors, and the launch that started. This changes the schema registry and can change what the router serves. Run RunSubgraphCheck first to see the effect on client operations. Provide the graph ID, the variant name, the subgraph name, and the schema as SDL. Provide the routing URL when you add a subgraph or move its endpoint. Optionally provide a revision label and the git branch and commit.
可能执行破坏性操作
输入模式
{'type': 'object', 'required': ['graphId', 'variant', 'subgraphName', 'sdl'], 'properties': {'sdl': {'type': 'string'}, 'url': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'branch': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'commit': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'graphId': {'type': 'string'}, 'variant': {'type': 'string'}, 'revision': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': ''}, 'subgraphName': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'properties': {'publishSubgraph': {'anyOf': [{'type': 'object', 'required': ['wasCreated', 'wasUpdated', 'updatedGateway', 'subgraphsCreated', 'subgraphsUpdated', 'errors'], 'properties': {'errors': {'type': 'array', 'items': {'anyOf': [{'type': 'object', 'required': ['message', 'locations'], 'properties': {'code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'A machine-readable error code.'}, 'message': {'type': 'string', 'description': 'A human-readable message describing the error.'}, 'locations': {'type': 'array', 'items': {'anyOf': [{'type': 'object', 'required': ['line', 'column'], 'properties': {'line': {'type': 'integer', 'description': 'Line number.'}, 'column': {'type': 'integer', 'description': 'Column number.'}}}, {'type': 'null'}]}, 'description': 'Source locations related to the error.'}}}, {'type': 'null'}]}, 'description': "A list of errors that occurred during composition. Errors mean that Apollo was unable to compose the graph variant's subgraphs into a supergraph schema. If any errors are present, gateways / routers are not updated."}, 'launch': {'anyOf': [{'type': 'object', 'required': ['id', 'status'], 'properties': {'id': {'oneOf': [{'type': 'string'}, {'type': 'integer'}], 'description': 'The unique identifier for this launch.'}, 'status': {'$ref': '#/definitions/LaunchStatus', 'description': "The launch's status. If a launch is superseded, its status remains `LAUNCH_INITIATED`. To check for a superseded launch, use `supersededAt`."}}}, {'type': 'null'}], 'description': 'The Launch result part of this subgraph publish.'}, 'launchUrl': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The URL of the Studio page for this update's associated launch, if available."}, 'wasCreated': {'type': 'boolean', 'description': 'Whether a new subgraph was created as part of this publish.'}, 'wasUpdated': {'type': 'boolean', 'description': 'Whether an implementingService was updated as part of this mutation'}, 'updatedGateway': {'type': 'boolean', 'description': 'Whether this composition result resulted in a new supergraph schema passed to Uplink (`true`), or the build failed for any reason (`false`). For dry runs, this value is `true` if Uplink _would have_ been updated with the result.'}, 'subgraphsCreated': {'type': 'array', 'items': {'type': 'string'}, 'description': 'All subgraphs that were created from this mutation'}, 'subgraphsUpdated': {'type': 'array', 'items': {'type': 'string'}, 'description': 'All subgraphs that were updated from this mutation'}}}, {'type': 'null'}], 'description': 'Publish to a subgraph. If composition is successful, this will update running routers.'}}}, {'type': 'null'}], 'description': 'Provides access to mutation fields for modifying a Studio graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}, 'definitions': {'LaunchStatus': {'enum': ['LAUNCH_COMPLETED', 'LAUNCH_FAILED', 'LAUNCH_INITIATED'], 'type': 'string'}}}
RunSchemaCheck
Start a schema check of a proposed schema against a variant, the same check that `rover graph check` starts. Use this for a monograph or for a whole supergraph schema; use RunSubgraphCheck for one subgraph. The check runs in the background, so this returns a workflow ID and a Studio URL, not a result. Pass the returned workflowID to GetCheckResults to read the outcome. Provide the graph ID, the variant name, and the proposed schema as SDL. Optionally provide the git branch and commit to label the run in Studio.
输入模式
{'type': 'object', 'required': ['graphId', 'variant', 'proposedSchema'], 'properties': {'branch': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'commit': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'graphId': {'type': 'string'}, 'variant': {'type': 'string'}, 'proposedSchema': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'properties': {'variant': {'anyOf': [{'type': 'object', 'required': ['submitCheckSchemaAsync'], 'properties': {'submitCheckSchemaAsync': {'anyOf': [{'type': 'object', 'required': ['workflowID', 'targetURL'], 'properties': {'targetURL': {'type': 'string', 'description': 'The URL of the Apollo Studio page for this check.'}, 'workflowID': {'oneOf': [{'type': 'string'}, {'type': 'integer'}], 'description': 'The unique ID for this execution of schema checks.'}}}, {'type': 'object', 'required': ['message'], 'properties': {'message': {'type': 'string', 'description': 'The error message.'}}}, {'type': 'object', 'required': ['message'], 'properties': {'message': {'type': 'string', 'description': 'The error message.'}}}, {'type': 'object', 'required': ['message'], 'properties': {'message': {'type': 'string', 'description': 'The error message.'}}}, {'type': 'object', 'required': ['message'], 'properties': {'message': {'type': 'string', 'description': 'The error message.'}}}], 'description': '_Asynchronously_ kicks off operation checks for a proposed non-federated\nschema change against its associated graph.\n\nReturns a `CheckRequestSuccess` object with a workflow ID that you can use\nto check status, or an error object if the checks workflow failed to start.\n\nRate limited to 3000 per min. Schema checks cannot be performed on contract variants.'}}}, {'type': 'null'}], 'description': 'Make changes to a graph variant.'}}}, {'type': 'null'}], 'description': 'Provides access to mutation fields for modifying a Studio graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}}
RunSubgraphCheck
Start a schema check of one proposed subgraph schema against a variant, the same check that `rover subgraph check` starts. The check runs in the background, so this returns a workflow ID and a Studio URL, not a result. Pass the returned workflowID to GetCheckResults to read the outcome. Provide the graph ID, the variant name, the subgraph name, and the proposed subgraph schema as SDL. Optionally provide the git branch and commit to label the run in Studio.
输入模式
{'type': 'object', 'required': ['graphId', 'variant', 'subgraphName', 'proposedSchema'], 'properties': {'branch': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'commit': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'graphId': {'type': 'string'}, 'variant': {'type': 'string'}, 'subgraphName': {'type': 'string'}, 'proposedSchema': {'$ref': '#/definitions/GraphQLDocument'}}, 'definitions': {'GraphQLDocument': {'type': 'string', 'description': 'A GraphQL document, such as a schema in SDL syntax.'}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'properties': {'variant': {'anyOf': [{'type': 'object', 'required': ['submitSubgraphCheckAsync'], 'properties': {'submitSubgraphCheckAsync': {'anyOf': [{'type': 'object', 'required': ['workflowID', 'targetURL'], 'properties': {'targetURL': {'type': 'string', 'description': 'The URL of the Apollo Studio page for this check.'}, 'workflowID': {'oneOf': [{'type': 'string'}, {'type': 'integer'}], 'description': 'The unique ID for this execution of schema checks.'}}}, {'type': 'object', 'required': ['message'], 'properties': {'message': {'type': 'string', 'description': 'The error message.'}}}, {'type': 'object', 'required': ['message'], 'properties': {'message': {'type': 'string', 'description': 'The error message.'}}}, {'type': 'object', 'required': ['message'], 'properties': {'message': {'type': 'string', 'description': 'The error message.'}}}, {'type': 'object', 'required': ['message'], 'properties': {'message': {'type': 'string', 'description': 'The error message.'}}}], 'description': '_Asynchronously_ kicks off composition and operation checks for a proposed subgraph schema change against its associated supergraph.\n\nReturns a `CheckRequestSuccess` object with a workflow ID that you can use\nto check status, or an error object if the checks workflow failed to start.\n\nRate limited to 3000 per min. Subgraph checks cannot be performed on contract variants.'}}}, {'type': 'null'}], 'description': 'Make changes to a graph variant.'}}}, {'type': 'null'}], 'description': 'Provides access to mutation fields for modifying a Studio graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}}
ValidateOperations
Validate client GraphQL operations against a variant's published schema and return each problem's type (FAILURE, WARNING, INVALID), code, description, and the name of the operation it came from. This is the same check that `rover client check` runs. Nothing is published and no state changes. Provide the graph ID and the operations, each one a body and an optional name. Optionally name the variant to validate against; the default is "current".
只读 幂等
输入模式
{'type': 'object', 'required': ['graphId', 'operations'], 'properties': {'graphId': {'type': 'string'}, 'variant': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': 'current'}, 'operations': {'type': 'array', 'items': {'$ref': '#/definitions/OperationDocumentInput'}}}, 'definitions': {'OperationDocumentInput': {'type': 'object', 'required': ['body'], 'properties': {'body': {'type': 'string', 'description': 'Operation document body'}, 'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'Operation name'}}}}}
输出模式
{'type': 'object', 'properties': {'data': {'type': 'object', 'properties': {'graph': {'anyOf': [{'type': 'object', 'required': ['validateOperations'], 'properties': {'validateOperations': {'type': 'object', 'required': ['validationResults'], 'properties': {'validationResults': {'type': 'array', 'items': {'type': 'object', 'required': ['type', 'code', 'description', 'operation'], 'properties': {'code': {'$ref': '#/definitions/ValidationErrorCode', 'description': "The validation result's error code"}, 'type': {'$ref': '#/definitions/ValidationErrorType', 'description': 'The type of validation error thrown - warning, failure, or invalid.'}, 'operation': {'type': 'object', 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'Operation name'}}, 'description': 'The operation related to this validation result'}, 'description': {'type': 'string', 'description': 'Description of the validation error'}}}}}}}}, {'type': 'null'}], 'description': 'Provides access to mutation fields for modifying a Studio graph with the provided ID.'}}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['message'], 'properties': {'path': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'integer'}]}}, 'message': {'type': 'string'}, 'locations': {'type': 'array', 'items': {'type': 'object', 'properties': {'line': {'type': 'integer'}, 'column': {'type': 'integer'}}}}, 'extensions': {'type': 'object'}}}}, 'extensions': {'type': 'object'}}, 'definitions': {'ValidationErrorCode': {'enum': ['NON_PARSEABLE_DOCUMENT', 'INVALID_OPERATION', 'DEPRECATED_FIELD'], 'type': 'string'}, 'ValidationErrorType': {'enum': ['FAILURE', 'WARNING', 'INVALID'], 'type': 'string'}}}
已更改
GetOperationMetrics
2026年10月1日 02:44
已更改
GetPersistedQueryListStatus
2026年10月1日 02:44
已添加
GetSubgraphSchema
2026年10月1日 02:44
已添加
PublishSubgraph
2026年10月1日 02:44
已添加
RunSubgraphCheck
2026年10月1日 02:44
已添加
PublishPersistedQueries
2026年10月1日 02:44
已更改
GetLintResults
2026年10月1日 02:44
已更改
GetLaunchHistory
2026年10月1日 02:44
已更改
GetVariantDetails
2026年10月1日 02:44
已更改
GetLatestLaunch
2026年10月1日 02:44
已更改
GetSubgraphMetrics
2026年10月1日 02:44
已添加
PublishContract
2026年10月1日 02:44
已添加
GetGraphSchema
2026年10月1日 02:44
已添加
DeleteSubgraph
2026年10月1日 02:44
已添加
RunSchemaCheck
2026年10月1日 02:44
已更改
GetMyIdentity
2026年10月1日 02:44
已更改
GetTopOperations
2026年10月1日 02:44
已添加
LintSchema
2026年10月1日 02:44
已添加
DeleteGraph
2026年10月1日 02:44
已添加
GetSchemaChecks
2026年10月1日 02:44
已更改
GetClientMetrics
2026年10月1日 02:44
已添加
PublishReadme
2026年10月1日 02:44
已添加
GetReadme
2026年10月1日 02:44
已添加
GetSupergraphSchema
2026年10月1日 02:44
已添加
ValidateOperations
2026年10月1日 02:44
已添加
PublishGraphSchema
2026年10月1日 02:44
已添加
GetContractConfig
2026年10月1日 02:44
已添加
GetCheckResults
2026年10月1日 02:44
已更改
GetLaunch
2026年10月1日 02:44
已更改
GetMyIdentity
2026年9月27日 02:43