Skip to main content

highlevel_api/apis/contacts/
types.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize, Default)]
4#[serde(rename_all = "camelCase")]
5pub struct SearchContactsParams {
6    pub location_id: String,
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub query: Option<String>,
9    #[serde(skip_serializing_if = "Option::is_none")]
10    pub limit: Option<u32>,
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub skip: Option<u32>,
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub email: Option<String>,
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub phone: Option<String>,
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub start_after: Option<String>,
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub start_after_id: Option<String>,
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize)]
24#[serde(rename_all = "camelCase")]
25pub struct CustomFieldValue {
26    pub id: String,
27    pub value: serde_json::Value,
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize)]
31#[serde(rename_all = "camelCase")]
32pub struct Contact {
33    pub id: String,
34    pub location_id: String,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub first_name: Option<String>,
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub last_name: Option<String>,
39    #[serde(skip_serializing_if = "Option::is_none")]
40    pub full_name: Option<String>,
41    #[serde(skip_serializing_if = "Option::is_none")]
42    pub email: Option<String>,
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub phone: Option<String>,
45    #[serde(skip_serializing_if = "Option::is_none")]
46    pub address1: Option<String>,
47    #[serde(skip_serializing_if = "Option::is_none")]
48    pub city: Option<String>,
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub state: Option<String>,
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub postal_code: Option<String>,
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub country: Option<String>,
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub company_name: Option<String>,
57    #[serde(skip_serializing_if = "Option::is_none")]
58    pub website: Option<String>,
59    #[serde(default)]
60    pub tags: Vec<String>,
61    #[serde(skip_serializing_if = "Option::is_none")]
62    pub date_of_birth: Option<String>,
63    #[serde(skip_serializing_if = "Option::is_none")]
64    pub date_added: Option<String>,
65    #[serde(skip_serializing_if = "Option::is_none")]
66    pub date_updated: Option<String>,
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub assigned_to: Option<String>,
69    #[serde(skip_serializing_if = "Option::is_none")]
70    pub source: Option<String>,
71    #[serde(default)]
72    pub custom_fields: Vec<CustomFieldValue>,
73    #[serde(skip_serializing_if = "Option::is_none")]
74    pub business_id: Option<String>,
75    #[serde(default)]
76    pub followers: Vec<String>,
77    #[serde(skip_serializing_if = "Option::is_none")]
78    pub type_: Option<String>,
79}
80
81#[derive(Debug, Clone, Serialize, Deserialize)]
82#[serde(rename_all = "camelCase")]
83pub struct SearchContactsResponse {
84    pub contacts: Vec<Contact>,
85    #[serde(skip_serializing_if = "Option::is_none")]
86    pub total: Option<u64>,
87    #[serde(skip_serializing_if = "Option::is_none")]
88    pub count: Option<u64>,
89    #[serde(skip_serializing_if = "Option::is_none")]
90    pub meta: Option<ContactsMeta>,
91}
92
93#[derive(Debug, Clone, Serialize, Deserialize)]
94#[serde(rename_all = "camelCase")]
95pub struct ContactsMeta {
96    pub total: Option<u64>,
97    pub current_page: Option<u32>,
98    pub next_page_url: Option<String>,
99    pub prev_page_url: Option<String>,
100    pub start_after: Option<String>,
101    pub start_after_id: Option<String>,
102}
103
104#[derive(Debug, Clone, Serialize, Deserialize)]
105pub struct GetContactResponse {
106    pub contact: Contact,
107}
108
109#[derive(Debug, Clone, Serialize, Deserialize, Default)]
110#[serde(rename_all = "camelCase")]
111pub struct CreateContactParams {
112    pub location_id: String,
113    #[serde(skip_serializing_if = "Option::is_none")]
114    pub first_name: Option<String>,
115    #[serde(skip_serializing_if = "Option::is_none")]
116    pub last_name: Option<String>,
117    #[serde(skip_serializing_if = "Option::is_none")]
118    pub email: Option<String>,
119    #[serde(skip_serializing_if = "Option::is_none")]
120    pub phone: Option<String>,
121    #[serde(skip_serializing_if = "Option::is_none")]
122    pub address1: Option<String>,
123    #[serde(skip_serializing_if = "Option::is_none")]
124    pub city: Option<String>,
125    #[serde(skip_serializing_if = "Option::is_none")]
126    pub state: Option<String>,
127    #[serde(skip_serializing_if = "Option::is_none")]
128    pub postal_code: Option<String>,
129    #[serde(skip_serializing_if = "Option::is_none")]
130    pub country: Option<String>,
131    #[serde(skip_serializing_if = "Option::is_none")]
132    pub company_name: Option<String>,
133    #[serde(skip_serializing_if = "Option::is_none")]
134    pub website: Option<String>,
135    #[serde(skip_serializing_if = "Option::is_none")]
136    pub tags: Option<Vec<String>>,
137    #[serde(skip_serializing_if = "Option::is_none")]
138    pub source: Option<String>,
139    #[serde(skip_serializing_if = "Option::is_none")]
140    pub assigned_to: Option<String>,
141    #[serde(skip_serializing_if = "Option::is_none")]
142    pub date_of_birth: Option<String>,
143    #[serde(skip_serializing_if = "Option::is_none")]
144    pub custom_fields: Option<Vec<CustomFieldValue>>,
145    #[serde(skip_serializing_if = "Option::is_none")]
146    pub business_id: Option<String>,
147}
148
149#[derive(Debug, Clone, Serialize, Deserialize, Default)]
150#[serde(rename_all = "camelCase")]
151pub struct UpdateContactParams {
152    #[serde(skip_serializing_if = "Option::is_none")]
153    pub first_name: Option<String>,
154    #[serde(skip_serializing_if = "Option::is_none")]
155    pub last_name: Option<String>,
156    #[serde(skip_serializing_if = "Option::is_none")]
157    pub email: Option<String>,
158    #[serde(skip_serializing_if = "Option::is_none")]
159    pub phone: Option<String>,
160    #[serde(skip_serializing_if = "Option::is_none")]
161    pub address1: Option<String>,
162    #[serde(skip_serializing_if = "Option::is_none")]
163    pub city: Option<String>,
164    #[serde(skip_serializing_if = "Option::is_none")]
165    pub state: Option<String>,
166    #[serde(skip_serializing_if = "Option::is_none")]
167    pub postal_code: Option<String>,
168    #[serde(skip_serializing_if = "Option::is_none")]
169    pub country: Option<String>,
170    #[serde(skip_serializing_if = "Option::is_none")]
171    pub company_name: Option<String>,
172    #[serde(skip_serializing_if = "Option::is_none")]
173    pub website: Option<String>,
174    #[serde(skip_serializing_if = "Option::is_none")]
175    pub tags: Option<Vec<String>>,
176    #[serde(skip_serializing_if = "Option::is_none")]
177    pub source: Option<String>,
178    #[serde(skip_serializing_if = "Option::is_none")]
179    pub assigned_to: Option<String>,
180    #[serde(skip_serializing_if = "Option::is_none")]
181    pub date_of_birth: Option<String>,
182    #[serde(skip_serializing_if = "Option::is_none")]
183    pub custom_fields: Option<Vec<CustomFieldValue>>,
184}
185
186#[derive(Debug, Clone, Serialize, Deserialize)]
187pub struct UpsertContactResponse {
188    pub contact: Contact,
189    pub new: bool,
190    #[serde(rename = "traceId", skip_serializing_if = "Option::is_none")]
191    pub trace_id: Option<String>,
192}
193
194#[derive(Debug, Clone, Serialize, Deserialize)]
195pub struct DeleteContactResponse {
196    pub succeded: bool,
197}
198
199// ── Tags ─────────────────────────────────────────────────────────────────────
200
201#[derive(Debug, Clone, Serialize, Deserialize)]
202pub struct AddTagsParams {
203    pub tags: Vec<String>,
204}
205
206#[derive(Debug, Clone, Serialize, Deserialize)]
207pub struct TagsResponse {
208    pub tags: Vec<String>,
209}
210
211// ── Notes ────────────────────────────────────────────────────────────────────
212
213#[derive(Debug, Clone, Serialize, Deserialize)]
214#[serde(rename_all = "camelCase")]
215pub struct Note {
216    pub id: String,
217    pub body: String,
218    pub contact_id: String,
219    #[serde(skip_serializing_if = "Option::is_none")]
220    pub user_id: Option<String>,
221    #[serde(skip_serializing_if = "Option::is_none")]
222    pub date_added: Option<String>,
223}
224
225#[derive(Debug, Clone, Serialize, Deserialize)]
226pub struct NotesResponse {
227    pub notes: Vec<Note>,
228}
229
230#[derive(Debug, Clone, Serialize, Deserialize)]
231pub struct NoteResponse {
232    pub note: Note,
233}
234
235#[derive(Debug, Clone, Serialize, Deserialize, Default)]
236#[serde(rename_all = "camelCase")]
237pub struct CreateNoteParams {
238    pub body: String,
239    #[serde(skip_serializing_if = "Option::is_none")]
240    pub user_id: Option<String>,
241}
242
243// ── Tasks ────────────────────────────────────────────────────────────────────
244
245#[derive(Debug, Clone, Serialize, Deserialize)]
246#[serde(rename_all = "camelCase")]
247pub struct Task {
248    pub id: String,
249    pub title: String,
250    #[serde(skip_serializing_if = "Option::is_none")]
251    pub body: Option<String>,
252    pub contact_id: String,
253    #[serde(skip_serializing_if = "Option::is_none")]
254    pub assigned_to: Option<String>,
255    #[serde(skip_serializing_if = "Option::is_none")]
256    pub due_date: Option<String>,
257    #[serde(skip_serializing_if = "Option::is_none")]
258    pub completed: Option<bool>,
259}
260
261#[derive(Debug, Clone, Serialize, Deserialize)]
262pub struct TasksResponse {
263    pub tasks: Vec<Task>,
264}
265
266#[derive(Debug, Clone, Serialize, Deserialize)]
267pub struct TaskResponse {
268    pub task: Task,
269}
270
271#[derive(Debug, Clone, Serialize, Deserialize, Default)]
272#[serde(rename_all = "camelCase")]
273pub struct CreateTaskParams {
274    pub title: String,
275    #[serde(skip_serializing_if = "Option::is_none")]
276    pub body: Option<String>,
277    #[serde(skip_serializing_if = "Option::is_none")]
278    pub assigned_to: Option<String>,
279    #[serde(skip_serializing_if = "Option::is_none")]
280    pub due_date: Option<String>,
281    #[serde(skip_serializing_if = "Option::is_none")]
282    pub completed: Option<bool>,
283}