Post accounts

With Connect, you can create Stripe accounts for your users. To do this, you’ll first need to register your platform. If you’ve already collected information for your connected accounts, you can prefill that information when creating the account. Connect Onboarding won’t ask for the prefilled information during account onboarding. You can prefill any information on the account.

Script stripe Verified

by hugo697 · 10/30/2023

The script

Submitted by hugo697 Typescript (fetch-only)
Verified 354 days ago
1
type Stripe = {
2
  token: string;
3
};
4
/**
5
 * Post accounts
6
 * With Connect, you can create Stripe accounts for your users.
7
To do this, you’ll first need to register your platform.
8

9
If you’ve already collected information for your connected accounts, you can prefill that information when
10
creating the account. Connect Onboarding won’t ask for the prefilled information during account onboarding.
11
You can prefill any information on the account.
12
 */
13
export async function main(
14
  auth: Stripe,
15
  body: {
16
    account_token?: string;
17
    bank_account?:
18
      | {
19
          account_holder_name?: string;
20
          account_holder_type?: "company" | "individual";
21
          account_number: string;
22
          account_type?: "checking" | "futsu" | "savings" | "toza";
23
          country: string;
24
          currency?: string;
25
          documents?: {
26
            bank_account_ownership_verification?: {
27
              files?: string[];
28
              [k: string]: unknown;
29
            };
30
            [k: string]: unknown;
31
          };
32
          object?: "bank_account";
33
          routing_number?: string;
34
          [k: string]: unknown;
35
        }
36
      | string;
37
    business_profile?: {
38
      annual_revenue?: {
39
        amount: number;
40
        currency: string;
41
        fiscal_year_end: string;
42
        [k: string]: unknown;
43
      };
44
      estimated_worker_count?: number;
45
      mcc?: string;
46
      monthly_estimated_revenue?: {
47
        amount: number;
48
        currency: string;
49
        [k: string]: unknown;
50
      };
51
      name?: string;
52
      product_description?: string;
53
      support_address?: {
54
        city?: string;
55
        country?: string;
56
        line1?: string;
57
        line2?: string;
58
        postal_code?: string;
59
        state?: string;
60
        [k: string]: unknown;
61
      };
62
      support_email?: string;
63
      support_phone?: string;
64
      support_url?: string | "";
65
      url?: string;
66
      [k: string]: unknown;
67
    };
68
    business_type?:
69
      | "company"
70
      | "government_entity"
71
      | "individual"
72
      | "non_profit";
73
    capabilities?: {
74
      acss_debit_payments?: { requested?: boolean; [k: string]: unknown };
75
      affirm_payments?: { requested?: boolean; [k: string]: unknown };
76
      afterpay_clearpay_payments?: {
77
        requested?: boolean;
78
        [k: string]: unknown;
79
      };
80
      au_becs_debit_payments?: { requested?: boolean; [k: string]: unknown };
81
      bacs_debit_payments?: { requested?: boolean; [k: string]: unknown };
82
      bancontact_payments?: { requested?: boolean; [k: string]: unknown };
83
      bank_transfer_payments?: { requested?: boolean; [k: string]: unknown };
84
      blik_payments?: { requested?: boolean; [k: string]: unknown };
85
      boleto_payments?: { requested?: boolean; [k: string]: unknown };
86
      card_issuing?: { requested?: boolean; [k: string]: unknown };
87
      card_payments?: { requested?: boolean; [k: string]: unknown };
88
      cartes_bancaires_payments?: { requested?: boolean; [k: string]: unknown };
89
      cashapp_payments?: { requested?: boolean; [k: string]: unknown };
90
      eps_payments?: { requested?: boolean; [k: string]: unknown };
91
      fpx_payments?: { requested?: boolean; [k: string]: unknown };
92
      giropay_payments?: { requested?: boolean; [k: string]: unknown };
93
      grabpay_payments?: { requested?: boolean; [k: string]: unknown };
94
      ideal_payments?: { requested?: boolean; [k: string]: unknown };
95
      india_international_payments?: {
96
        requested?: boolean;
97
        [k: string]: unknown;
98
      };
99
      jcb_payments?: { requested?: boolean; [k: string]: unknown };
100
      klarna_payments?: { requested?: boolean; [k: string]: unknown };
101
      konbini_payments?: { requested?: boolean; [k: string]: unknown };
102
      legacy_payments?: { requested?: boolean; [k: string]: unknown };
103
      link_payments?: { requested?: boolean; [k: string]: unknown };
104
      oxxo_payments?: { requested?: boolean; [k: string]: unknown };
105
      p24_payments?: { requested?: boolean; [k: string]: unknown };
106
      paynow_payments?: { requested?: boolean; [k: string]: unknown };
107
      promptpay_payments?: { requested?: boolean; [k: string]: unknown };
108
      revolut_pay_payments?: { requested?: boolean; [k: string]: unknown };
109
      sepa_debit_payments?: { requested?: boolean; [k: string]: unknown };
110
      sofort_payments?: { requested?: boolean; [k: string]: unknown };
111
      swish_payments?: { requested?: boolean; [k: string]: unknown };
112
      tax_reporting_us_1099_k?: { requested?: boolean; [k: string]: unknown };
113
      tax_reporting_us_1099_misc?: {
114
        requested?: boolean;
115
        [k: string]: unknown;
116
      };
117
      transfers?: { requested?: boolean; [k: string]: unknown };
118
      treasury?: { requested?: boolean; [k: string]: unknown };
119
      us_bank_account_ach_payments?: {
120
        requested?: boolean;
121
        [k: string]: unknown;
122
      };
123
      zip_payments?: { requested?: boolean; [k: string]: unknown };
124
      [k: string]: unknown;
125
    };
126
    company?: {
127
      address?: {
128
        city?: string;
129
        country?: string;
130
        line1?: string;
131
        line2?: string;
132
        postal_code?: string;
133
        state?: string;
134
        [k: string]: unknown;
135
      };
136
      address_kana?: {
137
        city?: string;
138
        country?: string;
139
        line1?: string;
140
        line2?: string;
141
        postal_code?: string;
142
        state?: string;
143
        town?: string;
144
        [k: string]: unknown;
145
      };
146
      address_kanji?: {
147
        city?: string;
148
        country?: string;
149
        line1?: string;
150
        line2?: string;
151
        postal_code?: string;
152
        state?: string;
153
        town?: string;
154
        [k: string]: unknown;
155
      };
156
      directors_provided?: boolean;
157
      executives_provided?: boolean;
158
      export_license_id?: string;
159
      export_purpose_code?: string;
160
      name?: string;
161
      name_kana?: string;
162
      name_kanji?: string;
163
      owners_provided?: boolean;
164
      ownership_declaration?: {
165
        date?: number;
166
        ip?: string;
167
        user_agent?: string;
168
        [k: string]: unknown;
169
      };
170
      phone?: string;
171
      registration_number?: string;
172
      structure?:
173
        | ""
174
        | "free_zone_establishment"
175
        | "free_zone_llc"
176
        | "government_instrumentality"
177
        | "governmental_unit"
178
        | "incorporated_non_profit"
179
        | "incorporated_partnership"
180
        | "limited_liability_partnership"
181
        | "llc"
182
        | "multi_member_llc"
183
        | "private_company"
184
        | "private_corporation"
185
        | "private_partnership"
186
        | "public_company"
187
        | "public_corporation"
188
        | "public_partnership"
189
        | "registered_charity"
190
        | "single_member_llc"
191
        | "sole_establishment"
192
        | "sole_proprietorship"
193
        | "tax_exempt_government_instrumentality"
194
        | "unincorporated_association"
195
        | "unincorporated_non_profit"
196
        | "unincorporated_partnership";
197
      tax_id?: string;
198
      tax_id_registrar?: string;
199
      vat_id?: string;
200
      verification?: {
201
        document?: { back?: string; front?: string; [k: string]: unknown };
202
        [k: string]: unknown;
203
      };
204
      [k: string]: unknown;
205
    };
206
    country?: string;
207
    default_currency?: string;
208
    documents?: {
209
      bank_account_ownership_verification?: {
210
        files?: string[];
211
        [k: string]: unknown;
212
      };
213
      company_license?: { files?: string[]; [k: string]: unknown };
214
      company_memorandum_of_association?: {
215
        files?: string[];
216
        [k: string]: unknown;
217
      };
218
      company_ministerial_decree?: { files?: string[]; [k: string]: unknown };
219
      company_registration_verification?: {
220
        files?: string[];
221
        [k: string]: unknown;
222
      };
223
      company_tax_id_verification?: { files?: string[]; [k: string]: unknown };
224
      proof_of_registration?: { files?: string[]; [k: string]: unknown };
225
      [k: string]: unknown;
226
    };
227
    email?: string;
228
    expand?: string[];
229
    external_account?: string;
230
    individual?: {
231
      address?: {
232
        city?: string;
233
        country?: string;
234
        line1?: string;
235
        line2?: string;
236
        postal_code?: string;
237
        state?: string;
238
        [k: string]: unknown;
239
      };
240
      address_kana?: {
241
        city?: string;
242
        country?: string;
243
        line1?: string;
244
        line2?: string;
245
        postal_code?: string;
246
        state?: string;
247
        town?: string;
248
        [k: string]: unknown;
249
      };
250
      address_kanji?: {
251
        city?: string;
252
        country?: string;
253
        line1?: string;
254
        line2?: string;
255
        postal_code?: string;
256
        state?: string;
257
        town?: string;
258
        [k: string]: unknown;
259
      };
260
      dob?:
261
        | { day: number; month: number; year: number; [k: string]: unknown }
262
        | "";
263
      email?: string;
264
      first_name?: string;
265
      first_name_kana?: string;
266
      first_name_kanji?: string;
267
      full_name_aliases?: string[] | "";
268
      gender?: string;
269
      id_number?: string;
270
      id_number_secondary?: string;
271
      last_name?: string;
272
      last_name_kana?: string;
273
      last_name_kanji?: string;
274
      maiden_name?: string;
275
      metadata?: { [k: string]: string } | "";
276
      phone?: string;
277
      political_exposure?: "existing" | "none";
278
      registered_address?: {
279
        city?: string;
280
        country?: string;
281
        line1?: string;
282
        line2?: string;
283
        postal_code?: string;
284
        state?: string;
285
        [k: string]: unknown;
286
      };
287
      relationship?: {
288
        director?: boolean;
289
        executive?: boolean;
290
        owner?: boolean;
291
        percent_ownership?: number | "";
292
        title?: string;
293
        [k: string]: unknown;
294
      };
295
      ssn_last_4?: string;
296
      verification?: {
297
        additional_document?: {
298
          back?: string;
299
          front?: string;
300
          [k: string]: unknown;
301
        };
302
        document?: { back?: string; front?: string; [k: string]: unknown };
303
        [k: string]: unknown;
304
      };
305
      [k: string]: unknown;
306
    };
307
    metadata?: { [k: string]: string } | "";
308
    settings?: {
309
      bacs_debit_payments?: { display_name?: string; [k: string]: unknown };
310
      branding?: {
311
        icon?: string;
312
        logo?: string;
313
        primary_color?: string;
314
        secondary_color?: string;
315
        [k: string]: unknown;
316
      };
317
      card_issuing?: {
318
        tos_acceptance?: {
319
          date?: number;
320
          ip?: string;
321
          user_agent?: string | "";
322
          [k: string]: unknown;
323
        };
324
        [k: string]: unknown;
325
      };
326
      card_payments?: {
327
        decline_on?: {
328
          avs_failure?: boolean;
329
          cvc_failure?: boolean;
330
          [k: string]: unknown;
331
        };
332
        statement_descriptor_prefix?: string;
333
        statement_descriptor_prefix_kana?: string | "";
334
        statement_descriptor_prefix_kanji?: string | "";
335
        [k: string]: unknown;
336
      };
337
      payments?: {
338
        statement_descriptor?: string;
339
        statement_descriptor_kana?: string;
340
        statement_descriptor_kanji?: string;
341
        [k: string]: unknown;
342
      };
343
      payouts?: {
344
        debit_negative_balances?: boolean;
345
        schedule?: {
346
          delay_days?: "minimum" | number;
347
          interval?: "daily" | "manual" | "monthly" | "weekly";
348
          monthly_anchor?: number;
349
          weekly_anchor?:
350
            | "friday"
351
            | "monday"
352
            | "saturday"
353
            | "sunday"
354
            | "thursday"
355
            | "tuesday"
356
            | "wednesday";
357
          [k: string]: unknown;
358
        };
359
        statement_descriptor?: string;
360
        [k: string]: unknown;
361
      };
362
      treasury?: {
363
        tos_acceptance?: {
364
          date?: number;
365
          ip?: string;
366
          user_agent?: string | "";
367
          [k: string]: unknown;
368
        };
369
        [k: string]: unknown;
370
      };
371
      [k: string]: unknown;
372
    };
373
    tos_acceptance?: {
374
      date?: number;
375
      ip?: string;
376
      service_agreement?: string;
377
      user_agent?: string;
378
      [k: string]: unknown;
379
    };
380
    type?: "custom" | "express" | "standard";
381
  }
382
) {
383
  const url = new URL(`https://api.stripe.com/v1/accounts`);
384

385
  const response = await fetch(url, {
386
    method: "POST",
387
    headers: {
388
      "Content-Type": "application/x-www-form-urlencoded",
389
      Authorization: "Bearer " + auth.token,
390
    },
391
    body: encodeParams(body),
392
  });
393
  if (!response.ok) {
394
    const text = await response.text();
395
    throw new Error(`${response.status} ${text}`);
396
  }
397
  return await response.json();
398
}
399

400
function encodeParams(o: any) {
401
  function iter(o: any, path: string) {
402
    if (Array.isArray(o)) {
403
      o.forEach(function (a) {
404
        iter(a, path + "[]");
405
      });
406
      return;
407
    }
408
    if (o !== null && typeof o === "object") {
409
      Object.keys(o).forEach(function (k) {
410
        iter(o[k], path + "[" + k + "]");
411
      });
412
      return;
413
    }
414
    data.push(path + "=" + o);
415
  }
416
  const data: string[] = [];
417
  Object.keys(o).forEach(function (k) {
418
    if (o[k] !== undefined) {
419
      iter(o[k], k);
420
    }
421
  });
422
  return new URLSearchParams(data.join("&"));
423
}
424