@picked/client 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 (147) hide show
  1. package/README.md +34 -158
  2. package/dist/{api-BlRFU0Fi.js → api-BOKA2i46.js} +1 -1
  3. package/dist/{api-AaQeg3Ij.cjs → api-C5jUHF3A.cjs} +1 -1
  4. package/dist/cjs/index.js +2 -2
  5. package/dist/cjs/plugins/dynamic-experiences/index.js +1 -1
  6. package/dist/cjs/server/index.js +1 -1
  7. package/dist/esm/index.js +2 -2
  8. package/dist/esm/plugins/dynamic-experiences/index.js +2 -2
  9. package/dist/esm/server/index.js +2 -2
  10. package/dist/{plugin-CVD2TnRC.cjs → plugin-BcB9ah7q.cjs} +1 -1
  11. package/dist/{plugin-DhznDG-h.js → plugin-COWxZiTa.js} +2 -2
  12. package/dist/{preview-unavailable-mW4Pj3Ph.js → preview-unavailable-BJjc3UNr.js} +1 -1
  13. package/dist/{preview-unavailable-xWLCr93y.cjs → preview-unavailable-CV1BonKA.cjs} +1 -1
  14. package/dist/{provider-COb_V-yq.js → provider-CszmtTg3.js} +1 -1
  15. package/dist/{provider-zag5m5GH.cjs → provider-daBChM0G.cjs} +1 -1
  16. package/package.json +5 -5
  17. package/dist/docs/_root.css +0 -101
  18. package/dist/docs/explanation/conditions-and-the-logic-engine.md +0 -94
  19. package/dist/docs/explanation/content-references.md +0 -99
  20. package/dist/docs/explanation/feature-flag-allocation.md +0 -218
  21. package/dist/docs/explanation/how-picked-works.md +0 -124
  22. package/dist/docs/explanation/how-pickedql-works.md +0 -76
  23. package/dist/docs/explanation/pages-and-flows.md +0 -64
  24. package/dist/docs/explanation/the-content-model.md +0 -87
  25. package/dist/docs/explanation/the-two-apis.md +0 -68
  26. package/dist/docs/explanation/why-server-side-rendering.md +0 -76
  27. package/dist/docs/explanation/workspaces-and-versions.md +0 -71
  28. package/dist/docs/how-to/add-a-step-field-or-action.md +0 -43
  29. package/dist/docs/how-to/analytics/index.md +0 -316
  30. package/dist/docs/how-to/archive-or-delete-a-workspace.md +0 -46
  31. package/dist/docs/how-to/authenticate-the-cli.md +0 -101
  32. package/dist/docs/how-to/authenticate-with-a-magic-link.md +0 -47
  33. package/dist/docs/how-to/authenticate-with-a-password.md +0 -59
  34. package/dist/docs/how-to/authenticate-with-an-api-key.md +0 -51
  35. package/dist/docs/how-to/authenticate-with-oauth.md +0 -40
  36. package/dist/docs/how-to/build-a-flow.md +0 -93
  37. package/dist/docs/how-to/call-an-external-api-from-a-workflow.md +0 -102
  38. package/dist/docs/how-to/connect-the-mcp-server.md +0 -46
  39. package/dist/docs/how-to/create-a-content-entry.md +0 -48
  40. package/dist/docs/how-to/create-a-project.md +0 -29
  41. package/dist/docs/how-to/create-an-experience.md +0 -42
  42. package/dist/docs/how-to/create-and-revoke-an-api-key.md +0 -42
  43. package/dist/docs/how-to/debug-with-the-chrome-extension.md +0 -57
  44. package/dist/docs/how-to/define-a-page-layout.md +0 -46
  45. package/dist/docs/how-to/fill-and-publish-a-page.md +0 -66
  46. package/dist/docs/how-to/install-the-gtm-template.md +0 -84
  47. package/dist/docs/how-to/install-the-sdk.md +0 -93
  48. package/dist/docs/how-to/install-the-vite-plugin.md +0 -69
  49. package/dist/docs/how-to/invite-and-remove-members.md +0 -35
  50. package/dist/docs/how-to/point-one-entry-at-another.md +0 -61
  51. package/dist/docs/how-to/preview-a-workspace.md +0 -28
  52. package/dist/docs/how-to/publish-a-workspace.md +0 -30
  53. package/dist/docs/how-to/read-a-feature-flag.md +0 -113
  54. package/dist/docs/how-to/read-a-referenced-entry.md +0 -109
  55. package/dist/docs/how-to/register-a-component.md +0 -55
  56. package/dist/docs/how-to/register-an-action-handler.md +0 -85
  57. package/dist/docs/how-to/register-an-api-that-uses-oauth2.md +0 -107
  58. package/dist/docs/how-to/render-a-step-form.md +0 -131
  59. package/dist/docs/how-to/render-an-unpublished-preview.md +0 -41
  60. package/dist/docs/how-to/retry-a-failed-call-with-a-loop.md +0 -81
  61. package/dist/docs/how-to/reuse-a-section.md +0 -53
  62. package/dist/docs/how-to/reuse-a-step-field-or-action.md +0 -28
  63. package/dist/docs/how-to/roll-back-a-published-version.md +0 -26
  64. package/dist/docs/how-to/run-an-ab-test.md +0 -49
  65. package/dist/docs/how-to/run-code-on-a-form-submission.md +0 -125
  66. package/dist/docs/how-to/server-render-a-page.md +0 -81
  67. package/dist/docs/how-to/set-a-content-security-policy.md +0 -32
  68. package/dist/docs/how-to/set-up-mfa.md +0 -113
  69. package/dist/docs/how-to/switch-workspaces.md +0 -122
  70. package/dist/docs/how-to/upload-and-use-an-asset.mdx +0 -73
  71. package/dist/docs/how-to/validate-a-field.md +0 -52
  72. package/dist/docs/how-to/wait-for-an-action-response.md +0 -182
  73. package/dist/docs/how-to/write-a-condition.md +0 -45
  74. package/dist/docs/how-to/write-a-predicate.md +0 -60
  75. package/dist/docs/index.md +0 -59
  76. package/dist/docs/reference/dashboard/actions.mdx +0 -56
  77. package/dist/docs/reference/dashboard/api-keys.mdx +0 -38
  78. package/dist/docs/reference/dashboard/conditions.mdx +0 -42
  79. package/dist/docs/reference/dashboard/content/asset-library.mdx +0 -63
  80. package/dist/docs/reference/dashboard/content/blocks.mdx +0 -57
  81. package/dist/docs/reference/dashboard/content/content-entries.mdx +0 -95
  82. package/dist/docs/reference/dashboard/content/models.mdx +0 -108
  83. package/dist/docs/reference/dashboard/content/pages.mdx +0 -61
  84. package/dist/docs/reference/dashboard/experiences.mdx +0 -51
  85. package/dist/docs/reference/dashboard/external-apis.md +0 -169
  86. package/dist/docs/reference/dashboard/features.mdx +0 -154
  87. package/dist/docs/reference/dashboard/fields.mdx +0 -106
  88. package/dist/docs/reference/dashboard/flow-builder/canvas.mdx +0 -58
  89. package/dist/docs/reference/dashboard/flow-builder/condition-builder.md +0 -57
  90. package/dist/docs/reference/dashboard/flow-builder/keyboard-shortcuts.md +0 -72
  91. package/dist/docs/reference/dashboard/flow-builder/nodes.md +0 -63
  92. package/dist/docs/reference/dashboard/labels.md +0 -321
  93. package/dist/docs/reference/dashboard/lead-search.md +0 -224
  94. package/dist/docs/reference/dashboard/projects.mdx +0 -44
  95. package/dist/docs/reference/dashboard/reports.mdx +0 -43
  96. package/dist/docs/reference/dashboard/steps.mdx +0 -37
  97. package/dist/docs/reference/dashboard/team-management.md +0 -29
  98. package/dist/docs/reference/dashboard/workflow-runs.md +0 -142
  99. package/dist/docs/reference/dashboard/workflow-templates.md +0 -182
  100. package/dist/docs/reference/dashboard/workflow-test-runs.md +0 -77
  101. package/dist/docs/reference/dashboard/workspace-versioning.mdx +0 -30
  102. package/dist/docs/reference/dashboard/workspaces.mdx +0 -76
  103. package/dist/docs/reference/delivery-api/experience-content.md +0 -152
  104. package/dist/docs/reference/delivery-api/index.md +0 -45
  105. package/dist/docs/reference/delivery-api/preview-caching-crawling.md +0 -79
  106. package/dist/docs/reference/delivery-api/project-config.md +0 -65
  107. package/dist/docs/reference/delivery-api/workspace-schema.md +0 -107
  108. package/dist/docs/reference/glossary.md +0 -201
  109. package/dist/docs/reference/management-api/authentication.md +0 -87
  110. package/dist/docs/reference/management-api/authorization-and-scopes.md +0 -291
  111. package/dist/docs/reference/management-api/error-handling.md +0 -232
  112. package/dist/docs/reference/management-api/pagination.md +0 -192
  113. package/dist/docs/reference/pickedql/data-sources.md +0 -174
  114. package/dist/docs/reference/pickedql/dimensions.md +0 -103
  115. package/dist/docs/reference/pickedql/filtering.md +0 -64
  116. package/dist/docs/reference/pickedql/index.md +0 -18
  117. package/dist/docs/reference/pickedql/schema.md +0 -172
  118. package/dist/docs/reference/pickedql/virtual-functions.md +0 -248
  119. package/dist/docs/reference/sdk/actions.md +0 -154
  120. package/dist/docs/reference/sdk/analytics-events.md +0 -453
  121. package/dist/docs/reference/sdk/conditions.md +0 -147
  122. package/dist/docs/reference/sdk/content-security-policy.md +0 -21
  123. package/dist/docs/reference/sdk/content.md +0 -253
  124. package/dist/docs/reference/sdk/experiences.md +0 -51
  125. package/dist/docs/reference/sdk/features.md +0 -256
  126. package/dist/docs/reference/sdk/fields.md +0 -255
  127. package/dist/docs/reference/sdk/index.md +0 -68
  128. package/dist/docs/reference/sdk/plugins/create-experience.md +0 -123
  129. package/dist/docs/reference/sdk/plugins/dynamic-experiences.md +0 -74
  130. package/dist/docs/reference/sdk/plugins/index.md +0 -29
  131. package/dist/docs/reference/sdk/plugins/window-object.md +0 -25
  132. package/dist/docs/reference/sdk/predicates.md +0 -43
  133. package/dist/docs/reference/sdk/ssr/index.md +0 -33
  134. package/dist/docs/reference/sdk/ssr/rendering-and-hydration.md +0 -103
  135. package/dist/docs/reference/sdk/ssr/serialize.md +0 -80
  136. package/dist/docs/reference/sdk/ssr/slots-and-placements.md +0 -113
  137. package/dist/docs/reference/sdk/steps.md +0 -86
  138. package/dist/docs/reference/sdk/type-generation.md +0 -265
  139. package/dist/docs/reference/tools/chrome-extension.md +0 -16
  140. package/dist/docs/reference/tools/cli.md +0 -292
  141. package/dist/docs/reference/tools/image-optimisation-service.md +0 -104
  142. package/dist/docs/reference/tools/mcp.md +0 -136
  143. package/dist/docs/reference/tools/vite-plugin.md +0 -163
  144. package/dist/docs/tutorials/first-api-call.md +0 -235
  145. package/dist/docs/tutorials/first-experience-in-the-dashboard.mdx +0 -143
  146. package/dist/docs/tutorials/first-experience.mdx +0 -254
  147. package/dist/docs/tutorials/first-server-rendered-page.mdx +0 -186
