Skip to main content

ghl_models/v2/
conversation_ai.rs

1//! `conversation-ai` data models for GoHighLevel API V2 (28 types).
2//!
3//! Generated from HighLevel's official OpenAPI spec for the
4//! **Conversation Ai** module. Every endpoint that uses these types, with its
5//! parameters, required scopes and enum values, is documented in the
6//! [`conversation-ai` API reference](https://github.com/Shahroz/ghl-rs/blob/main/docs/api/conversation-ai.md).
7//!
8//! Enable with `features = ["conversation-ai"]`.
9// @generated by xtask/generate_models.py — do not edit by hand.
10// Source: https://github.com/GoHighLevel/highlevel-api-docs
11// Doc comments are HighLevel's own field descriptions, reflowed verbatim, so
12// they aren't held to rustdoc's markdown conventions.
13#![allow(
14    missing_docs,
15    clippy::doc_lazy_continuation,
16    clippy::doc_overindented_list_items
17)]
18
19use serde::{Deserialize, Serialize};
20
21/// `ActionDataDTO` from the GoHighLevel OpenAPI spec.
22#[derive(Debug, Clone, Default, Serialize, Deserialize)]
23pub struct ActionDataDTO {
24    /// Unique identifier for the action
25    /// Required by the API.
26    /// (Optional here so responses that omit it still parse.)
27    #[serde(default, skip_serializing_if = "Option::is_none")]
28    pub id: Option<String>,
29    /// Name of the action
30    /// Required by the API.
31    /// (Optional here so responses that omit it still parse.)
32    #[serde(default, skip_serializing_if = "Option::is_none")]
33    pub name: Option<String>,
34    /// Type of the action
35    /// Allowed values: `triggerWorkflow`, `updateContactField`, `appointmentBooking`,
36    /// `stopBot`, `humanHandOver`, `advancedFollowup`, `transferBot`.
37    /// Required by the API.
38    /// (Optional here so responses that omit it still parse.)
39    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
40    pub type_: Option<String>,
41    /// Agent ID where the action belongs
42    #[serde(rename = "agentId", default, skip_serializing_if = "Option::is_none")]
43    pub agent_id: Option<String>,
44    /// Action-specific details. The structure depends on the action type. For TRIGGER_WORKFLOW
45    /// use triggerWorkflowDto, for UPDATE_CONTACT_FIELD use updateContactFieldDto, for
46    /// APPOINTMENT_BOOKING use appointmentBookingDto, for STOP_BOT use stopBotDto, for
47    /// HUMAN_HAND_OVER use humanHandOverDto, for ADVANCED_FOLLOWUP use advancedFollowupDto, and
48    /// for TRANSFER_BOT use transferBotDto.
49    /// Multiple possible shapes in the spec; raw JSON.
50    /// Required by the API.
51    /// (Optional here so responses that omit it still parse.)
52    #[serde(default, skip_serializing_if = "Option::is_none")]
53    pub details: Option<serde_json::Value>,
54}
55
56/// `ActionsIdDto` from the GoHighLevel OpenAPI spec.
57#[derive(Debug, Clone, Default, Serialize, Deserialize)]
58pub struct ActionsIdDto {
59    /// Unique identifier for the action.
60    /// Required by the API.
61    /// (Optional here so responses that omit it still parse.)
62    #[serde(default, skip_serializing_if = "Option::is_none")]
63    pub id: Option<String>,
64    /// type of action.
65    /// Allowed values: `triggerWorkflow`, `updateContactField`, `appointmentBooking`,
66    /// `stopBot`, `humanHandOver`, `advancedFollowup`, `transferBot`.
67    /// Required by the API.
68    /// (Optional here so responses that omit it still parse.)
69    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
70    pub type_: Option<String>,
71}
72
73/// `CreateActionDTO` from the GoHighLevel OpenAPI spec.
74#[derive(Debug, Clone, Default, Serialize, Deserialize)]
75pub struct CreateActionDTO {
76    /// Allowed values: `triggerWorkflow`, `updateContactField`, `appointmentBooking`,
77    /// `stopBot`, `humanHandOver`, `advancedFollowup`, `transferBot`.
78    /// Required by the API.
79    #[serde(rename = "type")]
80    pub type_: String,
81    /// Required by the API.
82    pub name: String,
83    /// Action-specific details. The structure depends on the action type. For TRIGGER_WORKFLOW
84    /// use triggerWorkflowDto, for UPDATE_CONTACT_FIELD use updateContactFieldDto, for
85    /// APPOINTMENT_BOOKING use appointmentBookingDto, for STOP_BOT use stopBotDto, for
86    /// HUMAN_HAND_OVER use humanHandOverDto, for ADVANCED_FOLLOWUP use advancedFollowupDto, and
87    /// for TRANSFER_BOT use transferBotDto.
88    /// Multiple possible shapes in the spec; raw JSON.
89    /// Required by the API.
90    pub details: serde_json::Value,
91}
92
93/// `CreateEmployeeDto` from the GoHighLevel OpenAPI spec.
94#[derive(Debug, Clone, Default, Serialize, Deserialize)]
95pub struct CreateEmployeeDto {
96    /// Name of the agent.
97    /// Required by the API.
98    pub name: String,
99    /// Name of the business the agent represents.
100    #[serde(
101        rename = "businessName",
102        default,
103        skip_serializing_if = "Option::is_none"
104    )]
105    pub business_name: Option<String>,
106    /// Mode of operation - OFF, SUGGESTIVE, or AUTO_PILOT
107    /// Allowed values: `off`, `suggestive`, `auto-pilot`.
108    #[serde(default, skip_serializing_if = "Option::is_none")]
109    pub mode: Option<String>,
110    /// Communication channels the agent can operate on
111    /// Allowed values: `IG`, `FB`, `SMS`, `WebChat`, `WhatsApp`, `Live_Chat`.
112    #[serde(default, skip_serializing_if = "Vec::is_empty")]
113    pub channels: Vec<String>,
114    /// Indicates if this agent is a primary agent.
115    #[serde(rename = "isPrimary", default, skip_serializing_if = "Option::is_none")]
116    pub is_primary: Option<bool>,
117    /// Wait time before agent responds (max 5 for minutes, 300 for seconds)
118    #[serde(rename = "waitTime", default, skip_serializing_if = "Option::is_none")]
119    pub wait_time: Option<f64>,
120    /// Unit for wait time - SECONDS or MINUTES
121    /// Allowed values: `minutes`, `seconds`.
122    #[serde(
123        rename = "waitTimeUnit",
124        default,
125        skip_serializing_if = "Option::is_none"
126    )]
127    pub wait_time_unit: Option<String>,
128    /// Indicates if sleep functionality is enabled.
129    #[serde(
130        rename = "sleepEnabled",
131        default,
132        skip_serializing_if = "Option::is_none"
133    )]
134    pub sleep_enabled: Option<bool>,
135    /// Duration of sleep period (required if sleepEnabled is true). Set to null for indefinite
136    /// sleep. (max 2880 for minutes, 172800 for seconds, 48 for hours)
137    #[serde(rename = "sleepTime", default, skip_serializing_if = "Option::is_none")]
138    pub sleep_time: Option<f64>,
139    /// Unit of sleep time - HOURS, MINUTES, or SECONDS (required if sleepEnabled is true). Set
140    /// to null for indefinite sleep.
141    /// Allowed values: `hours`, `minutes`, `seconds`.
142    #[serde(
143        rename = "sleepTimeUnit",
144        default,
145        skip_serializing_if = "Option::is_none"
146    )]
147    pub sleep_time_unit: Option<String>,
148    /// Personality traits of the agent.
149    /// Required by the API.
150    pub personality: String,
151    /// The goal of the agent.
152    /// Required by the API.
153    pub goal: String,
154    /// Instructions for the agent.
155    /// Required by the API.
156    pub instructions: String,
157    /// Maximum number of messages in auto-pilot mode before requiring human intervention. (max:
158    /// 100, min: 1)
159    #[serde(
160        rename = "autoPilotMaxMessages",
161        default,
162        skip_serializing_if = "Option::is_none"
163    )]
164    pub auto_pilot_max_messages: Option<f64>,
165    /// Array of knowledge base IDs associated with this agent.
166    #[serde(
167        rename = "knowledgeBaseIds",
168        default,
169        skip_serializing_if = "Vec::is_empty"
170    )]
171    pub knowledge_base_ids: Vec<String>,
172    /// Allow agent to respond to images
173    #[serde(
174        rename = "respondToImages",
175        default,
176        skip_serializing_if = "Option::is_none"
177    )]
178    pub respond_to_images: Option<bool>,
179    /// Allow agent to respond to audio
180    #[serde(
181        rename = "respondToAudio",
182        default,
183        skip_serializing_if = "Option::is_none"
184    )]
185    pub respond_to_audio: Option<bool>,
186    /// Enable sleep when a manual outbound message is sent.
187    #[serde(
188        rename = "sleepOnManualMessage",
189        default,
190        skip_serializing_if = "Option::is_none"
191    )]
192    pub sleep_on_manual_message: Option<bool>,
193    /// Enable sleep when a workflow outbound message is sent.
194    #[serde(
195        rename = "sleepOnWorkflowMessage",
196        default,
197        skip_serializing_if = "Option::is_none"
198    )]
199    pub sleep_on_workflow_message: Option<bool>,
200}
201
202/// `DeleteActionDataDTO` from the GoHighLevel OpenAPI spec.
203#[derive(Debug, Clone, Default, Serialize, Deserialize)]
204pub struct DeleteActionDataDTO {
205    /// ID of the deleted action
206    /// Required by the API.
207    /// (Optional here so responses that omit it still parse.)
208    #[serde(default, skip_serializing_if = "Option::is_none")]
209    pub id: Option<String>,
210}
211
212/// `DeleteEmployeeResponseDTO` from the GoHighLevel OpenAPI spec.
213#[derive(Debug, Clone, Default, Serialize, Deserialize)]
214pub struct DeleteEmployeeResponseDTO {
215    /// Indicates if the agent was deleted successfully.
216    /// Required by the API.
217    /// (Optional here so responses that omit it still parse.)
218    #[serde(default, skip_serializing_if = "Option::is_none")]
219    pub success: Option<bool>,
220    /// Unique identifier of the deleted agent.
221    /// Required by the API.
222    /// (Optional here so responses that omit it still parse.)
223    #[serde(default, skip_serializing_if = "Option::is_none")]
224    pub id: Option<String>,
225}
226
227/// `EmployeeListItemDTO` from the GoHighLevel OpenAPI spec.
228#[derive(Debug, Clone, Default, Serialize, Deserialize)]
229pub struct EmployeeListItemDTO {
230    /// Unique identifier for the agent.
231    /// Required by the API.
232    /// (Optional here so responses that omit it still parse.)
233    #[serde(default, skip_serializing_if = "Option::is_none")]
234    pub id: Option<String>,
235    /// Name of the agent.
236    /// Required by the API.
237    /// (Optional here so responses that omit it still parse.)
238    #[serde(default, skip_serializing_if = "Option::is_none")]
239    pub name: Option<String>,
240    /// Name of the business the agent represents.
241    #[serde(
242        rename = "businessName",
243        default,
244        skip_serializing_if = "Option::is_none"
245    )]
246    pub business_name: Option<String>,
247    /// Current operating mode of the agent.
248    /// Allowed values: `off`, `suggestive`, `auto-pilot`.
249    /// Required by the API.
250    /// (Optional here so responses that omit it still parse.)
251    #[serde(default, skip_serializing_if = "Option::is_none")]
252    pub mode: Option<String>,
253    /// Communication channels the agent operates on.
254    /// Required by the API.
255    /// (Optional here so responses that omit it still parse.)
256    #[serde(default, skip_serializing_if = "Vec::is_empty")]
257    pub channels: Vec<String>,
258    /// Wait time before agent responds.
259    /// Required by the API.
260    /// (Optional here so responses that omit it still parse.)
261    #[serde(rename = "waitTime", default, skip_serializing_if = "Option::is_none")]
262    pub wait_time: Option<f64>,
263    /// Unit for wait time.
264    /// Allowed values: `minutes`, `seconds`.
265    /// Required by the API.
266    /// (Optional here so responses that omit it still parse.)
267    #[serde(
268        rename = "waitTimeUnit",
269        default,
270        skip_serializing_if = "Option::is_none"
271    )]
272    pub wait_time_unit: Option<String>,
273    /// Indicates if sleep functionality is enabled.
274    /// Required by the API.
275    /// (Optional here so responses that omit it still parse.)
276    #[serde(
277        rename = "sleepEnabled",
278        default,
279        skip_serializing_if = "Option::is_none"
280    )]
281    pub sleep_enabled: Option<bool>,
282    /// Duration of sleep period.
283    #[serde(rename = "sleepTime", default, skip_serializing_if = "Option::is_none")]
284    pub sleep_time: Option<f64>,
285    /// Unit of sleep time.
286    /// Allowed values: `hours`, `minutes`, `seconds`.
287    #[serde(
288        rename = "sleepTimeUnit",
289        default,
290        skip_serializing_if = "Option::is_none"
291    )]
292    pub sleep_time_unit: Option<String>,
293    /// List of actions associated with this agent.
294    /// Required by the API.
295    /// (Optional here so responses that omit it still parse.)
296    #[serde(default, skip_serializing_if = "Vec::is_empty")]
297    pub actions: Vec<serde_json::Value>,
298    /// Indicates if this agent is a primary agent. (First agent created for a location is
299    /// primary by default)
300    /// Required by the API.
301    /// (Optional here so responses that omit it still parse.)
302    #[serde(rename = "isPrimary", default, skip_serializing_if = "Option::is_none")]
303    pub is_primary: Option<bool>,
304    /// Maximum number of messages in auto-pilot mode before requiring human intervention.
305    /// Required by the API.
306    /// (Optional here so responses that omit it still parse.)
307    #[serde(
308        rename = "autoPilotMaxMessages",
309        default,
310        skip_serializing_if = "Option::is_none"
311    )]
312    pub auto_pilot_max_messages: Option<f64>,
313    /// Goal configuration for the agent.
314    #[serde(default, skip_serializing_if = "Option::is_none")]
315    pub goal: Option<serde_json::Value>,
316    /// Array of knowledge base IDs associated with this agent.
317    #[serde(
318        rename = "knowledgeBaseIds",
319        default,
320        skip_serializing_if = "Vec::is_empty"
321    )]
322    pub knowledge_base_ids: Vec<String>,
323    /// Timestamp when the agent was created.
324    /// Required by the API.
325    /// (Optional here so responses that omit it still parse.)
326    #[serde(rename = "createdAt", default, skip_serializing_if = "Option::is_none")]
327    pub created_at: Option<String>,
328    /// Timestamp when the agent was last updated.
329    /// Required by the API.
330    /// (Optional here so responses that omit it still parse.)
331    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
332    pub updated_at: Option<String>,
333    /// Whether the bot sleeps on manual outbound messages.
334    #[serde(
335        rename = "sleepOnManualMessage",
336        default,
337        skip_serializing_if = "Option::is_none"
338    )]
339    pub sleep_on_manual_message: Option<bool>,
340    /// Whether the bot sleeps on workflow outbound messages.
341    #[serde(
342        rename = "sleepOnWorkflowMessage",
343        default,
344        skip_serializing_if = "Option::is_none"
345    )]
346    pub sleep_on_workflow_message: Option<bool>,
347}
348
349/// `EmployeeResponseDTO` from the GoHighLevel OpenAPI spec.
350#[derive(Debug, Clone, Default, Serialize, Deserialize)]
351pub struct EmployeeResponseDTO {
352    /// Unique identifier for the agent.
353    /// Required by the API.
354    /// (Optional here so responses that omit it still parse.)
355    #[serde(default, skip_serializing_if = "Option::is_none")]
356    pub id: Option<String>,
357    /// Name of the agent.
358    /// Required by the API.
359    /// (Optional here so responses that omit it still parse.)
360    #[serde(default, skip_serializing_if = "Option::is_none")]
361    pub name: Option<String>,
362    /// Name of the business the agent represents.
363    #[serde(
364        rename = "businessName",
365        default,
366        skip_serializing_if = "Option::is_none"
367    )]
368    pub business_name: Option<String>,
369    /// Current operating mode of the agent.
370    /// Allowed values: `off`, `suggestive`, `auto-pilot`.
371    /// Required by the API.
372    /// (Optional here so responses that omit it still parse.)
373    #[serde(default, skip_serializing_if = "Option::is_none")]
374    pub mode: Option<String>,
375    /// Communication channels the agent operates on.
376    /// Allowed values: `IG`, `FB`, `SMS`, `WebChat`, `WhatsApp`, `Live_Chat`.
377    /// Required by the API.
378    /// (Optional here so responses that omit it still parse.)
379    #[serde(default, skip_serializing_if = "Vec::is_empty")]
380    pub channels: Vec<String>,
381    /// Wait time before agent responds.
382    /// Required by the API.
383    /// (Optional here so responses that omit it still parse.)
384    #[serde(rename = "waitTime", default, skip_serializing_if = "Option::is_none")]
385    pub wait_time: Option<f64>,
386    /// Unit for wait time.
387    /// Allowed values: `minutes`, `seconds`.
388    /// Required by the API.
389    /// (Optional here so responses that omit it still parse.)
390    #[serde(
391        rename = "waitTimeUnit",
392        default,
393        skip_serializing_if = "Option::is_none"
394    )]
395    pub wait_time_unit: Option<String>,
396    /// Indicates if sleep functionality is enabled.
397    /// Required by the API.
398    /// (Optional here so responses that omit it still parse.)
399    #[serde(
400        rename = "sleepEnabled",
401        default,
402        skip_serializing_if = "Option::is_none"
403    )]
404    pub sleep_enabled: Option<bool>,
405    /// Duration of sleep period.
406    #[serde(rename = "sleepTime", default, skip_serializing_if = "Option::is_none")]
407    pub sleep_time: Option<f64>,
408    /// Unit of sleep time.
409    /// Allowed values: `hours`, `minutes`, `seconds`.
410    #[serde(
411        rename = "sleepTimeUnit",
412        default,
413        skip_serializing_if = "Option::is_none"
414    )]
415    pub sleep_time_unit: Option<String>,
416    /// List of actions associated with this agent.
417    /// Required by the API.
418    /// (Optional here so responses that omit it still parse.)
419    #[serde(default, skip_serializing_if = "Vec::is_empty")]
420    pub actions: Vec<ActionsIdDto>,
421    /// Indicates if this agent is a primary agent.
422    /// Required by the API.
423    /// (Optional here so responses that omit it still parse.)
424    #[serde(rename = "isPrimary", default, skip_serializing_if = "Option::is_none")]
425    pub is_primary: Option<bool>,
426    /// Maximum number of messages in auto-pilot mode before requiring human intervention.
427    /// Required by the API.
428    /// (Optional here so responses that omit it still parse.)
429    #[serde(
430        rename = "autoPilotMaxMessages",
431        default,
432        skip_serializing_if = "Option::is_none"
433    )]
434    pub auto_pilot_max_messages: Option<f64>,
435    /// The goal of the agent.
436    #[serde(default, skip_serializing_if = "Option::is_none")]
437    pub goal: Option<String>,
438    /// Personality traits of the agent.
439    #[serde(default, skip_serializing_if = "Option::is_none")]
440    pub personality: Option<String>,
441    /// Instructions for the agent.
442    #[serde(default, skip_serializing_if = "Option::is_none")]
443    pub instructions: Option<String>,
444    /// Array of knowledge base IDs associated with this agent.
445    #[serde(
446        rename = "knowledgeBaseIds",
447        default,
448        skip_serializing_if = "Vec::is_empty"
449    )]
450    pub knowledge_base_ids: Vec<String>,
451    /// Whether the bot sleeps on manual outbound messages.
452    #[serde(
453        rename = "sleepOnManualMessage",
454        default,
455        skip_serializing_if = "Option::is_none"
456    )]
457    pub sleep_on_manual_message: Option<bool>,
458    /// Whether the bot sleeps on workflow outbound messages.
459    #[serde(
460        rename = "sleepOnWorkflowMessage",
461        default,
462        skip_serializing_if = "Option::is_none"
463    )]
464    pub sleep_on_workflow_message: Option<bool>,
465}
466
467/// `FetchAIResponseDetailsResponseDTO` from the GoHighLevel OpenAPI spec.
468#[derive(Debug, Clone, Default, Serialize, Deserialize)]
469pub struct FetchAIResponseDetailsResponseDTO {
470    /// The complete prompt used for the AI response.
471    /// Required by the API.
472    /// (Optional here so responses that omit it still parse.)
473    #[serde(default, skip_serializing_if = "Option::is_none")]
474    pub prompt: Option<String>,
475    /// The intent/goal extracted from location prompt.
476    #[serde(default, skip_serializing_if = "Option::is_none")]
477    pub intent: Option<String>,
478    /// The response message generated by the AI.
479    /// Required by the API.
480    /// (Optional here so responses that omit it still parse.)
481    #[serde(
482        rename = "responseMessage",
483        default,
484        skip_serializing_if = "Option::is_none"
485    )]
486    pub response_message: Option<String>,
487    /// FAQ chunks used in generating the response from fine-tuned data.
488    #[serde(default, skip_serializing_if = "Vec::is_empty")]
489    pub faqs: Vec<serde_json::Value>,
490    /// Website content chunks used in generating the response.
491    #[serde(default, skip_serializing_if = "Vec::is_empty")]
492    pub website: Vec<serde_json::Value>,
493    /// ID of the employee/agent that generated the response.
494    #[serde(rename = "agentId", default, skip_serializing_if = "Option::is_none")]
495    pub agent_id: Option<String>,
496    /// The original input message that triggered this response.
497    #[serde(default, skip_serializing_if = "Option::is_none")]
498    pub input: Option<String>,
499    /// List of actions taken during this interaction.
500    /// Required by the API.
501    /// (Optional here so responses that omit it still parse.)
502    #[serde(rename = "actionLogs", default, skip_serializing_if = "Vec::is_empty")]
503    pub action_logs: Vec<serde_json::Value>,
504    /// Conversation history leading up to this response.
505    /// Required by the API.
506    /// (Optional here so responses that omit it still parse.)
507    #[serde(default, skip_serializing_if = "Vec::is_empty")]
508    pub history: Vec<serde_json::Value>,
509    /// Mode of operation during this interaction.
510    #[serde(default, skip_serializing_if = "Option::is_none")]
511    pub mode: Option<String>,
512}
513
514/// `FollowupSequence` from the GoHighLevel OpenAPI spec.
515#[derive(Debug, Clone, Default, Serialize, Deserialize)]
516pub struct FollowupSequence {
517    /// Unique identifier for this followup step
518    /// Required by the API.
519    /// (Optional here so responses that omit it still parse.)
520    #[serde(default, skip_serializing_if = "Option::is_none")]
521    pub id: Option<f64>,
522    /// Time unit for followup delay
523    /// Allowed values: `days`, `hours`, `minutes`.
524    /// Required by the API.
525    /// (Optional here so responses that omit it still parse.)
526    #[serde(
527        rename = "followupTimeUnit",
528        default,
529        skip_serializing_if = "Option::is_none"
530    )]
531    pub followup_time_unit: Option<String>,
532    /// Time duration before followup (max: 60 minutes, 24 hours, or 180 days depending on unit)
533    /// Required by the API.
534    /// (Optional here so responses that omit it still parse.)
535    #[serde(
536        rename = "followupTime",
537        default,
538        skip_serializing_if = "Option::is_none"
539    )]
540    pub followup_time: Option<f64>,
541    /// Whether to use AI to generate the followup message
542    #[serde(
543        rename = "aiEnabledMessage",
544        default,
545        skip_serializing_if = "Option::is_none"
546    )]
547    pub ai_enabled_message: Option<bool>,
548    /// Whether to trigger a workflow during this followup
549    #[serde(
550        rename = "triggerWorkflow",
551        default,
552        skip_serializing_if = "Option::is_none"
553    )]
554    pub trigger_workflow: Option<bool>,
555    /// Custom message to send (when aiEnabledMessage is false)
556    #[serde(
557        rename = "customMessage",
558        default,
559        skip_serializing_if = "Option::is_none"
560    )]
561    pub custom_message: Option<String>,
562    /// Workflow ID to trigger (when triggerWorkflow is true)
563    #[serde(
564        rename = "workflowId",
565        default,
566        skip_serializing_if = "Option::is_none"
567    )]
568    pub workflow_id: Option<String>,
569    /// Whether contact was requested in this followup
570    #[serde(
571        rename = "contactRequested",
572        default,
573        skip_serializing_if = "Option::is_none"
574    )]
575    pub contact_requested: Option<bool>,
576}
577
578/// `FollowupSettings` from the GoHighLevel OpenAPI spec.
579#[derive(Debug, Clone, Default, Serialize, Deserialize)]
580pub struct FollowupSettings {
581    /// Whether to dynamically switch channels for followups
582    /// Required by the API.
583    /// (Optional here so responses that omit it still parse.)
584    #[serde(
585        rename = "dynamicChannelSwitching",
586        default,
587        skip_serializing_if = "Option::is_none"
588    )]
589    pub dynamic_channel_switching: Option<bool>,
590    /// Whether to respect working hours for followups
591    #[serde(
592        rename = "followUpHours",
593        default,
594        skip_serializing_if = "Option::is_none"
595    )]
596    pub follow_up_hours: Option<bool>,
597    /// Working hours configuration for followups
598    #[serde(
599        rename = "workingHours",
600        default,
601        skip_serializing_if = "Vec::is_empty"
602    )]
603    pub working_hours: Vec<WorkingHours>,
604    /// Timezone to use for followups, contact or location
605    /// Allowed values: `contact`, `business`.
606    #[serde(
607        rename = "timezoneToUse",
608        default,
609        skip_serializing_if = "Option::is_none"
610    )]
611    pub timezone_to_use: Option<String>,
612}
613
614/// `Interval` from the GoHighLevel OpenAPI spec.
615#[derive(Debug, Clone, Default, Serialize, Deserialize)]
616pub struct Interval {
617    /// Start hour (24-hour format)
618    /// Required by the API.
619    /// (Optional here so responses that omit it still parse.)
620    #[serde(rename = "startHour", default, skip_serializing_if = "Option::is_none")]
621    pub start_hour: Option<f64>,
622    /// Start minute
623    /// Required by the API.
624    /// (Optional here so responses that omit it still parse.)
625    #[serde(
626        rename = "startMinute",
627        default,
628        skip_serializing_if = "Option::is_none"
629    )]
630    pub start_minute: Option<f64>,
631    /// End hour (24-hour format)
632    /// Required by the API.
633    /// (Optional here so responses that omit it still parse.)
634    #[serde(rename = "endHour", default, skip_serializing_if = "Option::is_none")]
635    pub end_hour: Option<f64>,
636    /// End minute
637    /// Required by the API.
638    /// (Optional here so responses that omit it still parse.)
639    #[serde(rename = "endMinute", default, skip_serializing_if = "Option::is_none")]
640    pub end_minute: Option<f64>,
641}
642
643/// `SearchEmployeeResponseDTO` from the GoHighLevel OpenAPI spec.
644#[derive(Debug, Clone, Default, Serialize, Deserialize)]
645pub struct SearchEmployeeResponseDTO {
646    /// List of agents matching the search criteria.
647    /// Required by the API.
648    /// (Optional here so responses that omit it still parse.)
649    #[serde(default, skip_serializing_if = "Vec::is_empty")]
650    pub agents: Vec<EmployeeListItemDTO>,
651    /// Total number of agents in the location (unfiltered count).
652    /// Required by the API.
653    /// (Optional here so responses that omit it still parse.)
654    #[serde(
655        rename = "totalCount",
656        default,
657        skip_serializing_if = "Option::is_none"
658    )]
659    pub total_count: Option<f64>,
660    /// Number of agents in the current response (filtered/paginated count).
661    /// Required by the API.
662    /// (Optional here so responses that omit it still parse.)
663    #[serde(default, skip_serializing_if = "Option::is_none")]
664    pub count: Option<f64>,
665}
666
667/// `UpdateEmployeeDto` from the GoHighLevel OpenAPI spec.
668#[derive(Debug, Clone, Default, Serialize, Deserialize)]
669pub struct UpdateEmployeeDto {
670    /// Name of the agent.
671    #[serde(default, skip_serializing_if = "Option::is_none")]
672    pub name: Option<String>,
673    /// Name of the business the agent represents.
674    #[serde(
675        rename = "businessName",
676        default,
677        skip_serializing_if = "Option::is_none"
678    )]
679    pub business_name: Option<String>,
680    /// Mode of operation for the agent, required if primary is enabled.
681    /// Allowed values: `off`, `suggestive`, `auto-pilot`.
682    #[serde(default, skip_serializing_if = "Option::is_none")]
683    pub mode: Option<String>,
684    /// Channels the agent can use.
685    /// Allowed values: `IG`, `FB`, `SMS`, `WebChat`, `WhatsApp`, `Live_Chat`.
686    #[serde(default, skip_serializing_if = "Vec::is_empty")]
687    pub channels: Vec<String>,
688    /// Indicates if this agent is a primary agent.
689    #[serde(rename = "isPrimary", default, skip_serializing_if = "Option::is_none")]
690    pub is_primary: Option<bool>,
691    /// Wait time before agent responds (max 5 for minutes, 300 for seconds).
692    #[serde(rename = "waitTime", default, skip_serializing_if = "Option::is_none")]
693    pub wait_time: Option<f64>,
694    /// Unit for wait time - SECONDS or MINUTES
695    /// Allowed values: `minutes`, `seconds`.
696    #[serde(
697        rename = "waitTimeUnit",
698        default,
699        skip_serializing_if = "Option::is_none"
700    )]
701    pub wait_time_unit: Option<String>,
702    /// Indicates if sleep functionality is enabled.
703    #[serde(
704        rename = "sleepEnabled",
705        default,
706        skip_serializing_if = "Option::is_none"
707    )]
708    pub sleep_enabled: Option<bool>,
709    /// Duration of sleep period (required if sleepEnabled is true). Set to null for indefinite
710    /// sleep. (max 2880 for minutes, 172800 for seconds, 48 for hours)
711    #[serde(rename = "sleepTime", default, skip_serializing_if = "Option::is_none")]
712    pub sleep_time: Option<f64>,
713    /// Unit of sleep time - HOURS, MINUTES, or SECONDS (required if sleepEnabled is true). Set
714    /// to null for indefinite sleep.
715    /// Allowed values: `hours`, `minutes`, `seconds`.
716    #[serde(
717        rename = "sleepTimeUnit",
718        default,
719        skip_serializing_if = "Option::is_none"
720    )]
721    pub sleep_time_unit: Option<String>,
722    /// Personality traits of the agent.
723    #[serde(default, skip_serializing_if = "Option::is_none")]
724    pub personality: Option<String>,
725    /// The goal of the agent.
726    #[serde(default, skip_serializing_if = "Option::is_none")]
727    pub goal: Option<String>,
728    /// Instructions for the agent.
729    #[serde(default, skip_serializing_if = "Option::is_none")]
730    pub instructions: Option<String>,
731    /// Maximum number of messages in auto-pilot mode before requiring human intervention. (max:
732    /// 100, min: 1)
733    /// Required by the API.
734    #[serde(rename = "autoPilotMaxMessages")]
735    pub auto_pilot_max_messages: f64,
736    /// Array of knowledge base IDs associated with this agent.
737    #[serde(
738        rename = "knowledgeBaseIds",
739        default,
740        skip_serializing_if = "Vec::is_empty"
741    )]
742    pub knowledge_base_ids: Vec<String>,
743    /// Allow agent to respond to images
744    #[serde(
745        rename = "respondToImages",
746        default,
747        skip_serializing_if = "Option::is_none"
748    )]
749    pub respond_to_images: Option<bool>,
750    /// Allow agent to respond to audio
751    #[serde(
752        rename = "respondToAudio",
753        default,
754        skip_serializing_if = "Option::is_none"
755    )]
756    pub respond_to_audio: Option<bool>,
757    /// Enable sleep when a manual outbound message is sent.
758    #[serde(
759        rename = "sleepOnManualMessage",
760        default,
761        skip_serializing_if = "Option::is_none"
762    )]
763    pub sleep_on_manual_message: Option<bool>,
764    /// Enable sleep when a workflow outbound message is sent.
765    #[serde(
766        rename = "sleepOnWorkflowMessage",
767        default,
768        skip_serializing_if = "Option::is_none"
769    )]
770    pub sleep_on_workflow_message: Option<bool>,
771}
772
773/// `UpdateFollowupSettingsDTO` from the GoHighLevel OpenAPI spec.
774#[derive(Debug, Clone, Default, Serialize, Deserialize)]
775pub struct UpdateFollowupSettingsDTO {
776    /// Required by the API.
777    #[serde(rename = "actionIds", default, skip_serializing_if = "Vec::is_empty")]
778    pub action_ids: Vec<String>,
779    /// Required by the API.
780    #[serde(rename = "followupSettings")]
781    pub followup_settings: FollowupSettings,
782}
783
784/// `WorkingHours` from the GoHighLevel OpenAPI spec.
785#[derive(Debug, Clone, Default, Serialize, Deserialize)]
786pub struct WorkingHours {
787    /// Day of the week (0=Sunday, 1=Monday, etc.)
788    /// Required by the API.
789    /// (Optional here so responses that omit it still parse.)
790    #[serde(
791        rename = "dayOfTheWeek",
792        default,
793        skip_serializing_if = "Option::is_none"
794    )]
795    pub day_of_the_week: Option<f64>,
796    /// Time intervals for this day
797    #[serde(default, skip_serializing_if = "Vec::is_empty")]
798    pub intervals: Vec<Interval>,
799}
800
801/// `advancedFollowupDto` from the GoHighLevel OpenAPI spec.
802#[derive(Debug, Clone, Default, Serialize, Deserialize)]
803pub struct AdvancedFollowupDto {
804    /// Whether advanced followup is enabled
805    /// Required by the API.
806    /// (Optional here so responses that omit it still parse.)
807    #[serde(default, skip_serializing_if = "Option::is_none")]
808    pub enabled: Option<bool>,
809    /// ID of the followup scenario
810    /// Allowed values: `contactStoppedReplying`, `contactIsBusy`, `contactRequested`.
811    /// Required by the API.
812    /// (Optional here so responses that omit it still parse.)
813    #[serde(
814        rename = "scenarioId",
815        default,
816        skip_serializing_if = "Option::is_none"
817    )]
818    pub scenario_id: Option<String>,
819    /// Sequence of followup actions to perform
820    /// Required by the API.
821    /// (Optional here so responses that omit it still parse.)
822    #[serde(
823        rename = "followupSequence",
824        default,
825        skip_serializing_if = "Vec::is_empty"
826    )]
827    pub followup_sequence: Vec<FollowupSequence>,
828    /// Additional settings for followup behavior
829    #[serde(
830        rename = "followupSettings",
831        default,
832        skip_serializing_if = "Option::is_none"
833    )]
834    pub followup_settings: Option<FollowupSettings>,
835}
836
837/// `appointmentBookingDto` from the GoHighLevel OpenAPI spec.
838#[derive(Debug, Clone, Default, Serialize, Deserialize)]
839pub struct AppointmentBookingDto {
840    /// Optional action ID reference
841    #[serde(rename = "actionId", default, skip_serializing_if = "Option::is_none")]
842    pub action_id: Option<String>,
843    /// Calendar ID for appointment booking
844    /// Required by the API.
845    /// (Optional here so responses that omit it still parse.)
846    #[serde(
847        rename = "calendarId",
848        default,
849        skip_serializing_if = "Option::is_none"
850    )]
851    pub calendar_id: Option<String>,
852    /// If true, only sends the appointment link without booking
853    /// Required by the API.
854    /// (Optional here so responses that omit it still parse.)
855    #[serde(
856        rename = "onlySendLink",
857        default,
858        skip_serializing_if = "Option::is_none"
859    )]
860    pub only_send_link: Option<bool>,
861    /// Whether to trigger a workflow after booking (cannot be true when onlySendLink is true)
862    /// Required by the API.
863    /// (Optional here so responses that omit it still parse.)
864    #[serde(
865        rename = "triggerWorkflow",
866        default,
867        skip_serializing_if = "Option::is_none"
868    )]
869    pub trigger_workflow: Option<bool>,
870    /// Workflow IDs to trigger after booking (required when triggerWorkflow is true)
871    #[serde(rename = "workflowIds", default, skip_serializing_if = "Vec::is_empty")]
872    pub workflow_ids: Vec<String>,
873    /// Whether to put the agent to sleep after booking (cannot be true when onlySendLink is
874    /// true)
875    /// Required by the API.
876    /// (Optional here so responses that omit it still parse.)
877    #[serde(
878        rename = "sleepAfterBooking",
879        default,
880        skip_serializing_if = "Option::is_none"
881    )]
882    pub sleep_after_booking: Option<bool>,
883    /// Unit for sleep time (required when sleepAfterBooking is true)
884    /// Allowed values: `days`, `hours`, `minutes`.
885    #[serde(
886        rename = "sleepTimeUnit",
887        default,
888        skip_serializing_if = "Option::is_none"
889    )]
890    pub sleep_time_unit: Option<String>,
891    /// Sleep duration (required when sleepAfterBooking is true)
892    #[serde(rename = "sleepTime", default, skip_serializing_if = "Option::is_none")]
893    pub sleep_time: Option<f64>,
894    /// Whether to transfer to another agent after booking (cannot be true when onlySendLink is
895    /// true)
896    /// Required by the API.
897    /// (Optional here so responses that omit it still parse.)
898    #[serde(
899        rename = "transferBot",
900        default,
901        skip_serializing_if = "Option::is_none"
902    )]
903    pub transfer_bot: Option<bool>,
904    /// Agent ID to transfer to (required when transferBot is true)
905    #[serde(
906        rename = "transferAgent",
907        default,
908        skip_serializing_if = "Option::is_none"
909    )]
910    pub transfer_agent: Option<String>,
911    /// Whether to allow appointment rescheduling (cannot be true when onlySendLink is true)
912    /// Required by the API.
913    /// (Optional here so responses that omit it still parse.)
914    #[serde(
915        rename = "rescheduleEnabled",
916        default,
917        skip_serializing_if = "Option::is_none"
918    )]
919    pub reschedule_enabled: Option<bool>,
920    /// Whether to allow appointment cancellation (cannot be true when onlySendLink is true)
921    /// Required by the API.
922    /// (Optional here so responses that omit it still parse.)
923    #[serde(
924        rename = "cancelEnabled",
925        default,
926        skip_serializing_if = "Option::is_none"
927    )]
928    pub cancel_enabled: Option<bool>,
929}
930
931/// `createActionResponseDTO` from the GoHighLevel OpenAPI spec.
932#[derive(Debug, Clone, Default, Serialize, Deserialize)]
933pub struct CreateActionResponseDTO {
934    /// Created action details
935    /// Required by the API.
936    /// (Optional here so responses that omit it still parse.)
937    #[serde(default, skip_serializing_if = "Option::is_none")]
938    pub data: Option<ActionDataDTO>,
939    /// Success status of the request
940    /// Required by the API.
941    /// (Optional here so responses that omit it still parse.)
942    #[serde(default, skip_serializing_if = "Option::is_none")]
943    pub success: Option<bool>,
944}
945
946/// `deleteActionResponseDTO` from the GoHighLevel OpenAPI spec.
947#[derive(Debug, Clone, Default, Serialize, Deserialize)]
948pub struct DeleteActionResponseDTO {
949    /// Deleted action information
950    /// Required by the API.
951    /// (Optional here so responses that omit it still parse.)
952    #[serde(default, skip_serializing_if = "Option::is_none")]
953    pub data: Option<DeleteActionDataDTO>,
954    /// Success status of the request
955    /// Required by the API.
956    /// (Optional here so responses that omit it still parse.)
957    #[serde(default, skip_serializing_if = "Option::is_none")]
958    pub success: Option<bool>,
959}
960
961/// `fetchActionDetailsResponseDTO` from the GoHighLevel OpenAPI spec.
962#[derive(Debug, Clone, Default, Serialize, Deserialize)]
963pub struct FetchActionDetailsResponseDTO {
964    /// Action details
965    /// Required by the API.
966    /// (Optional here so responses that omit it still parse.)
967    #[serde(default, skip_serializing_if = "Option::is_none")]
968    pub data: Option<ActionDataDTO>,
969    /// Success status of the request
970    /// Required by the API.
971    /// (Optional here so responses that omit it still parse.)
972    #[serde(default, skip_serializing_if = "Option::is_none")]
973    pub success: Option<bool>,
974}
975
976/// `fetchActionsForEmployeeResponseDTO` from the GoHighLevel OpenAPI spec.
977#[derive(Debug, Clone, Default, Serialize, Deserialize)]
978pub struct FetchActionsForEmployeeResponseDTO {
979    /// Grouped actions by type
980    /// Required by the API.
981    /// (Optional here so responses that omit it still parse.)
982    #[serde(default, skip_serializing_if = "Vec::is_empty")]
983    pub data: Vec<ActionDataDTO>,
984    /// Success status of the request
985    /// Required by the API.
986    /// (Optional here so responses that omit it still parse.)
987    #[serde(default, skip_serializing_if = "Option::is_none")]
988    pub success: Option<bool>,
989}
990
991/// `humanHandOverDto` from the GoHighLevel OpenAPI spec.
992#[derive(Debug, Clone, Default, Serialize, Deserialize)]
993pub struct HumanHandOverDto {
994    /// Whether human handover action is enabled
995    /// Required by the API.
996    /// (Optional here so responses that omit it still parse.)
997    #[serde(default, skip_serializing_if = "Option::is_none")]
998    pub enabled: Option<bool>,
999    /// Condition that triggers human handover
1000    /// Required by the API.
1001    /// (Optional here so responses that omit it still parse.)
1002    #[serde(
1003        rename = "triggerCondition",
1004        default,
1005        skip_serializing_if = "Option::is_none"
1006    )]
1007    pub trigger_condition: Option<String>,
1008    /// Example phrases that trigger human handover (required when handoverType is custom or
1009    /// contactRequest)
1010    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1011    pub examples: Vec<String>,
1012    /// ID of the user to assign the conversation to
1013    #[serde(
1014        rename = "assignToUserId",
1015        default,
1016        skip_serializing_if = "Option::is_none"
1017    )]
1018    pub assign_to_user_id: Option<String>,
1019    /// Whether to skip assigning to a specific user
1020    #[serde(
1021        rename = "skipAssignToUser",
1022        default,
1023        skip_serializing_if = "Option::is_none"
1024    )]
1025    pub skip_assign_to_user: Option<bool>,
1026    /// Whether to create a task when handing over
1027    #[serde(
1028        rename = "createTask",
1029        default,
1030        skip_serializing_if = "Option::is_none"
1031    )]
1032    pub create_task: Option<bool>,
1033    /// Whether the agent can be reactivated after handover
1034    /// Required by the API.
1035    /// (Optional here so responses that omit it still parse.)
1036    #[serde(
1037        rename = "reactivateEnabled",
1038        default,
1039        skip_serializing_if = "Option::is_none"
1040    )]
1041    pub reactivate_enabled: Option<bool>,
1042    /// Time unit for reactivation delay (required when reactivateEnabled is true)
1043    /// Allowed values: `days`, `hours`, `minutes`.
1044    #[serde(
1045        rename = "sleepTimeUnit",
1046        default,
1047        skip_serializing_if = "Option::is_none"
1048    )]
1049    pub sleep_time_unit: Option<String>,
1050    /// Time duration before reactivation (required when reactivateEnabled is true)
1051    #[serde(rename = "sleepTime", default, skip_serializing_if = "Option::is_none")]
1052    pub sleep_time: Option<f64>,
1053    /// Final message sent when handing over to human
1054    /// Required by the API.
1055    /// (Optional here so responses that omit it still parse.)
1056    #[serde(
1057        rename = "finalMessage",
1058        default,
1059        skip_serializing_if = "Option::is_none"
1060    )]
1061    pub final_message: Option<String>,
1062    /// Tags to apply during handover
1063    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1064    pub tags: Vec<String>,
1065    /// Type of human handover detection
1066    /// Allowed values: `contactRequest`, `lackOfInformation`, `failedToResolveIssue`, `custom`.
1067    /// Required by the API.
1068    /// (Optional here so responses that omit it still parse.)
1069    #[serde(
1070        rename = "handoverType",
1071        default,
1072        skip_serializing_if = "Option::is_none"
1073    )]
1074    pub handover_type: Option<String>,
1075}
1076
1077/// `stopBotDto` from the GoHighLevel OpenAPI spec.
1078#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1079pub struct StopBotDto {
1080    /// Type of stop bot detection - Goodbye or Custom
1081    /// Allowed values: `Goodbye`, `Custom`.
1082    /// Required by the API.
1083    /// (Optional here so responses that omit it still parse.)
1084    #[serde(
1085        rename = "stopBotDetectionType",
1086        default,
1087        skip_serializing_if = "Option::is_none"
1088    )]
1089    pub stop_bot_detection_type: Option<String>,
1090    /// Condition that triggers stopping the bot
1091    /// Required by the API.
1092    /// (Optional here so responses that omit it still parse.)
1093    #[serde(
1094        rename = "stopBotTriggerCondition",
1095        default,
1096        skip_serializing_if = "Option::is_none"
1097    )]
1098    pub stop_bot_trigger_condition: Option<String>,
1099    /// Whether the bot can be reactivated after being stopped
1100    /// Required by the API.
1101    /// (Optional here so responses that omit it still parse.)
1102    #[serde(
1103        rename = "reactivateEnabled",
1104        default,
1105        skip_serializing_if = "Option::is_none"
1106    )]
1107    pub reactivate_enabled: Option<bool>,
1108    /// Time unit for reactivation delay (required when reactivateEnabled is true)
1109    /// Allowed values: `days`, `hours`, `minutes`.
1110    #[serde(
1111        rename = "sleepTimeUnit",
1112        default,
1113        skip_serializing_if = "Option::is_none"
1114    )]
1115    pub sleep_time_unit: Option<String>,
1116    /// Time duration before reactivation (required when reactivateEnabled is true)
1117    #[serde(rename = "sleepTime", default, skip_serializing_if = "Option::is_none")]
1118    pub sleep_time: Option<f64>,
1119    /// Whether this action is enabled for the agent
1120    /// Required by the API.
1121    /// (Optional here so responses that omit it still parse.)
1122    #[serde(default, skip_serializing_if = "Option::is_none")]
1123    pub enabled: Option<bool>,
1124    /// Example phrases that trigger stop bot action (minimum 2 required)
1125    /// Required by the API.
1126    /// (Optional here so responses that omit it still parse.)
1127    #[serde(
1128        rename = "stopBotExamples",
1129        default,
1130        skip_serializing_if = "Vec::is_empty"
1131    )]
1132    pub stop_bot_examples: Vec<String>,
1133    /// Final message sent when stopping the bot
1134    /// Required by the API.
1135    /// (Optional here so responses that omit it still parse.)
1136    #[serde(
1137        rename = "finalMessage",
1138        default,
1139        skip_serializing_if = "Option::is_none"
1140    )]
1141    pub final_message: Option<String>,
1142    /// Tags to apply when stopping the bot
1143    #[serde(default, skip_serializing_if = "Vec::is_empty")]
1144    pub tags: Vec<String>,
1145}
1146
1147/// `transferBotDto` from the GoHighLevel OpenAPI spec.
1148#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1149pub struct TransferBotDto {
1150    /// Type of transfer - Default or Custom
1151    /// Allowed values: `Default`, `Custom`.
1152    /// Required by the API.
1153    /// (Optional here so responses that omit it still parse.)
1154    #[serde(
1155        rename = "transferBotType",
1156        default,
1157        skip_serializing_if = "Option::is_none"
1158    )]
1159    pub transfer_bot_type: Option<String>,
1160    /// ID of the bot/agent to transfer to
1161    /// Required by the API.
1162    /// (Optional here so responses that omit it still parse.)
1163    #[serde(
1164        rename = "transferToBot",
1165        default,
1166        skip_serializing_if = "Option::is_none"
1167    )]
1168    pub transfer_to_bot: Option<String>,
1169    /// Whether this transfer action is enabled
1170    /// Required by the API.
1171    /// (Optional here so responses that omit it still parse.)
1172    #[serde(default, skip_serializing_if = "Option::is_none")]
1173    pub enabled: Option<bool>,
1174    /// Condition that triggers the transfer (required for Custom type)
1175    #[serde(
1176        rename = "transferBotTriggerCondition",
1177        default,
1178        skip_serializing_if = "Option::is_none"
1179    )]
1180    pub transfer_bot_trigger_condition: Option<String>,
1181    /// Example phrases that trigger transfer (required for Custom type, minimum 2)
1182    #[serde(
1183        rename = "transferBotExamples",
1184        default,
1185        skip_serializing_if = "Vec::is_empty"
1186    )]
1187    pub transfer_bot_examples: Vec<String>,
1188}
1189
1190/// `triggerWorkflowDto` from the GoHighLevel OpenAPI spec.
1191#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1192pub struct TriggerWorkflowDto {
1193    /// Array of workflow IDs to trigger
1194    /// Required by the API.
1195    /// (Optional here so responses that omit it still parse.)
1196    #[serde(rename = "workflowIds", default, skip_serializing_if = "Vec::is_empty")]
1197    pub workflow_ids: Vec<String>,
1198    /// Condition that triggers the workflow
1199    /// Required by the API.
1200    /// (Optional here so responses that omit it still parse.)
1201    #[serde(
1202        rename = "triggerCondition",
1203        default,
1204        skip_serializing_if = "Option::is_none"
1205    )]
1206    pub trigger_condition: Option<String>,
1207    /// Optional message to send when triggering the workflow
1208    #[serde(
1209        rename = "triggerMessage",
1210        default,
1211        skip_serializing_if = "Option::is_none"
1212    )]
1213    pub trigger_message: Option<String>,
1214}
1215
1216/// `updateActionResponseDTO` from the GoHighLevel OpenAPI spec.
1217#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1218pub struct UpdateActionResponseDTO {
1219    /// Updated action details
1220    /// Required by the API.
1221    /// (Optional here so responses that omit it still parse.)
1222    #[serde(default, skip_serializing_if = "Option::is_none")]
1223    pub data: Option<ActionDataDTO>,
1224    /// Success status of the request
1225    /// Required by the API.
1226    /// (Optional here so responses that omit it still parse.)
1227    #[serde(default, skip_serializing_if = "Option::is_none")]
1228    pub success: Option<bool>,
1229}
1230
1231/// `updateContactFieldDto` from the GoHighLevel OpenAPI spec.
1232#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1233pub struct UpdateContactFieldDto {
1234    /// ID of the contact field in Contacts Table
1235    /// Required by the API.
1236    /// (Optional here so responses that omit it still parse.)
1237    #[serde(
1238        rename = "contactFieldId",
1239        default,
1240        skip_serializing_if = "Option::is_none"
1241    )]
1242    pub contact_field_id: Option<String>,
1243    /// Description of the contact field in Contacts Table
1244    /// Required by the API.
1245    /// (Optional here so responses that omit it still parse.)
1246    #[serde(default, skip_serializing_if = "Option::is_none")]
1247    pub description: Option<String>,
1248    /// Contact update examples in Contacts Table. Not required when using standard fields,
1249    /// Monetory or Date Custom fields.
1250    #[serde(
1251        rename = "contactUpdateExamples",
1252        default,
1253        skip_serializing_if = "Vec::is_empty"
1254    )]
1255    pub contact_update_examples: Vec<String>,
1256}