Create one or more new feed connection

By passing in the FeedConnections array object in the body, you can create one or more new feed connections

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
 * Create one or more new feed connection
7
 * By passing in the FeedConnections array object in the body, you can create one or more new feed connections
8
 */
9
export async function main(
10
	auth: Xero,
11
	Xero_Tenant_Id: string,
12
	Idempotency_Key: string,
13
	body: {
14
		pagination?: {
15
			page?: number
16
			pageSize?: number
17
			pageCount?: number
18
			itemCount?: number
19
		}
20
		items?: {
21
			id?: string
22
			accountToken?: string
23
			accountNumber?: string
24
			accountName?: string
25
			accountId?: string
26
			accountType?: 'BANK' | 'CREDITCARD'
27
			currency?:
28
				| 'AED'
29
				| 'AFN'
30
				| 'ALL'
31
				| 'AMD'
32
				| 'ANG'
33
				| 'AOA'
34
				| 'ARS'
35
				| 'AUD'
36
				| 'AWG'
37
				| 'AZN'
38
				| 'BAM'
39
				| 'BBD'
40
				| 'BDT'
41
				| 'BGN'
42
				| 'BHD'
43
				| 'BIF'
44
				| 'BMD'
45
				| 'BND'
46
				| 'BOB'
47
				| 'BRL'
48
				| 'BSD'
49
				| 'BTN'
50
				| 'BWP'
51
				| 'BYN'
52
				| 'BZD'
53
				| 'CAD'
54
				| 'CDF'
55
				| 'CHF'
56
				| 'CLP'
57
				| 'CNY'
58
				| 'COP'
59
				| 'CRC'
60
				| 'CUC'
61
				| 'CUP'
62
				| 'CVE'
63
				| 'CZK'
64
				| 'DJF'
65
				| 'DKK'
66
				| 'DOP'
67
				| 'DZD'
68
				| 'EGP'
69
				| 'ERN'
70
				| 'ETB'
71
				| 'EUR'
72
				| 'FJD'
73
				| 'FKP'
74
				| 'GBP'
75
				| 'GEL'
76
				| 'GGP'
77
				| 'GHS'
78
				| 'GIP'
79
				| 'GMD'
80
				| 'GNF'
81
				| 'GTQ'
82
				| 'GYD'
83
				| 'HKD'
84
				| 'HNL'
85
				| 'HRK'
86
				| 'HTG'
87
				| 'HUF'
88
				| 'IDR'
89
				| 'ILS'
90
				| 'IMP'
91
				| 'INR'
92
				| 'IQD'
93
				| 'IRR'
94
				| 'ISK'
95
				| 'JEP'
96
				| 'JMD'
97
				| 'JOD'
98
				| 'JPY'
99
				| 'KES'
100
				| 'KGS'
101
				| 'KHR'
102
				| 'KMF'
103
				| 'KPW'
104
				| 'KRW'
105
				| 'KWD'
106
				| 'KYD'
107
				| 'KZT'
108
				| 'LAK'
109
				| 'LBP'
110
				| 'LKR'
111
				| 'LRD'
112
				| 'LSL'
113
				| 'LYD'
114
				| 'MAD'
115
				| 'MDL'
116
				| 'MGA'
117
				| 'MKD'
118
				| 'MMK'
119
				| 'MNT'
120
				| 'MOP'
121
				| 'MRU'
122
				| 'MUR'
123
				| 'MVR'
124
				| 'MWK'
125
				| 'MXN'
126
				| 'MYR'
127
				| 'MZN'
128
				| 'NAD'
129
				| 'NGN'
130
				| 'NIO'
131
				| 'NOK'
132
				| 'NPR'
133
				| 'NZD'
134
				| 'OMR'
135
				| 'PAB'
136
				| 'PEN'
137
				| 'PGK'
138
				| 'PHP'
139
				| 'PKR'
140
				| 'PLN'
141
				| 'PYG'
142
				| 'QAR'
143
				| 'RON'
144
				| 'RSD'
145
				| 'RUB'
146
				| 'RWF'
147
				| 'SAR'
148
				| 'SBD'
149
				| 'SCR'
150
				| 'SDG'
151
				| 'SEK'
152
				| 'SGD'
153
				| 'SHP'
154
				| 'SLL'
155
				| 'SOS'
156
				| 'SPL'
157
				| 'SRD'
158
				| 'STN'
159
				| 'SVC'
160
				| 'SYP'
161
				| 'SZL'
162
				| 'THB'
163
				| 'TJS'
164
				| 'TMT'
165
				| 'TND'
166
				| 'TOP'
167
				| 'TRY'
168
				| 'TTD'
169
				| 'TVD'
170
				| 'TWD'
171
				| 'TZS'
172
				| 'UAH'
173
				| 'UGX'
174
				| 'USD'
175
				| 'UYU'
176
				| 'UZS'
177
				| 'VEF'
178
				| 'VND'
179
				| 'VUV'
180
				| 'WST'
181
				| 'XAF'
182
				| 'XCD'
183
				| 'XDR'
184
				| 'XOF'
185
				| 'XPF'
186
				| 'YER'
187
				| 'ZAR'
188
				| 'ZMW'
189
				| 'ZMK'
190
				| 'ZWD'
191
			country?:
192
				| 'AD'
193
				| 'AE'
194
				| 'AF'
195
				| 'AG'
196
				| 'AI'
197
				| 'AL'
198
				| 'AM'
199
				| 'AN'
200
				| 'AO'
201
				| 'AQ'
202
				| 'AR'
203
				| 'AS'
204
				| 'AT'
205
				| 'AU'
206
				| 'AW'
207
				| 'AZ'
208
				| 'BA'
209
				| 'BB'
210
				| 'BD'
211
				| 'BE'
212
				| 'BF'
213
				| 'BG'
214
				| 'BH'
215
				| 'BI'
216
				| 'BJ'
217
				| 'BL'
218
				| 'BM'
219
				| 'BN'
220
				| 'BO'
221
				| 'BR'
222
				| 'BS'
223
				| 'BT'
224
				| 'BW'
225
				| 'BY'
226
				| 'BZ'
227
				| 'CA'
228
				| 'CC'
229
				| 'CD'
230
				| 'CF'
231
				| 'CG'
232
				| 'CH'
233
				| 'CI'
234
				| 'CK'
235
				| 'CL'
236
				| 'CM'
237
				| 'CN'
238
				| 'CO'
239
				| 'CR'
240
				| 'CU'
241
				| 'CV'
242
				| 'CW'
243
				| 'CX'
244
				| 'CY'
245
				| 'CZ'
246
				| 'DE'
247
				| 'DJ'
248
				| 'DK'
249
				| 'DM'
250
				| 'DO'
251
				| 'DZ'
252
				| 'EC'
253
				| 'EE'
254
				| 'EG'
255
				| 'EH'
256
				| 'ER'
257
				| 'ES'
258
				| 'ET'
259
				| 'FI'
260
				| 'FJ'
261
				| 'FK'
262
				| 'FM'
263
				| 'FO'
264
				| 'FR'
265
				| 'GA'
266
				| 'GB'
267
				| 'GD'
268
				| 'GE'
269
				| 'GG'
270
				| 'GH'
271
				| 'GI'
272
				| 'GL'
273
				| 'GM'
274
				| 'GN'
275
				| 'GQ'
276
				| 'GR'
277
				| 'GT'
278
				| 'GU'
279
				| 'GW'
280
				| 'GY'
281
				| 'HK'
282
				| 'HN'
283
				| 'HR'
284
				| 'HT'
285
				| 'HU'
286
				| 'ID'
287
				| 'IE'
288
				| 'IL'
289
				| 'IM'
290
				| 'IN'
291
				| 'IO'
292
				| 'IQ'
293
				| 'IR'
294
				| 'IS'
295
				| 'IT'
296
				| 'JE'
297
				| 'JM'
298
				| 'JO'
299
				| 'JP'
300
				| 'KE'
301
				| 'KG'
302
				| 'KH'
303
				| 'KI'
304
				| 'KM'
305
				| 'KN'
306
				| 'KP'
307
				| 'KR'
308
				| 'KW'
309
				| 'KY'
310
				| 'KZ'
311
				| 'LA'
312
				| 'LB'
313
				| 'LC'
314
				| 'LI'
315
				| 'LK'
316
				| 'LR'
317
				| 'LS'
318
				| 'LT'
319
				| 'LU'
320
				| 'LV'
321
				| 'LY'
322
				| 'MA'
323
				| 'MC'
324
				| 'MD'
325
				| 'ME'
326
				| 'MF'
327
				| 'MG'
328
				| 'MH'
329
				| 'MK'
330
				| 'ML'
331
				| 'MM'
332
				| 'MN'
333
				| 'MO'
334
				| 'MP'
335
				| 'MR'
336
				| 'MS'
337
				| 'MT'
338
				| 'MU'
339
				| 'MV'
340
				| 'MW'
341
				| 'MX'
342
				| 'MY'
343
				| 'MZ'
344
				| 'NA'
345
				| 'NC'
346
				| 'NE'
347
				| 'NG'
348
				| 'NI'
349
				| 'NL'
350
				| 'NO'
351
				| 'NP'
352
				| 'NR'
353
				| 'NU'
354
				| 'NZ'
355
				| 'OM'
356
				| 'PA'
357
				| 'PE'
358
				| 'PF'
359
				| 'PG'
360
				| 'PH'
361
				| 'PK'
362
				| 'PL'
363
				| 'PM'
364
				| 'PN'
365
				| 'PR'
366
				| 'PS'
367
				| 'PT'
368
				| 'PW'
369
				| 'PY'
370
				| 'QA'
371
				| 'RE'
372
				| 'RO'
373
				| 'RS'
374
				| 'RU'
375
				| 'RW'
376
				| 'SA'
377
				| 'SB'
378
				| 'SC'
379
				| 'SD'
380
				| 'SE'
381
				| 'SG'
382
				| 'SH'
383
				| 'SI'
384
				| 'SJ'
385
				| 'SK'
386
				| 'SL'
387
				| 'SM'
388
				| 'SN'
389
				| 'SO'
390
				| 'SR'
391
				| 'SS'
392
				| 'ST'
393
				| 'SV'
394
				| 'SX'
395
				| 'SY'
396
				| 'SZ'
397
				| 'TC'
398
				| 'TD'
399
				| 'TG'
400
				| 'TH'
401
				| 'TJ'
402
				| 'TK'
403
				| 'TL'
404
				| 'TM'
405
				| 'TN'
406
				| 'TO'
407
				| 'TR'
408
				| 'TT'
409
				| 'TV'
410
				| 'TW'
411
				| 'TZ'
412
				| 'UA'
413
				| 'UG'
414
				| 'US'
415
				| 'UY'
416
				| 'UZ'
417
				| 'VA'
418
				| 'VC'
419
				| 'VE'
420
				| 'VG'
421
				| 'VI'
422
				| 'VN'
423
				| 'VU'
424
				| 'WF'
425
				| 'WS'
426
				| 'XK'
427
				| 'YE'
428
				| 'YT'
429
				| 'ZA'
430
				| 'ZM'
431
				| 'ZW'
432
			status?: 'PENDING' | 'REJECTED'
433
			error?: {
434
				title?: string
435
				status?: number
436
				detail?: string
437
				type?:
438
					| 'invalid-request'
439
					| 'invalid-application'
440
					| 'invalid-feed-connection'
441
					| 'duplicate-statement'
442
					| 'invalid-end-balance'
443
					| 'invalid-start-and-end-date'
444
					| 'invalid-start-date'
445
					| 'internal-error'
446
					| 'feed-already-connected-in-current-organisation'
447
					| 'invalid-end-date'
448
					| 'statement-not-found'
449
					| 'feed-connected-in-different-organisation'
450
					| 'feed-already-connected-in-different-organisation'
451
					| 'bank-feed-not-found'
452
					| 'invalid-country-specified'
453
					| 'invalid-organisation-bank-feeds'
454
					| 'invalid-organisation-multi-currency'
455
					| 'invalid-feed-connection-for-organisation'
456
					| 'invalid-user-role'
457
					| 'account-not-valid'
458
					| 'feed-not-found-or-already-deleted'
459
			}
460
		}[]
461
	}
462
) {
463
	const url = new URL(`https://api.xero.com/bankfeeds.xro/1.0/FeedConnections`)
464

465
	const response = await fetch(url, {
466
		method: 'POST',
467
		headers: {
468
			Accept: 'application/json',
469
			'Xero-Tenant-Id': Xero_Tenant_Id,
470
			'Idempotency-Key': Idempotency_Key,
471
			'Content-Type': 'application/json',
472
			Authorization: 'Bearer ' + auth.token
473
		},
474
		body: JSON.stringify(body)
475
	})
476
	if (!response.ok) {
477
		const text = await response.text()
478
		throw new Error(`${response.status} ${text}`)
479
	}
480
	return await response.json()
481
}
482