@@ -1,72 +0,0 @@
1
- ---
2
- type: reference
3
- layout: docs
4
- ---
5
-
6
- # Keyboard shortcuts
7
-
8
- These shortcuts work when the canvas of the flow builder holds the keyboard input.
9
-
10
- ## Canvas tools
11
-
12
- | Shortcut (Mac) | Shortcut (PC) | Action |
13
- | --- | --- | --- |
14
- | `V` | `V` | The choose tool |
15
- | `H` | `H` | The hand tool, which pans the view |
16
- | `Space`, held | `Space`, held | The hand tool, while you hold the key |
17
-
18
- ## Layout
19
-
20
- | Shortcut (Mac) | Shortcut (PC) | Action |
21
- | --- | --- | --- |
22
- | `Shift+L` | `Shift+L` | Auto-layout |
23
-
24
- ## Choice
25
-
26
- | Shortcut (Mac) | Shortcut (PC) | Action |
27
- | --- | --- | --- |
28
- | `Cmd+A` | `Ctrl+A` | Choose every node |
29
- | `Escape` | `Escape` | Choose no node |
30
-
31
- ## Edits
32
-
33
- | Shortcut (Mac) | Shortcut (PC) | Action |
34
- | --- | --- | --- |
35
- | `Cmd+D` | `Ctrl+D` | Make a copy of each chosen node |
36
- | `Delete` or `Backspace` | `Delete` or `Backspace` | Delete each chosen node |
37
- | `Cmd+Z` | `Ctrl+Z` | Undo |
38
- | `Cmd+Shift+Z` | `Ctrl+Shift+Z` | Redo |
39
-
40
- ## Movement
41
-
42
- | Shortcut (Mac) | Shortcut (PC) | Action |
43
- | --- | --- | --- |
44
- | Arrow keys | Arrow keys | Move each chosen node a small distance |
45
- | `Shift` and an arrow key | `Shift` and an arrow key | Move each chosen node further |
46
-
47
- ## Zoom
48
-
49
- | Shortcut (Mac) | Shortcut (PC) | Action |
50
- | --- | --- | --- |
51
- | Scroll | Scroll | Zoom in or out |
52
- | Pinch | Pinch | Zoom in or out, on a trackpad |
53
- | `Cmd+=` | `Ctrl+=` | Zoom in |
54
- | `Cmd+-` | `Ctrl+-` | Zoom out |
55
- | `Shift+1` | `Shift+1` | Fit the flow to the view |
56
- | `Shift+0` | `Shift+0` | Zoom to 100% |
57
-
58
- ## Panels
59
-
60
- | Shortcut (Mac) | Shortcut (PC) | Action |
61
- | --- | --- | --- |
62
- | `Cmd+\` | `Ctrl+\` | Turn both side panels on or off |
63
- | `?` | `?` | Turn this shortcut list on or off |
64
-
65
- ---
66
-
67
- [Overview](/reference/dashboard/flow-builder/canvas) · [Nodes](/reference/dashboard/flow-builder/nodes) · [Build Flows](/how-to/build-a-flow) · **Keyboard Shortcuts** · [Condition Builder](/reference/dashboard/flow-builder/condition-builder)
68
-
69
- ## Related
70
-
71
- - [How to build a flow](/how-to/build-a-flow)
72
- - [Canvas](/reference/dashboard/flow-builder/canvas) — the panels and the view controls.
@@ -1,63 +0,0 @@
1
- ---
2
- type: reference
3
- layout: docs
4
- ---
5
-
6
- # Nodes
7
-
8
- A node is one part of a flow. Each node stands for a block in your experience. There
9
- are four node types.
10
-
11
- ## Origin
12
-
13
- Every flow starts with an origin node. It is a gray circle on the left side of the
14
- canvas, and it has one output handle on its right side.
15
-
16
- You cannot move the origin, delete it, or make a copy of it. It is always there.
17
-
18
- ## Step
19
-
20
- A step node stands for a screen that a visitor sees. It appears as a blue rectangle
21
- on the canvas.
22
-
23
- A step holds fields. Drag a field from the library onto a step node to assign
24
- it. The subtitle of the node gives the number of assigned fields.
25
-
26
- Each step has a `layoutName`. It tells the SDK which visual layout to use for this
27
- step. Set the layout name in the inspector.
28
-
29
- ## Action
30
-
31
- An action node stands for a side effect. A side effect happens where the visitor
32
- cannot see it. The node appears as a green rectangle.
33
-
34
- An action runs when the flow reaches it. Use an action to record an event, to send
35
- data, or to start an integration.
36
-
37
- ## Condition
38
-
39
- A condition node stands for a point where the flow splits. It appears as an amber
40
- rectangle.
41
-
42
- A condition node has two output handles, and not one. The green handle at the top
43
- right connects to the path for a true result. The red handle at the bottom right
44
- connects to the path for a false result.
45
-
46
- Define the rule in the inspector, with the visual condition builder. See
47
- [Conditions](/reference/dashboard/conditions) for more detail.
48
-
49
- ## Handles
50
-
51
- A handle is a connection point on a node. An input handle is on the left. An output
52
- handle is on the right. Drag from an output handle to an input handle to connect two
53
- nodes.
54
-
55
- ---
56
-
57
- [Overview](/reference/dashboard/flow-builder/canvas) · **Nodes** · [Build Flows](/how-to/build-a-flow) · [Keyboard Shortcuts](/reference/dashboard/flow-builder/keyboard-shortcuts) · [Condition Builder](/reference/dashboard/flow-builder/condition-builder)
58
-
59
- ## Related
60
-
61
- - [How to build a flow](/how-to/build-a-flow)
62
- - [Canvas](/reference/dashboard/flow-builder/canvas)
63
- - [About how Picked works](/explanation/how-picked-works) — why a flow is a graph.
@@ -1,321 +0,0 @@
1
- ---
2
- type: reference
3
- layout: docs
4
- ---
5
-
6
- # Labels
7
-
8
- A label is a name and a value on a lead, a project or a workflow run. A workflow sets and
9
- removes labels with tool nodes. A label can expire, a write can be conditional, and a node
10
- can increment a `number` label.
11
-
12
- ## Name, type and value
13
-
14
- | Part | Format |
15
- | --------- | --------------------------------------------------------------------------------------------------------------------------- |
16
- | Namespace | 1 to 64 characters. Each character is a lowercase letter, a digit, `_` or `-`. |
17
- | Key | 1 to 64 characters. Each character is a lowercase letter, a digit, `_` or `-`. |
18
- | Type | `text`, `number`, `boolean` or `json`. It tells how to read the value. |
19
- | Value | Text. A `number` label holds a number, a `boolean` label holds `true` or `false`, and a `json` label holds a JSON document. |
20
-
21
- The lead, the project or the run that has a label is the owner of the label. An owner has
22
- one label for each namespace and key.
23
-
24
- ## Owners
25
-
26
- | Owner | Where the labels stay | Scope to read the labels | Scope to set and remove the labels |
27
- | ------------ | ------------------------------------------------------------------------------------------------------------ | ---------------------------- | ---------------------------------- |
28
- | Lead | Until you delete the lead. Picked deletes the labels of a lead with the lead. | `ORGANIZATION_LEADS_READ` | `ORGANIZATION_LEADS_UPDATE` |
29
- | Project | Picked keeps the labels when you delete the project. These labels hold data for all the runs of the project. | `ORGANIZATION_PROJECTS_READ` | `ORGANIZATION_PROJECTS_UPDATE` |
30
- | Workflow run | With the run. Picked does not delete a run. | `ORGANIZATION_PROJECTS_READ` | `ORGANIZATION_PROJECTS_UPDATE` |
31
-
32
- A run reads, sets and removes its own labels without a scope.
33
-
34
- ## Labels in the dashboard
35
-
36
- The **Labels** card shows the labels of one owner, in one section for each namespace.
37
-
38
- | Page | Where the card shows | Scope to change the labels |
39
- | -------------- | ---------------------------------------------------------------------------------------------------------------- | ------------------------------ |
40
- | Lead | Next to the responses, or below them on a medium screen. On a narrow screen, it is on the **Labels** tab. | `ORGANIZATION_LEADS_UPDATE` |
41
- | Project labels | At `…/<project>/labels`. **Project labels** in the project menu opens the page for `ORGANIZATION_PROJECTS_READ`. | `ORGANIZATION_PROJECTS_UPDATE` |
42
- | Run | Below the details of the run. On a narrow screen, the card is on the **Labels** tab. | `ORGANIZATION_PROJECTS_UPDATE` |
43
-
44
- The project settings also have a **Labels** link to the Project labels page. To open the project
45
- settings, you must have `ORGANIZATION_PROJECTS_UPDATE`.
46
-
47
- Without the scope, the card shows the labels, and you cannot change them.
48
-
49
- With the scope, the card has these controls:
50
-
51
- | Control | Result |
52
- | ------------- | --------------------------------------------------------------------------------------------- |
53
- | The value | Changes the value of the label. |
54
- | **Add label** | Adds a label with a namespace, a key, a type and a value. This label does not expire. |
55
- | **×** | Removes the label. |
56
- | **Save** | Sets and removes the labels that you changed. Picked does not change a label before **Save**. |
57
- | **Discard** | Removes your changes. |
58
-
59
- A label with an expiry shows the time until it expires. You can remove it, but you cannot
60
- change its value.
61
-
62
- ## Visitor data in project and run labels
63
-
64
- The labels of a project and of a run stay after Picked deletes a lead. Picked does not delete
65
- visitor data in a project label or a run label with the lead. Visitor data is, for example, an
66
- email address, a phone number or a visitor ID.
67
-
68
- A project label or a run label can have the `sha256` hash of a visitor identifier as its key.
69
- With a hash, a workflow can hold a label for one visitor across runs. Use `expiresIn` to set
70
- how long the label stays. Refer to [Example: one run at a time for each visitor](#example-one-run-at-a-time-for-each-visitor).
71
-
72
- ## Tools
73
-
74
- | Tool | Name in the editor | Owner | Output | Scopes |
75
- | ----------------------- | ------------------------- | ------------------------------- | ---------------------------------- | -------------------------------------------------------------------------------------- |
76
- | `set_lead_labels` | **Set lead labels** | The lead in its `lead` argument | `lead` and `count` | `ORGANIZATION_LEADS_UPDATE` and `ORGANIZATION_LEADS_READ` |
77
- | `remove_lead_labels` | **Remove lead labels** | The lead in its `lead` argument | `lead` and `removed` | `ORGANIZATION_LEADS_UPDATE` and `ORGANIZATION_LEADS_READ` |
78
- | `create_lead` | **Create lead** | The lead that it makes | `lead`, `created` and `labelCount` | `ORGANIZATION_LEADS_CREATE`, `ORGANIZATION_LEADS_READ` and `ORGANIZATION_LEADS_UPDATE` |
79
- | `set_project_labels` | **Set project labels** | The project of the run | `project` and `count` | `ORGANIZATION_PROJECTS_UPDATE` and `ORGANIZATION_PROJECTS_READ` |
80
- | `remove_project_labels` | **Remove project labels** | The project of the run | `project` and `removed` | `ORGANIZATION_PROJECTS_UPDATE` and `ORGANIZATION_PROJECTS_READ` |
81
- | `get_project` | **Get project** | The project of the run | `project` | `ORGANIZATION_PROJECTS_READ` |
82
- | `set_run_labels` | **Set run labels** | The run | `run` and `count` | None |
83
- | `remove_run_labels` | **Remove run labels** | The run | `run` and `removed` | None |
84
- | `get_run` | **Get run** | The run | `run` | None |
85
-
86
- **Set project labels**, **Remove project labels**, **Set run labels**, **Remove run labels**,
87
- **Get project** and **Get run** have no argument for the owner.
88
-
89
- The `lead`, `project` and `run` outputs hold the labels of the owner at the time that a later
90
- node reads them, as `labels.<namespace>.<key>`:
91
-
92
- | Output | Fields |
93
- | --------- | ------------------------- |
94
- | `lead` | The lead, and `labels` |
95
- | `project` | `id`, `name` and `labels` |
96
- | `run` | `id` and `labels` |
97
-
98
- For example, `{{ nodes.project.project.labels.cms.sent_today }}` reads the label
99
- `cms.sent_today` of the project.
100
-
101
- When Picked refuses the labels of a node, or cannot find the owner, the node fails with the
102
- code `tool_failed`. Its reason is the error code in lowercase, such as `label_write_invalid`,
103
- `value_invalid_for_type` or `owner_not_found`. An edge on the error exit of the node can
104
- continue the run. Refer to the [workflow runs reference](/reference/dashboard/workflow-runs#run-status).
105
-
106
- ## Labels in a test run
107
-
108
- For the run tools in a test run, refer to
109
- [What runs](/reference/dashboard/workflow-test-runs#what-runs).
110
-
111
- ## A row that sets a label
112
-
113
- The `labels` argument of **Set lead labels**, **Set project labels**, **Set run labels** and
114
- **Create lead** is a list of rows. Each row sets one label.
115
-
116
- | Field | Type | Default | Description |
117
- | -------------- | ----------------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
118
- | `namespace` | Text | — | The namespace of the label. |
119
- | `key` | Text | — | The key of the label. |
120
- | `type` | Text | `number` with `increment`, else `text` | The type of the label. |
121
- | `value` | Text | — | The value of the label. |
122
- | `increment` | Number | — | An amount to add to the value of a `number` label. Refer to [Increments](#increments). |
123
- | `expiresIn` | Number | No expiry | The number of seconds until the label expires, from 1 to 31536000. Refer to [Expiry](#expiry). |
124
- | `onlyIfAbsent` | `true` or `false` | `false` | When `true`, the row sets the label only when the owner does not have it. Refer to [Conditional rows](#conditional-rows). |
125
-
126
- A row has `value` or `increment`. It cannot have both. When you save a workflow, Picked
127
- refuses a row that has both, or neither.
128
-
129
- A row with a `value` and no `expiresIn` sets a label that does not expire. If the label had
130
- an expiry, the row removes it.
131
-
132
- The namespace, the key, `value`, `increment` and `expiresIn` can have a template. Refer to
133
- [Workflow templates](/reference/dashboard/workflow-templates).
134
-
135
- ### Rows in the workflow editor
136
-
137
- In the workflow editor, each row has an **Operation** list:
138
-
139
- | Operation | Fields | The row that Picked saves |
140
- | ------------- | ---------------------------------- | --------------------------- |
141
- | **Set** | **Value** | `value` |
142
- | **Increment** | **Amount**: a number or a template | `increment` with the amount |
143
-
144
- To make the value smaller, give a negative amount. For example, the amount `-3` saves `increment: -3`, and
145
- the amount `-{{ trigger.cost }}` saves `increment: "-{{ trigger.cost }}"`.
146
-
147
- With **Increment**, the type is always `number`. When you change the operation to
148
- **Increment**, the editor removes `value` and `onlyIfAbsent` and sets the amount to 1. When you
149
- change it to **Set**, the editor removes `increment`.
150
-
151
- **Expires after (seconds)** sets `expiresIn`. It accepts a number or a template. When the
152
- field is empty, the row has no `expiresIn`.
153
-
154
- With **Set**, the **Only while the owner does not hold it** checkbox sets `onlyIfAbsent: true`.
155
- When the checkbox is clear, the row has no `onlyIfAbsent`.
156
-
157
- The full `labels` argument can also be one template. The editor then shows the template, and
158
- it shows no rows. **Replace with rows** removes the template after you confirm it.
159
-
160
- ## Expiry
161
-
162
- A label with `expiresIn` expires that number of seconds after the node sets it. Picked does
163
- not show an expired label:
164
-
165
- - The `lead`, `project` or `run` output of a tool does not have it.
166
- - A lead search clause does not match it. A negative clause, such as `-cms.status:*`, matches
167
- the lead.
168
- - A lead sorts as if it does not have the label.
169
- - The pages of the dashboard do not show it.
170
-
171
- A row that sets an expired label makes a new label, with a new ID. The task records it as
172
- created.
173
-
174
- Picked deletes an expired label within 15 minutes after it expires. This delete does not
175
- record an operation.
176
-
177
- ## Conditional rows
178
-
179
- A row with `onlyIfAbsent: true` sets its label only when the owner does not have a label with
180
- its namespace and key. An expired label does not count. Picked does the check and the write in
181
- one step. When two nodes set the same absent label at the same time, only one of them sets it.
182
-
183
- When the owner has the label already:
184
-
185
- | The label has | Result |
186
- | --------------------------------- | ------------------------------------------------------------------------------------- |
187
- | The type and the value of the row | The node takes the label. Picked does not change it and does not record an operation. |
188
- | A different type or value | The node does not take the label. Picked does not change it, its value or its expiry. |
189
-
190
- When the value is an ID unique to one run, such as `{{ run.id }}`, only one run can hold the
191
- label at a time. When Picked starts a node again after the node set its label, the node takes
192
- the label again with the same result.
193
-
194
- A row with `increment` cannot have `onlyIfAbsent`.
195
-
196
- ## Atomic writes
197
-
198
- **Set lead labels**, **Set project labels** and **Set run labels** have an `atomic`
199
- argument. In the workflow editor, it is the **Atomic** checkbox. When it is `true`, the node
200
- takes all of its labels or none of them. If one conditional row does not take its label, the
201
- node sets no label, records no operation, and gives a `count` of 0.
202
-
203
- Two nodes with `atomic` can run at the same time. If both nodes set the same label with
204
- `onlyIfAbsent` and a value unique to each node, one node at most takes its labels.
205
-
206
- ## Increments
207
-
208
- A row with `increment` adds that amount to the value of a `number` label. When the owner does
209
- not have the label, or the label expired, the value starts at 0. When many nodes add to the
210
- same label at the same time, the label counts each amount.
211
-
212
- | Rule | Description |
213
- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
214
- | Type | The row must be of type `number`, which is the default with `increment`. When you save a workflow, Picked refuses a row with a different type. |
215
- | A label of a different type | The node fails with the code `tool_failed` and the reason `value_invalid_for_type`. Picked does not change the label. |
216
- | Expiry | The label keeps its expiry. The `expiresIn` of the row applies only when the row makes the label. So the label expires at a fixed time after the first row that made it. |
217
- | Operations | Each row with `increment` records an operation. |
218
-
219
- When Picked starts a node again after it added its amount, the node adds the amount again.
220
-
221
- ## A row that removes a label
222
-
223
- The `labels` argument of **Remove lead labels**, **Remove project labels** and **Remove run
224
- labels** is a list of rows. Each row removes one label.
225
-
226
- | Field | Type | Default | Description |
227
- | ----------- | ---- | --------- | ------------------------------------------------------------------------------------------------- |
228
- | `namespace` | Text | — | The namespace of the label. |
229
- | `key` | Text | — | The key of the label. |
230
- | `ifValue` | Text | Any value | When it is set, the row removes the label only when the value of the label is equal to `ifValue`. |
231
-
232
- Picked does the check and the remove in one step. A row with `ifValue: "{{ run.id }}"`
233
- removes the label only while this run holds it. It does not remove the label when a different
234
- run holds it.
235
-
236
- In the workflow editor, **Only while its value is** sets `ifValue`. It accepts text or a
237
- template. When the field is empty, the row has no `ifValue`.
238
-
239
- A row that names a label that the owner does not have removes nothing. An expired label counts
240
- as no label.
241
-
242
- ## Count and removed
243
-
244
- | Output | Value |
245
- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
246
- | `count` | The number of labels that the node took. The node takes a label when it sets it, or when a conditional row finds the label with its own type and value. |
247
- | `labelCount` | The same as `count`, for **Create lead**. |
248
- | `removed` | The number of labels that the node removed. |
249
-
250
- ## Example: one run at a time
251
-
252
- This **Set lead labels** node holds a label for one hour, unless a different run holds it:
253
-
254
- ```json
255
- {
256
- "lead": "{{ nodes.lead.lead }}",
257
- "labels": [
258
- {
259
- "namespace": "cms",
260
- "key": "request-callback",
261
- "value": "{{ run.id }}",
262
- "onlyIfAbsent": true,
263
- "expiresIn": 3600
264
- }
265
- ]
266
- }
267
- ```
268
-
269
- When `count` is 1, the run holds the label. This **Remove lead labels** node removes the label
270
- only while the run holds it:
271
-
272
- ```json
273
- {
274
- "lead": "{{ nodes.lead.lead }}",
275
- "labels": [{ "namespace": "cms", "key": "request-callback", "ifValue": "{{ run.id }}" }]
276
- }
277
- ```
278
-
279
- ## Example: one run at a time for each visitor
280
-
281
- This **Set project labels** node holds a label for the visitor of the run for one hour,
282
- unless a different run holds it. The key is the `sha256` hash of the visitor ID, and the label
283
- expires. Refer to [the rule for visitor data](#visitor-data-in-project-and-run-labels).
284
-
285
- ```json
286
- {
287
- "labels": [
288
- {
289
- "namespace": "cms-lock-visitor",
290
- "key": "{{ trigger.action.userId | default: run.id | sha256 }}",
291
- "value": "{{ run.id }}",
292
- "onlyIfAbsent": true,
293
- "expiresIn": 3600
294
- }
295
- ]
296
- }
297
- ```
298
-
299
- When `count` is 1, the run holds the label. This **Remove project labels** node removes the
300
- label only while the run holds it:
301
-
302
- ```json
303
- {
304
- "labels": [
305
- {
306
- "namespace": "cms-lock-visitor",
307
- "key": "{{ trigger.action.userId | default: run.id | sha256 }}",
308
- "ifValue": "{{ run.id }}"
309
- }
310
- ]
311
- }
312
- ```
313
-
314
- ## Related
315
-
316
- - [Workflow runs](/reference/dashboard/workflow-runs) — the error exit of a node, and the
317
- operations that a task records.
318
- - [Workflow templates](/reference/dashboard/workflow-templates) — the `sha256` filter and the
319
- `run.id` variable.
320
- - [Lead search](/reference/dashboard/lead-search) — clauses on labels.
321
- - [Glossary](/reference/glossary) — label, namespace and label type.
@@ -1,224 +0,0 @@
1
- ---
2
- type: reference
3
- layout: docs
4
- ---
5
-
6
- # Lead search
7
-
8
- A lead is one set of answers that a visitor gave to your flow. The **Leads** page lists
9
- them, and it has one search box. The box accepts a plain word, a filter, or both. The
10
- dashboard holds the query in the address, so you can share the link.
11
-
12
- ## The parts of a lead that a query reads
13
-
14
- | Part | How to write it | Example |
15
- | --- | --- | --- |
16
- | Every captured answer | a plain word | `melbourne` |
17
- | One label | `namespace.key` | `acme.status:sent` |
18
- | One answer | the key of the field | `suburb:Sydney` |
19
- | The capture date | `createdAt` | `createdAt>2026-08-01` |
20
- | The visitor | `userId` | `userId:sess_7x2k9q3m1n4a` |
21
- | The visit that captured the lead | `session.field` | `session.utm_source:google` |
22
-
23
- A path of two parts is a label, unless it starts with `session.`: that path reads the visit.
24
- A label namespace and a label key cannot contain a full stop. A path of one part is the key
25
- of a field, unless the name is `createdAt` or `userId`.
26
-
27
- A query does not read an expired label. Refer to [Labels](/reference/dashboard/labels#expiry).
28
-
29
- ## Operators
30
-
31
- | Operator | Meaning | Example |
32
- | --- | --- | --- |
33
- | `:` | equal to | `details.phone:"0400000000"` |
34
- | `~` | contains | `details.email~example.com` |
35
- | `:*` | the lead has a value | `acme.status:*` |
36
- | `>` `>=` `<` `<=` | compare a number or a date | `scoring.value>=50` |
37
- | `-` | makes the clause negative | `-acme.status:*` |
38
-
39
- Each part accepts a different set:
40
-
41
- | Part | `:` | `~` | `:*` | `>` `>=` `<` `<=` |
42
- | --- | --- | --- | --- | --- |
43
- | Label | yes | yes | yes | yes |
44
- | Answer | yes | yes | yes | no |
45
- | `createdAt` | yes | no | no | yes |
46
- | `userId` | yes | no | no | no |
47
- | `session.` | yes | yes | yes | no |
48
-
49
- ## How clauses combine
50
-
51
- A space between two clauses means AND. The word `OR` between them means OR.
52
-
53
- ```
54
- acme.status:sent scoring.contacted:true
55
- acme.status:sent OR acme.status:queued
56
- ```
57
-
58
- One query holds a maximum of 10 clauses. One query uses AND or OR, and not both: there is
59
- no way to show which one comes first. A query that mixes them gives an error.
60
-
61
- ## The visit that captured the lead
62
-
63
- A visit is the set of events that one visitor made, from the first page to the last page. The visit
64
- that captured a lead is the visit that holds its capture. A clause on the visit matches the
65
- lead when one event of the visit has the value. The event can come before the capture or
66
- after it.
67
-
68
- | Field | What it holds |
69
- | --- | --- |
70
- | `gaid` | The ID that Google Analytics gives the visitor |
71
- | `utm_source` | The `utm_source` parameter of the page address |
72
- | `utm_medium` | The `utm_medium` parameter of the page address |
73
- | `utm_campaign` | The `utm_campaign` parameter of the page address |
74
- | `utm_term` | The `utm_term` parameter of the page address |
75
- | `utm_content` | The `utm_content` parameter of the page address |
76
- | `page_url` | The full address of the page |
77
- | `page_origin` | The host of the page, for example `shop.example.com` |
78
- | `page_pathname` | The path of the page, for example `/quote` |
79
- | `page_query` | The query string of the page, with no `?` |
80
- | `landing_page_url` | The full address of the first page of the visit |
81
- | `landing_page_origin` | The host of the first page, for example `shop.example.com` |
82
- | `landing_page_pathname` | The path of the first page, for example `/` |
83
- | `landing_page_query` | The query string of the first page, with no `?` |
84
-
85
- A clause on the visit searches every lead, with no date limit.
86
-
87
- A clause with `-` matches a lead when no event of the visit has the value. A lead that has
88
- no visit does not match a clause on the visit, with `-` or without it. A lead has no visit
89
- when one of these is true:
90
-
91
- - The lead has no capture event. The capture came before Picked recorded capture events, or
92
- the deployment sends no events.
93
- - The visit was on a deployment that is not for production, for example a preview or a test
94
- deployment.
95
- - The visit started more than 7 days before its events arrived.
96
- - The time on the device of the visitor was more than one day later than the real time.
97
-
98
- A query with a clause on the visit combines its clauses with AND. It can use OR only when
99
- all of its clauses are on the visit.
100
-
101
- A query with a clause on the visit shows the leads in the order of their capture events,
102
- newest first. A capture event has its own time, and that time can differ from the `createdAt`
103
- of the lead. The dashboard shows no column sort while the search has a clause on the visit.
104
-
105
- A query with a clause on the visit shows the number of leads on the page, and no total. For
106
- a page of 20 leads with another page after it, the dashboard shows `Showing 20 leads` above
107
- the list.
108
-
109
- A clause with `:` finds a value that is exactly the same, with the same upper case and lower
110
- case.
111
-
112
- In a clause on the visit, `~` finds the value as text, and ignores the difference between
113
- upper case and lower case. In a clause on the visit, `%` and `_` in the value match only `%`
114
- and `_`.
115
-
116
- ## Values with a space
117
-
118
- Put `"` at each end of a value that has a space. To search for `"` inside a value, write
119
- `\"`.
120
-
121
- ```
122
- details.company:"Acme Corporation"
123
- ```
124
-
125
- ## Plain words
126
-
127
- A plain word searches every answer that the visitor gave, and it includes the text inside
128
- a JSON answer.
129
-
130
- A plain word matches a whole word. `amy@example.com` finds the lead with that address, and
131
- `example.com` finds nothing. To match a part of a value, name the field and use `~`:
132
-
133
- ```
134
- email-address~example.com
135
- ```
136
-
137
- Two plain words both must match.
138
-
139
- ## Examples
140
-
141
- **Plain words**
142
-
143
- | Query | What it finds |
144
- | --- | --- |
145
- | `melbourne` | Leads with `melbourne` in an answer |
146
- | `amy@example.com` | The lead with that address |
147
- | `Amy Rockwell` | Leads with both words in their answers |
148
- | `dental` | Leads with `dental` inside a JSON answer |
149
-
150
- **Labels**
151
-
152
- | Query | What it finds |
153
- | --- | --- |
154
- | `details.phone:"0400000000"` | Leads with that exact telephone number |
155
- | `details.email~example.com` | Leads with an email label that holds `example.com` |
156
- | `acme.status:sent` | Leads that the `acme` workflow sent |
157
- | `acme.status:*` | Leads with an `acme` status |
158
- | `-acme.status:*` | Leads with no `acme` status, which no workflow took |
159
- | `scoring.value>=50` | Leads with a score of 50 or more |
160
- | `scoring.contacted:true` | Leads with that boolean label set to true |
161
- | `crm.payload:*` | Leads with a JSON label under `crm` |
162
-
163
- **Answers and the capture date**
164
-
165
- | Query | What it finds |
166
- | --- | --- |
167
- | `suburb:Sydney` | Leads whose `suburb` answer is `Sydney` |
168
- | `email-address~rocketrides` | Leads whose `email-address` answer holds `rocketrides` |
169
- | `quote-preferences:*` | Leads that answered `quote-preferences` |
170
- | `createdAt>2026-08-01` | Leads captured after that date |
171
- | `userId:sess_7x2k9q3m1n4a` | Leads captured for that visitor |
172
-
173
- **The visit that captured the lead**
174
-
175
- | Query | What it finds |
176
- | --- | --- |
177
- | `session.utm_source:google` | Leads whose visit had the `utm_source` `google` |
178
- | `session.utm_campaign~spring` | Leads whose visit had a `utm_campaign` that holds `spring` |
179
- | `session.page_pathname:/quote` | Leads whose visit had the page `/quote` |
180
- | `session.page_origin:shop.example.com` | Leads whose visit had a page on `shop.example.com` |
181
- | `session.landing_page_pathname:/` | Leads whose visit started on the page `/` |
182
- | `session.landing_page_query~utm_source=google` | Leads whose visit started on a page with `utm_source=google` in its query string |
183
- | `session.gaid:*` | Leads whose visit had a Google Analytics ID |
184
- | `-session.utm_source:*` | Leads whose visit had no `utm_source` |
185
- | `session.utm_source:google OR session.utm_source:bing` | Leads whose visit had either `utm_source` |
186
-
187
- **More than one clause**
188
-
189
- | Query | What it finds |
190
- | --- | --- |
191
- | `details.first_name:Amy scoring.contacted:true` | Both clauses are true |
192
- | `acme.status:sent OR acme.status:queued` | Either clause is true |
193
- | `Sydney details.phone:"0400000000"` | A plain word and a label clause together |
194
-
195
- ## The `labels.` and `responses.` prefixes
196
-
197
- A path takes an optional `labels.` or `responses.` prefix. Two cases need it:
198
-
199
- - A label namespace with the name `labels`, `responses`, or `session`: write
200
- `labels.responses.status:sent`.
201
- - The key of a field that holds a full stop: write `responses.quote.preferences:*`. Without
202
- the prefix the query reads that path as a label.
203
-
204
- A field with the name `createdAt` or `userId` also needs the prefix. A path of one part with
205
- that name reads as the capture date or the visitor.
206
-
207
- ## Errors
208
-
209
- The search box shows an error, and the list does not change, for each of these:
210
-
211
- | Cause | Example |
212
- | --- | --- |
213
- | A `"` with no second `"` | `details.company:"Acme` |
214
- | A namespace or a key outside `a-z`, `0-9`, `_` and `-` | `Details.Phone:1` |
215
- | An operator that the part does not accept | `createdAt~2026` |
216
- | AND together with OR | `a.b:1 c.d:2 OR e.f:3` |
217
- | More than 10 clauses | 11 clauses in one query |
218
- | A visit field that does not exist | `session.referrer:x` |
219
- | OR between a clause on the visit and a clause that is not | `session.utm_source:google OR labels.crm.status:sent` |
220
-
221
- ## Related
222
-
223
- - [Fields](/reference/dashboard/fields) — the keys that name each answer
224
- - [Glossary](/reference/glossary) — lead, label, and the other terms