picked 0.0.101 → 0.0.102-next.2

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 (36) hide show
  1. package/docs/reference/dashboard/workflow-test-runs.md +40 -17
  2. package/docs/reference/management-api/schema/action.md +67 -79
  3. package/docs/reference/management-api/schema/analytics-session.md +77 -94
  4. package/docs/reference/management-api/schema/analytics.md +16 -14
  5. package/docs/reference/management-api/schema/api-key.md +43 -51
  6. package/docs/reference/management-api/schema/auth.md +271 -404
  7. package/docs/reference/management-api/schema/cms-fields.md +348 -245
  8. package/docs/reference/management-api/schema/cms-models.md +369 -378
  9. package/docs/reference/management-api/schema/common.md +69 -130
  10. package/docs/reference/management-api/schema/condition.md +63 -74
  11. package/docs/reference/management-api/schema/design-system.md +59 -51
  12. package/docs/reference/management-api/schema/experience.md +388 -364
  13. package/docs/reference/management-api/schema/external-api.md +153 -171
  14. package/docs/reference/management-api/schema/feature.md +85 -103
  15. package/docs/reference/management-api/schema/feedback.md +27 -31
  16. package/docs/reference/management-api/schema/field.md +117 -135
  17. package/docs/reference/management-api/schema/index.md +184 -184
  18. package/docs/reference/management-api/schema/integration.md +72 -78
  19. package/docs/reference/management-api/schema/label.md +81 -137
  20. package/docs/reference/management-api/schema/lead.md +80 -119
  21. package/docs/reference/management-api/schema/mcp-server.md +73 -71
  22. package/docs/reference/management-api/schema/metric.md +6 -9
  23. package/docs/reference/management-api/schema/operation.md +17 -26
  24. package/docs/reference/management-api/schema/organization.md +198 -220
  25. package/docs/reference/management-api/schema/project.md +177 -186
  26. package/docs/reference/management-api/schema/report.md +69 -65
  27. package/docs/reference/management-api/schema/saved-view.md +71 -71
  28. package/docs/reference/management-api/schema/shopify.md +331 -204
  29. package/docs/reference/management-api/schema/step.md +72 -80
  30. package/docs/reference/management-api/schema/tenant-branding.md +48 -70
  31. package/docs/reference/management-api/schema/workbench.md +54 -66
  32. package/docs/reference/management-api/schema/workflow-run.md +66 -79
  33. package/docs/reference/management-api/schema/workflow.md +310 -353
  34. package/docs/reference/management-api/schema/workspace-version.md +212 -261
  35. package/docs/reference/management-api/schema/workspace.md +275 -328
  36. package/package.json +4 -4
@@ -6,13 +6,14 @@ generated: true
6
6
 
7
7
  # Experience schema
8
8
 
9
- The operations and types that `experience.graphql` adds to the Management API. See [Management API schema](/reference/management-api/schema) for every domain, the endpoint and authentication.
9
+ See [Management API schema](/reference/management-api/schema) for every domain, the endpoint and authentication.
10
10
 
11
11
  ## Queries
12
12
 
13
13
  ### `experience`
14
14
 
15
- Get an experience by ID within a workspace.
15
+ Reads an experience.
16
+ Scope: `ORGANIZATION_WORKSPACE_READ`.
16
17
 
17
18
  ```graphql
18
19
  experience(id: ID!, workspaceId: ID!): Experience @auth
@@ -20,18 +21,32 @@ experience(id: ID!, workspaceId: ID!): Experience @auth
20
21
 
21
22
  ### `experiences`
22
23
 
23
- List experiences within a workspace. Filter by name with `search` (case-insensitive
24
- substring) and order with `sortKey` (default `NAME`) plus `reverse`.
24
+ Lists the experiences in a workspace. `search` matches a case-insensitive substring of the name;
25
+ `sortKey` and `reverse` set the order.
26
+ Scope: `ORGANIZATION_WORKSPACE_READ`.
25
27
 
26
28
  ```graphql
27
- experiences(workspaceId: ID!, type: ExperienceType, first: Int, after: String, last: Int, before: String, search: String, sortKey: ExperienceSortKeys = NAME, reverse: Boolean = false): ExperienceConnection! @auth
29
+ experiences(
30
+ workspaceId: ID!
31
+ """Only experiences of this kind. Null lists every kind."""
32
+ type: ExperienceType
33
+ first: Int
34
+ after: String
35
+ last: Int
36
+ before: String
37
+ search: String
38
+ sortKey: ExperienceSortKeys = NAME
39
+ reverse: Boolean = false
40
+ ): ExperienceConnection! @auth
28
41
  ```
29
42
 
30
43
  ## Mutations
31
44
 
32
45
  ### `experienceCreate`
33
46
 
34
- Create a new experience. Requires scope: `ORGANIZATION_PROJECTS_UPDATE`.
47
+ Creates an experience in a workspace. A `PAGE` experience gets its single step and flow graph
48
+ automatically.
49
+ Scope: `ORGANIZATION_WORKSPACE_UPDATE`.
35
50
 
36
51
  ```graphql
37
52
  experienceCreate(input: ExperienceCreateInput!): ExperienceCreatePayload! @auth
@@ -39,7 +54,8 @@ experienceCreate(input: ExperienceCreateInput!): ExperienceCreatePayload! @auth
39
54
 
40
55
  ### `experienceUpdate`
41
56
 
42
- Update an experience. Requires scope: `ORGANIZATION_PROJECTS_UPDATE`.
57
+ Updates an experience's settings. `experienceFlowUpdate` changes its flow graph.
58
+ Scope: `ORGANIZATION_WORKSPACE_UPDATE`.
43
59
 
44
60
  ```graphql
45
61
  experienceUpdate(input: ExperienceUpdateInput!): ExperienceUpdatePayload! @auth
@@ -47,7 +63,8 @@ experienceUpdate(input: ExperienceUpdateInput!): ExperienceUpdatePayload! @auth
47
63
 
48
64
  ### `experienceDelete`
49
65
 
50
- Delete an experience. Requires scope: `ORGANIZATION_PROJECTS_UPDATE`.
66
+ Deletes an experience. Its steps, conditions and actions stay in the workspace.
67
+ Scope: `ORGANIZATION_WORKSPACE_UPDATE`.
51
68
 
52
69
  ```graphql
53
70
  experienceDelete(input: ExperienceDeleteInput!): ExperienceDeletePayload! @auth
@@ -55,7 +72,10 @@ experienceDelete(input: ExperienceDeleteInput!): ExperienceDeletePayload! @auth
55
72
 
56
73
  ### `experienceFlowUpdate`
57
74
 
58
- Atomically save all changes to an experience flow. Requires scope: `ORGANIZATION_PROJECTS_UPDATE`.
75
+ Updates an experience's settings and flow graph, with the steps, conditions, actions and fields
76
+ it uses, in one call. Validation runs before any write, and a change that fails it fails the
77
+ whole call.
78
+ Scope: `ORGANIZATION_WORKSPACE_UPDATE`.
59
79
 
60
80
  ```graphql
61
81
  experienceFlowUpdate(input: ExperienceFlowUpdateInput!): ExperienceFlowUpdatePayload! @auth
@@ -66,15 +86,15 @@ experienceFlowUpdate(input: ExperienceFlowUpdateInput!): ExperienceFlowUpdatePay
66
86
  ### `ExperienceNodeType`
67
87
 
68
88
  ```graphql
