Skip to main content

ghl_models/v2/
saas_api.rs

1//! `saas-api` data models for GoHighLevel API V2 (20 types).
2//!
3//! Generated from HighLevel's official OpenAPI spec for the
4//! **Saas Api** module. Every endpoint that uses these types, with its
5//! parameters, required scopes and enum values, is documented in the
6//! [`saas-api` API reference](https://github.com/Shahroz/ghl-rs/blob/main/docs/api/saas-api.md).
7//!
8//! Enable with `features = ["saas-api"]`.
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/// `AgencyPlanResponseDto` from the GoHighLevel OpenAPI spec.
22#[derive(Debug, Clone, Default, Serialize, Deserialize)]
23pub struct AgencyPlanResponseDto {
24    /// Unique identifier for the plan
25    /// Required by the API.
26    /// (Optional here so responses that omit it still parse.)
27    #[serde(rename = "planId", default, skip_serializing_if = "Option::is_none")]
28    pub plan_id: Option<String>,
29    /// Title of the plan
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 title: Option<String>,
34    /// Description of the plan
35    /// Required by the API.
36    /// (Optional here so responses that omit it still parse.)
37    #[serde(default, skip_serializing_if = "Option::is_none")]
38    pub description: Option<String>,
39    /// Array of SaaS products included in the plan
40    /// Required by the API.
41    /// (Optional here so responses that omit it still parse.)
42    #[serde(
43        rename = "saasProducts",
44        default,
45        skip_serializing_if = "Vec::is_empty"
46    )]
47    pub saas_products: Vec<String>,
48    /// Array of add-ons included in the plan
49    #[serde(rename = "addOns", default, skip_serializing_if = "Vec::is_empty")]
50    pub add_ons: Vec<String>,
51    /// Level of the plan (0-4)
52    /// Required by the API.
53    /// (Optional here so responses that omit it still parse.)
54    #[serde(rename = "planLevel", default, skip_serializing_if = "Option::is_none")]
55    pub plan_level: Option<f64>,
56    /// Trial period in days
57    /// Required by the API.
58    /// (Optional here so responses that omit it still parse.)
59    #[serde(
60        rename = "trialPeriod",
61        default,
62        skip_serializing_if = "Option::is_none"
63    )]
64    pub trial_period: Option<f64>,
65    /// User limit for the plan
66    #[serde(rename = "userLimit", default, skip_serializing_if = "Option::is_none")]
67    pub user_limit: Option<f64>,
68    /// Contact limit for the plan
69    #[serde(
70        rename = "contactLimit",
71        default,
72        skip_serializing_if = "Option::is_none"
73    )]
74    pub contact_limit: Option<f64>,
75    /// Pricing information for the plan
76    /// Nested object; raw JSON (see the API docs for its fields).
77    /// Required by the API.
78    /// (Optional here so responses that omit it still parse.)
79    #[serde(default, skip_serializing_if = "Vec::is_empty")]
80    pub prices: Vec<serde_json::Value>,
81    /// Category ID for the plan
82    #[serde(
83        rename = "categoryId",
84        default,
85        skip_serializing_if = "Option::is_none"
86    )]
87    pub category_id: Option<String>,
88    /// Snapshot ID for the plan
89    #[serde(
90        rename = "snapshotId",
91        default,
92        skip_serializing_if = "Option::is_none"
93    )]
94    pub snapshot_id: Option<String>,
95    /// Product ID for the plan
96    #[serde(rename = "productId", default, skip_serializing_if = "Option::is_none")]
97    pub product_id: Option<String>,
98    /// Indicates if this is a SaaS V2 plan
99    /// Required by the API.
100    /// (Optional here so responses that omit it still parse.)
101    #[serde(rename = "isSaaSV2", default, skip_serializing_if = "Option::is_none")]
102    pub is_saa_sv2: Option<bool>,
103    /// Provider location ID
104    #[serde(
105        rename = "providerLocationId",
106        default,
107        skip_serializing_if = "Option::is_none"
108    )]
109    pub provider_location_id: Option<String>,
110    /// Creation timestamp
111    /// Required by the API.
112    /// (Optional here so responses that omit it still parse.)
113    #[serde(rename = "createdAt", default, skip_serializing_if = "Option::is_none")]
114    pub created_at: Option<String>,
115    /// Last update timestamp
116    /// Required by the API.
117    /// (Optional here so responses that omit it still parse.)
118    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
119    pub updated_at: Option<String>,
120}
121
122/// `BadRequestDTO` from the GoHighLevel OpenAPI spec.
123#[derive(Debug, Clone, Default, Serialize, Deserialize)]
124pub struct BadRequestDTO {
125    /// Status code
126    #[serde(
127        rename = "statusCode",
128        default,
129        skip_serializing_if = "Option::is_none"
130    )]
131    pub status_code: Option<f64>,
132    /// Error message
133    #[serde(default, skip_serializing_if = "Option::is_none")]
134    pub message: Option<String>,
135}
136
137/// `BulkDisableSaasDto` from the GoHighLevel OpenAPI spec.
138#[derive(Debug, Clone, Default, Serialize, Deserialize)]
139pub struct BulkDisableSaasDto {
140    /// Location IDs
141    /// Required by the API.
142    #[serde(rename = "locationIds", default, skip_serializing_if = "Vec::is_empty")]
143    pub location_ids: Vec<String>,
144}
145
146/// `BulkDisableSaasResponseDto` from the GoHighLevel OpenAPI spec.
147#[derive(Debug, Clone, Default, Serialize, Deserialize)]
148pub struct BulkDisableSaasResponseDto {
149    /// Response data from the bulk disable SaaS operation
150    /// Required by the API.
151    /// (Optional here so responses that omit it still parse.)
152    #[serde(default, skip_serializing_if = "Option::is_none")]
153    pub data: Option<serde_json::Value>,
154}
155
156/// `BulkEnableSaasActionPayloadDto` from the GoHighLevel OpenAPI spec.
157#[derive(Debug, Clone, Default, Serialize, Deserialize)]
158pub struct BulkEnableSaasActionPayloadDto {
159    /// Price ID for the SaaS plan
160    #[serde(rename = "priceId", default, skip_serializing_if = "Option::is_none")]
161    pub price_id: Option<String>,
162    /// Stripe account ID
163    #[serde(
164        rename = "stripeAccountId",
165        default,
166        skip_serializing_if = "Option::is_none"
167    )]
168    pub stripe_account_id: Option<String>,
169    /// SaaS plan ID
170    /// Required by the API.
171    #[serde(rename = "saasPlanId")]
172    pub saas_plan_id: String,
173    /// Provider location ID
174    #[serde(
175        rename = "providerLocationId",
176        default,
177        skip_serializing_if = "Option::is_none"
178    )]
179    pub provider_location_id: Option<String>,
180}
181
182/// `BulkEnableSaasRequestDto` from the GoHighLevel OpenAPI spec.
183#[derive(Debug, Clone, Default, Serialize, Deserialize)]
184pub struct BulkEnableSaasRequestDto {
185    /// Array of location IDs to enable SaaS for
186    /// Required by the API.
187    #[serde(rename = "locationIds", default, skip_serializing_if = "Vec::is_empty")]
188    pub location_ids: Vec<String>,
189    /// Indicates if the SaaS is V2
190    /// Required by the API.
191    #[serde(rename = "isSaaSV2")]
192    pub is_saa_sv2: bool,
193    /// Action payload for the bulk enable SaaS operation
194    /// Required by the API.
195    #[serde(rename = "actionPayload")]
196    pub action_payload: BulkEnableSaasActionPayloadDto,
197}
198
199/// `BulkEnableSaasResponseDto` from the GoHighLevel OpenAPI spec.
200#[derive(Debug, Clone, Default, Serialize, Deserialize)]
201pub struct BulkEnableSaasResponseDto {
202    /// Indicates if the bulk enable SaaS operation was successful
203    /// Required by the API.
204    /// (Optional here so responses that omit it still parse.)
205    #[serde(default, skip_serializing_if = "Option::is_none")]
206    pub success: Option<bool>,
207    /// Message indicating the bulk enable SaaS operation
208    /// Required by the API.
209    /// (Optional here so responses that omit it still parse.)
210    #[serde(default, skip_serializing_if = "Option::is_none")]
211    pub message: Option<String>,
212    /// URL for the bulk enable SaaS operation
213    #[serde(
214        rename = "bulkActionUrl",
215        default,
216        skip_serializing_if = "Option::is_none"
217    )]
218    pub bulk_action_url: Option<String>,
219}
220
221/// `EnableSaasDto` from the GoHighLevel OpenAPI spec.
222#[derive(Debug, Clone, Default, Serialize, Deserialize)]
223pub struct EnableSaasDto {
224    /// Stripe account id(Required only for SaaS V1)
225    #[serde(
226        rename = "stripeAccountId",
227        default,
228        skip_serializing_if = "Option::is_none"
229    )]
230    pub stripe_account_id: Option<String>,
231    /// Name of the stripe customer(Required only for SaaS V1)
232    #[serde(default, skip_serializing_if = "Option::is_none")]
233    pub name: Option<String>,
234    /// Email of the stripe customer(Required only for SaaS V1)
235    #[serde(default, skip_serializing_if = "Option::is_none")]
236    pub email: Option<String>,
237    /// Stripe customer id if exists(Required only for SaaS V1)
238    #[serde(
239        rename = "stripeCustomerId",
240        default,
241        skip_serializing_if = "Option::is_none"
242    )]
243    pub stripe_customer_id: Option<String>,
244    /// Required by the API.
245    #[serde(rename = "companyId")]
246    pub company_id: String,
247    /// Denotes if it is a saas v2 or v1 sub-account
248    /// Required by the API.
249    #[serde(rename = "isSaaSV2")]
250    pub is_saa_sv2: bool,
251    /// Agency subaccount used for payment provider integration(Required Only for SaaS V2)
252    #[serde(rename = "contactId", default, skip_serializing_if = "Option::is_none")]
253    pub contact_id: Option<String>,
254    /// Agency Subaccount ID
255    #[serde(
256        rename = "providerLocationId",
257        default,
258        skip_serializing_if = "Option::is_none"
259    )]
260    pub provider_location_id: Option<String>,
261    /// Description
262    #[serde(default, skip_serializing_if = "Option::is_none")]
263    pub description: Option<String>,
264    /// Required only while pre-configuring saas subscription
265    #[serde(
266        rename = "saasPlanId",
267        default,
268        skip_serializing_if = "Option::is_none"
269    )]
270    pub saas_plan_id: Option<String>,
271    /// Required only while pre-configuring saas subscription
272    #[serde(rename = "priceId", default, skip_serializing_if = "Option::is_none")]
273    pub price_id: Option<String>,
274}
275
276/// `EnableSaasResponseDto` from the GoHighLevel OpenAPI spec.
277#[derive(Debug, Clone, Default, Serialize, Deserialize)]
278pub struct EnableSaasResponseDto {
279    /// Response data from the enable SaaS operation
280    /// Required by the API.
281    /// (Optional here so responses that omit it still parse.)
282    #[serde(default, skip_serializing_if = "Option::is_none")]
283    pub data: Option<serde_json::Value>,
284}
285
286/// `GetSaasLocationsResponseDto` from the GoHighLevel OpenAPI spec.
287#[derive(Debug, Clone, Default, Serialize, Deserialize)]
288pub struct GetSaasLocationsResponseDto {
289    /// Array of SaaS locations
290    /// Required by the API.
291    /// (Optional here so responses that omit it still parse.)
292    #[serde(default, skip_serializing_if = "Vec::is_empty")]
293    pub locations: Vec<SaasLocationDto>,
294    /// Nested object; raw JSON (see the API docs for its fields).
295    /// Required by the API.
296    /// (Optional here so responses that omit it still parse.)
297    #[serde(default, skip_serializing_if = "Option::is_none")]
298    pub pagination: Option<serde_json::Value>,
299}
300
301/// `InternalServerErrorDTO` from the GoHighLevel OpenAPI spec.
302#[derive(Debug, Clone, Default, Serialize, Deserialize)]
303pub struct InternalServerErrorDTO {
304    /// Status code
305    #[serde(
306        rename = "statusCode",
307        default,
308        skip_serializing_if = "Option::is_none"
309    )]
310    pub status_code: Option<f64>,
311    /// Error message
312    #[serde(default, skip_serializing_if = "Option::is_none")]
313    pub message: Option<String>,
314}
315
316/// `LocationSubscriptionResponseDto` from the GoHighLevel OpenAPI spec.
317#[derive(Debug, Clone, Default, Serialize, Deserialize)]
318pub struct LocationSubscriptionResponseDto {
319    /// Location ID
320    /// Required by the API.
321    /// (Optional here so responses that omit it still parse.)
322    #[serde(
323        rename = "locationId",
324        default,
325        skip_serializing_if = "Option::is_none"
326    )]
327    pub location_id: Option<String>,
328    /// Indicates if the SaaS is V2
329    /// Required by the API.
330    /// (Optional here so responses that omit it still parse.)
331    #[serde(rename = "isSaaSV2", default, skip_serializing_if = "Option::is_none")]
332    pub is_saa_sv2: Option<bool>,
333    /// Company ID
334    /// Required by the API.
335    /// (Optional here so responses that omit it still parse.)
336    #[serde(rename = "companyId", default, skip_serializing_if = "Option::is_none")]
337    pub company_id: Option<String>,
338    /// SaaS mode
339    #[serde(rename = "saasMode", default, skip_serializing_if = "Option::is_none")]
340    pub saas_mode: Option<String>,
341    /// Subscription ID
342    #[serde(
343        rename = "subscriptionId",
344        default,
345        skip_serializing_if = "Option::is_none"
346    )]
347    pub subscription_id: Option<String>,
348    /// Customer ID
349    #[serde(
350        rename = "customerId",
351        default,
352        skip_serializing_if = "Option::is_none"
353    )]
354    pub customer_id: Option<String>,
355    /// Product ID
356    #[serde(rename = "productId", default, skip_serializing_if = "Option::is_none")]
357    pub product_id: Option<String>,
358    /// Price ID
359    #[serde(rename = "priceId", default, skip_serializing_if = "Option::is_none")]
360    pub price_id: Option<String>,
361    /// SaaS plan ID
362    #[serde(
363        rename = "saasPlanId",
364        default,
365        skip_serializing_if = "Option::is_none"
366    )]
367    pub saas_plan_id: Option<String>,
368    /// Subscription status
369    #[serde(
370        rename = "subscriptionStatus",
371        default,
372        skip_serializing_if = "Option::is_none"
373    )]
374    pub subscription_status: Option<String>,
375}
376
377/// `PauseLocationDto` from the GoHighLevel OpenAPI spec.
378#[derive(Debug, Clone, Default, Serialize, Deserialize)]
379pub struct PauseLocationDto {
380    /// Paused
381    /// Required by the API.
382    pub paused: bool,
383    /// Company ID
384    /// Required by the API.
385    #[serde(rename = "companyId")]
386    pub company_id: String,
387}
388
389/// `ResourceNotFoundDTO` from the GoHighLevel OpenAPI spec.
390#[derive(Debug, Clone, Default, Serialize, Deserialize)]
391pub struct ResourceNotFoundDTO {
392    /// Status code
393    #[serde(
394        rename = "statusCode",
395        default,
396        skip_serializing_if = "Option::is_none"
397    )]
398    pub status_code: Option<f64>,
399    /// Error message
400    #[serde(default, skip_serializing_if = "Option::is_none")]
401    pub message: Option<String>,
402}
403
404/// `SaasLocationDto` from the GoHighLevel OpenAPI spec.
405#[derive(Debug, Clone, Default, Serialize, Deserialize)]
406pub struct SaasLocationDto {
407    /// Location ID
408    /// Required by the API.
409    /// (Optional here so responses that omit it still parse.)
410    #[serde(
411        rename = "locationId",
412        default,
413        skip_serializing_if = "Option::is_none"
414    )]
415    pub location_id: Option<String>,
416    /// Company ID
417    /// Required by the API.
418    /// (Optional here so responses that omit it still parse.)
419    #[serde(rename = "companyId", default, skip_serializing_if = "Option::is_none")]
420    pub company_id: Option<String>,
421    /// SaaS mode
422    /// Required by the API.
423    /// (Optional here so responses that omit it still parse.)
424    #[serde(rename = "saasMode", default, skip_serializing_if = "Option::is_none")]
425    pub saas_mode: Option<String>,
426    /// Subscription ID
427    /// Required by the API.
428    /// (Optional here so responses that omit it still parse.)
429    #[serde(
430        rename = "subscriptionId",
431        default,
432        skip_serializing_if = "Option::is_none"
433    )]
434    pub subscription_id: Option<String>,
435    /// Customer ID
436    #[serde(
437        rename = "customerId",
438        default,
439        skip_serializing_if = "Option::is_none"
440    )]
441    pub customer_id: Option<String>,
442    /// Name
443    #[serde(default, skip_serializing_if = "Option::is_none")]
444    pub name: Option<String>,
445    /// Email
446    #[serde(default, skip_serializing_if = "Option::is_none")]
447    pub email: Option<String>,
448    /// Provider location ID
449    #[serde(
450        rename = "providerLocationId",
451        default,
452        skip_serializing_if = "Option::is_none"
453    )]
454    pub provider_location_id: Option<String>,
455    /// Indicates if the SaaS is V2
456    #[serde(rename = "isSaaSV2", default, skip_serializing_if = "Option::is_none")]
457    pub is_saa_sv2: Option<bool>,
458    /// Subscription information
459    #[serde(
460        rename = "subscriptionInfo",
461        default,
462        skip_serializing_if = "Option::is_none"
463    )]
464    pub subscription_info: Option<serde_json::Value>,
465}
466
467/// `SaasPlanResponseDto` from the GoHighLevel OpenAPI spec.
468#[derive(Debug, Clone, Default, Serialize, Deserialize)]
469pub struct SaasPlanResponseDto {
470    /// Unique identifier for the SaaS plan
471    /// Required by the API.
472    /// (Optional here so responses that omit it still parse.)
473    #[serde(rename = "planId", default, skip_serializing_if = "Option::is_none")]
474    pub plan_id: Option<String>,
475    /// Company ID associated with the SaaS plan
476    /// Required by the API.
477    /// (Optional here so responses that omit it still parse.)
478    #[serde(rename = "companyId", default, skip_serializing_if = "Option::is_none")]
479    pub company_id: Option<String>,
480    /// Title of the SaaS plan
481    /// Required by the API.
482    /// (Optional here so responses that omit it still parse.)
483    #[serde(default, skip_serializing_if = "Option::is_none")]
484    pub title: Option<String>,
485    /// Description of the SaaS plan
486    /// Required by the API.
487    /// (Optional here so responses that omit it still parse.)
488    #[serde(default, skip_serializing_if = "Option::is_none")]
489    pub description: Option<String>,
490    /// Array of SaaS products included in the plan
491    /// Required by the API.
492    /// (Optional here so responses that omit it still parse.)
493    #[serde(
494        rename = "saasProducts",
495        default,
496        skip_serializing_if = "Vec::is_empty"
497    )]
498    pub saas_products: Vec<String>,
499    /// Array of add-ons included in the plan
500    #[serde(rename = "addOns", default, skip_serializing_if = "Vec::is_empty")]
501    pub add_ons: Vec<String>,
502    /// Level of the plan (0-4)
503    /// Required by the API.
504    /// (Optional here so responses that omit it still parse.)
505    #[serde(rename = "planLevel", default, skip_serializing_if = "Option::is_none")]
506    pub plan_level: Option<f64>,
507    /// Trial period in days
508    /// Required by the API.
509    /// (Optional here so responses that omit it still parse.)
510    #[serde(
511        rename = "trialPeriod",
512        default,
513        skip_serializing_if = "Option::is_none"
514    )]
515    pub trial_period: Option<f64>,
516    /// Setup fee for the plan
517    #[serde(rename = "setupFee", default, skip_serializing_if = "Option::is_none")]
518    pub setup_fee: Option<f64>,
519    /// User limit for the plan
520    #[serde(rename = "userLimit", default, skip_serializing_if = "Option::is_none")]
521    pub user_limit: Option<f64>,
522    /// Contact limit for the plan
523    #[serde(
524        rename = "contactLimit",
525        default,
526        skip_serializing_if = "Option::is_none"
527    )]
528    pub contact_limit: Option<f64>,
529    /// Prices for the plan
530    /// Nested object; raw JSON (see the API docs for its fields).
531    /// Required by the API.
532    /// (Optional here so responses that omit it still parse.)
533    #[serde(default, skip_serializing_if = "Vec::is_empty")]
534    pub prices: Vec<serde_json::Value>,
535    /// Category ID for the plan
536    #[serde(
537        rename = "categoryId",
538        default,
539        skip_serializing_if = "Option::is_none"
540    )]
541    pub category_id: Option<String>,
542    /// Snapshot ID for the plan
543    #[serde(
544        rename = "snapshotId",
545        default,
546        skip_serializing_if = "Option::is_none"
547    )]
548    pub snapshot_id: Option<String>,
549    /// Provider location ID
550    #[serde(
551        rename = "providerLocationId",
552        default,
553        skip_serializing_if = "Option::is_none"
554    )]
555    pub provider_location_id: Option<String>,
556    /// Product ID for the plan
557    #[serde(rename = "productId", default, skip_serializing_if = "Option::is_none")]
558    pub product_id: Option<String>,
559    /// Indicates if this is a SaaS V2 plan
560    /// Required by the API.
561    /// (Optional here so responses that omit it still parse.)
562    #[serde(rename = "isSaaSV2", default, skip_serializing_if = "Option::is_none")]
563    pub is_saa_sv2: Option<bool>,
564    /// Creation timestamp
565    /// Format: date-time (ISO-8601 string).
566    /// Required by the API.
567    /// (Optional here so responses that omit it still parse.)
568    #[serde(rename = "createdAt", default, skip_serializing_if = "Option::is_none")]
569    pub created_at: Option<String>,
570    /// Last update timestamp
571    /// Format: date-time (ISO-8601 string).
572    /// Required by the API.
573    /// (Optional here so responses that omit it still parse.)
574    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
575    pub updated_at: Option<String>,
576}
577
578/// `UnauthorizedDTO` from the GoHighLevel OpenAPI spec.
579#[derive(Debug, Clone, Default, Serialize, Deserialize)]
580pub struct UnauthorizedDTO {
581    /// Status code
582    #[serde(
583        rename = "statusCode",
584        default,
585        skip_serializing_if = "Option::is_none"
586    )]
587    pub status_code: Option<f64>,
588    /// Error message
589    #[serde(default, skip_serializing_if = "Option::is_none")]
590    pub message: Option<String>,
591    /// Error message
592    #[serde(default, skip_serializing_if = "Option::is_none")]
593    pub error: Option<String>,
594}
595
596/// `UpdateRebillingDto` from the GoHighLevel OpenAPI spec.
597#[derive(Debug, Clone, Default, Serialize, Deserialize)]
598pub struct UpdateRebillingDto {
599    /// The product to update rebilling for
600    /// Allowed values: `contentAI`, `workflow_premium_actions`, `workflow_ai`,
601    /// `conversationAI`, `EmailNotification`, `whatsApp`, `reviewsAI`, `VERIFIED_CALLER_ID`,
602    /// `WALLET_SALES_TAX`, `NOTIFICATION_SMS`, `EmailSmtp`, `EmailVerification`.
603    /// Required by the API.
604    pub product: String,
605    /// Array of location IDs to update rebilling for
606    /// Required by the API.
607    #[serde(rename = "locationIds", default, skip_serializing_if = "Vec::is_empty")]
608    pub location_ids: Vec<String>,
609    /// Configuration for rebilling settings
610    /// Nested object; raw JSON (see the API docs for its fields).
611    /// Required by the API.
612    pub config: serde_json::Value,
613}
614
615/// `UpdateRebillingResponseDto` from the GoHighLevel OpenAPI spec.
616#[derive(Debug, Clone, Default, Serialize, Deserialize)]
617pub struct UpdateRebillingResponseDto {
618    /// Indicates if the rebilling update was successful
619    /// Required by the API.
620    /// (Optional here so responses that omit it still parse.)
621    #[serde(default, skip_serializing_if = "Option::is_none")]
622    pub success: Option<bool>,
623}
624
625/// `UpdateSubscriptionDto` from the GoHighLevel OpenAPI spec.
626#[derive(Debug, Clone, Default, Serialize, Deserialize)]
627pub struct UpdateSubscriptionDto {
628    /// Subscription ID
629    /// Required by the API.
630    #[serde(rename = "subscriptionId")]
631    pub subscription_id: String,
632    /// Customer ID
633    /// Required by the API.
634    #[serde(rename = "customerId")]
635    pub customer_id: String,
636    /// Company ID
637    /// Required by the API.
638    #[serde(rename = "companyId")]
639    pub company_id: String,
640}