Creates a contact group

Script xero Verified

by hugo697 ยท 12/20/2024

The script

Submitted by hugo697 Bun
Verified 515 days ago
1
//native
2
type Xero = {
3
	token: string
4
}
5
/**
6
 * Creates a contact group
7
 *
8
 */
9
export async function main(
10
	auth: Xero,
11
	xero_tenant_id: string,
12
	Idempotency_Key: string,
13
	body: {
14
		ContactGroups?: {
15
			Name?: string
16
			Status?: 'ACTIVE' | 'DELETED'
17
			ContactGroupID?: string
18
			Contacts?: {
19
				ContactID?: string
20
				MergedToContactID?: string
21
				ContactNumber?: string
22
				AccountNumber?: string
23
				ContactStatus?: 'ACTIVE' | 'ARCHIVED' | 'GDPRREQUEST'
24
				Name?: string
25
				FirstName?: string
26
				LastName?: string
27
				CompanyNumber?: string
28
				EmailAddress?: string
29
				ContactPersons?: {
30
					FirstName?: string
31
					LastName?: string
32
					EmailAddress?: string
33
					IncludeInEmails?: false | true
34
				}[]
35
				BankAccountDetails?: string
36
				TaxNumber?: string
37
				AccountsReceivableTaxType?: string
38
				AccountsPayableTaxType?: string
39
				Addresses?: {
40
					AddressType?: 'POBOX' | 'STREET'
41
					AddressLine1?: string
42
					AddressLine2?: string
43
					AddressLine3?: string
44
					AddressLine4?: string
45
					City?: string
46
					Region?: string
47
					PostalCode?: string
48
					Country?: string
49
					AttentionTo?: string
50
				}[]
51
				Phones?: {
52
					PhoneType?: 'DEFAULT' | 'DDI' | 'MOBILE' | 'FAX' | 'OFFICE'
53
					PhoneNumber?: string
54
					PhoneAreaCode?: string
55
					PhoneCountryCode?: string
56
				}[]
57
				IsSupplier?: false | true
58
				IsCustomer?: false | true
59
				SalesDefaultLineAmountType?: 'INCLUSIVE' | 'EXCLUSIVE' | 'NONE'
60
				PurchasesDefaultLineAmountType?: 'INCLUSIVE' | 'EXCLUSIVE' | 'NONE'
61
				DefaultCurrency?:
62
					| 'AED'
63
					| 'AFN'
64
					| 'ALL'
65
					| 'AMD'
66
					| 'ANG'
67
					| 'AOA'
68
					| 'ARS'
69
					| 'AUD'
70
					| 'AWG'
71
					| 'AZN'
72
					| 'BAM'
73
					| 'BBD'
74
					| 'BDT'
75
					| 'BGN'
76
					| 'BHD'
77
					| 'BIF'
78
					| 'BMD'
79
					| 'BND'
80
					| 'BOB'
81
					| 'BRL'
82
					| 'BSD'
83
					| 'BTN'
84
					| 'BWP'
85
					| 'BYN'
86
					| 'BYR'
87
					| 'BZD'
88
					| 'CAD'
89
					| 'CDF'
90
					| 'CHF'
91
					| 'CLF'
92
					| 'CLP'
93
					| 'CNY'
94
					| 'COP'
95
					| 'CRC'
96
					| 'CUC'
97
					| 'CUP'
98
					| 'CVE'
99
					| 'CZK'
100
					| 'DJF'
101
					| 'DKK'
102
					| 'DOP'
103
					| 'DZD'
104
					| 'EEK'
105
					| 'EGP'
106
					| 'ERN'
107
					| 'ETB'
108
					| 'EUR'
109
					| 'FJD'
110
					| 'FKP'
111
					| 'GBP'
112
					| 'GEL'
113
					| 'GHS'
114
					| 'GIP'
115
					| 'GMD'
116
					| 'GNF'
117
					| 'GTQ'
118
					| 'GYD'
119
					| 'HKD'
120
					| 'HNL'
121
					| 'HRK'
122
					| 'HTG'
123
					| 'HUF'
124
					| 'IDR'
125
					| 'ILS'
126
					| 'INR'
127
					| 'IQD'
128
					| 'IRR'
129
					| 'ISK'
130
					| 'JMD'
131
					| 'JOD'
132
					| 'JPY'
133
					| 'KES'
134
					| 'KGS'
135
					| 'KHR'
136
					| 'KMF'
137
					| 'KPW'
138
					| 'KRW'
139
					| 'KWD'
140
					| 'KYD'
141
					| 'KZT'
142
					| 'LAK'
143
					| 'LBP'
144
					| 'LKR'
145
					| 'LRD'
146
					| 'LSL'
147
					| 'LTL'
148
					| 'LVL'
149
					| 'LYD'
150
					| 'MAD'
151
					| 'MDL'
152
					| 'MGA'
153
					| 'MKD'
154
					| 'MMK'
155
					| 'MNT'
156
					| 'MOP'
157
					| 'MRO'
158
					| 'MRU'
159
					| 'MUR'
160
					| 'MVR'
161
					| 'MWK'
162
					| 'MXN'
163
					| 'MXV'
164
					| 'MYR'
165
					| 'MZN'
166
					| 'NAD'
167
					| 'NGN'
168
					| 'NIO'
169
					| 'NOK'
170
					| 'NPR'
171
					| 'NZD'
172
					| 'OMR'
173
					| 'PAB'
174
					| 'PEN'
175
					| 'PGK'
176
					| 'PHP'
177
					| 'PKR'
178
					| 'PLN'
179
					| 'PYG'
180
					| 'QAR'
181
					| 'RON'
182
					| 'RSD'
183
					| 'RUB'
184
					| 'RWF'
185
					| 'SAR'
186
					| 'SBD'
187
					| 'SCR'
188
					| 'SDG'
189
					| 'SEK'
190
					| 'SGD'
191
					| 'SHP'
192
					| 'SKK'
193
					| 'SLE'
194
					| 'SLL'
195
					| 'SOS'
196
					| 'SRD'
197
					| 'STD'
198
					| 'STN'
199
					| 'SVC'
200
					| 'SYP'
201
					| 'SZL'
202
					| 'THB'
203
					| 'TJS'
204
					| 'TMT'
205
					| 'TND'
206
					| 'TOP'
207
					| 'TRY'
208
					| 'TTD'
209
					| 'TWD'
210
					| 'TZS'
211
					| 'UAH'
212
					| 'UGX'
213
					| 'USD'
214
					| 'UYU'
215
					| 'UZS'
216
					| 'VEF'
217
					| 'VES'
218
					| 'VND'
219
					| 'VUV'
220
					| 'WST'
221
					| 'XAF'
222
					| 'XCD'
223
					| 'XOF'
224
					| 'XPF'
225
					| 'YER'
226
					| 'ZAR'
227
					| 'ZMW'
228
					| 'ZMK'
229
					| 'ZWD'
230
				XeroNetworkKey?: string
231
				SalesDefaultAccountCode?: string
232
				PurchasesDefaultAccountCode?: string
233
				SalesTrackingCategories?: {
234
					TrackingCategoryName?: string
235
					TrackingOptionName?: string
236
				}[]
237
				PurchasesTrackingCategories?: {
238
					TrackingCategoryName?: string
239
					TrackingOptionName?: string
240
				}[]
241
				TrackingCategoryName?: string
242
				TrackingCategoryOption?: string
243
				PaymentTerms?: {
244
					Bills?: {
245
						Day?: number
246
						Type?:
247
							| 'DAYSAFTERBILLDATE'
248
							| 'DAYSAFTERBILLMONTH'
249
							| 'OFCURRENTMONTH'
250
							| 'OFFOLLOWINGMONTH'
251
					}
252
					Sales?: {
253
						Day?: number
254
						Type?:
255
							| 'DAYSAFTERBILLDATE'
256
							| 'DAYSAFTERBILLMONTH'
257
							| 'OFCURRENTMONTH'
258
							| 'OFFOLLOWINGMONTH'
259
					}
260
				}
261
				UpdatedDateUTC?: string
262
				ContactGroups?: {}[]
263
				Website?: string
264
				BrandingTheme?: {
265
					BrandingThemeID?: string
266
					Name?: string
267
					LogoUrl?: string
268
					Type?: 'INVOICE'
269
					SortOrder?: number
270
					CreatedDateUTC?: string
271
				}
272
				BatchPayments?: {
273
					BankAccountNumber?: string
274
					BankAccountName?: string
275
					Details?: string
276
					Code?: string
277
					Reference?: string
278
				}
279
				Discount?: number
280
				Balances?: {
281
					AccountsReceivable?: { Outstanding?: number; Overdue?: number }
282
					AccountsPayable?: { Outstanding?: number; Overdue?: number }
283
				}
284
				Attachments?: {
285
					AttachmentID?: string
286
					FileName?: string
287
					Url?: string
288
					MimeType?: string
289
					ContentLength?: number
290
					IncludeOnline?: false | true
291
				}[]
292
				HasAttachments?: never
293
				ValidationErrors?: { Message?: string }[]
294
				HasValidationErrors?: never
295
				StatusAttributeString?: string
296
			}[]
297
		}[]
298
	}
299
) {
300
	const url = new URL(`https://api.xero.com/api.xro/2.0/ContactGroups`)
301

302
	const response = await fetch(url, {
303
		method: 'PUT',
304
		headers: {
305
			Accept: 'application/json',
306
			'xero-tenant-id': xero_tenant_id,
307
			'Idempotency-Key': Idempotency_Key,
308
			'Content-Type': 'application/json',
309
			Authorization: 'Bearer ' + auth.token
310
		},
311
		body: JSON.stringify(body)
312
	})
313
	if (!response.ok) {
314
		const text = await response.text()
315
		throw new Error(`${response.status} ${text}`)
316
	}
317
	return await response.json()
318
}
319