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.
Files changed (175) hide show
  1. package/README.md +27 -12
  2. package/docs/explanation/conditions-and-the-logic-engine.md +94 -0
  3. package/docs/explanation/content-references.md +99 -0
  4. package/docs/explanation/feature-flag-allocation.md +218 -0
  5. package/docs/explanation/how-picked-works.md +124 -0
  6. package/docs/explanation/how-pickedql-works.md +76 -0
  7. package/docs/explanation/pages-and-flows.md +64 -0
  8. package/docs/explanation/the-content-model.md +87 -0
  9. package/docs/explanation/the-two-apis.md +68 -0
  10. package/docs/explanation/why-server-side-rendering.md +76 -0
  11. package/docs/explanation/workspaces-and-versions.md +71 -0
  12. package/docs/how-to/add-a-step-field-or-action.md +56 -0
  13. package/docs/how-to/analytics/index.md +324 -0
  14. package/docs/how-to/archive-or-delete-a-workspace.md +59 -0
  15. package/docs/how-to/authenticate-the-cli.md +101 -0
  16. package/docs/how-to/authenticate-with-a-magic-link.md +56 -0
  17. package/docs/how-to/authenticate-with-a-password.md +68 -0
  18. package/docs/how-to/authenticate-with-an-api-key.md +60 -0
  19. package/docs/how-to/authenticate-with-oauth.md +49 -0
  20. package/docs/how-to/build-a-flow.md +106 -0
  21. package/docs/how-to/call-an-external-api-from-a-workflow.md +116 -0
  22. package/docs/how-to/connect-the-mcp-server.md +46 -0
  23. package/docs/how-to/create-a-content-entry.md +58 -0
  24. package/docs/how-to/create-a-project.md +40 -0
  25. package/docs/how-to/create-an-experience.md +51 -0
  26. package/docs/how-to/create-and-revoke-an-api-key.md +54 -0
  27. package/docs/how-to/debug-with-the-chrome-extension.md +57 -0
  28. package/docs/how-to/define-a-page-layout.md +54 -0
  29. package/docs/how-to/fill-and-publish-a-page.md +82 -0
  30. package/docs/how-to/install-the-gtm-template.md +84 -0
  31. package/docs/how-to/install-the-sdk.md +93 -0
  32. package/docs/how-to/install-the-vite-plugin.md +69 -0
  33. package/docs/how-to/invite-and-remove-members.md +45 -0
  34. package/docs/how-to/point-one-entry-at-another.md +75 -0
  35. package/docs/how-to/preview-a-workspace.md +39 -0
  36. package/docs/how-to/publish-a-workspace.md +42 -0
  37. package/docs/how-to/read-a-feature-flag.md +113 -0
  38. package/docs/how-to/read-a-referenced-entry.md +109 -0
  39. package/docs/how-to/register-a-component.md +55 -0
  40. package/docs/how-to/register-an-action-handler.md +85 -0
  41. package/docs/how-to/register-an-api-that-uses-oauth2.md +107 -0
  42. package/docs/how-to/render-a-step-form.md +131 -0
  43. package/docs/how-to/render-an-unpublished-preview.md +41 -0
  44. package/docs/how-to/retry-a-failed-call-with-a-loop.md +81 -0
  45. package/docs/how-to/reuse-a-section.md +64 -0
  46. package/docs/how-to/reuse-a-step-field-or-action.md +39 -0
  47. package/docs/how-to/roll-back-a-published-version.md +39 -0
  48. package/docs/how-to/run-an-ab-test.md +59 -0
  49. package/docs/how-to/run-code-on-a-form-submission.md +125 -0
  50. package/docs/how-to/server-render-a-page.md +81 -0
  51. package/docs/how-to/set-a-content-security-policy.md +32 -0
  52. package/docs/how-to/set-up-mfa.md +126 -0
  53. package/docs/how-to/switch-workspaces.md +122 -0
  54. package/docs/how-to/upload-and-use-an-asset.mdx +87 -0
  55. package/docs/how-to/validate-a-field.md +52 -0
  56. package/docs/how-to/wait-for-an-action-response.md +182 -0
  57. package/docs/how-to/write-a-condition.md +57 -0
  58. package/docs/how-to/write-a-predicate.md +60 -0
  59. package/docs/index.md +59 -0
  60. package/docs/reference/dashboard/actions.mdx +65 -0
  61. package/docs/reference/dashboard/api-keys.mdx +47 -0
  62. package/docs/reference/dashboard/conditions.mdx +51 -0
  63. package/docs/reference/dashboard/content/asset-library.mdx +74 -0
  64. package/docs/reference/dashboard/content/blocks.mdx +66 -0
  65. package/docs/reference/dashboard/content/content-entries.mdx +109 -0
  66. package/docs/reference/dashboard/content/models.mdx +119 -0
  67. package/docs/reference/dashboard/content/pages.mdx +72 -0
  68. package/docs/reference/dashboard/experiences.mdx +61 -0
  69. package/docs/reference/dashboard/external-apis.md +182 -0
  70. package/docs/reference/dashboard/features.mdx +165 -0
  71. package/docs/reference/dashboard/fields.mdx +120 -0
  72. package/docs/reference/dashboard/flow-builder/canvas.mdx +58 -0
  73. package/docs/reference/dashboard/flow-builder/condition-builder.md +69 -0
  74. package/docs/reference/dashboard/flow-builder/keyboard-shortcuts.md +72 -0
  75. package/docs/reference/dashboard/flow-builder/nodes.md +74 -0
  76. package/docs/reference/dashboard/labels.md +321 -0
  77. package/docs/reference/dashboard/lead-search.md +235 -0
  78. package/docs/reference/dashboard/projects.mdx +53 -0
  79. package/docs/reference/dashboard/reports.mdx +53 -0
  80. package/docs/reference/dashboard/steps.mdx +47 -0
  81. package/docs/reference/dashboard/team-management.md +38 -0
  82. package/docs/reference/dashboard/workflow-runs.md +157 -0
  83. package/docs/reference/dashboard/workflow-templates.md +182 -0
  84. package/docs/reference/dashboard/workflow-test-runs.md +85 -0
  85. package/docs/reference/dashboard/workspace-versioning.mdx +42 -0
  86. package/docs/reference/dashboard/workspaces.mdx +91 -0
  87. package/docs/reference/delivery-api/experience-content.md +152 -0
  88. package/docs/reference/delivery-api/index.md +45 -0
  89. package/docs/reference/delivery-api/preview-caching-crawling.md +79 -0
  90. package/docs/reference/delivery-api/project-config.md +65 -0
  91. package/docs/reference/delivery-api/workspace-schema.md +107 -0
  92. package/docs/reference/glossary.md +201 -0
  93. package/docs/reference/management-api/authentication.md +87 -0
  94. package/docs/reference/management-api/authorization-and-scopes.md +291 -0
  95. package/docs/reference/management-api/error-handling.md +232 -0
  96. package/docs/reference/management-api/pagination.md +192 -0
  97. package/docs/reference/management-api/schema/action.md +261 -0
  98. package/docs/reference/management-api/schema/analytics-session.md +363 -0
  99. package/docs/reference/management-api/schema/analytics.md +73 -0
  100. package/docs/reference/management-api/schema/api-key.md +170 -0
  101. package/docs/reference/management-api/schema/auth.md +1177 -0
  102. package/docs/reference/management-api/schema/cms-fields.md +954 -0
  103. package/docs/reference/management-api/schema/cms-models.md +1155 -0
  104. package/docs/reference/management-api/schema/common.md +362 -0
  105. package/docs/reference/management-api/schema/condition.md +254 -0
  106. package/docs/reference/management-api/schema/design-system.md +199 -0
  107. package/docs/reference/management-api/schema/experience.md +1098 -0
  108. package/docs/reference/management-api/schema/external-api.md +637 -0
  109. package/docs/reference/management-api/schema/feature.md +350 -0
  110. package/docs/reference/management-api/schema/feedback.md +103 -0
  111. package/docs/reference/management-api/schema/field.md +400 -0
  112. package/docs/reference/management-api/schema/index.md +243 -0
  113. package/docs/reference/management-api/schema/integration.md +272 -0
  114. package/docs/reference/management-api/schema/label.md +349 -0
  115. package/docs/reference/management-api/schema/lead.md +340 -0
  116. package/docs/reference/management-api/schema/mcp-server.md +299 -0
  117. package/docs/reference/management-api/schema/metric.md +223 -0
  118. package/docs/reference/management-api/schema/operation.md +96 -0
  119. package/docs/reference/management-api/schema/organization.md +749 -0
  120. package/docs/reference/management-api/schema/project.md +607 -0
  121. package/docs/reference/management-api/schema/report.md +243 -0
  122. package/docs/reference/management-api/schema/saved-view.md +288 -0
  123. package/docs/reference/management-api/schema/shopify.md +795 -0
  124. package/docs/reference/management-api/schema/step.md +273 -0
  125. package/docs/reference/management-api/schema/tenant-branding.md +185 -0
  126. package/docs/reference/management-api/schema/workbench.md +246 -0
  127. package/docs/reference/management-api/schema/workflow-run.md +263 -0
  128. package/docs/reference/management-api/schema/workflow.md +1110 -0
  129. package/docs/reference/management-api/schema/workspace-version.md +823 -0
  130. package/docs/reference/management-api/schema/workspace.md +917 -0
  131. package/docs/reference/pickedql/data-sources.md +174 -0
  132. package/docs/reference/pickedql/dimensions.md +103 -0
  133. package/docs/reference/pickedql/filtering.md +64 -0
  134. package/docs/reference/pickedql/index.md +18 -0
  135. package/docs/reference/pickedql/schema.md +172 -0
  136. package/docs/reference/pickedql/virtual-functions.md +248 -0
  137. package/docs/reference/sdk/actions.md +154 -0
  138. package/docs/reference/sdk/analytics-events.md +453 -0
  139. package/docs/reference/sdk/conditions.md +147 -0
  140. package/docs/reference/sdk/content-security-policy.md +21 -0
  141. package/docs/reference/sdk/content.md +253 -0
  142. package/docs/reference/sdk/experiences.md +51 -0
  143. package/docs/reference/sdk/features.md +256 -0
  144. package/docs/reference/sdk/fields.md +255 -0
  145. package/docs/reference/sdk/index.md +68 -0
  146. package/docs/reference/sdk/plugins/create-experience.md +123 -0
  147. package/docs/reference/sdk/plugins/dynamic-experiences.md +74 -0
  148. package/docs/reference/sdk/plugins/fingerprintjs.md +39 -0
  149. package/docs/reference/sdk/plugins/hotjar.md +60 -0
  150. package/docs/reference/sdk/plugins/index.md +33 -0
  151. package/docs/reference/sdk/plugins/sentry.md +51 -0
  152. package/docs/reference/sdk/plugins/shopify.md +109 -0
  153. package/docs/reference/sdk/plugins/window-object.md +25 -0
  154. package/docs/reference/sdk/predicates.md +43 -0
  155. package/docs/reference/sdk/react.md +61 -0
  156. package/docs/reference/sdk/ssr/index.md +33 -0
  157. package/docs/reference/sdk/ssr/rendering-and-hydration.md +103 -0
  158. package/docs/reference/sdk/ssr/serialize.md +80 -0
  159. package/docs/reference/sdk/ssr/slots-and-placements.md +113 -0
  160. package/docs/reference/sdk/steps.md +86 -0
  161. package/docs/reference/sdk/svelte.md +74 -0
  162. package/docs/reference/sdk/type-generation.md +265 -0
  163. package/docs/reference/tools/admin-api-client.md +89 -0
  164. package/docs/reference/tools/chrome-extension.md +16 -0
  165. package/docs/reference/tools/cli.md +319 -0
  166. package/docs/reference/tools/delivery-api-client.md +60 -0
  167. package/docs/reference/tools/image-optimisation-service.md +104 -0
  168. package/docs/reference/tools/mcp-run.md +121 -0
  169. package/docs/reference/tools/mcp.md +391 -0
  170. package/docs/reference/tools/vite-plugin.md +163 -0
  171. package/docs/tutorials/first-api-call.md +253 -0
  172. package/docs/tutorials/first-experience-in-the-dashboard.mdx +160 -0
  173. package/docs/tutorials/first-experience.mdx +254 -0
  174. package/docs/tutorials/first-server-rendered-page.mdx +186 -0
  175. package/package.json +8 -7
