0

CreateCard

by
Published Oct 17, 2025

Adds a card on file to an existing merchant.

Script square Verified

The script

Submitted by hugo697 Bun
Verified 235 days ago
1
//native
2
type Square = {
3
  token: string;
4
};
5
/**
6
 * CreateCard
7
 * Adds a card on file to an existing merchant.
8
 */
9
export async function main(
10
  auth: Square,
11
  body: {
12
    idempotency_key: string;
13
    source_id: string;
14
    verification_token?: string;
15
    card: {
16
      id?: string;
17
      card_brand?:
18
        | "OTHER_BRAND"
19
        | "VISA"
20
        | "MASTERCARD"
21
        | "AMERICAN_EXPRESS"
22
        | "DISCOVER"
23
        | "DISCOVER_DINERS"
24
        | "JCB"
25
        | "CHINA_UNIONPAY"
26
        | "SQUARE_GIFT_CARD"
27
        | "SQUARE_CAPITAL_CARD"
28
        | "INTERAC"
29
        | "EFTPOS"
30
        | "FELICA"
31
        | "EBT";
32
      last_4?: string;
33
      exp_month?: number;
34
      exp_year?: number;
35
      cardholder_name?: string;
36
      billing_address?: {
37
        address_line_1?: string;
38
        address_line_2?: string;
39
        address_line_3?: string;
40
        locality?: string;
41
        sublocality?: string;
42
        sublocality_2?: string;
43
        sublocality_3?: string;
44
        administrative_district_level_1?: string;
45
        administrative_district_level_2?: string;
46
        administrative_district_level_3?: string;
47
        postal_code?: string;
48
        country?:
49
          | "ZZ"
50
          | "AD"
51
          | "AE"
52
          | "AF"
53
          | "AG"
54
          | "AI"
55
          | "AL"
56
          | "AM"
57
          | "AO"
58
          | "AQ"
59
          | "AR"
60
          | "AS"
61
          | "AT"
62
          | "AU"
63
          | "AW"
64
          | "AX"
65
          | "AZ"
66
          | "BA"
67
          | "BB"
68
          | "BD"
69
          | "BE"
70
          | "BF"
71
          | "BG"
72
          | "BH"
73
          | "BI"
74
          | "BJ"
75
          | "BL"
76
          | "BM"
77
          | "BN"
78
          | "BO"
79
          | "BQ"
80
          | "BR"
81
          | "BS"
82
          | "BT"
83
          | "BV"
84
          | "BW"
85
          | "BY"
86
          | "BZ"
87
          | "CA"
88
          | "CC"
89
          | "CD"
90
          | "CF"
91
          | "CG"
92
          | "CH"
93
          | "CI"
94
          | "CK"
95
          | "CL"
96
          | "CM"
97
          | "CN"
98
          | "CO"
99
          | "CR"
100
          | "CU"
101
          | "CV"
102
          | "CW"
103
          | "CX"
104
          | "CY"
105
          | "CZ"
106
          | "DE"
107
          | "DJ"
108
          | "DK"
109
          | "DM"
110
          | "DO"
111
          | "DZ"
112
          | "EC"
113
          | "EE"
114
          | "EG"
115
          | "EH"
116
          | "ER"
117
          | "ES"
118
          | "ET"
119
          | "FI"
120
          | "FJ"
121
          | "FK"
122
          | "FM"
123
          | "FO"
124
          | "FR"
125
          | "GA"
126
          | "GB"
127
          | "GD"
128
          | "GE"
129
          | "GF"
130
          | "GG"
131
          | "GH"
132
          | "GI"
133
          | "GL"
134
          | "GM"
135
          | "GN"
136
          | "GP"
137
          | "GQ"
138
          | "GR"
139
          | "GS"
140
          | "GT"
141
          | "GU"
142
          | "GW"
143
          | "GY"
144
          | "HK"
145
          | "HM"
146
          | "HN"
147
          | "HR"
148
          | "HT"
149
          | "HU"
150
          | "ID"
151
          | "IE"
152
          | "IL"
153
          | "IM"
154
          | "IN"
155
          | "IO"
156
          | "IQ"
157
          | "IR"
158
          | "IS"
159
          | "IT"
160
          | "JE"
161
          | "JM"
162
          | "JO"
163
          | "JP"
164
          | "KE"
165
          | "KG"
166
          | "KH"
167
          | "KI"
168
          | "KM"
169
          | "KN"
170
          | "KP"
171
          | "KR"
172
          | "KW"
173
          | "KY"
174
          | "KZ"
175
          | "LA"
176
          | "LB"
177
          | "LC"
178
          | "LI"
179
          | "LK"
180
          | "LR"
181
          | "LS"
182
          | "LT"
183
          | "LU"
184
          | "LV"
185
          | "LY"
186
          | "MA"
187
          | "MC"
188
          | "MD"
189
          | "ME"
190
          | "MF"
191
          | "MG"
192
          | "MH"
193
          | "MK"
194
          | "ML"
195
          | "MM"
196
          | "MN"
197
          | "MO"
198
          | "MP"
199
          | "MQ"
200
          | "MR"
201
          | "MS"
202
          | "MT"
203
          | "MU"
204
          | "MV"
205
          | "MW"
206
          | "MX"
207
          | "MY"
208
          | "MZ"
209
          | "NA"
210
          | "NC"
211
          | "NE"
212
          | "NF"
213
          | "NG"
214
          | "NI"
215
          | "NL"
216
          | "NO"
217
          | "NP"
218
          | "NR"
219
          | "NU"
220
          | "NZ"
221
          | "OM"
222
          | "PA"
223
          | "PE"
224
          | "PF"
225
          | "PG"
226
          | "PH"
227
          | "PK"
228
          | "PL"
229
          | "PM"
230
          | "PN"
231
          | "PR"
232
          | "PS"
233
          | "PT"
234
          | "PW"
235
          | "PY"
236
          | "QA"
237
          | "RE"
238
          | "RO"
239
          | "RS"
240
          | "RU"
241
          | "RW"
242
          | "SA"
243
          | "SB"
244
          | "SC"
245
          | "SD"
246
          | "SE"
247
          | "SG"
248
          | "SH"
249
          | "SI"
250
          | "SJ"
251
          | "SK"
252
          | "SL"
253
          | "SM"
254
          | "SN"
255
          | "SO"
256
          | "SR"
257
          | "SS"
258
          | "ST"
259
          | "SV"
260
          | "SX"
261
          | "SY"
262
          | "SZ"
263
          | "TC"
264
          | "TD"
265
          | "TF"
266
          | "TG"
267
          | "TH"
268
          | "TJ"
269
          | "TK"
270
          | "TL"
271
          | "TM"
272
          | "TN"
273
          | "TO"
274
          | "TR"
275
          | "TT"
276
          | "TV"
277
          | "TW"
278
          | "TZ"
279
          | "UA"
280
          | "UG"
281
          | "UM"
282
          | "US"
283
          | "UY"
284
          | "UZ"
285
          | "VA"
286
          | "VC"
287
          | "VE"
288
          | "VG"
289
          | "VI"
290
          | "VN"
291
          | "VU"
292
          | "WF"
293
          | "WS"
294
          | "YE"
295
          | "YT"
296
          | "ZA"
297
          | "ZM"
298
          | "ZW";
299
        first_name?: string;
300
        last_name?: string;
301
      };
302
      fingerprint?: string;
303
      customer_id?: string;
304
      merchant_id?: string;
305
      reference_id?: string;
306
      enabled?: false | true;
307
      card_type?: "UNKNOWN_CARD_TYPE" | "CREDIT" | "DEBIT";
308
      prepaid_type?: "UNKNOWN_PREPAID_TYPE" | "NOT_PREPAID" | "PREPAID";
309
      bin?: string;
310
      version?: number;
311
      card_co_brand?: "UNKNOWN" | "AFTERPAY" | "CLEARPAY";
312
    };
313
  },
314
) {
315
  const url = new URL(`https://connect.squareup.com/v2/cards`);
316

317
  const response = await fetch(url, {
318
    method: "POST",
319
    headers: {
320
      "Content-Type": "application/json",
321
      Authorization: "Bearer " + auth.token,
322
    },
323
    body: JSON.stringify(body),
324
  });
325
  if (!response.ok) {
326
    const text = await response.text();
327
    throw new Error(`${response.status} ${text}`);
328
  }
329
  return await response.json();
330
}
331