Skip to main content

ghl_models/v2/
opportunities.rs

1// @generated by xtask/generate_models.py — do not edit by hand.
2// Source: https://github.com/GoHighLevel/highlevel-api-docs
3// Doc comments are HighLevel's own field descriptions, reflowed verbatim, so
4// they aren't held to rustdoc's markdown conventions.
5#![allow(
6    missing_docs,
7    clippy::doc_lazy_continuation,
8    clippy::doc_overindented_list_items
9)]
10
11use serde::{Deserialize, Serialize};
12
13/// `AdditionalDetailsDTO` from the GoHighLevel OpenAPI spec.
14#[derive(Debug, Clone, Default, Serialize, Deserialize)]
15pub struct AdditionalDetailsDTO {
16    /// Required by the API.
17    pub notes: bool,
18    /// Required by the API.
19    pub tasks: bool,
20    /// Required by the API.
21    #[serde(rename = "calendarEvents")]
22    pub calendar_events: bool,
23    /// Required by the API.
24    #[serde(rename = "unReadConversations")]
25    pub un_read_conversations: bool,
26}
27
28/// `CreateAddFollowersSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
29#[derive(Debug, Clone, Default, Serialize, Deserialize)]
30pub struct CreateAddFollowersSuccessfulResponseDto {
31    #[serde(default, skip_serializing_if = "Vec::is_empty")]
32    pub followers: Vec<String>,
33    #[serde(
34        rename = "followersAdded",
35        default,
36        skip_serializing_if = "Vec::is_empty"
37    )]
38    pub followers_added: Vec<String>,
39}
40
41/// `CreateDto` from the GoHighLevel OpenAPI spec.
42#[derive(Debug, Clone, Default, Serialize, Deserialize)]
43pub struct CreateDto {
44    /// pipeline Id
45    /// Required by the API.
46    #[serde(rename = "pipelineId")]
47    pub pipeline_id: String,
48    /// Required by the API.
49    #[serde(rename = "locationId")]
50    pub location_id: String,
51    /// Required by the API.
52    pub name: String,
53    #[serde(
54        rename = "pipelineStageId",
55        default,
56        skip_serializing_if = "Option::is_none"
57    )]
58    pub pipeline_stage_id: Option<String>,
59    /// Allowed values: `open`, `won`, `lost`, `abandoned`, `all`.
60    /// Required by the API.
61    pub status: String,
62    /// Required by the API.
63    #[serde(rename = "contactId")]
64    pub contact_id: String,
65    #[serde(
66        rename = "monetaryValue",
67        default,
68        skip_serializing_if = "Option::is_none"
69    )]
70    pub monetary_value: Option<f64>,
71    #[serde(
72        rename = "assignedTo",
73        default,
74        skip_serializing_if = "Option::is_none"
75    )]
76    pub assigned_to: Option<String>,
77    /// Add custom fields to opportunities.
78    /// Multiple possible shapes in the spec; raw JSON.
79    #[serde(
80        rename = "customFields",
81        default,
82        skip_serializing_if = "Vec::is_empty"
83    )]
84    pub custom_fields: Vec<serde_json::Value>,
85}
86
87/// `CustomFieldResponseSchema` from the GoHighLevel OpenAPI spec.
88#[derive(Debug, Clone, Default, Serialize, Deserialize)]
89pub struct CustomFieldResponseSchema {
90    /// Required by the API.
91    pub id: String,
92    /// The value of the custom field
93    /// Multiple possible shapes in the spec; raw JSON.
94    /// Required by the API.
95    #[serde(rename = "fieldValue")]
96    pub field_value: serde_json::Value,
97}
98
99/// `DeleteFollowersSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
100#[derive(Debug, Clone, Default, Serialize, Deserialize)]
101pub struct DeleteFollowersSuccessfulResponseDto {
102    #[serde(default, skip_serializing_if = "Vec::is_empty")]
103    pub followers: Vec<String>,
104    #[serde(
105        rename = "followersRemoved",
106        default,
107        skip_serializing_if = "Vec::is_empty"
108    )]
109    pub followers_removed: Vec<String>,
110}
111
112/// `DeleteUpdateOpportunitySuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
113#[derive(Debug, Clone, Default, Serialize, Deserialize)]
114pub struct DeleteUpdateOpportunitySuccessfulResponseDto {
115    #[serde(default, skip_serializing_if = "Option::is_none")]
116    pub succeded: Option<bool>,
117}
118
119/// `FollowersDTO` from the GoHighLevel OpenAPI spec.
120#[derive(Debug, Clone, Default, Serialize, Deserialize)]
121pub struct FollowersDTO {
122    /// Required by the API.
123    #[serde(default, skip_serializing_if = "Vec::is_empty")]
124    pub followers: Vec<String>,
125}
126
127/// `GetPipelinesSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
128#[derive(Debug, Clone, Default, Serialize, Deserialize)]
129pub struct GetPipelinesSuccessfulResponseDto {
130    #[serde(default, skip_serializing_if = "Vec::is_empty")]
131    pub pipelines: Vec<PipelinesResponseSchema>,
132}
133
134/// `GetPostOpportunitySuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
135#[derive(Debug, Clone, Default, Serialize, Deserialize)]
136pub struct GetPostOpportunitySuccessfulResponseDto {
137    #[serde(default, skip_serializing_if = "Option::is_none")]
138    pub opportunity: Option<SearchOpportunitiesResponseSchema>,
139}
140
141/// `LostReasonResponseSchema` from the GoHighLevel OpenAPI spec.
142#[derive(Debug, Clone, Default, Serialize, Deserialize)]
143pub struct LostReasonResponseSchema {
144    /// lost reason id
145    #[serde(default, skip_serializing_if = "Option::is_none")]
146    pub id: Option<String>,
147    /// lost reason name
148    #[serde(default, skip_serializing_if = "Option::is_none")]
149    pub name: Option<String>,
150    /// location id
151    #[serde(
152        rename = "locationId",
153        default,
154        skip_serializing_if = "Option::is_none"
155    )]
156    pub location_id: Option<String>,
157    /// updated at
158    /// Format: date-time (ISO-8601 string).
159    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
160    pub updated_at: Option<String>,
161    /// created at
162    /// Format: date-time (ISO-8601 string).
163    #[serde(rename = "createdAt", default, skip_serializing_if = "Option::is_none")]
164    pub created_at: Option<String>,
165}
166
167/// `LostReasonsResponseSchema` from the GoHighLevel OpenAPI spec.
168#[derive(Debug, Clone, Default, Serialize, Deserialize)]
169pub struct LostReasonsResponseSchema {
170    #[serde(rename = "lostReasons", default, skip_serializing_if = "Vec::is_empty")]
171    pub lost_reasons: Vec<LostReasonResponseSchema>,
172    #[serde(default, skip_serializing_if = "Option::is_none")]
173    pub total: Option<f64>,
174}
175
176/// `OpportunitySearchBodyDTO` from the GoHighLevel OpenAPI spec.
177#[derive(Debug, Clone, Default, Serialize, Deserialize)]
178pub struct OpportunitySearchBodyDTO {
179    /// Location Id
180    /// Required by the API.
181    #[serde(rename = "locationId")]
182    pub location_id: String,
183    /// Required by the API.
184    pub query: String,
185    /// Required by the API.
186    pub limit: f64,
187    /// Required by the API.
188    pub page: f64,
189    /// Required by the API.
190    #[serde(rename = "searchAfter", default, skip_serializing_if = "Vec::is_empty")]
191    pub search_after: Vec<String>,
192    /// Required by the API.
193    #[serde(rename = "additionalDetails")]
194    pub additional_details: AdditionalDetailsDTO,
195}
196
197/// `PipelinesResponseSchema` from the GoHighLevel OpenAPI spec.
198#[derive(Debug, Clone, Default, Serialize, Deserialize)]
199pub struct PipelinesResponseSchema {
200    #[serde(default, skip_serializing_if = "Option::is_none")]
201    pub id: Option<String>,
202    #[serde(default, skip_serializing_if = "Option::is_none")]
203    pub name: Option<String>,
204    #[serde(default, skip_serializing_if = "Vec::is_empty")]
205    pub stages: Vec<Vec<serde_json::Value>>,
206    #[serde(
207        rename = "showInFunnel",
208        default,
209        skip_serializing_if = "Option::is_none"
210    )]
211    pub show_in_funnel: Option<bool>,
212    #[serde(
213        rename = "showInPieChart",
214        default,
215        skip_serializing_if = "Option::is_none"
216    )]
217    pub show_in_pie_chart: Option<bool>,
218    #[serde(
219        rename = "locationId",
220        default,
221        skip_serializing_if = "Option::is_none"
222    )]
223    pub location_id: Option<String>,
224    /// How pipeline/stage colors are rendered
225    /// Allowed values: `dot`, `bg-tint`, `none`.
226    #[serde(
227        rename = "colorRenderMode",
228        default,
229        skip_serializing_if = "Option::is_none"
230    )]
231    pub color_render_mode: Option<String>,
232}
233
234/// `PostSearchSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
235#[derive(Debug, Clone, Default, Serialize, Deserialize)]
236pub struct PostSearchSuccessfulResponseDto {
237    #[serde(default, skip_serializing_if = "Vec::is_empty")]
238    pub opportunities: Vec<SearchOpportunitiesResponseSchema>,
239    /// Required by the API.
240    pub total: f64,
241    #[serde(default, skip_serializing_if = "Option::is_none")]
242    pub aggregations: Option<serde_json::Value>,
243}
244
245/// `SearchMetaResponseSchema` from the GoHighLevel OpenAPI spec.
246#[derive(Debug, Clone, Default, Serialize, Deserialize)]
247pub struct SearchMetaResponseSchema {
248    #[serde(default, skip_serializing_if = "Option::is_none")]
249    pub total: Option<f64>,
250    #[serde(
251        rename = "nextPageUrl",
252        default,
253        skip_serializing_if = "Option::is_none"
254    )]
255    pub next_page_url: Option<String>,
256    #[serde(
257        rename = "startAfterId",
258        default,
259        skip_serializing_if = "Option::is_none"
260    )]
261    pub start_after_id: Option<String>,
262    #[serde(
263        rename = "startAfter",
264        default,
265        skip_serializing_if = "Option::is_none"
266    )]
267    pub start_after: Option<f64>,
268    #[serde(
269        rename = "currentPage",
270        default,
271        skip_serializing_if = "Option::is_none"
272    )]
273    pub current_page: Option<f64>,
274    #[serde(rename = "nextPage", default, skip_serializing_if = "Option::is_none")]
275    pub next_page: Option<f64>,
276    #[serde(rename = "prevPage", default, skip_serializing_if = "Option::is_none")]
277    pub prev_page: Option<f64>,
278}
279
280/// `SearchOpportunitiesContactResponseSchema` from the GoHighLevel OpenAPI spec.
281#[derive(Debug, Clone, Default, Serialize, Deserialize)]
282pub struct SearchOpportunitiesContactResponseSchema {
283    #[serde(default, skip_serializing_if = "Option::is_none")]
284    pub id: Option<String>,
285    #[serde(default, skip_serializing_if = "Option::is_none")]
286    pub name: Option<String>,
287    #[serde(
288        rename = "companyName",
289        default,
290        skip_serializing_if = "Option::is_none"
291    )]
292    pub company_name: Option<String>,
293    #[serde(default, skip_serializing_if = "Option::is_none")]
294    pub email: Option<String>,
295    #[serde(default, skip_serializing_if = "Option::is_none")]
296    pub phone: Option<String>,
297    #[serde(default, skip_serializing_if = "Vec::is_empty")]
298    pub tags: Vec<String>,
299}
300
301/// `SearchOpportunitiesResponseSchema` from the GoHighLevel OpenAPI spec.
302#[derive(Debug, Clone, Default, Serialize, Deserialize)]
303pub struct SearchOpportunitiesResponseSchema {
304    #[serde(default, skip_serializing_if = "Option::is_none")]
305    pub id: Option<String>,
306    #[serde(default, skip_serializing_if = "Option::is_none")]
307    pub name: Option<String>,
308    #[serde(
309        rename = "monetaryValue",
310        default,
311        skip_serializing_if = "Option::is_none"
312    )]
313    pub monetary_value: Option<f64>,
314    #[serde(
315        rename = "pipelineId",
316        default,
317        skip_serializing_if = "Option::is_none"
318    )]
319    pub pipeline_id: Option<String>,
320    #[serde(
321        rename = "pipelineStageId",
322        default,
323        skip_serializing_if = "Option::is_none"
324    )]
325    pub pipeline_stage_id: Option<String>,
326    #[serde(
327        rename = "assignedTo",
328        default,
329        skip_serializing_if = "Option::is_none"
330    )]
331    pub assigned_to: Option<String>,
332    #[serde(default, skip_serializing_if = "Option::is_none")]
333    pub status: Option<String>,
334    #[serde(default, skip_serializing_if = "Option::is_none")]
335    pub source: Option<String>,
336    #[serde(
337        rename = "lastStatusChangeAt",
338        default,
339        skip_serializing_if = "Option::is_none"
340    )]
341    pub last_status_change_at: Option<String>,
342    #[serde(
343        rename = "lastStageChangeAt",
344        default,
345        skip_serializing_if = "Option::is_none"
346    )]
347    pub last_stage_change_at: Option<String>,
348    #[serde(
349        rename = "lastActionDate",
350        default,
351        skip_serializing_if = "Option::is_none"
352    )]
353    pub last_action_date: Option<String>,
354    #[serde(
355        rename = "indexVersion",
356        default,
357        skip_serializing_if = "Option::is_none"
358    )]
359    pub index_version: Option<String>,
360    #[serde(rename = "createdAt", default, skip_serializing_if = "Option::is_none")]
361    pub created_at: Option<String>,
362    #[serde(rename = "updatedAt", default, skip_serializing_if = "Option::is_none")]
363    pub updated_at: Option<String>,
364    #[serde(rename = "contactId", default, skip_serializing_if = "Option::is_none")]
365    pub contact_id: Option<String>,
366    #[serde(
367        rename = "locationId",
368        default,
369        skip_serializing_if = "Option::is_none"
370    )]
371    pub location_id: Option<String>,
372    #[serde(default, skip_serializing_if = "Option::is_none")]
373    pub contact: Option<SearchOpportunitiesContactResponseSchema>,
374    #[serde(default, skip_serializing_if = "Vec::is_empty")]
375    pub notes: Vec<Vec<serde_json::Value>>,
376    #[serde(default, skip_serializing_if = "Vec::is_empty")]
377    pub tasks: Vec<Vec<serde_json::Value>>,
378    #[serde(
379        rename = "calendarEvents",
380        default,
381        skip_serializing_if = "Vec::is_empty"
382    )]
383    pub calendar_events: Vec<Vec<serde_json::Value>>,
384    #[serde(
385        rename = "lostReasonId",
386        default,
387        skip_serializing_if = "Option::is_none"
388    )]
389    pub lost_reason_id: Option<String>,
390    #[serde(
391        rename = "customFields",
392        default,
393        skip_serializing_if = "Vec::is_empty"
394    )]
395    pub custom_fields: Vec<CustomFieldResponseSchema>,
396    #[serde(default, skip_serializing_if = "Vec::is_empty")]
397    pub followers: Vec<Vec<serde_json::Value>>,
398    #[serde(
399        rename = "externalObjectId",
400        default,
401        skip_serializing_if = "Option::is_none"
402    )]
403    pub external_object_id: Option<String>,
404}
405
406/// `SearchSuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
407#[derive(Debug, Clone, Default, Serialize, Deserialize)]
408pub struct SearchSuccessfulResponseDto {
409    #[serde(default, skip_serializing_if = "Vec::is_empty")]
410    pub opportunities: Vec<SearchOpportunitiesResponseSchema>,
411    #[serde(default, skip_serializing_if = "Option::is_none")]
412    pub meta: Option<SearchMetaResponseSchema>,
413    #[serde(default, skip_serializing_if = "Option::is_none")]
414    pub aggregations: Option<serde_json::Value>,
415}
416
417/// `UpdateOpportunityDto` from the GoHighLevel OpenAPI spec.
418#[derive(Debug, Clone, Default, Serialize, Deserialize)]
419pub struct UpdateOpportunityDto {
420    /// pipeline Id
421    #[serde(
422        rename = "pipelineId",
423        default,
424        skip_serializing_if = "Option::is_none"
425    )]
426    pub pipeline_id: Option<String>,
427    #[serde(default, skip_serializing_if = "Option::is_none")]
428    pub name: Option<String>,
429    #[serde(
430        rename = "pipelineStageId",
431        default,
432        skip_serializing_if = "Option::is_none"
433    )]
434    pub pipeline_stage_id: Option<String>,
435    /// Allowed values: `open`, `won`, `lost`, `abandoned`, `all`.
436    #[serde(default, skip_serializing_if = "Option::is_none")]
437    pub status: Option<String>,
438    #[serde(
439        rename = "monetaryValue",
440        default,
441        skip_serializing_if = "Option::is_none"
442    )]
443    pub monetary_value: Option<f64>,
444    #[serde(
445        rename = "assignedTo",
446        default,
447        skip_serializing_if = "Option::is_none"
448    )]
449    pub assigned_to: Option<String>,
450    /// Update custom fields to opportunities.
451    /// Multiple possible shapes in the spec; raw JSON.
452    #[serde(
453        rename = "customFields",
454        default,
455        skip_serializing_if = "Vec::is_empty"
456    )]
457    pub custom_fields: Vec<serde_json::Value>,
458}
459
460/// `UpdateStatusDto` from the GoHighLevel OpenAPI spec.
461#[derive(Debug, Clone, Default, Serialize, Deserialize)]
462pub struct UpdateStatusDto {
463    /// Allowed values: `open`, `won`, `lost`, `abandoned`, `all`.
464    /// Required by the API.
465    pub status: String,
466    /// lost reason Id
467    #[serde(
468        rename = "lostReasonId",
469        default,
470        skip_serializing_if = "Option::is_none"
471    )]
472    pub lost_reason_id: Option<String>,
473}
474
475/// `UpsertOpportunityDto` from the GoHighLevel OpenAPI spec.
476#[derive(Debug, Clone, Default, Serialize, Deserialize)]
477pub struct UpsertOpportunityDto {
478    /// opportunityId
479    #[serde(default, skip_serializing_if = "Option::is_none")]
480    pub id: Option<String>,
481    /// pipeline Id
482    /// Required by the API.
483    #[serde(rename = "pipelineId")]
484    pub pipeline_id: String,
485    /// locationId
486    /// Required by the API.
487    #[serde(rename = "locationId")]
488    pub location_id: String,
489    /// contactId
490    /// Required by the API.
491    #[serde(default, skip_serializing_if = "Vec::is_empty")]
492    pub followers: Vec<String>,
493    /// isRemoveAllFollowers
494    /// Required by the API.
495    #[serde(rename = "isRemoveAllFollowers")]
496    pub is_remove_all_followers: bool,
497    /// followers action type
498    /// Allowed values: `add`, `remove`.
499    /// Required by the API.
500    #[serde(rename = "followersActionType")]
501    pub followers_action_type: String,
502    /// name
503    #[serde(default, skip_serializing_if = "Option::is_none")]
504    pub name: Option<String>,
505    /// Allowed values: `open`, `won`, `lost`, `abandoned`, `all`.
506    #[serde(default, skip_serializing_if = "Option::is_none")]
507    pub status: Option<String>,
508    #[serde(
509        rename = "pipelineStageId",
510        default,
511        skip_serializing_if = "Option::is_none"
512    )]
513    pub pipeline_stage_id: Option<String>,
514    #[serde(
515        rename = "monetaryValue",
516        default,
517        skip_serializing_if = "Option::is_none"
518    )]
519    pub monetary_value: Option<serde_json::Value>,
520    #[serde(
521        rename = "assignedTo",
522        default,
523        skip_serializing_if = "Option::is_none"
524    )]
525    pub assigned_to: Option<String>,
526    /// lost reason Id
527    #[serde(
528        rename = "lostReasonId",
529        default,
530        skip_serializing_if = "Option::is_none"
531    )]
532    pub lost_reason_id: Option<String>,
533}
534
535/// `UpsertOpportunitySuccessfulResponseDto` from the GoHighLevel OpenAPI spec.
536#[derive(Debug, Clone, Default, Serialize, Deserialize)]
537pub struct UpsertOpportunitySuccessfulResponseDto {
538    /// Updated / New Opportunity
539    /// Required by the API.
540    pub opportunity: serde_json::Value,
541    /// Required by the API.
542    pub new: bool,
543}
544
545/// `customFieldsInputArraySchema` from the GoHighLevel OpenAPI spec.
546#[derive(Debug, Clone, Default, Serialize, Deserialize)]
547pub struct CustomFieldsInputArraySchema {
548    /// Required by the API.
549    pub id: String,
550    #[serde(default, skip_serializing_if = "Option::is_none")]
551    pub key: Option<String>,
552    #[serde(default, skip_serializing_if = "Vec::is_empty")]
553    pub field_value: Vec<String>,
554}
555
556/// `customFieldsInputObjectSchema` from the GoHighLevel OpenAPI spec.
557#[derive(Debug, Clone, Default, Serialize, Deserialize)]
558pub struct CustomFieldsInputObjectSchema {
559    /// Required by the API.
560    pub id: String,
561    #[serde(default, skip_serializing_if = "Option::is_none")]
562    pub key: Option<String>,
563    #[serde(default, skip_serializing_if = "Option::is_none")]
564    pub field_value: Option<serde_json::Value>,
565}
566
567/// `customFieldsInputStringSchema` from the GoHighLevel OpenAPI spec.
568#[derive(Debug, Clone, Default, Serialize, Deserialize)]
569pub struct CustomFieldsInputStringSchema {
570    /// Pass either `id` or `key` of custom field
571    #[serde(default, skip_serializing_if = "Option::is_none")]
572    pub id: Option<String>,
573    /// Pass either `id` or `key` of custom field
574    #[serde(default, skip_serializing_if = "Option::is_none")]
575    pub key: Option<String>,
576    #[serde(default, skip_serializing_if = "Option::is_none")]
577    pub field_value: Option<String>,
578}