69
- """Discriminator for `ExperienceNode` implementations."""
89
+ """The kinds of node in a flow graph."""
70
90
  enum ExperienceNodeType {
71
- """The starting point of every flow graph. Exactly one per experience."""
91
+ """The node where every flow starts. One per experience."""
72
92
  ORIGIN
73
- """A node that renders a step (UI)."""
93
+ """A node that shows a step."""
74
94
  STEP
75
- """A node that evaluates a condition for branching."""
95
+ """A node that branches on a condition."""
76
96
  CONDITION
77
- """A node that triggers an action (side effect)."""
97
+ """A node that starts an action."""
78
98
  ACTION
79
99
  """A node that launches another experience."""
80
100
  EXPERIENCE
@@ -84,14 +104,11 @@ enum ExperienceNodeType {
84
104
  ### `ExperienceEdgeHandle`
85
105
 
86
106
  ```graphql
87
- """
88
- Edge handle for `ConditionNode` outgoing edges. Picks which branch of a
89
- condition the flow follows when the condition resolves true / false.
90
- """
107
+ """The branch of a condition node that an edge leaves from."""
91
108
  enum ExperienceEdgeHandle {
92
- """The TRUE branch of a `ConditionNode`."""
109
+ """The branch the flow takes when the condition is true."""
93
110
  TRUE
94
- """The FALSE branch of a `ConditionNode`."""
111
+ """The branch the flow takes when the condition is false."""
95
112
  FALSE
96
113
  }
97
114
  ```
@@ -99,13 +116,11 @@ enum ExperienceEdgeHandle {
99
116
  ### `Position`
100
117
 
101
118
  ```graphql
102
- """
103
- Position of a node on the flow graph canvas. Used purely for layout in the dashboard editor.
104
- """
119
+ """A point on the flow canvas. It affects layout on the canvas only."""
105
120
  type Position {
106
- """X coordinate (canvas units, can be negative)."""
121
+ """The horizontal coordinate. Can be negative."""
107
122
  x: Float!
108
- """Y coordinate (canvas units, can be negative)."""
123
+ """The vertical coordinate. Can be negative."""
109
124
  y: Float!
110
125
  }
111
126
  ```
@@ -113,11 +128,11 @@ type Position {
113
128
  ### `PositionInput`
114
129
 
115
130
  ```graphql
116
- """Input form of `Position`."""
131
+ """A point on the flow canvas, as input."""
117
132
  input PositionInput {
118
- """X coordinate."""
133
+ """The horizontal coordinate."""
119
134
  x: Float!
120
- """Y coordinate."""
135
+ """The vertical coordinate."""
121
136
  y: Float!
122
137
  }
123
138
  ```
@@ -125,17 +140,17 @@ input PositionInput {
125
140
  ### `ExperienceTargetPlacement`
126
141
 
127
142
  ```graphql
128
- """
129
- Where the experience content is placed relative to the target DOM element.
130
-
131
- `REPLACE` swaps the target node out. `APPEND` / `PREPEND` add children
132
- inside the target. `BEFORE` / `AFTER` insert siblings around the target.
133
- """
143
+ """Where an experience renders relative to its target element."""
134
144
  enum ExperienceTargetPlacement {
145
+ """In place of the target."""
135
146
  REPLACE
147
+ """Inside the target, after its children."""
136
148
  APPEND
149
+ """Inside the target, before its children."""
137
150
  PREPEND
151
+ """Before the target, as a sibling."""
138
152
  BEFORE
153
+ """After the target, as a sibling."""
139
154
  AFTER
140
155
  }
141
156
  ```
@@ -144,12 +159,12 @@ enum ExperienceTargetPlacement {
144
159
 
145
160
  ```graphql
146
161
  """
147
- A DOM target element and how the experience content is placed relative to it.
162
+ An element an experience renders against, and where it renders relative to it.
148
163
  """
149
164
  type ExperienceTarget {
150
- """CSS selector identifying the target DOM element."""
165
+ """The CSS selector that finds the target element."""
151
166
  selector: String!
152
- """How the experience content is placed relative to the target element."""
167
+ """Where the experience renders relative to the target element."""
153
168
  placement: ExperienceTargetPlacement!
154
169
  }
155
170
  ```
@@ -157,11 +172,11 @@ type ExperienceTarget {
157
172
  ### `ExperienceTargetInput`
158
173
 
159
174
  ```graphql
160
- """Input form of `ExperienceTarget`."""
175
+ """An element an experience renders against, as input."""
161
176
  input ExperienceTargetInput {
162
- """CSS selector for the target DOM element."""
177
+ """The CSS selector that finds the target element."""
163
178
  selector: String!
164
- """How the experience content is placed relative to the target element."""
179
+ """Where the experience renders relative to the target element."""
165
180
  placement: ExperienceTargetPlacement!
166
181
  }
167
182
  ```
@@ -169,17 +184,15 @@ input ExperienceTargetInput {
169
184
  ### `ExperienceType`
170
185
 
171
186
  ```graphql
172
- """
173
- Experience kind discriminator.
174
-
175
- `FLOW` is a multi-step user journey driven by a flow graph. `PAGE` is a
176
- CMS-backed dynamic landing page with a single auto-created step.
177
- Mutations branch on this discriminator at create time.
178
- """
187
+ """The kinds of experience. Fixed when the experience is created."""
179
188
  enum ExperienceType {
180
- """Multi-step user journey driven by a flow graph."""
189
+ """
190
+ An interactive experience of one or more steps, driven by a flow graph.
191
+ """
181
192
  FLOW
182
- """CMS-backed dynamic landing page with a single auto-created step."""
193
+ """
194
+ A standalone experience that your server renders from a content entry, with a single step.
195
+ """
183
196
  PAGE
184
197
  }
185
198
  ```
@@ -188,20 +201,16 @@ enum ExperienceType {
188
201
 
189
202
  ```graphql
190
203
  """
191
- Delivery status for an experience.
192
-
193
- `ACTIVE` is delivered to every request. `DRAFT` is omitted from the published
194
- payload, along with the steps, fields and actions only it references, and
195
- delivered only to a request carrying a valid preview token for the owning
196
- workspace.
197
-
198
- Status is captured in the published snapshot, so a change takes effect once the
199
- workspace is published again.
204
+ Whether visitors receive an experience. The status is part of the published snapshot, so a change
205
+ takes effect when the workspace is next published.
200
206
  """
201
207
  enum ExperienceStatus {
202
208
  """Delivered to every request."""
203
209
  ACTIVE
204
- """Delivered only behind a valid preview token."""
210
+ """
211
+ Delivered only to a request carrying a valid preview token for the workspace. Left out of the
212
+ published payload, with the steps, fields and actions only it uses.
213
+ """
205
214
  DRAFT
206
215
  }
207
216
  ```
@@ -210,61 +219,52 @@ enum ExperienceStatus {
210
219
 
211
220
  ```graphql
212
221
  """
213
- An experience defines a user journey within a workspace. The flow graph
214
- is stored opaquely in `flowJson` and exposed structurally via `nodes` and
215
- `edges`.
216
-
217
- `targets` selects which DOM elements the experience attaches to. `key`
218
- is a stable identifier SDK consumers use to opt in to specific
219
- experiences. `condition` is a JSON Logic expression gating whether the
220
- experience renders at all.
222
+ Personalised content that Picked serves to a visitor: a flow or a page.
221
223
  """
222
224
  type Experience {
223
- """Unique experience identifier."""
225
+ """The ID of the experience."""
224
226
  id: ID!
225
- """Display name of the experience."""
227
+ """The name of the experience."""
226
228
  name: String!
227
- """DOM elements this experience attaches to, with placement strategy."""
229
+ """The elements the experience renders against."""
228
230
  targets: [ExperienceTarget!]!
229
- """Stable, human-readable key for SDK consumers."""
231
+ """The stable identifier of the experience, unique within its workspace."""
230
232
  key: String!
231
- """
232
- Discriminator: `FLOW` (multi-step journey) or `PAGE` (CMS-backed landing).
233
- """
233
+ """The kind of experience."""
234
234
  type: ExperienceType!
235
+ """Whether visitors receive the experience."""
236
+ status: ExperienceStatus!
235
237
  """
236
- Delivery status: `ACTIVE` to everyone, `DRAFT` only behind a valid preview token.
238
+ The flow graph as stored JSON. `nodes` and `edges` carry the same graph, typed.
237
239
  """
238
- status: ExperienceStatus!
239
- """Opaque flow graph blob. Use `nodes` + `edges` for structured access."""
240
240
  flowJson: JSON
241
- """Optional JSON Logic condition gating whether the experience renders."""
241
+ """
242
+ A JSON Logic rule that decides whether the experience renders. Null when none is set.
243
+ """
242
244
  condition: JSON
243
245
  """
244
- JSON value controlling whether the experience initialises in an open state.
246
+ A JSON Logic rule that decides whether the experience starts open. Null when none is set.
245
247
  """
246
248
  initializeOpen: JSON
247
249
  """
248
- Name of the React/Svelte component the SDK should render for this experience.
250
+ The component name that points the experience at a component in your application. Empty when none is set.
249
251
  """
250
252
  componentName: String!
251
- """The workspace this experience belongs to."""
253
+ """The workspace the experience belongs to."""
252
254
  workspace: Workspace!
253
- """Nodes in the flow graph, typed by their `__typename`."""
255
+ """The nodes of the flow graph."""
254
256
  nodes: [ExperienceNode!]!
255
- """Edges in the flow graph connecting nodes."""
257
+ """The edges of the flow graph."""
256
258
  edges: [ExperienceEdge!]!
257
- """All steps referenced by `STEP` nodes in this experience's flow."""
259
+ """The steps the flow's step nodes show."""
258
260
  steps: [Step!]!
259
- """
260
- All conditions referenced by `CONDITION` nodes in this experience's flow.
261
- """
261
+ """The conditions the flow's condition nodes branch on."""
262
262
  conditions: [Condition!]!
263
- """All actions referenced by `ACTION` nodes in this experience's flow."""
263
+ """The actions the flow's action nodes start."""
264
264
  actions: [Action!]!
265
- """When this experience was created."""
265
+ """When the experience was created."""
266
266
  createdAt: DateTime!
267
- """When this experience was last updated."""
267
+ """When the experience last changed."""
268
268
  updatedAt: DateTime!
269
269
  }
270
270
  ```
@@ -272,19 +272,15 @@ type Experience {
272
272
  ### `ExperienceConnection`
273
273
 
274
274
  ```graphql
275
- """
276
- Relay-style connection of experiences, with both an `edges` list and a flat `nodes` accessor.
277
- """
275
+ """A page of experiences."""
278
276
  type ExperienceConnection {
279
- """List of experience edges."""
277
+ """The edges in this page."""
280
278
  edges: [ExperienceConnectionEdge!]!
281
- """
282
- Flat list of experiences, equivalent to `edges[].node`. Convenience accessor.
283
- """
279
+ """The experiences in this page."""
284
280
  nodes: [Experience!]!
285
- """Pagination metadata."""
281
+ """Where this page sits in the list."""
286
282
  pageInfo: PageInfo!
287
- """Total number of experiences."""
283
+ """The number of experiences across all pages, ignoring `search`."""
288
284
  totalCount: Int!
289
285
  }
290
286
  ```
@@ -292,9 +288,9 @@ type ExperienceConnection {
292
288
  ### `ExperienceConnectionEdge`
293
289
 
294
290
  ```graphql
295
- """Edge type for `ExperienceConnection`."""
291
+ """An experience in a page of results."""
296
292
  type ExperienceConnectionEdge {
297
- """Pagination cursor for this edge."""
293
+ """The cursor of this edge."""
298
294
  cursor: String!
299
295
  """The experience."""
300
296
  node: Experience!
@@ -304,15 +300,13 @@ type ExperienceConnectionEdge {
304
300
  ### `ExperienceNode`
305
301
 
306
302
  ```graphql
307
- """
308
- A node in the experience flow graph. Use `__typename` to discriminate the implementation.
309
- """
303
+ """A node in an experience's flow graph. `__typename` names the kind."""
310
304
  interface ExperienceNode {
311
- """Stable node identifier within the graph."""
305
+ """The ID of the node, unique within the graph."""
312
306
  id: ID!
313
- """Node kind discriminator (also encoded in `__typename`)."""
307
+ """The kind of node."""
314
308
  type: ExperienceNodeType!
315
- """Canvas position for the dashboard editor."""
309
+ """The position of the node on the canvas."""
316
310
  position: Position!
317
311
  }
318
312
  ```
@@ -320,10 +314,13 @@ interface ExperienceNode {
320
314
  ### `OriginNode`
321
315
 
322
316
  ```graphql
323
- """Starting point of an experience flow. Exactly one per experience."""
317
+ """The node where every flow starts. One per experience."""
324
318
  type OriginNode implements ExperienceNode {
319
+ """The ID of the node, unique within the graph."""
325
320
  id: ID!
321
+ """The kind of node."""
326
322
  type: ExperienceNodeType!
323
+ """The position of the node on the canvas."""
327
324
  position: Position!
328
325
  }
329
326
  ```
@@ -331,12 +328,15 @@ type OriginNode implements ExperienceNode {
331
328
  ### `StepNode`
332
329
 
333
330
  ```graphql
334
- """A node that renders a step's UI."""
331
+ """A node that shows a step."""
335
332
  type StepNode implements ExperienceNode {
333
+ """The ID of the node, unique within the graph."""
336
334
  id: ID!
335
+ """The kind of node."""
337
336
  type: ExperienceNodeType!
337
+ """The position of the node on the canvas."""
338
338
  position: Position!
339
- """The step rendered when the flow reaches this node."""
339
+ """The step the node shows."""
340
340
  step: Step!
341
341
  }
342
342
  ```
@@ -345,13 +345,16 @@ type StepNode implements ExperienceNode {
345
345
 
346
346
  ```graphql
347
347
  """
348
- A node that evaluates a condition for branching. Outgoing edges carry `sourceHandle: TRUE | FALSE`.
348
+ A node that branches on a condition. Its outgoing edges carry `sourceHandle` `TRUE` or `FALSE`.
349
349
  """
350
350
  type ConditionNode implements ExperienceNode {
351
+ """The ID of the node, unique within the graph."""
351
352
  id: ID!
353
+ """The kind of node."""
352
354
  type: ExperienceNodeType!
355
+ """The position of the node on the canvas."""
353
356
  position: Position!
354
- """The condition evaluated when the flow reaches this node."""
357
+ """The condition the node evaluates."""
355
358
  condition: Condition!
356
359
  }
357
360
  ```
@@ -359,12 +362,15 @@ type ConditionNode implements ExperienceNode {
359
362
  ### `ActionNode`
360
363
 
361
364
  ```graphql
362
- """A node that triggers an action (side effect)."""
365
+ """A node that starts an action."""
363
366
  type ActionNode implements ExperienceNode {
367
+ """The ID of the node, unique within the graph."""
364
368
  id: ID!
369
+ """The kind of node."""
365
370
  type: ExperienceNodeType!
371
+ """The position of the node on the canvas."""
366
372
  position: Position!
367
- """The action triggered when the flow reaches this node."""
373
+ """The action the node starts."""
368
374
  action: Action!
369
375
  }
370
376
  ```
@@ -372,12 +378,15 @@ type ActionNode implements ExperienceNode {
372
378
  ### `LaunchExperienceNode`
373
379
 
374
380
  ```graphql
375
- """A node that launches another experience. Used to compose experiences."""
381
+ """A node that launches another experience."""
376
382
  type LaunchExperienceNode implements ExperienceNode {
383
+ """The ID of the node, unique within the graph."""
377
384
  id: ID!
385
+ """The kind of node."""
378
386
  type: ExperienceNodeType!
387
+ """The position of the node on the canvas."""
379
388
  position: Position!
380
- """The experience launched when the flow reaches this node."""
389
+ """The experience the node launches."""
381
390
  targetExperience: Experience!
382
391
  }
383
392
  ```
@@ -385,20 +394,20 @@ type LaunchExperienceNode implements ExperienceNode {
385
394
  ### `ExperienceEdge`
386
395
 
387
396
  ```graphql
388
- """An edge connecting two nodes in the experience flow graph."""
397
+ """A link between two nodes of a flow graph."""
389
398
  type ExperienceEdge {
390
- """Stable edge identifier within the graph."""
399
+ """The ID of the edge, unique within the graph."""
391
400
  id: ID!
392
- """Source node (resolved)."""
401
+ """The node the edge leaves."""
393
402
  sourceNode: ExperienceNode!
394
- """Destination node (resolved)."""
403
+ """The node the edge enters."""
395
404
  destinationNode: ExperienceNode!
396
- """Source node id (denormalised)."""
405
+ """The ID of the node the edge leaves."""
397
406
  sourceNodeId: ID!
398
- """Destination node id (denormalised)."""
407
+ """The ID of the node the edge enters."""
399
408
  destinationNodeId: ID!
400
409
  """
401
- Only meaningful when the source is a `ConditionNode` — picks the TRUE / FALSE branch.
410
+ The branch the edge leaves a condition node from. Null when the source is not a condition node.
402
411
  """
403
412
  sourceHandle: ExperienceEdgeHandle
404
413
  }
@@ -408,22 +417,22 @@ type ExperienceEdge {
408
417
 
409
418
  ```graphql
410
419
  """
411
- Input form of a node in the flow graph. Only the field matching the node's `type` should be populated.
420
+ A node of a flow graph, as input. Set only the reference that matches `type`.
412
421
  """
413
422
  input ExperienceNodeInput {
414
- """Stable node identifier."""
423
+ """The ID of the node, unique within the graph."""
415
424
  id: ID!
416
- """Node kind discriminator."""
425
+ """The kind of node."""
417
426
  type: ExperienceNodeType!
418
- """Canvas position."""
427
+ """The position of the node on the canvas."""
419
428
  position: PositionInput!
420
- """For STEP nodes: referenced step id."""
429
+ """The ID of the step a `STEP` node shows."""
421
430
  stepId: ID
422
- """For CONDITION nodes: referenced condition id."""
431
+ """The ID of the condition a `CONDITION` node evaluates."""
423
432
  conditionId: ID
424
- """For ACTION nodes: referenced action id."""
433
+ """The ID of the action an `ACTION` node starts."""
425
434
  actionId: ID
426
- """For EXPERIENCE nodes: referenced experience id to launch."""
435
+ """The ID of the experience an `EXPERIENCE` node launches."""
427
436
  targetExperienceId: ID
428
437
  }
429
438
  ```
@@ -431,15 +440,15 @@ input ExperienceNodeInput {
431
440
  ### `ExperienceEdgeInput`
432
441
 
433
442
  ```graphql
434
- """Input form of an edge in the flow graph."""
443
+ """An edge of a flow graph, as input."""
435
444
  input ExperienceEdgeInput {
436
- """Stable edge identifier."""
445
+ """The ID of the edge, unique within the graph."""
437
446
  id: ID!
438
- """Source node id."""
447
+ """The ID of the node the edge leaves."""
439
448
  sourceNodeId: ID!
440
- """Destination node id."""
449
+ """The ID of the node the edge enters."""
441
450
  destinationNodeId: ID!
442
- """For edges from a `ConditionNode`: which branch (TRUE / FALSE)."""
451
+ """The branch the edge leaves a condition node from."""
443
452
  sourceHandle: ExperienceEdgeHandle
444
453
  }
445
454
  ```
@@ -447,33 +456,35 @@ input ExperienceEdgeInput {
447
456
  ### `ExperienceCreateInput`
448
457
 
449
458
  ```graphql
450
- """Input for `experienceCreate`."""
459
+ """The input of `experienceCreate`."""
451
460
  input ExperienceCreateInput {
452
- """Workspace ID to create the experience in."""
461
+ """The ID of the workspace to create the experience in."""
453
462
  workspaceId: ID!
454
- """Display name for the experience."""
463
+ """The name of the experience."""
455
464
  name: String!
456
- """Stable, human-readable key for SDK consumers."""
457
- key: String!
458
465
  """
459
- Discriminator. `PAGE` auto-creates the singleton Step; `FLOW` uses the caller-supplied nodes / edges.
466
+ The stable identifier of the experience, unique within the workspace. It cannot change later.
460
467
  """
468
+ key: String!
469
+ """The kind of experience. Defaults to `FLOW`."""
461
470
  type: ExperienceType
462
- """Delivery status. Defaults to `ACTIVE`."""
471
+ """Whether visitors receive the experience. Defaults to `ACTIVE`."""
463
472
  status: ExperienceStatus
464
- """Optional JSON Logic condition gating whether the experience renders."""
473
+ """A JSON Logic rule that decides whether the experience renders."""
465
474
  condition: JSON
466
- """Whether the experience should initialise in an open state."""
475
+ """A JSON Logic rule that decides whether the experience starts open."""
467
476
  initializeOpen: JSON
468
- """Name of the React/Svelte component the SDK should render."""
469
- componentName: String
470
477
  """
471
- Targeting configuration — which DOM elements the experience attaches to.
478
+ The component name that points the experience at a component in your application.
472
479
  """
480
+ componentName: String
481
+ """The elements the experience renders against."""
473
482
  targets: [ExperienceTargetInput!]
474
- """Initial flow graph nodes."""
483
+ """
484
+ The nodes of the flow graph. An origin node is added when none is given. Rejected for a `PAGE`.
485
+ """
475
486
  nodes: [ExperienceNodeInput!]
476
- """Initial flow graph edges."""
487
+ """The edges of the flow graph. Rejected for a `PAGE`."""
477
488
  edges: [ExperienceEdgeInput!]
478
489
  }
479
490
  ```
@@ -481,7 +492,7 @@ input ExperienceCreateInput {
481
492
  ### `ExperienceCreatePayload`
482
493
 
483
494
  ```graphql
484
- """Payload returned by `experienceCreate`."""
495
+ """The result of `experienceCreate`."""
485
496
  type ExperienceCreatePayload {
486
497
  """The created experience."""
487
498
  experience: Experience
@@ -491,21 +502,23 @@ type ExperienceCreatePayload {
491
502
  ### `ExperienceUpdateInput`
492
503
 
493
504
  ```graphql
494
- """Input for `experienceUpdate`. Omit a field to leave it unchanged."""
505
+ """The input of `experienceUpdate`. Omit a field to keep its value."""
495
506
  input ExperienceUpdateInput {
496
- """Experience ID."""
507
+ """The ID of the experience."""
497
508
  id: ID!
498
- """New display name."""
509
+ """The name of the experience."""
499
510
  name: String
500
- """New delivery status."""
511
+ """Whether visitors receive the experience."""
501
512
  status: ExperienceStatus
502
- """New JSON Logic condition gating whether the experience renders."""
513
+ """A JSON Logic rule that decides whether the experience renders."""
503
514
  condition: JSON
504
- """Whether the experience should initialise in an open state."""
515
+ """A JSON Logic rule that decides whether the experience starts open."""
505
516
  initializeOpen: JSON
506
- """New component name."""
517
+ """
518
+ The component name that points the experience at a component in your application.
519
+ """
507
520
  componentName: String
508
- """New targeting configuration."""
521
+ """The elements the experience renders against."""
509
522
  targets: [ExperienceTargetInput!]
510
523
  }
511
524
  ```
@@ -513,7 +526,7 @@ input ExperienceUpdateInput {
513
526
  ### `ExperienceUpdatePayload`
514
527
 
515
528
  ```graphql
516
- """Payload returned by `experienceUpdate`."""
529
+ """The result of `experienceUpdate`."""
517
530
  type ExperienceUpdatePayload {
518
531
  """The updated experience."""
519
532
  experience: Experience
@@ -523,9 +536,9 @@ type ExperienceUpdatePayload {
523
536
  ### `ExperienceDeleteInput`
524
537
 
525
538
  ```graphql
526
- """Input for `experienceDelete`."""
539
+ """The input of `experienceDelete`."""
527
540
  input ExperienceDeleteInput {
528
- """Experience ID."""
541
+ """The ID of the experience."""
529
542
  id: ID!
530
543
  }
531
544
  ```
@@ -533,9 +546,9 @@ input ExperienceDeleteInput {
533
546
  ### `ExperienceDeletePayload`
534
547
 
535
548
  ```graphql
536
- """Payload returned by `experienceDelete`."""
549
+ """The result of `experienceDelete`."""
537
550
  type ExperienceDeletePayload {
538
- """ID of the deleted experience."""
551
+ """The ID of the deleted experience."""
539
552
  deletedExperienceId: ID
540
553
  }
541
554
  ```
@@ -543,36 +556,27 @@ type ExperienceDeletePayload {
543
556
  ### `ExperienceFlowUpdateInput`
544
557
 
545
558
  ```graphql
546
- """
547
- Atomically save all changes to an experience flow in a single
548
- operation. Handles creation, updates, and deletion of nodes, edges,
549
- steps, conditions, actions, and fields.
550
-
551
- Set `allowPartialSuccess: true` to persist valid changes even when some
552
- fail validation; the failures appear in `errors` while successful
553
- changes are committed. Default (`false`) treats the operation as
554
- all-or-nothing.
555
- """
559
+ """The input of `experienceFlowUpdate`. Omit a field to keep its value."""
556
560
  input ExperienceFlowUpdateInput {
557
- """New display name."""
561
+ """The name of the experience."""
558
562
  name: String
559
- """New delivery status."""
563
+ """Whether visitors receive the experience."""
560
564
  status: ExperienceStatus
561
- """New JSON Logic condition gating whether the experience renders."""
565
+ """A JSON Logic rule that decides whether the experience renders."""
562
566
  condition: JSON
563
- """Whether the experience should initialise in an open state."""
567
+ """A JSON Logic rule that decides whether the experience starts open."""
564
568
  initializeOpen: JSON
565
- """New component name."""
569
+ """
570
+ The component name that points the experience at a component in your application.
571
+ """
566
572
  componentName: String
567
- """New targeting configuration."""
573
+ """The elements the experience renders against."""
568
574
  targets: [ExperienceTargetInput!]
569
- """The experience to update."""
575
+ """The ID of the experience."""
570
576
  experienceId: ID!
571
- """All changes to apply to the experience flow."""
577
+ """The changes to the flow and the items it uses."""
572
578
  changes: ExperienceFlowChangesInput!
573
- """
574
- When true, valid changes are persisted even if some fail validation. When false (default), the entire operation fails if any change fails.
575
- """
579
+ """Has no effect."""
576
580
  allowPartialSuccess: Boolean = false
577
581
  }
578
582
  ```
@@ -580,19 +584,19 @@ input ExperienceFlowUpdateInput {
580
584
  ### `ExperienceFlowChangesInput`
581
585
 
582
586
  ```graphql
583
- """Container for all change operations grouped by entity type."""
587
+ """The changes in an `experienceFlowUpdate`, by kind of item."""
584
588
  input ExperienceFlowChangesInput {
585
- """Step changes (workspace-level resources)."""
589
+ """The step changes."""
586
590
  steps: StepChangesInput
587
- """Condition changes (workspace-level resources)."""
591
+ """The condition changes."""
588
592
  conditions: ConditionChangesInput
589
- """Action changes (workspace-level resources)."""
593
+ """The action changes."""
590
594
  actions: ActionChangesInput
591
- """Field changes (workspace-level resources)."""
595
+ """The field changes."""
592
596
  fields: FieldChangesInput
593
- """Node changes in the flow graph."""
597
+ """The node changes."""
594
598
  nodes: ExperienceNodeChangesInput
595
- """Edge changes connecting nodes."""
599
+ """The edge changes."""
596
600
  edges: ExperienceEdgeChangesInput
597
601
  }
598
602
  ```
@@ -600,15 +604,15 @@ input ExperienceFlowChangesInput {
600
604
  ### `StepChangesInput`
601
605
 
602
606
  ```graphql
603
- """Step-level changes within an `experienceFlowUpdate` batch."""
607
+ """The step changes in an `experienceFlowUpdate`."""
604
608
  input StepChangesInput {
605
- """
606
- Steps to create. Each entry carries a `clientId` for cross-referencing from `nodes`.
607
- """
609
+ """The steps to create."""
608
610
  create: [StepCreateData!]
609
- """Steps to update."""
611
+ """The steps to update."""
610
612
  update: [StepUpdateData!]
611
- """Step ids to delete."""
613
+ """
614
+ The IDs of steps that no node may reference after the save. The steps stay in the workspace.
615
+ """
612
616
  delete: [ID!]
613
617
  }
614
618
  ```
@@ -616,24 +620,30 @@ input StepChangesInput {
616
620
  ### `StepCreateData`
617
621
 
618
622
  ```graphql
619
- """Data for creating a new step in the parent workspace."""
623
+ """A step to create in an `experienceFlowUpdate`."""
620
624
  input StepCreateData {
621
- """Client-generated ID for mapping and cross-referencing."""
625
+ """
626
+ A client-chosen ID that other changes in the same call use to refer to the step.
627
+ """
622
628
  clientId: ID!
623
- """Display name for the step."""
629
+ """The name of the step."""
624
630
  name: String!
625
- """Unique key identifier for the step."""
631
+ """
632
+ The stable identifier of the step, unique within the workspace. It cannot change later.
633
+ """
626
634
  key: String!
627
- """Optional description."""
635
+ """A description of the step."""
628
636
  description: String
629
- """Layout name."""
637
+ """
638
+ The layout name: the component that renders the step, such as `card` or `modal`.
639
+ """
630
640
  layoutName: String
631
- """IDs of existing workspace-level fields to reference."""
641
+ """The IDs of existing fields to put on the step, in order."""
632
642
  fieldIds: [ID!]
633
- """Step content configuration (free-form JSON)."""
643
+ """Has no effect."""
634
644
  content: JSON
635
645
  """
636
- ID of an existing step. When set, the create acts as an idempotent upsert against the existing step.
646
+ The ID of an existing step to use instead. `clientId` then maps to it, and nothing is written.
637
647
  """
638
648
  stepId: ID
639
649
  }
@@ -642,19 +652,23 @@ input StepCreateData {
642
652
  ### `StepUpdateData`
643
653
 
644
654
  ```graphql
645
- """Data for updating an existing step."""
655
+ """
656
+ A step to update in an `experienceFlowUpdate`. Omit a field to keep its value.
657
+ """
646
658
  input StepUpdateData {
647
- """Step ID."""
659
+ """The ID of the step."""
648
660
  id: ID!
649
- """New display name."""
661
+ """The name of the step."""
650
662
  name: String
651
- """New description."""
663
+ """A description of the step."""
652
664
  description: String
653
- """New layout name."""
665
+ """The layout name: the component that renders the step."""
654
666
  layoutName: String
655
- """New field-id list (replaces the existing list when set)."""
667
+ """
668
+ The IDs of the fields on the step, in order. Replaces the current list.
669
+ """
656
670
  fieldIds: [ID!]
657
- """New step content configuration."""
671
+ """Has no effect."""
658
672
  content: JSON
659
673
  }
660
674
  ```
@@ -662,15 +676,15 @@ input StepUpdateData {
662
676
  ### `ConditionChangesInput`
663
677
 
664
678
  ```graphql
665
- """Condition-level changes within an `experienceFlowUpdate` batch."""
679
+ """The condition changes in an `experienceFlowUpdate`."""
666
680
  input ConditionChangesInput {
667
- """
668
- Conditions to create. Each entry carries a `clientId` for cross-referencing from `nodes`.
669
- """
681
+ """The conditions to create."""
670
682
  create: [ConditionCreateData!]
671
- """Conditions to update."""
683
+ """The conditions to update."""
672
684
  update: [ConditionUpdateData!]
673
- """Condition ids to delete."""
685
+ """
686
+ The IDs of conditions that no node may reference after the save. The conditions stay in the workspace.
687
+ """
674
688
  delete: [ID!]
675
689
  }
676
690
  ```
@@ -678,18 +692,22 @@ input ConditionChangesInput {
678
692
  ### `ConditionCreateData`
679
693
 
680
694
  ```graphql
681
- """Data for creating a new condition."""
695
+ """A condition to create in an `experienceFlowUpdate`."""
682
696
  input ConditionCreateData {
683
- """Client-generated ID for mapping and cross-referencing."""
697
+ """
698
+ A client-chosen ID that other changes in the same call use to refer to the condition.
699
+ """
684
700
  clientId: ID!
685
- """Display name for the condition."""
701
+ """The name of the condition."""
686
702
  name: String!
687
- """Unique key identifier for the condition."""
703
+ """
704
+ The stable identifier of the condition, unique within the workspace. It cannot change later.
705
+ """
688
706
  key: String!
689
- """JSON Logic expression for condition evaluation."""
707
+ """The rule, as a JSON Logic expression."""
690
708
  logic: JSON!
691
709
  """
692
- ID of an existing condition. When set, the create acts as an idempotent upsert against the existing condition.
710
+ The ID of an existing condition to use instead. `clientId` then maps to it, and nothing is written.
693
711
  """
694
712
  conditionId: ID
695
713
  }
@@ -698,13 +716,15 @@ input ConditionCreateData {
698
716
  ### `ConditionUpdateData`
699
717
 
700
718
  ```graphql
701
- """Data for updating an existing condition."""
719
+ """
720
+ A condition to update in an `experienceFlowUpdate`. Omit a field to keep its value.
721
+ """
702
722
  input ConditionUpdateData {
703
- """Condition ID."""
723
+ """The ID of the condition."""
704
724
  id: ID!
705
- """New display name."""
725
+ """The name of the condition."""
706
726
  name: String
707
- """New JSON Logic expression."""
727
+ """The rule, as a JSON Logic expression."""
708
728
  logic: JSON
709
729
  }
710
730
  ```
@@ -712,15 +732,15 @@ input ConditionUpdateData {
712
732
  ### `ActionChangesInput`
713
733
 
714
734
  ```graphql
715
- """Action-level changes within an `experienceFlowUpdate` batch."""
735
+ """The action changes in an `experienceFlowUpdate`."""
716
736
  input ActionChangesInput {
717
- """
718
- Actions to create. Each entry carries a `clientId` for cross-referencing from `nodes`.
719
- """
737
+ """The actions to create."""
720
738
  create: [ActionCreateData!]
721
- """Actions to update."""
739
+ """The actions to update."""
722
740
  update: [ActionUpdateData!]
723
- """Action ids to delete."""
741
+ """
742
+ The IDs of actions that no node may reference after the save. The actions stay in the workspace.
743
+ """
724
744
  delete: [ID!]
725
745
  }
726
746
  ```
@@ -728,18 +748,22 @@ input ActionChangesInput {
728
748
  ### `ActionCreateData`
729
749
 
730
750
  ```graphql
731
- """Data for creating a new action in the parent workspace."""
751
+ """An action to create in an `experienceFlowUpdate`."""
732
752
  input ActionCreateData {
733
- """Client-generated ID for mapping and cross-referencing."""
753
+ """
754
+ A client-chosen ID that other changes in the same call use to refer to the action.
755
+ """
734
756
  clientId: ID!
735
- """Display name for the action."""
757
+ """The name of the action."""
736
758
  name: String!
737
- """Unique key identifier for the action."""
759
+ """
760
+ The stable identifier of the action, unique within the workspace. It cannot change later.
761
+ """
738
762
  key: String!
739
- """Description of what this action does."""
763
+ """A description of the action."""
740
764
  description: String
741
765
  """
742
- ID of an existing action. When set, the create acts as an idempotent upsert against the existing action.
766
+ The ID of an existing action to use instead. `clientId` then maps to it, and nothing is written.
743
767
  """
744
768
  actionId: ID
745
769
  }
@@ -748,17 +772,18 @@ input ActionCreateData {
748
772
  ### `ActionUpdateData`
749
773
 
750
774
  ```graphql
751
- """Data for updating an existing action."""
775
+ """
776
+ An action to update in an `experienceFlowUpdate`. Omit a field to keep its value.
777
+ """
752
778
  input ActionUpdateData {
753
- """Action ID."""
779
+ """The ID of the action."""
754
780
  id: ID!
755
- """New display name."""
781
+ """The name of the action."""
756
782
  name: String
757
- """New description."""
783
+ """A description of the action."""
758
784
  description: String
759
785
  """
760
- Replacement set of ids for the fields whose responses this action receives.
761
- Omit to leave the set unchanged; pass an empty list to request nothing.
786
+ The IDs of the fields whose answers the action receives. Replaces the current set; an empty list clears it.
762
787
  """
763
788
  fieldIds: [ID!]
764
789
  }
@@ -767,15 +792,13 @@ input ActionUpdateData {
767
792
  ### `FieldChangesInput`
768
793
 
769
794
  ```graphql
770
- """Field-level changes within an `experienceFlowUpdate` batch."""
795
+ """The field changes in an `experienceFlowUpdate`."""
771
796
  input FieldChangesInput {
772
- """
773
- Fields to create. Each entry carries a `clientId` and a step reference.
774
- """
797
+ """The fields to create."""
775
798
  create: [FieldCreateData!]
776
- """Fields to update."""
799
+ """The fields to update."""
777
800
  update: [FieldUpdateData!]
778
- """Field ids to delete."""
801
+ """Has no effect."""
779
802
  delete: [ID!]
780
803
  }
781
804
  ```
@@ -783,52 +806,52 @@ input FieldChangesInput {
783
806
  ### `FieldCreateData`
784
807
 
785
808
  ```graphql
786
- """Data for creating a new field in the parent workspace."""
809
+ """A field to create in an `experienceFlowUpdate`."""
787
810
  input FieldCreateData {
788
- """Client-generated ID for mapping and cross-referencing."""
811
+ """
812
+ A client-chosen ID that other changes in the same call use to refer to the field.
813
+ """
789
814
  clientId: ID!
790
815
  """
791
- Reference an existing step by server ID. Mutually exclusive with `stepClientId`.
816
+ The ID of an existing step to put the field on. Excludes `stepClientId`.
792
817
  """
793
818
  stepId: ID
794
819
  """
795
- Reference a step being created in this same mutation. Mutually exclusive with `stepId`.
820
+ The `clientId` of a step created in the same call to put the field on. Excludes `stepId`.
796
821
  """
797
822
  stepClientId: ID
798
- """Stable machine-readable name."""
823
+ """The machine-readable name of the field."""
799
824
  name: String!
800
- """Unique key identifier for the field."""
825
+ """
826
+ The stable identifier of the field, unique within the workspace. It cannot change later.
827
+ """
801
828
  key: String!
802
- """Human-readable label."""
829
+ """The label shown next to the input."""
803
830
  label: String!
804
- """The field type."""
831
+ """The kind of value the field captures."""
805
832
  type: FieldType!
806
- """Whether multiple values are allowed."""
833
+ """Whether the field accepts more than one value."""
807
834
  multiple: Boolean
808
- """Whether the field is required."""
835
+ """Whether the visitor must answer the field."""
809
836
  required: Boolean
810
- """Validation rules as a JSON-encoded string. Parsed server-side."""
837
+ """The validation rules, as a JSON string."""
811
838
  validationString: String
812
- """JSON default value."""
839
+ """The value the field starts with."""
813
840
  defaultValue: JSON
814
- """JSON Logic condition controlling whether the field is rendered."""
841
+ """A JSON Logic rule that decides whether the field renders."""
815
842
  condition: JSON
816
- """Placeholder text."""
843
+ """The text shown in the empty input."""
817
844
  placeholder: String
818
- """Description."""
845
+ """A description shown with the label."""
819
846
  description: String
820
- """Help text."""
847
+ """A hint shown below the field."""
821
848
  helpText: String
822
- """
823
- When true, the captured value is excluded from analytics tracking. Omitted defaults to `true`: tracking is opt-in.
824
- """
849
+ """Whether the answer is left out of analytics. Defaults to `true`."""
825
850
  doNotTrack: Boolean
826
- """
827
- When true, the captured value is excluded from persistence. Omitted defaults to `true`: persistence is opt-in.
828
- """
851
+ """Whether the answer is left out of storage. Defaults to `true`."""
829
852
  doNotStore: Boolean
830
853
  """
831
- ID of an existing field. When set, the create acts as an idempotent upsert against the existing field.
854
+ The ID of an existing field to use instead. `clientId` then maps to it, and nothing is written.
832
855
  """
833
856
  fieldId: ID
834
857
  }
@@ -837,39 +860,41 @@ input FieldCreateData {
837
860
  ### `FieldUpdateData`
838
861
 
839
862
  ```graphql
840
- """Data for updating an existing field."""
863
+ """
864
+ A field to update in an `experienceFlowUpdate`. Omit a field to keep its value. `type` is required.
865
+ """
841
866
  input FieldUpdateData {
842
- """Field ID."""
867
+ """The ID of the field."""
843
868
  id: ID!
844
- """New machine-readable name."""
869
+ """The machine-readable name of the field."""
845
870
  name: String
846
- """New label."""
871
+ """The label shown next to the input."""
847
872
  label: String
848
873
  """
849
- Field type. Required even when unchanged — used to coerce other fields server-side.
874
+ The kind of value the field captures. Required: send the current type to keep it.
850
875
  """
851
876
  type: FieldType!
852
- """Whether multiple values are allowed."""
877
+ """Whether the field accepts more than one value."""
853
878
  multiple: Boolean
854
- """Whether the field is required."""
879
+ """Whether the visitor must answer the field."""
855
880
  required: Boolean
856
- """Validation rules as a JSON-encoded string."""
881
+ """The validation rules, as a JSON string."""
857
882
  validationString: String
858
- """JSON default value."""
883
+ """The value the field starts with."""
859
884
  defaultValue: JSON
860
- """JSON Logic condition controlling whether the field is rendered."""
885
+ """A JSON Logic rule that decides whether the field renders."""
861
886
  condition: JSON
862
- """Placeholder text."""
887
+ """The text shown in the empty input."""
863
888
  placeholder: String
864
- """Description."""
889
+ """A description shown with the label."""
865
890
  description: String
866
- """Help text."""
891
+ """A hint shown below the field."""
867
892
  helpText: String
868
- """When true, the captured value is excluded from analytics tracking."""
893
+ """Whether the answer is left out of analytics."""
869
894
  doNotTrack: Boolean
870
- """When true, the captured value is excluded from persistence."""
895
+ """Whether the answer is left out of storage."""
871
896
  doNotStore: Boolean
872
- """Field options as a JSON array."""
897
+ """The choices, as a JSON array."""
873
898
  options: JSON
874
899
  }
875
900
  ```
@@ -877,13 +902,13 @@ input FieldUpdateData {
877
902
  ### `ExperienceNodeChangesInput`
878
903
 
879
904
  ```graphql
880
- """Node-level changes within an `experienceFlowUpdate` batch."""
905
+ """The node changes in an `experienceFlowUpdate`."""
881
906
  input ExperienceNodeChangesInput {
882
- """Nodes to create."""
907
+ """The nodes to create."""
883
908
  create: [ExperienceNodeCreateData!]
884
- """Nodes to update."""
909
+ """The nodes to update."""
885
910
  update: [ExperienceNodeUpdateData!]
886
- """Node ids to delete."""
911
+ """The IDs of the nodes to delete."""
887
912
  delete: [ID!]
888
913
  }
889
914
  ```
@@ -892,47 +917,44 @@ input ExperienceNodeChangesInput {
892
917
 
893
918
  ```graphql
894
919
  """
895
- Data for creating a new node in the flow graph. The fields populated
896
- depend on `type`:
897
-
898
- - `STEP`: `stepId` or `stepClientId` (mutually exclusive).
899
- - `CONDITION`: `conditionId` or `conditionClientId`.
900
- - `ACTION`: `actionId` or `actionClientId`.
901
- - `EXPERIENCE`: `targetExperienceId`.
902
- - `ORIGIN`: no extras.
920
+ A node to create in an `experienceFlowUpdate`. Set only the reference that matches `type`: a step
921
+ for `STEP`, a condition for `CONDITION`, an action for `ACTION`, an experience for `EXPERIENCE`,
922
+ and none for `ORIGIN`.
903
923
  """
904
924
  input ExperienceNodeCreateData {
905
- """Client-generated ID for mapping and cross-referencing from edges."""
925
+ """
926
+ A client-chosen ID that edges in the same call use to refer to the node.
927
+ """
906
928
  clientId: ID!
907
- """Node kind discriminator."""
929
+ """The kind of node."""
908
930
  type: ExperienceNodeType!
909
- """Canvas position."""
931
+ """The position of the node on the canvas."""
910
932
  position: PositionInput!
911
933
  """
912
- For STEP nodes: reference an existing step by server ID. Mutually exclusive with `stepClientId`.
934
+ The ID of an existing step a `STEP` node shows. Excludes `stepClientId`.
913
935
  """
914
936
  stepId: ID
915
937
  """
916
- For STEP nodes: reference a step being created in this same mutation. Mutually exclusive with `stepId`.
938
+ The `clientId` of a step created in the same call that a `STEP` node shows. Excludes `stepId`.
917
939
  """
918
940
  stepClientId: ID
919
941
  """
920
- For CONDITION nodes: reference an existing condition by server ID. Mutually exclusive with `conditionClientId`.
942
+ The ID of an existing condition a `CONDITION` node evaluates. Excludes `conditionClientId`.
921
943
  """
922
944
  conditionId: ID
923
945
  """
924
- For CONDITION nodes: reference a condition being created in this same mutation. Mutually exclusive with `conditionId`.
946
+ The `clientId` of a condition created in the same call that a `CONDITION` node evaluates. Excludes `conditionId`.
925
947
  """
926
948
  conditionClientId: ID
927
949
  """
928
- For ACTION nodes: reference an existing workspace-level action. Mutually exclusive with `actionClientId`.
950
+ The ID of an existing action an `ACTION` node starts. Excludes `actionClientId`.
929
951
  """
930
952
  actionId: ID
931
953
  """
932
- For ACTION nodes: reference an action being created in this same mutation. Mutually exclusive with `actionId`.
954
+ The `clientId` of an action created in the same call that an `ACTION` node starts. Excludes `actionId`.
933
955
  """
934
956
  actionClientId: ID
935
- """For EXPERIENCE nodes: reference target experience to launch."""
957
+ """The ID of the experience an `EXPERIENCE` node launches."""
936
958
  targetExperienceId: ID
937
959
  }
938
960
  ```
@@ -940,19 +962,21 @@ input ExperienceNodeCreateData {
940
962
  ### `ExperienceNodeUpdateData`
941
963
 
942
964
  ```graphql
943
- """Data for updating an existing node."""
965
+ """
966
+ A node to update in an `experienceFlowUpdate`. Only its position changes.
967
+ """
944
968
  input ExperienceNodeUpdateData {
945
- """Node ID."""
969
+ """The ID of the node."""
946
970
  id: ID!
947
- """New canvas position."""
971
+ """The position of the node on the canvas."""
948
972
  position: PositionInput!
949
- """For STEP nodes: new step reference."""
973
+ """Has no effect."""
950
974
  stepId: ID
951
- """For CONDITION nodes: new condition reference."""
975
+ """Has no effect."""
952
976
  conditionId: ID
953
- """For ACTION nodes: new action reference."""
977
+ """Has no effect."""
954
978
  actionId: ID
955
- """For EXPERIENCE nodes: new target experience."""
979
+ """Has no effect."""
956
980
  targetExperienceId: ID
957
981
  }
958
982
  ```
@@ -960,13 +984,13 @@ input ExperienceNodeUpdateData {
960
984
  ### `ExperienceEdgeChangesInput`
961
985
 
962
986
  ```graphql
963
- """Edge-level changes within an `experienceFlowUpdate` batch."""
987
+ """The edge changes in an `experienceFlowUpdate`."""
964
988
  input ExperienceEdgeChangesInput {
965
- """Edges to create."""
989
+ """The edges to create."""
966
990
  create: [ExperienceEdgeCreateInput!]
967
- """Edges to update."""
991
+ """The edges to update."""
968
992
  update: [ExperienceEdgeUpdateInput!]
969
- """Edge ids to delete."""
993
+ """The IDs of the edges to delete."""
970
994
  delete: [ID!]
971
995
  }
972
996
  ```
@@ -974,27 +998,27 @@ input ExperienceEdgeChangesInput {
974
998
  ### `ExperienceEdgeCreateInput`
975
999
 
976
1000
  ```graphql
977
- """Data for creating a new edge."""
1001
+ """An edge to create in an `experienceFlowUpdate`."""
978
1002
  input ExperienceEdgeCreateInput {
979
- """Client-generated ID for this edge."""
1003
+ """A client-chosen ID for the edge."""
980
1004
  clientId: ID!
981
1005
  """
982
- Source node by server ID. Mutually exclusive with `sourceNodeClientId`.
1006
+ The ID of an existing node the edge leaves. Excludes `sourceNodeClientId`.
983
1007
  """
984
1008
  sourceNodeId: ID
985
1009
  """
986
- Source node being created in this same mutation. Mutually exclusive with `sourceNodeId`.
1010
+ The `clientId` of a node created in the same call that the edge leaves. Excludes `sourceNodeId`.
987
1011
  """
988
1012
  sourceNodeClientId: ID
989
1013
  """
990
- Destination node by server ID. Mutually exclusive with `destinationNodeClientId`.
1014
+ The ID of an existing node the edge enters. Excludes `destinationNodeClientId`.
991
1015
  """
992
1016
  destinationNodeId: ID
993
1017
  """
994
- Destination node being created in this same mutation. Mutually exclusive with `destinationNodeId`.
1018
+ The `clientId` of a node created in the same call that the edge enters. Excludes `destinationNodeId`.
995
1019
  """
996
1020
  destinationNodeClientId: ID
997
- """For edges from conditional nodes: which branch (TRUE / FALSE)."""
1021
+ """The branch the edge leaves a condition node from."""
998
1022
  sourceHandle: ExperienceEdgeHandle
999
1023
  }
1000
1024
  ```
@@ -1002,15 +1026,17 @@ input ExperienceEdgeCreateInput {
1002
1026
  ### `ExperienceEdgeUpdateInput`
1003
1027
 
1004
1028
  ```graphql
1005
- """Data for updating an existing edge."""
1029
+ """
1030
+ An edge to update in an `experienceFlowUpdate`. Omit a field to keep its value.
1031
+ """
1006
1032
  input ExperienceEdgeUpdateInput {
1007
- """Edge ID."""
1033
+ """The ID of the edge."""
1008
1034
  id: ID!
1009
- """New source node id."""
1035
+ """The ID of the node the edge leaves."""
1010
1036
  sourceNodeId: ID
1011
- """New destination node id."""
1037
+ """The ID of the node the edge enters."""
1012
1038
  destinationNodeId: ID
1013
- """New conditional branch handle."""
1039
+ """The branch the edge leaves a condition node from."""
1014
1040
  sourceHandle: ExperienceEdgeHandle
1015
1041
  }
1016
1042
  ```
@@ -1018,15 +1044,15 @@ input ExperienceEdgeUpdateInput {
1018
1044
  ### `ExperienceFlowUpdatePayload`
1019
1045
 
1020
1046
  ```graphql
1021
- """Payload returned by `experienceFlowUpdate`."""
1047
+ """The result of `experienceFlowUpdate`."""
1022
1048
  type ExperienceFlowUpdatePayload {
1023
- """The updated experience with all changes applied."""
1049
+ """The experience with the changes applied."""
1024
1050
  experience: Experience
1051
+ """The server ID for each `clientId` in the input."""
1052
+ idMappings: ExperienceFlowIdMappings!
1025
1053
  """
1026
- Mappings from client-generated IDs to server-generated IDs, grouped by entity kind.
1054
+ Always empty. A change that fails validation fails the whole operation with an error.
1027
1055
  """
1028
- idMappings: ExperienceFlowIdMappings!
1029
- """Validation errors. Empty array indicates success."""
1030
1056
  errors: [UserError!]!
1031
1057
  }
1032
1058
  ```
@@ -1035,20 +1061,20 @@ type ExperienceFlowUpdatePayload {
1035
1061
 
1036
1062
  ```graphql
1037
1063
  """
1038
- Categorised client-to-server ID mappings emitted by `experienceFlowUpdate`.
1064
+ The server IDs that `experienceFlowUpdate` assigned to each `clientId`, by kind of item.
1039
1065
  """
1040
1066
  type ExperienceFlowIdMappings {
1041
- """Step id mappings."""
1067
+ """The step IDs."""
1042
1068
  steps: [IdMapping!]!
1043
- """Condition id mappings."""
1069
+ """The condition IDs."""
1044
1070
  conditions: [IdMapping!]!
1045
- """Action id mappings."""
1071
+ """The action IDs."""
1046
1072
  actions: [IdMapping!]!
1047
- """Field id mappings."""
1073
+ """The field IDs."""
1048
1074
  fields: [IdMapping!]!
1049
- """Node id mappings."""
1075
+ """The node IDs."""
1050
1076
  nodes: [IdMapping!]!
1051
- """Edge id mappings."""
1077
+ """The edge IDs."""
1052
1078
  edges: [IdMapping!]!
1053
1079
  }
1054
1080
  ```
@@ -1056,11 +1082,13 @@ type ExperienceFlowIdMappings {
1056
1082
  ### `IdMapping`
1057
1083
 
1058
1084
  ```graphql
1059
- """Maps a client-generated ID to a server-generated ID."""
1085
+ """
1086
+ A client-chosen ID paired with the server ID of the item it stands for.
1087
+ """
1060
1088
  type IdMapping {
1061
- """The ID provided by the client in the create operation."""
1089
+ """The ID the client chose."""
1062
1090
  clientId: ID!
1063
- """The ID generated by the server for the created entity."""
1091
+ """The server ID of the created or reused item."""
1064
1092
  id: ID!
1065
1093
  }
1066
1094
  ```
@@ -1069,14 +1097,12 @@ type IdMapping {
1069
1097
 
1070
1098
  ```graphql
1071
1099
  """
1072
- An experience that references a workspace resource, preventing its
1073
- deletion. Returned in `ActionDeleteUserError`, `ConditionDeleteUserError`,
1074
- and `StepDeleteUserError` when the delete is blocked by usage.
1100
+ An experience that references a workspace item and so blocks its delete.
1075
1101
  """
1076
1102
  type ReferencingExperience {
1077
- """The experience id."""
1103
+ """The ID of the experience."""
1078
1104
  id: ID!
1079
- """The experience name."""
1105
+ """The name of the experience."""
1080
1106
  name: String!
1081
1107
  }
1082
1108
  ```
@@ -1084,15 +1110,13 @@ type ReferencingExperience {
1084
1110
  ### `ExperienceSortKeys`
1085
1111
 
1086
1112
  ```graphql
1087
- """
1088
- Sort keys for `experiences(...)`. Pair with `reverse: true` to flip the order (`NAME` + `reverse: false` sorts A→Z; `CREATED_AT` + `reverse: true` is newest-first).
1089
- """
1113
+ """The orders `experiences` can sort by. `reverse: true` flips each."""
1090
1114
  enum ExperienceSortKeys {
1091
- """Sort by `name` (alphabetical)."""
1115
+ """By name, A to Z."""
1092
1116
  NAME
1093
- """Sort by `createdAt`."""
1117
+ """By creation time, oldest first."""
1094
1118
  CREATED_AT
1095
- """Sort by `updatedAt`."""
1119
+ """By last change, oldest first."""
1096
1120
  UPDATED_AT
1097
1121
  }
1098
1122
  ```