@elitedcs/ghl-mcp 3.62.0 → 3.62.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.62.1 — update_pipeline works again (Bug 8)
4
+
5
+ - **Fix: `update_pipeline` no longer 422s.** GHL's pipeline PUT rejects unknown
6
+ body properties, and the request body was seeded with `locationId` — so every
7
+ update died with "property locationId should not exist" before the stages were
8
+ read. locationId now rides as a query parameter (the same pattern
9
+ `delete_pipeline` already used). Live-proven on the sandbox with the case that
10
+ matters: existing stage IDs survive the update (rename + reorder + append in
11
+ one call), so open opportunities are never orphaned. New regression proof:
12
+ `scripts/pipeline-update-proof.mjs`.
13
+ - Trigger reference: `custom_date_reminder` real UI-generated shape captured
14
+ (conditions + custom_date_reminder_config; before-days variant — after-days
15
+ still unverified).
16
+ - Action reference: the workflow Email action has NO "to" field — it always
17
+ mails the enrolled contact; third parties are copied via `cc` (merge fields
18
+ supported). Documented so nobody builds a "send to a third party" node that
19
+ silently mails the contact.
20
+
21
+
3
22
  ## 3.62.0 — The user guide ships inside the product
4
23
 
5
24
  - **New tool `get_user_guide`** (free tier included): opens the full GHL Command
