@productcraft/waitlist 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.cts +2613 -201
- package/dist/index.d.ts +2613 -201
- package/package.json +8 -4
package/dist/index.d.ts
CHANGED
|
@@ -57,6 +57,30 @@ interface paths {
|
|
|
57
57
|
patch?: never;
|
|
58
58
|
trace?: never;
|
|
59
59
|
};
|
|
60
|
+
"/v1/workspaces/{workspace_id}/stats": {
|
|
61
|
+
parameters: {
|
|
62
|
+
query?: never;
|
|
63
|
+
header?: never;
|
|
64
|
+
path?: never;
|
|
65
|
+
cookie?: never;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Waitlist stats for a workspace
|
|
69
|
+
* @description Waitlist count, total entries, signups in the window, the most recent signup and a daily signup series, across every waitlist in the workspace.
|
|
70
|
+
*
|
|
71
|
+
* **Active** means a signup: a new waitlist entry.
|
|
72
|
+
*
|
|
73
|
+
* Days are UTC. Counts only: no entrant emails, names, referrers or IPs. Cached for up to 60 seconds (`generated_at`).
|
|
74
|
+
*/
|
|
75
|
+
get: operations["WorkspaceStatsController_get"];
|
|
76
|
+
put?: never;
|
|
77
|
+
post?: never;
|
|
78
|
+
delete?: never;
|
|
79
|
+
options?: never;
|
|
80
|
+
head?: never;
|
|
81
|
+
patch?: never;
|
|
82
|
+
trace?: never;
|
|
83
|
+
};
|
|
60
84
|
"/v1/workspaces/{workspace_id}/waitlist/settings": {
|
|
61
85
|
parameters: {
|
|
62
86
|
query?: never;
|
|
@@ -64,7 +88,10 @@ interface paths {
|
|
|
64
88
|
path?: never;
|
|
65
89
|
cookie?: never;
|
|
66
90
|
};
|
|
67
|
-
/**
|
|
91
|
+
/**
|
|
92
|
+
* Read workspace-level Waitlist defaults
|
|
93
|
+
* @description The settings plus `email_setup` (whether Waitlist emails can go out and what is missing; the sender domain and template names are checked against Mail, cached for up to 60 seconds) and `skipped_sends` (emails not sent in the last 7 days because the setup was incomplete). Waitlist never falls back to a ProductCraft sender: an email that cannot go out is recorded, not sent.
|
|
94
|
+
*/
|
|
68
95
|
get: operations["SettingsController_get"];
|
|
69
96
|
/** Update workspace-level Waitlist defaults */
|
|
70
97
|
put: operations["SettingsController_update"];
|
|
@@ -75,6 +102,26 @@ interface paths {
|
|
|
75
102
|
patch?: never;
|
|
76
103
|
trace?: never;
|
|
77
104
|
};
|
|
105
|
+
"/v1/workspaces/{workspace_id}/waitlist/settings/notifications/{slot}/test": {
|
|
106
|
+
parameters: {
|
|
107
|
+
query?: never;
|
|
108
|
+
header?: never;
|
|
109
|
+
path?: never;
|
|
110
|
+
cookie?: never;
|
|
111
|
+
};
|
|
112
|
+
get?: never;
|
|
113
|
+
put?: never;
|
|
114
|
+
/**
|
|
115
|
+
* Send me a test of one Waitlist email
|
|
116
|
+
* @description Sends the slot's real Mail template, with the workspace's real Waitlist sender (the workspace default or the custom address) and example values, to your own verified account address. It cannot be sent anywhere else. It uses your own Mail access, goes through the same send path as real emails, and shows up in Mail > Emails. At most 10 tests per person per hour. Not available to API keys (a key has no inbox).
|
|
117
|
+
*/
|
|
118
|
+
post: operations["SettingsController_sendTest"];
|
|
119
|
+
delete?: never;
|
|
120
|
+
options?: never;
|
|
121
|
+
head?: never;
|
|
122
|
+
patch?: never;
|
|
123
|
+
trace?: never;
|
|
124
|
+
};
|
|
78
125
|
"/v1/workspaces/{workspace_id}/waitlists": {
|
|
79
126
|
parameters: {
|
|
80
127
|
query?: never;
|
|
@@ -85,7 +132,10 @@ interface paths {
|
|
|
85
132
|
/** List waitlists in this workspace */
|
|
86
133
|
get: operations["WaitlistController_list"];
|
|
87
134
|
put?: never;
|
|
88
|
-
/**
|
|
135
|
+
/**
|
|
136
|
+
* Create a waitlist (workspace-scoped)
|
|
137
|
+
* @description Pass `status: "active"` to accept public sign-ups straight away. Without it the waitlist starts as a draft, and the response says so in `accepting_signups: false` and `signups_note`.
|
|
138
|
+
*/
|
|
89
139
|
post: operations["WaitlistController_create"];
|
|
90
140
|
delete?: never;
|
|
91
141
|
options?: never;
|
|
@@ -136,7 +186,10 @@ interface paths {
|
|
|
136
186
|
path?: never;
|
|
137
187
|
cookie?: never;
|
|
138
188
|
};
|
|
139
|
-
/**
|
|
189
|
+
/**
|
|
190
|
+
* Aggregate counts, viral coefficient, top referrers + referrals
|
|
191
|
+
* @description Test entries ("Add test signup") are left out unless `include_test=true`.
|
|
192
|
+
*/
|
|
140
193
|
get: operations["AnalyticsController_get"];
|
|
141
194
|
put?: never;
|
|
142
195
|
post?: never;
|
|
@@ -170,7 +223,7 @@ interface paths {
|
|
|
170
223
|
path?: never;
|
|
171
224
|
cookie?: never;
|
|
172
225
|
};
|
|
173
|
-
/** List entries on a waitlist (paginated) */
|
|
226
|
+
/** List entries on a waitlist (queue-position order, cursor-paginated). Filterable by status, free-text search across email/name, and a created_at window. */
|
|
174
227
|
get: operations["EntryController_list"];
|
|
175
228
|
put?: never;
|
|
176
229
|
post?: never;
|
|
@@ -204,7 +257,7 @@ interface paths {
|
|
|
204
257
|
path?: never;
|
|
205
258
|
cookie?: never;
|
|
206
259
|
};
|
|
207
|
-
/**
|
|
260
|
+
/** Entry count for a waitlist (test entries left out unless include_test=true) */
|
|
208
261
|
get: operations["EntryController_count"];
|
|
209
262
|
put?: never;
|
|
210
263
|
post?: never;
|
|
@@ -221,7 +274,7 @@ interface paths {
|
|
|
221
274
|
path?: never;
|
|
222
275
|
cookie?: never;
|
|
223
276
|
};
|
|
224
|
-
/** Stream every entry as CSV (admin export) */
|
|
277
|
+
/** Stream every entry as CSV (admin export; test entries left out unless include_test=true) */
|
|
225
278
|
get: operations["EntryController_exportCsv"];
|
|
226
279
|
put?: never;
|
|
227
280
|
post?: never;
|
|
@@ -267,6 +320,26 @@ interface paths {
|
|
|
267
320
|
patch?: never;
|
|
268
321
|
trace?: never;
|
|
269
322
|
};
|
|
323
|
+
"/v1/workspaces/{workspace_id}/waitlists/{waitlist_id}/test-entries": {
|
|
324
|
+
parameters: {
|
|
325
|
+
query?: never;
|
|
326
|
+
header?: never;
|
|
327
|
+
path?: never;
|
|
328
|
+
cookie?: never;
|
|
329
|
+
};
|
|
330
|
+
get?: never;
|
|
331
|
+
put?: never;
|
|
332
|
+
/**
|
|
333
|
+
* Add a test signup
|
|
334
|
+
* @description Creates an entry marked `is_test` with a generated Amazon SES mailbox-simulator address (`success+test-…@simulator.amazonses.com`). Works on draft and paused waitlists and ignores `max_entries`. The entry shows in the entries list, takes a negative position, and is left out of counts, analytics, exports and webhooks unless asked. No email is sent unless `send_welcome_email` is true. Delete it like any other entry.
|
|
335
|
+
*/
|
|
336
|
+
post: operations["TestEntryController_create"];
|
|
337
|
+
delete?: never;
|
|
338
|
+
options?: never;
|
|
339
|
+
head?: never;
|
|
340
|
+
patch?: never;
|
|
341
|
+
trace?: never;
|
|
342
|
+
};
|
|
270
343
|
"/v1/workspaces/{workspace_id}/waitlists/{waitlist_id}/variants": {
|
|
271
344
|
parameters: {
|
|
272
345
|
query?: never;
|
|
@@ -274,7 +347,7 @@ interface paths {
|
|
|
274
347
|
path?: never;
|
|
275
348
|
cookie?: never;
|
|
276
349
|
};
|
|
277
|
-
/** List
|
|
350
|
+
/** List variants on a waitlist (cursor-paginated). BREAKING: this endpoint used to return a bare JSON array; it now returns the standard `{ data, pagination }` envelope. */
|
|
278
351
|
get: operations["VariantController_list"];
|
|
279
352
|
put?: never;
|
|
280
353
|
/** Create a variant */
|
|
@@ -310,10 +383,18 @@ interface paths {
|
|
|
310
383
|
path?: never;
|
|
311
384
|
cookie?: never;
|
|
312
385
|
};
|
|
313
|
-
/**
|
|
386
|
+
/**
|
|
387
|
+
* List webhooks for the workspace, newest first, cursor-paginated (secrets masked)
|
|
388
|
+
* @deprecated
|
|
389
|
+
* @description Deprecated: use `/v1/workspaces/{workspace_id}/webhooks/endpoints` (event descriptions, Send test that reports the result, event log, replay, rotation with a grace period). Responses carry `Deprecation: true` and `Sunset: Fri, 15 Jan 2027 00:00:00 GMT`.
|
|
390
|
+
*/
|
|
314
391
|
get: operations["WebhookController_list"];
|
|
315
392
|
put?: never;
|
|
316
|
-
/**
|
|
393
|
+
/**
|
|
394
|
+
* Create a workspace webhook. The response includes the signing secret in clear EXACTLY ONCE — copy it now.
|
|
395
|
+
* @deprecated
|
|
396
|
+
* @description Deprecated: use `/v1/workspaces/{workspace_id}/webhooks/endpoints` (event descriptions, Send test that reports the result, event log, replay, rotation with a grace period). Responses carry `Deprecation: true` and `Sunset: Fri, 15 Jan 2027 00:00:00 GMT`.
|
|
397
|
+
*/
|
|
317
398
|
post: operations["WebhookController_create"];
|
|
318
399
|
delete?: never;
|
|
319
400
|
options?: never;
|
|
@@ -321,6 +402,172 @@ interface paths {
|
|
|
321
402
|
patch?: never;
|
|
322
403
|
trace?: never;
|
|
323
404
|
};
|
|
405
|
+
"/v1/workspaces/{workspace_id}/webhooks/endpoints": {
|
|
406
|
+
parameters: {
|
|
407
|
+
query?: never;
|
|
408
|
+
header?: never;
|
|
409
|
+
path?: never;
|
|
410
|
+
cookie?: never;
|
|
411
|
+
};
|
|
412
|
+
/**
|
|
413
|
+
* List webhook endpoints, oldest first.
|
|
414
|
+
* @description At most 10, so this is always one page. Signing secrets are never returned here, only their last 4 characters.
|
|
415
|
+
*/
|
|
416
|
+
get: operations["WebhooksController_waitlist_workspace_listEndpoints"];
|
|
417
|
+
put?: never;
|
|
418
|
+
/**
|
|
419
|
+
* Add a webhook endpoint. Returns its signing secret once.
|
|
420
|
+
* @description Deliveries are signed with the Standard Webhooks headers `webhook-id`, `webhook-timestamp` and `webhook-signature` (`v1,<base64 HMAC-SHA256 of "<id>.<timestamp>.<body>">`); the returned `whsec_…` secret works unchanged with any Standard Webhooks library. Failed deliveries are retried after 1 min, 5 min, 30 min, 2 h, 6 h and 24 h.
|
|
421
|
+
*/
|
|
422
|
+
post: operations["WebhooksController_waitlist_workspace_createEndpoint"];
|
|
423
|
+
delete?: never;
|
|
424
|
+
options?: never;
|
|
425
|
+
head?: never;
|
|
426
|
+
patch?: never;
|
|
427
|
+
trace?: never;
|
|
428
|
+
};
|
|
429
|
+
"/v1/workspaces/{workspace_id}/webhooks/endpoints/{endpoint_id}": {
|
|
430
|
+
parameters: {
|
|
431
|
+
query?: never;
|
|
432
|
+
header?: never;
|
|
433
|
+
path?: never;
|
|
434
|
+
cookie?: never;
|
|
435
|
+
};
|
|
436
|
+
/** Get one webhook endpoint (without its secret). */
|
|
437
|
+
get: operations["WebhooksController_waitlist_workspace_getEndpoint"];
|
|
438
|
+
put?: never;
|
|
439
|
+
post?: never;
|
|
440
|
+
/**
|
|
441
|
+
* Delete a webhook endpoint.
|
|
442
|
+
* @description Queued retries are dropped. Its past attempts stay in the event log until the events expire.
|
|
443
|
+
*/
|
|
444
|
+
delete: operations["WebhooksController_waitlist_workspace_deleteEndpoint"];
|
|
445
|
+
options?: never;
|
|
446
|
+
head?: never;
|
|
447
|
+
/**
|
|
448
|
+
* Change a webhook endpoint: URL, description, events, on/off.
|
|
449
|
+
* @description Only the fields sent change. `enabled: true` (or a new URL) also clears an automatic disable. Switching off cancels queued retries. The secret is unchanged; rotate it with `POST …/rotate-secret`.
|
|
450
|
+
*/
|
|
451
|
+
patch: operations["WebhooksController_waitlist_workspace_updateEndpoint"];
|
|
452
|
+
trace?: never;
|
|
453
|
+
};
|
|
454
|
+
"/v1/workspaces/{workspace_id}/webhooks/endpoints/{endpoint_id}/rotate-secret": {
|
|
455
|
+
parameters: {
|
|
456
|
+
query?: never;
|
|
457
|
+
header?: never;
|
|
458
|
+
path?: never;
|
|
459
|
+
cookie?: never;
|
|
460
|
+
};
|
|
461
|
+
get?: never;
|
|
462
|
+
put?: never;
|
|
463
|
+
/**
|
|
464
|
+
* Rotate the signing secret. The new one is returned once.
|
|
465
|
+
* @description For `grace_hours` (default 24) the previous secret keeps signing too: `webhook-signature` then lists one `v1,` signature per secret, so receivers can switch over without dropping a delivery.
|
|
466
|
+
*/
|
|
467
|
+
post: operations["WebhooksController_waitlist_workspace_rotateSecret"];
|
|
468
|
+
delete?: never;
|
|
469
|
+
options?: never;
|
|
470
|
+
head?: never;
|
|
471
|
+
patch?: never;
|
|
472
|
+
trace?: never;
|
|
473
|
+
};
|
|
474
|
+
"/v1/workspaces/{workspace_id}/webhooks/endpoints/{endpoint_id}/test": {
|
|
475
|
+
parameters: {
|
|
476
|
+
query?: never;
|
|
477
|
+
header?: never;
|
|
478
|
+
path?: never;
|
|
479
|
+
cookie?: never;
|
|
480
|
+
};
|
|
481
|
+
get?: never;
|
|
482
|
+
put?: never;
|
|
483
|
+
/**
|
|
484
|
+
* Send a test event to this endpoint now and return the result.
|
|
485
|
+
* @description Delivers the catalogue example of `event_type`, signed like any delivery, with `"test": true` in the body. Works while the endpoint is switched off or not subscribed to that type, is logged in the event log, and is never retried or counted toward an automatic disable. Waits up to 15 s for your receiver.
|
|
486
|
+
*/
|
|
487
|
+
post: operations["WebhooksController_waitlist_workspace_sendTest"];
|
|
488
|
+
delete?: never;
|
|
489
|
+
options?: never;
|
|
490
|
+
head?: never;
|
|
491
|
+
patch?: never;
|
|
492
|
+
trace?: never;
|
|
493
|
+
};
|
|
494
|
+
"/v1/workspaces/{workspace_id}/webhooks/event-types": {
|
|
495
|
+
parameters: {
|
|
496
|
+
query?: never;
|
|
497
|
+
header?: never;
|
|
498
|
+
path?: never;
|
|
499
|
+
cookie?: never;
|
|
500
|
+
};
|
|
501
|
+
/**
|
|
502
|
+
* List the events an endpoint can subscribe to.
|
|
503
|
+
* @description Each type with a plain description, its group and an example `data` object (what "Send test" delivers).
|
|
504
|
+
*/
|
|
505
|
+
get: operations["WebhooksController_waitlist_workspace_listEventTypes"];
|
|
506
|
+
put?: never;
|
|
507
|
+
post?: never;
|
|
508
|
+
delete?: never;
|
|
509
|
+
options?: never;
|
|
510
|
+
head?: never;
|
|
511
|
+
patch?: never;
|
|
512
|
+
trace?: never;
|
|
513
|
+
};
|
|
514
|
+
"/v1/workspaces/{workspace_id}/webhooks/events": {
|
|
515
|
+
parameters: {
|
|
516
|
+
query?: never;
|
|
517
|
+
header?: never;
|
|
518
|
+
path?: never;
|
|
519
|
+
cookie?: never;
|
|
520
|
+
};
|
|
521
|
+
/**
|
|
522
|
+
* List webhook events, newest first (kept for 30 days).
|
|
523
|
+
* @description Every event logged while at least one endpoint existed, with the latest state per endpoint and when the next retry is due.
|
|
524
|
+
*/
|
|
525
|
+
get: operations["WebhooksController_waitlist_workspace_listEvents"];
|
|
526
|
+
put?: never;
|
|
527
|
+
post?: never;
|
|
528
|
+
delete?: never;
|
|
529
|
+
options?: never;
|
|
530
|
+
head?: never;
|
|
531
|
+
patch?: never;
|
|
532
|
+
trace?: never;
|
|
533
|
+
};
|
|
534
|
+
"/v1/workspaces/{workspace_id}/webhooks/events/{event_id}": {
|
|
535
|
+
parameters: {
|
|
536
|
+
query?: never;
|
|
537
|
+
header?: never;
|
|
538
|
+
path?: never;
|
|
539
|
+
cookie?: never;
|
|
540
|
+
};
|
|
541
|
+
/** Get one webhook event with every delivery attempt. */
|
|
542
|
+
get: operations["WebhooksController_waitlist_workspace_getEvent"];
|
|
543
|
+
put?: never;
|
|
544
|
+
post?: never;
|
|
545
|
+
delete?: never;
|
|
546
|
+
options?: never;
|
|
547
|
+
head?: never;
|
|
548
|
+
patch?: never;
|
|
549
|
+
trace?: never;
|
|
550
|
+
};
|
|
551
|
+
"/v1/workspaces/{workspace_id}/webhooks/events/{event_id}/replay": {
|
|
552
|
+
parameters: {
|
|
553
|
+
query?: never;
|
|
554
|
+
header?: never;
|
|
555
|
+
path?: never;
|
|
556
|
+
cookie?: never;
|
|
557
|
+
};
|
|
558
|
+
get?: never;
|
|
559
|
+
put?: never;
|
|
560
|
+
/**
|
|
561
|
+
* Send a logged event again, to its endpoints or to one endpoint.
|
|
562
|
+
* @description Same body and `webhook-id`, freshly signed, to every switched-on endpoint that receives this event type now, or only to `endpoint_id`. Waits for the receivers (up to 15 s each) and returns the attempts. A success cancels a retry still queued for that endpoint.
|
|
563
|
+
*/
|
|
564
|
+
post: operations["WebhooksController_waitlist_workspace_replay"];
|
|
565
|
+
delete?: never;
|
|
566
|
+
options?: never;
|
|
567
|
+
head?: never;
|
|
568
|
+
patch?: never;
|
|
569
|
+
trace?: never;
|
|
570
|
+
};
|
|
324
571
|
"/v1/workspaces/{workspace_id}/webhooks/{id}": {
|
|
325
572
|
parameters: {
|
|
326
573
|
query?: never;
|
|
@@ -328,15 +575,27 @@ interface paths {
|
|
|
328
575
|
path?: never;
|
|
329
576
|
cookie?: never;
|
|
330
577
|
};
|
|
331
|
-
/**
|
|
578
|
+
/**
|
|
579
|
+
* Get a webhook (secret masked)
|
|
580
|
+
* @deprecated
|
|
581
|
+
* @description Deprecated: use `/v1/workspaces/{workspace_id}/webhooks/endpoints` (event descriptions, Send test that reports the result, event log, replay, rotation with a grace period). Responses carry `Deprecation: true` and `Sunset: Fri, 15 Jan 2027 00:00:00 GMT`.
|
|
582
|
+
*/
|
|
332
583
|
get: operations["WebhookController_get"];
|
|
333
584
|
put?: never;
|
|
334
585
|
post?: never;
|
|
335
|
-
/**
|
|
586
|
+
/**
|
|
587
|
+
* Delete a webhook
|
|
588
|
+
* @deprecated
|
|
589
|
+
* @description Deprecated: use `/v1/workspaces/{workspace_id}/webhooks/endpoints` (event descriptions, Send test that reports the result, event log, replay, rotation with a grace period). Responses carry `Deprecation: true` and `Sunset: Fri, 15 Jan 2027 00:00:00 GMT`.
|
|
590
|
+
*/
|
|
336
591
|
delete: operations["WebhookController_remove"];
|
|
337
592
|
options?: never;
|
|
338
593
|
head?: never;
|
|
339
|
-
/**
|
|
594
|
+
/**
|
|
595
|
+
* Update url / events / active flag. `active: true` also clears an automatic switch-off.
|
|
596
|
+
* @deprecated
|
|
597
|
+
* @description Deprecated: use `/v1/workspaces/{workspace_id}/webhooks/endpoints` (event descriptions, Send test that reports the result, event log, replay, rotation with a grace period). Responses carry `Deprecation: true` and `Sunset: Fri, 15 Jan 2027 00:00:00 GMT`.
|
|
598
|
+
*/
|
|
340
599
|
patch: operations["WebhookController_update"];
|
|
341
600
|
trace?: never;
|
|
342
601
|
};
|
|
@@ -347,7 +606,11 @@ interface paths {
|
|
|
347
606
|
path?: never;
|
|
348
607
|
cookie?: never;
|
|
349
608
|
};
|
|
350
|
-
/**
|
|
609
|
+
/**
|
|
610
|
+
* Delivery attempts for a webhook, newest first, cursor-paginated (default 50, max 200)
|
|
611
|
+
* @deprecated
|
|
612
|
+
* @description Deprecated: use `/v1/workspaces/{workspace_id}/webhooks/endpoints` (event descriptions, Send test that reports the result, event log, replay, rotation with a grace period). Responses carry `Deprecation: true` and `Sunset: Fri, 15 Jan 2027 00:00:00 GMT`.
|
|
613
|
+
*/
|
|
351
614
|
get: operations["WebhookController_recentDeliveries"];
|
|
352
615
|
put?: never;
|
|
353
616
|
post?: never;
|
|
@@ -366,7 +629,11 @@ interface paths {
|
|
|
366
629
|
};
|
|
367
630
|
get?: never;
|
|
368
631
|
put?: never;
|
|
369
|
-
/**
|
|
632
|
+
/**
|
|
633
|
+
* Rotate the signing secret. Returns the new secret in clear EXACTLY ONCE; the old one stops at once.
|
|
634
|
+
* @deprecated
|
|
635
|
+
* @description Deprecated: use `/v1/workspaces/{workspace_id}/webhooks/endpoints` (event descriptions, Send test that reports the result, event log, replay, rotation with a grace period). Responses carry `Deprecation: true` and `Sunset: Fri, 15 Jan 2027 00:00:00 GMT`.
|
|
636
|
+
*/
|
|
370
637
|
post: operations["WebhookController_rotateSecret"];
|
|
371
638
|
delete?: never;
|
|
372
639
|
options?: never;
|
|
@@ -383,7 +650,11 @@ interface paths {
|
|
|
383
650
|
};
|
|
384
651
|
get?: never;
|
|
385
652
|
put?: never;
|
|
386
|
-
/**
|
|
653
|
+
/**
|
|
654
|
+
* Send the example of an event to this webhook; the attempt shows in `/deliveries`
|
|
655
|
+
* @deprecated
|
|
656
|
+
* @description Deprecated: use `/v1/workspaces/{workspace_id}/webhooks/endpoints` (event descriptions, Send test that reports the result, event log, replay, rotation with a grace period). Responses carry `Deprecation: true` and `Sunset: Fri, 15 Jan 2027 00:00:00 GMT`.
|
|
657
|
+
*/
|
|
387
658
|
post: operations["WebhookController_fireTest"];
|
|
388
659
|
delete?: never;
|
|
389
660
|
options?: never;
|
|
@@ -394,6 +665,38 @@ interface paths {
|
|
|
394
665
|
}
|
|
395
666
|
interface components {
|
|
396
667
|
schemas: {
|
|
668
|
+
AnalyticsTimelinePointDto: {
|
|
669
|
+
/** @description Signups on that day (0 for gap days). */
|
|
670
|
+
count: number;
|
|
671
|
+
/**
|
|
672
|
+
* @description UTC day, `YYYY-MM-DD`.
|
|
673
|
+
* @example 2026-08-01
|
|
674
|
+
*/
|
|
675
|
+
date: string;
|
|
676
|
+
};
|
|
677
|
+
AnalyticsTimelineResponseDto: {
|
|
678
|
+
/** @enum {string} */
|
|
679
|
+
granularity: "day";
|
|
680
|
+
/** @description Oldest first; every day in [since, until) is present. */
|
|
681
|
+
points: components["schemas"]["AnalyticsTimelinePointDto"][];
|
|
682
|
+
};
|
|
683
|
+
AnalyticsTopReferralDto: {
|
|
684
|
+
/** @description `position - referral_count * referral_boost`, floored at 1. */
|
|
685
|
+
effective_position: number;
|
|
686
|
+
email: string;
|
|
687
|
+
/** Format: uuid */
|
|
688
|
+
id: string;
|
|
689
|
+
name: string;
|
|
690
|
+
/** @description Immutable signup position. */
|
|
691
|
+
position: number;
|
|
692
|
+
referral_code: string;
|
|
693
|
+
referral_count: number;
|
|
694
|
+
};
|
|
695
|
+
AnalyticsTopReferrerDto: {
|
|
696
|
+
count: number;
|
|
697
|
+
/** @description Free-text referrer value; null groups entries without one. */
|
|
698
|
+
referrer: string | null;
|
|
699
|
+
};
|
|
397
700
|
BulkEntryActionDto: {
|
|
398
701
|
/**
|
|
399
702
|
* @description Action to apply to every id.
|
|
@@ -420,6 +723,25 @@ interface components {
|
|
|
420
723
|
*/
|
|
421
724
|
send_email: boolean;
|
|
422
725
|
};
|
|
726
|
+
BulkEntryActionResponseDto: {
|
|
727
|
+
failed: number;
|
|
728
|
+
/** @description Number of unique ids processed (after de-dupe). */
|
|
729
|
+
requested: number;
|
|
730
|
+
results: components["schemas"]["BulkEntryResultDto"][];
|
|
731
|
+
succeeded: number;
|
|
732
|
+
};
|
|
733
|
+
BulkEntryErrorDto: {
|
|
734
|
+
/** @description HTTP-style status code for the per-row failure. */
|
|
735
|
+
code: number;
|
|
736
|
+
message: string;
|
|
737
|
+
};
|
|
738
|
+
BulkEntryResultDto: {
|
|
739
|
+
error?: components["schemas"]["BulkEntryErrorDto"];
|
|
740
|
+
/** Format: uuid */
|
|
741
|
+
id: string;
|
|
742
|
+
/** @enum {string} */
|
|
743
|
+
status: "ok" | "error";
|
|
744
|
+
};
|
|
423
745
|
CreateEntryDto: {
|
|
424
746
|
/**
|
|
425
747
|
* @description Email address
|
|
@@ -435,7 +757,7 @@ interface components {
|
|
|
435
757
|
* @example Ada Lovelace
|
|
436
758
|
*/
|
|
437
759
|
name: string;
|
|
438
|
-
/** @description reCAPTCHA v3 token; verified server-side
|
|
760
|
+
/** @description reCAPTCHA v3 token, created with the action `waitlist_signup`. Required when the waitlist has a reCAPTCHA site key; verified server-side with the secret key saved on the waitlist. */
|
|
439
761
|
recaptcha_token?: string;
|
|
440
762
|
/** @description Referral code from a prior signup; bumps that signup’s position when honoured */
|
|
441
763
|
referral_code?: string;
|
|
@@ -447,6 +769,23 @@ interface components {
|
|
|
447
769
|
*/
|
|
448
770
|
variant_id?: string;
|
|
449
771
|
};
|
|
772
|
+
CreateTestEntryDto: {
|
|
773
|
+
/**
|
|
774
|
+
* @description Name on the test entry. Defaults to "Test signup".
|
|
775
|
+
* @example Test signup
|
|
776
|
+
*/
|
|
777
|
+
name?: string;
|
|
778
|
+
/**
|
|
779
|
+
* @description Send the welcome email for this entry. It goes to the entry's mailbox-simulator address, which accepts it without delivering to a real inbox. Default `false`.
|
|
780
|
+
* @default false
|
|
781
|
+
*/
|
|
782
|
+
send_welcome_email: boolean;
|
|
783
|
+
/**
|
|
784
|
+
* @description Send `entry.created` (and `entry.approved` when the waitlist auto-approves) to your webhook endpoints for this entry. The payload carries `is_test: true`. Default `false`.
|
|
785
|
+
* @default false
|
|
786
|
+
*/
|
|
787
|
+
trigger_webhooks: boolean;
|
|
788
|
+
};
|
|
450
789
|
CreateVariantDto: {
|
|
451
790
|
/** @default true */
|
|
452
791
|
active: boolean;
|
|
@@ -466,6 +805,15 @@ interface components {
|
|
|
466
805
|
weight: number;
|
|
467
806
|
};
|
|
468
807
|
CreateWaitlistDto: {
|
|
808
|
+
/**
|
|
809
|
+
* @description Web origins (scheme and host, for example `https://acme.com` or `http://localhost:3000`) that browsers may submit public sign-ups from. `https://*.acme.com` matches any subdomain. An empty list means any origin. A browser request from another origin gets 403 `ORIGIN_NOT_ALLOWED`; server-side calls without an `Origin` header are not checked. Entries are normalised (lower case, no trailing slash, default port dropped).
|
|
810
|
+
* @default []
|
|
811
|
+
* @example [
|
|
812
|
+
* "https://acme.com",
|
|
813
|
+
* "https://*.acme.com"
|
|
814
|
+
* ]
|
|
815
|
+
*/
|
|
816
|
+
allowed_origins: string[];
|
|
469
817
|
/** @description Description returned in the public waitlist payload — customer frontends typically render it under the display name on their signup form. */
|
|
470
818
|
description?: string;
|
|
471
819
|
/**
|
|
@@ -473,13 +821,19 @@ interface components {
|
|
|
473
821
|
* @example Early Access Program
|
|
474
822
|
*/
|
|
475
823
|
display_name: string;
|
|
476
|
-
/** @description Waitlist settings (max_entries, approval_required, custom_fields, confirmation_message, referral_boost) */
|
|
824
|
+
/** @description Waitlist settings (max_entries, approval_required, custom_fields, confirmation_message, referral_boost, referral_rewards, recaptcha_site_key). To turn on reCAPTCHA v3, send recaptcha_site_key together with recaptcha_secret_key (both from your reCAPTCHA admin console); the secret is stored encrypted and is never returned. Send recaptcha_site_key: null to turn it off. */
|
|
477
825
|
settings?: Record<string, never>;
|
|
478
826
|
/**
|
|
479
827
|
* @description URL-safe slug
|
|
480
828
|
* @example early-access
|
|
481
829
|
*/
|
|
482
830
|
slug: string;
|
|
831
|
+
/**
|
|
832
|
+
* @description Start state. `active` accepts public sign-ups straight away; `draft` (the default) refuses them with 422 until the status is changed to `active`.
|
|
833
|
+
* @default draft
|
|
834
|
+
* @enum {string}
|
|
835
|
+
*/
|
|
836
|
+
status: "draft" | "active";
|
|
483
837
|
};
|
|
484
838
|
CreateWebhookDto: {
|
|
485
839
|
/** @description Disabled webhooks store events but never deliver */
|
|
@@ -495,6 +849,83 @@ interface components {
|
|
|
495
849
|
/** @description Destination URL (must be https in prod) */
|
|
496
850
|
url: string;
|
|
497
851
|
};
|
|
852
|
+
CreateWebhookEndpointDto: {
|
|
853
|
+
/** @example Production receiver */
|
|
854
|
+
description?: string | null;
|
|
855
|
+
/**
|
|
856
|
+
* @description Create it switched off.
|
|
857
|
+
* @default true
|
|
858
|
+
*/
|
|
859
|
+
enabled: boolean;
|
|
860
|
+
/**
|
|
861
|
+
* @description Event types from `GET …/webhooks/event-types`. Empty or omitted means every event, including types added later.
|
|
862
|
+
* @example [
|
|
863
|
+
* "entry.created",
|
|
864
|
+
* "entry.approved"
|
|
865
|
+
* ]
|
|
866
|
+
*/
|
|
867
|
+
event_types?: ("entry.created" | "entry.approved" | "entry.rejected")[];
|
|
868
|
+
/**
|
|
869
|
+
* Format: uri
|
|
870
|
+
* @description Where to send events: an absolute https:// URL on a public host.
|
|
871
|
+
* @example https://api.acme.com/webhooks
|
|
872
|
+
*/
|
|
873
|
+
url: string;
|
|
874
|
+
};
|
|
875
|
+
EffectiveSenderDto: {
|
|
876
|
+
/**
|
|
877
|
+
* @description The From Waitlist emails go out with (a bare address or `Name <address>`); null when none is set, or when the workspace default could not be read (`verified: null`).
|
|
878
|
+
* @example Acme <hello@acme.com>
|
|
879
|
+
*/
|
|
880
|
+
address: string | null;
|
|
881
|
+
/**
|
|
882
|
+
* @description The sender domain's live `verification_status` in Mail (`verified`, `pending`, `temporary_failure`, `failed`, …) in both modes, `deleted` when the domain behind the workspace default was removed, `not_found` for a custom sender domain that is gone (or receive-only), or null when unknown or there is no address. The shared `SenderDomainStatus` enum, the same in Mail and Auth.
|
|
883
|
+
* @example verified
|
|
884
|
+
*/
|
|
885
|
+
domain_status: components["schemas"]["SenderDomainStatus"] | null;
|
|
886
|
+
/**
|
|
887
|
+
* @description `workspace`: the workspace default sender set in Mail. `custom`: the Waitlist sender domain + address.
|
|
888
|
+
* @example workspace
|
|
889
|
+
* @enum {string}
|
|
890
|
+
*/
|
|
891
|
+
source: "workspace" | "custom";
|
|
892
|
+
/**
|
|
893
|
+
* @description Whether mail from this sender goes out right now, checked live in Mail (cached up to 60 seconds). null: not checked (your role cannot read Mail, or Mail did not answer).
|
|
894
|
+
* @example true
|
|
895
|
+
*/
|
|
896
|
+
verified: boolean | null;
|
|
897
|
+
};
|
|
898
|
+
EmailSetupDto: {
|
|
899
|
+
/**
|
|
900
|
+
* @description Whether the sender domain and template names were checked against Mail on this read (results are cached for up to 60 seconds). `false` when Mail could not be asked, for example because the caller cannot read Mail domains or templates; nothing is reported missing on an unchecked item.
|
|
901
|
+
* @example true
|
|
902
|
+
*/
|
|
903
|
+
mail_checked: boolean;
|
|
904
|
+
/**
|
|
905
|
+
* @description What is missing, in a fixed order. `not_enabled`: notifications are off. `no_sender_domain`: no sender domain is chosen, or the chosen one no longer exists in Mail (or is receive-only). `sender_domain_unverified`: the sender domain is not verified in Mail yet. `no_sender_address`: no From address is set. `no_template`: at least one email has no template, or its template was deleted in Mail; `missing_templates` says which. Empty when `state` is `ready`.
|
|
906
|
+
* @example [
|
|
907
|
+
* "no_template"
|
|
908
|
+
* ]
|
|
909
|
+
*/
|
|
910
|
+
missing: ("not_enabled" | "no_sender_domain" | "sender_domain_unverified" | "no_sender_address" | "no_template")[];
|
|
911
|
+
/**
|
|
912
|
+
* @description The emails whose template is not set or no longer exists in Mail: `welcome` (on signup), `approved`, `rejected`.
|
|
913
|
+
* @example [
|
|
914
|
+
* "welcome"
|
|
915
|
+
* ]
|
|
916
|
+
*/
|
|
917
|
+
missing_templates: ("welcome" | "approved" | "rejected")[];
|
|
918
|
+
/**
|
|
919
|
+
* @description `ready`: every piece is in place and emails go out. `incomplete`: notifications are on but something in `missing` stops some or all emails. `off`: notifications are off (`notifications_via_envoi = false`), so Waitlist sends no email and webhooks are the way to reach signups.
|
|
920
|
+
* @example incomplete
|
|
921
|
+
* @enum {string}
|
|
922
|
+
*/
|
|
923
|
+
state: "ready" | "incomplete" | "off";
|
|
924
|
+
};
|
|
925
|
+
EntryCountResponseDto: {
|
|
926
|
+
/** @description Number of entries on the waitlist. Test entries are left out unless `include_test=true`. */
|
|
927
|
+
count: number;
|
|
928
|
+
};
|
|
498
929
|
EntryListPaginationDto: {
|
|
499
930
|
has_more: boolean;
|
|
500
931
|
next_cursor: string | null;
|
|
@@ -510,8 +941,14 @@ interface components {
|
|
|
510
941
|
interest: string | null;
|
|
511
942
|
invited_at: string | null;
|
|
512
943
|
invited_to_app_slug: string | null;
|
|
944
|
+
/**
|
|
945
|
+
* @description Made with "Add test signup". Test entries use a mailbox-simulator address and are left out of counts, analytics, exports and webhooks unless asked.
|
|
946
|
+
* @example false
|
|
947
|
+
*/
|
|
948
|
+
is_test: boolean;
|
|
513
949
|
metadata: Record<string, never>;
|
|
514
950
|
name: string;
|
|
951
|
+
/** @description Place in the queue, from 1. Test entries have negative positions (-1, -2…) so they never take a real place. */
|
|
515
952
|
position: number;
|
|
516
953
|
referral_code: string;
|
|
517
954
|
referral_count: number;
|
|
@@ -523,6 +960,23 @@ interface components {
|
|
|
523
960
|
waitlist_id: string;
|
|
524
961
|
workspace_id: string;
|
|
525
962
|
};
|
|
963
|
+
ErrorResponseDto: {
|
|
964
|
+
/**
|
|
965
|
+
* @description Stable, machine-readable error code; branch on this, not on `message`. Always present. A route-specific code when the route defines one (e.g. `WEBHOOK_ENDPOINT_NOT_FOUND`, `SERVICE_NOT_ENABLED`), otherwise the generic code for the status: `BAD_REQUEST`, `VALIDATION_ERROR` (400 from request validation), `UNAUTHORIZED`, `FORBIDDEN`, `NOT_FOUND`, `CONFLICT`, `PAYLOAD_TOO_LARGE`, `UNPROCESSABLE_ENTITY`, `RATE_LIMITED`, `INTERNAL_SERVER_ERROR`, `SERVICE_UNAVAILABLE`.
|
|
966
|
+
* @example SERVICE_NOT_ENABLED
|
|
967
|
+
*/
|
|
968
|
+
code: string;
|
|
969
|
+
/**
|
|
970
|
+
* @description Human-readable error message. May be a class-validator array on 400.
|
|
971
|
+
* @example Policy denies waitlist.read on pcft:workspace/7a0c2f7e-2b8d-4f7f-9a51-3f1f0e1f3c11
|
|
972
|
+
*/
|
|
973
|
+
message: string | string[];
|
|
974
|
+
/**
|
|
975
|
+
* @description HTTP status code echoed in the body. Spelled `statusCode` (camelCase) in every ProductCraft API.
|
|
976
|
+
* @example 403
|
|
977
|
+
*/
|
|
978
|
+
statusCode: number;
|
|
979
|
+
};
|
|
526
980
|
InviteToAppDto: {
|
|
527
981
|
/** @description Auth app slug to invite into; defaults to the workspace Waitlist settings default (`default_heimdall_app_slug`) */
|
|
528
982
|
app_slug?: string;
|
|
@@ -532,23 +986,245 @@ interface components {
|
|
|
532
986
|
*/
|
|
533
987
|
send_email: boolean;
|
|
534
988
|
};
|
|
535
|
-
|
|
989
|
+
InviteToAppResponseDto: {
|
|
990
|
+
/** @description The entry row after `invited_at` / `invited_to_app_slug` were stamped. */
|
|
991
|
+
entry: components["schemas"]["EntryResponseDto"];
|
|
992
|
+
/** @description Auth invite id created in the linked app. */
|
|
993
|
+
invite_id: string;
|
|
994
|
+
/** @description Invite acceptance URL, when the Auth app returned one. Baked into the approval email when send_email is enabled. */
|
|
995
|
+
invite_url?: string;
|
|
996
|
+
};
|
|
997
|
+
LegacyWebhookDeliveryAttemptDto: {
|
|
998
|
+
/** @description Which attempt this was for the event: 1 for the first delivery, then 2 to 7 for the automatic retries (1m, 5m, 30m, 2h, 6h and 24h after each failure). Retries keep the same `event_id`. A test or a replay is numbered in the same sequence. */
|
|
999
|
+
attempt_number: number;
|
|
1000
|
+
/** Format: date-time */
|
|
1001
|
+
attempted_at: string;
|
|
1002
|
+
error_message: string | null;
|
|
1003
|
+
/** @description Id of the event (`evt_…`), the same across retries. */
|
|
1004
|
+
event_id: string;
|
|
1005
|
+
/** @enum {string} */
|
|
1006
|
+
event_type: "entry.created" | "entry.approved" | "entry.rejected";
|
|
1007
|
+
/** Format: uuid */
|
|
1008
|
+
id: string;
|
|
1009
|
+
latency_ms: number | null;
|
|
1010
|
+
response_body_truncated: string | null;
|
|
1011
|
+
/** @description HTTP status from the destination; null when the request errored before a response. */
|
|
1012
|
+
status_code: number | null;
|
|
1013
|
+
/** Format: uuid */
|
|
1014
|
+
webhook_id: string;
|
|
1015
|
+
};
|
|
1016
|
+
ListWebhookEndpointsResponseDto: {
|
|
1017
|
+
data: components["schemas"]["WebhookEndpointDto"][];
|
|
1018
|
+
/** @description Always one page (an endpoint limit applies). */
|
|
1019
|
+
pagination: components["schemas"]["WebhookPaginationDto"];
|
|
1020
|
+
};
|
|
1021
|
+
ListWebhookEventTypesResponseDto: {
|
|
1022
|
+
data: components["schemas"]["WebhookEventTypeDto"][];
|
|
1023
|
+
};
|
|
1024
|
+
ListWebhookEventsResponseDto: {
|
|
1025
|
+
data: components["schemas"]["WebhookEventDto"][];
|
|
1026
|
+
pagination: components["schemas"]["WebhookPaginationDto"];
|
|
1027
|
+
};
|
|
1028
|
+
NotificationTestResponseDto: {
|
|
536
1029
|
/**
|
|
537
|
-
* @description
|
|
538
|
-
* @
|
|
1030
|
+
* @description The From it went out with.
|
|
1031
|
+
* @example Acme <hello@acme.com>
|
|
539
1032
|
*/
|
|
540
|
-
|
|
541
|
-
/**
|
|
542
|
-
|
|
1033
|
+
from: string | null;
|
|
1034
|
+
/**
|
|
1035
|
+
* Format: uuid
|
|
1036
|
+
* @description The Mail message id; look it up in Mail > Emails to follow delivery.
|
|
1037
|
+
* @example 0d6c1c3e-5f2a-4b8e-9d17-3a4b5c6d7e8f
|
|
1038
|
+
*/
|
|
1039
|
+
message_id: string | null;
|
|
1040
|
+
/**
|
|
1041
|
+
* @description The Mail template that was sent.
|
|
1042
|
+
* @example waitlist-welcome
|
|
1043
|
+
*/
|
|
1044
|
+
template_name: string;
|
|
1045
|
+
/**
|
|
1046
|
+
* Format: email
|
|
1047
|
+
* @description Your own verified account address: tests only ever go to the person who asked.
|
|
1048
|
+
* @example you@acme.com
|
|
1049
|
+
*/
|
|
1050
|
+
to: string;
|
|
543
1051
|
};
|
|
544
|
-
|
|
1052
|
+
OriginNotAllowedErrorDto: {
|
|
545
1053
|
/**
|
|
546
|
-
* @
|
|
1054
|
+
* @example ORIGIN_NOT_ALLOWED
|
|
547
1055
|
* @enum {string}
|
|
548
1056
|
*/
|
|
549
|
-
|
|
1057
|
+
code: "ORIGIN_NOT_ALLOWED";
|
|
1058
|
+
/** @example Sign-ups from https://evil.test are not allowed for this waitlist. Add the origin to the waitlist's allowed origins. */
|
|
1059
|
+
message: string;
|
|
1060
|
+
/**
|
|
1061
|
+
* @description The `Origin` header the request carried.
|
|
1062
|
+
* @example https://evil.test
|
|
1063
|
+
*/
|
|
1064
|
+
origin: string;
|
|
1065
|
+
/** @example 403 */
|
|
1066
|
+
statusCode: number;
|
|
550
1067
|
};
|
|
551
|
-
|
|
1068
|
+
PaginationDto: {
|
|
1069
|
+
/**
|
|
1070
|
+
* @description True iff another page exists; if true, pass `next_cursor` on the next request.
|
|
1071
|
+
* @example false
|
|
1072
|
+
*/
|
|
1073
|
+
has_more: boolean;
|
|
1074
|
+
/**
|
|
1075
|
+
* @description Opaque cursor for the next page. `null` when no more pages are available.
|
|
1076
|
+
* @example eyJwb3NpdGlvbiI6MjB9
|
|
1077
|
+
*/
|
|
1078
|
+
next_cursor: string | null;
|
|
1079
|
+
};
|
|
1080
|
+
PublicEntryCreatedDto: {
|
|
1081
|
+
/** Format: date-time */
|
|
1082
|
+
created_at: string;
|
|
1083
|
+
/** @description Visible position after applying the referral boost — "you would be #N if approved now". Equals `position` at signup time (no referrals yet), and always for a test sign-up. */
|
|
1084
|
+
effective_position: number;
|
|
1085
|
+
/** @description Normalised (lower-cased) email. */
|
|
1086
|
+
email: string;
|
|
1087
|
+
/**
|
|
1088
|
+
* Format: uuid
|
|
1089
|
+
* @description Entry id.
|
|
1090
|
+
*/
|
|
1091
|
+
id: string;
|
|
1092
|
+
/** @description `true` when the email is an Amazon SES mailbox-simulator address (`…@simulator.amazonses.com`). Such a sign-up is stored as a test entry: it is left out of counts, analytics, exports and webhooks, and only the welcome email (to the simulator) goes out. */
|
|
1093
|
+
is_test: boolean;
|
|
1094
|
+
name: string;
|
|
1095
|
+
/** @description Immutable signup position (1-based order of signup). Negative for a test sign-up (`is_test: true`), which takes no place in line. */
|
|
1096
|
+
position: number;
|
|
1097
|
+
/** @description Referral code for this signup. Build your referral URL from it and pass it as `referral_code` on subsequent signups. */
|
|
1098
|
+
referral_code: string;
|
|
1099
|
+
/**
|
|
1100
|
+
* @description `approved` when the waitlist auto-approves; `pending` when admin approval is required.
|
|
1101
|
+
* @enum {string}
|
|
1102
|
+
*/
|
|
1103
|
+
status: "pending" | "approved";
|
|
1104
|
+
};
|
|
1105
|
+
PublicLeaderboardEntryDto: {
|
|
1106
|
+
/**
|
|
1107
|
+
* @description Masked email, e.g. `a***@example.com`.
|
|
1108
|
+
* @example a***@example.com
|
|
1109
|
+
*/
|
|
1110
|
+
masked_email: string;
|
|
1111
|
+
/** @description Signup position on the waitlist. */
|
|
1112
|
+
position: number;
|
|
1113
|
+
/** @description Number of honoured referrals. */
|
|
1114
|
+
referral_count: number;
|
|
1115
|
+
};
|
|
1116
|
+
PublicReferralRewardMilestoneDto: {
|
|
1117
|
+
/** @description Referral count that unlocks the reward. */
|
|
1118
|
+
count: number;
|
|
1119
|
+
/** @description Reward description shown to the signer-up. */
|
|
1120
|
+
reward: string;
|
|
1121
|
+
};
|
|
1122
|
+
PublicReferralRewardsDto: {
|
|
1123
|
+
/** @description Milestones sorted by count, ascending. Empty when the waitlist has no referral rewards configured. */
|
|
1124
|
+
milestones: components["schemas"]["PublicReferralRewardMilestoneDto"][];
|
|
1125
|
+
};
|
|
1126
|
+
PublicWaitlistBrandDto: {
|
|
1127
|
+
brand_logo_url: string | null;
|
|
1128
|
+
brand_name: string | null;
|
|
1129
|
+
/** @description Primary brand colour as #RRGGBB. */
|
|
1130
|
+
primary_color: string | null;
|
|
1131
|
+
};
|
|
1132
|
+
PublicWaitlistCustomFieldDto: {
|
|
1133
|
+
/** @description Stable field key. Submit values under this key in the entry `metadata` object. */
|
|
1134
|
+
key: string;
|
|
1135
|
+
/** @description Human-readable label for the field. */
|
|
1136
|
+
label?: string;
|
|
1137
|
+
/** @description Choices for select-style fields. */
|
|
1138
|
+
options?: string[];
|
|
1139
|
+
required?: boolean;
|
|
1140
|
+
/** @description Field type hint (e.g. `text`, `select`). */
|
|
1141
|
+
type?: string;
|
|
1142
|
+
};
|
|
1143
|
+
PublicWaitlistInfoDto: {
|
|
1144
|
+
brand: components["schemas"]["PublicWaitlistBrandDto"];
|
|
1145
|
+
/** @description Canonical workspace slug. When the request URL used a stale slug, compare with the URL slug and 301-redirect. */
|
|
1146
|
+
canonical_workspace_slug: string;
|
|
1147
|
+
/** @description Message to show after a successful signup. */
|
|
1148
|
+
confirmation_message: string;
|
|
1149
|
+
custom_fields: components["schemas"]["PublicWaitlistCustomFieldDto"][];
|
|
1150
|
+
description: string | null;
|
|
1151
|
+
/** @description Display name (active variant copy wins over the stored name). */
|
|
1152
|
+
display_name: string;
|
|
1153
|
+
/** @description reCAPTCHA v3 site key. When non-null, POST .../entries requires a `recaptcha_token` created with the action `waitlist_signup`. */
|
|
1154
|
+
recaptcha_site_key: string | null;
|
|
1155
|
+
referral_rewards: components["schemas"]["PublicReferralRewardsDto"];
|
|
1156
|
+
/** @description Waitlist slug. */
|
|
1157
|
+
slug: string;
|
|
1158
|
+
/** @description Always `active` — non-active waitlists return 404. */
|
|
1159
|
+
status: string;
|
|
1160
|
+
/** @description Active A/B or locale variant served for this request; null when none configured. */
|
|
1161
|
+
variant: components["schemas"]["PublicWaitlistVariantDto"] | null;
|
|
1162
|
+
/** @description Workspace slug the request resolved against. */
|
|
1163
|
+
workspace_slug: string;
|
|
1164
|
+
};
|
|
1165
|
+
PublicWaitlistVariantDto: {
|
|
1166
|
+
/**
|
|
1167
|
+
* Format: uuid
|
|
1168
|
+
* @description Active variant id. Round-trip it as `variant_id` on POST .../entries to attribute the signup.
|
|
1169
|
+
*/
|
|
1170
|
+
id: string;
|
|
1171
|
+
/** @enum {string} */
|
|
1172
|
+
kind: "ab" | "locale";
|
|
1173
|
+
/** @description BCP-47 locale of the served copy. */
|
|
1174
|
+
locale: string;
|
|
1175
|
+
};
|
|
1176
|
+
ReplayWebhookEventResponseDto: {
|
|
1177
|
+
/** @description One attempt per endpoint it was sent to. */
|
|
1178
|
+
attempts: components["schemas"]["WebhookDeliveryAttemptDto"][];
|
|
1179
|
+
event_id: string;
|
|
1180
|
+
};
|
|
1181
|
+
RotateWebhookSecretDto: {
|
|
1182
|
+
/**
|
|
1183
|
+
* @description Hours the previous secret keeps signing too (0 ends it now).
|
|
1184
|
+
* @default 24
|
|
1185
|
+
*/
|
|
1186
|
+
grace_hours: number;
|
|
1187
|
+
};
|
|
1188
|
+
SendWebhookTestDto: {
|
|
1189
|
+
/**
|
|
1190
|
+
* @description Which event to send; its catalogue example is the `data`.
|
|
1191
|
+
* @example entry.created
|
|
1192
|
+
* @enum {string}
|
|
1193
|
+
*/
|
|
1194
|
+
event_type: "entry.created" | "entry.approved" | "entry.rejected";
|
|
1195
|
+
};
|
|
1196
|
+
/** @enum {string} */
|
|
1197
|
+
SenderDomainStatus: "not_started" | "pending" | "partially_verified" | "verified" | "temporary_failure" | "failed" | "disabled" | "deleted" | "not_found";
|
|
1198
|
+
StatsSeriesPointDto: {
|
|
1199
|
+
/**
|
|
1200
|
+
* Format: date
|
|
1201
|
+
* @description UTC calendar day.
|
|
1202
|
+
* @example 2026-10-07
|
|
1203
|
+
*/
|
|
1204
|
+
date: string;
|
|
1205
|
+
/**
|
|
1206
|
+
* @description Value for that day.
|
|
1207
|
+
* @example 4
|
|
1208
|
+
*/
|
|
1209
|
+
value: number;
|
|
1210
|
+
};
|
|
1211
|
+
TestWebhookDto: {
|
|
1212
|
+
/**
|
|
1213
|
+
* @description Event type to fire as a synthetic test
|
|
1214
|
+
* @enum {string}
|
|
1215
|
+
*/
|
|
1216
|
+
event: "entry.created" | "entry.approved" | "entry.rejected";
|
|
1217
|
+
/** @description Accepted for older clients and ignored: the test delivers the event's example payload from `GET …/webhooks/event-types`. */
|
|
1218
|
+
waitlist_id?: string;
|
|
1219
|
+
};
|
|
1220
|
+
UpdateEntryStatusDto: {
|
|
1221
|
+
/**
|
|
1222
|
+
* @description Target status
|
|
1223
|
+
* @enum {string}
|
|
1224
|
+
*/
|
|
1225
|
+
status: "approved" | "rejected";
|
|
1226
|
+
};
|
|
1227
|
+
UpdateSettingsDto: {
|
|
552
1228
|
/** @description Mail template name used for entry.approved notifications. Must already exist in the workspace template store. */
|
|
553
1229
|
approved_template_name?: string | null;
|
|
554
1230
|
/** @description Logo URL returned in the public waitlist payload. Customer frontends render it on their own signup form. */
|
|
@@ -557,16 +1233,25 @@ interface components {
|
|
|
557
1233
|
brand_name?: string;
|
|
558
1234
|
/** @description Auth consumer-app slug to invite approved entries into. null clears the link. */
|
|
559
1235
|
default_heimdall_app_slug?: string | null;
|
|
560
|
-
/**
|
|
1236
|
+
/**
|
|
1237
|
+
* Format: email
|
|
1238
|
+
* @description The From used when `sender_mode` is `custom` (kept, but unused, in `workspace` mode). Must belong to default_sender_domain_id. null clears it.
|
|
1239
|
+
*/
|
|
561
1240
|
default_sender_address?: string | null;
|
|
562
1241
|
/** @description Mail domain UUID to use as default sender for Waitlist notifications. null clears the override. */
|
|
563
1242
|
default_sender_domain_id?: string | null;
|
|
564
|
-
/** @description Route Waitlist notifications through the Mail service (workspace
|
|
1243
|
+
/** @description Route Waitlist notifications through the Mail service instead of staying silent. Needs a sender (the workspace default in `workspace` mode, or the custom domain + address) and a template for every event. Turning it on (from off) creates the default templates `waitlist-welcome`, `waitlist-approved` and `waitlist-rejected` in Mail for every empty slot, reusing a template that already has that name, with your own Mail access. Default false; when off, Waitlist sends no notification emails and the customer is expected to handle email via the webhook lane. */
|
|
565
1244
|
notifications_via_envoi?: boolean;
|
|
566
1245
|
/** @description Primary brand colour as #RRGGBB */
|
|
567
1246
|
primary_color?: string;
|
|
568
1247
|
/** @description Mail template name used for entry.rejected notifications. Must already exist in the workspace template store. */
|
|
569
1248
|
rejected_template_name?: string | null;
|
|
1249
|
+
/**
|
|
1250
|
+
* @description Where the From comes from. `workspace` (the default): the workspace default sender set in Mail, resolved at send time, so changing it in Mail changes it for every product. `custom`: `default_sender_domain_id` + `default_sender_address`. Sending `default_sender_address` without `sender_mode` sets `custom`; sending it as null sets `workspace`.
|
|
1251
|
+
* @example workspace
|
|
1252
|
+
* @enum {string}
|
|
1253
|
+
*/
|
|
1254
|
+
sender_mode?: "workspace" | "custom";
|
|
570
1255
|
/** @description Mail template name used for entry.created notifications. Must already exist in the workspace template store. */
|
|
571
1256
|
welcome_template_name?: string | null;
|
|
572
1257
|
};
|
|
@@ -577,11 +1262,18 @@ interface components {
|
|
|
577
1262
|
weight?: number;
|
|
578
1263
|
};
|
|
579
1264
|
UpdateWaitlistDto: {
|
|
1265
|
+
/**
|
|
1266
|
+
* @description Web origins (scheme and host, for example `https://acme.com` or `http://localhost:3000`) that browsers may submit public sign-ups from. `https://*.acme.com` matches any subdomain. An empty list means any origin. A browser request from another origin gets 403 `ORIGIN_NOT_ALLOWED`; server-side calls without an `Origin` header are not checked. Entries are normalised (lower case, no trailing slash, default port dropped). Replaces the whole list; send `[]` to allow any origin again.
|
|
1267
|
+
* @example [
|
|
1268
|
+
* "https://acme.com"
|
|
1269
|
+
* ]
|
|
1270
|
+
*/
|
|
1271
|
+
allowed_origins?: string[];
|
|
580
1272
|
/** @description New description */
|
|
581
1273
|
description?: string;
|
|
582
1274
|
/** @description New display name */
|
|
583
1275
|
display_name?: string;
|
|
584
|
-
/** @description Updated settings
|
|
1276
|
+
/** @description Updated settings, merged shallowly into the saved ones. Keys: max_entries, approval_required, custom_fields, confirmation_message, referral_boost, referral_rewards, recaptcha_site_key. To turn on reCAPTCHA v3, send recaptcha_site_key together with recaptcha_secret_key (both from your reCAPTCHA admin console); the secret is stored encrypted and is never returned. Send recaptcha_site_key: null to turn it off. */
|
|
585
1277
|
settings?: Record<string, never>;
|
|
586
1278
|
};
|
|
587
1279
|
UpdateWaitlistStatusDto: {
|
|
@@ -599,6 +1291,18 @@ interface components {
|
|
|
599
1291
|
/** @description New URL */
|
|
600
1292
|
url?: string;
|
|
601
1293
|
};
|
|
1294
|
+
UpdateWebhookEndpointDto: {
|
|
1295
|
+
description?: string | null;
|
|
1296
|
+
/** @description Switch it on or off. Switching on also clears an automatic disable. */
|
|
1297
|
+
enabled?: boolean;
|
|
1298
|
+
/** @description Replaces the subscription. Event types from `GET …/webhooks/event-types`. Empty or omitted means every event, including types added later. */
|
|
1299
|
+
event_types?: ("entry.created" | "entry.approved" | "entry.rejected")[];
|
|
1300
|
+
/**
|
|
1301
|
+
* Format: uri
|
|
1302
|
+
* @example https://api.acme.com/webhooks
|
|
1303
|
+
*/
|
|
1304
|
+
url?: string;
|
|
1305
|
+
};
|
|
602
1306
|
VariantCopyDto: {
|
|
603
1307
|
confirmation_message?: string;
|
|
604
1308
|
description?: string;
|
|
@@ -606,6 +1310,7 @@ interface components {
|
|
|
606
1310
|
};
|
|
607
1311
|
VariantListResponseDto: {
|
|
608
1312
|
data: components["schemas"]["VariantResponseDto"][];
|
|
1313
|
+
pagination: components["schemas"]["PaginationDto"];
|
|
609
1314
|
};
|
|
610
1315
|
VariantResponseDto: {
|
|
611
1316
|
active: boolean;
|
|
@@ -618,6 +1323,30 @@ interface components {
|
|
|
618
1323
|
waitlist_id: string;
|
|
619
1324
|
weight: number;
|
|
620
1325
|
};
|
|
1326
|
+
WaitlistAnalyticsResponseDto: {
|
|
1327
|
+
/**
|
|
1328
|
+
* @description Entry counts keyed by status (`pending` / `approved` / `rejected`).
|
|
1329
|
+
* @example {
|
|
1330
|
+
* "approved": 40,
|
|
1331
|
+
* "pending": 12,
|
|
1332
|
+
* "rejected": 3
|
|
1333
|
+
* }
|
|
1334
|
+
*/
|
|
1335
|
+
by_status: {
|
|
1336
|
+
[key: string]: number;
|
|
1337
|
+
};
|
|
1338
|
+
referred_count: number;
|
|
1339
|
+
signups_this_month: number;
|
|
1340
|
+
signups_this_week: number;
|
|
1341
|
+
signups_today: number;
|
|
1342
|
+
top_referrals: components["schemas"]["AnalyticsTopReferralDto"][];
|
|
1343
|
+
top_referrers: components["schemas"]["AnalyticsTopReferrerDto"][];
|
|
1344
|
+
total_entries: number;
|
|
1345
|
+
/** @description referrals / total_entries — the K-factor proxy. 0 when no entries. */
|
|
1346
|
+
viral_coefficient: number;
|
|
1347
|
+
/** Format: uuid */
|
|
1348
|
+
waitlist_id: string;
|
|
1349
|
+
};
|
|
621
1350
|
WaitlistListPaginationDto: {
|
|
622
1351
|
has_more: boolean;
|
|
623
1352
|
next_cursor: string | null;
|
|
@@ -627,6 +1356,16 @@ interface components {
|
|
|
627
1356
|
pagination: components["schemas"]["WaitlistListPaginationDto"];
|
|
628
1357
|
};
|
|
629
1358
|
WaitlistResponseDto: {
|
|
1359
|
+
/**
|
|
1360
|
+
* @description Whether the public sign-up endpoint accepts entries right now (only an `active` waitlist does).
|
|
1361
|
+
* @example false
|
|
1362
|
+
*/
|
|
1363
|
+
accepting_signups: boolean;
|
|
1364
|
+
/**
|
|
1365
|
+
* @description Web origins (scheme and host, for example `https://acme.com` or `http://localhost:3000`) that browsers may submit public sign-ups from. `https://*.acme.com` matches any subdomain. An empty list means any origin. A browser request from another origin gets 403 `ORIGIN_NOT_ALLOWED`; server-side calls without an `Origin` header are not checked. Entries are normalised (lower case, no trailing slash, default port dropped).
|
|
1366
|
+
* @example []
|
|
1367
|
+
*/
|
|
1368
|
+
allowed_origins: string[];
|
|
630
1369
|
created_at: string;
|
|
631
1370
|
created_by: string;
|
|
632
1371
|
description: string | null;
|
|
@@ -635,8 +1374,13 @@ interface components {
|
|
|
635
1374
|
/** @example b1a4... */
|
|
636
1375
|
id: string;
|
|
637
1376
|
previous_workspace_slug: string | null;
|
|
638
|
-
/** @description Waitlist settings (max_entries, approval_required, custom_fields, confirmation_message, referral_boost). */
|
|
1377
|
+
/** @description Waitlist settings (max_entries, approval_required, custom_fields, confirmation_message, referral_boost, referral_rewards, recaptcha_site_key). The reCAPTCHA secret key is never returned; recaptcha_secret_configured says whether one is saved. */
|
|
639
1378
|
settings: Record<string, never>;
|
|
1379
|
+
/**
|
|
1380
|
+
* @description Plain explanation when public sign-ups are refused, and how to open them; null when the waitlist is active.
|
|
1381
|
+
* @example This waitlist is a draft, so public sign-ups are refused (422) until you change its status to active.
|
|
1382
|
+
*/
|
|
1383
|
+
signups_note: string | null;
|
|
640
1384
|
/** @example early-access */
|
|
641
1385
|
slug: string;
|
|
642
1386
|
/** @enum {string} */
|
|
@@ -647,37 +1391,436 @@ interface components {
|
|
|
647
1391
|
/** @example acme */
|
|
648
1392
|
workspace_slug: string;
|
|
649
1393
|
};
|
|
1394
|
+
WaitlistSettingsResponseDto: {
|
|
1395
|
+
approved_template_name: string | null;
|
|
1396
|
+
brand_logo_url: string | null;
|
|
1397
|
+
brand_name: string | null;
|
|
1398
|
+
/** @description Auth consumer-app slug approved entries are invited into. */
|
|
1399
|
+
default_heimdall_app_slug: string | null;
|
|
1400
|
+
/** @description The From used when `sender_mode` is `custom`. */
|
|
1401
|
+
default_sender_address: string | null;
|
|
1402
|
+
/**
|
|
1403
|
+
* Format: uuid
|
|
1404
|
+
* @description Mail domain UUID used as default sender for Waitlist notifications.
|
|
1405
|
+
*/
|
|
1406
|
+
default_sender_domain_id: string | null;
|
|
1407
|
+
/** @description The sender Waitlist emails actually go out from, with its live status in Mail. */
|
|
1408
|
+
effective_sender: components["schemas"]["EffectiveSenderDto"];
|
|
1409
|
+
/** @description Whether Waitlist emails can go out and, if not, what is missing. Computed on the server on every read. */
|
|
1410
|
+
email_setup: components["schemas"]["EmailSetupDto"];
|
|
1411
|
+
/** @description Whether Waitlist notifications are routed through the Mail service. */
|
|
1412
|
+
notifications_via_envoi: boolean;
|
|
1413
|
+
/** @description Primary brand colour as #RRGGBB */
|
|
1414
|
+
primary_color: string | null;
|
|
1415
|
+
rejected_template_name: string | null;
|
|
1416
|
+
/**
|
|
1417
|
+
* @description Where the From comes from: `workspace` (the workspace default sender set in Mail; the default) or `custom` (`default_sender_domain_id` + `default_sender_address`). Workspaces that had an address before this setting existed are `custom`.
|
|
1418
|
+
* @example workspace
|
|
1419
|
+
* @enum {string}
|
|
1420
|
+
*/
|
|
1421
|
+
sender_mode: "workspace" | "custom";
|
|
1422
|
+
/** @description Emails Waitlist did not send in the last 7 days because the setup was incomplete. */
|
|
1423
|
+
skipped_sends: components["schemas"]["WaitlistSkippedEmailsDto"];
|
|
1424
|
+
/**
|
|
1425
|
+
* Format: date-time
|
|
1426
|
+
* @description null when the workspace has no explicit settings row yet.
|
|
1427
|
+
*/
|
|
1428
|
+
updated_at: string | null;
|
|
1429
|
+
welcome_template_name: string | null;
|
|
1430
|
+
/** Format: uuid */
|
|
1431
|
+
workspace_id: string;
|
|
1432
|
+
};
|
|
1433
|
+
WaitlistSkippedEmailsDto: {
|
|
1434
|
+
/**
|
|
1435
|
+
* @description Emails not sent in the last 7 days because the setup was incomplete (`email_setup.missing`). Emails not sent because notifications are off are not counted.
|
|
1436
|
+
* @example 3
|
|
1437
|
+
*/
|
|
1438
|
+
count: number;
|
|
1439
|
+
/**
|
|
1440
|
+
* @deprecated
|
|
1441
|
+
* @description The same number as `count`, under its old name. Read `count`.
|
|
1442
|
+
* @example 3
|
|
1443
|
+
*/
|
|
1444
|
+
last_7_days: number;
|
|
1445
|
+
/**
|
|
1446
|
+
* Format: date-time
|
|
1447
|
+
* @description When the most recent counted email was skipped; null when none in the last 7 days.
|
|
1448
|
+
*/
|
|
1449
|
+
last_at: string | null;
|
|
1450
|
+
};
|
|
1451
|
+
WaitlistStatsInWindowDto: {
|
|
1452
|
+
/**
|
|
1453
|
+
* @description Entries created in the requested window.
|
|
1454
|
+
* @example 212
|
|
1455
|
+
*/
|
|
1456
|
+
signups: number;
|
|
1457
|
+
};
|
|
1458
|
+
WaitlistStatsSeriesDto: {
|
|
1459
|
+
/**
|
|
1460
|
+
* @description Bucket width.
|
|
1461
|
+
* @example day
|
|
1462
|
+
* @enum {string}
|
|
1463
|
+
*/
|
|
1464
|
+
granularity: "day";
|
|
1465
|
+
/**
|
|
1466
|
+
* @description New waitlist entries per UTC day across every waitlist in the workspace.
|
|
1467
|
+
* @example signups
|
|
1468
|
+
* @enum {string}
|
|
1469
|
+
*/
|
|
1470
|
+
metric: "signups";
|
|
1471
|
+
/** @description Dense and zero-filled: one point per UTC day in the window, oldest first, ending today. */
|
|
1472
|
+
points: components["schemas"]["StatsSeriesPointDto"][];
|
|
1473
|
+
};
|
|
1474
|
+
WaitlistStatsTotalsDto: {
|
|
1475
|
+
/**
|
|
1476
|
+
* @description Entries across those waitlists, all time, in any status.
|
|
1477
|
+
* @example 1380
|
|
1478
|
+
*/
|
|
1479
|
+
entries: number;
|
|
1480
|
+
/**
|
|
1481
|
+
* @description Waitlists in the workspace, in any status.
|
|
1482
|
+
* @example 2
|
|
1483
|
+
*/
|
|
1484
|
+
waitlists: number;
|
|
1485
|
+
};
|
|
1486
|
+
WaitlistWorkspaceStatsDto: {
|
|
1487
|
+
/**
|
|
1488
|
+
* Format: date-time
|
|
1489
|
+
* @description When these numbers were computed. Responses are cached for up to 60 seconds.
|
|
1490
|
+
* @example 2026-10-07T09:00:00.000Z
|
|
1491
|
+
*/
|
|
1492
|
+
generated_at: string;
|
|
1493
|
+
/** @description Counts for the window. */
|
|
1494
|
+
in_window: components["schemas"]["WaitlistStatsInWindowDto"];
|
|
1495
|
+
/**
|
|
1496
|
+
* Format: date-time
|
|
1497
|
+
* @description Most recent signup on any of the workspace's waitlists. Null when there has never been one.
|
|
1498
|
+
* @example 2026-10-07T08:41:12.000Z
|
|
1499
|
+
*/
|
|
1500
|
+
last_activity_at: string | null;
|
|
1501
|
+
/** @description Daily signups. */
|
|
1502
|
+
series: components["schemas"]["WaitlistStatsSeriesDto"];
|
|
1503
|
+
/** @description All-time counts. */
|
|
1504
|
+
totals: components["schemas"]["WaitlistStatsTotalsDto"];
|
|
1505
|
+
/**
|
|
1506
|
+
* @description Window the counts cover.
|
|
1507
|
+
* @example 30d
|
|
1508
|
+
* @enum {string}
|
|
1509
|
+
*/
|
|
1510
|
+
window: "1d" | "7d" | "30d";
|
|
1511
|
+
};
|
|
650
1512
|
WebhookCreateResponseDto: {
|
|
1513
|
+
/** @description Whether it receives events (`enabled` on the new routes). */
|
|
651
1514
|
active: boolean;
|
|
1515
|
+
/** @description Set when it was switched off automatically after sustained failures. */
|
|
652
1516
|
auto_disabled_at: string | null;
|
|
653
1517
|
created_at: string;
|
|
1518
|
+
/** @description Subscribed events (`event_types` on the new routes). */
|
|
654
1519
|
events: ("entry.created" | "entry.approved" | "entry.rejected")[];
|
|
1520
|
+
/** @description Failed deliveries in a row (`consecutive_failures` on the new routes). */
|
|
655
1521
|
failure_count: number;
|
|
656
1522
|
first_failure_at: string | null;
|
|
657
1523
|
id: string;
|
|
1524
|
+
/** @description When the latest attempt was made. */
|
|
658
1525
|
last_attempt_at: string | null;
|
|
1526
|
+
/** @description HTTP status of the latest attempt. */
|
|
659
1527
|
last_status_code: number | null;
|
|
660
|
-
/** @description
|
|
1528
|
+
/** @description The same secret as `signing_secret`, under the name older clients read. */
|
|
1529
|
+
secret_one_time_reveal: string;
|
|
1530
|
+
/** @description Always true: every webhook has a signing secret. */
|
|
1531
|
+
secret_set?: boolean;
|
|
1532
|
+
/** @description Plaintext signing secret (`whsec_…`), returned EXACTLY ONCE. Persist immediately; it does not appear on later reads. */
|
|
661
1533
|
signing_secret: string;
|
|
662
1534
|
url: string;
|
|
663
1535
|
workspace_id: string;
|
|
664
1536
|
};
|
|
1537
|
+
WebhookDeliveryAttemptDto: {
|
|
1538
|
+
/** @description 1 for the first delivery; retries and replays count up. */
|
|
1539
|
+
attempt_number: number;
|
|
1540
|
+
/** Format: date-time */
|
|
1541
|
+
attempted_at: string;
|
|
1542
|
+
/** Format: uuid */
|
|
1543
|
+
endpoint_id: string;
|
|
1544
|
+
/** @example request timed out */
|
|
1545
|
+
error_message: string | null;
|
|
1546
|
+
/** @example evt_3f0c3c1e-8a2b-4c55-9d3f-0a1b2c3d4e5f */
|
|
1547
|
+
event_id: string;
|
|
1548
|
+
/** @example user.created */
|
|
1549
|
+
event_type: string;
|
|
1550
|
+
/** Format: uuid */
|
|
1551
|
+
id: string;
|
|
1552
|
+
latency_ms: number | null;
|
|
1553
|
+
/** @description The first 1 KiB of the response body. */
|
|
1554
|
+
response_body: string | null;
|
|
1555
|
+
/** @description HTTP status; null when no response came back. */
|
|
1556
|
+
status_code: number | null;
|
|
1557
|
+
/** @description True for a 2xx response. */
|
|
1558
|
+
succeeded: boolean;
|
|
1559
|
+
/**
|
|
1560
|
+
* @description `automatic` (first delivery or a retry), `replay` or `test`.
|
|
1561
|
+
* @enum {string}
|
|
1562
|
+
*/
|
|
1563
|
+
trigger: "automatic" | "replay" | "test";
|
|
1564
|
+
/**
|
|
1565
|
+
* Format: uri
|
|
1566
|
+
* @description Where it was sent.
|
|
1567
|
+
*/
|
|
1568
|
+
url: string;
|
|
1569
|
+
};
|
|
1570
|
+
WebhookDeliveryListResponseDto: {
|
|
1571
|
+
data: components["schemas"]["LegacyWebhookDeliveryAttemptDto"][];
|
|
1572
|
+
pagination: components["schemas"]["PaginationDto"];
|
|
1573
|
+
};
|
|
1574
|
+
WebhookEndpointDto: {
|
|
1575
|
+
/** @description Failed automatic deliveries in a row; a success resets it. */
|
|
1576
|
+
consecutive_failures: number;
|
|
1577
|
+
/** Format: date-time */
|
|
1578
|
+
created_at: string;
|
|
1579
|
+
/** @example Production receiver */
|
|
1580
|
+
description: string | null;
|
|
1581
|
+
/** Format: date-time */
|
|
1582
|
+
disabled_at: string | null;
|
|
1583
|
+
/** @enum {string|null} */
|
|
1584
|
+
disabled_reason: "manual" | "failing" | null;
|
|
1585
|
+
/** @description The on/off switch (`PATCH … { enabled }`). */
|
|
1586
|
+
enabled: boolean;
|
|
1587
|
+
/**
|
|
1588
|
+
* @description Subscribed event types. Empty means every event, including types added later.
|
|
1589
|
+
* @example []
|
|
1590
|
+
*/
|
|
1591
|
+
event_types: string[];
|
|
1592
|
+
/**
|
|
1593
|
+
* Format: date-time
|
|
1594
|
+
* @description Start of the current failure streak.
|
|
1595
|
+
*/
|
|
1596
|
+
first_failure_at: string | null;
|
|
1597
|
+
/** Format: uuid */
|
|
1598
|
+
id: string;
|
|
1599
|
+
/** @description True for endpoints carried over from the product's previous webhook system: they also receive the old signature header until its sunset date. */
|
|
1600
|
+
legacy_signature: boolean;
|
|
1601
|
+
/** @description True while the previous secret still signs too (after a rotation, for its grace period). */
|
|
1602
|
+
prev_signing_secret_active: boolean;
|
|
1603
|
+
/**
|
|
1604
|
+
* Format: date-time
|
|
1605
|
+
* @description Until then the previous secret signs too (after a rotation).
|
|
1606
|
+
*/
|
|
1607
|
+
prev_signing_secret_expires_at: string | null;
|
|
1608
|
+
/** @description Id of the owning workspace, app or community. */
|
|
1609
|
+
scope_id: string;
|
|
1610
|
+
/**
|
|
1611
|
+
* @description What owns the endpoint: `workspace`, `app` or `community`.
|
|
1612
|
+
* @example workspace
|
|
1613
|
+
*/
|
|
1614
|
+
scope_type: string;
|
|
1615
|
+
/**
|
|
1616
|
+
* @description Last 4 characters of the signing secret.
|
|
1617
|
+
* @example x9Q=
|
|
1618
|
+
*/
|
|
1619
|
+
signing_secret_hint: string;
|
|
1620
|
+
/**
|
|
1621
|
+
* @description `enabled` receives events. `disabled` was switched off. `auto_disabled` was switched off after 20 failed deliveries in a row or 24 hours of failures; `PATCH { enabled: true }` turns it back on.
|
|
1622
|
+
* @enum {string}
|
|
1623
|
+
*/
|
|
1624
|
+
status: "enabled" | "disabled" | "auto_disabled";
|
|
1625
|
+
/** Format: date-time */
|
|
1626
|
+
updated_at: string;
|
|
1627
|
+
/**
|
|
1628
|
+
* Format: uri
|
|
1629
|
+
* @example https://api.acme.com/webhooks
|
|
1630
|
+
*/
|
|
1631
|
+
url: string;
|
|
1632
|
+
};
|
|
1633
|
+
WebhookEndpointWithSecretDto: {
|
|
1634
|
+
/** @description Failed automatic deliveries in a row; a success resets it. */
|
|
1635
|
+
consecutive_failures: number;
|
|
1636
|
+
/** Format: date-time */
|
|
1637
|
+
created_at: string;
|
|
1638
|
+
/** @example Production receiver */
|
|
1639
|
+
description: string | null;
|
|
1640
|
+
/** Format: date-time */
|
|
1641
|
+
disabled_at: string | null;
|
|
1642
|
+
/** @enum {string|null} */
|
|
1643
|
+
disabled_reason: "manual" | "failing" | null;
|
|
1644
|
+
/** @description The on/off switch (`PATCH … { enabled }`). */
|
|
1645
|
+
enabled: boolean;
|
|
1646
|
+
/**
|
|
1647
|
+
* @description Subscribed event types. Empty means every event, including types added later.
|
|
1648
|
+
* @example []
|
|
1649
|
+
*/
|
|
1650
|
+
event_types: string[];
|
|
1651
|
+
/**
|
|
1652
|
+
* Format: date-time
|
|
1653
|
+
* @description Start of the current failure streak.
|
|
1654
|
+
*/
|
|
1655
|
+
first_failure_at: string | null;
|
|
1656
|
+
/** Format: uuid */
|
|
1657
|
+
id: string;
|
|
1658
|
+
/** @description True for endpoints carried over from the product's previous webhook system: they also receive the old signature header until its sunset date. */
|
|
1659
|
+
legacy_signature: boolean;
|
|
1660
|
+
/** @description True while the previous secret still signs too (after a rotation, for its grace period). */
|
|
1661
|
+
prev_signing_secret_active: boolean;
|
|
1662
|
+
/**
|
|
1663
|
+
* Format: date-time
|
|
1664
|
+
* @description Until then the previous secret signs too (after a rotation).
|
|
1665
|
+
*/
|
|
1666
|
+
prev_signing_secret_expires_at: string | null;
|
|
1667
|
+
/** @description Id of the owning workspace, app or community. */
|
|
1668
|
+
scope_id: string;
|
|
1669
|
+
/**
|
|
1670
|
+
* @description What owns the endpoint: `workspace`, `app` or `community`.
|
|
1671
|
+
* @example workspace
|
|
1672
|
+
*/
|
|
1673
|
+
scope_type: string;
|
|
1674
|
+
/**
|
|
1675
|
+
* @description The signing secret, shown once: pass it unchanged to any Standard Webhooks verifier. Store it now; it cannot be shown again.
|
|
1676
|
+
* @example whsec_MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSw
|
|
1677
|
+
*/
|
|
1678
|
+
signing_secret: string;
|
|
1679
|
+
/**
|
|
1680
|
+
* @description Last 4 characters of the signing secret.
|
|
1681
|
+
* @example x9Q=
|
|
1682
|
+
*/
|
|
1683
|
+
signing_secret_hint: string;
|
|
1684
|
+
/**
|
|
1685
|
+
* @description `enabled` receives events. `disabled` was switched off. `auto_disabled` was switched off after 20 failed deliveries in a row or 24 hours of failures; `PATCH { enabled: true }` turns it back on.
|
|
1686
|
+
* @enum {string}
|
|
1687
|
+
*/
|
|
1688
|
+
status: "enabled" | "disabled" | "auto_disabled";
|
|
1689
|
+
/** Format: date-time */
|
|
1690
|
+
updated_at: string;
|
|
1691
|
+
/**
|
|
1692
|
+
* Format: uri
|
|
1693
|
+
* @example https://api.acme.com/webhooks
|
|
1694
|
+
*/
|
|
1695
|
+
url: string;
|
|
1696
|
+
};
|
|
1697
|
+
WebhookEventDeliveryDto: {
|
|
1698
|
+
/** @description Number of the latest attempt; retries and replays count up. */
|
|
1699
|
+
attempt_number: number;
|
|
1700
|
+
/** Format: date-time */
|
|
1701
|
+
attempted_at: string;
|
|
1702
|
+
/** Format: uuid */
|
|
1703
|
+
endpoint_id: string;
|
|
1704
|
+
/**
|
|
1705
|
+
* Format: date-time
|
|
1706
|
+
* @description When the next automatic attempt is due; null when none is queued.
|
|
1707
|
+
*/
|
|
1708
|
+
next_attempt_at: string | null;
|
|
1709
|
+
status_code: number | null;
|
|
1710
|
+
/** @description True when the latest attempt got a 2xx. */
|
|
1711
|
+
succeeded: boolean;
|
|
1712
|
+
};
|
|
1713
|
+
WebhookEventDetailDto: {
|
|
1714
|
+
/** @description Every attempt, newest first. */
|
|
1715
|
+
attempts: components["schemas"]["WebhookDeliveryAttemptDto"][];
|
|
1716
|
+
/** Format: date-time */
|
|
1717
|
+
created_at: string;
|
|
1718
|
+
/** @description Latest attempt per endpoint (an endpoint whose first attempt is still queued is not listed yet). */
|
|
1719
|
+
deliveries: components["schemas"]["WebhookEventDeliveryDto"][];
|
|
1720
|
+
/**
|
|
1721
|
+
* @description Sent as `webhook-id`; the same on every retry and replay.
|
|
1722
|
+
* @example evt_3f0c3c1e-8a2b-4c55-9d3f-0a1b2c3d4e5f
|
|
1723
|
+
*/
|
|
1724
|
+
id: string;
|
|
1725
|
+
/** @description The JSON body exactly as sent. */
|
|
1726
|
+
payload: {
|
|
1727
|
+
[key: string]: unknown;
|
|
1728
|
+
};
|
|
1729
|
+
/**
|
|
1730
|
+
* @description `pending`: a delivery is queued. `failed`: the latest attempt to some endpoint failed and none is queued. `delivered`: every endpoint answered 2xx. `not_sent`: no endpoint subscribed.
|
|
1731
|
+
* @enum {string}
|
|
1732
|
+
*/
|
|
1733
|
+
status: "pending" | "delivered" | "failed" | "not_sent";
|
|
1734
|
+
/** @description Made by "Send test". */
|
|
1735
|
+
test: boolean;
|
|
1736
|
+
/**
|
|
1737
|
+
* @example entry.created
|
|
1738
|
+
* @enum {string}
|
|
1739
|
+
*/
|
|
1740
|
+
type: "entry.created" | "entry.approved" | "entry.rejected";
|
|
1741
|
+
};
|
|
1742
|
+
WebhookEventDto: {
|
|
1743
|
+
/** Format: date-time */
|
|
1744
|
+
created_at: string;
|
|
1745
|
+
/** @description Latest attempt per endpoint (an endpoint whose first attempt is still queued is not listed yet). */
|
|
1746
|
+
deliveries: components["schemas"]["WebhookEventDeliveryDto"][];
|
|
1747
|
+
/**
|
|
1748
|
+
* @description Sent as `webhook-id`; the same on every retry and replay.
|
|
1749
|
+
* @example evt_3f0c3c1e-8a2b-4c55-9d3f-0a1b2c3d4e5f
|
|
1750
|
+
*/
|
|
1751
|
+
id: string;
|
|
1752
|
+
/** @description The JSON body exactly as sent. */
|
|
1753
|
+
payload: {
|
|
1754
|
+
[key: string]: unknown;
|
|
1755
|
+
};
|
|
1756
|
+
/**
|
|
1757
|
+
* @description `pending`: a delivery is queued. `failed`: the latest attempt to some endpoint failed and none is queued. `delivered`: every endpoint answered 2xx. `not_sent`: no endpoint subscribed.
|
|
1758
|
+
* @enum {string}
|
|
1759
|
+
*/
|
|
1760
|
+
status: "pending" | "delivered" | "failed" | "not_sent";
|
|
1761
|
+
/** @description Made by "Send test". */
|
|
1762
|
+
test: boolean;
|
|
1763
|
+
/**
|
|
1764
|
+
* @example entry.created
|
|
1765
|
+
* @enum {string}
|
|
1766
|
+
*/
|
|
1767
|
+
type: "entry.created" | "entry.approved" | "entry.rejected";
|
|
1768
|
+
};
|
|
1769
|
+
WebhookEventTypeDto: {
|
|
1770
|
+
/**
|
|
1771
|
+
* @description Group shown in the event picker.
|
|
1772
|
+
* @example Users
|
|
1773
|
+
*/
|
|
1774
|
+
category: string;
|
|
1775
|
+
/** @example A user signed up or was created by an admin. */
|
|
1776
|
+
description: string;
|
|
1777
|
+
/** @description An example `data` object; "Send test" delivers exactly this. */
|
|
1778
|
+
example: {
|
|
1779
|
+
[key: string]: unknown;
|
|
1780
|
+
};
|
|
1781
|
+
/**
|
|
1782
|
+
* @example entry.created
|
|
1783
|
+
* @enum {string}
|
|
1784
|
+
*/
|
|
1785
|
+
type: "entry.created" | "entry.approved" | "entry.rejected";
|
|
1786
|
+
};
|
|
665
1787
|
WebhookListResponseDto: {
|
|
666
1788
|
data: components["schemas"]["WebhookResponseDto"][];
|
|
1789
|
+
pagination: components["schemas"]["PaginationDto"];
|
|
1790
|
+
};
|
|
1791
|
+
WebhookPaginationDto: {
|
|
1792
|
+
/** @description Whether another page follows. */
|
|
1793
|
+
has_more: boolean;
|
|
1794
|
+
/** @description Pass as `cursor` to get the next page; null on the last page. */
|
|
1795
|
+
next_cursor: string | null;
|
|
667
1796
|
};
|
|
668
1797
|
WebhookResponseDto: {
|
|
1798
|
+
/** @description Whether it receives events (`enabled` on the new routes). */
|
|
669
1799
|
active: boolean;
|
|
1800
|
+
/** @description Set when it was switched off automatically after sustained failures. */
|
|
670
1801
|
auto_disabled_at: string | null;
|
|
671
1802
|
created_at: string;
|
|
1803
|
+
/** @description Subscribed events (`event_types` on the new routes). */
|
|
672
1804
|
events: ("entry.created" | "entry.approved" | "entry.rejected")[];
|
|
1805
|
+
/** @description Failed deliveries in a row (`consecutive_failures` on the new routes). */
|
|
673
1806
|
failure_count: number;
|
|
674
1807
|
first_failure_at: string | null;
|
|
675
1808
|
id: string;
|
|
1809
|
+
/** @description When the latest attempt was made. */
|
|
676
1810
|
last_attempt_at: string | null;
|
|
1811
|
+
/** @description HTTP status of the latest attempt. */
|
|
677
1812
|
last_status_code: number | null;
|
|
1813
|
+
/** @description Always true: every webhook has a signing secret. */
|
|
1814
|
+
secret_set?: boolean;
|
|
678
1815
|
url: string;
|
|
679
1816
|
workspace_id: string;
|
|
680
1817
|
};
|
|
1818
|
+
WebhookRotateSecretResponseDto: {
|
|
1819
|
+
/** Format: uuid */
|
|
1820
|
+
id: string;
|
|
1821
|
+
/** @description New plaintext signing secret, returned EXACTLY ONCE. Persist immediately — it does not appear on subsequent GETs. */
|
|
1822
|
+
secret: string;
|
|
1823
|
+
};
|
|
681
1824
|
};
|
|
682
1825
|
responses: never;
|
|
683
1826
|
parameters: never;
|
|
@@ -706,14 +1849,18 @@ interface operations {
|
|
|
706
1849
|
headers: {
|
|
707
1850
|
[name: string]: unknown;
|
|
708
1851
|
};
|
|
709
|
-
content
|
|
1852
|
+
content: {
|
|
1853
|
+
"application/json": components["schemas"]["PublicWaitlistInfoDto"];
|
|
1854
|
+
};
|
|
710
1855
|
};
|
|
711
1856
|
/** @description Waitlist not found or not active */
|
|
712
1857
|
404: {
|
|
713
1858
|
headers: {
|
|
714
1859
|
[name: string]: unknown;
|
|
715
1860
|
};
|
|
716
|
-
content
|
|
1861
|
+
content: {
|
|
1862
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
1863
|
+
};
|
|
717
1864
|
};
|
|
718
1865
|
};
|
|
719
1866
|
};
|
|
@@ -733,47 +1880,68 @@ interface operations {
|
|
|
733
1880
|
};
|
|
734
1881
|
};
|
|
735
1882
|
responses: {
|
|
736
|
-
/** @description Entry created */
|
|
1883
|
+
/** @description Entry created. Persist `referral_code` client-side to build the referral URL; `status` is `approved` when the waitlist auto-approves. A sign-up from an Amazon SES mailbox-simulator address (`…@simulator.amazonses.com`) is stored as a test entry (`is_test: true`, negative `position`), so test runs never land on the real list. */
|
|
737
1884
|
201: {
|
|
738
1885
|
headers: {
|
|
739
1886
|
[name: string]: unknown;
|
|
740
1887
|
};
|
|
741
|
-
content
|
|
1888
|
+
content: {
|
|
1889
|
+
"application/json": components["schemas"]["PublicEntryCreatedDto"];
|
|
1890
|
+
};
|
|
742
1891
|
};
|
|
743
1892
|
/** @description Validation or spam check failed */
|
|
744
1893
|
400: {
|
|
745
1894
|
headers: {
|
|
746
1895
|
[name: string]: unknown;
|
|
747
1896
|
};
|
|
748
|
-
content
|
|
1897
|
+
content: {
|
|
1898
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
1899
|
+
};
|
|
1900
|
+
};
|
|
1901
|
+
/** @description The request came from a web origin (`Origin` header) that is not on the waitlist's `allowed_origins` list. Requests without an `Origin` header (server-side calls) are not checked. A CORS preflight from such an origin gets the same 403. */
|
|
1902
|
+
403: {
|
|
1903
|
+
headers: {
|
|
1904
|
+
[name: string]: unknown;
|
|
1905
|
+
};
|
|
1906
|
+
content: {
|
|
1907
|
+
"application/json": components["schemas"]["OriginNotAllowedErrorDto"];
|
|
1908
|
+
};
|
|
749
1909
|
};
|
|
750
1910
|
/** @description Waitlist not found */
|
|
751
1911
|
404: {
|
|
752
1912
|
headers: {
|
|
753
1913
|
[name: string]: unknown;
|
|
754
1914
|
};
|
|
755
|
-
content
|
|
1915
|
+
content: {
|
|
1916
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
1917
|
+
};
|
|
756
1918
|
};
|
|
757
1919
|
/** @description Email already on this waitlist */
|
|
758
1920
|
409: {
|
|
759
1921
|
headers: {
|
|
760
1922
|
[name: string]: unknown;
|
|
761
1923
|
};
|
|
762
|
-
content
|
|
1924
|
+
content: {
|
|
1925
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
1926
|
+
};
|
|
763
1927
|
};
|
|
764
1928
|
/** @description Waitlist is not active or is full */
|
|
765
1929
|
422: {
|
|
766
1930
|
headers: {
|
|
767
1931
|
[name: string]: unknown;
|
|
768
1932
|
};
|
|
769
|
-
content
|
|
1933
|
+
content: {
|
|
1934
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
1935
|
+
};
|
|
770
1936
|
};
|
|
771
1937
|
/** @description Too many requests from this IP */
|
|
772
1938
|
429: {
|
|
773
1939
|
headers: {
|
|
774
1940
|
[name: string]: unknown;
|
|
775
1941
|
};
|
|
776
|
-
content
|
|
1942
|
+
content: {
|
|
1943
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
1944
|
+
};
|
|
777
1945
|
};
|
|
778
1946
|
};
|
|
779
1947
|
};
|
|
@@ -797,14 +1965,71 @@ interface operations {
|
|
|
797
1965
|
headers: {
|
|
798
1966
|
[name: string]: unknown;
|
|
799
1967
|
};
|
|
800
|
-
content
|
|
1968
|
+
content: {
|
|
1969
|
+
"application/json": components["schemas"]["PublicLeaderboardEntryDto"][];
|
|
1970
|
+
};
|
|
801
1971
|
};
|
|
802
1972
|
/** @description Waitlist not found or not active */
|
|
803
1973
|
404: {
|
|
804
1974
|
headers: {
|
|
805
1975
|
[name: string]: unknown;
|
|
806
1976
|
};
|
|
807
|
-
content
|
|
1977
|
+
content: {
|
|
1978
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
1979
|
+
};
|
|
1980
|
+
};
|
|
1981
|
+
};
|
|
1982
|
+
};
|
|
1983
|
+
WorkspaceStatsController_get: {
|
|
1984
|
+
parameters: {
|
|
1985
|
+
query?: {
|
|
1986
|
+
/** @description Window for `in_window.signups` and the length of `series`, in UTC days ending today. */
|
|
1987
|
+
window?: "1d" | "7d" | "30d";
|
|
1988
|
+
};
|
|
1989
|
+
header?: never;
|
|
1990
|
+
path: {
|
|
1991
|
+
/** @description Workspace id. */
|
|
1992
|
+
workspace_id: string;
|
|
1993
|
+
};
|
|
1994
|
+
cookie?: never;
|
|
1995
|
+
};
|
|
1996
|
+
requestBody?: never;
|
|
1997
|
+
responses: {
|
|
1998
|
+
/** @description Waitlist stats. */
|
|
1999
|
+
200: {
|
|
2000
|
+
headers: {
|
|
2001
|
+
[name: string]: unknown;
|
|
2002
|
+
};
|
|
2003
|
+
content: {
|
|
2004
|
+
"application/json": components["schemas"]["WaitlistWorkspaceStatsDto"];
|
|
2005
|
+
};
|
|
2006
|
+
};
|
|
2007
|
+
/** @description `window` is not one of 1d, 7d, 30d. */
|
|
2008
|
+
400: {
|
|
2009
|
+
headers: {
|
|
2010
|
+
[name: string]: unknown;
|
|
2011
|
+
};
|
|
2012
|
+
content: {
|
|
2013
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2014
|
+
};
|
|
2015
|
+
};
|
|
2016
|
+
/** @description Caller lacks `waitlist.read` on the workspace, or Waitlist is not enabled on it (`SERVICE_NOT_ENABLED`). */
|
|
2017
|
+
403: {
|
|
2018
|
+
headers: {
|
|
2019
|
+
[name: string]: unknown;
|
|
2020
|
+
};
|
|
2021
|
+
content: {
|
|
2022
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2023
|
+
};
|
|
2024
|
+
};
|
|
2025
|
+
/** @description Workspace not found: the id is unknown, is not a UUID, or is not visible to the caller. Same answer as the service's other workspace routes. */
|
|
2026
|
+
404: {
|
|
2027
|
+
headers: {
|
|
2028
|
+
[name: string]: unknown;
|
|
2029
|
+
};
|
|
2030
|
+
content: {
|
|
2031
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2032
|
+
};
|
|
808
2033
|
};
|
|
809
2034
|
};
|
|
810
2035
|
};
|
|
@@ -819,26 +2044,41 @@ interface operations {
|
|
|
819
2044
|
};
|
|
820
2045
|
requestBody?: never;
|
|
821
2046
|
responses: {
|
|
822
|
-
/** @description Workspace Waitlist settings. */
|
|
2047
|
+
/** @description Workspace Waitlist settings with the email setup state. */
|
|
823
2048
|
200: {
|
|
824
2049
|
headers: {
|
|
825
2050
|
[name: string]: unknown;
|
|
826
2051
|
};
|
|
827
|
-
content
|
|
2052
|
+
content: {
|
|
2053
|
+
"application/json": components["schemas"]["WaitlistSettingsResponseDto"];
|
|
2054
|
+
};
|
|
2055
|
+
};
|
|
2056
|
+
/** @description No valid session or API key. */
|
|
2057
|
+
401: {
|
|
2058
|
+
headers: {
|
|
2059
|
+
[name: string]: unknown;
|
|
2060
|
+
};
|
|
2061
|
+
content: {
|
|
2062
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2063
|
+
};
|
|
828
2064
|
};
|
|
829
2065
|
/** @description Caller lacks `waitlist.settings.read` on the workspace. */
|
|
830
2066
|
403: {
|
|
831
2067
|
headers: {
|
|
832
2068
|
[name: string]: unknown;
|
|
833
2069
|
};
|
|
834
|
-
content
|
|
2070
|
+
content: {
|
|
2071
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2072
|
+
};
|
|
835
2073
|
};
|
|
836
2074
|
/** @description Workspace does not exist or is not Waitlist-enabled. */
|
|
837
2075
|
404: {
|
|
838
2076
|
headers: {
|
|
839
2077
|
[name: string]: unknown;
|
|
840
2078
|
};
|
|
841
|
-
content
|
|
2079
|
+
content: {
|
|
2080
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2081
|
+
};
|
|
842
2082
|
};
|
|
843
2083
|
};
|
|
844
2084
|
};
|
|
@@ -857,33 +2097,158 @@ interface operations {
|
|
|
857
2097
|
};
|
|
858
2098
|
};
|
|
859
2099
|
responses: {
|
|
860
|
-
/** @description Updated workspace Waitlist settings. */
|
|
2100
|
+
/** @description Updated workspace Waitlist settings with the email setup state. */
|
|
861
2101
|
200: {
|
|
862
2102
|
headers: {
|
|
863
2103
|
[name: string]: unknown;
|
|
864
2104
|
};
|
|
865
|
-
content
|
|
2105
|
+
content: {
|
|
2106
|
+
"application/json": components["schemas"]["WaitlistSettingsResponseDto"];
|
|
2107
|
+
};
|
|
866
2108
|
};
|
|
867
2109
|
/** @description Validation failure on the patch body (per `UpdateSettingsDto`). */
|
|
868
2110
|
400: {
|
|
869
2111
|
headers: {
|
|
870
2112
|
[name: string]: unknown;
|
|
871
2113
|
};
|
|
872
|
-
content
|
|
2114
|
+
content: {
|
|
2115
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2116
|
+
};
|
|
2117
|
+
};
|
|
2118
|
+
/** @description No valid session or API key. */
|
|
2119
|
+
401: {
|
|
2120
|
+
headers: {
|
|
2121
|
+
[name: string]: unknown;
|
|
2122
|
+
};
|
|
2123
|
+
content: {
|
|
2124
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2125
|
+
};
|
|
873
2126
|
};
|
|
874
2127
|
/** @description Caller lacks `waitlist.settings.update` on the workspace. */
|
|
875
2128
|
403: {
|
|
876
2129
|
headers: {
|
|
877
2130
|
[name: string]: unknown;
|
|
878
2131
|
};
|
|
879
|
-
content
|
|
2132
|
+
content: {
|
|
2133
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2134
|
+
};
|
|
880
2135
|
};
|
|
881
2136
|
/** @description Workspace does not exist or is not Waitlist-enabled. */
|
|
882
2137
|
404: {
|
|
883
2138
|
headers: {
|
|
884
2139
|
[name: string]: unknown;
|
|
885
2140
|
};
|
|
886
|
-
content
|
|
2141
|
+
content: {
|
|
2142
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2143
|
+
};
|
|
2144
|
+
};
|
|
2145
|
+
};
|
|
2146
|
+
};
|
|
2147
|
+
SettingsController_sendTest: {
|
|
2148
|
+
parameters: {
|
|
2149
|
+
query?: never;
|
|
2150
|
+
header?: {
|
|
2151
|
+
/** @description Stripe-style idempotency key. A retried request with the same key returns the first response instead of sending a second email. 24h TTL. */
|
|
2152
|
+
"Idempotency-Key"?: string;
|
|
2153
|
+
};
|
|
2154
|
+
path: {
|
|
2155
|
+
workspace_id: string;
|
|
2156
|
+
/** @description The email to test. */
|
|
2157
|
+
slot: "welcome" | "approved" | "rejected";
|
|
2158
|
+
};
|
|
2159
|
+
cookie?: never;
|
|
2160
|
+
};
|
|
2161
|
+
requestBody?: never;
|
|
2162
|
+
responses: {
|
|
2163
|
+
/** @description Accepted by Mail and queued for delivery. */
|
|
2164
|
+
202: {
|
|
2165
|
+
headers: {
|
|
2166
|
+
[name: string]: unknown;
|
|
2167
|
+
};
|
|
2168
|
+
content: {
|
|
2169
|
+
"application/json": components["schemas"]["NotificationTestResponseDto"];
|
|
2170
|
+
};
|
|
2171
|
+
};
|
|
2172
|
+
/** @description Unknown `slot`, or `workspaceId` is not a UUID. */
|
|
2173
|
+
400: {
|
|
2174
|
+
headers: {
|
|
2175
|
+
[name: string]: unknown;
|
|
2176
|
+
};
|
|
2177
|
+
content: {
|
|
2178
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2179
|
+
};
|
|
2180
|
+
};
|
|
2181
|
+
/** @description No valid session or API key. */
|
|
2182
|
+
401: {
|
|
2183
|
+
headers: {
|
|
2184
|
+
[name: string]: unknown;
|
|
2185
|
+
};
|
|
2186
|
+
content: {
|
|
2187
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2188
|
+
};
|
|
2189
|
+
};
|
|
2190
|
+
/** @description Caller lacks `waitlist.settings.update`, or Mail refused the send for your role (you need Mail send access in this workspace). */
|
|
2191
|
+
403: {
|
|
2192
|
+
headers: {
|
|
2193
|
+
[name: string]: unknown;
|
|
2194
|
+
};
|
|
2195
|
+
content: {
|
|
2196
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2197
|
+
};
|
|
2198
|
+
};
|
|
2199
|
+
/** @description Workspace not Waitlist-enabled, or the slot's template no longer exists in Mail. */
|
|
2200
|
+
404: {
|
|
2201
|
+
headers: {
|
|
2202
|
+
[name: string]: unknown;
|
|
2203
|
+
};
|
|
2204
|
+
content: {
|
|
2205
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2206
|
+
};
|
|
2207
|
+
};
|
|
2208
|
+
/** @description Idempotency-Key reused with a different body (`IDEMPOTENCY_KEY_REUSE`). */
|
|
2209
|
+
409: {
|
|
2210
|
+
headers: {
|
|
2211
|
+
[name: string]: unknown;
|
|
2212
|
+
};
|
|
2213
|
+
content: {
|
|
2214
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2215
|
+
};
|
|
2216
|
+
};
|
|
2217
|
+
/** @description `no_template`: the slot has no template. `no_sender_address`: custom sender mode with no address. */
|
|
2218
|
+
412: {
|
|
2219
|
+
headers: {
|
|
2220
|
+
[name: string]: unknown;
|
|
2221
|
+
};
|
|
2222
|
+
content: {
|
|
2223
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2224
|
+
};
|
|
2225
|
+
};
|
|
2226
|
+
/** @description `operator_email_unavailable`: the caller has no verified account email (API keys included). From Mail: `no_default_sender` (workspace mode and no default sender set in Mail), `from_domain_not_verified`, `domain_not_verified_by_provider`, a suppressed address, or a render failure. */
|
|
2227
|
+
422: {
|
|
2228
|
+
headers: {
|
|
2229
|
+
[name: string]: unknown;
|
|
2230
|
+
};
|
|
2231
|
+
content: {
|
|
2232
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2233
|
+
};
|
|
2234
|
+
};
|
|
2235
|
+
/** @description More than 10 tests by you in the last hour (`RATE_LIMITED`), or over a Mail send limit. */
|
|
2236
|
+
429: {
|
|
2237
|
+
headers: {
|
|
2238
|
+
[name: string]: unknown;
|
|
2239
|
+
};
|
|
2240
|
+
content: {
|
|
2241
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2242
|
+
};
|
|
2243
|
+
};
|
|
2244
|
+
/** @description `MAIL_UNREACHABLE`: Mail did not answer. */
|
|
2245
|
+
503: {
|
|
2246
|
+
headers: {
|
|
2247
|
+
[name: string]: unknown;
|
|
2248
|
+
};
|
|
2249
|
+
content: {
|
|
2250
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2251
|
+
};
|
|
887
2252
|
};
|
|
888
2253
|
};
|
|
889
2254
|
};
|
|
@@ -942,26 +2307,32 @@ interface operations {
|
|
|
942
2307
|
"application/json": components["schemas"]["WaitlistResponseDto"];
|
|
943
2308
|
};
|
|
944
2309
|
};
|
|
945
|
-
/** @description Validation failure. */
|
|
2310
|
+
/** @description Validation failure, including an `allowed_origins` entry that is not a plain origin. */
|
|
946
2311
|
400: {
|
|
947
2312
|
headers: {
|
|
948
2313
|
[name: string]: unknown;
|
|
949
2314
|
};
|
|
950
|
-
content
|
|
2315
|
+
content: {
|
|
2316
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2317
|
+
};
|
|
951
2318
|
};
|
|
952
2319
|
/** @description Caller lacks `waitlist.create`, or workspace has not enabled the `waitlist` service. */
|
|
953
2320
|
403: {
|
|
954
2321
|
headers: {
|
|
955
2322
|
[name: string]: unknown;
|
|
956
2323
|
};
|
|
957
|
-
content
|
|
2324
|
+
content: {
|
|
2325
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2326
|
+
};
|
|
958
2327
|
};
|
|
959
2328
|
/** @description Slug already taken in this workspace. */
|
|
960
2329
|
409: {
|
|
961
2330
|
headers: {
|
|
962
2331
|
[name: string]: unknown;
|
|
963
2332
|
};
|
|
964
|
-
content
|
|
2333
|
+
content: {
|
|
2334
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2335
|
+
};
|
|
965
2336
|
};
|
|
966
2337
|
};
|
|
967
2338
|
};
|
|
@@ -971,6 +2342,7 @@ interface operations {
|
|
|
971
2342
|
header?: never;
|
|
972
2343
|
path: {
|
|
973
2344
|
id: string;
|
|
2345
|
+
workspace_id: string;
|
|
974
2346
|
};
|
|
975
2347
|
cookie?: never;
|
|
976
2348
|
};
|
|
@@ -990,7 +2362,9 @@ interface operations {
|
|
|
990
2362
|
headers: {
|
|
991
2363
|
[name: string]: unknown;
|
|
992
2364
|
};
|
|
993
|
-
content
|
|
2365
|
+
content: {
|
|
2366
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2367
|
+
};
|
|
994
2368
|
};
|
|
995
2369
|
};
|
|
996
2370
|
};
|
|
@@ -1000,6 +2374,7 @@ interface operations {
|
|
|
1000
2374
|
header?: never;
|
|
1001
2375
|
path: {
|
|
1002
2376
|
id: string;
|
|
2377
|
+
workspace_id: string;
|
|
1003
2378
|
};
|
|
1004
2379
|
cookie?: never;
|
|
1005
2380
|
};
|
|
@@ -1017,14 +2392,18 @@ interface operations {
|
|
|
1017
2392
|
headers: {
|
|
1018
2393
|
[name: string]: unknown;
|
|
1019
2394
|
};
|
|
1020
|
-
content
|
|
2395
|
+
content: {
|
|
2396
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2397
|
+
};
|
|
1021
2398
|
};
|
|
1022
2399
|
/** @description Waitlist not found. */
|
|
1023
2400
|
404: {
|
|
1024
2401
|
headers: {
|
|
1025
2402
|
[name: string]: unknown;
|
|
1026
2403
|
};
|
|
1027
|
-
content
|
|
2404
|
+
content: {
|
|
2405
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2406
|
+
};
|
|
1028
2407
|
};
|
|
1029
2408
|
};
|
|
1030
2409
|
};
|
|
@@ -1034,6 +2413,7 @@ interface operations {
|
|
|
1034
2413
|
header?: never;
|
|
1035
2414
|
path: {
|
|
1036
2415
|
id: string;
|
|
2416
|
+
workspace_id: string;
|
|
1037
2417
|
};
|
|
1038
2418
|
cookie?: never;
|
|
1039
2419
|
};
|
|
@@ -1052,19 +2432,23 @@ interface operations {
|
|
|
1052
2432
|
"application/json": components["schemas"]["WaitlistResponseDto"];
|
|
1053
2433
|
};
|
|
1054
2434
|
};
|
|
1055
|
-
/** @description Validation failure. */
|
|
2435
|
+
/** @description Validation failure, including an `allowed_origins` entry that is not a plain origin. */
|
|
1056
2436
|
400: {
|
|
1057
2437
|
headers: {
|
|
1058
2438
|
[name: string]: unknown;
|
|
1059
2439
|
};
|
|
1060
|
-
content
|
|
2440
|
+
content: {
|
|
2441
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2442
|
+
};
|
|
1061
2443
|
};
|
|
1062
2444
|
/** @description Waitlist not found. */
|
|
1063
2445
|
404: {
|
|
1064
2446
|
headers: {
|
|
1065
2447
|
[name: string]: unknown;
|
|
1066
2448
|
};
|
|
1067
|
-
content
|
|
2449
|
+
content: {
|
|
2450
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2451
|
+
};
|
|
1068
2452
|
};
|
|
1069
2453
|
};
|
|
1070
2454
|
};
|
|
@@ -1074,6 +2458,7 @@ interface operations {
|
|
|
1074
2458
|
header?: never;
|
|
1075
2459
|
path: {
|
|
1076
2460
|
id: string;
|
|
2461
|
+
workspace_id: string;
|
|
1077
2462
|
};
|
|
1078
2463
|
cookie?: never;
|
|
1079
2464
|
};
|
|
@@ -1097,20 +2482,27 @@ interface operations {
|
|
|
1097
2482
|
headers: {
|
|
1098
2483
|
[name: string]: unknown;
|
|
1099
2484
|
};
|
|
1100
|
-
content
|
|
2485
|
+
content: {
|
|
2486
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2487
|
+
};
|
|
1101
2488
|
};
|
|
1102
2489
|
/** @description Waitlist not found. */
|
|
1103
2490
|
404: {
|
|
1104
2491
|
headers: {
|
|
1105
2492
|
[name: string]: unknown;
|
|
1106
2493
|
};
|
|
1107
|
-
content
|
|
2494
|
+
content: {
|
|
2495
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2496
|
+
};
|
|
1108
2497
|
};
|
|
1109
2498
|
};
|
|
1110
2499
|
};
|
|
1111
2500
|
AnalyticsController_get: {
|
|
1112
2501
|
parameters: {
|
|
1113
|
-
query?:
|
|
2502
|
+
query?: {
|
|
2503
|
+
/** @description Count test entries ("Add test signup") too. Default `false`: they are left out. */
|
|
2504
|
+
include_test?: boolean;
|
|
2505
|
+
};
|
|
1114
2506
|
header?: never;
|
|
1115
2507
|
path: {
|
|
1116
2508
|
workspace_id: string;
|
|
@@ -1125,21 +2517,27 @@ interface operations {
|
|
|
1125
2517
|
headers: {
|
|
1126
2518
|
[name: string]: unknown;
|
|
1127
2519
|
};
|
|
1128
|
-
content
|
|
2520
|
+
content: {
|
|
2521
|
+
"application/json": components["schemas"]["WaitlistAnalyticsResponseDto"];
|
|
2522
|
+
};
|
|
1129
2523
|
};
|
|
1130
2524
|
/** @description Caller lacks `waitlist.read` on the workspace. */
|
|
1131
2525
|
403: {
|
|
1132
2526
|
headers: {
|
|
1133
2527
|
[name: string]: unknown;
|
|
1134
2528
|
};
|
|
1135
|
-
content
|
|
2529
|
+
content: {
|
|
2530
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2531
|
+
};
|
|
1136
2532
|
};
|
|
1137
2533
|
/** @description Waitlist does not exist or is not in the path workspace. */
|
|
1138
2534
|
404: {
|
|
1139
2535
|
headers: {
|
|
1140
2536
|
[name: string]: unknown;
|
|
1141
2537
|
};
|
|
1142
|
-
content
|
|
2538
|
+
content: {
|
|
2539
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2540
|
+
};
|
|
1143
2541
|
};
|
|
1144
2542
|
};
|
|
1145
2543
|
};
|
|
@@ -1150,6 +2548,8 @@ interface operations {
|
|
|
1150
2548
|
since: string;
|
|
1151
2549
|
/** @description ISO-8601 exclusive end */
|
|
1152
2550
|
until: string;
|
|
2551
|
+
/** @description Count test entries ("Add test signup") too. Default `false`: they are left out. */
|
|
2552
|
+
include_test?: boolean;
|
|
1153
2553
|
};
|
|
1154
2554
|
header?: never;
|
|
1155
2555
|
path: {
|
|
@@ -1165,28 +2565,36 @@ interface operations {
|
|
|
1165
2565
|
headers: {
|
|
1166
2566
|
[name: string]: unknown;
|
|
1167
2567
|
};
|
|
1168
|
-
content
|
|
2568
|
+
content: {
|
|
2569
|
+
"application/json": components["schemas"]["AnalyticsTimelineResponseDto"];
|
|
2570
|
+
};
|
|
1169
2571
|
};
|
|
1170
2572
|
/** @description `since` / `until` missing, malformed, or `until <= since`. */
|
|
1171
2573
|
400: {
|
|
1172
2574
|
headers: {
|
|
1173
2575
|
[name: string]: unknown;
|
|
1174
2576
|
};
|
|
1175
|
-
content
|
|
2577
|
+
content: {
|
|
2578
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2579
|
+
};
|
|
1176
2580
|
};
|
|
1177
2581
|
/** @description Caller lacks `waitlist.read` on the workspace. */
|
|
1178
2582
|
403: {
|
|
1179
2583
|
headers: {
|
|
1180
2584
|
[name: string]: unknown;
|
|
1181
2585
|
};
|
|
1182
|
-
content
|
|
2586
|
+
content: {
|
|
2587
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2588
|
+
};
|
|
1183
2589
|
};
|
|
1184
2590
|
/** @description Waitlist does not exist or is not in the path workspace. */
|
|
1185
2591
|
404: {
|
|
1186
2592
|
headers: {
|
|
1187
2593
|
[name: string]: unknown;
|
|
1188
2594
|
};
|
|
1189
|
-
content
|
|
2595
|
+
content: {
|
|
2596
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2597
|
+
};
|
|
1190
2598
|
};
|
|
1191
2599
|
};
|
|
1192
2600
|
};
|
|
@@ -1198,6 +2606,14 @@ interface operations {
|
|
|
1198
2606
|
cursor?: string;
|
|
1199
2607
|
/** @description Filter by status */
|
|
1200
2608
|
status?: string;
|
|
2609
|
+
/** @description Case-insensitive substring match across the entry `email` OR `name`. Trimmed; blank means no filter. Composes (AND) with `status`, `since` and `until`. */
|
|
2610
|
+
search?: string;
|
|
2611
|
+
/** @description ISO-8601 inclusive lower bound on `created_at`. Malformed values are rejected with a 400. */
|
|
2612
|
+
since?: string;
|
|
2613
|
+
/** @description ISO-8601 exclusive upper bound on `created_at`. Must be after `since`. Malformed values are rejected with a 400. */
|
|
2614
|
+
until?: string;
|
|
2615
|
+
/** @description `true` lists only test entries ("Add test signup"), `false` only real ones. Omitted lists both; test entries come first (negative positions). */
|
|
2616
|
+
is_test?: boolean;
|
|
1201
2617
|
};
|
|
1202
2618
|
header?: never;
|
|
1203
2619
|
path: {
|
|
@@ -1217,19 +2633,32 @@ interface operations {
|
|
|
1217
2633
|
"application/json": components["schemas"]["EntryListResponseDto"];
|
|
1218
2634
|
};
|
|
1219
2635
|
};
|
|
2636
|
+
/** @description Invalid cursor, overlong `search`, malformed `since` / `until`, or `until <= since`. */
|
|
2637
|
+
400: {
|
|
2638
|
+
headers: {
|
|
2639
|
+
[name: string]: unknown;
|
|
2640
|
+
};
|
|
2641
|
+
content: {
|
|
2642
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2643
|
+
};
|
|
2644
|
+
};
|
|
1220
2645
|
/** @description Caller lacks `entry.read`, or workspace has not enabled the `waitlist` service. */
|
|
1221
2646
|
403: {
|
|
1222
2647
|
headers: {
|
|
1223
2648
|
[name: string]: unknown;
|
|
1224
2649
|
};
|
|
1225
|
-
content
|
|
2650
|
+
content: {
|
|
2651
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2652
|
+
};
|
|
1226
2653
|
};
|
|
1227
2654
|
/** @description Waitlist not found in this workspace. */
|
|
1228
2655
|
404: {
|
|
1229
2656
|
headers: {
|
|
1230
2657
|
[name: string]: unknown;
|
|
1231
2658
|
};
|
|
1232
|
-
content
|
|
2659
|
+
content: {
|
|
2660
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2661
|
+
};
|
|
1233
2662
|
};
|
|
1234
2663
|
};
|
|
1235
2664
|
};
|
|
@@ -1254,34 +2683,45 @@ interface operations {
|
|
|
1254
2683
|
headers: {
|
|
1255
2684
|
[name: string]: unknown;
|
|
1256
2685
|
};
|
|
1257
|
-
content
|
|
2686
|
+
content: {
|
|
2687
|
+
"application/json": components["schemas"]["BulkEntryActionResponseDto"];
|
|
2688
|
+
};
|
|
1258
2689
|
};
|
|
1259
2690
|
/** @description Empty `ids`, more than 100 ids, or unknown action. */
|
|
1260
2691
|
400: {
|
|
1261
2692
|
headers: {
|
|
1262
2693
|
[name: string]: unknown;
|
|
1263
2694
|
};
|
|
1264
|
-
content
|
|
2695
|
+
content: {
|
|
2696
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2697
|
+
};
|
|
1265
2698
|
};
|
|
1266
2699
|
/** @description Caller lacks `entry.update`. */
|
|
1267
2700
|
403: {
|
|
1268
2701
|
headers: {
|
|
1269
2702
|
[name: string]: unknown;
|
|
1270
2703
|
};
|
|
1271
|
-
content
|
|
2704
|
+
content: {
|
|
2705
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2706
|
+
};
|
|
1272
2707
|
};
|
|
1273
2708
|
/** @description Waitlist not found. */
|
|
1274
2709
|
404: {
|
|
1275
2710
|
headers: {
|
|
1276
2711
|
[name: string]: unknown;
|
|
1277
2712
|
};
|
|
1278
|
-
content
|
|
2713
|
+
content: {
|
|
2714
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2715
|
+
};
|
|
1279
2716
|
};
|
|
1280
2717
|
};
|
|
1281
2718
|
};
|
|
1282
2719
|
EntryController_count: {
|
|
1283
2720
|
parameters: {
|
|
1284
|
-
query?:
|
|
2721
|
+
query?: {
|
|
2722
|
+
/** @description Count test entries ("Add test signup") too. Default `false`: they are left out. */
|
|
2723
|
+
include_test?: boolean;
|
|
2724
|
+
};
|
|
1285
2725
|
header?: never;
|
|
1286
2726
|
path: {
|
|
1287
2727
|
workspace_id: string;
|
|
@@ -1291,17 +2731,32 @@ interface operations {
|
|
|
1291
2731
|
};
|
|
1292
2732
|
requestBody?: never;
|
|
1293
2733
|
responses: {
|
|
2734
|
+
/** @description Entry count. */
|
|
1294
2735
|
200: {
|
|
1295
2736
|
headers: {
|
|
1296
2737
|
[name: string]: unknown;
|
|
1297
2738
|
};
|
|
1298
|
-
content
|
|
1299
|
-
|
|
2739
|
+
content: {
|
|
2740
|
+
"application/json": components["schemas"]["EntryCountResponseDto"];
|
|
2741
|
+
};
|
|
2742
|
+
};
|
|
2743
|
+
/** @description Waitlist not found in this workspace. */
|
|
2744
|
+
404: {
|
|
2745
|
+
headers: {
|
|
2746
|
+
[name: string]: unknown;
|
|
2747
|
+
};
|
|
2748
|
+
content: {
|
|
2749
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2750
|
+
};
|
|
2751
|
+
};
|
|
1300
2752
|
};
|
|
1301
2753
|
};
|
|
1302
2754
|
EntryController_exportCsv: {
|
|
1303
2755
|
parameters: {
|
|
1304
|
-
query?:
|
|
2756
|
+
query?: {
|
|
2757
|
+
/** @description Count test entries ("Add test signup") too. Default `false`: they are left out. */
|
|
2758
|
+
include_test?: boolean;
|
|
2759
|
+
};
|
|
1305
2760
|
header?: never;
|
|
1306
2761
|
path: {
|
|
1307
2762
|
workspace_id: string;
|
|
@@ -1311,12 +2766,32 @@ interface operations {
|
|
|
1311
2766
|
};
|
|
1312
2767
|
requestBody?: never;
|
|
1313
2768
|
responses: {
|
|
1314
|
-
/** @description
|
|
2769
|
+
/** @description text/csv stream — one header row + one row per entry. Content-Disposition: attachment. */
|
|
1315
2770
|
200: {
|
|
1316
2771
|
headers: {
|
|
1317
2772
|
[name: string]: unknown;
|
|
1318
2773
|
};
|
|
1319
|
-
content
|
|
2774
|
+
content: {
|
|
2775
|
+
"text/csv": string;
|
|
2776
|
+
};
|
|
2777
|
+
};
|
|
2778
|
+
/** @description Caller lacks `waitlist.export`. */
|
|
2779
|
+
403: {
|
|
2780
|
+
headers: {
|
|
2781
|
+
[name: string]: unknown;
|
|
2782
|
+
};
|
|
2783
|
+
content: {
|
|
2784
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2785
|
+
};
|
|
2786
|
+
};
|
|
2787
|
+
/** @description Waitlist not found in this workspace. */
|
|
2788
|
+
404: {
|
|
2789
|
+
headers: {
|
|
2790
|
+
[name: string]: unknown;
|
|
2791
|
+
};
|
|
2792
|
+
content: {
|
|
2793
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2794
|
+
};
|
|
1320
2795
|
};
|
|
1321
2796
|
};
|
|
1322
2797
|
};
|
|
@@ -1347,7 +2822,9 @@ interface operations {
|
|
|
1347
2822
|
headers: {
|
|
1348
2823
|
[name: string]: unknown;
|
|
1349
2824
|
};
|
|
1350
|
-
content
|
|
2825
|
+
content: {
|
|
2826
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2827
|
+
};
|
|
1351
2828
|
};
|
|
1352
2829
|
};
|
|
1353
2830
|
};
|
|
@@ -1376,14 +2853,18 @@ interface operations {
|
|
|
1376
2853
|
headers: {
|
|
1377
2854
|
[name: string]: unknown;
|
|
1378
2855
|
};
|
|
1379
|
-
content
|
|
2856
|
+
content: {
|
|
2857
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2858
|
+
};
|
|
1380
2859
|
};
|
|
1381
2860
|
/** @description Entry not found. */
|
|
1382
2861
|
404: {
|
|
1383
2862
|
headers: {
|
|
1384
2863
|
[name: string]: unknown;
|
|
1385
2864
|
};
|
|
1386
|
-
content
|
|
2865
|
+
content: {
|
|
2866
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2867
|
+
};
|
|
1387
2868
|
};
|
|
1388
2869
|
};
|
|
1389
2870
|
};
|
|
@@ -1418,232 +2899,1072 @@ interface operations {
|
|
|
1418
2899
|
headers: {
|
|
1419
2900
|
[name: string]: unknown;
|
|
1420
2901
|
};
|
|
1421
|
-
content
|
|
2902
|
+
content: {
|
|
2903
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2904
|
+
};
|
|
1422
2905
|
};
|
|
1423
2906
|
/** @description Caller lacks `entry.update`. */
|
|
1424
2907
|
403: {
|
|
1425
2908
|
headers: {
|
|
1426
2909
|
[name: string]: unknown;
|
|
1427
2910
|
};
|
|
1428
|
-
content
|
|
2911
|
+
content: {
|
|
2912
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2913
|
+
};
|
|
2914
|
+
};
|
|
2915
|
+
/** @description Entry not found in this waitlist. */
|
|
2916
|
+
404: {
|
|
2917
|
+
headers: {
|
|
2918
|
+
[name: string]: unknown;
|
|
2919
|
+
};
|
|
2920
|
+
content: {
|
|
2921
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2922
|
+
};
|
|
2923
|
+
};
|
|
2924
|
+
};
|
|
2925
|
+
};
|
|
2926
|
+
EntryController_inviteToApp: {
|
|
2927
|
+
parameters: {
|
|
2928
|
+
query?: never;
|
|
2929
|
+
header?: never;
|
|
2930
|
+
path: {
|
|
2931
|
+
workspace_id: string;
|
|
2932
|
+
waitlist_id: string;
|
|
2933
|
+
entry_id: string;
|
|
2934
|
+
};
|
|
2935
|
+
cookie?: never;
|
|
2936
|
+
};
|
|
2937
|
+
requestBody: {
|
|
2938
|
+
content: {
|
|
2939
|
+
"application/json": components["schemas"]["InviteToAppDto"];
|
|
2940
|
+
};
|
|
2941
|
+
};
|
|
2942
|
+
responses: {
|
|
2943
|
+
/** @description Invite created in Auth */
|
|
2944
|
+
200: {
|
|
2945
|
+
headers: {
|
|
2946
|
+
[name: string]: unknown;
|
|
2947
|
+
};
|
|
2948
|
+
content: {
|
|
2949
|
+
"application/json": components["schemas"]["InviteToAppResponseDto"];
|
|
2950
|
+
};
|
|
2951
|
+
};
|
|
2952
|
+
/** @description No linked Auth app for this workspace */
|
|
2953
|
+
422: {
|
|
2954
|
+
headers: {
|
|
2955
|
+
[name: string]: unknown;
|
|
2956
|
+
};
|
|
2957
|
+
content: {
|
|
2958
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2959
|
+
};
|
|
2960
|
+
};
|
|
2961
|
+
};
|
|
2962
|
+
};
|
|
2963
|
+
TestEntryController_create: {
|
|
2964
|
+
parameters: {
|
|
2965
|
+
query?: never;
|
|
2966
|
+
header?: {
|
|
2967
|
+
/** @description Idempotency key (24 h). A retry with the same key returns the first test entry instead of adding a second one. */
|
|
2968
|
+
"Idempotency-Key"?: string;
|
|
2969
|
+
};
|
|
2970
|
+
path: {
|
|
2971
|
+
workspace_id: string;
|
|
2972
|
+
waitlist_id: string;
|
|
2973
|
+
};
|
|
2974
|
+
cookie?: never;
|
|
2975
|
+
};
|
|
2976
|
+
requestBody: {
|
|
2977
|
+
content: {
|
|
2978
|
+
"application/json": components["schemas"]["CreateTestEntryDto"];
|
|
2979
|
+
};
|
|
2980
|
+
};
|
|
2981
|
+
responses: {
|
|
2982
|
+
/** @description Test entry created. */
|
|
2983
|
+
201: {
|
|
2984
|
+
headers: {
|
|
2985
|
+
[name: string]: unknown;
|
|
2986
|
+
};
|
|
2987
|
+
content: {
|
|
2988
|
+
"application/json": components["schemas"]["EntryResponseDto"];
|
|
2989
|
+
};
|
|
2990
|
+
};
|
|
2991
|
+
/** @description Validation failure. */
|
|
2992
|
+
400: {
|
|
2993
|
+
headers: {
|
|
2994
|
+
[name: string]: unknown;
|
|
2995
|
+
};
|
|
2996
|
+
content: {
|
|
2997
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
2998
|
+
};
|
|
2999
|
+
};
|
|
3000
|
+
/** @description Caller lacks `waitlist.update`, or workspace has not enabled the `waitlist` service. */
|
|
3001
|
+
403: {
|
|
3002
|
+
headers: {
|
|
3003
|
+
[name: string]: unknown;
|
|
3004
|
+
};
|
|
3005
|
+
content: {
|
|
3006
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3007
|
+
};
|
|
3008
|
+
};
|
|
3009
|
+
/** @description Waitlist not found in this workspace. */
|
|
3010
|
+
404: {
|
|
3011
|
+
headers: {
|
|
3012
|
+
[name: string]: unknown;
|
|
3013
|
+
};
|
|
3014
|
+
content: {
|
|
3015
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3016
|
+
};
|
|
3017
|
+
};
|
|
3018
|
+
/** @description Idempotency-Key reused with a different body. */
|
|
3019
|
+
409: {
|
|
3020
|
+
headers: {
|
|
3021
|
+
[name: string]: unknown;
|
|
3022
|
+
};
|
|
3023
|
+
content: {
|
|
3024
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3025
|
+
};
|
|
3026
|
+
};
|
|
3027
|
+
/** @description The waitlist is closed. */
|
|
3028
|
+
422: {
|
|
3029
|
+
headers: {
|
|
3030
|
+
[name: string]: unknown;
|
|
3031
|
+
};
|
|
3032
|
+
content: {
|
|
3033
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3034
|
+
};
|
|
3035
|
+
};
|
|
3036
|
+
};
|
|
3037
|
+
};
|
|
3038
|
+
VariantController_list: {
|
|
3039
|
+
parameters: {
|
|
3040
|
+
query?: {
|
|
3041
|
+
/** @description Page size. Defaults to 20; values above 100 are clamped to 100. */
|
|
3042
|
+
limit?: number;
|
|
3043
|
+
/** @description Opaque cursor from the previous page's `pagination.next_cursor`. Omit for the first page. */
|
|
3044
|
+
cursor?: string;
|
|
3045
|
+
};
|
|
3046
|
+
header?: never;
|
|
3047
|
+
path: {
|
|
3048
|
+
workspace_id: string;
|
|
3049
|
+
waitlist_id: string;
|
|
3050
|
+
};
|
|
3051
|
+
cookie?: never;
|
|
3052
|
+
};
|
|
3053
|
+
requestBody?: never;
|
|
3054
|
+
responses: {
|
|
3055
|
+
/** @description Page of variants in (kind, locale, created_at) order with a pagination cursor. */
|
|
3056
|
+
200: {
|
|
3057
|
+
headers: {
|
|
3058
|
+
[name: string]: unknown;
|
|
3059
|
+
};
|
|
3060
|
+
content: {
|
|
3061
|
+
"application/json": components["schemas"]["VariantListResponseDto"];
|
|
3062
|
+
};
|
|
3063
|
+
};
|
|
3064
|
+
/** @description Invalid cursor. */
|
|
3065
|
+
400: {
|
|
3066
|
+
headers: {
|
|
3067
|
+
[name: string]: unknown;
|
|
3068
|
+
};
|
|
3069
|
+
content: {
|
|
3070
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3071
|
+
};
|
|
3072
|
+
};
|
|
3073
|
+
/** @description Waitlist not found in this workspace */
|
|
3074
|
+
404: {
|
|
3075
|
+
headers: {
|
|
3076
|
+
[name: string]: unknown;
|
|
3077
|
+
};
|
|
3078
|
+
content: {
|
|
3079
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3080
|
+
};
|
|
3081
|
+
};
|
|
3082
|
+
};
|
|
3083
|
+
};
|
|
3084
|
+
VariantController_create: {
|
|
3085
|
+
parameters: {
|
|
3086
|
+
query?: never;
|
|
3087
|
+
header?: never;
|
|
3088
|
+
path: {
|
|
3089
|
+
workspace_id: string;
|
|
3090
|
+
waitlist_id: string;
|
|
3091
|
+
};
|
|
3092
|
+
cookie?: never;
|
|
3093
|
+
};
|
|
3094
|
+
requestBody: {
|
|
3095
|
+
content: {
|
|
3096
|
+
"application/json": components["schemas"]["CreateVariantDto"];
|
|
3097
|
+
};
|
|
3098
|
+
};
|
|
3099
|
+
responses: {
|
|
3100
|
+
/** @description Variant created */
|
|
3101
|
+
201: {
|
|
3102
|
+
headers: {
|
|
3103
|
+
[name: string]: unknown;
|
|
3104
|
+
};
|
|
3105
|
+
content: {
|
|
3106
|
+
"application/json": components["schemas"]["VariantResponseDto"];
|
|
3107
|
+
};
|
|
3108
|
+
};
|
|
3109
|
+
/** @description Validation failure */
|
|
3110
|
+
400: {
|
|
3111
|
+
headers: {
|
|
3112
|
+
[name: string]: unknown;
|
|
3113
|
+
};
|
|
3114
|
+
content: {
|
|
3115
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3116
|
+
};
|
|
3117
|
+
};
|
|
3118
|
+
/** @description Waitlist not found in this workspace */
|
|
3119
|
+
404: {
|
|
3120
|
+
headers: {
|
|
3121
|
+
[name: string]: unknown;
|
|
3122
|
+
};
|
|
3123
|
+
content: {
|
|
3124
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3125
|
+
};
|
|
3126
|
+
};
|
|
3127
|
+
};
|
|
3128
|
+
};
|
|
3129
|
+
VariantController_remove: {
|
|
3130
|
+
parameters: {
|
|
3131
|
+
query?: never;
|
|
3132
|
+
header?: never;
|
|
3133
|
+
path: {
|
|
3134
|
+
workspace_id: string;
|
|
3135
|
+
waitlist_id: string;
|
|
3136
|
+
id: string;
|
|
3137
|
+
};
|
|
3138
|
+
cookie?: never;
|
|
3139
|
+
};
|
|
3140
|
+
requestBody?: never;
|
|
3141
|
+
responses: {
|
|
3142
|
+
/** @description Variant deleted */
|
|
3143
|
+
204: {
|
|
3144
|
+
headers: {
|
|
3145
|
+
[name: string]: unknown;
|
|
3146
|
+
};
|
|
3147
|
+
content?: never;
|
|
3148
|
+
};
|
|
3149
|
+
/** @description Variant not found */
|
|
3150
|
+
404: {
|
|
3151
|
+
headers: {
|
|
3152
|
+
[name: string]: unknown;
|
|
3153
|
+
};
|
|
3154
|
+
content: {
|
|
3155
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3156
|
+
};
|
|
3157
|
+
};
|
|
3158
|
+
};
|
|
3159
|
+
};
|
|
3160
|
+
VariantController_update: {
|
|
3161
|
+
parameters: {
|
|
3162
|
+
query?: never;
|
|
3163
|
+
header?: never;
|
|
3164
|
+
path: {
|
|
3165
|
+
workspace_id: string;
|
|
3166
|
+
waitlist_id: string;
|
|
3167
|
+
id: string;
|
|
3168
|
+
};
|
|
3169
|
+
cookie?: never;
|
|
3170
|
+
};
|
|
3171
|
+
requestBody: {
|
|
3172
|
+
content: {
|
|
3173
|
+
"application/json": components["schemas"]["UpdateVariantDto"];
|
|
3174
|
+
};
|
|
3175
|
+
};
|
|
3176
|
+
responses: {
|
|
3177
|
+
/** @description Variant updated */
|
|
3178
|
+
200: {
|
|
3179
|
+
headers: {
|
|
3180
|
+
[name: string]: unknown;
|
|
3181
|
+
};
|
|
3182
|
+
content: {
|
|
3183
|
+
"application/json": components["schemas"]["VariantResponseDto"];
|
|
3184
|
+
};
|
|
3185
|
+
};
|
|
3186
|
+
/** @description Variant not found */
|
|
3187
|
+
404: {
|
|
3188
|
+
headers: {
|
|
3189
|
+
[name: string]: unknown;
|
|
3190
|
+
};
|
|
3191
|
+
content: {
|
|
3192
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3193
|
+
};
|
|
3194
|
+
};
|
|
3195
|
+
};
|
|
3196
|
+
};
|
|
3197
|
+
WebhookController_list: {
|
|
3198
|
+
parameters: {
|
|
3199
|
+
query?: {
|
|
3200
|
+
/** @description Page size. Defaults to 20; values above 100 are clamped to 100. */
|
|
3201
|
+
limit?: number;
|
|
3202
|
+
/** @description Opaque cursor from the previous page's `pagination.next_cursor`. Omit for the first page. */
|
|
3203
|
+
cursor?: string;
|
|
3204
|
+
};
|
|
3205
|
+
header?: never;
|
|
3206
|
+
path: {
|
|
3207
|
+
workspace_id: string;
|
|
3208
|
+
};
|
|
3209
|
+
cookie?: never;
|
|
3210
|
+
};
|
|
3211
|
+
requestBody?: never;
|
|
3212
|
+
responses: {
|
|
3213
|
+
/** @description Page of webhooks for the workspace. */
|
|
3214
|
+
200: {
|
|
3215
|
+
headers: {
|
|
3216
|
+
[name: string]: unknown;
|
|
3217
|
+
};
|
|
3218
|
+
content: {
|
|
3219
|
+
"application/json": components["schemas"]["WebhookListResponseDto"];
|
|
3220
|
+
};
|
|
3221
|
+
};
|
|
3222
|
+
/** @description Invalid cursor. */
|
|
3223
|
+
400: {
|
|
3224
|
+
headers: {
|
|
3225
|
+
[name: string]: unknown;
|
|
3226
|
+
};
|
|
3227
|
+
content: {
|
|
3228
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3229
|
+
};
|
|
3230
|
+
};
|
|
3231
|
+
};
|
|
3232
|
+
};
|
|
3233
|
+
WebhookController_create: {
|
|
3234
|
+
parameters: {
|
|
3235
|
+
query?: never;
|
|
3236
|
+
header?: {
|
|
3237
|
+
/** @description Stripe-style idempotency key. The signing secret is returned exactly once; a retry without this header creates a second webhook + secret you never see the plaintext for. 24h TTL. */
|
|
3238
|
+
"Idempotency-Key"?: string;
|
|
3239
|
+
};
|
|
3240
|
+
path: {
|
|
3241
|
+
workspace_id: string;
|
|
3242
|
+
};
|
|
3243
|
+
cookie?: never;
|
|
3244
|
+
};
|
|
3245
|
+
requestBody: {
|
|
3246
|
+
content: {
|
|
3247
|
+
"application/json": components["schemas"]["CreateWebhookDto"];
|
|
3248
|
+
};
|
|
3249
|
+
};
|
|
3250
|
+
responses: {
|
|
3251
|
+
/** @description Webhook created. Includes plaintext `signing_secret` exactly once. */
|
|
3252
|
+
201: {
|
|
3253
|
+
headers: {
|
|
3254
|
+
[name: string]: unknown;
|
|
3255
|
+
};
|
|
3256
|
+
content: {
|
|
3257
|
+
"application/json": components["schemas"]["WebhookCreateResponseDto"];
|
|
3258
|
+
};
|
|
3259
|
+
};
|
|
3260
|
+
/** @description The workspace already has 10 webhooks. */
|
|
3261
|
+
409: {
|
|
3262
|
+
headers: {
|
|
3263
|
+
[name: string]: unknown;
|
|
3264
|
+
};
|
|
3265
|
+
content: {
|
|
3266
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3267
|
+
};
|
|
3268
|
+
};
|
|
3269
|
+
};
|
|
3270
|
+
};
|
|
3271
|
+
WebhooksController_waitlist_workspace_listEndpoints: {
|
|
3272
|
+
parameters: {
|
|
3273
|
+
query?: never;
|
|
3274
|
+
header?: never;
|
|
3275
|
+
path: {
|
|
3276
|
+
workspace_id: string;
|
|
3277
|
+
};
|
|
3278
|
+
cookie?: never;
|
|
3279
|
+
};
|
|
3280
|
+
requestBody?: never;
|
|
3281
|
+
responses: {
|
|
3282
|
+
200: {
|
|
3283
|
+
headers: {
|
|
3284
|
+
[name: string]: unknown;
|
|
3285
|
+
};
|
|
3286
|
+
content: {
|
|
3287
|
+
"application/json": components["schemas"]["ListWebhookEndpointsResponseDto"];
|
|
3288
|
+
};
|
|
3289
|
+
};
|
|
3290
|
+
/** @description The scope id in the path is malformed. */
|
|
3291
|
+
400: {
|
|
3292
|
+
headers: {
|
|
3293
|
+
[name: string]: unknown;
|
|
3294
|
+
};
|
|
3295
|
+
content: {
|
|
3296
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3297
|
+
};
|
|
3298
|
+
};
|
|
3299
|
+
/** @description Missing or invalid bearer token. */
|
|
3300
|
+
401: {
|
|
3301
|
+
headers: {
|
|
3302
|
+
[name: string]: unknown;
|
|
3303
|
+
};
|
|
3304
|
+
content: {
|
|
3305
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3306
|
+
};
|
|
3307
|
+
};
|
|
3308
|
+
/** @description Caller lacks `waitlist.webhook.read` (reads) or `waitlist.webhook.manage` (changes, Send test, replay), or Waitlist is not enabled for the workspace (`SERVICE_NOT_ENABLED`). */
|
|
3309
|
+
403: {
|
|
3310
|
+
headers: {
|
|
3311
|
+
[name: string]: unknown;
|
|
3312
|
+
};
|
|
3313
|
+
content: {
|
|
3314
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3315
|
+
};
|
|
3316
|
+
};
|
|
3317
|
+
};
|
|
3318
|
+
};
|
|
3319
|
+
WebhooksController_waitlist_workspace_createEndpoint: {
|
|
3320
|
+
parameters: {
|
|
3321
|
+
query?: never;
|
|
3322
|
+
header?: {
|
|
3323
|
+
/** @description Opaque client-generated string (1-256 chars, `[A-Za-z0-9_-:]`) that makes a retry of this request safe for 24 hours. The same key with a different body returns 409 `IDEMPOTENCY_KEY_REUSE`. */
|
|
3324
|
+
"Idempotency-Key"?: string;
|
|
3325
|
+
};
|
|
3326
|
+
path: {
|
|
3327
|
+
workspace_id: string;
|
|
3328
|
+
};
|
|
3329
|
+
cookie?: never;
|
|
3330
|
+
};
|
|
3331
|
+
requestBody: {
|
|
3332
|
+
content: {
|
|
3333
|
+
"application/json": components["schemas"]["CreateWebhookEndpointDto"];
|
|
3334
|
+
};
|
|
3335
|
+
};
|
|
3336
|
+
responses: {
|
|
3337
|
+
201: {
|
|
3338
|
+
headers: {
|
|
3339
|
+
[name: string]: unknown;
|
|
3340
|
+
};
|
|
3341
|
+
content: {
|
|
3342
|
+
"application/json": components["schemas"]["WebhookEndpointWithSecretDto"];
|
|
3343
|
+
};
|
|
3344
|
+
};
|
|
3345
|
+
/** @description Validation failure: URL not https with a public host, or an unknown event type (`WEBHOOK_EVENT_TYPE_UNKNOWN`). */
|
|
3346
|
+
400: {
|
|
3347
|
+
headers: {
|
|
3348
|
+
[name: string]: unknown;
|
|
3349
|
+
};
|
|
3350
|
+
content: {
|
|
3351
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3352
|
+
};
|
|
3353
|
+
};
|
|
3354
|
+
/** @description Missing or invalid bearer token. */
|
|
3355
|
+
401: {
|
|
3356
|
+
headers: {
|
|
3357
|
+
[name: string]: unknown;
|
|
3358
|
+
};
|
|
3359
|
+
content: {
|
|
3360
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3361
|
+
};
|
|
3362
|
+
};
|
|
3363
|
+
/** @description Caller lacks `waitlist.webhook.read` (reads) or `waitlist.webhook.manage` (changes, Send test, replay), or Waitlist is not enabled for the workspace (`SERVICE_NOT_ENABLED`). */
|
|
3364
|
+
403: {
|
|
3365
|
+
headers: {
|
|
3366
|
+
[name: string]: unknown;
|
|
3367
|
+
};
|
|
3368
|
+
content: {
|
|
3369
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3370
|
+
};
|
|
3371
|
+
};
|
|
3372
|
+
/** @description Already 10 endpoints (`WEBHOOK_ENDPOINT_LIMIT`), or Idempotency-Key reused with a different body (`IDEMPOTENCY_KEY_REUSE`). */
|
|
3373
|
+
409: {
|
|
3374
|
+
headers: {
|
|
3375
|
+
[name: string]: unknown;
|
|
3376
|
+
};
|
|
3377
|
+
content: {
|
|
3378
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3379
|
+
};
|
|
3380
|
+
};
|
|
3381
|
+
/** @description The URL points at a private, loopback or internal address. */
|
|
3382
|
+
422: {
|
|
3383
|
+
headers: {
|
|
3384
|
+
[name: string]: unknown;
|
|
3385
|
+
};
|
|
3386
|
+
content: {
|
|
3387
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3388
|
+
};
|
|
3389
|
+
};
|
|
3390
|
+
};
|
|
3391
|
+
};
|
|
3392
|
+
WebhooksController_waitlist_workspace_getEndpoint: {
|
|
3393
|
+
parameters: {
|
|
3394
|
+
query?: never;
|
|
3395
|
+
header?: never;
|
|
3396
|
+
path: {
|
|
3397
|
+
workspace_id: string;
|
|
3398
|
+
endpoint_id: string;
|
|
3399
|
+
};
|
|
3400
|
+
cookie?: never;
|
|
3401
|
+
};
|
|
3402
|
+
requestBody?: never;
|
|
3403
|
+
responses: {
|
|
3404
|
+
200: {
|
|
3405
|
+
headers: {
|
|
3406
|
+
[name: string]: unknown;
|
|
3407
|
+
};
|
|
3408
|
+
content: {
|
|
3409
|
+
"application/json": components["schemas"]["WebhookEndpointDto"];
|
|
3410
|
+
};
|
|
3411
|
+
};
|
|
3412
|
+
/** @description `endpoint_id` is not a UUID. */
|
|
3413
|
+
400: {
|
|
3414
|
+
headers: {
|
|
3415
|
+
[name: string]: unknown;
|
|
3416
|
+
};
|
|
3417
|
+
content: {
|
|
3418
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3419
|
+
};
|
|
3420
|
+
};
|
|
3421
|
+
/** @description Missing or invalid bearer token. */
|
|
3422
|
+
401: {
|
|
3423
|
+
headers: {
|
|
3424
|
+
[name: string]: unknown;
|
|
3425
|
+
};
|
|
3426
|
+
content: {
|
|
3427
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3428
|
+
};
|
|
3429
|
+
};
|
|
3430
|
+
/** @description Caller lacks `waitlist.webhook.read` (reads) or `waitlist.webhook.manage` (changes, Send test, replay), or Waitlist is not enabled for the workspace (`SERVICE_NOT_ENABLED`). */
|
|
3431
|
+
403: {
|
|
3432
|
+
headers: {
|
|
3433
|
+
[name: string]: unknown;
|
|
3434
|
+
};
|
|
3435
|
+
content: {
|
|
3436
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3437
|
+
};
|
|
3438
|
+
};
|
|
3439
|
+
/** @description No such endpoint here (`WEBHOOK_ENDPOINT_NOT_FOUND`). */
|
|
3440
|
+
404: {
|
|
3441
|
+
headers: {
|
|
3442
|
+
[name: string]: unknown;
|
|
3443
|
+
};
|
|
3444
|
+
content: {
|
|
3445
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3446
|
+
};
|
|
3447
|
+
};
|
|
3448
|
+
};
|
|
3449
|
+
};
|
|
3450
|
+
WebhooksController_waitlist_workspace_deleteEndpoint: {
|
|
3451
|
+
parameters: {
|
|
3452
|
+
query?: never;
|
|
3453
|
+
header?: never;
|
|
3454
|
+
path: {
|
|
3455
|
+
workspace_id: string;
|
|
3456
|
+
endpoint_id: string;
|
|
3457
|
+
};
|
|
3458
|
+
cookie?: never;
|
|
3459
|
+
};
|
|
3460
|
+
requestBody?: never;
|
|
3461
|
+
responses: {
|
|
3462
|
+
/** @description Deleted. */
|
|
3463
|
+
204: {
|
|
3464
|
+
headers: {
|
|
3465
|
+
[name: string]: unknown;
|
|
3466
|
+
};
|
|
3467
|
+
content?: never;
|
|
3468
|
+
};
|
|
3469
|
+
/** @description `endpoint_id` is not a UUID. */
|
|
3470
|
+
400: {
|
|
3471
|
+
headers: {
|
|
3472
|
+
[name: string]: unknown;
|
|
3473
|
+
};
|
|
3474
|
+
content: {
|
|
3475
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3476
|
+
};
|
|
3477
|
+
};
|
|
3478
|
+
/** @description Missing or invalid bearer token. */
|
|
3479
|
+
401: {
|
|
3480
|
+
headers: {
|
|
3481
|
+
[name: string]: unknown;
|
|
3482
|
+
};
|
|
3483
|
+
content: {
|
|
3484
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3485
|
+
};
|
|
3486
|
+
};
|
|
3487
|
+
/** @description Caller lacks `waitlist.webhook.read` (reads) or `waitlist.webhook.manage` (changes, Send test, replay), or Waitlist is not enabled for the workspace (`SERVICE_NOT_ENABLED`). */
|
|
3488
|
+
403: {
|
|
3489
|
+
headers: {
|
|
3490
|
+
[name: string]: unknown;
|
|
3491
|
+
};
|
|
3492
|
+
content: {
|
|
3493
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3494
|
+
};
|
|
3495
|
+
};
|
|
3496
|
+
/** @description No such endpoint here (`WEBHOOK_ENDPOINT_NOT_FOUND`). */
|
|
3497
|
+
404: {
|
|
3498
|
+
headers: {
|
|
3499
|
+
[name: string]: unknown;
|
|
3500
|
+
};
|
|
3501
|
+
content: {
|
|
3502
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3503
|
+
};
|
|
3504
|
+
};
|
|
3505
|
+
};
|
|
3506
|
+
};
|
|
3507
|
+
WebhooksController_waitlist_workspace_updateEndpoint: {
|
|
3508
|
+
parameters: {
|
|
3509
|
+
query?: never;
|
|
3510
|
+
header?: {
|
|
3511
|
+
/** @description Opaque client-generated string (1-256 chars, `[A-Za-z0-9_-:]`) that makes a retry of this request safe for 24 hours. The same key with a different body returns 409 `IDEMPOTENCY_KEY_REUSE`. */
|
|
3512
|
+
"Idempotency-Key"?: string;
|
|
3513
|
+
};
|
|
3514
|
+
path: {
|
|
3515
|
+
workspace_id: string;
|
|
3516
|
+
endpoint_id: string;
|
|
3517
|
+
};
|
|
3518
|
+
cookie?: never;
|
|
3519
|
+
};
|
|
3520
|
+
requestBody: {
|
|
3521
|
+
content: {
|
|
3522
|
+
"application/json": components["schemas"]["UpdateWebhookEndpointDto"];
|
|
3523
|
+
};
|
|
3524
|
+
};
|
|
3525
|
+
responses: {
|
|
3526
|
+
200: {
|
|
3527
|
+
headers: {
|
|
3528
|
+
[name: string]: unknown;
|
|
3529
|
+
};
|
|
3530
|
+
content: {
|
|
3531
|
+
"application/json": components["schemas"]["WebhookEndpointDto"];
|
|
3532
|
+
};
|
|
3533
|
+
};
|
|
3534
|
+
/** @description Validation failure, or `endpoint_id` is not a UUID. */
|
|
3535
|
+
400: {
|
|
3536
|
+
headers: {
|
|
3537
|
+
[name: string]: unknown;
|
|
3538
|
+
};
|
|
3539
|
+
content: {
|
|
3540
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3541
|
+
};
|
|
3542
|
+
};
|
|
3543
|
+
/** @description Missing or invalid bearer token. */
|
|
3544
|
+
401: {
|
|
3545
|
+
headers: {
|
|
3546
|
+
[name: string]: unknown;
|
|
3547
|
+
};
|
|
3548
|
+
content: {
|
|
3549
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3550
|
+
};
|
|
3551
|
+
};
|
|
3552
|
+
/** @description Caller lacks `waitlist.webhook.read` (reads) or `waitlist.webhook.manage` (changes, Send test, replay), or Waitlist is not enabled for the workspace (`SERVICE_NOT_ENABLED`). */
|
|
3553
|
+
403: {
|
|
3554
|
+
headers: {
|
|
3555
|
+
[name: string]: unknown;
|
|
3556
|
+
};
|
|
3557
|
+
content: {
|
|
3558
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3559
|
+
};
|
|
3560
|
+
};
|
|
3561
|
+
/** @description No such endpoint here (`WEBHOOK_ENDPOINT_NOT_FOUND`). */
|
|
3562
|
+
404: {
|
|
3563
|
+
headers: {
|
|
3564
|
+
[name: string]: unknown;
|
|
3565
|
+
};
|
|
3566
|
+
content: {
|
|
3567
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3568
|
+
};
|
|
3569
|
+
};
|
|
3570
|
+
/** @description Idempotency-Key reused with a different body (`IDEMPOTENCY_KEY_REUSE`). */
|
|
3571
|
+
409: {
|
|
3572
|
+
headers: {
|
|
3573
|
+
[name: string]: unknown;
|
|
3574
|
+
};
|
|
3575
|
+
content: {
|
|
3576
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3577
|
+
};
|
|
3578
|
+
};
|
|
3579
|
+
/** @description The new URL points at a private, loopback or internal address. */
|
|
3580
|
+
422: {
|
|
3581
|
+
headers: {
|
|
3582
|
+
[name: string]: unknown;
|
|
3583
|
+
};
|
|
3584
|
+
content: {
|
|
3585
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3586
|
+
};
|
|
3587
|
+
};
|
|
3588
|
+
};
|
|
3589
|
+
};
|
|
3590
|
+
WebhooksController_waitlist_workspace_rotateSecret: {
|
|
3591
|
+
parameters: {
|
|
3592
|
+
query?: never;
|
|
3593
|
+
header?: {
|
|
3594
|
+
/** @description Opaque client-generated string (1-256 chars, `[A-Za-z0-9_-:]`) that makes a retry of this request safe for 24 hours. The same key with a different body returns 409 `IDEMPOTENCY_KEY_REUSE`. */
|
|
3595
|
+
"Idempotency-Key"?: string;
|
|
3596
|
+
};
|
|
3597
|
+
path: {
|
|
3598
|
+
workspace_id: string;
|
|
3599
|
+
endpoint_id: string;
|
|
3600
|
+
};
|
|
3601
|
+
cookie?: never;
|
|
3602
|
+
};
|
|
3603
|
+
requestBody: {
|
|
3604
|
+
content: {
|
|
3605
|
+
"application/json": components["schemas"]["RotateWebhookSecretDto"];
|
|
3606
|
+
};
|
|
3607
|
+
};
|
|
3608
|
+
responses: {
|
|
3609
|
+
200: {
|
|
3610
|
+
headers: {
|
|
3611
|
+
[name: string]: unknown;
|
|
3612
|
+
};
|
|
3613
|
+
content: {
|
|
3614
|
+
"application/json": components["schemas"]["WebhookEndpointWithSecretDto"];
|
|
3615
|
+
};
|
|
3616
|
+
};
|
|
3617
|
+
/** @description `grace_hours` out of range, or `endpoint_id` is not a UUID. */
|
|
3618
|
+
400: {
|
|
3619
|
+
headers: {
|
|
3620
|
+
[name: string]: unknown;
|
|
3621
|
+
};
|
|
3622
|
+
content: {
|
|
3623
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3624
|
+
};
|
|
3625
|
+
};
|
|
3626
|
+
/** @description Missing or invalid bearer token. */
|
|
3627
|
+
401: {
|
|
3628
|
+
headers: {
|
|
3629
|
+
[name: string]: unknown;
|
|
3630
|
+
};
|
|
3631
|
+
content: {
|
|
3632
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3633
|
+
};
|
|
3634
|
+
};
|
|
3635
|
+
/** @description Caller lacks `waitlist.webhook.read` (reads) or `waitlist.webhook.manage` (changes, Send test, replay), or Waitlist is not enabled for the workspace (`SERVICE_NOT_ENABLED`). */
|
|
3636
|
+
403: {
|
|
3637
|
+
headers: {
|
|
3638
|
+
[name: string]: unknown;
|
|
3639
|
+
};
|
|
3640
|
+
content: {
|
|
3641
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3642
|
+
};
|
|
3643
|
+
};
|
|
3644
|
+
/** @description No such endpoint here (`WEBHOOK_ENDPOINT_NOT_FOUND`). */
|
|
3645
|
+
404: {
|
|
3646
|
+
headers: {
|
|
3647
|
+
[name: string]: unknown;
|
|
3648
|
+
};
|
|
3649
|
+
content: {
|
|
3650
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3651
|
+
};
|
|
3652
|
+
};
|
|
3653
|
+
/** @description Idempotency-Key reused with a different body (`IDEMPOTENCY_KEY_REUSE`). */
|
|
3654
|
+
409: {
|
|
3655
|
+
headers: {
|
|
3656
|
+
[name: string]: unknown;
|
|
3657
|
+
};
|
|
3658
|
+
content: {
|
|
3659
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3660
|
+
};
|
|
3661
|
+
};
|
|
3662
|
+
};
|
|
3663
|
+
};
|
|
3664
|
+
WebhooksController_waitlist_workspace_sendTest: {
|
|
3665
|
+
parameters: {
|
|
3666
|
+
query?: never;
|
|
3667
|
+
header?: {
|
|
3668
|
+
/** @description Opaque client-generated string (1-256 chars, `[A-Za-z0-9_-:]`) that makes a retry of this request safe for 24 hours. The same key with a different body returns 409 `IDEMPOTENCY_KEY_REUSE`. */
|
|
3669
|
+
"Idempotency-Key"?: string;
|
|
3670
|
+
};
|
|
3671
|
+
path: {
|
|
3672
|
+
workspace_id: string;
|
|
3673
|
+
endpoint_id: string;
|
|
3674
|
+
};
|
|
3675
|
+
cookie?: never;
|
|
3676
|
+
};
|
|
3677
|
+
requestBody: {
|
|
3678
|
+
content: {
|
|
3679
|
+
"application/json": components["schemas"]["SendWebhookTestDto"];
|
|
3680
|
+
};
|
|
3681
|
+
};
|
|
3682
|
+
responses: {
|
|
3683
|
+
/** @description The attempt, successful or not. */
|
|
3684
|
+
200: {
|
|
3685
|
+
headers: {
|
|
3686
|
+
[name: string]: unknown;
|
|
3687
|
+
};
|
|
3688
|
+
content: {
|
|
3689
|
+
"application/json": components["schemas"]["WebhookDeliveryAttemptDto"];
|
|
3690
|
+
};
|
|
3691
|
+
};
|
|
3692
|
+
/** @description Unknown `event_type`, or `endpoint_id` is not a UUID. */
|
|
3693
|
+
400: {
|
|
3694
|
+
headers: {
|
|
3695
|
+
[name: string]: unknown;
|
|
3696
|
+
};
|
|
3697
|
+
content: {
|
|
3698
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3699
|
+
};
|
|
3700
|
+
};
|
|
3701
|
+
/** @description Missing or invalid bearer token. */
|
|
3702
|
+
401: {
|
|
3703
|
+
headers: {
|
|
3704
|
+
[name: string]: unknown;
|
|
3705
|
+
};
|
|
3706
|
+
content: {
|
|
3707
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3708
|
+
};
|
|
3709
|
+
};
|
|
3710
|
+
/** @description Caller lacks `waitlist.webhook.read` (reads) or `waitlist.webhook.manage` (changes, Send test, replay), or Waitlist is not enabled for the workspace (`SERVICE_NOT_ENABLED`). */
|
|
3711
|
+
403: {
|
|
3712
|
+
headers: {
|
|
3713
|
+
[name: string]: unknown;
|
|
3714
|
+
};
|
|
3715
|
+
content: {
|
|
3716
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3717
|
+
};
|
|
3718
|
+
};
|
|
3719
|
+
/** @description No such endpoint here (`WEBHOOK_ENDPOINT_NOT_FOUND`). */
|
|
3720
|
+
404: {
|
|
3721
|
+
headers: {
|
|
3722
|
+
[name: string]: unknown;
|
|
3723
|
+
};
|
|
3724
|
+
content: {
|
|
3725
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3726
|
+
};
|
|
1429
3727
|
};
|
|
1430
|
-
/** @description
|
|
1431
|
-
|
|
3728
|
+
/** @description Idempotency-Key reused with a different body (`IDEMPOTENCY_KEY_REUSE`). */
|
|
3729
|
+
409: {
|
|
1432
3730
|
headers: {
|
|
1433
3731
|
[name: string]: unknown;
|
|
1434
3732
|
};
|
|
1435
|
-
content
|
|
3733
|
+
content: {
|
|
3734
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3735
|
+
};
|
|
1436
3736
|
};
|
|
1437
3737
|
};
|
|
1438
3738
|
};
|
|
1439
|
-
|
|
3739
|
+
WebhooksController_waitlist_workspace_listEventTypes: {
|
|
1440
3740
|
parameters: {
|
|
1441
3741
|
query?: never;
|
|
1442
3742
|
header?: never;
|
|
1443
3743
|
path: {
|
|
1444
3744
|
workspace_id: string;
|
|
1445
|
-
waitlist_id: string;
|
|
1446
|
-
entry_id: string;
|
|
1447
3745
|
};
|
|
1448
3746
|
cookie?: never;
|
|
1449
3747
|
};
|
|
1450
|
-
requestBody
|
|
1451
|
-
content: {
|
|
1452
|
-
"application/json": components["schemas"]["InviteToAppDto"];
|
|
1453
|
-
};
|
|
1454
|
-
};
|
|
3748
|
+
requestBody?: never;
|
|
1455
3749
|
responses: {
|
|
1456
|
-
/** @description Invite created in Auth */
|
|
1457
3750
|
200: {
|
|
1458
3751
|
headers: {
|
|
1459
3752
|
[name: string]: unknown;
|
|
1460
3753
|
};
|
|
1461
|
-
content
|
|
3754
|
+
content: {
|
|
3755
|
+
"application/json": components["schemas"]["ListWebhookEventTypesResponseDto"];
|
|
3756
|
+
};
|
|
1462
3757
|
};
|
|
1463
|
-
/** @description
|
|
1464
|
-
|
|
3758
|
+
/** @description Missing or invalid bearer token. */
|
|
3759
|
+
401: {
|
|
1465
3760
|
headers: {
|
|
1466
3761
|
[name: string]: unknown;
|
|
1467
3762
|
};
|
|
1468
|
-
content
|
|
3763
|
+
content: {
|
|
3764
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3765
|
+
};
|
|
3766
|
+
};
|
|
3767
|
+
/** @description Caller lacks `waitlist.webhook.read` (reads) or `waitlist.webhook.manage` (changes, Send test, replay), or Waitlist is not enabled for the workspace (`SERVICE_NOT_ENABLED`). */
|
|
3768
|
+
403: {
|
|
3769
|
+
headers: {
|
|
3770
|
+
[name: string]: unknown;
|
|
3771
|
+
};
|
|
3772
|
+
content: {
|
|
3773
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3774
|
+
};
|
|
1469
3775
|
};
|
|
1470
3776
|
};
|
|
1471
3777
|
};
|
|
1472
|
-
|
|
3778
|
+
WebhooksController_waitlist_workspace_listEvents: {
|
|
1473
3779
|
parameters: {
|
|
1474
|
-
query?:
|
|
3780
|
+
query?: {
|
|
3781
|
+
/** @description Only these types. Repeat the parameter or comma-separate. */
|
|
3782
|
+
type?: ("entry.created" | "entry.approved" | "entry.rejected")[];
|
|
3783
|
+
/** @description Only events sent (or queued) to this endpoint. */
|
|
3784
|
+
endpoint_id?: string;
|
|
3785
|
+
status?: "pending" | "delivered" | "failed" | "not_sent";
|
|
3786
|
+
/** @description Only events created at or after this instant. */
|
|
3787
|
+
created_after?: string;
|
|
3788
|
+
/** @description Only events created before this instant. */
|
|
3789
|
+
created_before?: string;
|
|
3790
|
+
limit?: number;
|
|
3791
|
+
/** @description The previous page's `pagination.next_cursor`. */
|
|
3792
|
+
cursor?: string;
|
|
3793
|
+
};
|
|
1475
3794
|
header?: never;
|
|
1476
3795
|
path: {
|
|
1477
3796
|
workspace_id: string;
|
|
1478
|
-
waitlist_id: string;
|
|
1479
3797
|
};
|
|
1480
3798
|
cookie?: never;
|
|
1481
3799
|
};
|
|
1482
3800
|
requestBody?: never;
|
|
1483
3801
|
responses: {
|
|
1484
|
-
/** @description Bare array of variants */
|
|
1485
3802
|
200: {
|
|
1486
3803
|
headers: {
|
|
1487
3804
|
[name: string]: unknown;
|
|
1488
3805
|
};
|
|
1489
3806
|
content: {
|
|
1490
|
-
"application/json": components["schemas"]["
|
|
3807
|
+
"application/json": components["schemas"]["ListWebhookEventsResponseDto"];
|
|
1491
3808
|
};
|
|
1492
3809
|
};
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
VariantController_create: {
|
|
1496
|
-
parameters: {
|
|
1497
|
-
query?: never;
|
|
1498
|
-
header?: never;
|
|
1499
|
-
path: {
|
|
1500
|
-
workspace_id: string;
|
|
1501
|
-
waitlist_id: string;
|
|
1502
|
-
};
|
|
1503
|
-
cookie?: never;
|
|
1504
|
-
};
|
|
1505
|
-
requestBody: {
|
|
1506
|
-
content: {
|
|
1507
|
-
"application/json": components["schemas"]["CreateVariantDto"];
|
|
1508
|
-
};
|
|
1509
|
-
};
|
|
1510
|
-
responses: {
|
|
1511
|
-
/** @description Variant created */
|
|
1512
|
-
201: {
|
|
3810
|
+
/** @description Invalid filter value or cursor. */
|
|
3811
|
+
400: {
|
|
1513
3812
|
headers: {
|
|
1514
3813
|
[name: string]: unknown;
|
|
1515
3814
|
};
|
|
1516
3815
|
content: {
|
|
1517
|
-
"application/json": components["schemas"]["
|
|
3816
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
1518
3817
|
};
|
|
1519
3818
|
};
|
|
1520
|
-
/** @description
|
|
1521
|
-
|
|
3819
|
+
/** @description Missing or invalid bearer token. */
|
|
3820
|
+
401: {
|
|
1522
3821
|
headers: {
|
|
1523
3822
|
[name: string]: unknown;
|
|
1524
3823
|
};
|
|
1525
|
-
content
|
|
3824
|
+
content: {
|
|
3825
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3826
|
+
};
|
|
1526
3827
|
};
|
|
1527
|
-
/** @description Waitlist not
|
|
1528
|
-
|
|
3828
|
+
/** @description Caller lacks `waitlist.webhook.read` (reads) or `waitlist.webhook.manage` (changes, Send test, replay), or Waitlist is not enabled for the workspace (`SERVICE_NOT_ENABLED`). */
|
|
3829
|
+
403: {
|
|
1529
3830
|
headers: {
|
|
1530
3831
|
[name: string]: unknown;
|
|
1531
3832
|
};
|
|
1532
|
-
content
|
|
3833
|
+
content: {
|
|
3834
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3835
|
+
};
|
|
1533
3836
|
};
|
|
1534
3837
|
};
|
|
1535
3838
|
};
|
|
1536
|
-
|
|
3839
|
+
WebhooksController_waitlist_workspace_getEvent: {
|
|
1537
3840
|
parameters: {
|
|
1538
3841
|
query?: never;
|
|
1539
3842
|
header?: never;
|
|
1540
3843
|
path: {
|
|
1541
3844
|
workspace_id: string;
|
|
1542
|
-
|
|
1543
|
-
|
|
3845
|
+
/** @description The event id, `evt_<uuid>`. */
|
|
3846
|
+
event_id: string;
|
|
1544
3847
|
};
|
|
1545
3848
|
cookie?: never;
|
|
1546
3849
|
};
|
|
1547
3850
|
requestBody?: never;
|
|
1548
3851
|
responses: {
|
|
1549
|
-
|
|
1550
|
-
204: {
|
|
3852
|
+
200: {
|
|
1551
3853
|
headers: {
|
|
1552
3854
|
[name: string]: unknown;
|
|
1553
3855
|
};
|
|
1554
|
-
content
|
|
3856
|
+
content: {
|
|
3857
|
+
"application/json": components["schemas"]["WebhookEventDetailDto"];
|
|
3858
|
+
};
|
|
1555
3859
|
};
|
|
1556
|
-
/** @description
|
|
1557
|
-
|
|
3860
|
+
/** @description `event_id` is not `evt_<uuid>`. */
|
|
3861
|
+
400: {
|
|
1558
3862
|
headers: {
|
|
1559
3863
|
[name: string]: unknown;
|
|
1560
3864
|
};
|
|
1561
|
-
content
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
};
|
|
1565
|
-
VariantController_update: {
|
|
1566
|
-
parameters: {
|
|
1567
|
-
query?: never;
|
|
1568
|
-
header?: never;
|
|
1569
|
-
path: {
|
|
1570
|
-
workspace_id: string;
|
|
1571
|
-
waitlist_id: string;
|
|
1572
|
-
id: string;
|
|
3865
|
+
content: {
|
|
3866
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3867
|
+
};
|
|
1573
3868
|
};
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
3869
|
+
/** @description Missing or invalid bearer token. */
|
|
3870
|
+
401: {
|
|
3871
|
+
headers: {
|
|
3872
|
+
[name: string]: unknown;
|
|
3873
|
+
};
|
|
3874
|
+
content: {
|
|
3875
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3876
|
+
};
|
|
1579
3877
|
};
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
/** @description Variant updated */
|
|
1583
|
-
200: {
|
|
3878
|
+
/** @description Caller lacks `waitlist.webhook.read` (reads) or `waitlist.webhook.manage` (changes, Send test, replay), or Waitlist is not enabled for the workspace (`SERVICE_NOT_ENABLED`). */
|
|
3879
|
+
403: {
|
|
1584
3880
|
headers: {
|
|
1585
3881
|
[name: string]: unknown;
|
|
1586
3882
|
};
|
|
1587
3883
|
content: {
|
|
1588
|
-
"application/json": components["schemas"]["
|
|
3884
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
1589
3885
|
};
|
|
1590
3886
|
};
|
|
1591
|
-
/** @description
|
|
3887
|
+
/** @description No such event here (`WEBHOOK_EVENT_NOT_FOUND`); events are kept for 30 days. */
|
|
1592
3888
|
404: {
|
|
1593
3889
|
headers: {
|
|
1594
3890
|
[name: string]: unknown;
|
|
1595
3891
|
};
|
|
1596
|
-
content
|
|
3892
|
+
content: {
|
|
3893
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3894
|
+
};
|
|
1597
3895
|
};
|
|
1598
3896
|
};
|
|
1599
3897
|
};
|
|
1600
|
-
|
|
3898
|
+
WebhooksController_waitlist_workspace_replay: {
|
|
1601
3899
|
parameters: {
|
|
1602
|
-
query?:
|
|
1603
|
-
|
|
3900
|
+
query?: {
|
|
3901
|
+
/** @description Send to this endpoint only. */
|
|
3902
|
+
endpoint_id?: string;
|
|
3903
|
+
};
|
|
3904
|
+
header?: {
|
|
3905
|
+
/** @description Opaque client-generated string (1-256 chars, `[A-Za-z0-9_-:]`) that makes a retry of this request safe for 24 hours. The same key with a different body returns 409 `IDEMPOTENCY_KEY_REUSE`. */
|
|
3906
|
+
"Idempotency-Key"?: string;
|
|
3907
|
+
};
|
|
1604
3908
|
path: {
|
|
1605
3909
|
workspace_id: string;
|
|
3910
|
+
/** @description The event id, `evt_<uuid>`. */
|
|
3911
|
+
event_id: string;
|
|
1606
3912
|
};
|
|
1607
3913
|
cookie?: never;
|
|
1608
3914
|
};
|
|
1609
3915
|
requestBody?: never;
|
|
1610
3916
|
responses: {
|
|
1611
|
-
/** @description Webhooks for the workspace. */
|
|
1612
3917
|
200: {
|
|
1613
3918
|
headers: {
|
|
1614
3919
|
[name: string]: unknown;
|
|
1615
3920
|
};
|
|
1616
3921
|
content: {
|
|
1617
|
-
"application/json": components["schemas"]["
|
|
3922
|
+
"application/json": components["schemas"]["ReplayWebhookEventResponseDto"];
|
|
1618
3923
|
};
|
|
1619
3924
|
};
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
3925
|
+
/** @description `event_id` is not `evt_<uuid>`, or `endpoint_id` is not a UUID. */
|
|
3926
|
+
400: {
|
|
3927
|
+
headers: {
|
|
3928
|
+
[name: string]: unknown;
|
|
3929
|
+
};
|
|
3930
|
+
content: {
|
|
3931
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3932
|
+
};
|
|
1628
3933
|
};
|
|
1629
|
-
|
|
1630
|
-
|
|
3934
|
+
/** @description Missing or invalid bearer token. */
|
|
3935
|
+
401: {
|
|
3936
|
+
headers: {
|
|
3937
|
+
[name: string]: unknown;
|
|
3938
|
+
};
|
|
3939
|
+
content: {
|
|
3940
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3941
|
+
};
|
|
1631
3942
|
};
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
3943
|
+
/** @description Caller lacks `waitlist.webhook.read` (reads) or `waitlist.webhook.manage` (changes, Send test, replay), or Waitlist is not enabled for the workspace (`SERVICE_NOT_ENABLED`). */
|
|
3944
|
+
403: {
|
|
3945
|
+
headers: {
|
|
3946
|
+
[name: string]: unknown;
|
|
3947
|
+
};
|
|
3948
|
+
content: {
|
|
3949
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3950
|
+
};
|
|
1637
3951
|
};
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
/** @description Webhook created. Includes plaintext `signing_secret` exactly once. */
|
|
1641
|
-
201: {
|
|
3952
|
+
/** @description No such event here (`WEBHOOK_EVENT_NOT_FOUND`); events are kept for 30 days. Or No such endpoint here (`WEBHOOK_ENDPOINT_NOT_FOUND`). */
|
|
3953
|
+
404: {
|
|
1642
3954
|
headers: {
|
|
1643
3955
|
[name: string]: unknown;
|
|
1644
3956
|
};
|
|
1645
3957
|
content: {
|
|
1646
|
-
"application/json": components["schemas"]["
|
|
3958
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
3959
|
+
};
|
|
3960
|
+
};
|
|
3961
|
+
/** @description `endpoint_id` is switched off or does not receive this event type (`WEBHOOK_ENDPOINT_NOT_SUBSCRIBED`), or Idempotency-Key reused with a different body (`IDEMPOTENCY_KEY_REUSE`). */
|
|
3962
|
+
409: {
|
|
3963
|
+
headers: {
|
|
3964
|
+
[name: string]: unknown;
|
|
3965
|
+
};
|
|
3966
|
+
content: {
|
|
3967
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
1647
3968
|
};
|
|
1648
3969
|
};
|
|
1649
3970
|
};
|
|
@@ -1660,7 +3981,7 @@ interface operations {
|
|
|
1660
3981
|
};
|
|
1661
3982
|
requestBody?: never;
|
|
1662
3983
|
responses: {
|
|
1663
|
-
/** @description Webhook
|
|
3984
|
+
/** @description Webhook. */
|
|
1664
3985
|
200: {
|
|
1665
3986
|
headers: {
|
|
1666
3987
|
[name: string]: unknown;
|
|
@@ -1669,12 +3990,23 @@ interface operations {
|
|
|
1669
3990
|
"application/json": components["schemas"]["WebhookResponseDto"];
|
|
1670
3991
|
};
|
|
1671
3992
|
};
|
|
3993
|
+
/** @description `id` is not a UUID. */
|
|
3994
|
+
400: {
|
|
3995
|
+
headers: {
|
|
3996
|
+
[name: string]: unknown;
|
|
3997
|
+
};
|
|
3998
|
+
content: {
|
|
3999
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
4000
|
+
};
|
|
4001
|
+
};
|
|
1672
4002
|
/** @description Webhook not found. */
|
|
1673
4003
|
404: {
|
|
1674
4004
|
headers: {
|
|
1675
4005
|
[name: string]: unknown;
|
|
1676
4006
|
};
|
|
1677
|
-
content
|
|
4007
|
+
content: {
|
|
4008
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
4009
|
+
};
|
|
1678
4010
|
};
|
|
1679
4011
|
};
|
|
1680
4012
|
};
|
|
@@ -1690,12 +4022,22 @@ interface operations {
|
|
|
1690
4022
|
};
|
|
1691
4023
|
requestBody?: never;
|
|
1692
4024
|
responses: {
|
|
4025
|
+
/** @description Deleted. */
|
|
1693
4026
|
204: {
|
|
1694
4027
|
headers: {
|
|
1695
4028
|
[name: string]: unknown;
|
|
1696
4029
|
};
|
|
1697
4030
|
content?: never;
|
|
1698
4031
|
};
|
|
4032
|
+
/** @description Webhook not found. */
|
|
4033
|
+
404: {
|
|
4034
|
+
headers: {
|
|
4035
|
+
[name: string]: unknown;
|
|
4036
|
+
};
|
|
4037
|
+
content: {
|
|
4038
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
4039
|
+
};
|
|
4040
|
+
};
|
|
1699
4041
|
};
|
|
1700
4042
|
};
|
|
1701
4043
|
WebhookController_update: {
|
|
@@ -1714,17 +4056,36 @@ interface operations {
|
|
|
1714
4056
|
};
|
|
1715
4057
|
};
|
|
1716
4058
|
responses: {
|
|
4059
|
+
/** @description Updated webhook (secret masked). */
|
|
1717
4060
|
200: {
|
|
1718
4061
|
headers: {
|
|
1719
4062
|
[name: string]: unknown;
|
|
1720
4063
|
};
|
|
1721
|
-
content
|
|
4064
|
+
content: {
|
|
4065
|
+
"application/json": components["schemas"]["WebhookResponseDto"];
|
|
4066
|
+
};
|
|
4067
|
+
};
|
|
4068
|
+
/** @description Webhook not found. */
|
|
4069
|
+
404: {
|
|
4070
|
+
headers: {
|
|
4071
|
+
[name: string]: unknown;
|
|
4072
|
+
};
|
|
4073
|
+
content: {
|
|
4074
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
4075
|
+
};
|
|
1722
4076
|
};
|
|
1723
4077
|
};
|
|
1724
4078
|
};
|
|
1725
4079
|
WebhookController_recentDeliveries: {
|
|
1726
4080
|
parameters: {
|
|
1727
|
-
query?:
|
|
4081
|
+
query?: {
|
|
4082
|
+
/** @description Page size. Defaults to 50; values above 200 are clamped to 200. */
|
|
4083
|
+
limit?: number;
|
|
4084
|
+
/** @description Opaque cursor from the previous page's `pagination.next_cursor`. Omit for the first page. */
|
|
4085
|
+
cursor?: string;
|
|
4086
|
+
/** @description `success` is a 2xx response; `failed` is everything else, including attempts that got no response at all (null `status_code`). Unrecognised values are rejected with a 400. */
|
|
4087
|
+
status?: "success" | "failed";
|
|
4088
|
+
};
|
|
1728
4089
|
header?: never;
|
|
1729
4090
|
path: {
|
|
1730
4091
|
workspace_id: string;
|
|
@@ -1734,12 +4095,32 @@ interface operations {
|
|
|
1734
4095
|
};
|
|
1735
4096
|
requestBody?: never;
|
|
1736
4097
|
responses: {
|
|
1737
|
-
/** @description
|
|
4098
|
+
/** @description Delivery attempts, newest first. */
|
|
1738
4099
|
200: {
|
|
1739
4100
|
headers: {
|
|
1740
4101
|
[name: string]: unknown;
|
|
1741
4102
|
};
|
|
1742
|
-
content
|
|
4103
|
+
content: {
|
|
4104
|
+
"application/json": components["schemas"]["WebhookDeliveryListResponseDto"];
|
|
4105
|
+
};
|
|
4106
|
+
};
|
|
4107
|
+
/** @description Invalid cursor or unknown `status` filter. */
|
|
4108
|
+
400: {
|
|
4109
|
+
headers: {
|
|
4110
|
+
[name: string]: unknown;
|
|
4111
|
+
};
|
|
4112
|
+
content: {
|
|
4113
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
4114
|
+
};
|
|
4115
|
+
};
|
|
4116
|
+
/** @description Webhook not found. */
|
|
4117
|
+
404: {
|
|
4118
|
+
headers: {
|
|
4119
|
+
[name: string]: unknown;
|
|
4120
|
+
};
|
|
4121
|
+
content: {
|
|
4122
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
4123
|
+
};
|
|
1743
4124
|
};
|
|
1744
4125
|
};
|
|
1745
4126
|
};
|
|
@@ -1755,11 +4136,23 @@ interface operations {
|
|
|
1755
4136
|
};
|
|
1756
4137
|
requestBody?: never;
|
|
1757
4138
|
responses: {
|
|
4139
|
+
/** @description Secret rotated. Includes the new plaintext secret exactly once. */
|
|
1758
4140
|
201: {
|
|
1759
4141
|
headers: {
|
|
1760
4142
|
[name: string]: unknown;
|
|
1761
4143
|
};
|
|
1762
|
-
content
|
|
4144
|
+
content: {
|
|
4145
|
+
"application/json": components["schemas"]["WebhookRotateSecretResponseDto"];
|
|
4146
|
+
};
|
|
4147
|
+
};
|
|
4148
|
+
/** @description Webhook not found. */
|
|
4149
|
+
404: {
|
|
4150
|
+
headers: {
|
|
4151
|
+
[name: string]: unknown;
|
|
4152
|
+
};
|
|
4153
|
+
content: {
|
|
4154
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
4155
|
+
};
|
|
1763
4156
|
};
|
|
1764
4157
|
};
|
|
1765
4158
|
};
|
|
@@ -1779,12 +4172,31 @@ interface operations {
|
|
|
1779
4172
|
};
|
|
1780
4173
|
};
|
|
1781
4174
|
responses: {
|
|
4175
|
+
/** @description Sent. Read the outcome from `/deliveries`. */
|
|
1782
4176
|
202: {
|
|
1783
4177
|
headers: {
|
|
1784
4178
|
[name: string]: unknown;
|
|
1785
4179
|
};
|
|
1786
4180
|
content?: never;
|
|
1787
4181
|
};
|
|
4182
|
+
/** @description Webhook not found. */
|
|
4183
|
+
404: {
|
|
4184
|
+
headers: {
|
|
4185
|
+
[name: string]: unknown;
|
|
4186
|
+
};
|
|
4187
|
+
content: {
|
|
4188
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
4189
|
+
};
|
|
4190
|
+
};
|
|
4191
|
+
/** @description The webhook is switched off. */
|
|
4192
|
+
422: {
|
|
4193
|
+
headers: {
|
|
4194
|
+
[name: string]: unknown;
|
|
4195
|
+
};
|
|
4196
|
+
content: {
|
|
4197
|
+
"application/json": components["schemas"]["ErrorResponseDto"];
|
|
4198
|
+
};
|
|
4199
|
+
};
|
|
1788
4200
|
};
|
|
1789
4201
|
};
|
|
1790
4202
|
}
|