0

CreateTerminalRefund

by
Published Oct 17, 2025

Creates a request to refund an Interac payment completed on a Square Terminal. Refunds for Interac payments on a Square Terminal are supported only for Interac debit cards in Canada. Other refunds for Terminal payments should use the Refunds API. For more information, see [Refunds API]($e/Refunds).

Script square Verified

The script

Submitted by hugo697 Bun
Verified 235 days ago
1
//native
2
type Square = {
3
  token: string;
4
};
5
/**
6
 * CreateTerminalRefund
7
 * Creates a request to refund an Interac payment completed on a Square Terminal. Refunds for Interac payments on a Square Terminal are supported only for Interac debit cards in Canada. Other refunds for Terminal payments should use the Refunds API. For more information, see [Refunds API]($e/Refunds).
8
 */
9
export async function main(
10
  auth: Square,
11
  body: {
12
    idempotency_key: string;
13
    refund?: {
14
      id?: string;
15
      refund_id?: string;
16
      payment_id: string;
17
      order_id?: string;
18
      amount_money: {
19
        amount?: number;
20
        currency?:
21
          | "UNKNOWN_CURRENCY"
22
          | "AED"
23
          | "AFN"
24
          | "ALL"
25
          | "AMD"
26
          | "ANG"
27
          | "AOA"
28
          | "ARS"
29
          | "AUD"
30
          | "AWG"
31
          | "AZN"
32
          | "BAM"
33
          | "BBD"
34
          | "BDT"
35
          | "BGN"
36
          | "BHD"
37
          | "BIF"
38
          | "BMD"
39
          | "BND"
40
          | "BOB"
41
          | "BOV"
42
          | "BRL"
43
          | "BSD"
44
          | "BTN"
45
          | "BWP"
46
          | "BYR"
47
          | "BZD"
48
          | "CAD"
49
          | "CDF"
50
          | "CHE"
51
          | "CHF"
52
          | "CHW"
53
          | "CLF"
54
          | "CLP"
55
          | "CNY"
56
          | "COP"
57
          | "COU"
58
          | "CRC"
59
          | "CUC"
60
          | "CUP"
61
          | "CVE"
62
          | "CZK"
63
          | "DJF"
64
          | "DKK"
65
          | "DOP"
66
          | "DZD"
67
          | "EGP"
68
          | "ERN"
69
          | "ETB"
70
          | "EUR"
71
          | "FJD"
72
          | "FKP"
73
          | "GBP"
74
          | "GEL"
75
          | "GHS"
76
          | "GIP"
77
          | "GMD"
78
          | "GNF"
79
          | "GTQ"
80
          | "GYD"
81
          | "HKD"
82
          | "HNL"
83
          | "HRK"
84
          | "HTG"
85
          | "HUF"
86
          | "IDR"
87
          | "ILS"
88
          | "INR"
89
          | "IQD"
90
          | "IRR"
91
          | "ISK"
92
          | "JMD"
93
          | "JOD"
94
          | "JPY"
95
          | "KES"
96
          | "KGS"
97
          | "KHR"
98
          | "KMF"
99
          | "KPW"
100
          | "KRW"
101
          | "KWD"
102
          | "KYD"
103
          | "KZT"
104
          | "LAK"
105
          | "LBP"
106
          | "LKR"
107
          | "LRD"
108
          | "LSL"
109
          | "LTL"
110
          | "LVL"
111
          | "LYD"
112
          | "MAD"
113
          | "MDL"
114
          | "MGA"
115
          | "MKD"
116
          | "MMK"
117
          | "MNT"
118
          | "MOP"
119
          | "MRO"
120
          | "MUR"
121
          | "MVR"
122
          | "MWK"
123
          | "MXN"
124
          | "MXV"
125
          | "MYR"
126
          | "MZN"
127
          | "NAD"
128
          | "NGN"
129
          | "NIO"
130
          | "NOK"
131
          | "NPR"
132
          | "NZD"
133
          | "OMR"
134
          | "PAB"
135
          | "PEN"
136
          | "PGK"
137
          | "PHP"
138
          | "PKR"
139
          | "PLN"
140
          | "PYG"
141
          | "QAR"
142
          | "RON"
143
          | "RSD"
144
          | "RUB"
145
          | "RWF"
146
          | "SAR"
147
          | "SBD"
148
          | "SCR"
149
          | "SDG"
150
          | "SEK"
151
          | "SGD"
152
          | "SHP"
153
          | "SLL"
154
          | "SLE"
155
          | "SOS"
156
          | "SRD"
157
          | "SSP"
158
          | "STD"
159
          | "SVC"
160
          | "SYP"
161
          | "SZL"
162
          | "THB"
163
          | "TJS"
164
          | "TMT"
165
          | "TND"
166
          | "TOP"
167
          | "TRY"
168
          | "TTD"
169
          | "TWD"
170
          | "TZS"
171
          | "UAH"
172
          | "UGX"
173
          | "USD"
174
          | "USN"
175
          | "USS"
176
          | "UYI"
177
          | "UYU"
178
          | "UZS"
179
          | "VEF"
180
          | "VND"
181
          | "VUV"
182
          | "WST"
183
          | "XAF"
184
          | "XAG"
185
          | "XAU"
186
          | "XBA"
187
          | "XBB"
188
          | "XBC"
189
          | "XBD"
190
          | "XCD"
191
          | "XDR"
192
          | "XOF"
193
          | "XPD"
194
          | "XPF"
195
          | "XPT"
196
          | "XTS"
197
          | "XXX"
198
          | "YER"
199
          | "ZAR"
200
          | "ZMK"
201
          | "ZMW"
202
          | "BTC"
203
          | "XUS";
204
      };
205
      reason: string;
206
      device_id: string;
207
      deadline_duration?: string;
208
      status?: string;
209
      cancel_reason?: "BUYER_CANCELED" | "SELLER_CANCELED" | "TIMED_OUT";
210
      created_at?: string;
211
      updated_at?: string;
212
      app_id?: string;
213
      location_id?: string;
214
    };
215
  },
216
) {
217
  const url = new URL(`https://connect.squareup.com/v2/terminals/refunds`);
218

219
  const response = await fetch(url, {
220
    method: "POST",
221
    headers: {
222
      "Content-Type": "application/json",
223
      Authorization: "Bearer " + auth.token,
224
    },
225
    body: JSON.stringify(body),
226
  });
227
  if (!response.ok) {
228
    const text = await response.text();
229
    throw new Error(`${response.status} ${text}`);
230
  }
231
  return await response.json();
232
}
233