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 |
|