Creates a bank transfer

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 bank transfer
7
 *
8
 */
9
export async function main(
10
	auth: Xero,
11
	xero_tenant_id: string,
12
	Idempotency_Key: string,
13
	body: {
14
		BankTransfers?: {
15
			FromBankAccount: {
16
				Code?: string
17
				Name?: string
18
				AccountID?: string
19
				Type?:
20
					| 'BANK'
21
					| 'CURRENT'
22
					| 'CURRLIAB'
23
					| 'DEPRECIATN'
24
					| 'DIRECTCOSTS'
25
					| 'EQUITY'
26
					| 'EXPENSE'
27
					| 'FIXED'
28
					| 'INVENTORY'
29
					| 'LIABILITY'
30
					| 'NONCURRENT'
31
					| 'OTHERINCOME'
32
					| 'OVERHEADS'
33
					| 'PREPAYMENT'
34
					| 'REVENUE'
35
					| 'SALES'
36
					| 'TERMLIAB'
37
					| 'PAYG'
38
				BankAccountNumber?: string
39
				Status?: 'ACTIVE' | 'ARCHIVED' | 'DELETED'
40
				Description?: string
41
				BankAccountType?: '' | 'BANK' | 'CREDITCARD' | 'PAYPAL' | 'NONE'
42
				CurrencyCode?:
43
					| 'AED'
44
					| 'AFN'
45
					| 'ALL'
46
					| 'AMD'
47
					| 'ANG'
48
					| 'AOA'
49
					| 'ARS'
50
					| 'AUD'
51
					| 'AWG'
52
					| 'AZN'
53
					| 'BAM'
54
					| 'BBD'
55
					| 'BDT'
56
					| 'BGN'
57
					| 'BHD'
58
					| 'BIF'
59
					| 'BMD'
60
					| 'BND'
61
					| 'BOB'
62
					| 'BRL'
63
					| 'BSD'
64
					| 'BTN'
65
					| 'BWP'
66
					| 'BYN'
67
					| 'BYR'
68
					| 'BZD'
69
					| 'CAD'
70
					| 'CDF'
71
					| 'CHF'
72
					| 'CLF'
73
					| 'CLP'
74
					| 'CNY'
75
					| 'COP'
76
					| 'CRC'
77
					| 'CUC'
78
					| 'CUP'
79
					| 'CVE'
80
					| 'CZK'
81
					| 'DJF'
82
					| 'DKK'
83
					| 'DOP'
84
					| 'DZD'
85
					| 'EEK'
86
					| 'EGP'
87
					| 'ERN'
88
					| 'ETB'
89
					| 'EUR'
90
					| 'FJD'
91
					| 'FKP'
92
					| 'GBP'
93
					| 'GEL'
94
					| 'GHS'
95
					| 'GIP'
96
					| 'GMD'
97
					| 'GNF'
98
					| 'GTQ'
99
					| 'GYD'
100
					| 'HKD'
101
					| 'HNL'
102
					| 'HRK'
103
					| 'HTG'
104
					| 'HUF'
105
					| 'IDR'
106
					| 'ILS'
107
					| 'INR'
108
					| 'IQD'
109
					| 'IRR'
110
					| 'ISK'
111
					| 'JMD'
112
					| 'JOD'
113
					| 'JPY'
114
					| 'KES'
115
					| 'KGS'
116
					| 'KHR'
117
					| 'KMF'
118
					| 'KPW'
119
					| 'KRW'
120
					| 'KWD'
121
					| 'KYD'
122
					| 'KZT'
123
					| 'LAK'
124
					| 'LBP'
125
					| 'LKR'
126
					| 'LRD'
127
					| 'LSL'
128
					| 'LTL'
129
					| 'LVL'
130
					| 'LYD'
131
					| 'MAD'
132
					| 'MDL'
133
					| 'MGA'
134
					| 'MKD'
135
					| 'MMK'
136
					| 'MNT'
137
					| 'MOP'
138
					| 'MRO'
139
					| 'MRU'
140
					| 'MUR'
141
					| 'MVR'
142
					| 'MWK'
143
					| 'MXN'
144
					| 'MXV'
145
					| 'MYR'
146
					| 'MZN'
147
					| 'NAD'
148
					| 'NGN'
149
					| 'NIO'
150
					| 'NOK'
151
					| 'NPR'
152
					| 'NZD'
153
					| 'OMR'
154
					| 'PAB'
155
					| 'PEN'
156
					| 'PGK'
157
					| 'PHP'
158
					| 'PKR'
159
					| 'PLN'
160
					| 'PYG'
161
					| 'QAR'
162
					| 'RON'
163
					| 'RSD'
164
					| 'RUB'
165
					| 'RWF'
166
					| 'SAR'
167
					| 'SBD'
168
					| 'SCR'
169
					| 'SDG'
170
					| 'SEK'
171
					| 'SGD'
172
					| 'SHP'
173
					| 'SKK'
174
					| 'SLE'
175
					| 'SLL'
176
					| 'SOS'
177
					| 'SRD'
178
					| 'STD'
179
					| 'STN'
180
					| 'SVC'
181
					| 'SYP'
182
					| 'SZL'
183
					| 'THB'
184
					| 'TJS'
185
					| 'TMT'
186
					| 'TND'
187
					| 'TOP'
188
					| 'TRY'
189
					| 'TTD'
190
					| 'TWD'
191
					| 'TZS'
192
					| 'UAH'
193
					| 'UGX'
194
					| 'USD'
195
					| 'UYU'
196
					| 'UZS'
197
					| 'VEF'
198
					| 'VES'
199
					| 'VND'
200
					| 'VUV'
201
					| 'WST'
202
					| 'XAF'
203
					| 'XCD'
204
					| 'XOF'
205
					| 'XPF'
206
					| 'YER'
207
					| 'ZAR'
208
					| 'ZMW'
209
					| 'ZMK'
210
					| 'ZWD'
211
				TaxType?: string
212
				EnablePaymentsToAccount?: false | true
213
				ShowInExpenseClaims?: false | true
214
				Class?: 'EQUITY' | 'EXPENSE' | 'LIABILITY' | 'REVENUE' | 'ASSET'
215
				SystemAccount?:
216
					| ''
217
					| 'DEBTORS'
218
					| 'CREDITORS'
219
					| 'BANKCURRENCYGAIN'
220
					| 'GST'
221
					| 'GSTONIMPORTS'
222
					| 'HISTORICAL'
223
					| 'REALISEDCURRENCYGAIN'
224
					| 'RETAINEDEARNINGS'
225
					| 'ROUNDING'
226
					| 'TRACKINGTRANSFERS'
227
					| 'UNPAIDEXPCLM'
228
					| 'UNREALISEDCURRENCYGAIN'
229
					| 'WAGEPAYABLES'
230
					| 'CISASSETS'
231
					| 'CISASSET'
232
					| 'CISLABOUR'
233
					| 'CISLABOUREXPENSE'
234
					| 'CISLABOURINCOME'
235
					| 'CISLIABILITY'
236
					| 'CISMATERIALS'
237
				ReportingCode?: string
238
				ReportingCodeName?: string
239
				HasAttachments?: never
240
				UpdatedDateUTC?: string
241
				AddToWatchlist?: false | true
242
				ValidationErrors?: { Message?: string }[]
243
			}
244
			ToBankAccount: {
245
				Code?: string
246
				Name?: string
247
				AccountID?: string
248
				Type?:
249
					| 'BANK'
250
					| 'CURRENT'
251
					| 'CURRLIAB'
252
					| 'DEPRECIATN'
253
					| 'DIRECTCOSTS'
254
					| 'EQUITY'
255
					| 'EXPENSE'
256
					| 'FIXED'
257
					| 'INVENTORY'
258
					| 'LIABILITY'
259
					| 'NONCURRENT'
260
					| 'OTHERINCOME'
261
					| 'OVERHEADS'
262
					| 'PREPAYMENT'
263
					| 'REVENUE'
264
					| 'SALES'
265
					| 'TERMLIAB'
266
					| 'PAYG'
267
				BankAccountNumber?: string
268
				Status?: 'ACTIVE' | 'ARCHIVED' | 'DELETED'
269
				Description?: string
270
				BankAccountType?: '' | 'BANK' | 'CREDITCARD' | 'PAYPAL' | 'NONE'
271
				CurrencyCode?:
272
					| 'AED'
273
					| 'AFN'
274
					| 'ALL'
275
					| 'AMD'
276
					| 'ANG'
277
					| 'AOA'
278
					| 'ARS'
279
					| 'AUD'
280
					| 'AWG'
281
					| 'AZN'
282
					| 'BAM'
283
					| 'BBD'
284
					| 'BDT'
285
					| 'BGN'
286
					| 'BHD'
287
					| 'BIF'
288
					| 'BMD'
289
					| 'BND'
290
					| 'BOB'
291
					| 'BRL'
292
					| 'BSD'
293
					| 'BTN'
294
					| 'BWP'
295
					| 'BYN'
296
					| 'BYR'
297
					| 'BZD'
298
					| 'CAD'
299
					| 'CDF'
300
					| 'CHF'
301
					| 'CLF'
302
					| 'CLP'
303
					| 'CNY'
304
					| 'COP'
305
					| 'CRC'
306
					| 'CUC'
307
					| 'CUP'
308
					| 'CVE'
309
					| 'CZK'
310
					| 'DJF'
311
					| 'DKK'
312
					| 'DOP'
313
					| 'DZD'
314
					| 'EEK'
315
					| 'EGP'
316
					| 'ERN'
317
					| 'ETB'
318
					| 'EUR'
319
					| 'FJD'
320
					| 'FKP'
321
					| 'GBP'
322
					| 'GEL'
323
					| 'GHS'
324
					| 'GIP'
325
					| 'GMD'
326
					| 'GNF'
327
					| 'GTQ'
328
					| 'GYD'
329
					| 'HKD'
330
					| 'HNL'
331
					| 'HRK'
332
					| 'HTG'
333
					| 'HUF'
334
					| 'IDR'
335
					| 'ILS'
336
					| 'INR'
337
					| 'IQD'
338
					| 'IRR'
339
					| 'ISK'
340
					| 'JMD'
341
					| 'JOD'
342
					| 'JPY'
343
					| 'KES'
344
					| 'KGS'
345
					| 'KHR'
346
					| 'KMF'
347
					| 'KPW'
348
					| 'KRW'
349
					| 'KWD'
350
					| 'KYD'
351
					| 'KZT'
352
					| 'LAK'
353
					| 'LBP'
354
					| 'LKR'
355
					| 'LRD'
356
					| 'LSL'
357
					| 'LTL'
358
					| 'LVL'
359
					| 'LYD'
360
					| 'MAD'
361
					| 'MDL'
362
					| 'MGA'
363
					| 'MKD'
364
					| 'MMK'
365
					| 'MNT'
366
					| 'MOP'
367
					| 'MRO'
368
					| 'MRU'
369
					| 'MUR'
370
					| 'MVR'
371
					| 'MWK'
372
					| 'MXN'
373
					| 'MXV'
374
					| 'MYR'
375
					| 'MZN'
376
					| 'NAD'
377
					| 'NGN'
378
					| 'NIO'
379
					| 'NOK'
380
					| 'NPR'
381
					| 'NZD'
382
					| 'OMR'
383
					| 'PAB'
384
					| 'PEN'
385
					| 'PGK'
386
					| 'PHP'
387
					| 'PKR'
388
					| 'PLN'
389
					| 'PYG'
390
					| 'QAR'
391
					| 'RON'
392
					| 'RSD'
393
					| 'RUB'
394
					| 'RWF'
395
					| 'SAR'
396
					| 'SBD'
397
					| 'SCR'
398
					| 'SDG'
399
					| 'SEK'
400
					| 'SGD'
401
					| 'SHP'
402
					| 'SKK'
403
					| 'SLE'
404
					| 'SLL'
405
					| 'SOS'
406
					| 'SRD'
407
					| 'STD'
408
					| 'STN'
409
					| 'SVC'
410
					| 'SYP'
411
					| 'SZL'
412
					| 'THB'
413
					| 'TJS'
414
					| 'TMT'
415
					| 'TND'
416
					| 'TOP'
417
					| 'TRY'
418
					| 'TTD'
419
					| 'TWD'
420
					| 'TZS'
421
					| 'UAH'
422
					| 'UGX'
423
					| 'USD'
424
					| 'UYU'
425
					| 'UZS'
426
					| 'VEF'
427
					| 'VES'
428
					| 'VND'
429
					| 'VUV'
430
					| 'WST'
431
					| 'XAF'
432
					| 'XCD'
433
					| 'XOF'
434
					| 'XPF'
435
					| 'YER'
436
					| 'ZAR'
437
					| 'ZMW'
438
					| 'ZMK'
439
					| 'ZWD'
440
				TaxType?: string
441
				EnablePaymentsToAccount?: false | true
442
				ShowInExpenseClaims?: false | true
443
				Class?: 'EQUITY' | 'EXPENSE' | 'LIABILITY' | 'REVENUE' | 'ASSET'
444
				SystemAccount?:
445
					| ''
446
					| 'DEBTORS'
447
					| 'CREDITORS'
448
					| 'BANKCURRENCYGAIN'
449
					| 'GST'
450
					| 'GSTONIMPORTS'
451
					| 'HISTORICAL'
452
					| 'REALISEDCURRENCYGAIN'
453
					| 'RETAINEDEARNINGS'
454
					| 'ROUNDING'
455
					| 'TRACKINGTRANSFERS'
456
					| 'UNPAIDEXPCLM'
457
					| 'UNREALISEDCURRENCYGAIN'
458
					| 'WAGEPAYABLES'
459
					| 'CISASSETS'
460
					| 'CISASSET'
461
					| 'CISLABOUR'
462
					| 'CISLABOUREXPENSE'
463
					| 'CISLABOURINCOME'
464
					| 'CISLIABILITY'
465
					| 'CISMATERIALS'
466
				ReportingCode?: string
467
				ReportingCodeName?: string
468
				HasAttachments?: never
469
				UpdatedDateUTC?: string
470
				AddToWatchlist?: false | true
471
				ValidationErrors?: { Message?: string }[]
472
			}
473
			Amount: number
474
			Date?: string
475
			BankTransferID?: string
476
			CurrencyRate?: number
477
			FromBankTransactionID?: string
478
			ToBankTransactionID?: string
479
			FromIsReconciled?: never
480
			ToIsReconciled?: never
481
			Reference?: string
482
			HasAttachments?: never
483
			CreatedDateUTC?: string
484
			ValidationErrors?: { Message?: string }[]
485
		}[]
486
	}
487
) {
488
	const url = new URL(`https://api.xero.com/api.xro/2.0/BankTransfers`)
489

490
	const response = await fetch(url, {
491
		method: 'PUT',
492
		headers: {
493
			Accept: 'application/json',
494
			'xero-tenant-id': xero_tenant_id,
495
			'Idempotency-Key': Idempotency_Key,
496
			'Content-Type': 'application/json',
497
			Authorization: 'Bearer ' + auth.token
498
		},
499
		body: JSON.stringify(body)
500
	})
501
	if (!response.ok) {
502
		const text = await response.text()
503
		throw new Error(`${response.status} ${text}`)
504
	}
505
	return await response.json()
506
}
507