picked 0.0.101-next.2 → 0.0.101
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -12
- package/docs/explanation/conditions-and-the-logic-engine.md +94 -0
- package/docs/explanation/content-references.md +99 -0
- package/docs/explanation/feature-flag-allocation.md +218 -0
- package/docs/explanation/how-picked-works.md +124 -0
- package/docs/explanation/how-pickedql-works.md +76 -0
- package/docs/explanation/pages-and-flows.md +64 -0
- package/docs/explanation/the-content-model.md +87 -0
- package/docs/explanation/the-two-apis.md +68 -0
- package/docs/explanation/why-server-side-rendering.md +76 -0
- package/docs/explanation/workspaces-and-versions.md +71 -0
- package/docs/how-to/add-a-step-field-or-action.md +56 -0
- package/docs/how-to/analytics/index.md +324 -0
- package/docs/how-to/archive-or-delete-a-workspace.md +59 -0
- package/docs/how-to/authenticate-the-cli.md +101 -0
- package/docs/how-to/authenticate-with-a-magic-link.md +56 -0
- package/docs/how-to/authenticate-with-a-password.md +68 -0
- package/docs/how-to/authenticate-with-an-api-key.md +60 -0
- package/docs/how-to/authenticate-with-oauth.md +49 -0
- package/docs/how-to/build-a-flow.md +106 -0
- package/docs/how-to/call-an-external-api-from-a-workflow.md +116 -0
- package/docs/how-to/connect-the-mcp-server.md +46 -0
- package/docs/how-to/create-a-content-entry.md +58 -0
- package/docs/how-to/create-a-project.md +40 -0
- package/docs/how-to/create-an-experience.md +51 -0
- package/docs/how-to/create-and-revoke-an-api-key.md +54 -0
- package/docs/how-to/debug-with-the-chrome-extension.md +57 -0
- package/docs/how-to/define-a-page-layout.md +54 -0
- package/docs/how-to/fill-and-publish-a-page.md +82 -0
- package/docs/how-to/install-the-gtm-template.md +84 -0
- package/docs/how-to/install-the-sdk.md +93 -0
- package/docs/how-to/install-the-vite-plugin.md +69 -0
- package/docs/how-to/invite-and-remove-members.md +45 -0
- package/docs/how-to/point-one-entry-at-another.md +75 -0
- package/docs/how-to/preview-a-workspace.md +39 -0
- package/docs/how-to/publish-a-workspace.md +42 -0
- package/docs/how-to/read-a-feature-flag.md +113 -0
- package/docs/how-to/read-a-referenced-entry.md +109 -0
- package/docs/how-to/register-a-component.md +55 -0
- package/docs/how-to/register-an-action-handler.md +85 -0
- package/docs/how-to/register-an-api-that-uses-oauth2.md +107 -0
- package/docs/how-to/render-a-step-form.md +131 -0
- package/docs/how-to/render-an-unpublished-preview.md +41 -0
- package/docs/how-to/retry-a-failed-call-with-a-loop.md +81 -0
- package/docs/how-to/reuse-a-section.md +64 -0
- package/docs/how-to/reuse-a-step-field-or-action.md +39 -0
- package/docs/how-to/roll-back-a-published-version.md +39 -0
- package/docs/how-to/run-an-ab-test.md +59 -0
- package/docs/how-to/run-code-on-a-form-submission.md +125 -0
- package/docs/how-to/server-render-a-page.md +81 -0
- package/docs/how-to/set-a-content-security-policy.md +32 -0
- package/docs/how-to/set-up-mfa.md +126 -0
- package/docs/how-to/switch-workspaces.md +122 -0
- package/docs/how-to/upload-and-use-an-asset.mdx +87 -0
- package/docs/how-to/validate-a-field.md +52 -0
- package/docs/how-to/wait-for-an-action-response.md +182 -0
- package/docs/how-to/write-a-condition.md +57 -0
- package/docs/how-to/write-a-predicate.md +60 -0
- package/docs/index.md +59 -0
- package/docs/reference/dashboard/actions.mdx +65 -0
- package/docs/reference/dashboard/api-keys.mdx +47 -0
- package/docs/reference/dashboard/conditions.mdx +51 -0
- package/docs/reference/dashboard/content/asset-library.mdx +74 -0
- package/docs/reference/dashboard/content/blocks.mdx +66 -0
- package/docs/reference/dashboard/content/content-entries.mdx +109 -0
- package/docs/reference/dashboard/content/models.mdx +119 -0
- package/docs/reference/dashboard/content/pages.mdx +72 -0
- package/docs/reference/dashboard/experiences.mdx +61 -0
- package/docs/reference/dashboard/external-apis.md +182 -0
- package/docs/reference/dashboard/features.mdx +165 -0
- package/docs/reference/dashboard/fields.mdx +120 -0
- package/docs/reference/dashboard/flow-builder/canvas.mdx +58 -0
- package/docs/reference/dashboard/flow-builder/condition-builder.md +69 -0
- package/docs/reference/dashboard/flow-builder/keyboard-shortcuts.md +72 -0
- package/docs/reference/dashboard/flow-builder/nodes.md +74 -0
- package/docs/reference/dashboard/labels.md +321 -0
- package/docs/reference/dashboard/lead-search.md +235 -0
- package/docs/reference/dashboard/projects.mdx +53 -0
- package/docs/reference/dashboard/reports.mdx +53 -0
- package/docs/reference/dashboard/steps.mdx +47 -0
- package/docs/reference/dashboard/team-management.md +38 -0
- package/docs/reference/dashboard/workflow-runs.md +157 -0
- package/docs/reference/dashboard/workflow-templates.md +182 -0
- package/docs/reference/dashboard/workflow-test-runs.md +85 -0
- package/docs/reference/dashboard/workspace-versioning.mdx +42 -0
- package/docs/reference/dashboard/workspaces.mdx +91 -0
- package/docs/reference/delivery-api/experience-content.md +152 -0
- package/docs/reference/delivery-api/index.md +45 -0
- package/docs/reference/delivery-api/preview-caching-crawling.md +79 -0
- package/docs/reference/delivery-api/project-config.md +65 -0
- package/docs/reference/delivery-api/workspace-schema.md +107 -0
- package/docs/reference/glossary.md +201 -0
- package/docs/reference/management-api/authentication.md +87 -0
- package/docs/reference/management-api/authorization-and-scopes.md +291 -0
- package/docs/reference/management-api/error-handling.md +232 -0
- package/docs/reference/management-api/pagination.md +192 -0
- package/docs/reference/management-api/schema/action.md +261 -0
- package/docs/reference/management-api/schema/analytics-session.md +363 -0
- package/docs/reference/management-api/schema/analytics.md +73 -0
- package/docs/reference/management-api/schema/api-key.md +170 -0
- package/docs/reference/management-api/schema/auth.md +1177 -0
- package/docs/reference/management-api/schema/cms-fields.md +954 -0
- package/docs/reference/management-api/schema/cms-models.md +1155 -0
- package/docs/reference/management-api/schema/common.md +362 -0
- package/docs/reference/management-api/schema/condition.md +254 -0
- package/docs/reference/management-api/schema/design-system.md +199 -0
- package/docs/reference/management-api/schema/experience.md +1098 -0
- package/docs/reference/management-api/schema/external-api.md +637 -0
- package/docs/reference/management-api/schema/feature.md +350 -0
- package/docs/reference/management-api/schema/feedback.md +103 -0
- package/docs/reference/management-api/schema/field.md +400 -0
- package/docs/reference/management-api/schema/index.md +243 -0
- package/docs/reference/management-api/schema/integration.md +272 -0
- package/docs/reference/management-api/schema/label.md +349 -0
- package/docs/reference/management-api/schema/lead.md +340 -0
- package/docs/reference/management-api/schema/mcp-server.md +299 -0
- package/docs/reference/management-api/schema/metric.md +223 -0
- package/docs/reference/management-api/schema/operation.md +96 -0
- package/docs/reference/management-api/schema/organization.md +749 -0
- package/docs/reference/management-api/schema/project.md +607 -0
- package/docs/reference/management-api/schema/report.md +243 -0
- package/docs/reference/management-api/schema/saved-view.md +288 -0
- package/docs/reference/management-api/schema/shopify.md +795 -0
- package/docs/reference/management-api/schema/step.md +273 -0
- package/docs/reference/management-api/schema/tenant-branding.md +185 -0
- package/docs/reference/management-api/schema/workbench.md +246 -0
- package/docs/reference/management-api/schema/workflow-run.md +263 -0
- package/docs/reference/management-api/schema/workflow.md +1110 -0
- package/docs/reference/management-api/schema/workspace-version.md +823 -0
- package/docs/reference/management-api/schema/workspace.md +917 -0
- package/docs/reference/pickedql/data-sources.md +174 -0
- package/docs/reference/pickedql/dimensions.md +103 -0
- package/docs/reference/pickedql/filtering.md +64 -0
- package/docs/reference/pickedql/index.md +18 -0
- package/docs/reference/pickedql/schema.md +172 -0
- package/docs/reference/pickedql/virtual-functions.md +248 -0
- package/docs/reference/sdk/actions.md +154 -0
- package/docs/reference/sdk/analytics-events.md +453 -0
- package/docs/reference/sdk/conditions.md +147 -0
- package/docs/reference/sdk/content-security-policy.md +21 -0
- package/docs/reference/sdk/content.md +253 -0
- package/docs/reference/sdk/experiences.md +51 -0
- package/docs/reference/sdk/features.md +256 -0
- package/docs/reference/sdk/fields.md +255 -0
- package/docs/reference/sdk/index.md +68 -0
- package/docs/reference/sdk/plugins/create-experience.md +123 -0
- package/docs/reference/sdk/plugins/dynamic-experiences.md +74 -0
- package/docs/reference/sdk/plugins/fingerprintjs.md +39 -0
- package/docs/reference/sdk/plugins/hotjar.md +60 -0
- package/docs/reference/sdk/plugins/index.md +33 -0
- package/docs/reference/sdk/plugins/sentry.md +51 -0
- package/docs/reference/sdk/plugins/shopify.md +109 -0
- package/docs/reference/sdk/plugins/window-object.md +25 -0
- package/docs/reference/sdk/predicates.md +43 -0
- package/docs/reference/sdk/react.md +61 -0
- package/docs/reference/sdk/ssr/index.md +33 -0
- package/docs/reference/sdk/ssr/rendering-and-hydration.md +103 -0
- package/docs/reference/sdk/ssr/serialize.md +80 -0
- package/docs/reference/sdk/ssr/slots-and-placements.md +113 -0
- package/docs/reference/sdk/steps.md +86 -0
- package/docs/reference/sdk/svelte.md +74 -0
- package/docs/reference/sdk/type-generation.md +265 -0
- package/docs/reference/tools/admin-api-client.md +89 -0
- package/docs/reference/tools/chrome-extension.md +16 -0
- package/docs/reference/tools/cli.md +319 -0
- package/docs/reference/tools/delivery-api-client.md +60 -0
- package/docs/reference/tools/image-optimisation-service.md +104 -0
- package/docs/reference/tools/mcp-run.md +121 -0
- package/docs/reference/tools/mcp.md +391 -0
- package/docs/reference/tools/vite-plugin.md +163 -0
- package/docs/tutorials/first-api-call.md +253 -0
- package/docs/tutorials/first-experience-in-the-dashboard.mdx +160 -0
- package/docs/tutorials/first-experience.mdx +254 -0
- package/docs/tutorials/first-server-rendered-page.mdx +186 -0
- package/package.json +8 -7
|
@@ -0,0 +1,749 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: reference
|
|
3
|
+
layout: docs
|
|
4
|
+
generated: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Organization schema
|
|
8
|
+
|
|
9
|
+
The operations and types that `organization.graphql` adds to the Management API. See [Management API schema](/reference/management-api/schema) for every domain, the endpoint and authentication.
|
|
10
|
+
|
|
11
|
+
## Queries
|
|
12
|
+
|
|
13
|
+
### `organization`
|
|
14
|
+
|
|
15
|
+
Fetch a single organisation by ID or slug. Requires authentication.
|
|
16
|
+
|
|
17
|
+
```graphql
|
|
18
|
+
organization(input: OrganizationInput!): Organization @auth
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### `organizations`
|
|
22
|
+
|
|
23
|
+
List organisations the authenticated user belongs to. Requires authentication.
|
|
24
|
+
|
|
25
|
+
```graphql
|
|
26
|
+
organizations(first: Int, after: String, search: String, sortKey: OrganizationSortKeys = NAME, reverse: Boolean = false): OrganizationConnection! @auth
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Mutations
|
|
30
|
+
|
|
31
|
+
### `organizationCreate`
|
|
32
|
+
|
|
33
|
+
Create a new organisation. Requires scope: `ORGANIZATION_CREATE`.
|
|
34
|
+
|
|
35
|
+
```graphql
|
|
36
|
+
organizationCreate(input: OrganizationCreateInput!): OrganizationCreatePayload! @auth
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### `organizationUpdate`
|
|
40
|
+
|
|
41
|
+
Update an organisation. Requires scope: `ORGANIZATION_UPDATE`.
|
|
42
|
+
|
|
43
|
+
```graphql
|
|
44
|
+
organizationUpdate(input: OrganizationUpdateInput!): OrganizationUpdatePayload! @auth
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### `organizationDelete`
|
|
48
|
+
|
|
49
|
+
Delete an organisation. Requires scope: `ORGANIZATION_DELETE`.
|
|
50
|
+
|
|
51
|
+
```graphql
|
|
52
|
+
organizationDelete(input: OrganizationDeleteInput!): OrganizationDeletePayload! @auth
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### `organizationMemberInvite`
|
|
56
|
+
|
|
57
|
+
Invite a member to an organisation. Requires scope: `ORGANIZATION_INVITATIONS_CREATE`.
|
|
58
|
+
|
|
59
|
+
```graphql
|
|
60
|
+
organizationMemberInvite(input: OrganizationMemberInviteInput!): OrganizationMemberInvitePayload! @auth
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### `organizationInvitationAccept`
|
|
64
|
+
|
|
65
|
+
Accept an organisation invitation. Requires authentication.
|
|
66
|
+
|
|
67
|
+
```graphql
|
|
68
|
+
organizationInvitationAccept(input: OrganizationInvitationAcceptInput!): OrganizationInvitationAcceptPayload! @auth
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### `organizationInvitationDecline`
|
|
72
|
+
|
|
73
|
+
Decline an organisation invitation. Requires authentication.
|
|
74
|
+
|
|
75
|
+
```graphql
|
|
76
|
+
organizationInvitationDecline(input: OrganizationInvitationDeclineInput!): OrganizationInvitationDeclinePayload! @auth
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### `organizationInvitationRevoke`
|
|
80
|
+
|
|
81
|
+
Revoke an organisation invitation. Requires scope: `ORGANIZATION_INVITATIONS_DELETE`.
|
|
82
|
+
|
|
83
|
+
```graphql
|
|
84
|
+
organizationInvitationRevoke(input: OrganizationInvitationRevokeInput!): OrganizationInvitationRevokePayload! @auth
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### `organizationMemberRemove`
|
|
88
|
+
|
|
89
|
+
Remove a member from an organisation. Requires scope: `ORGANIZATION_MEMBERS_DELETE`.
|
|
90
|
+
|
|
91
|
+
```graphql
|
|
92
|
+
organizationMemberRemove(input: OrganizationMemberRemoveInput!): OrganizationMemberRemovePayload! @auth
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### `organizationMemberScopesUpdate`
|
|
96
|
+
|
|
97
|
+
Set the scopes a member holds in an organisation. Requires
|
|
98
|
+
`ORGANIZATION_MEMBERS_MANAGE_SCOPES` reaching that organisation. The target
|
|
99
|
+
must be a member. A caller may not grant a scope they do not themselves hold,
|
|
100
|
+
and may not edit their own scopes.
|
|
101
|
+
|
|
102
|
+
```graphql
|
|
103
|
+
organizationMemberScopesUpdate(input: OrganizationMemberScopesUpdateInput!): OrganizationMemberScopesUpdatePayload! @auth
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### `organizationClientManagerScopesUpdate`
|
|
107
|
+
|
|
108
|
+
Set the scopes a client manager holds in one organisation. Requires
|
|
109
|
+
`STAFF_INVITE_CLIENT_MANAGER` at root. The target must be a client manager,
|
|
110
|
+
and a caller may not edit their own scopes. A client manager may add or
|
|
111
|
+
remove only scopes their own client-manager grant in that organisation
|
|
112
|
+
carries; a super admin may set any.
|
|
113
|
+
|
|
114
|
+
```graphql
|
|
115
|
+
organizationClientManagerScopesUpdate(input: OrganizationClientManagerScopesUpdateInput!): OrganizationClientManagerScopesUpdatePayload! @auth
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Types
|
|
119
|
+
|
|
120
|
+
### `OrganizationSortKeys`
|
|
121
|
+
|
|
122
|
+
```graphql
|
|
123
|
+
"""
|
|
124
|
+
Sort keys accepted by `organizations(...)` and `User.organizations(...)`.
|
|
125
|
+
|
|
126
|
+
Pair with `reverse: true` to flip the order (e.g. `NAME` + `reverse: false`
|
|
127
|
+
sorts A→Z; `CREATED_AT` + `reverse: true` sorts newest-first).
|
|
128
|
+
"""
|
|
129
|
+
enum OrganizationSortKeys {
|
|
130
|
+
"""Sort by organisation `name` (alphabetical)."""
|
|
131
|
+
NAME
|
|
132
|
+
"""Sort by `createdAt`."""
|
|
133
|
+
CREATED_AT
|
|
134
|
+
"""
|
|
135
|
+
Sort by `updatedAt`. Pair with `reverse: true` for most-recently-changed first.
|
|
136
|
+
"""
|
|
137
|
+
UPDATED_AT
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### `InvitationType`
|
|
142
|
+
|
|
143
|
+
```graphql
|
|
144
|
+
"""
|
|
145
|
+
Invitation type. Historically, organisations could issue 24-hour multi-
|
|
146
|
+
use invitations; that capability has been retired. All invitations are
|
|
147
|
+
now single-use with a 30-day expiry.
|
|
148
|
+
|
|
149
|
+
WARNING: This enum is retained for backwards compatibility with the
|
|
150
|
+
deprecated `invitationType` argument on `organizationMemberInvite` and
|
|
151
|
+
the deprecated `OrganizationInvitation.invitationType` field. Do not
|
|
152
|
+
branch on it in new code.
|
|
153
|
+
"""
|
|
154
|
+
enum InvitationType {
|
|
155
|
+
"""Single-use invitation that expires on acceptance or after 30 days."""
|
|
156
|
+
ONE_TIME @deprecated(reason: "All invitations are now single-use with 30-day expiration")
|
|
157
|
+
"""Deprecated. Previously allowed 24-hour multi-use invitations."""
|
|
158
|
+
TWENTY_FOUR_HOUR @deprecated(reason: "All invitations are now single-use with 30-day expiration")
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### `Organization`
|
|
163
|
+
|
|
164
|
+
```graphql
|
|
165
|
+
"""
|
|
166
|
+
An organisation — the top-level tenancy boundary for projects, API keys,
|
|
167
|
+
integrations, and members.
|
|
168
|
+
|
|
169
|
+
Every project, API key, and integration belongs to exactly one
|
|
170
|
+
organisation. The set of scopes the current viewer holds in this
|
|
171
|
+
organisation is available on `viewerScopes`; use it to drive
|
|
172
|
+
client-side UX (which buttons to show, which actions to gate).
|
|
173
|
+
"""
|
|
174
|
+
type Organization {
|
|
175
|
+
"""Unique organisation identifier."""
|
|
176
|
+
id: ID!
|
|
177
|
+
"""Display name of the organisation."""
|
|
178
|
+
name: String!
|
|
179
|
+
"""
|
|
180
|
+
URL-friendly slug for the organisation. Used in dashboard URLs and as a stable handle for the organisation.
|
|
181
|
+
"""
|
|
182
|
+
slug: String
|
|
183
|
+
"""When this organisation was created."""
|
|
184
|
+
createdAt: DateTime!
|
|
185
|
+
"""When this organisation was last updated."""
|
|
186
|
+
updatedAt: DateTime!
|
|
187
|
+
"""
|
|
188
|
+
Whether every member must hold an `AAL2` session. A member of an organisation
|
|
189
|
+
with this on is held to the MFA policy on every request, whichever
|
|
190
|
+
organisation the request names.
|
|
191
|
+
"""
|
|
192
|
+
requireMfa: Boolean!
|
|
193
|
+
"""Members of this organisation."""
|
|
194
|
+
members(first: Int, after: String): OrganizationMemberConnection!
|
|
195
|
+
"""Pending invitations for this organisation."""
|
|
196
|
+
invitations(first: Int, after: String): OrganizationInvitationConnection!
|
|
197
|
+
"""
|
|
198
|
+
Projects within this organisation. Filter by name with `search`
|
|
199
|
+
(case-insensitive substring) and order with `sortKey` (default `NAME`) plus
|
|
200
|
+
`reverse`.
|
|
201
|
+
"""
|
|
202
|
+
projects(first: Int, after: String, search: String, sortKey: ProjectSortKeys = NAME, reverse: Boolean = false): ProjectConnection!
|
|
203
|
+
"""API keys for this organisation."""
|
|
204
|
+
apiKeys(first: Int, after: String): ApiKeyConnection!
|
|
205
|
+
"""
|
|
206
|
+
Scopes available to the current viewer in this organisation. Drives client-side UX gating.
|
|
207
|
+
"""
|
|
208
|
+
viewerScopes: [Scope!]!
|
|
209
|
+
"""
|
|
210
|
+
Every client manager, with the scopes their client-manager grant carries in
|
|
211
|
+
this organisation. Empty unless the viewer holds `STAFF_READ` at root.
|
|
212
|
+
"""
|
|
213
|
+
clientManagerAccess: [OrganizationClientManagerAccess!]!
|
|
214
|
+
}
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### `OrganizationMember`
|
|
218
|
+
|
|
219
|
+
```graphql
|
|
220
|
+
"""
|
|
221
|
+
A user's membership in an organisation. Carries the user's identifying
|
|
222
|
+
fields denormalised from `auth.users`, plus the role and `joinedAt`
|
|
223
|
+
timestamp.
|
|
224
|
+
|
|
225
|
+
Member-level operations (`organizationMemberScopesUpdate`,
|
|
226
|
+
`organizationMemberRemove`) require the corresponding scope on the
|
|
227
|
+
parent organisation.
|
|
228
|
+
"""
|
|
229
|
+
type OrganizationMember {
|
|
230
|
+
"""Unique member identifier (the membership row id, not the user id)."""
|
|
231
|
+
id: ID!
|
|
232
|
+
"""Email address of the member."""
|
|
233
|
+
userEmail: String
|
|
234
|
+
"""First name of the member."""
|
|
235
|
+
userFirstName: String
|
|
236
|
+
"""Last name of the member."""
|
|
237
|
+
userLastName: String
|
|
238
|
+
"""When the member joined the organisation."""
|
|
239
|
+
joinedAt: DateTime!
|
|
240
|
+
"""
|
|
241
|
+
Whether this member holds a verified MFA factor. Resolved for the whole page in one batched lookup.
|
|
242
|
+
"""
|
|
243
|
+
mfaState: MfaState!
|
|
244
|
+
"""
|
|
245
|
+
The scope grants this member holds in the organisation, one entry per
|
|
246
|
+
location. Empty unless the viewer holds `ORGANIZATION_MEMBERS_MANAGE_SCOPES`
|
|
247
|
+
reaching this organisation.
|
|
248
|
+
"""
|
|
249
|
+
scopeGrants: [MemberScopeGrant!]!
|
|
250
|
+
}
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### `MemberScopeGrant`
|
|
254
|
+
|
|
255
|
+
```graphql
|
|
256
|
+
"""A set of scopes a member holds at one location within an organisation."""
|
|
257
|
+
type MemberScopeGrant {
|
|
258
|
+
"""The project the scopes apply to, or null for the organisation itself."""
|
|
259
|
+
projectId: ID
|
|
260
|
+
"""The scopes held at that location."""
|
|
261
|
+
scopes: [Scope!]!
|
|
262
|
+
}
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### `OrganizationClientManagerAccess`
|
|
266
|
+
|
|
267
|
+
```graphql
|
|
268
|
+
"""
|
|
269
|
+
A client manager and the scopes they hold in one organisation, on top of the
|
|
270
|
+
root grant that reaches every organisation.
|
|
271
|
+
"""
|
|
272
|
+
type OrganizationClientManagerAccess {
|
|
273
|
+
"""The client manager."""
|
|
274
|
+
user: AdminUser!
|
|
275
|
+
"""
|
|
276
|
+
The scopes their client-manager grant carries on this organisation. Empty
|
|
277
|
+
when they hold none here.
|
|
278
|
+
"""
|
|
279
|
+
scopes: [Scope!]!
|
|
280
|
+
}
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
### `OrganizationMemberEdge`
|
|
284
|
+
|
|
285
|
+
```graphql
|
|
286
|
+
"""Edge type for `OrganizationMemberConnection`."""
|
|
287
|
+
type OrganizationMemberEdge {
|
|
288
|
+
"""Pagination cursor for this edge."""
|
|
289
|
+
cursor: String!
|
|
290
|
+
"""The organisation member."""
|
|
291
|
+
node: OrganizationMember!
|
|
292
|
+
}
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
### `OrganizationMemberConnection`
|
|
296
|
+
|
|
297
|
+
```graphql
|
|
298
|
+
"""Relay-style connection of organisation members."""
|
|
299
|
+
type OrganizationMemberConnection {
|
|
300
|
+
"""List of member edges."""
|
|
301
|
+
edges: [OrganizationMemberEdge!]!
|
|
302
|
+
"""Pagination metadata."""
|
|
303
|
+
pageInfo: PageInfo!
|
|
304
|
+
"""Total number of members."""
|
|
305
|
+
totalCount: Int!
|
|
306
|
+
}
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
### `OrganizationInvitation`
|
|
310
|
+
|
|
311
|
+
```graphql
|
|
312
|
+
"""
|
|
313
|
+
An invitation to join an organisation. Created via
|
|
314
|
+
`organizationMemberInvite`, accepted via `organizationInvitationAccept`,
|
|
315
|
+
declined via `organizationInvitationDecline`, and revoked by the inviter
|
|
316
|
+
via `organizationInvitationRevoke`.
|
|
317
|
+
|
|
318
|
+
Invitations expire 30 days after creation (server-enforced; see
|
|
319
|
+
`expiresAt`). Once accepted, the row remains for audit but cannot be
|
|
320
|
+
re-accepted.
|
|
321
|
+
"""
|
|
322
|
+
type OrganizationInvitation {
|
|
323
|
+
"""Unique invitation identifier."""
|
|
324
|
+
id: ID!
|
|
325
|
+
"""
|
|
326
|
+
Invitation type — retained for backwards compatibility. All invitations are now single-use.
|
|
327
|
+
"""
|
|
328
|
+
invitationType: InvitationType! @deprecated(reason: "All invitations are now single-use. This field will be removed.")
|
|
329
|
+
"""When this invitation was created."""
|
|
330
|
+
createdAt: DateTime!
|
|
331
|
+
"""When this invitation expires."""
|
|
332
|
+
expiresAt: DateTime!
|
|
333
|
+
"""Email address of the invited user."""
|
|
334
|
+
userEmail: String
|
|
335
|
+
}
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
### `OrganizationInvitationEdge`
|
|
339
|
+
|
|
340
|
+
```graphql
|
|
341
|
+
"""Edge type for `OrganizationInvitationConnection`."""
|
|
342
|
+
type OrganizationInvitationEdge {
|
|
343
|
+
"""Pagination cursor for this edge."""
|
|
344
|
+
cursor: String!
|
|
345
|
+
"""The organisation invitation."""
|
|
346
|
+
node: OrganizationInvitation!
|
|
347
|
+
}
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
### `OrganizationInvitationConnection`
|
|
351
|
+
|
|
352
|
+
```graphql
|
|
353
|
+
"""Relay-style connection of organisation invitations."""
|
|
354
|
+
type OrganizationInvitationConnection {
|
|
355
|
+
"""List of invitation edges."""
|
|
356
|
+
edges: [OrganizationInvitationEdge!]!
|
|
357
|
+
"""Pagination metadata."""
|
|
358
|
+
pageInfo: PageInfo!
|
|
359
|
+
"""Total number of invitations."""
|
|
360
|
+
totalCount: Int!
|
|
361
|
+
}
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
### `ViewerInvitation`
|
|
365
|
+
|
|
366
|
+
```graphql
|
|
367
|
+
"""
|
|
368
|
+
An invitation addressed to the authenticated viewer, exposed via
|
|
369
|
+
`User.invitations`. Carries the organisation name (so the dashboard can
|
|
370
|
+
render a "Join <Org>" CTA without an extra fetch) plus the `token` the
|
|
371
|
+
client passes to `organizationInvitationAccept` /
|
|
372
|
+
`organizationInvitationDecline`.
|
|
373
|
+
|
|
374
|
+
WARNING: `token` is sensitive — it grants the bearer the right to join
|
|
375
|
+
the organisation. Treat it like a one-time secret.
|
|
376
|
+
"""
|
|
377
|
+
type ViewerInvitation {
|
|
378
|
+
"""Unique invitation identifier."""
|
|
379
|
+
id: ID!
|
|
380
|
+
"""Token used to accept or decline the invitation. Treat as sensitive."""
|
|
381
|
+
token: String!
|
|
382
|
+
"""Name of the inviting organisation."""
|
|
383
|
+
organizationName: String!
|
|
384
|
+
"""When this invitation was created."""
|
|
385
|
+
createdAt: DateTime!
|
|
386
|
+
"""When this invitation expires."""
|
|
387
|
+
expiresAt: DateTime!
|
|
388
|
+
}
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
### `ViewerInvitationEdge`
|
|
392
|
+
|
|
393
|
+
```graphql
|
|
394
|
+
"""Edge type for `ViewerInvitationConnection`."""
|
|
395
|
+
type ViewerInvitationEdge {
|
|
396
|
+
"""Pagination cursor for this edge."""
|
|
397
|
+
cursor: String!
|
|
398
|
+
"""The viewer invitation."""
|
|
399
|
+
node: ViewerInvitation!
|
|
400
|
+
}
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
### `ViewerInvitationConnection`
|
|
404
|
+
|
|
405
|
+
```graphql
|
|
406
|
+
"""Relay-style connection of the viewer's pending invitations."""
|
|
407
|
+
type ViewerInvitationConnection {
|
|
408
|
+
"""List of invitation edges."""
|
|
409
|
+
edges: [ViewerInvitationEdge!]!
|
|
410
|
+
"""Pagination metadata."""
|
|
411
|
+
pageInfo: PageInfo!
|
|
412
|
+
"""Total number of invitations."""
|
|
413
|
+
totalCount: Int!
|
|
414
|
+
}
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
### `OrganizationEdge`
|
|
418
|
+
|
|
419
|
+
```graphql
|
|
420
|
+
"""Edge type for `OrganizationConnection`."""
|
|
421
|
+
type OrganizationEdge {
|
|
422
|
+
"""Pagination cursor for this edge."""
|
|
423
|
+
cursor: String!
|
|
424
|
+
"""The organisation."""
|
|
425
|
+
node: Organization!
|
|
426
|
+
}
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
### `OrganizationConnection`
|
|
430
|
+
|
|
431
|
+
```graphql
|
|
432
|
+
"""Relay-style connection of organisations."""
|
|
433
|
+
type OrganizationConnection {
|
|
434
|
+
"""List of organisation edges."""
|
|
435
|
+
edges: [OrganizationEdge!]!
|
|
436
|
+
"""Pagination metadata."""
|
|
437
|
+
pageInfo: PageInfo!
|
|
438
|
+
"""Total number of organisations."""
|
|
439
|
+
totalCount: Int!
|
|
440
|
+
}
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
### `OrganizationInput`
|
|
444
|
+
|
|
445
|
+
```graphql
|
|
446
|
+
"""
|
|
447
|
+
Input for looking up a single organisation. Provide either `id` or `slug` — at least one is required.
|
|
448
|
+
"""
|
|
449
|
+
input OrganizationInput {
|
|
450
|
+
"""Organisation ID to look up."""
|
|
451
|
+
id: ID
|
|
452
|
+
"""Organisation slug to look up."""
|
|
453
|
+
slug: String
|
|
454
|
+
}
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
### `OrganizationCreateInput`
|
|
458
|
+
|
|
459
|
+
```graphql
|
|
460
|
+
"""Input for `organizationCreate`."""
|
|
461
|
+
input OrganizationCreateInput {
|
|
462
|
+
"""Name of the organisation."""
|
|
463
|
+
name: String!
|
|
464
|
+
"""
|
|
465
|
+
URL-friendly slug for the organisation. Must be unique across all organisations.
|
|
466
|
+
"""
|
|
467
|
+
slug: String!
|
|
468
|
+
}
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
### `OrganizationCreatePayload`
|
|
472
|
+
|
|
473
|
+
```graphql
|
|
474
|
+
"""Payload returned by `organizationCreate`."""
|
|
475
|
+
type OrganizationCreatePayload {
|
|
476
|
+
"""The newly created organisation."""
|
|
477
|
+
organization: Organization
|
|
478
|
+
}
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
### `OrganizationUpdateInput`
|
|
482
|
+
|
|
483
|
+
```graphql
|
|
484
|
+
"""Input for `organizationUpdate`."""
|
|
485
|
+
input OrganizationUpdateInput {
|
|
486
|
+
"""ID of the organisation to update."""
|
|
487
|
+
id: ID!
|
|
488
|
+
"""New name for the organisation. Omit to keep the existing value."""
|
|
489
|
+
name: String
|
|
490
|
+
"""New slug for the organisation. Must remain unique."""
|
|
491
|
+
slug: String
|
|
492
|
+
"""
|
|
493
|
+
Whether every member must hold an `AAL2` session. Setting it to true needs
|
|
494
|
+
the caller's own session at `AAL2` (an `AAL1` or OAuth-client token is
|
|
495
|
+
refused with `MFA_REQUIRED`) and revokes every member's OAuth-client sessions.
|
|
496
|
+
"""
|
|
497
|
+
requireMfa: Boolean
|
|
498
|
+
}
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
### `OrganizationUpdatePayload`
|
|
502
|
+
|
|
503
|
+
```graphql
|
|
504
|
+
"""Payload returned by `organizationUpdate`."""
|
|
505
|
+
type OrganizationUpdatePayload {
|
|
506
|
+
"""The updated organisation."""
|
|
507
|
+
organization: Organization
|
|
508
|
+
}
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
### `OrganizationDeleteInput`
|
|
512
|
+
|
|
513
|
+
```graphql
|
|
514
|
+
"""Input for `organizationDelete`."""
|
|
515
|
+
input OrganizationDeleteInput {
|
|
516
|
+
"""ID of the organisation to delete."""
|
|
517
|
+
id: ID!
|
|
518
|
+
}
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
### `OrganizationDeletePayload`
|
|
522
|
+
|
|
523
|
+
```graphql
|
|
524
|
+
"""Payload returned by `organizationDelete`."""
|
|
525
|
+
type OrganizationDeletePayload {
|
|
526
|
+
"""ID of the deleted organisation."""
|
|
527
|
+
deletedOrganizationId: ID
|
|
528
|
+
}
|
|
529
|
+
```
|
|
530
|
+
|
|
531
|
+
### `OrganizationMemberInviteInput`
|
|
532
|
+
|
|
533
|
+
```graphql
|
|
534
|
+
"""
|
|
535
|
+
Input for `organizationMemberInvite` — create a pending invitation for the given email.
|
|
536
|
+
"""
|
|
537
|
+
input OrganizationMemberInviteInput {
|
|
538
|
+
"""ID of the organisation to invite the member to."""
|
|
539
|
+
organizationId: ID!
|
|
540
|
+
"""Email address of the user to invite."""
|
|
541
|
+
email: String!
|
|
542
|
+
"""
|
|
543
|
+
Scopes the invitation grants on acceptance, one entry per location. Omit to
|
|
544
|
+
grant the preset matching `role`. The inviter may not grant a scope they do
|
|
545
|
+
not themselves hold.
|
|
546
|
+
"""
|
|
547
|
+
grants: [MemberScopeGrantInput!]
|
|
548
|
+
"""Invitation type. Ignored; retained for backwards compatibility."""
|
|
549
|
+
invitationType: InvitationType @deprecated(reason: "All invitations are now single-use. This field is ignored.")
|
|
550
|
+
"""URL to redirect the invited user to after email verification."""
|
|
551
|
+
redirectUrl: String
|
|
552
|
+
}
|
|
553
|
+
```
|
|
554
|
+
|
|
555
|
+
### `InvitationDelivery`
|
|
556
|
+
|
|
557
|
+
```graphql
|
|
558
|
+
"""Which email reached the person an invitation was sent to."""
|
|
559
|
+
enum InvitationDelivery {
|
|
560
|
+
"""An invitation email, for an address with no account."""
|
|
561
|
+
INVITE_EMAIL
|
|
562
|
+
"""
|
|
563
|
+
A sign-in email, for an address that already has an account. The invitation
|
|
564
|
+
waits on the user's Account page.
|
|
565
|
+
"""
|
|
566
|
+
SIGN_IN_EMAIL
|
|
567
|
+
"""
|
|
568
|
+
No email went out. The invitation still waits on the Account page of a user with the address.
|
|
569
|
+
"""
|
|
570
|
+
NOT_SENT
|
|
571
|
+
}
|
|
572
|
+
```
|
|
573
|
+
|
|
574
|
+
### `OrganizationMemberInvitePayload`
|
|
575
|
+
|
|
576
|
+
```graphql
|
|
577
|
+
"""Payload returned by `organizationMemberInvite`."""
|
|
578
|
+
type OrganizationMemberInvitePayload {
|
|
579
|
+
"""The created invitation."""
|
|
580
|
+
invitation: OrganizationInvitation
|
|
581
|
+
"""Which email reached the invitee."""
|
|
582
|
+
delivery: InvitationDelivery!
|
|
583
|
+
}
|
|
584
|
+
```
|
|
585
|
+
|
|
586
|
+
### `OrganizationInvitationAcceptInput`
|
|
587
|
+
|
|
588
|
+
```graphql
|
|
589
|
+
"""Input for `organizationInvitationAccept`."""
|
|
590
|
+
input OrganizationInvitationAcceptInput {
|
|
591
|
+
"""Token from the invitation email — see `ViewerInvitation.token`."""
|
|
592
|
+
token: String!
|
|
593
|
+
}
|
|
594
|
+
```
|
|
595
|
+
|
|
596
|
+
### `AcceptedMembership`
|
|
597
|
+
|
|
598
|
+
```graphql
|
|
599
|
+
"""Membership information returned after accepting an invitation."""
|
|
600
|
+
type AcceptedMembership {
|
|
601
|
+
"""ID of the organisation joined."""
|
|
602
|
+
organizationId: ID!
|
|
603
|
+
"""Name of the organisation joined."""
|
|
604
|
+
organizationName: String!
|
|
605
|
+
}
|
|
606
|
+
```
|
|
607
|
+
|
|
608
|
+
### `OrganizationInvitationAcceptPayload`
|
|
609
|
+
|
|
610
|
+
```graphql
|
|
611
|
+
"""Payload returned by `organizationInvitationAccept`."""
|
|
612
|
+
type OrganizationInvitationAcceptPayload {
|
|
613
|
+
"""The membership created by accepting the invitation."""
|
|
614
|
+
membership: AcceptedMembership
|
|
615
|
+
}
|
|
616
|
+
```
|
|
617
|
+
|
|
618
|
+
### `OrganizationInvitationDeclineInput`
|
|
619
|
+
|
|
620
|
+
```graphql
|
|
621
|
+
"""Input for `organizationInvitationDecline`."""
|
|
622
|
+
input OrganizationInvitationDeclineInput {
|
|
623
|
+
"""Token from the invitation email."""
|
|
624
|
+
token: String!
|
|
625
|
+
}
|
|
626
|
+
```
|
|
627
|
+
|
|
628
|
+
### `OrganizationInvitationDeclinePayload`
|
|
629
|
+
|
|
630
|
+
```graphql
|
|
631
|
+
"""Payload returned by `organizationInvitationDecline`."""
|
|
632
|
+
type OrganizationInvitationDeclinePayload {
|
|
633
|
+
"""Token of the declined invitation."""
|
|
634
|
+
declinedToken: String
|
|
635
|
+
}
|
|
636
|
+
```
|
|
637
|
+
|
|
638
|
+
### `OrganizationInvitationRevokeInput`
|
|
639
|
+
|
|
640
|
+
```graphql
|
|
641
|
+
"""
|
|
642
|
+
Input for `organizationInvitationRevoke` — withdraw a pending invitation.
|
|
643
|
+
"""
|
|
644
|
+
input OrganizationInvitationRevokeInput {
|
|
645
|
+
"""ID of the invitation to revoke."""
|
|
646
|
+
invitationId: ID!
|
|
647
|
+
"""ID of the organisation the invitation belongs to."""
|
|
648
|
+
organizationId: ID!
|
|
649
|
+
}
|
|
650
|
+
```
|
|
651
|
+
|
|
652
|
+
### `OrganizationInvitationRevokePayload`
|
|
653
|
+
|
|
654
|
+
```graphql
|
|
655
|
+
"""Payload returned by `organizationInvitationRevoke`."""
|
|
656
|
+
type OrganizationInvitationRevokePayload {
|
|
657
|
+
"""ID of the revoked invitation."""
|
|
658
|
+
revokedInvitationId: ID
|
|
659
|
+
}
|
|
660
|
+
```
|
|
661
|
+
|
|
662
|
+
### `OrganizationMemberRemoveInput`
|
|
663
|
+
|
|
664
|
+
```graphql
|
|
665
|
+
"""Input for `organizationMemberRemove`."""
|
|
666
|
+
input OrganizationMemberRemoveInput {
|
|
667
|
+
"""ID of the organisation to remove the member from."""
|
|
668
|
+
organizationId: ID!
|
|
669
|
+
"""ID of the user to remove."""
|
|
670
|
+
userId: ID!
|
|
671
|
+
}
|
|
672
|
+
```
|
|
673
|
+
|
|
674
|
+
### `OrganizationMemberRemovePayload`
|
|
675
|
+
|
|
676
|
+
```graphql
|
|
677
|
+
"""Payload returned by `organizationMemberRemove`."""
|
|
678
|
+
type OrganizationMemberRemovePayload {
|
|
679
|
+
"""ID of the removed user."""
|
|
680
|
+
removedUserId: ID
|
|
681
|
+
}
|
|
682
|
+
```
|
|
683
|
+
|
|
684
|
+
### `MemberScopeGrantInput`
|
|
685
|
+
|
|
686
|
+
```graphql
|
|
687
|
+
"""A set of scopes to grant at one location within an organisation."""
|
|
688
|
+
input MemberScopeGrantInput {
|
|
689
|
+
"""The project the scopes apply to, or null for the organisation itself."""
|
|
690
|
+
projectId: ID
|
|
691
|
+
"""The scopes to hold at that location."""
|
|
692
|
+
scopes: [Scope!]!
|
|
693
|
+
}
|
|
694
|
+
```
|
|
695
|
+
|
|
696
|
+
### `OrganizationMemberScopesUpdateInput`
|
|
697
|
+
|
|
698
|
+
```graphql
|
|
699
|
+
"""Input for `organizationMemberScopesUpdate`."""
|
|
700
|
+
input OrganizationMemberScopesUpdateInput {
|
|
701
|
+
"""ID of the organisation."""
|
|
702
|
+
organizationId: ID!
|
|
703
|
+
"""ID of the member whose scopes to set."""
|
|
704
|
+
userId: ID!
|
|
705
|
+
"""
|
|
706
|
+
The grants to leave in place. Locations absent from this list are cleared;
|
|
707
|
+
grants outside this organisation are untouched.
|
|
708
|
+
"""
|
|
709
|
+
grants: [MemberScopeGrantInput!]!
|
|
710
|
+
}
|
|
711
|
+
```
|
|
712
|
+
|
|
713
|
+
### `OrganizationMemberScopesUpdatePayload`
|
|
714
|
+
|
|
715
|
+
```graphql
|
|
716
|
+
"""Payload returned by `organizationMemberScopesUpdate`."""
|
|
717
|
+
type OrganizationMemberScopesUpdatePayload {
|
|
718
|
+
"""The member whose scopes were set."""
|
|
719
|
+
member: OrganizationMember
|
|
720
|
+
}
|
|
721
|
+
```
|
|
722
|
+
|
|
723
|
+
### `OrganizationClientManagerScopesUpdateInput`
|
|
724
|
+
|
|
725
|
+
```graphql
|
|
726
|
+
"""Input for `organizationClientManagerScopesUpdate`."""
|
|
727
|
+
input OrganizationClientManagerScopesUpdateInput {
|
|
728
|
+
"""ID of the organisation."""
|
|
729
|
+
organizationId: ID!
|
|
730
|
+
"""ID of the client manager whose scopes to set."""
|
|
731
|
+
userId: ID!
|
|
732
|
+
"""
|
|
733
|
+
The scopes to hold on this organisation, replacing whatever was held before.
|
|
734
|
+
An empty list clears the grant, leaving the root grant as their whole reach.
|
|
735
|
+
Root-located scopes are rejected: they bind to no organisation.
|
|
736
|
+
"""
|
|
737
|
+
scopes: [Scope!]!
|
|
738
|
+
}
|
|
739
|
+
```
|
|
740
|
+
|
|
741
|
+
### `OrganizationClientManagerScopesUpdatePayload`
|
|
742
|
+
|
|
743
|
+
```graphql
|
|
744
|
+
"""Payload returned by `organizationClientManagerScopesUpdate`."""
|
|
745
|
+
type OrganizationClientManagerScopesUpdatePayload {
|
|
746
|
+
"""The client manager whose scopes were set."""
|
|
747
|
+
access: OrganizationClientManagerAccess
|
|
748
|
+
}
|
|
749
|
+
```
|