1schema {
2 query: Query
3 mutation: Mutation
4}
5
6"""An organization in Apollo Studio. Can have multiple members and graphs."""
7type Organization {
8 auditLogExports: [AuditLogExport!]
9 """Graphs belonging to this organization."""
10 graphs(includeDeleted: Boolean): [Graph!]!
11 """Globally unique identifier, which isn't guaranteed stable (can be changed by administrators)."""
12 id: ID!
13 """Name of the organization, which can change over time and isn't unique."""
14 name: String!
15 """Graphs belonging to this organization."""
16 services(includeDeleted: Boolean): [Graph!]! @deprecated(reason: "Use graphs field instead")
17}
18
19type OrganizationMutation {
20 """Trigger a request for an audit export"""
21 requestAuditExport(actors: [ActorInput!], from: Timestamp!, graphIds: [String!], to: Timestamp!): Organization
22}
23
24"""Represents an actor that performs actions in Apollo Studio. Most actors are either a `USER` or a `GRAPH` (based on a request's provided API key), and they have the corresponding `ActorType`."""
25type Actor {
26 actorId: ID!
27 type: ActorType!
28}
29
30"""Input type to provide when specifying an `Actor` in operation arguments. See also the `Actor` object type."""
31input ActorInput {
32 actorId: ID!
33 type: ActorType!
34}
35
36enum ActorType {
37 ANONYMOUS_USER
38 BACKFILL
39 CRON
40 GRAPH
41 INTERNAL_IDENTITY
42 SYNCHRONIZATION
43 SYSTEM
44 USER
45}
46
47union AddOperationCollectionEntriesResult = AddOperationCollectionEntriesSuccess | PermissionError | ValidationError
48
49type AddOperationCollectionEntriesSuccess {
50 operationCollectionEntries: [OperationCollectionEntry!]!
51}
52
53union AddOperationCollectionEntryResult = OperationCollectionEntry | PermissionError | ValidationError
54
55input AddOperationInput {
56 """The operation's fields."""
57 document: OperationCollectionEntryStateInput!
58 """The operation's name."""
59 name: String!
60}
61
62type AffectedQuery {
63 id: ID!
64 """First 128 characters of query signature for display"""
65 signature: String
66 """Name to display to the user for the operation"""
67 displayName: String
68 """Name provided for the operation, which can be empty string if it is an anonymous operation"""
69 name: String
70 """Determines if this query validates against the proposed schema"""
71 isValid: Boolean
72 """List of changes affecting this query. Returns null if queried from SchemaDiff.changes.affectedQueries.changes"""
73 changes: [ChangeOnOperation!]
74 """Whether this operation was ignored and its severity was downgraded for that reason"""
75 markedAsIgnored: Boolean
76 """Whether the changes were marked as safe and its severity was downgraded for that reason"""
77 markedAsSafe: Boolean
78 """If the operation would be approved if the check ran again. Returns null if queried from SchemaDiff.changes.affectedQueries.alreadyApproved"""
79 alreadyApproved: Boolean
80 """If the operation would be ignored if the check ran again"""
81 alreadyIgnored: Boolean
82}
83
84"""
85Represents an API key that's used to authenticate a
86particular Apollo user or graph.
87"""
88interface ApiKey {
89 """The API key's ID."""
90 id: ID!
91 """The API key's name, for distinguishing it from other keys."""
92 keyName: String
93 """The value of the API key. **This is a secret credential!**"""
94 token: String!
95}
96
97type ApiKeyProvision {
98 apiKey: ApiKey!
99 created: Boolean!
100}
101
102type AuditLogExport {
103 """The list of actors to filter the audit export"""
104 actors: [Identity!]
105 """The time when the audit export was completed"""
106 completedAt: Timestamp
107 """The time when the audit export was reqeusted"""
108 createdAt: Timestamp!
109 """List of URLs to download the audits for the requested range"""
110 downloadUrls: [String!]
111 """The starting point of audits to include in export"""
112 from: Timestamp!
113 """The list of graphs to filter the audit export"""
114 graphs: [Graph!]
115 """The id for the audit export"""
116 id: ID!
117 """The user that initiated the audit export"""
118 requester: User
119 """The status of the audit export"""
120 status: AuditStatus!
121 """The end point of audits to include in export"""
122 to: Timestamp!
123}
124
125enum AuditStatus {
126 CANCELLED
127 COMPLETED
128 EXPIRED
129 FAILED
130 IN_PROGRESS
131 QUEUED
132}
133
134"""The building of a Studio variant (including supergraph composition and any contract filtering) as part of a launch."""
135type Build {
136 """The inputs provided to the build, including subgraph and contract details."""
137 input: BuildInput!
138 """The result of the build. This value is null until the build completes."""
139 result: BuildResult
140}
141
142"""A single error that occurred during the failed execution of a build."""
143type BuildError {
144 code: String
145 locations: [SourceLocation!]!
146 message: String!
147}
148
149"""Contains the details of an executed build that failed."""
150type BuildFailure {
151 """A list of all errors that occurred during the failed build."""
152 errorMessages: [BuildError!]!
153}
154
155union BuildInput = CompositionBuildInput | FilterBuildInput
156
157union BuildResult = BuildFailure | BuildSuccess
158
159"""Contains the details of an executed build that succeeded."""
160type BuildSuccess {
161 """Contains the supergraph and API schemas created by composition."""
162 coreSchema: CoreSchema!
163}
164
165"""A single change that was made to a definition in a schema."""
166type Change {
167 """The severity of the change (e.g., `FAILURE` or `NOTICE`)"""
168 severity: ChangeSeverity!
169 """Indicates the type of change that was made, and to what (e.g., 'TYPE_REMOVED')."""
170 code: String!
171 """Indication of the category of the change (e.g. addition, removal, edit)."""
172 category: ChangeCategory!
173 """A human-readable description of the change."""
174 description: String!
175 affectedQueries: [AffectedQuery!]
176 """Top level node affected by the change."""
177 parentNode: NamedIntrospectionType
178 """
179 Node related to the top level node that was changed, such as a field in an object,
180 a value in an enum or the object of an interface.
181 """
182 childNode: NamedIntrospectionValue
183 """Target arg of change made."""
184 argNode: NamedIntrospectionArg
185}
186
187"""
188Defines a set of categories that a schema change
189can be grouped by.
190"""
191enum ChangeCategory {
192 ADDITION
193 EDIT
194 REMOVAL
195 DEPRECATION
196}
197
198"""
199These schema change codes represent all of the possible changes that can
200occur during the schema diff algorithm.
201"""
202enum ChangeCode {
203 """Field was removed from the type."""
204 FIELD_REMOVED
205 """Type (object or scalar) was removed from the schema."""
206 TYPE_REMOVED
207 """Argument to a field was removed."""
208 ARG_REMOVED
209 """Type is no longer included in the union."""
210 TYPE_REMOVED_FROM_UNION
211 """Field was removed from the input object."""
212 FIELD_REMOVED_FROM_INPUT_OBJECT
213 """Value was removed from the enum."""
214 VALUE_REMOVED_FROM_ENUM
215 """Type no longer implements the interface."""
216 TYPE_REMOVED_FROM_INTERFACE
217 """Non-nullable argument was added to the field."""
218 REQUIRED_ARG_ADDED
219 """Non-nullable field was added to the input object. (Deprecated.)"""
220 NON_NULLABLE_FIELD_ADDED_TO_INPUT_OBJECT
221 """Required field was added to the input object."""
222 REQUIRED_FIELD_ADDED_TO_INPUT_OBJECT
223 """Return type for the field was changed."""
224 FIELD_CHANGED_TYPE
225 """Type of the field in the input object was changed."""
226 FIELD_ON_INPUT_OBJECT_CHANGED_TYPE
227 """
228 Type was changed from one kind to another.
229 Ex: scalar to object or enum to union.
230 """
231 TYPE_CHANGED_KIND
232 """Type of the argument was changed."""
233 ARG_CHANGED_TYPE
234 """Argument was changed from nullable to non-nullable."""
235 ARG_CHANGED_TYPE_OPTIONAL_TO_REQUIRED
236 """A new value was added to the enum."""
237 VALUE_ADDED_TO_ENUM
238 """A new value was added to the enum."""
239 TYPE_ADDED_TO_UNION
240 """Type now implements the interface."""
241 TYPE_ADDED_TO_INTERFACE
242 """Default value added or changed for the argument."""
243 ARG_DEFAULT_VALUE_CHANGE
244 """Nullable argument was added to the field."""
245 OPTIONAL_ARG_ADDED
246 """Nullable field was added to the input type. (Deprecated.)"""
247 NULLABLE_FIELD_ADDED_TO_INPUT_OBJECT
248 """Optional field was added to the input type."""
249 OPTIONAL_FIELD_ADDED_TO_INPUT_OBJECT
250 """Field was added to the type."""
251 FIELD_ADDED
252 """Type was added to the schema."""
253 TYPE_ADDED
254 """Enum was deprecated."""
255 ENUM_DEPRECATED
256 """Enum deprecation was removed."""
257 ENUM_DEPRECATION_REMOVED
258 """Reason for enum deprecation changed."""
259 ENUM_DEPRECATED_REASON_CHANGE
260 """Field was deprecated."""
261 FIELD_DEPRECATED
262 """Field deprecation removed."""
263 FIELD_DEPRECATION_REMOVED
264 """Reason for field deprecation changed."""
265 FIELD_DEPRECATED_REASON_CHANGE
266 """Description was added, removed, or updated for type."""
267 TYPE_DESCRIPTION_CHANGE
268 """Description was added, removed, or updated for field."""
269 FIELD_DESCRIPTION_CHANGE
270 """Description was added, removed, or updated for enum value."""
271 ENUM_VALUE_DESCRIPTION_CHANGE
272 """Description was added, removed, or updated for argument."""
273 ARG_DESCRIPTION_CHANGE
274 """Directive was removed."""
275 DIRECTIVE_REMOVED
276 """Argument to the directive was removed."""
277 DIRECTIVE_ARG_REMOVED
278 """Location of the directive was removed."""
279 DIRECTIVE_LOCATION_REMOVED
280 """Repeatable flag was removed for directive."""
281 DIRECTIVE_REPEATABLE_REMOVED
282 """Non-nullable argument added to directive."""
283 REQUIRED_DIRECTIVE_ARG_ADDED
284}
285
286"""
287Represents the tuple of static information
288about a particular kind of schema change.
289"""
290type ChangeDefinition {
291 code: ChangeCode!
292 defaultSeverity: ChangeSeverity!
293 category: ChangeCategory!
294}
295
296"""An addition made to a Studio variant's changelog after a launch."""
297type ChangelogLaunchResult {
298 createdAt: Timestamp!
299 schemaTagID: ID!
300}
301
302"""Info about a change in the context of an operation it affects"""
303type ChangeOnOperation {
304 """The semantic info about this change, i.e. info about the change that doesn't depend on the operation"""
305 semanticChange: SemanticChange!
306 """Human-readable explanation of the impact of this change on the operation"""
307 impact: String
308}
309
310enum ChangeSeverity {
311 FAILURE
312 NOTICE
313}
314
315"""
316Summary of the changes for a schema diff, computed by placing the changes into categories and then
317counting the size of each category. This categorization can be done in different ways, and
318accordingly there are multiple fields here for each type of categorization.
319
320Note that if an object or interface field is added/removed, there won't be any addition/removal
321changes generated for its arguments or @deprecated usages. If an enum type is added/removed, there
322will be addition/removal changes generated for its values, but not for those values' @deprecated
323usages. Description changes won't be generated for a schema element if that element (or an
324ancestor) was added/removed.
325"""
326type ChangeSummary {
327 """
328 Counts for changes to non-field aspects of objects, input objects, and interfaces,
329 and all aspects of enums, unions, and scalars.
330 """
331 type: TypeChangeSummaryCounts!
332 """Counts for changes to fields of objects, input objects, and interfaces."""
333 field: FieldChangeSummaryCounts!
334 """Counts for all changes."""
335 total: TotalChangeSummaryCounts!
336}
337
338enum ChangeType {
339 FAILURE
340 NOTICE
341}
342
343"""Filter options available when listing checks."""
344input CheckFilterInput {
345 authors: [String!]
346 branches: [String!]
347 subgraphs: [String!]
348 status: CheckFilterInputStatusOption
349 variants: [String!]
350}
351
352"""Options for filtering CheckWorkflows by status"""
353enum CheckFilterInputStatusOption {
354 FAILED
355 PENDING
356 PASSED
357}
358
359"""The result of performing a subgraph check, including all steps."""
360type CheckPartialSchemaResult {
361 """Result of compostion run as part of the overall subgraph check."""
362 compositionValidationResult: CompositionCheckResult!
363 """Overall result of the check. This will be null if composition validation was unsuccessful."""
364 checkSchemaResult: CheckSchemaResult
365 """Whether any modifications were detected in the composed core schema."""
366 coreSchemaModified: Boolean!
367}
368
369"""The possible results of a request to initiate schema checks (either a success object or one of multiple `Error` objects)."""
370union CheckRequestResult = CheckRequestSuccess | InvalidInputError | PermissionError | PlanError
371
372"""Represents a successfully initiated execution of schema checks. This does not indicate the _result_ of the checks, only that they were initiated."""
373type CheckRequestSuccess {
374 """The URL of the Apollo Studio page for this check."""
375 targetURL: String!
376 """The unique ID for this execution of schema checks."""
377 workflowID: ID!
378}
379
380"""Input type to provide when running schema checks asynchronously for a non-federated graph."""
381input CheckSchemaAsyncInput {
382 """Configuration options for the check execution."""
383 config: HistoricQueryParametersInput!
384 """The GitHub context to associate with the check."""
385 gitContext: GitContextInput!
386 graphRef: ID @deprecated(reason: "This field is not required to be sent anymore")
387 """The URL of the GraphQL endpoint that Apollo Sandbox introspected to obtain the proposed schema. Required if `isSandbox` is `true`."""
388 introspectionEndpoint: String
389 """If `true`, the check was initiated by Apollo Sandbox."""
390 isSandbox: Boolean!
391 proposedSchemaDocument: String
392}
393
394"""The result of running schema checks on a graph variant."""
395type CheckSchemaResult {
396 """The schema diff and affected operations generated by the schema check."""
397 diffToPrevious: SchemaDiff!
398 """The URL to view the schema diff in Studio."""
399 targetUrl: String
400}
401
402type CheckWorkflow {
403 """
404 The variant provided as a base to check against. Only the differences from the
405 base schema will be tested in operations checks.
406 """
407 baseVariant: GraphVariant
408 """The timestamp when the check workflow completed."""
409 completedAt: Timestamp
410 id: ID!
411 """The name of the implementing service that was responsible for triggering the validation."""
412 implementingServiceName: String
413 """The timestamp when the check workflow started."""
414 startedAt: Timestamp
415 """Overall status of the workflow, based on the underlying task statuses."""
416 status: CheckWorkflowStatus!
417 """The set of check tasks associated with this workflow, e.g. composition, operations, etc."""
418 tasks: [CheckWorkflowTask!]!
419 """Contextual parameters supplied by the runtime environment where the check was run."""
420 gitContext: GitContext
421 createdAt: Timestamp!
422}
423
424enum CheckWorkflowStatus {
425 FAILED
426 PASSED
427 PENDING
428}
429
430interface CheckWorkflowTask {
431 completedAt: Timestamp
432 createdAt: Timestamp!
433 id: ID!
434 """
435 The status of this task. All tasks start with the PENDING status while initializing. If any
436 prerequisite task fails, then the task status becomes BLOCKED. Otherwise, if all prerequisite
437 tasks pass, then this task runs (still having the PENDING status). Once the task completes, the
438 task status will become either PASSED or FAILED.
439 """
440 status: CheckWorkflowTaskStatus!
441 """A studio UI url to view the details of this check workflow task"""
442 targetURL: String
443 """The workflow that this task belongs to."""
444 workflow: CheckWorkflow!
445}
446
447enum CheckWorkflowTaskStatus {
448 BLOCKED
449 FAILED
450 PASSED
451 PENDING
452}
453
454"""Filter options to exclude by client reference ID, client name, and client version."""
455input ClientInfoFilter {
456 name: String!
457 """Ignored"""
458 referenceID: ID
459 version: String
460}
461
462"""The result of supergraph composition that Studio performed in response to an attempted deletion of a subgraph."""
463type SubgraphRemovalResult {
464 """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."""
465 errors: [SchemaCompositionError]!
466 """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."""
467 updatedGateway: Boolean!
468}
469
470"""The result of supergraph composition that Studio performed in response to an attempted publish of a subgraph."""
471type SubgraphPublicationResult {
472 """The generated composition config, or null if any errors occurred."""
473 compositionConfig: CompositionConfig
474 """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."""
475 errors: [SchemaCompositionError]!
476 """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."""
477 updatedGateway: Boolean!
478 """Whether a new subgraph was created as part of this publish."""
479 wasCreated: Boolean!
480 """The URL of the Studio page for this update's associated launch, if available."""
481 launchUrl: String
482 """Human-readable text describing the launch result of the subgraph publish."""
483 launchCliCopy: String
484}
485
486type CompositionBuildInput {
487 subgraphs: [Subgraph!]!
488 version: String
489}
490
491type CompositionCheckTask implements CheckWorkflowTask {
492 completedAt: Timestamp
493 """
494 Whether the build's output supergraph core schema differs from that of the active publish for
495 the workflow's variant at the time this field executed (NOT at the time the check workflow
496 started).
497 """
498 coreSchemaModified: Boolean!
499 createdAt: Timestamp!
500 id: ID!
501 status: CheckWorkflowTaskStatus!
502 targetURL: String
503 workflow: CheckWorkflow!
504 """
505 An old version of buildResult that returns a very old GraphQL type that generally should be
506 avoided. This field will soon be deprecated.
507 """
508 result: CompositionResult
509}
510
511"""Composition configuration exposed to the gateway."""
512type CompositionConfig {
513 """The resulting API schema's SHA256 hash, represented as a hexadecimal string."""
514 schemaHash: String!
515}
516
517"""The result of supergraph composition that Studio performed."""
518type CompositionPublishResult implements CompositionResult {
519 """The unique ID for this instance of composition."""
520 graphCompositionID: ID!
521 """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."""
522 errors: [SchemaCompositionError!]!
523 """The supergraph SDL generated by composition."""
524 supergraphSdl: GraphQLDocument
525}
526
527"""The result of supergraph composition performed by Apollo Studio, often as the result of a subgraph check or subgraph publish. See individual implementations for more details."""
528interface CompositionResult {
529 """The unique ID for this instance of composition."""
530 graphCompositionID: ID!
531 """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."""
532 errors: [SchemaCompositionError!]!
533 """Supergraph SDL generated by composition."""
534 supergraphSdl: GraphQLDocument
535}
536
537"""The result of composition validation run by Apollo Studio during a subgraph check."""
538type CompositionCheckResult implements CompositionResult {
539 """The unique ID for this instance of composition."""
540 graphCompositionID: ID!
541 """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."""
542 errors: [SchemaCompositionError!]!
543 """The supergraph schema document generated by composition."""
544 supergraphSdl: GraphQLDocument
545}
546
547type ContractVariantUpsertErrors {
548 """A list of all errors that occurred when attempting to create or update a contract variant."""
549 errorMessages: [String!]!
550}
551
552union ContractVariantUpsertResult = ContractVariantUpsertErrors | ContractVariantUpsertSuccess
553
554type ContractVariantUpsertSuccess {
555 """The updated contract variant"""
556 contractVariant: GraphVariant!
557 """Human-readable text describing the launch result of the contract update."""
558 launchCliCopy: String
559 """The URL of the Studio page for this update's associated launch, if available."""
560 launchUrl: String
561}
562
563"""Contains the supergraph and API schemas generated by composition."""
564type CoreSchema {
565 """The composed API schema document."""
566 apiDocument: GraphQLDocument!
567 """The composed supergraph schema document."""
568 coreDocument: GraphQLDocument!
569 """The supergraph schema document's SHA256 hash, represented as a hexadecimal string."""
570 coreHash: String!
571}
572
573union CreateOperationCollectionResult = OperationCollection | PermissionError | ValidationError
574
575"""
576Implement the DateTime<Utc> scalar
577
578The input/output is a string in RFC3339 format.
579"""
580scalar DateTime @specifiedBy(url: "https://datatracker.ietf.org/doc/html/rfc3339")
581
582union DeleteOperationCollectionResult = PermissionError
583
584"""The result of attempting to delete a graph variant."""
585type GraphVariantDeletionResult {
586 """Whether the variant was deleted or not."""
587 deleted: Boolean!
588}
589
590"""The result of a schema checks workflow that was run on a downstream variant as part of checks for the corresponding source variant. Most commonly, these downstream checks are [contract checks](https://www.apollographql.com/docs/studio/contracts#contract-checks)."""
591type DownstreamCheckResult {
592 """Whether the downstream check workflow blocks the upstream check workflow from completing."""
593 blocking: Boolean!
594 """The ID of the graph that the downstream variant belongs to."""
595 downstreamGraphID: String!
596 """The name of the downstream variant."""
597 downstreamVariantName: String!
598 """
599 The downstream checks workflow that this result corresponds to. This value is null
600 if the workflow hasn't been initialized yet, or if the downstream variant was deleted.
601 """
602 downstreamWorkflow: CheckWorkflow
603 """
604 Whether the downstream check workflow is causing the upstream check workflow to fail. This occurs
605 when the downstream check workflow is both blocking and failing. This may be null while the
606 downstream check workflow is pending.
607 """
608 failsUpstreamWorkflow: Boolean
609 """The downstream checks task that this result corresponds to."""
610 workflowTask: DownstreamCheckTask!
611}
612
613type DownstreamCheckTask implements CheckWorkflowTask {
614 completedAt: Timestamp
615 createdAt: Timestamp!
616 id: ID!
617 """
618 A list of results for all downstream checks triggered as part of the source variant's checks workflow.
619 This value is null if the task hasn't been initialized yet, or if the build task fails (the build task is a
620 prerequisite to this task). This value is _not_ null _while_ the task is running. The returned list is empty
621 if the source variant has no downstream variants.
622 """
623 results: [DownstreamCheckResult!]
624 status: CheckWorkflowTaskStatus!
625 targetURL: String
626 workflow: CheckWorkflow!
627}
628
629interface Error {
630 message: String!
631}
632
633"""A single subgraph in a supergraph. Every supergraph managed by Apollo Studio includes at least one subgraph. See https://www.apollographql.com/docs/federation/managed-federation/overview/ for more information."""
634type GraphVariantSubgraph {
635 """The subgraph's name."""
636 name: String!
637 """The URL of the subgraph's GraphQL endpoint."""
638 url: String
639 """The current user-provided version/edition of the subgraph. Typically a Git SHA or docker image ID."""
640 revision: String!
641 """The ID of the graph this subgraph belongs to."""
642 graphID: String!
643 """The name of the graph variant this subgraph belongs to."""
644 graphVariant: String!
645 """The subgraph's current active schema, used in supergraph composition for the the associated variant."""
646 activePartialSchema: SubgraphSchema!
647 """The timestamp when the subgraph was created."""
648 createdAt: Timestamp!
649 """The timestamp when the subgraph was most recently updated."""
650 updatedAt: Timestamp!
651}
652
653"""Container for a list of subgraphs composing a supergraph."""
654type GraphVariantSubgraphs {
655 """The list of underlying subgraphs."""
656 services: [GraphVariantSubgraph!]!
657}
658
659"""Counts of changes at the field level, including objects, interfaces, and input fields."""
660type FieldChangeSummaryCounts {
661 """Number of changes that are additions of fields to object, interface, and input types."""
662 additions: Int!
663 """Number of changes that are removals of fields from object, interface, and input types."""
664 removals: Int!
665 """
666 Number of changes that are field edits. This includes fields changing type and any field
667 deprecation and description changes, but also includes any argument changes and any input object
668 field changes.
669 """
670 edits: Int!
671}
672
673"""Inputs provided to the build for a contract variant, which filters types and fields from a source variant's schema."""
674type FilterBuildInput {
675 """Schema filtering rules for the build, such as tags to include or exclude from the source variant schema."""
676 filterConfig: FilterConfig!
677 """The source variant schema document's SHA256 hash, represented as a hexadecimal string."""
678 schemaHash: String!
679}
680
681type FilterCheckTask implements CheckWorkflowTask {
682 completedAt: Timestamp
683 createdAt: Timestamp!
684 id: ID!
685 status: CheckWorkflowTaskStatus!
686 targetURL: String
687 workflow: CheckWorkflow!
688}
689
690"""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."""
691type FilterConfig {
692 """Tags of schema elements to exclude from the contract schema."""
693 exclude: [String!]!
694 """Tags of schema elements to include in the contract schema."""
695 include: [String!]!
696}
697
698input FilterConfigInput {
699 """A list of tags for schema elements to exclude from the resulting contract schema."""
700 exclude: [String!]!
701 """
702 Whether to hide unreachable objects, interfaces, unions, inputs, enums and scalars from
703 the resulting contract schema. Defaults to `false`.
704 """
705 hideUnreachableTypes: Boolean! = false
706 """A list of tags for schema elements to include in the resulting contract schema."""
707 include: [String!]!
708}
709
710type GitContext {
711 commit: ID
712}
713
714"""Input type to provide when specifying the Git context for a run of schema checks."""
715input GitContextInput {
716 """The Git repository branch used in the check."""
717 branch: String
718 """The ID of the Git commit used in the check."""
719 commit: ID
720 """The username of the user who created the Git commit used in the check."""
721 committer: String
722 """The commit message of the Git commit used in the check."""
723 message: String
724 """The Git repository's remote URL."""
725 remoteUrl: String
726}
727
728"""
729Represents a graph API key, which has permissions scoped to a
730user role for a single Apollo graph.
731"""
732type GraphApiKey implements ApiKey {
733 """The timestamp when the API key was created."""
734 createdAt: Timestamp!
735 """Details of the user or graph that created the API key."""
736 createdBy: Identity
737 """The API key's ID."""
738 id: ID!
739 """The API key's name, for distinguishing it from other keys."""
740 keyName: String
741 """The permission level assigned to the API key upon creation."""
742 role: UserPermission!
743 """The value of the API key. **This is a secret credential!**"""
744 token: String!
745}
746
747"""A union of all containers that can comprise the components of a Studio graph"""
748union GraphImplementors = GraphVariantSubgraphs
749
750"""A GraphQL document, such as the definition of an operation or schema."""
751scalar GraphQLDocument
752
753"""A graph variant"""
754type GraphVariant {
755 """The variant's global identifier in the form `graphID@variant`."""
756 id: ID!
757 router: Router
758 """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."""
759 contractFilterConfig: FilterConfig
760 """
761 A human-readable description of the filter configuration of this contract variant, or null if this isn't a contract
762 variant.
763 """
764 contractFilterConfigDescription: String
765 """The graph that this variant belongs to."""
766 graph: Graph!
767 """Latest approved launch for the variant, and what is served through Uplink."""
768 latestApprovedLaunch: Launch
769 """Latest launch for the variant, whether successful or not."""
770 latestLaunch: Launch
771 """The variant's name (e.g., `staging`)."""
772 name: String!
773 """Which permissions the current user has for interacting with this variant"""
774 permissions: GraphVariantPermissions!
775 readme: Readme!
776 """The variant this variant is derived from. This property currently only exists on contract variants."""
777 sourceVariant: GraphVariant
778 """A list of the saved [operation collections](https://www.apollographql.com/docs/studio/explorer/operation-collections/) associated with this variant."""
779 operationCollections: [OperationCollection!]!
780 """The URL of the variant's GraphQL endpoint for query and mutation operations. For subscription operations, use `subscriptionUrl`."""
781 url: String
782 """The URL of the variant's GraphQL endpoint for subscription operations."""
783 subscriptionUrl: String
784 """The details of the variant's most recent publication."""
785 latestPublication: SchemaPublication
786 """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."""
787 subgraphs(includeDeleted: Boolean! = false): [GraphVariantSubgraph!]
788 """Returns the details of the subgraph with the provided `name`, or null if this variant doesn't include a subgraph with that name."""
789 subgraph(name: ID!): GraphVariantSubgraph
790}
791
792"""Result of looking up a variant by ref"""
793union GraphVariantLookup = GraphVariant | InvalidRefFormat
794
795"""Modifies a variant of a graph, also called a schema tag in parts of our product."""
796type GraphVariantMutation {
797 """
798 _Asynchronously_ kicks off operation checks for a proposed non-federated
799 schema change against its associated graph.
800
801 Returns a `CheckRequestSuccess` object with a workflow ID that you can use
802 to check status, or an error object if the checks workflow failed to start.
803 """
804 submitCheckSchemaAsync(input: CheckSchemaAsyncInput!): CheckRequestResult!
805 """
806 _Asynchronously_ kicks off composition and operation checks for a proposed subgraph schema change against its associated supergraph.
807
808 Returns a `CheckRequestSuccess` object with a workflow ID that you can use
809 to check status, or an error object if the checks workflow failed to start.
810 """
811 submitSubgraphCheckAsync(input: SubgraphCheckAsyncInput!): CheckRequestResult!
812 """Updates the [README](https://www.apollographql.com/docs/studio/org/graphs/#the-readme-page) of this variant."""
813 updateVariantReadme(
814 """The full new text of the README, as a Markdown-formatted string."""
815 readme: String!
816 ): GraphVariant
817 """Delete the variant."""
818 delete: GraphVariantDeletionResult!
819}
820
821"""Individual permissions for the current user when interacting with a particular Studio graph variant."""
822type GraphVariantPermissions {
823 """Whether the currently authenticated user is permitted to manage/update this variant's build configuration (e.g., build pipeline version)."""
824 canManageBuildConfig: Boolean!
825 """Whether the currently authenticated user is permitted to manage/update cloud routers"""
826 canManageCloudRouter: Boolean!
827 """Whether the currently authenticated user is permitted to update variant-level settings for the Apollo Studio Explorer."""
828 canManageExplorerSettings: Boolean!
829 """Whether the currently authenticated user is permitted to publish schemas to this variant."""
830 canPushSchemas: Boolean!
831 """Whether the currently authenticated user is permitted to view this variant's build configuration details (e.g., build pipeline version)."""
832 canQueryBuildConfig: Boolean!
833 """Whether the currently authenticated user is permitted to view details regarding cloud routers"""
834 canQueryCloudRouter: Boolean!
835 """Whether the currently authenticated user is permitted to view cloud router logs"""
836 canQueryCloudRouterLogs: Boolean!
837 """Whether the currently authenticated user is permitted to download schemas associated to this variant."""
838 canQuerySchemas: Boolean!
839 """Whether the currently authenticated user is permitted to update the README for this variant."""
840 canUpdateVariantReadme: Boolean!
841 canCreateCollectionInVariant: Boolean!
842 canShareCollectionInVariant: Boolean!
843}
844
845input HistoricQueryParameters {
846 from: String = "-86400"
847 to: String = "0"
848 """Minimum number of requests within the window for a query to be considered."""
849 queryCountThreshold: Int = 1
850 """
851 Number of requests within the window for a query to be considered, relative to
852 total request count. Expected values are between 0 and 0.05 (minimum 5% of total
853 request volume)
854 """
855 queryCountThresholdPercentage: Float = 0
856 """A list of operation IDs to filter out during validation."""
857 ignoredOperations: [ID!] = null
858 """A list of clients to filter out during validation."""
859 excludedClients: [ClientInfoFilter!] = null
860 """A list of operation names to filter out during validation."""
861 excludedOperationNames: [OperationNameFilterInput!] = null
862 """
863 A list of variants to include in the validation. If no variants are provided
864 then this defaults to the "current" variant along with the base variant. The
865 base variant indicates the schema that generates diff and marks the metrics that
866 are checked for broken queries. We union this base variant with the untagged values('',
867 same as null inside of `in`, and 'current') in this metrics fetch. This strategy
868 supports users who have not tagged their metrics or schema.
869 """
870 includedVariants: [String!] = null
871}
872
873"""Input type to provide when specifying configuration details for schema checks."""
874input HistoricQueryParametersInput {
875 """Clients to be excluded from check."""
876 excludedClients: [ClientInfoFilter!]
877 """Operations to be ignored in this schema check, specified by operation name."""
878 excludedOperationNames: [OperationNameFilterInput!]
879 """Start time for operations to be checked against. Specified as either a) an ISO formatted date/time string or b) a negative number of seconds relative to the time the check request was submitted."""
880 from: String
881 """Operations to be ignored in this schema check, specified by ID."""
882 ignoredOperations: [ID!]
883 """Graph variants to be included in check."""
884 includedVariants: [String!]
885 """Maximum number of queries to be checked against the change."""
886 queryCountThreshold: Int
887 """Only fail check if this percentage of operations would be negatively impacted."""
888 queryCountThresholdPercentage: Float
889 """End time for operations to be checked against. Specified as either a) an ISO formatted date/time string or b) a negative number of seconds relative to the time the check request was submitted."""
890 to: String
891}
892
893"""An identity (such as a `User` or `Graph`) in Apollo Studio. See implementing types for details."""
894interface Identity {
895 """Returns a representation of the identity as an `Actor` type."""
896 asActor: Actor!
897 """The identity's identifier, which is unique among objects of its type."""
898 id: ID!
899 """The identity's human-readable name."""
900 name: String!
901}
902
903type InternalIdentity implements Identity {
904 accounts: [Organization!]!
905 asActor: Actor!
906 email: String
907 id: ID!
908 name: String!
909}
910
911input IntrospectionDirectiveInput {
912 name: String!
913 description: String
914 locations: [IntrospectionDirectiveLocation!]!
915 args: [IntrospectionInputValueInput!]!
916 isRepeatable: Boolean
917}
918
919"""__DirectiveLocation introspection type"""
920enum IntrospectionDirectiveLocation {
921 """Location adjacent to a query operation."""
922 QUERY
923 """Location adjacent to a mutation operation."""
924 MUTATION
925 """Location adjacent to a subscription operation."""
926 SUBSCRIPTION
927 """Location adjacent to a field."""
928 FIELD
929 """Location adjacent to a fragment definition."""
930 FRAGMENT_DEFINITION
931 """Location adjacent to a fragment spread."""
932 FRAGMENT_SPREAD
933 """Location adjacent to an inline fragment."""
934 INLINE_FRAGMENT
935 """Location adjacent to a variable definition."""
936 VARIABLE_DEFINITION
937 """Location adjacent to a schema definition."""
938 SCHEMA
939 """Location adjacent to a scalar definition."""
940 SCALAR
941 """Location adjacent to an object type definition."""
942 OBJECT
943 """Location adjacent to a field definition."""
944 FIELD_DEFINITION
945 """Location adjacent to an argument definition."""
946 ARGUMENT_DEFINITION
947 """Location adjacent to an interface definition."""
948 INTERFACE
949 """Location adjacent to a union definition."""
950 UNION
951 """Location adjacent to an enum definition."""
952 ENUM
953 """Location adjacent to an enum value definition."""
954 ENUM_VALUE
955 """Location adjacent to an input object type definition."""
956 INPUT_OBJECT
957 """Location adjacent to an input object field definition."""
958 INPUT_FIELD_DEFINITION
959}
960
961"""__EnumValue introspection type"""
962input IntrospectionEnumValueInput {
963 name: String!
964 description: String
965 isDeprecated: Boolean!
966 deprecationReason: String
967}
968
969"""__Field introspection type"""
970input IntrospectionFieldInput {
971 name: String!
972 description: String
973 args: [IntrospectionInputValueInput!]!
974 type: IntrospectionTypeInput!
975 isDeprecated: Boolean!
976 deprecationReason: String
977}
978
979"""__Value introspection type"""
980input IntrospectionInputValueInput {
981 name: String!
982 description: String
983 type: IntrospectionTypeInput!
984 defaultValue: String
985 isDeprecated: Boolean
986 deprecationReason: String
987}
988
989"""__Schema introspection type"""
990input IntrospectionSchemaInput {
991 types: [IntrospectionTypeInput!]
992 queryType: IntrospectionTypeRefInput!
993 mutationType: IntrospectionTypeRefInput
994 subscriptionType: IntrospectionTypeRefInput
995 directives: [IntrospectionDirectiveInput!]!
996 description: String
997}
998
999"""__Type introspection type"""
1000input IntrospectionTypeInput {
1001 kind: IntrospectionTypeKind!
1002 name: String
1003 description: String
1004 specifiedByUrl: String
1005 fields: [IntrospectionFieldInput!]
1006 interfaces: [IntrospectionTypeInput!]
1007 possibleTypes: [IntrospectionTypeInput!]
1008 enumValues: [IntrospectionEnumValueInput!]
1009 inputFields: [IntrospectionInputValueInput!]
1010 ofType: IntrospectionTypeInput
1011}
1012
1013enum IntrospectionTypeKind {
1014 """Indicates this type is a scalar."""
1015 SCALAR
1016 """Indicates this type is an object. 'fields' and 'interfaces' are valid fields."""
1017 OBJECT
1018 """
1019 Indicates this type is an interface. 'fields' and 'possibleTypes' are valid
1020 fields
1021 """
1022 INTERFACE
1023 """Indicates this type is a union. 'possibleTypes' is a valid field."""
1024 UNION
1025 """Indicates this type is an enum. 'enumValues' is a valid field."""
1026 ENUM
1027 """Indicates this type is an input object. 'inputFields' is a valid field."""
1028 INPUT_OBJECT
1029 """Indicates this type is a list. 'ofType' is a valid field."""
1030 LIST
1031 """Indicates this type is a non-null. 'ofType' is a valid field."""
1032 NON_NULL
1033}
1034
1035"""Shallow __Type introspection type"""
1036input IntrospectionTypeRefInput {
1037 name: String!
1038 kind: String
1039}
1040
1041"""An error caused by providing invalid input for a task, such as schema checks."""
1042type InvalidInputError {
1043 """The error message."""
1044 message: String!
1045}
1046
1047"""This object is returned when a request to fetch a Studio graph variant provides an invalid graph ref."""
1048type InvalidRefFormat implements Error {
1049 message: String!
1050}
1051
1052"""Represents the complete process of making a set of updates to a deployed graph variant."""
1053type Launch {
1054 """The unique identifier for this launch."""
1055 id: ID!
1056 """The ID of the launch's associated graph."""
1057 graphId: String!
1058 """The name of the launch's associated variant."""
1059 graphVariant: String!
1060 order: OrderOrError!
1061 """The timestamp when the launch was approved."""
1062 approvedAt: Timestamp
1063 """The associated build for this launch (a build includes schema composition and contract filtering). This value is null until the build is initiated."""
1064 build: Build
1065 """The inputs provided to this launch's associated build, including subgraph schemas and contract filters."""
1066 buildInput: BuildInput!
1067 """The timestamp when the launch completed. This value is null until the launch completes."""
1068 completedAt: Timestamp
1069 """The timestamp when the launch was initiated."""
1070 createdAt: Timestamp!
1071 """Contract launches that were triggered by this launch."""
1072 downstreamLaunches: [Launch!]!
1073 """Whether the launch completed."""
1074 isCompleted: Boolean
1075 """Whether the result of the launch has been published to the associated graph and variant. This is always false for a failed launch."""
1076 isPublished: Boolean
1077 """The most recent launch sequence step that has started but not necessarily completed."""
1078 latestSequenceStep: LaunchSequenceStep
1079 """A specific publication of a graph variant pertaining to this launch."""
1080 publication: SchemaPublication
1081 """A list of results from the completed launch. The items included in this list vary depending on whether the launch succeeded, failed, or was superseded."""
1082 results: [LaunchResult!]!
1083 """Cloud router configuration associated with this build event. It will be non-null for any cloud-router variant, and null for any not cloudy variant/graph."""
1084 routerConfig: String
1085 """A list of all serial steps in the launch sequence. This list can change as the launch progresses. For example, a `LaunchCompletedStep` is appended after a launch completes."""
1086 sequence: [LaunchSequenceStep!]!
1087 """A shortened version of `Launch.id` that includes only the first 8 characters."""
1088 shortenedID: String!
1089 """The launch's status. If a launch is superseded, its status remains `LAUNCH_INITIATED`. To check for a superseded launch, use `supersededAt`."""
1090 status: LaunchStatus!
1091 """A list of subgraph changes that are included in this launch."""
1092 subgraphChanges: [SubgraphChange!]
1093 """The timestamp when this launch was superseded by another launch. If an active launch is superseded, it terminates."""
1094 supersededAt: Timestamp
1095 """The launch that superseded this launch, if any. If an active launch is superseded, it terminates."""
1096 supersededBy: Launch
1097 """The source variant launch that caused this launch to be initiated. This value is present only for contract variant launches. Otherwise, it's null."""
1098 upstreamLaunch: Launch
1099}
1100
1101"""Types of results that can be associated with a `Launch`"""
1102union LaunchResult = ChangelogLaunchResult
1103
1104"""The timing details for the build step of a launch."""
1105type LaunchSequenceBuildStep {
1106 """The timestamp when the step completed."""
1107 completedAt: Timestamp
1108 """The timestamp when the step started."""
1109 startedAt: Timestamp
1110}
1111
1112"""The timing details for the checks step of a launch."""
1113type LaunchSequenceCheckStep {
1114 """The timestamp when the step completed."""
1115 completedAt: Timestamp
1116 """The timestamp when the step started."""
1117 startedAt: Timestamp
1118}
1119
1120"""The timing details for the completion step of a launch."""
1121type LaunchSequenceCompletedStep {
1122 """The timestamp when the step (and therefore the launch) completed."""
1123 completedAt: Timestamp
1124}
1125
1126"""The timing details for the initiation step of a launch."""
1127type LaunchSequenceInitiatedStep {
1128 """The timestamp when the step (and therefore the launch) started."""
1129 startedAt: Timestamp
1130}
1131
1132"""The timing details for the publish step of a launch."""
1133type LaunchSequencePublishStep {
1134 """The timestamp when the step completed."""
1135 completedAt: Timestamp
1136 """The timestamp when the step started."""
1137 startedAt: Timestamp
1138}
1139
1140"""Represents the various steps that occur in sequence during a single launch."""
1141union LaunchSequenceStep = LaunchSequenceBuildStep | LaunchSequenceCheckStep | LaunchSequenceCompletedStep | LaunchSequenceInitiatedStep | LaunchSequencePublishStep | LaunchSequenceSupersededStep
1142
1143"""The timing details for the superseded step of a launch. This step occurs only if the launch is superseded by another launch."""
1144type LaunchSequenceSupersededStep {
1145 """The timestamp when the step completed, thereby ending the execution of this launch in favor of the superseding launch."""
1146 completedAt: Timestamp
1147}
1148
1149enum LaunchStatus {
1150 LAUNCH_COMPLETED
1151 LAUNCH_FAILED
1152 LAUNCH_INITIATED
1153}
1154
1155enum LogLevel {
1156 WARN
1157 INFO
1158 ERROR
1159 DEBUG
1160}
1161
1162type LogMessage {
1163 """Timestamp in UTC"""
1164 timestamp: DateTime!
1165 """Log message contents"""
1166 message: String!
1167 """Log level"""
1168 level: LogLevel!
1169}
1170
1171type Mutation {
1172 """Provides access to mutation fields for modifying a Studio graph with the provided ID."""
1173 graph(id: ID!): GraphMutation
1174 """
1175 Provides access to mutation fields for modifying an Apollo user with the
1176 provided ID.
1177 """
1178 user(id: ID!): UserMutation
1179 """Creates an [operation collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/) for a given variant, or creates a [sandbox collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/#sandbox-collections) without an associated variant."""
1180 createOperationCollection(
1181 """The collection's description."""
1182 description: String
1183 """Whether the collection is a [sandbox collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/#sandbox-collections)."""
1184 isSandbox: Boolean!
1185 """Whether the collection is shared across its associated organization."""
1186 isShared: Boolean!
1187 """The minimum role a user needs to edit this collection. Valid values: null, CONSUMER, OBSERVER, DOCUMENTER, CONTRIBUTOR, GRAPH_ADMIN. This value is ignored if `isShared` is `false`. The default value is `GRAPH_ADMIN`."""
1188 minEditRole: UserPermission
1189 """The collection's name."""
1190 name: String!
1191 """The [graph ref](https://www.apollographql.com/docs/rover/conventions/#graph-refs) of the graph variants to associate the collection with."""
1192 variantRefs: [ID!]
1193 ): CreateOperationCollectionResult!
1194 operationCollection(id: ID!): OperationCollectionMutation
1195}
1196
1197"""
1198ISO 8601 combined date and time without timezone.
1199
1200# Examples
1201
1202* `2015-07-01T08:59:60.123`,
1203"""
1204scalar NaiveDateTime
1205
1206type NamedIntrospectionArg {
1207 name: String
1208 description: String
1209}
1210
1211"""
1212The shared fields for a named introspection type. Currently this is returned for the
1213top level value affected by a change. In the future, we may update this
1214type to be an interface, which is extended by the more specific types:
1215scalar, object, input object, union, interface, and enum
1216
1217For an in-depth look at where these types come from, see:
1218https://github.com/DefinitelyTyped/DefinitelyTyped/blob/659eb50d3/types/graphql/utilities/introspectionQuery.d.ts#L31-L37
1219"""
1220type NamedIntrospectionType {
1221 kind: IntrospectionTypeKind
1222 name: String
1223 description: String
1224}
1225
1226"""
1227Introspection values that can be children of other types for changes, such
1228as input fields, objects in interfaces, enum values. In the future, this
1229value could become an interface to allow fields specific to the types
1230returned.
1231"""
1232type NamedIntrospectionValue {
1233 name: String
1234 description: String
1235 printedType: String
1236}
1237
1238"""An error that occurs when a requested object is not found."""
1239type NotFoundError implements Error {
1240 """The error message."""
1241 message: String!
1242}
1243
1244"""A list of saved GraphQL operations."""
1245type OperationCollection {
1246 """The timestamp when the collection was created."""
1247 createdAt: Timestamp!
1248 """The user or other entity that created the collection."""
1249 createdBy: Identity
1250 """The collection's description. A `null` description was never set, and empty string description was set to be empty string by a user, or other entity."""
1251 description: String
1252 id: ID!
1253 """Whether the current user has marked the collection as a favorite."""
1254 isFavorite: Boolean!
1255 """Whether the collection is a [sandbox collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/#sandbox-collections)."""
1256 isSandbox: Boolean!
1257 """Whether the collection is shared across its associated organization."""
1258 isShared: Boolean!
1259 """The timestamp when the collection was most recently updated."""
1260 lastUpdatedAt: Timestamp!
1261 """The user or other entity that most recently updated the collection."""
1262 lastUpdatedBy: Identity
1263 """The minimum role a user needs to edit this collection. Valid values: null, CONSUMER, OBSERVER, DOCUMENTER, CONTRIBUTOR, GRAPH_ADMIN. This value is always `null` if `isShared` is `false`. If `null` when `isShared` is `true`, the minimum role is `GRAPH_ADMIN`."""
1264 minEditRole: UserPermission
1265 """The collection's name."""
1266 name: String!
1267 """Returns the operation in the collection with the specified ID, if any."""
1268 operation(id: ID!): OperationCollectionEntryResult
1269 """A list of the GraphQL operations that belong to the collection."""
1270 operations: [OperationCollectionEntry!]!
1271 """The permissions that the current user has for the collection."""
1272 permissions: OperationCollectionPermissions!
1273}
1274
1275"""A saved operation entry within an Operation Collection."""
1276type OperationCollectionEntry {
1277 """The timestamp when the entry was created."""
1278 createdAt: Timestamp!
1279 """The user or other entity that created the entry."""
1280 createdBy: Identity
1281 """Details of the entry's associated operation, such as its `body` and `variables`."""
1282 currentOperationRevision: OperationCollectionEntryState!
1283 id: ID!
1284 """The timestamp when the entry was most recently updated."""
1285 lastUpdatedAt: Timestamp!
1286 """The user or other entity that most recently updated the entry."""
1287 lastUpdatedBy: Identity
1288 """The entry's name."""
1289 name: String!
1290 """The entry's lexicographical ordering index within its containing collection."""
1291 orderingIndex: String!
1292}
1293
1294"""Provides fields for modifying an operation in a collection."""
1295type OperationCollectionEntryMutation {
1296 """Updates the name of an operation."""
1297 updateName(name: String!): UpdateOperationCollectionEntryResult
1298 """Updates the body, headers, and/or variables of an operation."""
1299 updateValues(operationInput: OperationCollectionEntryStateInput!): UpdateOperationCollectionEntryResult
1300}
1301
1302union OperationCollectionEntryMutationResult = NotFoundError | OperationCollectionEntryMutation | PermissionError
1303
1304"""Possible return values when querying for an entry in an operation collection (either the entry object or an `Error` object)."""
1305union OperationCollectionEntryResult = NotFoundError | OperationCollectionEntry
1306
1307"""The most recent body, variable and header values of a saved operation entry."""
1308type OperationCollectionEntryState {
1309 """The raw body of the entry's GraphQL operation."""
1310 body: String!
1311 """Headers for the entry's GraphQL operation."""
1312 headers: [OperationHeader!]
1313 """Variables for the entry's GraphQL operation, as a JSON string."""
1314 variables: String
1315}
1316
1317"""Fields for creating or modifying an operation collection entry."""
1318input OperationCollectionEntryStateInput {
1319 """The operation's query body."""
1320 body: String!
1321 """The operation's headers."""
1322 headers: [OperationHeaderInput!]
1323 """The operation's variables."""
1324 variables: String
1325}
1326
1327"""Provides fields for modifying an [operation collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/)."""
1328type OperationCollectionMutation {
1329 """Adds an operation to this collection."""
1330 addOperation(name: String!, operationInput: OperationCollectionEntryStateInput!): AddOperationCollectionEntryResult
1331 """Adds operations to this collection."""
1332 addOperations(operations: [AddOperationInput!]!): AddOperationCollectionEntriesResult
1333 """Deletes this operation collection. This also deletes all of the collection's associated operations."""
1334 delete: DeleteOperationCollectionResult
1335 """Deletes an operation from this collection."""
1336 deleteOperation(id: ID!): RemoveOperationCollectionEntryResult
1337 operation(id: ID!): OperationCollectionEntryMutationResult
1338 """Updates the minimum role a user needs to be able to modify this collection."""
1339 setMinEditRole(editRole: UserPermission): UpdateOperationCollectionResult
1340 """Updates this collection's description."""
1341 updateDescription(description: String): UpdateOperationCollectionResult
1342 """Updates whether the current user has marked this collection as a favorite."""
1343 updateIsFavorite(isFavorite: Boolean!): UpdateOperationCollectionResult
1344 """Updates whether this collection is shared across its associated organization."""
1345 updateIsShared(isShared: Boolean!): UpdateOperationCollectionResult
1346 """Updates this operation collection's name."""
1347 updateName(name: String!): UpdateOperationCollectionResult
1348}
1349
1350"""Whether the current user can perform various actions on the associated collection."""
1351type OperationCollectionPermissions {
1352 """Whether the current user can edit operations in the associated collection."""
1353 canEditOperations: Boolean!
1354 """Whether the current user can delete or update the associated collection's metadata, such as its name and description."""
1355 canManage: Boolean!
1356 """Whether the current user can read operations in the associated collection."""
1357 canReadOperations: Boolean!
1358}
1359
1360union OperationCollectionResult = NotFoundError | OperationCollection | PermissionError | ValidationError
1361
1362"""Saved headers on a saved operation."""
1363type OperationHeader {
1364 """The header's name."""
1365 name: String!
1366 """The header's value."""
1367 value: String!
1368}
1369
1370input OperationHeaderInput {
1371 """The header's name."""
1372 name: String!
1373 """The header's value."""
1374 value: String!
1375}
1376
1377"""Options to filter by operation name."""
1378input OperationNameFilterInput {
1379 """name of the operation set by the user and reported alongside metrics"""
1380 name: String!
1381 version: String
1382}
1383
1384type OperationsCheckResult {
1385 id: ID!
1386 """Indication of the success of the change, either failure, warning, or notice."""
1387 checkSeverity: ChangeSeverity!
1388 """Number of operations that were validated during schema diff"""
1389 numberOfCheckedOperations: Int!
1390 """List of schema changes with associated affected clients and operations"""
1391 changes: [Change!]!
1392 """Summary/counts for all changes in diff"""
1393 changeSummary: ChangeSummary!
1394 """Operations affected by all changes in diff"""
1395 affectedQueries: [AffectedQuery!]
1396 """Number of affected query operations that are neither marked as SAFE or IGNORED"""
1397 numberOfAffectedOperations: Int!
1398 createdAt: Timestamp!
1399}
1400
1401type OperationsCheckTask implements CheckWorkflowTask {
1402 completedAt: Timestamp
1403 createdAt: Timestamp!
1404 id: ID!
1405 status: CheckWorkflowTaskStatus!
1406 targetURL: String
1407 workflow: CheckWorkflow!
1408 """
1409 The result of the operations check. This will be null when the task is initializing or running,
1410 or when the build task fails (which is a prerequisite task to this one).
1411 """
1412 result: OperationsCheckResult
1413}
1414
1415type Order {
1416 id: ID!
1417 orderType: OrderType!
1418 status: OrderStatus!
1419 reason: String
1420 logs(first: Int, offset: Int): [LogMessage!]!
1421 router: Router!
1422}
1423
1424union OrderOrError = Order
1425
1426enum OrderStatus {
1427 PENDING
1428 COMPLETED
1429 ROLLING_BACK
1430 ERRORED
1431 SUPERSEDED
1432}
1433
1434enum OrderType {
1435 CREATE_ROUTER
1436 DESTROY_ROUTER
1437 UPDATE_ROUTER
1438}
1439
1440"""The schema for a single published subgraph in Studio."""
1441type SubgraphSchema {
1442 """The subgraph schema document as SDL."""
1443 sdl: String!
1444}
1445
1446"""
1447Input for registering a partial schema to an implementing service.
1448One of the fields must be specified (validated server-side).
1449
1450If a new partialSchemaSDL is passed in, this operation will store it before
1451creating the association.
1452
1453If both the sdl and hash are specified, an error will be thrown if the provided
1454hash doesn't match our hash of the sdl contents. If the sdl field is specified,
1455the hash does not need to be and will be computed server-side.
1456"""
1457input PartialSchemaInput {
1458 """
1459 Contents of the partial schema in SDL syntax, but may reference types
1460 that aren't defined in this document
1461 """
1462 sdl: String
1463 """
1464 Hash of the partial schema to associate; error is thrown if only the hash is
1465 specified and the hash has not been seen before
1466 """
1467 hash: String
1468}
1469
1470"""An error that occurs when the current user doesn't have sufficient permissions to perform an action."""
1471type PermissionError implements Error {
1472 """The error message."""
1473 message: String!
1474}
1475
1476"""An error related to an organization's Apollo Studio plan."""
1477type PlanError {
1478 """The error message."""
1479 message: String!
1480}
1481
1482type Query {
1483 """Returns the root URL of the Apollo Studio frontend."""
1484 frontendUrlRoot: String!
1485 """Returns details of the graph with the provided ID."""
1486 graph(id: ID!): Graph
1487 """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."""
1488 me: Identity
1489 """Returns details of the Studio organization with the provided ID."""
1490 organization(id: ID!): Organization
1491 """Returns details of the Apollo user with the provided ID."""
1492 user(id: ID!): User
1493 """Returns details of a Studio graph variant with the provided graph ref. A graph ref has the format `graphID@variantName` (or just `graphID` for the default variant `current`). Returns null if the graph or variant doesn't exist, or if the graph isn't accessible by the current actor."""
1494 variant(ref: ID!): GraphVariantLookup
1495 """Returns the [operation collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/) for the provided ID."""
1496 operationCollection(id: ID!): OperationCollectionResult!
1497}
1498
1499"""The README documentation for a graph variant, which is displayed in Studio."""
1500type Readme {
1501 """The contents of the README in plaintext."""
1502 content: String!
1503 """The README's unique ID. `a15177c0-b003-4837-952a-dbfe76062eb1` for the default README"""
1504 id: ID!
1505 """The actor that most recently updated the README (usually a `User`). `null` for the default README, or if the `User` was deleted."""
1506 lastUpdatedBy: Identity
1507 """The timestamp when the README was most recently updated. `null` for the default README"""
1508 lastUpdatedTime: Timestamp
1509}
1510
1511union RemoveOperationCollectionEntryResult = OperationCollection | PermissionError
1512
1513type Router {
1514 """
1515 Last time when the Cloud Router was updated
1516
1517 If the Cloud Router was never updated, this value will be null
1518 """
1519 updatedAt: NaiveDateTime
1520 """Current status of the Cloud Router"""
1521 status: RouterStatus!
1522 """Current version of the Cloud Router"""
1523 routerVersion: RouterVersion!
1524 """
1525 URL where the Cloud Router can be found
1526
1527 This will be null if the Cloud Router is in a deleted status
1528 """
1529 routerUrl: String
1530 """Retrieves a specific Order related to this Cloud Router"""
1531 order(orderId: ID!): Order
1532 """Retrieves all Orders related to this Cloud Router"""
1533 orders(first: Int, offset: Int): [Order!]!
1534 """Return the list of secrets for this Cloud Router with their hash values"""
1535 secrets: [Secret!]!
1536}
1537
1538enum RouterStatus {
1539 CREATING
1540 UPDATING
1541 DELETING
1542 ROLLING_BACK
1543 RUNNING
1544 DELETED
1545}
1546
1547type RouterVersion {
1548 version: String!
1549 core: String!
1550 build: String!
1551 status: Status!
1552 configVersion: String!
1553 configSchema: String!
1554}
1555
1556"""A GraphQL schema document and associated metadata."""
1557type Schema {
1558 """The GraphQL schema document's SHA256 hash, represented as a hexadecimal string."""
1559 hash: ID!
1560 """The GraphQL schema document."""
1561 document: GraphQLDocument!
1562}
1563
1564"""An error that occurred while running schema composition on a set of subgraph schemas."""
1565type SchemaCompositionError {
1566 """A human-readable message describing the error."""
1567 message: String!
1568 """Source locations related to the error."""
1569 locations: [SourceLocation]!
1570 """A machine-readable error code."""
1571 code: String
1572}
1573
1574"""The result of computing the difference between two schemas, usually as part of schema checks."""
1575type SchemaDiff {
1576 """Indicates the overall safety of the changes included in the diff, based on operation history (e.g., `FAILURE` or `NOTICE`)."""
1577 severity: ChangeSeverity!
1578 """A list of all schema changes in the diff, including their severity."""
1579 changes: [Change!]!
1580 """Numeric summaries for each type of change in the diff."""
1581 changeSummary: ChangeSummary!
1582 """Operations affected by all changes in the diff."""
1583 affectedQueries: [AffectedQuery!]
1584 """The number of GraphQL operations that were validated during the check."""
1585 numberOfCheckedOperations: Int
1586 """The number of GraphQL operations affected by the diff's changes that are neither marked as safe nor ignored."""
1587 numberOfAffectedOperations: Int!
1588}
1589
1590"""Contains details for an individual publication of an individual graph variant."""
1591type SchemaPublication {
1592 """
1593 The variant that was published to."
1594 """
1595 variant: GraphVariant!
1596 """The schema that was published to the variant."""
1597 schema: Schema!
1598 """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."""
1599 compositionResult: CompositionResult
1600 """The timestamp when the variant was published to."""
1601 publishedAt: Timestamp!
1602 """A schema diff comparing against the schema from the most recent previous successful publication."""
1603 diffToPrevious: SchemaDiff
1604}
1605
1606type Secret {
1607 createdAt: DateTime!
1608 name: String!
1609 hash: String!
1610}
1611
1612type SemanticChange {
1613 """Semantic metadata about the type of change"""
1614 definition: ChangeDefinition!
1615 """Top level node affected by the change"""
1616 parentNode: NamedIntrospectionType
1617 """
1618 Node related to the top level node that was changed, such as a field in an object,
1619 a value in an enum or the object of an interface
1620 """
1621 childNode: NamedIntrospectionValue
1622 """Target arg of change made."""
1623 argNode: NamedIntrospectionArg
1624}
1625
1626"""
1627A graph in Apollo Studio represents a graph in your organization.
1628Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production).
1629Each variant has its own GraphQL schema, which means schemas can differ between environments.
1630"""
1631type Graph implements Identity {
1632 """The organization that this graph belongs to."""
1633 account: Organization
1634 """A list of the graph API keys that are active for this graph."""
1635 apiKeys: [GraphApiKey!]
1636 """Provides a view of the graph as an `Actor` type."""
1637 asActor: Actor!
1638 """Get a check workflow for this graph by its ID"""
1639 checkWorkflow(id: ID!): CheckWorkflow
1640 """The graph's globally unique identifier."""
1641 id: ID!
1642 """Permissions of the current user in this graph."""
1643 myRole: UserPermission
1644 name: String!
1645 """Describes the permissions that the active user has for this graph."""
1646 roles: GraphRoles
1647 """The graph's name."""
1648 title: String!
1649 """
1650 Provides details of the graph variant with the provided `name`, if a variant
1651 with that name exists for this graph. Otherwise, returns null.
1652
1653 For a list of _all_ variants associated with a graph, use `Graph.variants` instead.
1654 """
1655 variant(name: String!): GraphVariant
1656 """A list of the variants for this graph."""
1657 variants: [GraphVariant!]!
1658 """Get a GraphQL document by hash"""
1659 document(hash: SHA256): GraphQLDocument
1660 """Get check workflows for this graph ordered by creation time, most recent first."""
1661 checkWorkflows(limit: Int! = 100, filter: CheckFilterInput): [CheckWorkflow!]!
1662}
1663
1664"""Provides access to mutation fields for managing Studio graphs and subgraphs."""
1665type GraphMutation {
1666 """Generates a new graph API key for this graph with the specified permission level."""
1667 newKey(keyName: String, role: UserPermission! = GRAPH_ADMIN): GraphApiKey!
1668 """Deletes the existing graph API key with the provided ID, if any."""
1669 removeKey(
1670 """API key ID"""
1671 id: ID!
1672 ): Void
1673 """Sets a new name for the graph API key with the provided ID, if any. This does not invalidate the key or change its value."""
1674 renameKey(id: ID!, newKeyName: String): GraphApiKey
1675 """Creates a contract schema from a source variant and a set of filter configurations"""
1676 upsertContractVariant(
1677 """The name of the contract variant, e.g. `public-api`. Once set, this value cannot be changed."""
1678 contractVariantName: String!
1679 """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."""
1680 filterConfig: FilterConfigInput!
1681 """Whether a launch and schema publish should be initiated after updating configuration. Defaults to `true`."""
1682 initiateLaunch: Boolean! = true
1683 """The graphRef of the variant the contract will be derived from, e.g. `my-graph@production`. Once set, this value cannot be changed."""
1684 sourceVariant: String
1685 ): ContractVariantUpsertResult!
1686 """Make changes to a graph variant."""
1687 variant(name: String!): GraphVariantMutation
1688 """Publish a schema to this variant, either via a document or an introspection query result."""
1689 uploadSchema(schema: IntrospectionSchemaInput, schemaDocument: String, tag: String!, historicParameters: HistoricQueryParameters, overrideComposedSchema: Boolean! = false, errorOnBadRequest: Boolean! = true, gitContext: GitContextInput): SchemaPublicationResult
1690 """
1691 Checks a proposed schema against the schema that has been published to
1692 a particular variant, using metrics corresponding to `historicParameters`.
1693 Callers can set `historicParameters` directly or rely on defaults set in the
1694 graph's check configuration (7 days by default).
1695 If they do not set `historicParameters` but set `useMaximumRetention`,
1696 validation will use the maximum retention the graph has access to.
1697 """
1698 checkSchema(
1699 """
1700 Only one of proposedSchema, proposedSchemaDocument, and proposedSchemaHash
1701 may be specified
1702 """
1703 proposedSchema: IntrospectionSchemaInput
1704 proposedSchemaDocument: String
1705 proposedSchemaHash: String
1706 baseSchemaTag: String = "current"
1707 gitContext: GitContextInput
1708 historicParameters: HistoricQueryParameters
1709 useMaximumRetention: Boolean
1710 isSandboxCheck: Boolean! = false
1711 """If this check is triggered for an sdl fetched using introspection, this is the endpoint where that schema was being served."""
1712 introspectionEndpoint: String
1713 """Deprecated and ignored."""
1714 frontend: String
1715 ): CheckSchemaResult!
1716 """Publish to a subgraph. If composition is successful, this will update running routers."""
1717 publishSubgraph(graphVariant: String!, name: String!, url: String, revision: String!, activePartialSchema: PartialSchemaInput!, gitContext: GitContextInput): SubgraphPublicationResult
1718 """Removes a subgraph. If composition is successful, this will update running routers."""
1719 removeImplementingServiceAndTriggerComposition(
1720 graphVariant: String!
1721 name: String!
1722 """Do not remove the service, but recompose without it and report any errors."""
1723 dryRun: Boolean! = false
1724 ): SubgraphRemovalResult!
1725 """
1726 Checks a proposed subgraph schema change against a published subgraph.
1727 If the proposal composes successfully, perform a usage check for the resulting supergraph schema.
1728 """
1729 checkPartialSchema(
1730 """The name of the graph variant to run the check against."""
1731 graphVariant: String!
1732 """Name of the implementing service to validate the partial schema against"""
1733 implementingServiceName: String!
1734 """The partial schema to validate against an implementing service"""
1735 partialSchema: PartialSchemaInput!
1736 gitContext: GitContextInput
1737 historicParameters: HistoricQueryParameters
1738 """Deprecated and ignored."""
1739 frontend: String
1740 """
1741 Whether to use the maximum retention for historical validation. This only takes
1742 effect if historicParameters is null.
1743 """
1744 useMaximumRetention: Boolean
1745 isSandboxCheck: Boolean! = false
1746 """If this check is triggered for an sdl fetched using introspection, this is the endpoint where that schema was being served."""
1747 introspectionEndpoint: String
1748 ): CheckPartialSchemaResult!
1749}
1750
1751"""Individual permissions for the current user when interacting with a particular Studio graph."""
1752type GraphRoles {
1753 """Whether the currently authenticated user is permitted to perform schema checks (i.e., run `rover (sub)graph check`)."""
1754 canCheckSchemas: Boolean!
1755 """Whether the currently authenticated user is permitted to create new graph variants."""
1756 canCreateVariants: Boolean!
1757 """Whether the currently authenticated user is permitted to delete the graph in question"""
1758 canDelete: Boolean!
1759 """Whether the currently authenticated user is permitted to manage user access to the graph in question."""
1760 canManageAccess: Boolean!
1761 """Whether the currently authenticated user is permitted to manage the build configuration (e.g., build pipeline version)."""
1762 canManageBuildConfig: Boolean!
1763 """Whether the currently authenticated user is permitted to manage third-party integrations (e.g., Datadog forwarding)."""
1764 canManageIntegrations: Boolean!
1765 """Whether the currently authenticated user is permitted to manage graph-level API keys."""
1766 canManageKeys: Boolean!
1767 """Whether the currently authenticated user is permitted to perform basic administration of variants (e.g., make a variant public)."""
1768 canManageVariants: Boolean!
1769 """Whether the currently authenticated user is permitted to view details about the build configuration (e.g. build pipeline version)."""
1770 canQueryBuildConfig: Boolean!
1771 """Whether the currently authenticated user is permitted to view details of the check configuration for this graph."""
1772 canQueryCheckConfiguration: Boolean!
1773 """Whether the currently authenticated user is permitted to view which subgraphs the graph is composed of."""
1774 canQueryImplementingServices: Boolean!
1775 """Whether the currently authenticated user is permitted to download schemas owned by this graph."""
1776 canQuerySchemas: Boolean!
1777 """Whether the currently authenticated user is permitted to register operations (i.e. `apollo client:push`) for this graph."""
1778 canRegisterOperations: Boolean!
1779 """Whether the currently authenticated user is permitted to make updates to the check configuration for this graph."""
1780 canWriteCheckConfiguration: Boolean!
1781}
1782
1783"""A SHA-256 hash, represented as a lowercase hexadecimal string."""
1784scalar SHA256
1785
1786"""A location in a source code file."""
1787type SourceLocation {
1788 """Column number."""
1789 column: Int!
1790 """Line number."""
1791 line: Int!
1792}
1793
1794enum Status {
1795 STABLE
1796 NEXT
1797 DEPRECATED
1798}
1799
1800"""A subgraph in a federated Studio supergraph."""
1801type Subgraph {
1802 """The subgraph schema document's SHA256 hash, represented as a hexadecimal string."""
1803 hash: String!
1804 """The subgraph's registered name."""
1805 name: String!
1806 """The number of fields in this subgraph"""
1807 numberOfFields: Int
1808 """The number of types in this subgraph"""
1809 numberOfTypes: Int
1810 """The subgraph's routing URL, provided to gateways that use managed federation."""
1811 routingURL: String!
1812 """Timestamp of when the subgraph was published."""
1813 updatedAt: Timestamp
1814}
1815
1816"""A change made to a subgraph as part of a launch."""
1817type SubgraphChange {
1818 """The subgraph's name."""
1819 name: ID!
1820 """The type of change that was made."""
1821 type: SubgraphChangeType!
1822}
1823
1824enum SubgraphChangeType {
1825 ADDITION
1826 DELETION
1827 MODIFICATION
1828}
1829
1830"""Input type to provide when running schema checks asynchronously for a federated supergraph."""
1831input SubgraphCheckAsyncInput {
1832 """Configuration options for the check execution."""
1833 config: HistoricQueryParametersInput!
1834 """The GitHub context to associate with the check."""
1835 gitContext: GitContextInput!
1836 """The graph ref of the Studio graph and variant to run checks against (such as `my-graph@current`)."""
1837 graphRef: ID
1838 """The URL of the GraphQL endpoint that Apollo Sandbox introspected to obtain the proposed schema. Required if `isSandbox` is `true`."""
1839 introspectionEndpoint: String
1840 """If `true`, the check was initiated by Apollo Sandbox."""
1841 isSandbox: Boolean!
1842 """The proposed subgraph schema to perform checks with."""
1843 proposedSchema: GraphQLDocument!
1844 """The name of the subgraph to check schema changes for."""
1845 subgraphName: String!
1846}
1847
1848"""ISO 8601, extended format with nanoseconds, Zulu (or "[+-]seconds" as a string or number relative to now)"""
1849scalar Timestamp
1850
1851"""Counts of changes."""
1852type TotalChangeSummaryCounts {
1853 """
1854 Number of changes that are additions. This includes adding types, adding fields to object, input
1855 object, and interface types, adding values to enums, adding members to interfaces and unions, and
1856 adding arguments.
1857 """
1858 additions: Int!
1859 """
1860 Number of changes that are removals. This includes removing types, removing fields from object,
1861 input object, and interface types, removing values from enums, removing members from interfaces
1862 and unions, and removing arguments. This also includes removing @deprecated usages.
1863 """
1864 removals: Int!
1865 """
1866 Number of changes that are edits. This includes types changing kind, fields and arguments
1867 changing type, arguments changing default value, and any description changes. This also includes
1868 edits to @deprecated reason strings.
1869 """
1870 edits: Int!
1871 """Number of changes that are new usages of the @deprecated directive."""
1872 deprecations: Int!
1873}
1874
1875"""Counts of changes at the type level, including interfaces, unions, enums, scalars, input objects, etc."""
1876type TypeChangeSummaryCounts {
1877 """Number of changes that are additions of types."""
1878 additions: Int!
1879 """Number of changes that are removals of types."""
1880 removals: Int!
1881 """
1882 Number of changes that are edits. This includes types changing kind and any type description
1883 changes, but also includes adding/removing values from enums, adding/removing members from
1884 interfaces and unions, and any enum value deprecation and description changes.
1885 """
1886 edits: Int!
1887}
1888
1889union UpdateOperationCollectionEntryResult = OperationCollectionEntry | PermissionError | ValidationError
1890
1891union UpdateOperationCollectionResult = OperationCollection | PermissionError | ValidationError
1892
1893"""Describes the result of publishing a schema to a graph variant."""
1894type SchemaPublicationResult {
1895 """A machine-readable response code that indicates the type of result (e.g., `UPLOAD_SUCCESS` or `NO_CHANGES`)"""
1896 code: String!
1897 """Whether the schema publish operation succeeded (`true`) or encountered errors (`false`)."""
1898 success: Boolean!
1899 """A Human-readable message describing the type of result."""
1900 message: String!
1901 """If the publish operation succeeded, this contains its details. Otherwise, this is null."""
1902 publication: SchemaPublication
1903}
1904
1905"""A registered Apollo Studio user."""
1906type User implements Identity {
1907 """Returns a list of all active user API keys for the user."""
1908 apiKeys(includeCookies: Boolean = false): [UserApiKey!]!
1909 """Returns a representation of this user as an `Actor` type. Useful when determining which actor (usually a `User` or `Graph`) performed a particular action in Studio."""
1910 asActor: Actor!
1911 """The user's unique ID."""
1912 id: ID!
1913 """A list of the user's memberships in Apollo Studio organizations."""
1914 memberships: [UserMembership!]!
1915 """The user's first and last name."""
1916 name: String!
1917}
1918
1919"""
1920Represents a user API key, which has permissions identical to
1921its associated Apollo user.
1922"""
1923type UserApiKey implements ApiKey {
1924 """The API key's ID."""
1925 id: ID!
1926 """The API key's name, for distinguishing it from other keys."""
1927 keyName: String
1928 """The value of the API key. **This is a secret credential!**"""
1929 token: String!
1930}
1931
1932"""A single user's membership in a single Apollo Studio organization."""
1933type UserMembership {
1934 """The organization that the user belongs to."""
1935 account: Organization!
1936 """The timestamp when the user was added to the organization."""
1937 createdAt: Timestamp!
1938 """The user's permission level within the organization."""
1939 permission: UserPermission!
1940 """The user that belongs to the organization."""
1941 user: User!
1942}
1943
1944type UserMutation {
1945 """Creates a new user API key for this user."""
1946 newKey(keyName: String!): UserApiKey!
1947 """
1948 If this user has no active user API keys, this creates one for the user.
1949
1950 If this user has at least one active user API key, this returns one of those keys at random and does _not_ create a new key.
1951 """
1952 provisionKey(keyName: String! = "add-a-name"): ApiKeyProvision
1953 """Deletes the user API key with the provided ID, if any."""
1954 removeKey(
1955 """API key ID"""
1956 id: ID!
1957 ): Void
1958 """Sets a new name for the user API key with the provided ID, if any. This does not invalidate the key or change its value."""
1959 renameKey(id: ID!, newKeyName: String): UserApiKey
1960}
1961
1962enum UserPermission {
1963 BILLING_MANAGER
1964 CONSUMER
1965 CONTRIBUTOR
1966 DOCUMENTER
1967 GRAPH_ADMIN
1968 LEGACY_GRAPH_KEY
1969 OBSERVER
1970 ORG_ADMIN
1971}
1972
1973"""An error that occurs when an operation contains invalid user input."""
1974type ValidationError implements Error {
1975 """The error's details."""
1976 message: String!
1977}
1978
1979"""Always null"""
1980scalar Void