Post tokens

Creates a single-use token that represents a bank account’s details. You can use this token with any API method in place of a bank account dictionary. You can only use this token once. To do so, attach it to a Custom account.

Script stripe Verified

by hugo697 · 10/30/2023

The script

Submitted by hugo697 Typescript (fetch-only)
Verified 368 days ago
1
type Stripe = {
2
  token: string;
3
};
4
/**
5
 * Post tokens
6
 * Creates a single-use token that represents a bank account’s details.
7
You can use this token with any API method in place of a bank account dictionary. You can only use this token once. To do so, attach it to a Custom account.
8
 */
9
export async function main(
10
  auth: Stripe,
11
  body: {
12
    account?: {
13
      business_type?:
14
        | "company"
15
        | "government_entity"
16
        | "individual"
17
        | "non_profit";
18
      company?: {
19
        address?: {
20
          city?: string;
21
          country?: string;
22
          line1?: string;
23
          line2?: string;
24
          postal_code?: string;
25
          state?: string;
26
          [k: string]: unknown;
27
        };
28
        address_kana?: {
29
          city?: string;
30
          country?: string;
31
          line1?: string;
32
          line2?: string;
33
          postal_code?: string;
34
          state?: string;
35
          town?: string;
36
          [k: string]: unknown;
37
        };
38
        address_kanji?: {
39
          city?: string;
40
          country?: string;
41
          line1?: string;
42
          line2?: string;
43
          postal_code?: string;
44
          state?: string;
45
          town?: string;
46
          [k: string]: unknown;
47
        };
48
        directors_provided?: boolean;
49
        executives_provided?: boolean;
50
        export_license_id?: string;
51
        export_purpose_code?: string;
52
        name?: string;
53
        name_kana?: string;
54
        name_kanji?: string;
55
        owners_provided?: boolean;
56
        ownership_declaration?: {
57
          date?: number;
58
          ip?: string;
59
          user_agent?: string;
60
          [k: string]: unknown;
61
        };
62
        ownership_declaration_shown_and_signed?: boolean;
63
        phone?: string;
64
        registration_number?: string;
65
        structure?:
66
          | ""
67
          | "free_zone_establishment"
68
          | "free_zone_llc"
69
          | "government_instrumentality"
70
          | "governmental_unit"
71
          | "incorporated_non_profit"
72
          | "incorporated_partnership"
73
          | "limited_liability_partnership"
74
          | "llc"
75
          | "multi_member_llc"
76
          | "private_company"
77
          | "private_corporation"
78
          | "private_partnership"
79
          | "public_company"
80
          | "public_corporation"
81
          | "public_partnership"
82
          | "registered_charity"
83
          | "single_member_llc"
84
          | "sole_establishment"
85
          | "sole_proprietorship"
86
          | "tax_exempt_government_instrumentality"
87
          | "unincorporated_association"
88
          | "unincorporated_non_profit"
89
          | "unincorporated_partnership";
90
        tax_id?: string;
91
        tax_id_registrar?: string;
92
        vat_id?: string;
93
        verification?: {
94
          document?: { back?: string; front?: string; [k: string]: unknown };
95
          [k: string]: unknown;
96
        };
97
        [k: string]: unknown;
98
      };
99
      individual?: {
100
        address?: {
101
          city?: string;
102
          country?: string;
103
          line1?: string;
104
          line2?: string;
105
          postal_code?: string;
106
          state?: string;
107
          [k: string]: unknown;
108
        };
109
        address_kana?: {
110
          city?: string;
111
          country?: string;
112
          line1?: string;
113
          line2?: string;
114
          postal_code?: string;
115
          state?: string;
116
          town?: string;
117
          [k: string]: unknown;
118
        };
119
        address_kanji?: {
120
          city?: string;
121
          country?: string;
122
          line1?: string;
123
          line2?: string;
124
          postal_code?: string;
125
          state?: string;
126
          town?: string;
127
          [k: string]: unknown;
128
        };
129
        dob?:
130
          | { day: number; month: number; year: number; [k: string]: unknown }
131
          | "";
132
        email?: string;
133
        first_name?: string;
134
        first_name_kana?: string;
135
        first_name_kanji?: string;
136
        full_name_aliases?: string[] | "";
137
        gender?: string;
138
        id_number?: string;
139
        id_number_secondary?: string;
140
        last_name?: string;
141
        last_name_kana?: string;
142
        last_name_kanji?: string;
143
        maiden_name?: string;
144
        metadata?: { [k: string]: string } | "";
145
        phone?: string;
146
        political_exposure?: "existing" | "none";
147
        registered_address?: {
148
          city?: string;
149
          country?: string;
150
          line1?: string;
151
          line2?: string;
152
          postal_code?: string;
153
          state?: string;
154
          [k: string]: unknown;
155
        };
156
        relationship?: {
157
          director?: boolean;
158
          executive?: boolean;
159
          owner?: boolean;
160
          percent_ownership?: number | "";
161
          title?: string;
162
          [k: string]: unknown;
163
        };
164
        ssn_last_4?: string;
165
        verification?: {
166
          additional_document?: {
167
            back?: string;
168
            front?: string;
169
            [k: string]: unknown;
170
          };
171
          document?: { back?: string; front?: string; [k: string]: unknown };
172
          [k: string]: unknown;
173
        };
174
        [k: string]: unknown;
175
      };
176
      tos_shown_and_accepted?: boolean;
177
      [k: string]: unknown;
178
    };
179
    bank_account?: {
180
      account_holder_name?: string;
181
      account_holder_type?: "company" | "individual";
182
      account_number: string;
183
      account_type?: "checking" | "futsu" | "savings" | "toza";
184
      country: string;
185
      currency?: string;
186
      payment_method?: string;
187
      routing_number?: string;
188
      [k: string]: unknown;
189
    };
190
    card?:
191
      | {
192
          address_city?: string;
193
          address_country?: string;
194
          address_line1?: string;
195
          address_line2?: string;
196
          address_state?: string;
197
          address_zip?: string;
198
          currency?: string;
199
          cvc?: string;
200
          exp_month: string;
201
          exp_year: string;
202
          name?: string;
203
          networks?: {
204
            preferred?: "cartes_bancaires" | "mastercard" | "visa";
205
            [k: string]: unknown;
206
          };
207
          number: string;
208
          [k: string]: unknown;
209
        }
210
      | string;
211
    customer?: string;
212
    cvc_update?: { cvc: string; [k: string]: unknown };
213
    expand?: string[];
214
    person?: {
215
      additional_tos_acceptances?: {
216
        account?: {
217
          date?: number;
218
          ip?: string;
219
          user_agent?: string | "";
220
          [k: string]: unknown;
221
        };
222
        [k: string]: unknown;
223
      };
224
      address?: {
225
        city?: string;
226
        country?: string;
227
        line1?: string;
228
        line2?: string;
229
        postal_code?: string;
230
        state?: string;
231
        [k: string]: unknown;
232
      };
233
      address_kana?: {
234
        city?: string;
235
        country?: string;
236
        line1?: string;
237
        line2?: string;
238
        postal_code?: string;
239
        state?: string;
240
        town?: string;
241
        [k: string]: unknown;
242
      };
243
      address_kanji?: {
244
        city?: string;
245
        country?: string;
246
        line1?: string;
247
        line2?: string;
248
        postal_code?: string;
249
        state?: string;
250
        town?: string;
251
        [k: string]: unknown;
252
      };
253
      dob?:
254
        | { day: number; month: number; year: number; [k: string]: unknown }
255
        | "";
256
      documents?: {
257
        company_authorization?: {
258
          files?: (string | "")[];
259
          [k: string]: unknown;
260
        };
261
        passport?: { files?: (string | "")[]; [k: string]: unknown };
262
        visa?: { files?: (string | "")[]; [k: string]: unknown };
263
        [k: string]: unknown;
264
      };
265
      email?: string;
266
      first_name?: string;
267
      first_name_kana?: string;
268
      first_name_kanji?: string;
269
      full_name_aliases?: string[] | "";
270
      gender?: string;
271
      id_number?: string;
272
      id_number_secondary?: string;
273
      last_name?: string;
274
      last_name_kana?: string;
275
      last_name_kanji?: string;
276
      maiden_name?: string;
277
      metadata?: { [k: string]: string } | "";
278
      nationality?: string;
279
      phone?: string;
280
      political_exposure?: string;
281
      registered_address?: {
282
        city?: string;
283
        country?: string;
284
        line1?: string;
285
        line2?: string;
286
        postal_code?: string;
287
        state?: string;
288
        [k: string]: unknown;
289
      };
290
      relationship?: {
291
        director?: boolean;
292
        executive?: boolean;
293
        legal_guardian?: boolean;
294
        owner?: boolean;
295
        percent_ownership?: number | "";
296
        representative?: boolean;
297
        title?: string;
298
        [k: string]: unknown;
299
      };
300
      ssn_last_4?: string;
301
      verification?: {
302
        additional_document?: {
303
          back?: string;
304
          front?: string;
305
          [k: string]: unknown;
306
        };
307
        document?: { back?: string; front?: string; [k: string]: unknown };
308
        [k: string]: unknown;
309
      };
310
      [k: string]: unknown;
311
    };
312
    pii?: { id_number?: string; [k: string]: unknown };
313
  }
314
) {
315
  const url = new URL(`https://api.stripe.com/v1/tokens`);
316

317
  const response = await fetch(url, {
318
    method: "POST",
319
    headers: {
320
      "Content-Type": "application/x-www-form-urlencoded",
321
      Authorization: "Bearer " + auth.token,
322
    },
323
    body: encodeParams(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

332
function encodeParams(o: any) {
333
  function iter(o: any, path: string) {
334
    if (Array.isArray(o)) {
335
      o.forEach(function (a) {
336
        iter(a, path + "[]");
337
      });
338
      return;
339
    }
340
    if (o !== null && typeof o === "object") {
341
      Object.keys(o).forEach(function (k) {
342
        iter(o[k], path + "[" + k + "]");
343
      });
344
      return;
345
    }
346
    data.push(path + "=" + o);
347
  }
348
  const data: string[] = [];
349
  Object.keys(o).forEach(function (k) {
350
    if (o[k] !== undefined) {
351
      iter(o[k], k);
352
    }
353
  });
354
  return new URLSearchParams(data.join("&"));
355
}
356