@@ -0,0 +1,192 @@
1
+ ---
2
+ type: reference
3
+ layout: docs
4
+ ---
5
+
6
+ # Pagination
7
+
8
+ The Picked API paginates every list field that can return a large result. It uses a
9
+ cursor, in the Relay-style pattern. This guide covers the connection pattern and
10
+ shows how to move through a result.
11
+
12
+ ## Connection pattern
13
+
14
+ A paginated field returns a **connection** object with this shape:
15
+
16
+ ```graphql
17
+ type ExampleConnection {
18
+ edges: [ExampleEdge!]!
19
+ pageInfo: PageInfo!
20
+ totalCount: Int!
21
+ }
22
+
23
+ type ExampleEdge {
24
+ cursor: String!
25
+ node: Example!
26
+ }
27
+
28
+ type PageInfo {
29
+ hasNextPage: Boolean!
30
+ hasPreviousPage: Boolean!
31
+ startCursor: String
32
+ endCursor: String
33
+ }
34
+ ```
35
+
36
+ | Field | Description |
37
+ |-------|-------------|
38
+ | `edges` | An ordered list of edges. Each edge holds a `cursor` and a `node`, and the `node` holds the data. |
39
+ | `pageInfo.hasNextPage` | `true` when more results come after the last edge |
40
+ | `pageInfo.hasPreviousPage` | `true` when results come before the first edge |
41
+ | `pageInfo.startCursor` | The cursor of the first edge on the current page |
42
+ | `pageInfo.endCursor` | The cursor of the last edge on the current page |
43
+ | `totalCount` | The number of items on every page together |
44
+
45
+ ## Forward pagination with `first` and `after`
46
+
47
+ To move forward through the results, use two arguments. The `first` argument gives
48
+ the page size. The `after` argument gives the cursor to start after.
49
+
50
+ ### First page
51
+
52
+ Leave the `after` argument out to read the first page:
53
+
54
+ ```graphql
55
+ query {
56
+ organizations(input: { first: 10 }) {
57
+ edges {
58
+ cursor
59
+ node {
60
+ id
61
+ name
62
+ }
63
+ }
64
+ pageInfo {
65
+ hasNextPage
66
+ endCursor
67
+ }
68
+ totalCount
69
+ }
70
+ }
71
+ ```
72
+
73
+ ### Next page
74
+
75
+ Pass the `endCursor` from the previous response as the `after` argument:
76
+
77
+ ```graphql
78
+ query {
79
+ organizations(input: { first: 10, after: "cursor_from_previous_page" }) {
80
+ edges {
81
+ cursor
82
+ node {
83
+ id
84
+ name
85
+ }
86
+ }
87
+ pageInfo {
88
+ hasNextPage
89
+ endCursor
90
+ }
91
+ totalCount
92
+ }
93
+ }
94
+ ```
95
+
96
+ ## Check for more pages
97
+
98
+ Read the `hasNextPage` field before you ask for the next page:
99
+
100
+ - `hasNextPage: true` — more results are available. Pass `endCursor` as the `after`
101
+ argument of the next request.
102
+ - `hasNextPage: false` — you read every result. Stop here.
103
+
104
+ ## Full paginated query example
105
+
106
+ This example reads every member of an organization, one page at a time:
107
+
108
+ ```graphql
109
+ # Page 1
110
+ query {
111
+ organization(input: { slug: "my-company" }) {
112
+ members(first: 20) {
113
+ edges {
114
+ cursor
115
+ node {
116
+ id
117
+ userEmail
118
+ role
119
+ joinedAt
120
+ }
121
+ }
122
+ pageInfo {
123
+ hasNextPage
124
+ endCursor
125
+ }
126
+ totalCount
127
+ }
128
+ }
129
+ }
130
+ ```
131
+
132
+ If `pageInfo.hasNextPage` is `true`, fetch the next page:
133
+
134
+ ```graphql
135
+ # Page 2
136
+ query {
137
+ organization(input: { slug: "my-company" }) {
138
+ members(first: 20, after: "cursor_from_page_1") {
139
+ edges {
140
+ cursor
141
+ node {
142
+ id
143
+ userEmail
144
+ role
145
+ joinedAt
146
+ }
147
+ }
148
+ pageInfo {
149
+ hasNextPage
150
+ endCursor
151
+ }
152
+ totalCount
153
+ }
154
+ }
155
+ }
156
+ ```
157
+
158
+ Continue until `hasNextPage` returns `false`.
159
+
160
+ ## Paginated fields
161
+
162
+ These fields in the schema return a connection type. They all take the `first` and
163
+ `after` arguments:
164
+
165
+ | Parent Type | Field | Connection Type |
166
+ |------------|-------|----------------|
167
+ | `Query` | `organizations` | `OrganizationConnection` |
168
+ | `User` | `organizations` | `OrganizationConnection` |
169
+ | `User` | `invitations` | `ViewerInvitationConnection` |
170
+ | `Organization` | `members` | `OrganizationMemberConnection` |
171
+ | `Organization` | `invitations` | `OrganizationInvitationConnection` |
172
+ | `Organization` | `projects` | `ProjectConnection` |
173
+ | `Project` | `reports` | `ProjectReportConnection` |
174
+
175
+ All of these fields accept the same `first` and `after` arguments and return the standard `edges`, `pageInfo`, and `totalCount` structure.
176
+
177
+ ## Tips
178
+
179
+ - **The default page size** — the API applies a default limit when you leave `first`
180
+ out. Set `first` yourself to make sure that each page has the size you expect.
181
+ - **A cursor is opaque** — treat a cursor string as an opaque token. Do not parse it,
182
+ build it, or change it. Pass it back exactly as the API gave it.
183
+ - **The order is stable** — a connection returns its results in a stable order. The
184
+ same cursor always points at the same position in the result.
185
+ - **Use them with other fields** — you can use the pagination arguments together with
186
+ other query fields. One request that reads an organization and the first page of
187
+ its members is common, and it is efficient.
188
+
189
+ ## Related
190
+
191
+ - [Your first API call](/tutorials/first-api-call)
192
+ - [Authorization and scopes](/reference/management-api/authorization-and-scopes)
@@ -0,0 +1,261 @@
1
+ ---
2
+ type: reference
3
+ layout: docs
4
+ generated: true
5
+ ---
6
+
7
+ # Action schema
8
+
9
+ The operations and types that `action.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
+ ### `action`
14
+
15
+ Get an action by ID within a workspace.
16
+
17
+ ```graphql
18
+ action(id: ID!, workspaceId: ID!): Action @auth
19
+ ```
20
+
21
+ ### `actions`
22
+
23
+ List actions in a workspace. Filter by name with `search` (case-insensitive
24
+ substring) and order with `sortKey` (default `NAME`) plus `reverse`.
25
+
26
+ ```graphql
27
+ actions(first: Int, after: String, last: Int, before: String, workspaceId: ID!, search: String, sortKey: ActionSortKeys = NAME, reverse: Boolean = false): ActionConnection! @auth
28
+ ```
29
+
30
+ ## Mutations
31
+
32
+ ### `actionCreate`
33
+
34
+ Create a new action. Requires scope: `ORGANIZATION_PROJECTS_UPDATE`.
35
+
36
+ ```graphql
37
+ actionCreate(input: ActionCreateInput!): ActionCreatePayload! @auth
38
+ ```
39
+
40
+ ### `actionUpdate`
41
+
42
+ Update an action. Requires scope: `ORGANIZATION_PROJECTS_UPDATE`.
43
+
44
+ ```graphql
45
+ actionUpdate(input: ActionUpdateInput!): ActionUpdatePayload! @auth
46
+ ```
47
+
48
+ ### `actionDelete`
49
+
50
+ Delete an action. Requires scope: `ORGANIZATION_PROJECTS_UPDATE`.
51
+
52
+ ```graphql
53
+ actionDelete(input: ActionDeleteInput!): ActionDeletePayload! @auth
54
+ ```
55
+
56
+ ## Types
57
+
58
+ ### `Action`
59
+
60
+ ```graphql
61
+ """
62
+ A side effect triggered during experience flow execution. Workspace-
63
+ scoped — actions are copied into a new workspace when the workspace is
64
+ duplicated.
65
+
66
+ Examples: API calls (`tracking/send-event`), analytics events
67
+ (`segment/identify`), or SDK state updates (`features/toggle`). The
68
+ shape of the side effect itself is encoded in the action's `key` and
69
+ handled by the SDK plugin matching that key.
70
+ """
71
+ type Action {
72
+ """Unique action identifier."""
73
+ id: ID!
74
+ """Display name of the action."""
75
+ name: String!
76
+ """Stable, human-readable key for SDK consumers."""
77
+ key: String!
78
+ """Optional description of what this action does."""
79
+ description: String
80
+ """When this action was created."""
81
+ createdAt: DateTime!
82
+ """When this action was last updated."""
83
+ updatedAt: DateTime!
84
+ """The workspace this action belongs to."""
85
+ workspace: Workspace!
86
+ """
87
+ The workspace ID this action belongs to (denormalised for query convenience).
88
+ """
89
+ workspaceId: ID
90
+ """Fields whose responses this action receives."""
91
+ fields(first: Int, after: String, last: Int, before: String): FieldConnection!
92
+ """The one workflow this action starts, or null when it starts none."""
93
+ workflow: Workflow
94
+ }
95
+ ```
96
+
97
+ ### `ActionConnection`
98
+
99
+ ```graphql
100
+ """
101
+ Relay-style connection of actions, with both an `edges` list and a flat `nodes` accessor.
102
+ """
103
+ type ActionConnection {
104
+ """List of action edges."""
105
+ edges: [ActionEdge!]!
106
+ """
107
+ Flat list of actions, equivalent to `edges[].node`. Convenience accessor.
108
+ """
109
+ nodes: [Action!]!
110
+ """Pagination metadata."""
111
+ pageInfo: PageInfo!
112
+ """Total number of actions."""
113
+ totalCount: Int!
114
+ }
115
+ ```
116
+
117
+ ### `ActionEdge`
118
+
119
+ ```graphql
120
+ """Edge type for `ActionConnection`."""
121
+ type ActionEdge {
122
+ """Pagination cursor for this edge."""
123
+ cursor: String!
124
+ """The action."""
125
+ node: Action!
126
+ }
127
+ ```
128
+
129
+ ### `ActionCreateInput`
130
+
131
+ ```graphql
132
+ """Input for `actionCreate`."""
133
+ input ActionCreateInput {
134
+ """Workspace ID to create the action in."""
135
+ workspaceId: ID!
136
+ """Display name for the action."""
137
+ name: String!
138
+ """Unique key identifier for the action (stable across versions)."""
139
+ key: String!
140
+ """Description of what this action does."""
141
+ description: String
142
+ """Ids of the fields whose responses this action receives."""
143
+ fieldIds: [ID!]
144
+ }
145
+ ```
146
+
147
+ ### `ActionCreatePayload`
148
+
149
+ ```graphql
150
+ """Payload returned by `actionCreate`."""
151
+ type ActionCreatePayload {
152
+ """The created action."""
153
+ action: Action
154
+ }
155
+ ```
156
+
157
+ ### `ActionUpdateInput`
158
+
159
+ ```graphql
160
+ """Input for `actionUpdate`. Omit a field to leave it unchanged."""
161
+ input ActionUpdateInput {
162
+ """Action ID."""
163
+ id: ID!
164
+ """Workspace ID the action belongs to."""
165
+ workspaceId: ID!
166
+ """New display name."""
167
+ name: String
168
+ """New description."""
169
+ description: String
170
+ """
171
+ Replacement set of field ids. Omit to leave the set unchanged; pass an empty
172
+ list to request nothing.
173
+ """
174
+ fieldIds: [ID!]
175
+ }
176
+ ```
177
+
178
+ ### `ActionUpdatePayload`
179
+
180
+ ```graphql
181
+ """Payload returned by `actionUpdate`."""
182
+ type ActionUpdatePayload {
183
+ """The updated action."""
184
+ action: Action
185
+ }
186
+ ```
187
+
188
+ ### `ActionDeleteInput`
189
+
190
+ ```graphql
191
+ """Input for `actionDelete`."""
192
+ input ActionDeleteInput {
193
+ """Action ID."""
194
+ id: ID!
195
+ """Workspace ID the action belongs to."""
196
+ workspaceId: ID!
197
+ }
198
+ ```
199
+
200
+ ### `ActionDeletePayload`
201
+
202
+ ```graphql
203
+ """
204
+ Payload returned by `actionDelete`. Returns `userErrors` when the action is in use.
205
+ """
206
+ type ActionDeletePayload {
207
+ """ID of the deleted action (null when `userErrors` is non-empty)."""
208
+ deletedActionId: ID
209
+ """Validation errors. Empty array indicates success."""
210
+ userErrors: [ActionDeleteUserError!]!
211
+ }
212
+ ```
213
+
214
+ ### `ActionDeleteUserErrorCode`
215
+
216
+ ```graphql
217
+ """Machine-readable error codes for `actionDelete`."""
218
+ enum ActionDeleteUserErrorCode {
219
+ """
220
+ The action is referenced by one or more experiences and cannot be deleted.
221
+ """
222
+ IN_USE
223
+ }
224
+ ```
225
+
226
+ ### `ActionDeleteUserError`
227
+
228
+ ```graphql
229
+ """
230
+ A user error from `actionDelete`. Carries the experiences that block the delete when `code` is `IN_USE`.
231
+ """
232
+ type ActionDeleteUserError {
233
+ """Path to the input field that caused the error."""
234
+ field: [String!]
235
+ """Human-readable error message."""
236
+ message: String!
237
+ """Machine-readable error code."""
238
+ code: ActionDeleteUserErrorCode!
239
+ """
240
+ Experiences that reference this action (present when `code` is `IN_USE`).
241
+ """
242
+ referencingExperiences: [ReferencingExperience!]
243
+ }
244
+ ```
245
+
246
+ ### `ActionSortKeys`
247
+
248
+ ```graphql
249
+ """
250
+ Sort keys for `actions(...)`. Pair with `reverse: true` to flip the order
251
+ (`NAME` + `reverse: false` sorts A→Z; `CREATED_AT` + `reverse: true` is newest-first).
252
+ """
253
+ enum ActionSortKeys {
254
+ """Sort by `name` (alphabetical)."""
255
+ NAME
256
+ """Sort by `createdAt`."""
257
+ CREATED_AT
258
+ """Sort by `updatedAt`."""
259
+ UPDATED_AT
260
+ }
261
+ ```