Post webhook endpoints

A webhook endpoint must have a url and a list of enabled_events. You may optionally specify the Boolean connect parameter. If set to true, then a Connect webhook endpoint that notifies the specified url about events from all connected accounts is created; otherwise an account webhook endpoint that notifies the specified url only about events from your account is created. You can also create webhook endpoints in the webhooks settings section of the Dashboard.

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 webhook endpoints
6
 * A webhook endpoint must have a url and a list of enabled_events. You may optionally specify the Boolean connect parameter. If set to true, then a Connect webhook endpoint that notifies the specified url about events from all connected accounts is created; otherwise an account webhook endpoint that notifies the specified url only about events from your account is created. You can also create webhook endpoints in the webhooks settings section of the Dashboard.
7
 */
8
export async function main(
9
  auth: Stripe,
10
  body: {
11
    api_version?:
12
      | "2011-01-01"
13
      | "2011-06-21"
14
      | "2011-06-28"
15
      | "2011-08-01"
16
      | "2011-09-15"
17
      | "2011-11-17"
18
      | "2012-02-23"
19
      | "2012-03-25"
20
      | "2012-06-18"
21
      | "2012-06-28"
22
      | "2012-07-09"
23
      | "2012-09-24"
24
      | "2012-10-26"
25
      | "2012-11-07"
26
      | "2013-02-11"
27
      | "2013-02-13"
28
      | "2013-07-05"
29
      | "2013-08-12"
30
      | "2013-08-13"
31
      | "2013-10-29"
32
      | "2013-12-03"
33
      | "2014-01-31"
34
      | "2014-03-13"
35
      | "2014-03-28"
36
      | "2014-05-19"
37
      | "2014-06-13"
38
      | "2014-06-17"
39
      | "2014-07-22"
40
      | "2014-07-26"
41
      | "2014-08-04"
42
      | "2014-08-20"
43
      | "2014-09-08"
44
      | "2014-10-07"
45
      | "2014-11-05"
46
      | "2014-11-20"
47
      | "2014-12-08"
48
      | "2014-12-17"
49
      | "2014-12-22"
50
      | "2015-01-11"
51
      | "2015-01-26"
52
      | "2015-02-10"
53
      | "2015-02-16"
54
      | "2015-02-18"
55
      | "2015-03-24"
56
      | "2015-04-07"
57
      | "2015-06-15"
58
      | "2015-07-07"
59
      | "2015-07-13"
60
      | "2015-07-28"
61
      | "2015-08-07"
62
      | "2015-08-19"
63
      | "2015-09-03"
64
      | "2015-09-08"
65
      | "2015-09-23"
66
      | "2015-10-01"
67
      | "2015-10-12"
68
      | "2015-10-16"
69
      | "2016-02-03"
70
      | "2016-02-19"
71
      | "2016-02-22"
72
      | "2016-02-23"
73
      | "2016-02-29"
74
      | "2016-03-07"
75
      | "2016-06-15"
76
      | "2016-07-06"
77
      | "2016-10-19"
78
      | "2017-01-27"
79
      | "2017-02-14"
80
      | "2017-04-06"
81
      | "2017-05-25"
82
      | "2017-06-05"
83
      | "2017-08-15"
84
      | "2017-12-14"
85
      | "2018-01-23"
86
      | "2018-02-05"
87
      | "2018-02-06"
88
      | "2018-02-28"
89
      | "2018-05-21"
90
      | "2018-07-27"
91
      | "2018-08-23"
92
      | "2018-09-06"
93
      | "2018-09-24"
94
      | "2018-10-31"
95
      | "2018-11-08"
96
      | "2019-02-11"
97
      | "2019-02-19"
98
      | "2019-03-14"
99
      | "2019-05-16"
100
      | "2019-08-14"
101
      | "2019-09-09"
102
      | "2019-10-08"
103
      | "2019-10-17"
104
      | "2019-11-05"
105
      | "2019-12-03"
106
      | "2020-03-02"
107
      | "2020-08-27"
108
      | "2022-08-01"
109
      | "2022-11-15"
110
      | "2023-08-16"
111
      | "2023-10-16";
112
    connect?: boolean;
113
    description?: string | "";
114
    enabled_events: (
115
      | "*"
116
      | "account.application.authorized"
117
      | "account.application.deauthorized"
118
      | "account.external_account.created"
119
      | "account.external_account.deleted"
120
      | "account.external_account.updated"
121
      | "account.updated"
122
      | "application_fee.created"
123
      | "application_fee.refund.updated"
124
      | "application_fee.refunded"
125
      | "balance.available"
126
      | "billing_portal.configuration.created"
127
      | "billing_portal.configuration.updated"
128
      | "billing_portal.session.created"
129
      | "capability.updated"
130
      | "cash_balance.funds_available"
131
      | "charge.captured"
132
      | "charge.dispute.closed"
133
      | "charge.dispute.created"
134
      | "charge.dispute.funds_reinstated"
135
      | "charge.dispute.funds_withdrawn"
136
      | "charge.dispute.updated"
137
      | "charge.expired"
138
      | "charge.failed"
139
      | "charge.pending"
140
      | "charge.refund.updated"
141
      | "charge.refunded"
142
      | "charge.succeeded"
143
      | "charge.updated"
144
      | "checkout.session.async_payment_failed"
145
      | "checkout.session.async_payment_succeeded"
146
      | "checkout.session.completed"
147
      | "checkout.session.expired"
148
      | "climate.order.canceled"
149
      | "climate.order.created"
150
      | "climate.order.delayed"
151
      | "climate.order.delivered"
152
      | "climate.order.product_substituted"
153
      | "climate.product.created"
154
      | "climate.product.pricing_updated"
155
      | "coupon.created"
156
      | "coupon.deleted"
157
      | "coupon.updated"
158
      | "credit_note.created"
159
      | "credit_note.updated"
160
      | "credit_note.voided"
161
      | "customer.created"
162
      | "customer.deleted"
163
      | "customer.discount.created"
164
      | "customer.discount.deleted"
165
      | "customer.discount.updated"
166
      | "customer.source.created"
167
      | "customer.source.deleted"
168
      | "customer.source.expiring"
169
      | "customer.source.updated"
170
      | "customer.subscription.created"
171
      | "customer.subscription.deleted"
172
      | "customer.subscription.paused"
173
      | "customer.subscription.pending_update_applied"
174
      | "customer.subscription.pending_update_expired"
175
      | "customer.subscription.resumed"
176
      | "customer.subscription.trial_will_end"
177
      | "customer.subscription.updated"
178
      | "customer.tax_id.created"
179
      | "customer.tax_id.deleted"
180
      | "customer.tax_id.updated"
181
      | "customer.updated"
182
      | "customer_cash_balance_transaction.created"
183
      | "file.created"
184
      | "financial_connections.account.created"
185
      | "financial_connections.account.deactivated"
186
      | "financial_connections.account.disconnected"
187
      | "financial_connections.account.reactivated"
188
      | "financial_connections.account.refreshed_balance"
189
      | "financial_connections.account.refreshed_ownership"
190
      | "financial_connections.account.refreshed_transactions"
191
      | "identity.verification_session.canceled"
192
      | "identity.verification_session.created"
193
      | "identity.verification_session.processing"
194
      | "identity.verification_session.redacted"
195
      | "identity.verification_session.requires_input"
196
      | "identity.verification_session.verified"
197
      | "invoice.created"
198
      | "invoice.deleted"
199
      | "invoice.finalization_failed"
200
      | "invoice.finalized"
201
      | "invoice.marked_uncollectible"
202
      | "invoice.paid"
203
      | "invoice.payment_action_required"
204
      | "invoice.payment_failed"
205
      | "invoice.payment_succeeded"
206
      | "invoice.sent"
207
      | "invoice.upcoming"
208
      | "invoice.updated"
209
      | "invoice.voided"
210
      | "invoiceitem.created"
211
      | "invoiceitem.deleted"
212
      | "issuing_authorization.created"
213
      | "issuing_authorization.request"
214
      | "issuing_authorization.updated"
215
      | "issuing_card.created"
216
      | "issuing_card.updated"
217
      | "issuing_cardholder.created"
218
      | "issuing_cardholder.updated"
219
      | "issuing_dispute.closed"
220
      | "issuing_dispute.created"
221
      | "issuing_dispute.funds_reinstated"
222
      | "issuing_dispute.submitted"
223
      | "issuing_dispute.updated"
224
      | "issuing_token.created"
225
      | "issuing_token.updated"
226
      | "issuing_transaction.created"
227
      | "issuing_transaction.updated"
228
      | "mandate.updated"
229
      | "payment_intent.amount_capturable_updated"
230
      | "payment_intent.canceled"
231
      | "payment_intent.created"
232
      | "payment_intent.partially_funded"
233
      | "payment_intent.payment_failed"
234
      | "payment_intent.processing"
235
      | "payment_intent.requires_action"
236
      | "payment_intent.succeeded"
237
      | "payment_link.created"
238
      | "payment_link.updated"
239
      | "payment_method.attached"
240
      | "payment_method.automatically_updated"
241
      | "payment_method.detached"
242
      | "payment_method.updated"
243
      | "payout.canceled"
244
      | "payout.created"
245
      | "payout.failed"
246
      | "payout.paid"
247
      | "payout.reconciliation_completed"
248
      | "payout.updated"
249
      | "person.created"
250
      | "person.deleted"
251
      | "person.updated"
252
      | "plan.created"
253
      | "plan.deleted"
254
      | "plan.updated"
255
      | "price.created"
256
      | "price.deleted"
257
      | "price.updated"
258
      | "product.created"
259
      | "product.deleted"
260
      | "product.updated"
261
      | "promotion_code.created"
262
      | "promotion_code.updated"
263
      | "quote.accepted"
264
      | "quote.canceled"
265
      | "quote.created"
266
      | "quote.finalized"
267
      | "radar.early_fraud_warning.created"
268
      | "radar.early_fraud_warning.updated"
269
      | "refund.created"
270
      | "refund.updated"
271
      | "reporting.report_run.failed"
272
      | "reporting.report_run.succeeded"
273
      | "reporting.report_type.updated"
274
      | "review.closed"
275
      | "review.opened"
276
      | "setup_intent.canceled"
277
      | "setup_intent.created"
278
      | "setup_intent.requires_action"
279
      | "setup_intent.setup_failed"
280
      | "setup_intent.succeeded"
281
      | "sigma.scheduled_query_run.created"
282
      | "source.canceled"
283
      | "source.chargeable"
284
      | "source.failed"
285
      | "source.mandate_notification"
286
      | "source.refund_attributes_required"
287
      | "source.transaction.created"
288
      | "source.transaction.updated"
289
      | "subscription_schedule.aborted"
290
      | "subscription_schedule.canceled"
291
      | "subscription_schedule.completed"
292
      | "subscription_schedule.created"
293
      | "subscription_schedule.expiring"
294
      | "subscription_schedule.released"
295
      | "subscription_schedule.updated"
296
      | "tax.settings.updated"
297
      | "tax_rate.created"
298
      | "tax_rate.updated"
299
      | "terminal.reader.action_failed"
300
      | "terminal.reader.action_succeeded"
301
      | "test_helpers.test_clock.advancing"
302
      | "test_helpers.test_clock.created"
303
      | "test_helpers.test_clock.deleted"
304
      | "test_helpers.test_clock.internal_failure"
305
      | "test_helpers.test_clock.ready"
306
      | "topup.canceled"
307
      | "topup.created"
308
      | "topup.failed"
309
      | "topup.reversed"
310
      | "topup.succeeded"
311
      | "transfer.created"
312
      | "transfer.reversed"
313
      | "transfer.updated"
314
      | "treasury.credit_reversal.created"
315
      | "treasury.credit_reversal.posted"
316
      | "treasury.debit_reversal.completed"
317
      | "treasury.debit_reversal.created"
318
      | "treasury.debit_reversal.initial_credit_granted"
319
      | "treasury.financial_account.closed"
320
      | "treasury.financial_account.created"
321
      | "treasury.financial_account.features_status_updated"
322
      | "treasury.inbound_transfer.canceled"
323
      | "treasury.inbound_transfer.created"
324
      | "treasury.inbound_transfer.failed"
325
      | "treasury.inbound_transfer.succeeded"
326
      | "treasury.outbound_payment.canceled"
327
      | "treasury.outbound_payment.created"
328
      | "treasury.outbound_payment.expected_arrival_date_updated"
329
      | "treasury.outbound_payment.failed"
330
      | "treasury.outbound_payment.posted"
331
      | "treasury.outbound_payment.returned"
332
      | "treasury.outbound_transfer.canceled"
333
      | "treasury.outbound_transfer.created"
334
      | "treasury.outbound_transfer.expected_arrival_date_updated"
335
      | "treasury.outbound_transfer.failed"
336
      | "treasury.outbound_transfer.posted"
337
      | "treasury.outbound_transfer.returned"
338
      | "treasury.received_credit.created"
339
      | "treasury.received_credit.failed"
340
      | "treasury.received_credit.succeeded"
341
      | "treasury.received_debit.created"
342
    )[];
343
    expand?: string[];
344
    metadata?: { [k: string]: string } | "";
345
    url: string;
346
  }
347
) {
348
  const url = new URL(`https://api.stripe.com/v1/webhook_endpoints`);
349

350
  const response = await fetch(url, {
351
    method: "POST",
352
    headers: {
353
      "Content-Type": "application/x-www-form-urlencoded",
354
      Authorization: "Bearer " + auth.token,
355
    },
356
    body: encodeParams(body),
357
  });
358
  if (!response.ok) {
359
    const text = await response.text();
360
    throw new Error(`${response.status} ${text}`);
361
  }
362
  return await response.json();
363
}
364

365
function encodeParams(o: any) {
366
  function iter(o: any, path: string) {
367
    if (Array.isArray(o)) {
368
      o.forEach(function (a) {
369
        iter(a, path + "[]");
370
      });
371
      return;
372
    }
373
    if (o !== null && typeof o === "object") {
374
      Object.keys(o).forEach(function (k) {
375
        iter(o[k], path + "[" + k + "]");
376
      });
377
      return;
378
    }
379
    data.push(path + "=" + o);
380
  }
381
  const data: string[] = [];
382
  Object.keys(o).forEach(function (k) {
383
    if (o[k] !== undefined) {
384
      iter(o[k], k);
385
    }
386
  });
387
  return new URLSearchParams(data.join("&"));
388
}
389