Creates one or more spent or received money transaction

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 one or more spent or received money transaction
7
 *
8
 */
9
export async function main(
10
	auth: Xero,
11
	summarizeErrors: string | undefined,
12
	unitdp: string | undefined,
13
	xero_tenant_id: string,
14
	Idempotency_Key: string,
15
	body: {
16
		pagination?: {
17
			page?: number
18
			pageSize?: number
19
			pageCount?: number
20
			itemCount?: number
21
		}
22
		Warnings?: { Message?: string }[]
23
		BankTransactions?: {
24
			Type:
25
				| 'RECEIVE'
26
				| 'RECEIVE-OVERPAYMENT'
27
				| 'RECEIVE-PREPAYMENT'
28
				| 'SPEND'
29
				| 'SPEND-OVERPAYMENT'
30
				| 'SPEND-PREPAYMENT'
31
				| 'RECEIVE-TRANSFER'
32
				| 'SPEND-TRANSFER'
33
			Contact?: {
34
				ContactID?: string
35
				MergedToContactID?: string
36
				ContactNumber?: string
37
				AccountNumber?: string
38
				ContactStatus?: 'ACTIVE' | 'ARCHIVED' | 'GDPRREQUEST'
39
				Name?: string
40
				FirstName?: string
41
				LastName?: string
42
				CompanyNumber?: string
43
				EmailAddress?: string
44
				ContactPersons?: {
45
					FirstName?: string
46
					LastName?: string
47
					EmailAddress?: string
48
					IncludeInEmails?: false | true
49
				}[]
50
				BankAccountDetails?: string
51
				TaxNumber?: string
52
				AccountsReceivableTaxType?: string
53
				AccountsPayableTaxType?: string
54
				Addresses?: {
55
					AddressType?: 'POBOX' | 'STREET'
56
					AddressLine1?: string
57
					AddressLine2?: string
58
					AddressLine3?: string
59
					AddressLine4?: string
60
					City?: string
61
					Region?: string
62
					PostalCode?: string
63
					Country?: string
64
					AttentionTo?: string
65
				}[]
66
				Phones?: {
67
					PhoneType?: 'DEFAULT' | 'DDI' | 'MOBILE' | 'FAX' | 'OFFICE'
68
					PhoneNumber?: string
69
					PhoneAreaCode?: string
70
					PhoneCountryCode?: string
71
				}[]
72
				IsSupplier?: false | true
73
				IsCustomer?: false | true
74
				SalesDefaultLineAmountType?: 'INCLUSIVE' | 'EXCLUSIVE' | 'NONE'
75
				PurchasesDefaultLineAmountType?: 'INCLUSIVE' | 'EXCLUSIVE' | 'NONE'
76
				DefaultCurrency?:
77
					| 'AED'
78
					| 'AFN'
79
					| 'ALL'
80
					| 'AMD'
81
					| 'ANG'
82
					| 'AOA'
83
					| 'ARS'
84
					| 'AUD'
85
					| 'AWG'
86
					| 'AZN'
87
					| 'BAM'
88
					| 'BBD'
89
					| 'BDT'
90
					| 'BGN'
91
					| 'BHD'
92
					| 'BIF'
93
					| 'BMD'
94
					| 'BND'
95
					| 'BOB'
96
					| 'BRL'
97
					| 'BSD'
98
					| 'BTN'
99
					| 'BWP'
100
					| 'BYN'
101
					| 'BYR'
102
					| 'BZD'
103
					| 'CAD'
104
					| 'CDF'
105
					| 'CHF'
106
					| 'CLF'
107
					| 'CLP'
108
					| 'CNY'
109
					| 'COP'
110
					| 'CRC'
111
					| 'CUC'
112
					| 'CUP'
113
					| 'CVE'
114
					| 'CZK'
115
					| 'DJF'
116
					| 'DKK'
117
					| 'DOP'
118
					| 'DZD'
119
					| 'EEK'
120
					| 'EGP'
121
					| 'ERN'
122
					| 'ETB'
123
					| 'EUR'
124
					| 'FJD'
125
					| 'FKP'
126
					| 'GBP'
127
					| 'GEL'
128
					| 'GHS'
129
					| 'GIP'
130
					| 'GMD'
131
					| 'GNF'
132
					| 'GTQ'
133
					| 'GYD'
134
					| 'HKD'
135
					| 'HNL'
136
					| 'HRK'
137
					| 'HTG'
138
					| 'HUF'
139
					| 'IDR'
140
					| 'ILS'
141
					| 'INR'
142
					| 'IQD'
143
					| 'IRR'
144
					| 'ISK'
145
					| 'JMD'
146
					| 'JOD'
147
					| 'JPY'
148
					| 'KES'
149
					| 'KGS'
150
					| 'KHR'
151
					| 'KMF'
152
					| 'KPW'
153
					| 'KRW'
154
					| 'KWD'
155
					| 'KYD'
156
					| 'KZT'
157
					| 'LAK'
158
					| 'LBP'
159
					| 'LKR'
160
					| 'LRD'
161
					| 'LSL'
162
					| 'LTL'
163
					| 'LVL'
164
					| 'LYD'
165
					| 'MAD'
166
					| 'MDL'
167
					| 'MGA'
168
					| 'MKD'
169
					| 'MMK'
170
					| 'MNT'
171
					| 'MOP'
172
					| 'MRO'
173
					| 'MRU'
174
					| 'MUR'
175
					| 'MVR'
176
					| 'MWK'
177
					| 'MXN'
178
					| 'MXV'
179
					| 'MYR'
180
					| 'MZN'
181
					| 'NAD'
182
					| 'NGN'
183
					| 'NIO'
184
					| 'NOK'
185
					| 'NPR'
186
					| 'NZD'
187
					| 'OMR'
188
					| 'PAB'
189
					| 'PEN'
190
					| 'PGK'
191
					| 'PHP'
192
					| 'PKR'
193
					| 'PLN'
194
					| 'PYG'
195
					| 'QAR'
196
					| 'RON'
197
					| 'RSD'
198
					| 'RUB'
199
					| 'RWF'
200
					| 'SAR'
201
					| 'SBD'
202
					| 'SCR'
203
					| 'SDG'
204
					| 'SEK'
205
					| 'SGD'
206
					| 'SHP'
207
					| 'SKK'
208
					| 'SLE'
209
					| 'SLL'
210
					| 'SOS'
211
					| 'SRD'
212
					| 'STD'
213
					| 'STN'
214
					| 'SVC'
215
					| 'SYP'
216
					| 'SZL'
217
					| 'THB'
218
					| 'TJS'
219
					| 'TMT'
220
					| 'TND'
221
					| 'TOP'
222
					| 'TRY'
223
					| 'TTD'
224
					| 'TWD'
225
					| 'TZS'
226
					| 'UAH'
227
					| 'UGX'
228
					| 'USD'
229
					| 'UYU'
230
					| 'UZS'
231
					| 'VEF'
232
					| 'VES'
233
					| 'VND'
234
					| 'VUV'
235
					| 'WST'
236
					| 'XAF'
237
					| 'XCD'
238
					| 'XOF'
239
					| 'XPF'
240
					| 'YER'
241
					| 'ZAR'
242
					| 'ZMW'
243
					| 'ZMK'
244
					| 'ZWD'
245
				XeroNetworkKey?: string
246
				SalesDefaultAccountCode?: string
247
				PurchasesDefaultAccountCode?: string
248
				SalesTrackingCategories?: {
249
					TrackingCategoryName?: string
250
					TrackingOptionName?: string
251
				}[]
252
				PurchasesTrackingCategories?: {
253
					TrackingCategoryName?: string
254
					TrackingOptionName?: string
255
				}[]
256
				TrackingCategoryName?: string
257
				TrackingCategoryOption?: string
258
				PaymentTerms?: {
259
					Bills?: {
260
						Day?: number
261
						Type?:
262
							| 'DAYSAFTERBILLDATE'
263
							| 'DAYSAFTERBILLMONTH'
264
							| 'OFCURRENTMONTH'
265
							| 'OFFOLLOWINGMONTH'
266
					}
267
					Sales?: {
268
						Day?: number
269
						Type?:
270
							| 'DAYSAFTERBILLDATE'
271
							| 'DAYSAFTERBILLMONTH'
272
							| 'OFCURRENTMONTH'
273
							| 'OFFOLLOWINGMONTH'
274
					}
275
				}
276
				UpdatedDateUTC?: string
277
				ContactGroups?: {
278
					Name?: string
279
					Status?: 'ACTIVE' | 'DELETED'
280
					ContactGroupID?: string
281
					Contacts?: {}[]
282
				}[]
283
				Website?: string
284
				BrandingTheme?: {
285
					BrandingThemeID?: string
286
					Name?: string
287
					LogoUrl?: string
288
					Type?: 'INVOICE'
289
					SortOrder?: number
290
					CreatedDateUTC?: string
291
				}
292
				BatchPayments?: {
293
					BankAccountNumber?: string
294
					BankAccountName?: string
295
					Details?: string
296
					Code?: string
297
					Reference?: string
298
				}
299
				Discount?: number
300
				Balances?: {
301
					AccountsReceivable?: { Outstanding?: number; Overdue?: number }
302
					AccountsPayable?: { Outstanding?: number; Overdue?: number }
303
				}
304
				Attachments?: {
305
					AttachmentID?: string
306
					FileName?: string
307
					Url?: string
308
					MimeType?: string
309
					ContentLength?: number
310
					IncludeOnline?: false | true
311
				}[]
312
				HasAttachments?: never
313
				ValidationErrors?: { Message?: string }[]
314
				HasValidationErrors?: never
315
				StatusAttributeString?: string
316
			}
317
			LineItems: {
318
				LineItemID?: string
319
				Description?: string
320
				Quantity?: number
321
				UnitAmount?: number
322
				ItemCode?: string
323
				AccountCode?: string
324
				AccountID?: string
325
				TaxType?: string
326
				TaxAmount?: number
327
				Item?: { Code?: string; Name?: string; ItemID?: string }
328
				LineAmount?: number
329
				Tracking?: {
330
					TrackingCategoryID?: string
331
					TrackingOptionID?: string
332
					Name?: string
333
					Option?: string
334
				}[]
335
				DiscountRate?: number
336
				DiscountAmount?: number
337
				RepeatingInvoiceID?: string
338
				Taxability?: 'TAXABLE' | 'NON_TAXABLE' | 'EXEMPT' | 'PART_TAXABLE' | 'NOT_APPLICABLE'
339
				SalesTaxCodeId?: number
340
				TaxBreakdown?: {
341
					TaxComponentId?: string
342
					Type?:
343
						| 'SYSGST/USCOUNTRY'
344
						| 'SYSGST/USSTATE'
345
						| 'SYSGST/USCOUNTY'
346
						| 'SYSGST/USCITY'
347
						| 'SYSGST/USSPECIAL'
348
					Name?: string
349
					TaxPercentage?: number
350
					TaxAmount?: number
351
					TaxableAmount?: number
352
					NonTaxableAmount?: number
353
					ExemptAmount?: number
354
					StateAssignedNo?: string
355
					JurisdictionRegion?: string
356
				}[]
357
			}[]
358
			BankAccount: {
359
				Code?: string
360
				Name?: string
361
				AccountID?: string
362
				Type?:
363
					| 'BANK'
364
					| 'CURRENT'
365
					| 'CURRLIAB'
366
					| 'DEPRECIATN'
367
					| 'DIRECTCOSTS'
368
					| 'EQUITY'
369
					| 'EXPENSE'
370
					| 'FIXED'
371
					| 'INVENTORY'
372
					| 'LIABILITY'
373
					| 'NONCURRENT'
374
					| 'OTHERINCOME'
375
					| 'OVERHEADS'
376
					| 'PREPAYMENT'
377
					| 'REVENUE'
378
					| 'SALES'
379
					| 'TERMLIAB'
380
					| 'PAYG'
381
				BankAccountNumber?: string
382
				Status?: 'ACTIVE' | 'ARCHIVED' | 'DELETED'
383
				Description?: string
384
				BankAccountType?: '' | 'NONE' | 'BANK' | 'CREDITCARD' | 'PAYPAL'
385
				CurrencyCode?:
386
					| 'AED'
387
					| 'AFN'
388
					| 'ALL'
389
					| 'AMD'
390
					| 'ANG'
391
					| 'AOA'
392
					| 'ARS'
393
					| 'AUD'
394
					| 'AWG'
395
					| 'AZN'
396
					| 'BAM'
397
					| 'BBD'
398
					| 'BDT'
399
					| 'BGN'
400
					| 'BHD'
401
					| 'BIF'
402
					| 'BMD'
403
					| 'BND'
404
					| 'BOB'
405
					| 'BRL'
406
					| 'BSD'
407
					| 'BTN'
408
					| 'BWP'
409
					| 'BYN'
410
					| 'BYR'
411
					| 'BZD'
412
					| 'CAD'
413
					| 'CDF'
414
					| 'CHF'
415
					| 'CLF'
416
					| 'CLP'
417
					| 'CNY'
418
					| 'COP'
419
					| 'CRC'
420
					| 'CUC'
421
					| 'CUP'
422
					| 'CVE'
423
					| 'CZK'
424
					| 'DJF'
425
					| 'DKK'
426
					| 'DOP'
427
					| 'DZD'
428
					| 'EEK'
429
					| 'EGP'
430
					| 'ERN'
431
					| 'ETB'
432
					| 'EUR'
433
					| 'FJD'
434
					| 'FKP'
435
					| 'GBP'
436
					| 'GEL'
437
					| 'GHS'
438
					| 'GIP'
439
					| 'GMD'
440
					| 'GNF'
441
					| 'GTQ'
442
					| 'GYD'
443
					| 'HKD'
444
					| 'HNL'
445
					| 'HRK'
446
					| 'HTG'
447
					| 'HUF'
448
					| 'IDR'
449
					| 'ILS'
450
					| 'INR'
451
					| 'IQD'
452
					| 'IRR'
453
					| 'ISK'
454
					| 'JMD'
455
					| 'JOD'
456
					| 'JPY'
457
					| 'KES'
458
					| 'KGS'
459
					| 'KHR'
460
					| 'KMF'
461
					| 'KPW'
462
					| 'KRW'
463
					| 'KWD'
464
					| 'KYD'
465
					| 'KZT'
466
					| 'LAK'
467
					| 'LBP'
468
					| 'LKR'
469
					| 'LRD'
470
					| 'LSL'
471
					| 'LTL'
472
					| 'LVL'
473
					| 'LYD'
474
					| 'MAD'
475
					| 'MDL'
476
					| 'MGA'
477
					| 'MKD'
478
					| 'MMK'
479
					| 'MNT'
480
					| 'MOP'
481
					| 'MRO'
482
					| 'MRU'
483
					| 'MUR'
484
					| 'MVR'
485
					| 'MWK'
486
					| 'MXN'
487
					| 'MXV'
488
					| 'MYR'
489
					| 'MZN'
490
					| 'NAD'
491
					| 'NGN'
492
					| 'NIO'
493
					| 'NOK'
494
					| 'NPR'
495
					| 'NZD'
496
					| 'OMR'
497
					| 'PAB'
498
					| 'PEN'
499
					| 'PGK'
500
					| 'PHP'
501
					| 'PKR'
502
					| 'PLN'
503
					| 'PYG'
504
					| 'QAR'
505
					| 'RON'
506
					| 'RSD'
507
					| 'RUB'
508
					| 'RWF'
509
					| 'SAR'
510
					| 'SBD'
511
					| 'SCR'
512
					| 'SDG'
513
					| 'SEK'
514
					| 'SGD'
515
					| 'SHP'
516
					| 'SKK'
517
					| 'SLE'
518
					| 'SLL'
519
					| 'SOS'
520
					| 'SRD'
521
					| 'STD'
522
					| 'STN'
523
					| 'SVC'
524
					| 'SYP'
525
					| 'SZL'
526
					| 'THB'
527
					| 'TJS'
528
					| 'TMT'
529
					| 'TND'
530
					| 'TOP'
531
					| 'TRY'
532
					| 'TTD'
533
					| 'TWD'
534
					| 'TZS'
535
					| 'UAH'
536
					| 'UGX'
537
					| 'USD'
538
					| 'UYU'
539
					| 'UZS'
540
					| 'VEF'
541
					| 'VES'
542
					| 'VND'
543
					| 'VUV'
544
					| 'WST'
545
					| 'XAF'
546
					| 'XCD'
547
					| 'XOF'
548
					| 'XPF'
549
					| 'YER'
550
					| 'ZAR'
551
					| 'ZMW'
552
					| 'ZMK'
553
					| 'ZWD'
554
				TaxType?: string
555
				EnablePaymentsToAccount?: false | true
556
				ShowInExpenseClaims?: false | true
557
				Class?: 'EQUITY' | 'EXPENSE' | 'LIABILITY' | 'REVENUE' | 'ASSET'
558
				SystemAccount?:
559
					| ''
560
					| 'DEBTORS'
561
					| 'CREDITORS'
562
					| 'BANKCURRENCYGAIN'
563
					| 'GST'
564
					| 'GSTONIMPORTS'
565
					| 'HISTORICAL'
566
					| 'REALISEDCURRENCYGAIN'
567
					| 'RETAINEDEARNINGS'
568
					| 'ROUNDING'
569
					| 'TRACKINGTRANSFERS'
570
					| 'UNPAIDEXPCLM'
571
					| 'UNREALISEDCURRENCYGAIN'
572
					| 'WAGEPAYABLES'
573
					| 'CISASSETS'
574
					| 'CISASSET'
575
					| 'CISLABOUR'
576
					| 'CISLABOUREXPENSE'
577
					| 'CISLABOURINCOME'
578
					| 'CISLIABILITY'
579
					| 'CISMATERIALS'
580
				ReportingCode?: string
581
				ReportingCodeName?: string
582
				HasAttachments?: never
583
				UpdatedDateUTC?: string
584
				AddToWatchlist?: false | true
585
				ValidationErrors?: { Message?: string }[]
586
			}
587
			IsReconciled?: false | true
588
			Date?: string
589
			Reference?: string
590
			CurrencyCode?:
591
				| 'AED'
592
				| 'AFN'
593
				| 'ALL'
594
				| 'AMD'
595
				| 'ANG'
596
				| 'AOA'
597
				| 'ARS'
598
				| 'AUD'
599
				| 'AWG'
600
				| 'AZN'
601
				| 'BAM'
602
				| 'BBD'
603
				| 'BDT'
604
				| 'BGN'
605
				| 'BHD'
606
				| 'BIF'
607
				| 'BMD'
608
				| 'BND'
609
				| 'BOB'
610
				| 'BRL'
611
				| 'BSD'
612
				| 'BTN'
613
				| 'BWP'
614
				| 'BYN'
615
				| 'BYR'
616
				| 'BZD'
617
				| 'CAD'
618
				| 'CDF'
619
				| 'CHF'
620
				| 'CLF'
621
				| 'CLP'
622
				| 'CNY'
623
				| 'COP'
624
				| 'CRC'
625
				| 'CUC'
626
				| 'CUP'
627
				| 'CVE'
628
				| 'CZK'
629
				| 'DJF'
630
				| 'DKK'
631
				| 'DOP'
632
				| 'DZD'
633
				| 'EEK'
634
				| 'EGP'
635
				| 'ERN'
636
				| 'ETB'
637
				| 'EUR'
638
				| 'FJD'
639
				| 'FKP'
640
				| 'GBP'
641
				| 'GEL'
642
				| 'GHS'
643
				| 'GIP'
644
				| 'GMD'
645
				| 'GNF'
646
				| 'GTQ'
647
				| 'GYD'
648
				| 'HKD'
649
				| 'HNL'
650
				| 'HRK'
651
				| 'HTG'
652
				| 'HUF'
653
				| 'IDR'
654
				| 'ILS'
655
				| 'INR'
656
				| 'IQD'
657
				| 'IRR'
658
				| 'ISK'
659
				| 'JMD'
660
				| 'JOD'
661
				| 'JPY'
662
				| 'KES'
663
				| 'KGS'
664
				| 'KHR'
665
				| 'KMF'
666
				| 'KPW'
667
				| 'KRW'
668
				| 'KWD'
669
				| 'KYD'
670
				| 'KZT'
671
				| 'LAK'
672
				| 'LBP'
673
				| 'LKR'
674
				| 'LRD'
675
				| 'LSL'
676
				| 'LTL'
677
				| 'LVL'
678
				| 'LYD'
679
				| 'MAD'
680
				| 'MDL'
681
				| 'MGA'
682
				| 'MKD'
683
				| 'MMK'
684
				| 'MNT'
685
				| 'MOP'
686
				| 'MRO'
687
				| 'MRU'
688
				| 'MUR'
689
				| 'MVR'
690
				| 'MWK'
691
				| 'MXN'
692
				| 'MXV'
693
				| 'MYR'
694
				| 'MZN'
695
				| 'NAD'
696
				| 'NGN'
697
				| 'NIO'
698
				| 'NOK'
699
				| 'NPR'
700
				| 'NZD'
701
				| 'OMR'
702
				| 'PAB'
703
				| 'PEN'
704
				| 'PGK'
705
				| 'PHP'
706
				| 'PKR'
707
				| 'PLN'
708
				| 'PYG'
709
				| 'QAR'
710
				| 'RON'
711
				| 'RSD'
712
				| 'RUB'
713
				| 'RWF'
714
				| 'SAR'
715
				| 'SBD'
716
				| 'SCR'
717
				| 'SDG'
718
				| 'SEK'
719
				| 'SGD'
720
				| 'SHP'
721
				| 'SKK'
722
				| 'SLE'
723
				| 'SLL'
724
				| 'SOS'
725
				| 'SRD'
726
				| 'STD'
727
				| 'STN'
728
				| 'SVC'
729
				| 'SYP'
730
				| 'SZL'
731
				| 'THB'
732
				| 'TJS'
733
				| 'TMT'
734
				| 'TND'
735
				| 'TOP'
736
				| 'TRY'
737
				| 'TTD'
738
				| 'TWD'
739
				| 'TZS'
740
				| 'UAH'
741
				| 'UGX'
742
				| 'USD'
743
				| 'UYU'
744
				| 'UZS'
745
				| 'VEF'
746
				| 'VES'
747
				| 'VND'
748
				| 'VUV'
749
				| 'WST'
750
				| 'XAF'
751
				| 'XCD'
752
				| 'XOF'
753
				| 'XPF'
754
				| 'YER'
755
				| 'ZAR'
756
				| 'ZMW'
757
				| 'ZMK'
758
				| 'ZWD'
759
			CurrencyRate?: number
760
			Url?: string
761
			Status?: 'DELETED' | 'AUTHORISED' | 'VOIDED'
762
			LineAmountTypes?: 'Exclusive' | 'Inclusive' | 'NoTax'
763
			SubTotal?: number
764
			TotalTax?: number
765
			Total?: number
766
			BankTransactionID?: string
767
			PrepaymentID?: string
768
			OverpaymentID?: string
769
			UpdatedDateUTC?: string
770
			HasAttachments?: never
771
			StatusAttributeString?: string
772
			ValidationErrors?: { Message?: string }[]
773
		}[]
774
	}
775
) {
776
	const url = new URL(`https://api.xero.com/api.xro/2.0/BankTransactions`)
777
	for (const [k, v] of [
778
		['summarizeErrors', summarizeErrors],
779
		['unitdp', unitdp]
780
	]) {
781
		if (v !== undefined && v !== '' && k !== undefined) {
782
			url.searchParams.append(k, v)
783
		}
784
	}
785
	const response = await fetch(url, {
786
		method: 'PUT',
787
		headers: {
788
      Accept: 'application/json',
789
			'xero-tenant-id': xero_tenant_id,
790
			'Idempotency-Key': Idempotency_Key,
791
			'Content-Type': 'application/json',
792
			Authorization: 'Bearer ' + auth.token
793
		},
794
		body: JSON.stringify(body)
795
	})
796
	if (!response.ok) {
797
		const text = await response.text()
798
		throw new Error(`${response.status} ${text}`)
799
	}
800
	return await response.json()
801
}
802