package/dist/index.js CHANGED
@@ -2854,7 +2854,7 @@ var require_package = __commonJS({
2854
2854
  "package.json"(exports2, module2) {
2855
2855
  module2.exports = {
2856
2856
  name: "@elitedcs/ghl-mcp",
2857
- version: "3.62.0",
2857
+ version: "3.62.1",
2858
2858
  mcpName: "io.github.drjerryrelth/ghl-command",
2859
2859
  description: "GoHighLevel MCP Server for Claude. 235 tools \u2014 full CRM, automation, marketing control, account-wide workflow audit, live funnel-capture verification, and the only programmatic GHL workflow builder, now multi-tenant across client accounts.",
2860
2860
  main: "dist/index.js",
@@ -12486,7 +12486,7 @@ ${text2}`);
12486
12486
  },
12487
12487
  async ({ pipelineId }) => {
12488
12488
  try {
12489
- const result = await pipelineRequest("GET", `/${pipelineId}?locationId=${client.locationId}`);
12489
+ const result = await pipelineRequest("GET", `/${encodeURIComponent(pipelineId)}?locationId=${client.locationId}`);
12490
12490
  return {
12491
12491
  content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
12492
12492
  };
@@ -12556,12 +12556,12 @@ ${text2}`);
12556
12556
  },
12557
12557
  async ({ pipelineId, name, stages, showInFunnel, showInPieChart }) => {
12558
12558
  try {
12559
- const body = { locationId: client.locationId };
12559
+ const body = {};
12560
12560
  if (name !== void 0) body.name = name;
12561
12561
  if (stages !== void 0) body.stages = stages;
12562
12562
  if (showInFunnel !== void 0) body.showInFunnel = showInFunnel;
12563
12563
  if (showInPieChart !== void 0) body.showInPieChart = showInPieChart;
12564
- const result = await pipelineRequest("PUT", `/${pipelineId}`, body);
12564
+ const result = await pipelineRequest("PUT", `/${encodeURIComponent(pipelineId)}?locationId=${client.locationId}`, body);
12565
12565
  return {
12566
12566
  content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
12567
12567
  };
@@ -12580,7 +12580,7 @@ ${text2}`);
12580
12580
  },
12581
12581
  async ({ pipelineId }) => {
12582
12582
  try {
12583
- const result = await pipelineRequest("DELETE", `/${pipelineId}?locationId=${client.locationId}`);
12583
+ const result = await pipelineRequest("DELETE", `/${encodeURIComponent(pipelineId)}?locationId=${client.locationId}`);
12584
12584
  return {
12585
12585
  content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
12586
12586
  };
package/guide/guide.html CHANGED
@@ -4,7 +4,7 @@
4
4
  <meta charset="utf-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
6
  <title>GHL Command — User Guide</title>
7
- <!-- guides-hash: 95cbfe7f949954d7 -->
7
+ <!-- guides-hash: d9c9fd6db916ddcf -->
8
8
  <style>
9
9
  :root{
10
10
  --bg:#F2F4F6; --surface:#FFFFFF; --ink:#1C2833; --muted:#5B6B78; --line:#DDE3E8;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elitedcs/ghl-mcp",
3
- "version": "3.62.0",
3
+ "version": "3.62.1",
4
4
  "mcpName": "io.github.drjerryrelth/ghl-command",
5
5
  "description": "GoHighLevel MCP Server for Claude. 235 tools — full CRM, automation, marketing control, account-wide workflow audit, live funnel-capture verification, and the only programmatic GHL workflow builder, now multi-tenant across client accounts.",
6
6
  "main": "dist/index.js",
@@ -17,21 +17,22 @@
17
17
  "Keep workflows under 40 actions to avoid GHL UI renderer freezes",
18
18
  "Use separate exit workflows instead of inline if/else branching for nurture sequences"
19
19
  ],
20
-
21
20
  "add_contact_tag": {
22
21
  "example": {
23
- "tags": ["tag-name-here"]
22
+ "tags": [
23
+ "tag-name-here"
24
+ ]
24
25
  },
25
26
  "notes": "Use 'tags' ARRAY, NOT 'tagName' string. Tag must exist in the location."
26
27
  },
27
-
28
28
  "remove_contact_tag": {
29
29
  "example": {
30
- "tags": ["tag-to-remove"]
30
+ "tags": [
31
+ "tag-to-remove"
32
+ ]
31
33
  },
32
34
  "notes": "Same format as add_contact_tag but action type is 'remove_contact_tag'."
33
35
  },
34
-
35
36
  "sms": {
36
37
  "example": {
37
38
  "body": "Hi {{contact.first_name}}, your message here.",
@@ -39,7 +40,6 @@
39
40
  },
40
41
  "notes": "Body supports GHL merge fields. 'attachments' is REQUIRED even if empty array."
41
42
  },
42
-
43
43
  "email": {
44
44
  "example": {
45
45
  "subject": "Your Subject Line",
@@ -48,15 +48,19 @@
48
48
  "hasTrackingLinks": false,
49
49
  "hasUtmTracking": false,
50
50
  "hasTags": false
51
- }
51
+ },
52
+ "cc": "{{contact.sales_rep_email}}"
52
53
  },
53
- "notes": "Use 'html' NOT 'body'. Content MUST be HTML with <p> tags. Subject supports merge fields. trackingOptions is REQUIRED."
54
+ "notes": "Use 'html' NOT 'body'. Content MUST be HTML with <p> tags. Subject supports merge fields. trackingOptions is REQUIRED. RECIPIENT: there is NO 'to' field — the email action ALWAYS sends to the enrolled contact (UI reads 'Send an email to the contact'). To copy a third party use attributes.cc (plain string, accepts merge fields e.g. {{contact.sales_rep_email}}); 'bcc' presumably mirrors it but is NOT live-verified. Never build a 'send to a third party' node expecting a To field — it silently mails the contact instead. (cc shape live-captured 2026-08-08, CLL.)"
54
55
  },
55
-
56
56
  "wait": {
57
57
  "example_1hour": {
58
58
  "type": "time",
59
- "startAfter": { "type": "hour", "value": 1, "when": "after" },
59
+ "startAfter": {
60
+ "type": "hour",
61
+ "value": 1,
62
+ "when": "after"
63
+ },
60
64
  "name": "Wait",
61
65
  "isHybridAction": true,
62
66
  "hybridActionType": "wait",
@@ -65,7 +69,11 @@
65
69
  },
66
70
  "example_30min": {
67
71
  "type": "time",
68
- "startAfter": { "type": "minutes", "value": 30, "when": "after" },
72
+ "startAfter": {
73
+ "type": "minutes",
74
+ "value": 30,
75
+ "when": "after"
76
+ },
69
77
  "name": "Wait",
70
78
  "isHybridAction": true,
71
79
  "hybridActionType": "wait",
@@ -74,7 +82,11 @@
74
82
  },
75
83
  "example_3days": {
76
84
  "type": "time",
77
- "startAfter": { "type": "day", "value": 3, "when": "after" },
85
+ "startAfter": {
86
+ "type": "day",
87
+ "value": 3,
88
+ "when": "after"
89
+ },
78
90
  "name": "Wait",
79
91
  "isHybridAction": true,
80
92
  "hybridActionType": "wait",
@@ -83,7 +95,6 @@
83
95
  },
84
96
  "notes": "startAfter.type: 'minutes', 'hour', or 'day'. ALL 5 fields required (type, startAfter, isHybridAction, hybridActionType, transitions). Derived from working GHL UI-built workflows."
85
97
  },
86
-
87
98
  "internal_notification": {
88
99
  "example": {
89
100
  "type": "notification",
@@ -98,7 +109,6 @@
98
109
  },
99
110
  "notes": "Nested 'notification' object REQUIRED. selectedUser empty string for all users, or specific user ID."
100
111
  },
101
-
102
112
  "update_contact_field": {
103
113
  "example": {
104
114
  "type": "update_contact_field",
@@ -115,7 +125,6 @@
115
125
  },
116
126
  "notes": "'field' is the custom field ID, not the name. Use get_custom_fields to find IDs."
117
127
  },
118
-
119
128
  "add_notes": {
120
129
  "example": {
121
130
  "html": "<p style=\"padding-left: 0px!important;\">Note content here.</p>",
@@ -123,7 +132,6 @@
123
132
  },
124
133
  "notes": "Content MUST be HTML."
125
134
  },
126
-
127
135
  "task-notification": {
128
136
  "example": {
129
137
  "assignedTo": "USER_ID",
@@ -135,17 +143,17 @@
135
143
  },
136
144
  "notes": "dueDate is days from now as string. assignedTo is a user ID."
137
145
  },
138
-
139
146
  "remove_from_workflow": {
140
147
  "example": {
141
148
  "workflowId": "TARGET_WORKFLOW_ID",
142
149
  "workflowName": "Target Workflow Name",
143
150
  "type": "remove_from_workflow",
144
- "workflow_id": ["TARGET_WORKFLOW_ID"]
151
+ "workflow_id": [
152
+ "TARGET_WORKFLOW_ID"
153
+ ]
145
154
  },
146
155
  "notes": "Requires BOTH workflowId (string) AND workflow_id (ARRAY with same ID). Also needs type: 'remove_from_workflow' inside attributes. Derived from GHL UI."
147
156
  },
148
-
149
157
  "internal_update_opportunity": {
150
158
  "example": {
151
159
  "__customInputFields__": [
@@ -167,14 +175,16 @@
167
175
  },
168
176
  "notes": "CREATABLE from scratch (re-enabled v3.41.0). The discriminator workflowsActionType:'INTERNAL' MUST sit at the NODE level, never nested in attributes — a nested copy makes GHL reject the node as 'action has a corrupted type' and silently fail the whole save. update_workflow_actions normalizes this for you (hoists workflowsActionType to the node level, scaffolds allowBackward + __customInputs__, gives each __customInputFields__ entry an __customInputs__). The shape below (workflowsActionType at the node level alongside type/name/attributes) is correct for both creating and round-tripping. Use pipeline and stage IDs (not names) — get_pipelines / list_pipelines_full to find them FIRST. CRITICAL: if the pipelineId or pipelineStageId don't exist in the target sub-account, GHL silently fails this action AND can kill subsequent actions. A synthesized node needs BOTH a pipelineId and a pipelineStageId entry; a node round-tripped via get_workflow_full keeps its id and passes through unchanged."
169
177
  },
170
-
171
178
  "_if_else_branching": {
172
179
  "notes": "if_else is a node type discriminator only. Do not send a single flat if_else action.",
173
180
  "condition_node": {
174
181
  "type": "if_else",
175
182
  "cat": "conditions",
176
183
  "nodeType": "condition-node",
177
- "next": ["YES_BRANCH_ID", "NO_BRANCH_ID"],
184
+ "next": [
185
+ "YES_BRANCH_ID",
186
+ "NO_BRANCH_ID"
187
+ ],
178
188
  "attributes": {
179
189
  "currentRecipeType": "HAS_TAG",
180
190
  "operator": "and",
@@ -182,26 +192,34 @@
182
192
  "conditionName": "HAS_TAG",
183
193
  "version": 2,
184
194
  "noneBranchName": "None",
185
- "branches": [{
186
- "id": "YES_BRANCH_ID",
187
- "name": "Branch name",
188
- "segments": [{
189
- "__segmentId": "SEGMENT_UUID",
190
- "operator": "and",
191
- "conditions": [{
192
- "conditionType": "contact_detail",
193
- "conditionSubType": "tags",
194
- "conditionOperator": "index-of-true",
195
- "conditionValue": ["tag-to-check"],
196
- "__conditionId": "CONDITION_UUID",
197
- "__customFieldType__": "standard",
198
- "nestedDropdownTypes": [],
199
- "allowIsOperatorTypes": [],
200
- "ifElseNodeId": "CONDITION_NODE_ID",
201
- "isWait": false
202
- }]
203
- }]
204
- }]
195
+ "branches": [
196
+ {
197
+ "id": "YES_BRANCH_ID",
198
+ "name": "Branch name",
199
+ "segments": [
200
+ {
201
+ "__segmentId": "SEGMENT_UUID",
202
+ "operator": "and",
203
+ "conditions": [
204
+ {
205
+ "conditionType": "contact_detail",
206
+ "conditionSubType": "tags",
207
+ "conditionOperator": "index-of-true",
208
+ "conditionValue": [
209
+ "tag-to-check"
210
+ ],
211
+ "__conditionId": "CONDITION_UUID",
212
+ "__customFieldType__": "standard",
213
+ "nestedDropdownTypes": [],
214
+ "allowIsOperatorTypes": [],
215
+ "ifElseNodeId": "CONDITION_NODE_ID",
216
+ "isWait": false
217
+ }
218
+ ]
219
+ }
220
+ ]
221
+ }
222
+ ]
205
223
  }
206
224
  },
207
225
  "branch_yes": {
@@ -209,7 +227,9 @@
209
227
  "parent": "CONDITION_NODE_ID",
210
228
  "cat": "conditions",
211
229
  "nodeType": "branch-yes",
212
- "sibling": ["NO_BRANCH_ID"],
230
+ "sibling": [
231
+ "NO_BRANCH_ID"
232
+ ],
213
233
  "next": "FIRST_YES_CHILD_ID",
214
234
  "attributes": {
215
235
  "if": false,
@@ -223,7 +243,9 @@
223
243
  "parent": "CONDITION_NODE_ID",
224
244
  "cat": "conditions",
225
245
  "nodeType": "branch-no",
226
- "sibling": ["YES_BRANCH_ID"],
246
+ "sibling": [
247
+ "YES_BRANCH_ID"
248
+ ],
227
249
  "next": "FIRST_NO_CHILD_ID",
228
250
  "attributes": {
229
251
  "else": true,
@@ -246,7 +268,6 @@
246
268
  },
247
269
  "branch_notes": "Branch nodes need BOTH parentKey AND parent (same value). Sibling arrays cross-reference the other branch. Condition node next points to [YES, NO]. Branch node next is a string to the first child when non-empty. CAUTION: Complex branching (>2 if/else in one workflow) can freeze GHL's UI renderer. Use separate exit workflows for nurture sequences instead."
248
270
  },
249
-
250
271
  "workflow_goal": {
251
272
  "example": {
252
273
  "id": "<UUID>",
@@ -260,7 +281,13 @@
260
281
  "conditions": [
261
282
  {
262
283
  "goal_condition": "review_request_clicked",
263
- "extras": { "reviewTypes": ["sms", "email"], "reviewLinkId": "" },
284
+ "extras": {
285
+ "reviewTypes": [
286
+ "sms",
287
+ "email"
288
+ ],
289
+ "reviewLinkId": ""
290
+ },
264
291
  "id": "<UUID>"
265
292
  }
266
293
  ]
@@ -273,7 +300,6 @@
273
300
  "notes": "Goal-event nodes sit inline in the action chain — when the goal condition fires during workflow execution, the configured action runs (default: 'exit' terminates the workflow path). The previous action's `next` should point to the goal node's id; the goal node itself does NOT have a `next` field. Use build_goal_event to construct the node — it handles UUID generation and the nested op/segments/conditions shape. Verified goal_condition value: 'review_request_clicked' (with extras { reviewTypes: ['sms', 'email'], reviewLinkId: '' }). Other goal_condition strings from GHL's UI pass through verbatim; the full catalogue of goal conditions has not been captured yet.",
274
301
  "build_helper": "build_goal_event(goal_condition, extras?, action='exit', target_node_id?, name='Goal', op='or', inner_op='or')"
275
302
  },
276
-
277
303
  "_trigger_patterns": {
278
304
  "real_shape": {
279
305
  "id": "<UUID>",
@@ -351,7 +377,6 @@
351
377
  },
352
378
  "notes": "Workflow GET requests must include ?includeTriggers=true or triggers silently disappear. Each trigger type has type-specific condition fields."
353
379
  },
354
-
355
380
  "_workflow_design_patterns": {
356
381
  "nurture_sequence": "Use linear workflow with stopOnResponse:true. Create separate 'exit workflows' triggered by tags (appointment-booked, do-not-contact) that use remove_from_workflow to pull contacts out. Do NOT use inline if/else gates at every step — this creates too many actions and can freeze GHL.",
357
382
  "exit_workflow": "Small 3-4 step workflow: remove_from_workflow → note → tag → notify. Triggered by a tag being added to the contact.",
@@ -364,9 +364,45 @@
364
364
  "labsKey": null,
365
365
  "filterClass": "CustomDateReminderFilter",
366
366
  "conditions": [
367
- {},
368
- {}
369
- ]
367
+ {
368
+ "operator": "custom-field-eq",
369
+ "field": "contact.customFields",
370
+ "value": "<customFieldId>",
371
+ "title": "Contact date field",
372
+ "type": "select",
373
+ "id": "custom-field"
374
+ },
375
+ {
376
+ "operator": "time-diff-now-lte",
377
+ "field": "customDateField.dateValue",
378
+ "value": 21,
379
+ "title": "Before no. of days",
380
+ "type": "number",
381
+ "id": "before-days-in-number"
382
+ },
383
+ {
384
+ "operator": "index-of-true",
385
+ "field": "contact.tags",
386
+ "value": "<tag>",
387
+ "title": "Has tag",
388
+ "type": "select",
389
+ "id": "has-tag"
390
+ }
391
+ ],
392
+ "extraTriggerFields": {
393
+ "match_year": false,
394
+ "custom_date_reminder_config": {
395
+ "recordType": "contact",
396
+ "customDateFieldId": "<customFieldId>",
397
+ "customDateFieldType": "DATE",
398
+ "matchYear": false,
399
+ "offsetDays": 21,
400
+ "runHour": "8",
401
+ "timezone": "",
402
+ "last_run": ""
403
+ }
404
+ },
405
+ "captureNote": "UI-generated shape captured 2026-08-08 from CLL WF 1a066847 (before-days variant, offsetDays 21, has-tag condition). 'After no. of days' NOT captured — likely a sibling operator to time-diff-now-lte; confirm in the UI before using. The custom_date_reminder_config object rides on the trigger alongside conditions."
370
406
  },
371
407
  {
372
408
  "value": "note_add",
@@ -2275,7 +2311,7 @@
2275
2311
  "appId": "68515cf6affc523761f4e74f",
2276
2312
  "companyName": "All The Apps",
2277
2313
  "triggerName": "Participant Joined Meeting ",
2278
- "description": "This trigger activates whenever a participant joins a Zoom meeting. It captures details such as the participant\u2019s name, email, join time, and meeting ID. Use this to track attendance, send personalized welcome messages, or update CRM records. Example: Jane Smith (jane@example.com) joins a scheduled client onboarding meeting at 10:05 AM. This trigger can automatically log attendance, send a welcome email, and notify the meeting host.",
2314
+ "description": "This trigger activates whenever a participant joins a Zoom meeting. It captures details such as the participant’s name, email, join time, and meeting ID. Use this to track attendance, send personalized welcome messages, or update CRM records. Example: Jane Smith (jane@example.com) joins a scheduled client onboarding meeting at 10:05 AM. This trigger can automatically log attendance, send a welcome email, and notify the meeting host.",
2279
2315
  "templateId": "01JYKHM97F40D0K4CB5WSNKKQ7",
2280
2316
  "_id": "685bef320b94dc339a0fde1d",
2281
2317
  "customVars": [
@@ -2565,7 +2601,7 @@
2565
2601
  "appId": "68515dac857ac4ac43be90e1",
2566
2602
  "companyName": "All The Apps",
2567
2603
  "triggerName": "Update Customer",
2568
- "description": "To update an existing customer\u2019s information in your WooCommerce store, provide the customer ID along with the new details such as name, email, or billing address. For example, if \"John Smith\" changes his shipping address, you can quickly update his profile to keep records accurate and orders delivered correctly.",
2604
+ "description": "To update an existing customer’s information in your WooCommerce store, provide the customer ID along with the new details such as name, email, or billing address. For example, if \"John Smith\" changes his shipping address, you can quickly update his profile to keep records accurate and orders delivered correctly.",
2569
2605
  "templateId": "01JYECNX7H7723PDEFYT6AGN05",
2570
2606
  "_id": "68594bdc4c1de9cca419c148",
2571
2607
  "customVars": [
@@ -2767,7 +2803,7 @@
2767
2803
  "appId": "68515dac857ac4ac43be90e1",
2768
2804
  "companyName": "All The Apps",
2769
2805
  "triggerName": "Update Order",
2770
- "description": "To modify an existing order in your WooCommerce store, select the order ID and update details such as status, shipping address, or product quantities. For example, changing the status of order ID \u201c1254\u201d from \u201cPending Payment\u201d to \u201cCompleted\u201d instantly updates the record in your store for accurate order tracking.",
2806
+ "description": "To modify an existing order in your WooCommerce store, select the order ID and update details such as status, shipping address, or product quantities. For example, changing the status of order ID “1254” from “Pending Payment to “Completed” instantly updates the record in your store for accurate order tracking.",
2771
2807
  "templateId": "01JYE9HTSJCHCXG75YMMGV7EAD",
2772
2808
  "_id": "685948434c1de9cca41965da",
2773
2809
  "customVars": [
@@ -2873,7 +2909,7 @@
2873
2909
  "appId": "68515dac857ac4ac43be90e1",
2874
2910
  "companyName": "All The Apps",
2875
2911
  "triggerName": "Create Order",
2876
- "description": "To create a new order in your WooCommerce store, enter the customer details, products, quantity, and payment information. For example, adding a customer name \u201cJohn Smith\u201d with two T-shirts and setting the status to \u201cProcessing\u201d will generate a new order instantly for him in your store.",
2912
+ "description": "To create a new order in your WooCommerce store, enter the customer details, products, quantity, and payment information. For example, adding a customer name “John Smith with two T-shirts and setting the status to “Processing” will generate a new order instantly for him in your store.",
2877
2913
  "templateId": "01JYE7Z4FCZXA9MB8F45TWWW8C",
2878
2914
  "_id": "68593a474c1de9cca4180de2",
2879
2915
  "customVars": [
@@ -3372,7 +3408,7 @@
3372
3408
  "appId": "685167a7c9d8a7f4d68e7fef",
3373
3409
  "companyName": "All The Apps",
3374
3410
  "triggerName": "Job in Progress",
3375
- "description": "Detects when a job\u2019s status changes to \u201cin progress\u201d in HouseCall Pro. This trigger is commonly used to automate notifications, update team workflows, and ensure efficient job tracking and management.",
3411
+ "description": "Detects when a job’s status changes to “in progress in HouseCall Pro. This trigger is commonly used to automate notifications, update team workflows, and ensure efficient job tracking and management.",
3376
3412
  "templateId": "01JYGQZ99RTCPQ7EB3ABAKHWW0",
3377
3413
  "_id": "685a81554c1de9cca4377988",
3378
3414
  "customVars": [
@@ -12537,7 +12573,7 @@
12537
12573
  "appId": "68518a78bd28100e82cefd93",
12538
12574
  "companyName": "All The Apps",
12539
12575
  "triggerName": "Payment Failed",
12540
- "description": "The Payment Failed trigger notifies your workflow whenever a customer\u2019s payment attempt is unsuccessful. Use this action to automate follow-ups, alert your team, or update customer records, ensuring timely handling of failed transactions and minimizing revenue disruption.",
12576
+ "description": "The Payment Failed trigger notifies your workflow whenever a customer’s payment attempt is unsuccessful. Use this action to automate follow-ups, alert your team, or update customer records, ensuring timely handling of failed transactions and minimizing revenue disruption.",
12541
12577
  "templateId": "01JZ2P20PDF52A3TEY05RF4KGN",
12542
12578
  "_id": "6863af426bc372da326fe362",
12543
12579
  "customVars": [
@@ -14269,7 +14305,7 @@
14269
14305
  "appId": "685169967cd7af5925d3ce94",
14270
14306
  "companyName": "All The Apps",
14271
14307
  "triggerName": "Update Appointment",
14272
- "description": "The \"Update Appointment\" action allows you to modify the details of an existing appointment. Whether it\u2019s changing the appointment date, time, location, or client information, this action provides an easy way to keep your appointments up to date, ensuring that all details are accurate and reflect the latest changes.",
14308
+ "description": "The \"Update Appointment\" action allows you to modify the details of an existing appointment. Whether it’s changing the appointment date, time, location, or client information, this action provides an easy way to keep your appointments up to date, ensuring that all details are accurate and reflect the latest changes.",
14273
14309
  "templateId": "01JZ8GN2BQNC9VXD2N25VNTQJ0",
14274
14310
  "_id": "6866afa66bc372da32b45755",
14275
14311
  "customVars": [
@@ -14416,7 +14452,7 @@
14416
14452
  "appId": "68515d1d0c620fa98f1b3f21",
14417
14453
  "companyName": "All The Apps",
14418
14454
  "triggerName": "Order Updated",
14419
- "description": "The Order Updated trigger activates workflows whenever an existing order\u2019s details are modified in Printful. Use it to sync records, notify customers, or update your fulfillment system automatically.",
14455
+ "description": "The Order Updated trigger activates workflows whenever an existing order’s details are modified in Printful. Use it to sync records, notify customers, or update your fulfillment system automatically.",
14420
14456
  "templateId": "01K09BS29YGAXQG11EYQVFG90X",
14421
14457
  "_id": "687780806bc372da32f70c73",
14422
14458
  "customVars": [
@@ -18213,7 +18249,7 @@
18213
18249
  "appId": "68516b385c7d2960ea655e16",
18214
18250
  "companyName": "All The Apps",
18215
18251
  "triggerName": "User Update",
18216
- "description": "Triggers when an existing user\u2019s details are updated in a system connected to Mux.",
18252
+ "description": "Triggers when an existing user’s details are updated in a system connected to Mux.",
18217
18253
  "templateId": "01JYHB3S1Q3RPM31ZYZHV1JKYC",
18218
18254
  "_id": "685ace864c1de9cca4402387",
18219
18255
  "customVars": [
@@ -18284,7 +18320,7 @@
18284
18320
  "appId": "68516b385c7d2960ea655e16",
18285
18321
  "companyName": "All The Apps",
18286
18322
  "triggerName": "Contact Updated",
18287
- "description": "Triggers when a contact\u2019s information is updated in a system integrated with Mux.",
18323
+ "description": "Triggers when a contact’s information is updated in a system integrated with Mux.",
18288
18324
  "templateId": "01JYHAJT6C98F7WM8BD1T9KJNZ",
18289
18325
  "_id": "685acd154c1de9cca43fd2d5",
18290
18326
  "customVars": [
@@ -19124,7 +19160,7 @@
19124
19160
  "appId": "68515efc671ccb236e1c9eaf",
19125
19161
  "companyName": "All The Apps",
19126
19162
  "triggerName": "Contact Updated",
19127
- "description": "Triggers when an existing contact\u2019s details are modified.",
19163
+ "description": "Triggers when an existing contact’s details are modified.",
19128
19164
  "templateId": "01JZAFMPB549V5RE04YW7SBBVJ",
19129
19165
  "_id": "6867ad776bc372da32c7a53f",
19130
19166
  "customVars": [
@@ -19337,7 +19373,7 @@
19337
19373
  "appId": "68516bcb5c7d29ba8465b33f",
19338
19374
  "companyName": "All The Apps",
19339
19375
  "triggerName": "Delete Contact",
19340
- "description": "This trigger activates whenever a contact is deleted in Job Nimbus. It captures details such as the contact\u2019s name, associated jobs, and removal timestamp. Use this to update CRM records, notify relevant team members, or trigger automated cleanup processes. Example: A client, Sarah Johnson, is removed from Job Nimbus after project completion. This trigger can automatically delete her record from the CRM, revoke access to client portals, and archive related documents.",
19376
+ "description": "This trigger activates whenever a contact is deleted in Job Nimbus. It captures details such as the contact’s name, associated jobs, and removal timestamp. Use this to update CRM records, notify relevant team members, or trigger automated cleanup processes. Example: A client, Sarah Johnson, is removed from Job Nimbus after project completion. This trigger can automatically delete her record from the CRM, revoke access to client portals, and archive related documents.",
19341
19377
  "templateId": "01JYKA91T80M62042MJNF3PPQ2",
19342
19378
  "_id": "686413566bc372da327a16d3",
19343
19379
  "customVars": [
@@ -19956,7 +19992,7 @@
19956
19992
  "appId": "68516bcb5c7d29ba8465b33f",
19957
19993
  "companyName": "All The Apps",
19958
19994
  "triggerName": "Create Contact",
19959
- "description": "This trigger activates whenever a new contact is created in Job Nimbus. It captures details such as the contact\u2019s name, email, phone number, and associated project. Use this to sync customer data, trigger onboarding workflows, or send automated welcome emails. Example: A new client, Sarah Johnson, is added to Job Nimbus for a roofing project. This trigger can automatically create a record in the CRM, send a welcome email, and assign a sales rep for follow-up.",
19995
+ "description": "This trigger activates whenever a new contact is created in Job Nimbus. It captures details such as the contact’s name, email, phone number, and associated project. Use this to sync customer data, trigger onboarding workflows, or send automated welcome emails. Example: A new client, Sarah Johnson, is added to Job Nimbus for a roofing project. This trigger can automatically create a record in the CRM, send a welcome email, and assign a sales rep for follow-up.",
19960
19996
  "templateId": "01JYK73TRTX3FV0E0SQSJ3YVR1",
19961
19997
  "_id": "685be4e90b94dc339a0f12e3",
19962
19998
  "customVars": [
@@ -22828,7 +22864,7 @@
22828
22864
  "appId": "6851899eaf8a69e109eef528",
22829
22865
  "companyName": "All The Apps ",
22830
22866
  "triggerName": "Contact Updated",
22831
- "description": "This trigger activates when an existing contact record is updated in the system. It monitors changes to contact information\u2014such as name, email, phone number, or other fields\u2014and triggers workflows based on those updates.",
22867
+ "description": "This trigger activates when an existing contact record is updated in the system. It monitors changes to contact information—such as name, email, phone number, or other fields—and triggers workflows based on those updates.",
22832
22868
  "templateId": "01JZ36ZY47H44QWYTHYVHXNJK0",
22833
22869
  "_id": "6863f4076bc372da32759fbf",
22834
22870
  "customVars": [
@@ -22960,7 +22996,7 @@
22960
22996
  "appId": "6851899eaf8a69e109eef528",
22961
22997
  "companyName": "All The Apps ",
22962
22998
  "triggerName": "Appointment Created",
22963
- "description": "The Appointment Created trigger fires whenever a new appointment is scheduled in Keap. This event is triggered when a user books an appointment with you, whether it\u2019s through your booking page or directly in the system.",
22999
+ "description": "The Appointment Created trigger fires whenever a new appointment is scheduled in Keap. This event is triggered when a user books an appointment with you, whether it’s through your booking page or directly in the system.",
22964
23000
  "templateId": "01JZ36GYJ74KF4FGT4JXDP5CVS",
22965
23001
  "_id": "6863f2676bc372da3274fe67",
22966
23002
  "customVars": [
@@ -24915,7 +24951,7 @@
24915
24951
  "appId": "6851840b671ccb3d9b32c891",
24916
24952
  "companyName": "All The Apps",
24917
24953
  "triggerName": "Party Updated",
24918
- "description": "Triggers when a party\u2019s information is updated in Capsule.",
24954
+ "description": "Triggers when a party’s information is updated in Capsule.",
24919
24955
  "templateId": "01JZ3BAMKDTGNP1PBFCX80PPHF",
24920
24956
  "_id": "686406566bc372da3277fe64",
24921
24957
  "customVars": [
@@ -26180,7 +26216,7 @@
26180
26216
  "appId": "6904ec431ab8a75aacaacd68",
26181
26217
  "companyName": "Plugins",
26182
26218
  "triggerName": "Outbound Message Manual",
26183
- "description": "The Outbound Message Manual in the Outbound Message Action Automation for Workflows offers guidance on effective messaging that bridges human interactions with real-time automation. It detects manually sent outbound messages and subsequently initiates\u00a0workflows.",
26219
+ "description": "The Outbound Message Manual in the Outbound Message Action Automation for Workflows offers guidance on effective messaging that bridges human interactions with real-time automation. It detects manually sent outbound messages and subsequently initiates workflows.",
26184
26220
  "templateId": "01K8XP92K7FGDM5XRS2ZW4R3SK",
26185
26221
  "_id": "6904f7ceeebd2db657607da7",
26186
26222
  "customVars": [
@@ -28368,7 +28404,7 @@
28368
28404
  "appId": "685150fd671ccb5cf312368a",
28369
28405
  "companyName": "All The Apps",
28370
28406
  "triggerName": "Customer Updated ",
28371
- "description": "This trigger activates when an existing customer\u2019s details are updated in Stripe, allowing you to automate actions like syncing changes to your CRM or notifying relevant teams.",
28407
+ "description": "This trigger activates when an existing customer’s details are updated in Stripe, allowing you to automate actions like syncing changes to your CRM or notifying relevant teams.",
28372
28408
  "templateId": "01JY3ZCSZGY3S3VQJGHJ76DERK",
28373
28409
  "_id": "6853f6454c1de9cca4bb4319",
28374
28410
  "customVars": [
@@ -29636,7 +29672,7 @@
29636
29672
  "appId": "65c3ca4663331e6b1c8f98ae",
29637
29673
  "companyName": "Hiro.fm",
29638
29674
  "triggerName": "New Listener via Other Platform",
29639
- "description": "Triggers when a new listener is created.\u00a0",
29675
+ "description": "Triggers when a new listener is created",
29640
29676
  "templateId": "01JX0P2MTTCQN3NFCB8PXV2S3Q",
29641
29677
  "_id": "68541d214c1de9cca4beb7de",
29642
29678
  "customVars": [
@@ -37851,4 +37887,4 @@
37851
37887
  ]
37852
37888
  }
37853
37889
  ]
37854
- }
37890
+ }