@productcraft/mail 0.1.0
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/LICENSE +21 -0
- package/README.md +178 -0
- package/dist/index.cjs +16 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +4277 -0
- package/dist/index.d.ts +4277 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/package.json +47 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,4277 @@
|
|
|
1
|
+
import { makeClient, PCClientConfig } from '@productcraft/core';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* This file was auto-generated by openapi-typescript.
|
|
5
|
+
* Do not make direct changes to the file.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
interface paths {
|
|
9
|
+
"/v1/webhooks/bounces/{workspace_id}": {
|
|
10
|
+
parameters: {
|
|
11
|
+
query?: never;
|
|
12
|
+
header?: never;
|
|
13
|
+
path?: never;
|
|
14
|
+
cookie?: never;
|
|
15
|
+
};
|
|
16
|
+
get?: never;
|
|
17
|
+
put?: never;
|
|
18
|
+
/** Inbound bounce webhook (header-auth, preferred). Authenticates via the `X-Envoi-Bounce-Secret` header + provider signature. Public — no bearer / cookie auth. */
|
|
19
|
+
post: operations["BounceWebhookController_handleBounceHeader"];
|
|
20
|
+
delete?: never;
|
|
21
|
+
options?: never;
|
|
22
|
+
head?: never;
|
|
23
|
+
patch?: never;
|
|
24
|
+
trace?: never;
|
|
25
|
+
};
|
|
26
|
+
"/v1/webhooks/bounces/{workspace_id}/d/{domain_id}": {
|
|
27
|
+
parameters: {
|
|
28
|
+
query?: never;
|
|
29
|
+
header?: never;
|
|
30
|
+
path?: never;
|
|
31
|
+
cookie?: never;
|
|
32
|
+
};
|
|
33
|
+
get?: never;
|
|
34
|
+
put?: never;
|
|
35
|
+
/** Inbound bounce webhook for a per-domain SMTP override (header-auth, preferred). Header secret + provider signature; tagged with the domain so audit attributes correctly. */
|
|
36
|
+
post: operations["BounceWebhookController_handleDomainBounceHeader"];
|
|
37
|
+
delete?: never;
|
|
38
|
+
options?: never;
|
|
39
|
+
head?: never;
|
|
40
|
+
patch?: never;
|
|
41
|
+
trace?: never;
|
|
42
|
+
};
|
|
43
|
+
"/v1/webhooks/bounces/{workspace_id}/{secret}": {
|
|
44
|
+
parameters: {
|
|
45
|
+
query?: never;
|
|
46
|
+
header?: never;
|
|
47
|
+
path?: never;
|
|
48
|
+
cookie?: never;
|
|
49
|
+
};
|
|
50
|
+
get?: never;
|
|
51
|
+
put?: never;
|
|
52
|
+
/** DEPRECATED — use the header-auth variant (`POST /webhooks/bounces/:workspaceId` + `X-Envoi-Bounce-Secret`). The path-style URL leaks the secret into ingress access logs; it remains live for 90 days for existing provider configs. */
|
|
53
|
+
post: operations["BounceWebhookController_handleBounce"];
|
|
54
|
+
delete?: never;
|
|
55
|
+
options?: never;
|
|
56
|
+
head?: never;
|
|
57
|
+
patch?: never;
|
|
58
|
+
trace?: never;
|
|
59
|
+
};
|
|
60
|
+
"/v1/webhooks/bounces/{workspace_id}/{secret}/d/{domain_id}": {
|
|
61
|
+
parameters: {
|
|
62
|
+
query?: never;
|
|
63
|
+
header?: never;
|
|
64
|
+
path?: never;
|
|
65
|
+
cookie?: never;
|
|
66
|
+
};
|
|
67
|
+
get?: never;
|
|
68
|
+
put?: never;
|
|
69
|
+
/** DEPRECATED per-domain variant of the path-style route. Use the header-auth variant (`POST /webhooks/bounces/:workspaceId/d/:domainId` + `X-Envoi-Bounce-Secret`). */
|
|
70
|
+
post: operations["BounceWebhookController_handleDomainBounce"];
|
|
71
|
+
delete?: never;
|
|
72
|
+
options?: never;
|
|
73
|
+
head?: never;
|
|
74
|
+
patch?: never;
|
|
75
|
+
trace?: never;
|
|
76
|
+
};
|
|
77
|
+
"/v1/workspaces/{workspace_id}/brand": {
|
|
78
|
+
parameters: {
|
|
79
|
+
query?: never;
|
|
80
|
+
header?: never;
|
|
81
|
+
path?: never;
|
|
82
|
+
cookie?: never;
|
|
83
|
+
};
|
|
84
|
+
/** Get the resolved brand tokens for the workspace. Always returns a complete object, with platform defaults filling in any unset fields. */
|
|
85
|
+
get: operations["BrandController_get"];
|
|
86
|
+
/** Replace the workspace brand. Any field omitted from the body is reset to the platform default for that field. To partially-update, send back what GET returned with the desired diff applied. */
|
|
87
|
+
put: operations["BrandController_update"];
|
|
88
|
+
post?: never;
|
|
89
|
+
/** Remove all brand customizations and revert to platform defaults. */
|
|
90
|
+
delete: operations["BrandController_reset"];
|
|
91
|
+
options?: never;
|
|
92
|
+
head?: never;
|
|
93
|
+
patch?: never;
|
|
94
|
+
trace?: never;
|
|
95
|
+
};
|
|
96
|
+
"/v1/workspaces/{workspace_id}/domains": {
|
|
97
|
+
parameters: {
|
|
98
|
+
query?: never;
|
|
99
|
+
header?: never;
|
|
100
|
+
path?: never;
|
|
101
|
+
cookie?: never;
|
|
102
|
+
};
|
|
103
|
+
/** List domains registered to this workspace */
|
|
104
|
+
get: operations["DomainController_listDomains"];
|
|
105
|
+
put?: never;
|
|
106
|
+
/** Register a domain for a workspace */
|
|
107
|
+
post: operations["DomainController_createDomain"];
|
|
108
|
+
delete?: never;
|
|
109
|
+
options?: never;
|
|
110
|
+
head?: never;
|
|
111
|
+
patch?: never;
|
|
112
|
+
trace?: never;
|
|
113
|
+
};
|
|
114
|
+
"/v1/workspaces/{workspace_id}/domains/{domain_id}": {
|
|
115
|
+
parameters: {
|
|
116
|
+
query?: never;
|
|
117
|
+
header?: never;
|
|
118
|
+
path?: never;
|
|
119
|
+
cookie?: never;
|
|
120
|
+
};
|
|
121
|
+
/** Get a single domain (with DNS instructions). */
|
|
122
|
+
get: operations["DomainController_getDomain"];
|
|
123
|
+
put?: never;
|
|
124
|
+
post?: never;
|
|
125
|
+
/** Delete a domain (must have no mailboxes left). */
|
|
126
|
+
delete: operations["DomainController_deleteDomain"];
|
|
127
|
+
options?: never;
|
|
128
|
+
head?: never;
|
|
129
|
+
/** Update user-side domain metadata (today: dnsProvider; the wizard saves the user's provider choice here so hostnames render correctly across reloads). */
|
|
130
|
+
patch: operations["DomainController_updateDomain"];
|
|
131
|
+
trace?: never;
|
|
132
|
+
};
|
|
133
|
+
"/v1/workspaces/{workspace_id}/domains/{domain_id}/smtp-config": {
|
|
134
|
+
parameters: {
|
|
135
|
+
query?: never;
|
|
136
|
+
header?: never;
|
|
137
|
+
path?: never;
|
|
138
|
+
cookie?: never;
|
|
139
|
+
};
|
|
140
|
+
/** Get the per-domain SMTP override (returns null if unset; the workspace default applies in that case). */
|
|
141
|
+
get: operations["DomainSmtpConfigController_get"];
|
|
142
|
+
/** Create or update the per-domain SMTP override (resets verification) */
|
|
143
|
+
put: operations["DomainSmtpConfigController_upsert"];
|
|
144
|
+
post?: never;
|
|
145
|
+
/** Drop the per-domain override; sends from this domain fall back to the workspace default (or shared relay). */
|
|
146
|
+
delete: operations["DomainSmtpConfigController_delete"];
|
|
147
|
+
options?: never;
|
|
148
|
+
head?: never;
|
|
149
|
+
patch?: never;
|
|
150
|
+
trace?: never;
|
|
151
|
+
};
|
|
152
|
+
"/v1/workspaces/{workspace_id}/domains/{domain_id}/smtp-config/verify-saved": {
|
|
153
|
+
parameters: {
|
|
154
|
+
query?: never;
|
|
155
|
+
header?: never;
|
|
156
|
+
path?: never;
|
|
157
|
+
cookie?: never;
|
|
158
|
+
};
|
|
159
|
+
get?: never;
|
|
160
|
+
put?: never;
|
|
161
|
+
/** Test the per-domain SMTP override; updates status */
|
|
162
|
+
post: operations["DomainSmtpConfigController_verifySaved"];
|
|
163
|
+
delete?: never;
|
|
164
|
+
options?: never;
|
|
165
|
+
head?: never;
|
|
166
|
+
patch?: never;
|
|
167
|
+
trace?: never;
|
|
168
|
+
};
|
|
169
|
+
"/v1/workspaces/{workspace_id}/domains/{domain_id}/verify": {
|
|
170
|
+
parameters: {
|
|
171
|
+
query?: never;
|
|
172
|
+
header?: never;
|
|
173
|
+
path?: never;
|
|
174
|
+
cookie?: never;
|
|
175
|
+
};
|
|
176
|
+
get?: never;
|
|
177
|
+
put?: never;
|
|
178
|
+
/** Run a synchronous DNS check against this domain; flips status to active when the required record set passes. */
|
|
179
|
+
post: operations["DomainController_verifyDomain"];
|
|
180
|
+
delete?: never;
|
|
181
|
+
options?: never;
|
|
182
|
+
head?: never;
|
|
183
|
+
patch?: never;
|
|
184
|
+
trace?: never;
|
|
185
|
+
};
|
|
186
|
+
"/v1/workspaces/{workspace_id}/integrations": {
|
|
187
|
+
parameters: {
|
|
188
|
+
query?: never;
|
|
189
|
+
header?: never;
|
|
190
|
+
path?: never;
|
|
191
|
+
cookie?: never;
|
|
192
|
+
};
|
|
193
|
+
/**
|
|
194
|
+
* List connected workspace integrations.
|
|
195
|
+
* @description Returns one entry per connected provider (GitHub, …). No secrets in the response — only public identifiers + status + sync stamps.
|
|
196
|
+
*/
|
|
197
|
+
get: operations["IntegrationsController_list"];
|
|
198
|
+
put?: never;
|
|
199
|
+
post?: never;
|
|
200
|
+
delete?: never;
|
|
201
|
+
options?: never;
|
|
202
|
+
head?: never;
|
|
203
|
+
patch?: never;
|
|
204
|
+
trace?: never;
|
|
205
|
+
};
|
|
206
|
+
"/v1/workspaces/{workspace_id}/integrations/github/connect": {
|
|
207
|
+
parameters: {
|
|
208
|
+
query?: never;
|
|
209
|
+
header?: never;
|
|
210
|
+
path?: never;
|
|
211
|
+
cookie?: never;
|
|
212
|
+
};
|
|
213
|
+
get?: never;
|
|
214
|
+
put?: never;
|
|
215
|
+
/**
|
|
216
|
+
* Mint a GitHub OAuth state token and return the authorize URL.
|
|
217
|
+
* @description The frontend redirects the user to `authorize_url`; GitHub bounces back to the `/callback` endpoint with a `code` + `state` pair. state is single-use, 5-minute TTL.
|
|
218
|
+
*/
|
|
219
|
+
post: operations["GitHubOAuthController_connect"];
|
|
220
|
+
delete?: never;
|
|
221
|
+
options?: never;
|
|
222
|
+
head?: never;
|
|
223
|
+
patch?: never;
|
|
224
|
+
trace?: never;
|
|
225
|
+
};
|
|
226
|
+
"/v1/workspaces/{workspace_id}/integrations/github/repos": {
|
|
227
|
+
parameters: {
|
|
228
|
+
query?: never;
|
|
229
|
+
header?: never;
|
|
230
|
+
path?: never;
|
|
231
|
+
cookie?: never;
|
|
232
|
+
};
|
|
233
|
+
/** List repos visible to the connected GitHub account. */
|
|
234
|
+
get: operations["GitHubController_listRepos"];
|
|
235
|
+
put?: never;
|
|
236
|
+
post?: never;
|
|
237
|
+
delete?: never;
|
|
238
|
+
options?: never;
|
|
239
|
+
head?: never;
|
|
240
|
+
patch?: never;
|
|
241
|
+
trace?: never;
|
|
242
|
+
};
|
|
243
|
+
"/v1/workspaces/{workspace_id}/integrations/github/repos/{owner}/{repo}/branches": {
|
|
244
|
+
parameters: {
|
|
245
|
+
query?: never;
|
|
246
|
+
header?: never;
|
|
247
|
+
path?: never;
|
|
248
|
+
cookie?: never;
|
|
249
|
+
};
|
|
250
|
+
/** List branches for the given repo. */
|
|
251
|
+
get: operations["GitHubController_listBranches"];
|
|
252
|
+
put?: never;
|
|
253
|
+
post?: never;
|
|
254
|
+
delete?: never;
|
|
255
|
+
options?: never;
|
|
256
|
+
head?: never;
|
|
257
|
+
patch?: never;
|
|
258
|
+
trace?: never;
|
|
259
|
+
};
|
|
260
|
+
"/v1/workspaces/{workspace_id}/integrations/github/settings": {
|
|
261
|
+
parameters: {
|
|
262
|
+
query?: never;
|
|
263
|
+
header?: never;
|
|
264
|
+
path?: never;
|
|
265
|
+
cookie?: never;
|
|
266
|
+
};
|
|
267
|
+
get?: never;
|
|
268
|
+
/** Set the repo + branch + templates path to sync from. */
|
|
269
|
+
put: operations["GitHubController_updateSettings"];
|
|
270
|
+
post?: never;
|
|
271
|
+
delete?: never;
|
|
272
|
+
options?: never;
|
|
273
|
+
head?: never;
|
|
274
|
+
patch?: never;
|
|
275
|
+
trace?: never;
|
|
276
|
+
};
|
|
277
|
+
"/v1/workspaces/{workspace_id}/integrations/github/sync": {
|
|
278
|
+
parameters: {
|
|
279
|
+
query?: never;
|
|
280
|
+
header?: never;
|
|
281
|
+
path?: never;
|
|
282
|
+
cookie?: never;
|
|
283
|
+
};
|
|
284
|
+
get?: never;
|
|
285
|
+
put?: never;
|
|
286
|
+
/** Trigger an immediate sync from GitHub. Returns a sync id to poll. */
|
|
287
|
+
post: operations["GitHubController_startSync"];
|
|
288
|
+
delete?: never;
|
|
289
|
+
options?: never;
|
|
290
|
+
head?: never;
|
|
291
|
+
patch?: never;
|
|
292
|
+
trace?: never;
|
|
293
|
+
};
|
|
294
|
+
"/v1/workspaces/{workspace_id}/integrations/github/sync/{sync_id}": {
|
|
295
|
+
parameters: {
|
|
296
|
+
query?: never;
|
|
297
|
+
header?: never;
|
|
298
|
+
path?: never;
|
|
299
|
+
cookie?: never;
|
|
300
|
+
};
|
|
301
|
+
/** Poll a sync run's status. */
|
|
302
|
+
get: operations["GitHubController_getSyncStatus"];
|
|
303
|
+
put?: never;
|
|
304
|
+
post?: never;
|
|
305
|
+
delete?: never;
|
|
306
|
+
options?: never;
|
|
307
|
+
head?: never;
|
|
308
|
+
patch?: never;
|
|
309
|
+
trace?: never;
|
|
310
|
+
};
|
|
311
|
+
"/v1/workspaces/{workspace_id}/integrations/{provider}": {
|
|
312
|
+
parameters: {
|
|
313
|
+
query?: never;
|
|
314
|
+
header?: never;
|
|
315
|
+
path?: never;
|
|
316
|
+
cookie?: never;
|
|
317
|
+
};
|
|
318
|
+
/**
|
|
319
|
+
* Get a single integration detail with redacted credentials.
|
|
320
|
+
* @description Includes the provider's `credentials_redacted` view. Secret fields (access tokens, signing keys) are never included.
|
|
321
|
+
*/
|
|
322
|
+
get: operations["IntegrationsController_get"];
|
|
323
|
+
put?: never;
|
|
324
|
+
post?: never;
|
|
325
|
+
/**
|
|
326
|
+
* Disconnect an integration. Deletes the credential row.
|
|
327
|
+
* @description Hard delete — the encrypted blob is removed. The customer must reconnect via the provider-specific OAuth flow to restore access.
|
|
328
|
+
*/
|
|
329
|
+
delete: operations["IntegrationsController_disconnect"];
|
|
330
|
+
options?: never;
|
|
331
|
+
head?: never;
|
|
332
|
+
patch?: never;
|
|
333
|
+
trace?: never;
|
|
334
|
+
};
|
|
335
|
+
"/v1/workspaces/{workspace_id}/mailboxes": {
|
|
336
|
+
parameters: {
|
|
337
|
+
query?: never;
|
|
338
|
+
header?: never;
|
|
339
|
+
path?: never;
|
|
340
|
+
cookie?: never;
|
|
341
|
+
};
|
|
342
|
+
/** List mailboxes in this workspace. 20 per page by default (max 200) — paginate with the cursor returned in `pagination.next_cursor` while `pagination.has_more` is true. */
|
|
343
|
+
get: operations["MailboxController_listMailboxes"];
|
|
344
|
+
put?: never;
|
|
345
|
+
/** Create a mailbox under a verified domain. Local-part + domain combination must be globally unique. */
|
|
346
|
+
post: operations["MailboxController_createMailbox"];
|
|
347
|
+
delete?: never;
|
|
348
|
+
options?: never;
|
|
349
|
+
head?: never;
|
|
350
|
+
patch?: never;
|
|
351
|
+
trace?: never;
|
|
352
|
+
};
|
|
353
|
+
"/v1/workspaces/{workspace_id}/mailboxes/{id}": {
|
|
354
|
+
parameters: {
|
|
355
|
+
query?: never;
|
|
356
|
+
header?: never;
|
|
357
|
+
path?: never;
|
|
358
|
+
cookie?: never;
|
|
359
|
+
};
|
|
360
|
+
/** Get one mailbox by id. */
|
|
361
|
+
get: operations["MailboxController_getMailbox"];
|
|
362
|
+
put?: never;
|
|
363
|
+
post?: never;
|
|
364
|
+
/** Soft-delete a mailbox. The row is marked deleted and stops accepting new mail; existing messages are kept until retention purges them. */
|
|
365
|
+
delete: operations["MailboxController_deleteMailbox"];
|
|
366
|
+
options?: never;
|
|
367
|
+
head?: never;
|
|
368
|
+
/** Update mailbox display name, retention, or status. Status transitions are restricted (active ↔ suspended; archived is terminal). */
|
|
369
|
+
patch: operations["MailboxController_updateMailbox"];
|
|
370
|
+
trace?: never;
|
|
371
|
+
};
|
|
372
|
+
"/v1/workspaces/{workspace_id}/mailboxes/{id}/messages": {
|
|
373
|
+
parameters: {
|
|
374
|
+
query?: never;
|
|
375
|
+
header?: never;
|
|
376
|
+
path?: never;
|
|
377
|
+
cookie?: never;
|
|
378
|
+
};
|
|
379
|
+
/** List messages in a mailbox */
|
|
380
|
+
get: operations["MessageController_listMessages"];
|
|
381
|
+
put?: never;
|
|
382
|
+
post?: never;
|
|
383
|
+
delete?: never;
|
|
384
|
+
options?: never;
|
|
385
|
+
head?: never;
|
|
386
|
+
patch?: never;
|
|
387
|
+
trace?: never;
|
|
388
|
+
};
|
|
389
|
+
"/v1/workspaces/{workspace_id}/mailboxes/{id}/messages/{mid}": {
|
|
390
|
+
parameters: {
|
|
391
|
+
query?: never;
|
|
392
|
+
header?: never;
|
|
393
|
+
path?: never;
|
|
394
|
+
cookie?: never;
|
|
395
|
+
};
|
|
396
|
+
/** Get a single message (metadata) */
|
|
397
|
+
get: operations["MessageController_getMessage"];
|
|
398
|
+
put?: never;
|
|
399
|
+
post?: never;
|
|
400
|
+
/** Soft-delete a message */
|
|
401
|
+
delete: operations["MessageController_deleteMessage"];
|
|
402
|
+
options?: never;
|
|
403
|
+
head?: never;
|
|
404
|
+
patch?: never;
|
|
405
|
+
trace?: never;
|
|
406
|
+
};
|
|
407
|
+
"/v1/workspaces/{workspace_id}/mailboxes/{id}/messages/{mid}/attachments/{position}": {
|
|
408
|
+
parameters: {
|
|
409
|
+
query?: never;
|
|
410
|
+
header?: never;
|
|
411
|
+
path?: never;
|
|
412
|
+
cookie?: never;
|
|
413
|
+
};
|
|
414
|
+
/** Stream a single attachment by its position */
|
|
415
|
+
get: operations["MessageController_getAttachment"];
|
|
416
|
+
put?: never;
|
|
417
|
+
post?: never;
|
|
418
|
+
delete?: never;
|
|
419
|
+
options?: never;
|
|
420
|
+
head?: never;
|
|
421
|
+
patch?: never;
|
|
422
|
+
trace?: never;
|
|
423
|
+
};
|
|
424
|
+
"/v1/workspaces/{workspace_id}/mailboxes/{id}/messages/{mid}/raw": {
|
|
425
|
+
parameters: {
|
|
426
|
+
query?: never;
|
|
427
|
+
header?: never;
|
|
428
|
+
path?: never;
|
|
429
|
+
cookie?: never;
|
|
430
|
+
};
|
|
431
|
+
/** Stream the raw RFC5322 .eml for a message */
|
|
432
|
+
get: operations["MessageController_getRaw"];
|
|
433
|
+
put?: never;
|
|
434
|
+
post?: never;
|
|
435
|
+
delete?: never;
|
|
436
|
+
options?: never;
|
|
437
|
+
head?: never;
|
|
438
|
+
patch?: never;
|
|
439
|
+
trace?: never;
|
|
440
|
+
};
|
|
441
|
+
"/v1/workspaces/{workspace_id}/mailboxes/{id}/messages/{mid}/read": {
|
|
442
|
+
parameters: {
|
|
443
|
+
query?: never;
|
|
444
|
+
header?: never;
|
|
445
|
+
path?: never;
|
|
446
|
+
cookie?: never;
|
|
447
|
+
};
|
|
448
|
+
get?: never;
|
|
449
|
+
put?: never;
|
|
450
|
+
/** Mark a message as read */
|
|
451
|
+
post: operations["MessageController_markRead"];
|
|
452
|
+
delete?: never;
|
|
453
|
+
options?: never;
|
|
454
|
+
head?: never;
|
|
455
|
+
patch?: never;
|
|
456
|
+
trace?: never;
|
|
457
|
+
};
|
|
458
|
+
"/v1/workspaces/{workspace_id}/messages": {
|
|
459
|
+
parameters: {
|
|
460
|
+
query?: never;
|
|
461
|
+
header?: never;
|
|
462
|
+
path?: never;
|
|
463
|
+
cookie?: never;
|
|
464
|
+
};
|
|
465
|
+
/** List outbound messages with cursor pagination */
|
|
466
|
+
get: operations["OutboundMessageController_list"];
|
|
467
|
+
put?: never;
|
|
468
|
+
post?: never;
|
|
469
|
+
/** RTBF: delete every message log row for `recipient` (case-insensitive). Returns the deleted-row count. */
|
|
470
|
+
delete: operations["OutboundMessageController_deleteByRecipient"];
|
|
471
|
+
options?: never;
|
|
472
|
+
head?: never;
|
|
473
|
+
patch?: never;
|
|
474
|
+
trace?: never;
|
|
475
|
+
};
|
|
476
|
+
"/v1/workspaces/{workspace_id}/messages/export": {
|
|
477
|
+
parameters: {
|
|
478
|
+
query?: never;
|
|
479
|
+
header?: never;
|
|
480
|
+
path?: never;
|
|
481
|
+
cookie?: never;
|
|
482
|
+
};
|
|
483
|
+
/** Stream the filtered message log as CSV. Same filters as GET /messages. Body columns are intentionally omitted; bodies remain gated by `mail.message.body.read`. Rate-limited 1 concurrent + 5/hour per workspace. */
|
|
484
|
+
get: operations["OutboundMessageController_exportCsv"];
|
|
485
|
+
put?: never;
|
|
486
|
+
post?: never;
|
|
487
|
+
delete?: never;
|
|
488
|
+
options?: never;
|
|
489
|
+
head?: never;
|
|
490
|
+
patch?: never;
|
|
491
|
+
trace?: never;
|
|
492
|
+
};
|
|
493
|
+
"/v1/workspaces/{workspace_id}/messages/settings": {
|
|
494
|
+
parameters: {
|
|
495
|
+
query?: never;
|
|
496
|
+
header?: never;
|
|
497
|
+
path?: never;
|
|
498
|
+
cookie?: never;
|
|
499
|
+
};
|
|
500
|
+
/** Read this workspace's outbound-message settings. Absent → defaults (redact_bodies: false). */
|
|
501
|
+
get: operations["OutboundMessageController_getSettings"];
|
|
502
|
+
put?: never;
|
|
503
|
+
post?: never;
|
|
504
|
+
delete?: never;
|
|
505
|
+
options?: never;
|
|
506
|
+
head?: never;
|
|
507
|
+
/** Update this workspace's outbound-message settings. Gated on `mail.message.delete` — same privilege bar as RTBF, since both touch the PII boundary. */
|
|
508
|
+
patch: operations["OutboundMessageController_updateSettings"];
|
|
509
|
+
trace?: never;
|
|
510
|
+
};
|
|
511
|
+
"/v1/workspaces/{workspace_id}/messages/timeline": {
|
|
512
|
+
parameters: {
|
|
513
|
+
query?: never;
|
|
514
|
+
header?: never;
|
|
515
|
+
path?: never;
|
|
516
|
+
cookie?: never;
|
|
517
|
+
};
|
|
518
|
+
/**
|
|
519
|
+
* Day-bucketed message volume for a workspace
|
|
520
|
+
* @description Returns dense day buckets in [since, until). `metric=sent` (default) reads received messages; `metric=bounced` reads MX-time rejections matched to this workspace by envelope-to.
|
|
521
|
+
*/
|
|
522
|
+
get: operations["MessageTimelineController_getTimeline"];
|
|
523
|
+
put?: never;
|
|
524
|
+
post?: never;
|
|
525
|
+
delete?: never;
|
|
526
|
+
options?: never;
|
|
527
|
+
head?: never;
|
|
528
|
+
patch?: never;
|
|
529
|
+
trace?: never;
|
|
530
|
+
};
|
|
531
|
+
"/v1/workspaces/{workspace_id}/messages/{id}": {
|
|
532
|
+
parameters: {
|
|
533
|
+
query?: never;
|
|
534
|
+
header?: never;
|
|
535
|
+
path?: never;
|
|
536
|
+
cookie?: never;
|
|
537
|
+
};
|
|
538
|
+
/** Get a single outbound message (metadata + delivery verdicts; body not included). Use /:id/body for cleartext content. */
|
|
539
|
+
get: operations["OutboundMessageController_get"];
|
|
540
|
+
put?: never;
|
|
541
|
+
post?: never;
|
|
542
|
+
delete?: never;
|
|
543
|
+
options?: never;
|
|
544
|
+
head?: never;
|
|
545
|
+
patch?: never;
|
|
546
|
+
trace?: never;
|
|
547
|
+
};
|
|
548
|
+
"/v1/workspaces/{workspace_id}/messages/{id}/body": {
|
|
549
|
+
parameters: {
|
|
550
|
+
query?: never;
|
|
551
|
+
header?: never;
|
|
552
|
+
path?: never;
|
|
553
|
+
cookie?: never;
|
|
554
|
+
};
|
|
555
|
+
/** Get the cleartext body of an outbound message. Gated by `mail.message.body.read` (admin+ by default; not granted to plain members). */
|
|
556
|
+
get: operations["OutboundMessageController_getBody"];
|
|
557
|
+
put?: never;
|
|
558
|
+
post?: never;
|
|
559
|
+
delete?: never;
|
|
560
|
+
options?: never;
|
|
561
|
+
head?: never;
|
|
562
|
+
patch?: never;
|
|
563
|
+
trace?: never;
|
|
564
|
+
};
|
|
565
|
+
"/v1/workspaces/{workspace_id}/smtp-config": {
|
|
566
|
+
parameters: {
|
|
567
|
+
query?: never;
|
|
568
|
+
header?: never;
|
|
569
|
+
path?: never;
|
|
570
|
+
cookie?: never;
|
|
571
|
+
};
|
|
572
|
+
/** Get the workspace-default SMTP config (returns null if unset). Per-domain overrides live under /workspaces/:id/domains/:domainId/smtp-config. */
|
|
573
|
+
get: operations["SmtpConfigController_get"];
|
|
574
|
+
/** Create or update the workspace-default SMTP config (resets verification) */
|
|
575
|
+
put: operations["SmtpConfigController_upsert"];
|
|
576
|
+
post?: never;
|
|
577
|
+
/** Revert the workspace to the shared SMTP relay */
|
|
578
|
+
delete: operations["SmtpConfigController_delete"];
|
|
579
|
+
options?: never;
|
|
580
|
+
head?: never;
|
|
581
|
+
patch?: never;
|
|
582
|
+
trace?: never;
|
|
583
|
+
};
|
|
584
|
+
"/v1/workspaces/{workspace_id}/smtp-config/verify": {
|
|
585
|
+
parameters: {
|
|
586
|
+
query?: never;
|
|
587
|
+
header?: never;
|
|
588
|
+
path?: never;
|
|
589
|
+
cookie?: never;
|
|
590
|
+
};
|
|
591
|
+
get?: never;
|
|
592
|
+
put?: never;
|
|
593
|
+
/** Test arbitrary SMTP creds without persisting */
|
|
594
|
+
post: operations["SmtpConfigController_verifyTransient"];
|
|
595
|
+
delete?: never;
|
|
596
|
+
options?: never;
|
|
597
|
+
head?: never;
|
|
598
|
+
patch?: never;
|
|
599
|
+
trace?: never;
|
|
600
|
+
};
|
|
601
|
+
"/v1/workspaces/{workspace_id}/smtp-config/verify-saved": {
|
|
602
|
+
parameters: {
|
|
603
|
+
query?: never;
|
|
604
|
+
header?: never;
|
|
605
|
+
path?: never;
|
|
606
|
+
cookie?: never;
|
|
607
|
+
};
|
|
608
|
+
get?: never;
|
|
609
|
+
put?: never;
|
|
610
|
+
/** Test the persisted workspace-default SMTP config; updates status */
|
|
611
|
+
post: operations["SmtpConfigController_verifySaved"];
|
|
612
|
+
delete?: never;
|
|
613
|
+
options?: never;
|
|
614
|
+
head?: never;
|
|
615
|
+
patch?: never;
|
|
616
|
+
trace?: never;
|
|
617
|
+
};
|
|
618
|
+
"/v1/workspaces/{workspace_id}/smtp-configs": {
|
|
619
|
+
parameters: {
|
|
620
|
+
query?: never;
|
|
621
|
+
header?: never;
|
|
622
|
+
path?: never;
|
|
623
|
+
cookie?: never;
|
|
624
|
+
};
|
|
625
|
+
/** List every SMTP config in the workspace (default + per-domain overrides) */
|
|
626
|
+
get: operations["SmtpConfigListController_list"];
|
|
627
|
+
put?: never;
|
|
628
|
+
post?: never;
|
|
629
|
+
delete?: never;
|
|
630
|
+
options?: never;
|
|
631
|
+
head?: never;
|
|
632
|
+
patch?: never;
|
|
633
|
+
trace?: never;
|
|
634
|
+
};
|
|
635
|
+
"/v1/workspaces/{workspace_id}/suppression": {
|
|
636
|
+
parameters: {
|
|
637
|
+
query?: never;
|
|
638
|
+
header?: never;
|
|
639
|
+
path?: never;
|
|
640
|
+
cookie?: never;
|
|
641
|
+
};
|
|
642
|
+
/** List suppressed recipients in the workspace (most-recent first, capped at 500). */
|
|
643
|
+
get: operations["SuppressionController_list"];
|
|
644
|
+
put?: never;
|
|
645
|
+
/** Add an email to the workspace suppression list */
|
|
646
|
+
post: operations["SuppressionController_add"];
|
|
647
|
+
delete?: never;
|
|
648
|
+
options?: never;
|
|
649
|
+
head?: never;
|
|
650
|
+
patch?: never;
|
|
651
|
+
trace?: never;
|
|
652
|
+
};
|
|
653
|
+
"/v1/workspaces/{workspace_id}/suppression/{email}": {
|
|
654
|
+
parameters: {
|
|
655
|
+
query?: never;
|
|
656
|
+
header?: never;
|
|
657
|
+
path?: never;
|
|
658
|
+
cookie?: never;
|
|
659
|
+
};
|
|
660
|
+
get?: never;
|
|
661
|
+
put?: never;
|
|
662
|
+
post?: never;
|
|
663
|
+
/** Remove an address from the workspace suppression list. */
|
|
664
|
+
delete: operations["SuppressionController_remove"];
|
|
665
|
+
options?: never;
|
|
666
|
+
head?: never;
|
|
667
|
+
patch?: never;
|
|
668
|
+
trace?: never;
|
|
669
|
+
};
|
|
670
|
+
"/v1/workspaces/{workspace_id}/templates": {
|
|
671
|
+
parameters: {
|
|
672
|
+
query?: never;
|
|
673
|
+
header?: never;
|
|
674
|
+
path?: never;
|
|
675
|
+
cookie?: never;
|
|
676
|
+
};
|
|
677
|
+
/** List templates / layouts / partials in a workspace. Filter via ?kind=template|layout|partial (default: all). Filter by tags via ?tags=foo,bar (comma-separated). */
|
|
678
|
+
get: operations["TemplateController_list"];
|
|
679
|
+
put?: never;
|
|
680
|
+
/** Create or update a template, layout, or partial. Idempotent on (workspace_id, name); `kind` cannot change after the first upsert. */
|
|
681
|
+
post: operations["TemplateController_upsert"];
|
|
682
|
+
delete?: never;
|
|
683
|
+
options?: never;
|
|
684
|
+
head?: never;
|
|
685
|
+
patch?: never;
|
|
686
|
+
trace?: never;
|
|
687
|
+
};
|
|
688
|
+
"/v1/workspaces/{workspace_id}/templates/lint": {
|
|
689
|
+
parameters: {
|
|
690
|
+
query?: never;
|
|
691
|
+
header?: never;
|
|
692
|
+
path?: never;
|
|
693
|
+
cookie?: never;
|
|
694
|
+
};
|
|
695
|
+
get?: never;
|
|
696
|
+
put?: never;
|
|
697
|
+
/** Lint a draft for deliverability red flags. Same render pipeline as /preview; returns a 0-100 score (higher is better) and a sorted list of findings (errors first). Self-developed heuristic linter, no external classifier — runs in-process. */
|
|
698
|
+
post: operations["TemplateController_lint"];
|
|
699
|
+
delete?: never;
|
|
700
|
+
options?: never;
|
|
701
|
+
head?: never;
|
|
702
|
+
patch?: never;
|
|
703
|
+
trace?: never;
|
|
704
|
+
};
|
|
705
|
+
"/v1/workspaces/{workspace_id}/templates/preview": {
|
|
706
|
+
parameters: {
|
|
707
|
+
query?: never;
|
|
708
|
+
header?: never;
|
|
709
|
+
path?: never;
|
|
710
|
+
cookie?: never;
|
|
711
|
+
};
|
|
712
|
+
get?: never;
|
|
713
|
+
put?: never;
|
|
714
|
+
/** Preview an unsaved draft. Renders subject + bodyHtml against the workspace brand tokens + supplied data, with all workspace layouts/partials registered. Used by the editor for live preview. */
|
|
715
|
+
post: operations["TemplateController_preview"];
|
|
716
|
+
delete?: never;
|
|
717
|
+
options?: never;
|
|
718
|
+
head?: never;
|
|
719
|
+
patch?: never;
|
|
720
|
+
trace?: never;
|
|
721
|
+
};
|
|
722
|
+
"/v1/workspaces/{workspace_id}/templates/tags": {
|
|
723
|
+
parameters: {
|
|
724
|
+
query?: never;
|
|
725
|
+
header?: never;
|
|
726
|
+
path?: never;
|
|
727
|
+
cookie?: never;
|
|
728
|
+
};
|
|
729
|
+
/** Distinct tag list across all templates in this workspace (for autocomplete) */
|
|
730
|
+
get: operations["TemplateController_listTags"];
|
|
731
|
+
put?: never;
|
|
732
|
+
post?: never;
|
|
733
|
+
delete?: never;
|
|
734
|
+
options?: never;
|
|
735
|
+
head?: never;
|
|
736
|
+
patch?: never;
|
|
737
|
+
trace?: never;
|
|
738
|
+
};
|
|
739
|
+
"/v1/workspaces/{workspace_id}/templates/{name}": {
|
|
740
|
+
parameters: {
|
|
741
|
+
query?: never;
|
|
742
|
+
header?: never;
|
|
743
|
+
path?: never;
|
|
744
|
+
cookie?: never;
|
|
745
|
+
};
|
|
746
|
+
/** Get a template, layout, or partial by name. */
|
|
747
|
+
get: operations["TemplateController_get"];
|
|
748
|
+
put?: never;
|
|
749
|
+
post?: never;
|
|
750
|
+
/** Delete a template, layout, or partial by name. */
|
|
751
|
+
delete: operations["TemplateController_delete"];
|
|
752
|
+
options?: never;
|
|
753
|
+
head?: never;
|
|
754
|
+
patch?: never;
|
|
755
|
+
trace?: never;
|
|
756
|
+
};
|
|
757
|
+
"/v1/workspaces/{workspace_id}/templates/{name}/render": {
|
|
758
|
+
parameters: {
|
|
759
|
+
query?: never;
|
|
760
|
+
header?: never;
|
|
761
|
+
path?: never;
|
|
762
|
+
cookie?: never;
|
|
763
|
+
};
|
|
764
|
+
get?: never;
|
|
765
|
+
put?: never;
|
|
766
|
+
/** Render a saved template against a data payload. Returns subject + html + text without sending. */
|
|
767
|
+
post: operations["TemplateController_render"];
|
|
768
|
+
delete?: never;
|
|
769
|
+
options?: never;
|
|
770
|
+
head?: never;
|
|
771
|
+
patch?: never;
|
|
772
|
+
trace?: never;
|
|
773
|
+
};
|
|
774
|
+
"/v1/workspaces/{workspace_id}/templates/{name}/send": {
|
|
775
|
+
parameters: {
|
|
776
|
+
query?: never;
|
|
777
|
+
header?: never;
|
|
778
|
+
path?: never;
|
|
779
|
+
cookie?: never;
|
|
780
|
+
};
|
|
781
|
+
get?: never;
|
|
782
|
+
put?: never;
|
|
783
|
+
/** Send a template-rendered message. Pass an `Idempotency-Key` header (1..256 chars, [A-Za-z0-9_\-:]) to make retries safe — replays return the original response with `Idempotent-Replay: true` for 24h. Same key + different request body returns 409 IDEMPOTENCY_KEY_REUSE. */
|
|
784
|
+
post: operations["TemplateController_send"];
|
|
785
|
+
delete?: never;
|
|
786
|
+
options?: never;
|
|
787
|
+
head?: never;
|
|
788
|
+
patch?: never;
|
|
789
|
+
trace?: never;
|
|
790
|
+
};
|
|
791
|
+
"/v1/workspaces/{workspace_id}/templates/{name}/send-batch": {
|
|
792
|
+
parameters: {
|
|
793
|
+
query?: never;
|
|
794
|
+
header?: never;
|
|
795
|
+
path?: never;
|
|
796
|
+
cookie?: never;
|
|
797
|
+
};
|
|
798
|
+
get?: never;
|
|
799
|
+
put?: never;
|
|
800
|
+
/** Send up to 100 messages with the same template in one request. Per-row partial-success: each row carries its own status (`accepted` | `rejected`). Pass `idempotency_key` per row to make retries safe — same Redis namespace as the request-header path on /send. */
|
|
801
|
+
post: operations["TemplateController_sendBatch"];
|
|
802
|
+
delete?: never;
|
|
803
|
+
options?: never;
|
|
804
|
+
head?: never;
|
|
805
|
+
patch?: never;
|
|
806
|
+
trace?: never;
|
|
807
|
+
};
|
|
808
|
+
"/v1/workspaces/{workspace_id}/templates/{name}/test-send": {
|
|
809
|
+
parameters: {
|
|
810
|
+
query?: never;
|
|
811
|
+
header?: never;
|
|
812
|
+
path?: never;
|
|
813
|
+
cookie?: never;
|
|
814
|
+
};
|
|
815
|
+
get?: never;
|
|
816
|
+
put?: never;
|
|
817
|
+
/** Send a test rendering of the template to an arbitrary recipient. Bypasses suppression-list and rate-limit checks; subject is auto-prefixed with [TEST]; missing variables render as [varname] placeholders. */
|
|
818
|
+
post: operations["TemplateController_testSend"];
|
|
819
|
+
delete?: never;
|
|
820
|
+
options?: never;
|
|
821
|
+
head?: never;
|
|
822
|
+
patch?: never;
|
|
823
|
+
trace?: never;
|
|
824
|
+
};
|
|
825
|
+
"/v1/workspaces/{workspace_id}/templates/{name}/variables": {
|
|
826
|
+
parameters: {
|
|
827
|
+
query?: never;
|
|
828
|
+
header?: never;
|
|
829
|
+
path?: never;
|
|
830
|
+
cookie?: never;
|
|
831
|
+
};
|
|
832
|
+
/** Variables auto-detected from the saved template body + subject (Handlebars expressions, dotted paths preserved, dedup'd in first-occurrence order). */
|
|
833
|
+
get: operations["TemplateController_variables"];
|
|
834
|
+
put?: never;
|
|
835
|
+
post?: never;
|
|
836
|
+
delete?: never;
|
|
837
|
+
options?: never;
|
|
838
|
+
head?: never;
|
|
839
|
+
patch?: never;
|
|
840
|
+
trace?: never;
|
|
841
|
+
};
|
|
842
|
+
"/v1/workspaces/{workspace_id}/webhooks": {
|
|
843
|
+
parameters: {
|
|
844
|
+
query?: never;
|
|
845
|
+
header?: never;
|
|
846
|
+
path?: never;
|
|
847
|
+
cookie?: never;
|
|
848
|
+
};
|
|
849
|
+
/** List the workspace default + every per-domain override. Plaintext signing secrets are NOT returned — only the last-4-char hint. Mint or rotate via the secret endpoints to receive the plaintext (once). */
|
|
850
|
+
get: operations["OutboundWebhookController_list"];
|
|
851
|
+
put?: never;
|
|
852
|
+
post?: never;
|
|
853
|
+
delete?: never;
|
|
854
|
+
options?: never;
|
|
855
|
+
head?: never;
|
|
856
|
+
patch?: never;
|
|
857
|
+
trace?: never;
|
|
858
|
+
};
|
|
859
|
+
"/v1/workspaces/{workspace_id}/webhooks/attempts": {
|
|
860
|
+
parameters: {
|
|
861
|
+
query?: never;
|
|
862
|
+
header?: never;
|
|
863
|
+
path?: never;
|
|
864
|
+
cookie?: never;
|
|
865
|
+
};
|
|
866
|
+
/** Recent delivery attempts across all of this workspace's webhook configs. Includes status code, latency, response body (truncated to 1KB), and error if any. */
|
|
867
|
+
get: operations["OutboundWebhookController_listAttempts"];
|
|
868
|
+
put?: never;
|
|
869
|
+
post?: never;
|
|
870
|
+
delete?: never;
|
|
871
|
+
options?: never;
|
|
872
|
+
head?: never;
|
|
873
|
+
patch?: never;
|
|
874
|
+
trace?: never;
|
|
875
|
+
};
|
|
876
|
+
"/v1/workspaces/{workspace_id}/webhooks/default": {
|
|
877
|
+
parameters: {
|
|
878
|
+
query?: never;
|
|
879
|
+
header?: never;
|
|
880
|
+
path?: never;
|
|
881
|
+
cookie?: never;
|
|
882
|
+
};
|
|
883
|
+
/** Get the workspace-default webhook config (returns null if unset). */
|
|
884
|
+
get: operations["OutboundWebhookController_getDefault"];
|
|
885
|
+
/** Create or replace the workspace-default outbound webhook. Returns the plaintext signing secret ONCE — store it now. */
|
|
886
|
+
put: operations["OutboundWebhookController_upsertDefault"];
|
|
887
|
+
post?: never;
|
|
888
|
+
/** Delete the workspace-default webhook config. */
|
|
889
|
+
delete: operations["OutboundWebhookController_deleteDefault"];
|
|
890
|
+
options?: never;
|
|
891
|
+
head?: never;
|
|
892
|
+
patch?: never;
|
|
893
|
+
trace?: never;
|
|
894
|
+
};
|
|
895
|
+
"/v1/workspaces/{workspace_id}/webhooks/default/rotate-secret": {
|
|
896
|
+
parameters: {
|
|
897
|
+
query?: never;
|
|
898
|
+
header?: never;
|
|
899
|
+
path?: never;
|
|
900
|
+
cookie?: never;
|
|
901
|
+
};
|
|
902
|
+
get?: never;
|
|
903
|
+
put?: never;
|
|
904
|
+
/** Rotate the workspace-default webhook signing secret. Previous secret remains valid for 24h. Plaintext returned once. */
|
|
905
|
+
post: operations["OutboundWebhookController_rotateDefaultSecret"];
|
|
906
|
+
delete?: never;
|
|
907
|
+
options?: never;
|
|
908
|
+
head?: never;
|
|
909
|
+
patch?: never;
|
|
910
|
+
trace?: never;
|
|
911
|
+
};
|
|
912
|
+
"/v1/workspaces/{workspace_id}/webhooks/domains/{domain_id}": {
|
|
913
|
+
parameters: {
|
|
914
|
+
query?: never;
|
|
915
|
+
header?: never;
|
|
916
|
+
path?: never;
|
|
917
|
+
cookie?: never;
|
|
918
|
+
};
|
|
919
|
+
/** Get the per-domain webhook override (returns null if unset). */
|
|
920
|
+
get: operations["OutboundWebhookController_getDomain"];
|
|
921
|
+
/** Create or replace the per-domain webhook override. Returns the plaintext signing secret ONCE — store it now. */
|
|
922
|
+
put: operations["OutboundWebhookController_upsertDomain"];
|
|
923
|
+
post?: never;
|
|
924
|
+
/** Delete the per-domain webhook override. */
|
|
925
|
+
delete: operations["OutboundWebhookController_deleteDomain"];
|
|
926
|
+
options?: never;
|
|
927
|
+
head?: never;
|
|
928
|
+
patch?: never;
|
|
929
|
+
trace?: never;
|
|
930
|
+
};
|
|
931
|
+
"/v1/workspaces/{workspace_id}/webhooks/domains/{domain_id}/rotate-secret": {
|
|
932
|
+
parameters: {
|
|
933
|
+
query?: never;
|
|
934
|
+
header?: never;
|
|
935
|
+
path?: never;
|
|
936
|
+
cookie?: never;
|
|
937
|
+
};
|
|
938
|
+
get?: never;
|
|
939
|
+
put?: never;
|
|
940
|
+
/** Rotate the per-domain webhook signing secret. Previous secret remains valid for 24h. Plaintext returned once. */
|
|
941
|
+
post: operations["OutboundWebhookController_rotateDomainSecret"];
|
|
942
|
+
delete?: never;
|
|
943
|
+
options?: never;
|
|
944
|
+
head?: never;
|
|
945
|
+
patch?: never;
|
|
946
|
+
trace?: never;
|
|
947
|
+
};
|
|
948
|
+
}
|
|
949
|
+
interface components {
|
|
950
|
+
schemas: {
|
|
951
|
+
AddSuppressionDto: Record<string, never>;
|
|
952
|
+
BounceWebhookResponseDto: {
|
|
953
|
+
/**
|
|
954
|
+
* @description Count of bounces accepted and queued for downstream handling.
|
|
955
|
+
* @example 1
|
|
956
|
+
*/
|
|
957
|
+
accepted: number;
|
|
958
|
+
/**
|
|
959
|
+
* @description Count of bounces dropped (e.g. envelope-to did not match any mailbox).
|
|
960
|
+
* @example 0
|
|
961
|
+
*/
|
|
962
|
+
ignored: number;
|
|
963
|
+
/**
|
|
964
|
+
* @description Always true on a 200; providers retry on non-2xx.
|
|
965
|
+
* @example true
|
|
966
|
+
*/
|
|
967
|
+
ok: boolean;
|
|
968
|
+
};
|
|
969
|
+
BrandResponseDto: {
|
|
970
|
+
/** @description User-set values only (null when the workspace has never customised). Null fields signal "not customised — falling through to default". */
|
|
971
|
+
raw: components["schemas"]["RawBrandDto"] | null;
|
|
972
|
+
/** @description Fully-resolved tokens every render uses. The frontend reads this for previews so what the editor shows == what recipients get. */
|
|
973
|
+
resolved: components["schemas"]["ResolvedBrandTokensDto"];
|
|
974
|
+
};
|
|
975
|
+
ConnectGitHubRequestDto: {
|
|
976
|
+
/**
|
|
977
|
+
* @description URL the workspace user should land on after the GitHub OAuth flow completes. Must be a same-origin or productcraft.co URL — anything else is rejected to keep the callback from being an open-redirect.
|
|
978
|
+
* @example https://console.productcraft.co/mail/workspaces/acme/integrations
|
|
979
|
+
*/
|
|
980
|
+
return_to: string;
|
|
981
|
+
};
|
|
982
|
+
ConnectGitHubResponseDto: {
|
|
983
|
+
/**
|
|
984
|
+
* @description Browser redirects here to start the GitHub OAuth flow.
|
|
985
|
+
* @example https://github.com/login/oauth/authorize?client_id=…&state=…&redirect_uri=…
|
|
986
|
+
*/
|
|
987
|
+
authorize_url: string;
|
|
988
|
+
};
|
|
989
|
+
CreateDomainDto: {
|
|
990
|
+
/**
|
|
991
|
+
* @description Fully qualified domain name
|
|
992
|
+
* @example productcraft.co
|
|
993
|
+
*/
|
|
994
|
+
fqdn: string;
|
|
995
|
+
/**
|
|
996
|
+
* @description How the workspace plans to use this domain. Drives which DNS records the cron treats as required (and so the auto-flip to active).
|
|
997
|
+
* @default both
|
|
998
|
+
* @enum {string}
|
|
999
|
+
*/
|
|
1000
|
+
intent: "receive" | "send" | "both";
|
|
1001
|
+
};
|
|
1002
|
+
CreateMailboxDto: {
|
|
1003
|
+
/** @description Human-readable display name */
|
|
1004
|
+
display_name?: string;
|
|
1005
|
+
/** @description Domain ID (uuid) */
|
|
1006
|
+
domain_id: string;
|
|
1007
|
+
/**
|
|
1008
|
+
* @description Local part of the address (portion before @)
|
|
1009
|
+
* @example claude-qa-alpha
|
|
1010
|
+
*/
|
|
1011
|
+
local_part: string;
|
|
1012
|
+
/** @description Retention period in days (1–30) */
|
|
1013
|
+
retention_days?: number;
|
|
1014
|
+
};
|
|
1015
|
+
DeleteByRecipientResponseDto: {
|
|
1016
|
+
/** @description Number of rows deleted. */
|
|
1017
|
+
deleted: number;
|
|
1018
|
+
};
|
|
1019
|
+
DnsInstructionDto: {
|
|
1020
|
+
/**
|
|
1021
|
+
* @description DNS hostname to publish.
|
|
1022
|
+
* @example _amplify.example.com.
|
|
1023
|
+
*/
|
|
1024
|
+
host: string;
|
|
1025
|
+
/** @description Priority for MX records. */
|
|
1026
|
+
priority?: number;
|
|
1027
|
+
/**
|
|
1028
|
+
* @description Purpose of this record (ownership, sending policy, etc.).
|
|
1029
|
+
* @example spf
|
|
1030
|
+
*/
|
|
1031
|
+
purpose: string;
|
|
1032
|
+
/** @description TTL hint (in seconds). */
|
|
1033
|
+
ttl?: number;
|
|
1034
|
+
/**
|
|
1035
|
+
* @description Record type (TXT, MX, CNAME).
|
|
1036
|
+
* @example TXT
|
|
1037
|
+
*/
|
|
1038
|
+
type: string;
|
|
1039
|
+
/** @description Record value the customer must publish. */
|
|
1040
|
+
value: string;
|
|
1041
|
+
};
|
|
1042
|
+
DomainDto: {
|
|
1043
|
+
/** Format: date-time */
|
|
1044
|
+
created_at: string;
|
|
1045
|
+
/** @description Public DKIM key in PEM form (private half stays server-side). */
|
|
1046
|
+
dkim_public_key: string | null;
|
|
1047
|
+
dkim_selector: string | null;
|
|
1048
|
+
/** @description Snapshot of the most recent DNS check (any shape). */
|
|
1049
|
+
dns_check_results: Record<string, never> | null;
|
|
1050
|
+
/** @description DNS records the customer needs to publish to verify ownership + sending. */
|
|
1051
|
+
dns_instructions: components["schemas"]["DnsInstructionDto"][];
|
|
1052
|
+
/** @description Identifier from the wizard provider list, or null when not chosen. */
|
|
1053
|
+
dns_provider: string | null;
|
|
1054
|
+
/** @example productcraft.co */
|
|
1055
|
+
fqdn: string;
|
|
1056
|
+
/** Format: uuid */
|
|
1057
|
+
id: string;
|
|
1058
|
+
/**
|
|
1059
|
+
* @description How the workspace intends to use this domain.
|
|
1060
|
+
* @enum {string}
|
|
1061
|
+
*/
|
|
1062
|
+
intent: "receive" | "send" | "both";
|
|
1063
|
+
/** Format: date-time */
|
|
1064
|
+
last_dns_check_at: string | null;
|
|
1065
|
+
/** Format: uuid */
|
|
1066
|
+
owner_account_id: string | null;
|
|
1067
|
+
/**
|
|
1068
|
+
* @description Sequential id per workspace.
|
|
1069
|
+
* @example 3
|
|
1070
|
+
*/
|
|
1071
|
+
seq_id: string;
|
|
1072
|
+
/**
|
|
1073
|
+
* @example pending
|
|
1074
|
+
* @enum {string}
|
|
1075
|
+
*/
|
|
1076
|
+
status: "pending" | "active" | "failed";
|
|
1077
|
+
/**
|
|
1078
|
+
* @description Convenience accessor for the test-email mailbox address on this domain.
|
|
1079
|
+
* @example test-abc123@productcraft.co
|
|
1080
|
+
*/
|
|
1081
|
+
test_address: string;
|
|
1082
|
+
/** Format: date-time */
|
|
1083
|
+
test_received_at: string | null;
|
|
1084
|
+
test_token: string;
|
|
1085
|
+
verification_token: string | null;
|
|
1086
|
+
/** Format: date-time */
|
|
1087
|
+
verified_at: string | null;
|
|
1088
|
+
/** Format: uuid */
|
|
1089
|
+
workspace_id: string;
|
|
1090
|
+
};
|
|
1091
|
+
GetSmtpConfigResponseDto: {
|
|
1092
|
+
/** @description Null when this workspace has not configured SMTP. */
|
|
1093
|
+
data: components["schemas"]["SmtpConfigDto"] | null;
|
|
1094
|
+
};
|
|
1095
|
+
GitHubBranchDto: {
|
|
1096
|
+
name: string;
|
|
1097
|
+
};
|
|
1098
|
+
GitHubRepoDto: {
|
|
1099
|
+
default_branch: string;
|
|
1100
|
+
full_name: string;
|
|
1101
|
+
html_url: string;
|
|
1102
|
+
private: boolean;
|
|
1103
|
+
updated_at: string;
|
|
1104
|
+
};
|
|
1105
|
+
IntegrationDetailDto: {
|
|
1106
|
+
/** @example https://avatars.githubusercontent.com/u/1?v=4 */
|
|
1107
|
+
account_avatar_url: string | null;
|
|
1108
|
+
/** @example octocat */
|
|
1109
|
+
account_login: string;
|
|
1110
|
+
/** @description Provider's redacted credential view — public identifiers + a 'token_present' boolean. Secrets NEVER round-trip. */
|
|
1111
|
+
credentials_redacted: {
|
|
1112
|
+
[key: string]: unknown;
|
|
1113
|
+
};
|
|
1114
|
+
/** @example GitHub */
|
|
1115
|
+
display_name: string;
|
|
1116
|
+
/** @description Surfaced when status is 'error' — last failure message. */
|
|
1117
|
+
last_error: string | null;
|
|
1118
|
+
/**
|
|
1119
|
+
* Format: date-time
|
|
1120
|
+
* @description When the last successful sync ran. null until first success.
|
|
1121
|
+
*/
|
|
1122
|
+
last_synced_at: string | null;
|
|
1123
|
+
/** @example github */
|
|
1124
|
+
provider: string;
|
|
1125
|
+
/** @description Provider-specific non-secret settings (e.g. selected repo / branch / path). */
|
|
1126
|
+
settings: {
|
|
1127
|
+
[key: string]: unknown;
|
|
1128
|
+
};
|
|
1129
|
+
/**
|
|
1130
|
+
* @example active
|
|
1131
|
+
* @enum {string}
|
|
1132
|
+
*/
|
|
1133
|
+
status: "active" | "error" | "revoked";
|
|
1134
|
+
/** Format: date-time */
|
|
1135
|
+
updated_at: string;
|
|
1136
|
+
};
|
|
1137
|
+
IntegrationListItemDto: {
|
|
1138
|
+
/** @example https://avatars.githubusercontent.com/u/1?v=4 */
|
|
1139
|
+
account_avatar_url: string | null;
|
|
1140
|
+
/** @example octocat */
|
|
1141
|
+
account_login: string;
|
|
1142
|
+
/** @example GitHub */
|
|
1143
|
+
display_name: string;
|
|
1144
|
+
/** @description Surfaced when status is 'error' — last failure message. */
|
|
1145
|
+
last_error: string | null;
|
|
1146
|
+
/**
|
|
1147
|
+
* Format: date-time
|
|
1148
|
+
* @description When the last successful sync ran. null until first success.
|
|
1149
|
+
*/
|
|
1150
|
+
last_synced_at: string | null;
|
|
1151
|
+
/** @example github */
|
|
1152
|
+
provider: string;
|
|
1153
|
+
/** @description Provider-specific non-secret settings (e.g. selected repo / branch / path). */
|
|
1154
|
+
settings: {
|
|
1155
|
+
[key: string]: unknown;
|
|
1156
|
+
};
|
|
1157
|
+
/**
|
|
1158
|
+
* @example active
|
|
1159
|
+
* @enum {string}
|
|
1160
|
+
*/
|
|
1161
|
+
status: "active" | "error" | "revoked";
|
|
1162
|
+
/** Format: date-time */
|
|
1163
|
+
updated_at: string;
|
|
1164
|
+
};
|
|
1165
|
+
LintFindingDto: {
|
|
1166
|
+
/** @description Stable identifier for telemetry / suppressions. */
|
|
1167
|
+
id: string;
|
|
1168
|
+
message: string;
|
|
1169
|
+
/** @enum {string} */
|
|
1170
|
+
severity: "error" | "warn" | "info";
|
|
1171
|
+
suggestion?: string;
|
|
1172
|
+
};
|
|
1173
|
+
LintResultDto: {
|
|
1174
|
+
findings: components["schemas"]["LintFindingDto"][];
|
|
1175
|
+
/** @description 0-100, higher is better. ≥90 "looks great"; <70 "likely to spam-folder". */
|
|
1176
|
+
score: number;
|
|
1177
|
+
};
|
|
1178
|
+
LintTemplateDto: {
|
|
1179
|
+
/** @description HTML body to render (Handlebars). */
|
|
1180
|
+
body_html: string;
|
|
1181
|
+
/** @description Sample data to render variables with. */
|
|
1182
|
+
data?: Record<string, never>;
|
|
1183
|
+
/** @description Subject template (Handlebars). */
|
|
1184
|
+
subject?: string;
|
|
1185
|
+
};
|
|
1186
|
+
ListDomainsResponseDto: {
|
|
1187
|
+
data: components["schemas"]["DomainDto"][];
|
|
1188
|
+
};
|
|
1189
|
+
ListIntegrationsResponseDto: {
|
|
1190
|
+
data: components["schemas"]["IntegrationListItemDto"][];
|
|
1191
|
+
};
|
|
1192
|
+
ListMailboxesResponseDto: {
|
|
1193
|
+
data: components["schemas"]["MailboxDto"][];
|
|
1194
|
+
pagination: components["schemas"]["PaginationDto"];
|
|
1195
|
+
};
|
|
1196
|
+
ListMessagesResponseDto: {
|
|
1197
|
+
data: components["schemas"]["MessageDto"][];
|
|
1198
|
+
pagination: components["schemas"]["PaginationDto"];
|
|
1199
|
+
};
|
|
1200
|
+
ListOutboundMessagesResponseDto: {
|
|
1201
|
+
data: components["schemas"]["OutboundMessageDto"][];
|
|
1202
|
+
pagination: components["schemas"]["OutboundMessagePaginationDto"];
|
|
1203
|
+
};
|
|
1204
|
+
ListSmtpConfigsResponseDto: {
|
|
1205
|
+
data: components["schemas"]["SmtpConfigDto"][];
|
|
1206
|
+
};
|
|
1207
|
+
ListSuppressionResponseDto: {
|
|
1208
|
+
data: components["schemas"]["SuppressionEntryDto"][];
|
|
1209
|
+
};
|
|
1210
|
+
ListTemplateTagsResponseDto: {
|
|
1211
|
+
data: string[];
|
|
1212
|
+
};
|
|
1213
|
+
ListTemplatesResponseDto: {
|
|
1214
|
+
data: components["schemas"]["TemplateDto"][];
|
|
1215
|
+
};
|
|
1216
|
+
MailboxDto: {
|
|
1217
|
+
/** Format: date-time */
|
|
1218
|
+
created_at: string;
|
|
1219
|
+
display_name: string | null;
|
|
1220
|
+
/** Format: uuid */
|
|
1221
|
+
domain_id: string;
|
|
1222
|
+
/** Format: uuid */
|
|
1223
|
+
id: string;
|
|
1224
|
+
local_part: string;
|
|
1225
|
+
/** Format: uuid */
|
|
1226
|
+
owner_account_id: string | null;
|
|
1227
|
+
/**
|
|
1228
|
+
* @description Retention period in days.
|
|
1229
|
+
* @example 14
|
|
1230
|
+
*/
|
|
1231
|
+
retention_days: number;
|
|
1232
|
+
/**
|
|
1233
|
+
* @description Sequential id per workspace (stable, monotonic).
|
|
1234
|
+
* @example 7
|
|
1235
|
+
*/
|
|
1236
|
+
seq_id: string;
|
|
1237
|
+
/**
|
|
1238
|
+
* @example active
|
|
1239
|
+
* @enum {string}
|
|
1240
|
+
*/
|
|
1241
|
+
status: "active" | "disabled";
|
|
1242
|
+
/** Format: uuid */
|
|
1243
|
+
workspace_id: string;
|
|
1244
|
+
};
|
|
1245
|
+
MessageAttachmentDto: {
|
|
1246
|
+
content_id: string | null;
|
|
1247
|
+
content_type: string;
|
|
1248
|
+
filename: string | null;
|
|
1249
|
+
position: number;
|
|
1250
|
+
sha256: string;
|
|
1251
|
+
size_bytes: number;
|
|
1252
|
+
};
|
|
1253
|
+
MessageDetailDto: {
|
|
1254
|
+
attachments: components["schemas"]["MessageAttachmentDto"][];
|
|
1255
|
+
body_preview: string | null;
|
|
1256
|
+
cc_addresses: string[];
|
|
1257
|
+
/** Format: date-time */
|
|
1258
|
+
deleted_at: string | null;
|
|
1259
|
+
dkim_result: string | null;
|
|
1260
|
+
dmarc_result: string | null;
|
|
1261
|
+
envelope_to: string;
|
|
1262
|
+
from_address: string;
|
|
1263
|
+
from_domain: string;
|
|
1264
|
+
from_local: string;
|
|
1265
|
+
/** Format: uuid */
|
|
1266
|
+
id: string;
|
|
1267
|
+
/** Format: uuid */
|
|
1268
|
+
mailbox_id: string;
|
|
1269
|
+
quarantined: boolean;
|
|
1270
|
+
/** @description Storage object key for the raw RFC5322 .eml. */
|
|
1271
|
+
raw_object_key: string;
|
|
1272
|
+
/** Format: date-time */
|
|
1273
|
+
read_at: string | null;
|
|
1274
|
+
/** Format: date-time */
|
|
1275
|
+
received_at: string;
|
|
1276
|
+
rfc822_message_id: string | null;
|
|
1277
|
+
/**
|
|
1278
|
+
* @description Sequential ID per mailbox.
|
|
1279
|
+
* @example 42
|
|
1280
|
+
*/
|
|
1281
|
+
seq_id: string;
|
|
1282
|
+
size_bytes: number;
|
|
1283
|
+
spam_score: string | null;
|
|
1284
|
+
spam_verdict: string | null;
|
|
1285
|
+
spf_result: string | null;
|
|
1286
|
+
subject: string | null;
|
|
1287
|
+
to_addresses: string[];
|
|
1288
|
+
};
|
|
1289
|
+
MessageDto: {
|
|
1290
|
+
body_preview: string | null;
|
|
1291
|
+
cc_addresses: string[];
|
|
1292
|
+
/** Format: date-time */
|
|
1293
|
+
deleted_at: string | null;
|
|
1294
|
+
dkim_result: string | null;
|
|
1295
|
+
dmarc_result: string | null;
|
|
1296
|
+
envelope_to: string;
|
|
1297
|
+
from_address: string;
|
|
1298
|
+
from_domain: string;
|
|
1299
|
+
from_local: string;
|
|
1300
|
+
/** Format: uuid */
|
|
1301
|
+
id: string;
|
|
1302
|
+
/** Format: uuid */
|
|
1303
|
+
mailbox_id: string;
|
|
1304
|
+
quarantined: boolean;
|
|
1305
|
+
/** @description Storage object key for the raw RFC5322 .eml. */
|
|
1306
|
+
raw_object_key: string;
|
|
1307
|
+
/** Format: date-time */
|
|
1308
|
+
read_at: string | null;
|
|
1309
|
+
/** Format: date-time */
|
|
1310
|
+
received_at: string;
|
|
1311
|
+
rfc822_message_id: string | null;
|
|
1312
|
+
/**
|
|
1313
|
+
* @description Sequential ID per mailbox.
|
|
1314
|
+
* @example 42
|
|
1315
|
+
*/
|
|
1316
|
+
seq_id: string;
|
|
1317
|
+
size_bytes: number;
|
|
1318
|
+
spam_score: string | null;
|
|
1319
|
+
spam_verdict: string | null;
|
|
1320
|
+
spf_result: string | null;
|
|
1321
|
+
subject: string | null;
|
|
1322
|
+
to_addresses: string[];
|
|
1323
|
+
};
|
|
1324
|
+
MessageTimelineResponseDto: {
|
|
1325
|
+
/** @enum {string} */
|
|
1326
|
+
granularity: "day";
|
|
1327
|
+
/** @enum {string} */
|
|
1328
|
+
metric: "sent" | "bounced";
|
|
1329
|
+
/** @description Dense day-bucketed counts for the requested window. Days with zero messages still appear with `count: 0`. */
|
|
1330
|
+
points: components["schemas"]["TimelinePointDto"][];
|
|
1331
|
+
};
|
|
1332
|
+
OutboundMessageDto: {
|
|
1333
|
+
bounce_code: string | null;
|
|
1334
|
+
bounce_detail: string | null;
|
|
1335
|
+
/** Format: date-time */
|
|
1336
|
+
created_at: string;
|
|
1337
|
+
/** Format: date-time */
|
|
1338
|
+
delivered_at: string | null;
|
|
1339
|
+
dkim_result: string | null;
|
|
1340
|
+
dmarc_result: string | null;
|
|
1341
|
+
/** Format: uuid */
|
|
1342
|
+
domain_id: string | null;
|
|
1343
|
+
from_address: string;
|
|
1344
|
+
/** Format: uuid */
|
|
1345
|
+
id: string;
|
|
1346
|
+
smtp_transcript: string | null;
|
|
1347
|
+
spf_result: string | null;
|
|
1348
|
+
/** @enum {string} */
|
|
1349
|
+
status: "queued" | "sent" | "delivered" | "bounced" | "complained" | "failed" | "suppressed";
|
|
1350
|
+
subject: string | null;
|
|
1351
|
+
template_name: string | null;
|
|
1352
|
+
to_address: string;
|
|
1353
|
+
/** Format: uuid */
|
|
1354
|
+
workspace_id: string;
|
|
1355
|
+
};
|
|
1356
|
+
OutboundMessagePaginationDto: {
|
|
1357
|
+
/** @description True iff another page exists; if true, pass `next_cursor` on the next request. */
|
|
1358
|
+
has_more: boolean;
|
|
1359
|
+
/** @description Opaque cursor for the next page; null when no more pages. */
|
|
1360
|
+
next_cursor: string | null;
|
|
1361
|
+
};
|
|
1362
|
+
OutboundMessageSettingsDto: {
|
|
1363
|
+
redact_bodies: boolean;
|
|
1364
|
+
/** Format: uuid */
|
|
1365
|
+
workspace_id: string;
|
|
1366
|
+
};
|
|
1367
|
+
OutboundMessageWithBodyDto: {
|
|
1368
|
+
/** @description Cleartext HTML body. Null when the workspace has `redact_bodies = true`. */
|
|
1369
|
+
body_html: string | null;
|
|
1370
|
+
/** @description Cleartext text body. Null when the workspace has `redact_bodies = true`. */
|
|
1371
|
+
body_text: string | null;
|
|
1372
|
+
bounce_code: string | null;
|
|
1373
|
+
bounce_detail: string | null;
|
|
1374
|
+
/** Format: date-time */
|
|
1375
|
+
created_at: string;
|
|
1376
|
+
/** Format: date-time */
|
|
1377
|
+
delivered_at: string | null;
|
|
1378
|
+
dkim_result: string | null;
|
|
1379
|
+
dmarc_result: string | null;
|
|
1380
|
+
/** Format: uuid */
|
|
1381
|
+
domain_id: string | null;
|
|
1382
|
+
from_address: string;
|
|
1383
|
+
/** Format: uuid */
|
|
1384
|
+
id: string;
|
|
1385
|
+
smtp_transcript: string | null;
|
|
1386
|
+
spf_result: string | null;
|
|
1387
|
+
/** @enum {string} */
|
|
1388
|
+
status: "queued" | "sent" | "delivered" | "bounced" | "complained" | "failed" | "suppressed";
|
|
1389
|
+
subject: string | null;
|
|
1390
|
+
template_name: string | null;
|
|
1391
|
+
to_address: string;
|
|
1392
|
+
/** Format: uuid */
|
|
1393
|
+
workspace_id: string;
|
|
1394
|
+
};
|
|
1395
|
+
OutboundWebhookAttemptDto: {
|
|
1396
|
+
attempt_number: number;
|
|
1397
|
+
/** Format: date-time */
|
|
1398
|
+
attempted_at: string;
|
|
1399
|
+
/** Format: uuid */
|
|
1400
|
+
domain_id: string | null;
|
|
1401
|
+
error_message: string | null;
|
|
1402
|
+
event_id: string;
|
|
1403
|
+
event_type: string;
|
|
1404
|
+
/** Format: uuid */
|
|
1405
|
+
id: string;
|
|
1406
|
+
latency_ms: number | null;
|
|
1407
|
+
status_code: number | null;
|
|
1408
|
+
url: string;
|
|
1409
|
+
};
|
|
1410
|
+
OutboundWebhookConfigDto: {
|
|
1411
|
+
consecutive_failures: number;
|
|
1412
|
+
/** Format: date-time */
|
|
1413
|
+
created_at: string;
|
|
1414
|
+
/**
|
|
1415
|
+
* Format: date-time
|
|
1416
|
+
* @description Set when auto-disabled after sustained failure.
|
|
1417
|
+
*/
|
|
1418
|
+
disabled_at: string | null;
|
|
1419
|
+
disabled_reason: string | null;
|
|
1420
|
+
/**
|
|
1421
|
+
* Format: uuid
|
|
1422
|
+
* @description Null for the workspace-default config; set for a per-domain override.
|
|
1423
|
+
*/
|
|
1424
|
+
domain_id: string | null;
|
|
1425
|
+
event_types: string[];
|
|
1426
|
+
/** Format: uuid */
|
|
1427
|
+
id: string;
|
|
1428
|
+
/** @description True while a previous signing secret is still being honoured (24h grace after rotation). */
|
|
1429
|
+
prev_signing_secret_active: boolean;
|
|
1430
|
+
/** Format: date-time */
|
|
1431
|
+
prev_signing_secret_expires_at: string | null;
|
|
1432
|
+
/** @description Last 4 chars of the active signing secret. */
|
|
1433
|
+
signing_secret_hint: string;
|
|
1434
|
+
/** Format: date-time */
|
|
1435
|
+
updated_at: string;
|
|
1436
|
+
url: string;
|
|
1437
|
+
/** Format: uuid */
|
|
1438
|
+
workspace_id: string;
|
|
1439
|
+
};
|
|
1440
|
+
OutboundWebhookConfigWithSecretDto: {
|
|
1441
|
+
consecutive_failures: number;
|
|
1442
|
+
/** Format: date-time */
|
|
1443
|
+
created_at: string;
|
|
1444
|
+
/**
|
|
1445
|
+
* Format: date-time
|
|
1446
|
+
* @description Set when auto-disabled after sustained failure.
|
|
1447
|
+
*/
|
|
1448
|
+
disabled_at: string | null;
|
|
1449
|
+
disabled_reason: string | null;
|
|
1450
|
+
/**
|
|
1451
|
+
* Format: uuid
|
|
1452
|
+
* @description Null for the workspace-default config; set for a per-domain override.
|
|
1453
|
+
*/
|
|
1454
|
+
domain_id: string | null;
|
|
1455
|
+
event_types: string[];
|
|
1456
|
+
/** Format: uuid */
|
|
1457
|
+
id: string;
|
|
1458
|
+
/** @description True while a previous signing secret is still being honoured (24h grace after rotation). */
|
|
1459
|
+
prev_signing_secret_active: boolean;
|
|
1460
|
+
/** Format: date-time */
|
|
1461
|
+
prev_signing_secret_expires_at: string | null;
|
|
1462
|
+
/** @description Plaintext signing secret. Returned once on create / rotate; never reconstructable. */
|
|
1463
|
+
signing_secret: string;
|
|
1464
|
+
/** @description Last 4 chars of the active signing secret. */
|
|
1465
|
+
signing_secret_hint: string;
|
|
1466
|
+
/** Format: date-time */
|
|
1467
|
+
updated_at: string;
|
|
1468
|
+
url: string;
|
|
1469
|
+
/** Format: uuid */
|
|
1470
|
+
workspace_id: string;
|
|
1471
|
+
};
|
|
1472
|
+
PaginationDto: {
|
|
1473
|
+
/**
|
|
1474
|
+
* @description True iff another page exists; if true, pass `next_cursor` on the next request.
|
|
1475
|
+
* @example false
|
|
1476
|
+
*/
|
|
1477
|
+
has_more: boolean;
|
|
1478
|
+
/**
|
|
1479
|
+
* @description Opaque cursor for the next page. `null` when no more pages are available.
|
|
1480
|
+
* @example eyJjcmVhdGVkX2F0IjoiMjAyNi0wNS0wMVQwMDowMDowMFoifQ
|
|
1481
|
+
*/
|
|
1482
|
+
next_cursor: string | null;
|
|
1483
|
+
};
|
|
1484
|
+
PreviewTemplateDto: {
|
|
1485
|
+
/** @description HTML body to render (Handlebars). */
|
|
1486
|
+
body_html: string;
|
|
1487
|
+
/** @description Sample data to render variables with. */
|
|
1488
|
+
data?: Record<string, never>;
|
|
1489
|
+
/** @description Subject template (Handlebars). */
|
|
1490
|
+
subject?: string;
|
|
1491
|
+
};
|
|
1492
|
+
RawBrandDto: {
|
|
1493
|
+
background_color: string | null;
|
|
1494
|
+
brand_name: string | null;
|
|
1495
|
+
button_radius: string | null;
|
|
1496
|
+
card_background_color: string | null;
|
|
1497
|
+
container_max_width: string | null;
|
|
1498
|
+
extras: {
|
|
1499
|
+
[key: string]: unknown;
|
|
1500
|
+
} | null;
|
|
1501
|
+
font_stack: string | null;
|
|
1502
|
+
footer_address: string | null;
|
|
1503
|
+
footer_html: string | null;
|
|
1504
|
+
logo_url: string | null;
|
|
1505
|
+
muted_text_color: string | null;
|
|
1506
|
+
primary_color: string | null;
|
|
1507
|
+
secondary_color: string | null;
|
|
1508
|
+
social_links: {
|
|
1509
|
+
[key: string]: unknown;
|
|
1510
|
+
} | null;
|
|
1511
|
+
text_color: string | null;
|
|
1512
|
+
/** Format: date-time */
|
|
1513
|
+
updated_at: string;
|
|
1514
|
+
};
|
|
1515
|
+
RenderTemplateDto: {
|
|
1516
|
+
/**
|
|
1517
|
+
* @description Data object to render into the template
|
|
1518
|
+
* @example {
|
|
1519
|
+
* "name": "Alice",
|
|
1520
|
+
* "order_id": "ord_123"
|
|
1521
|
+
* }
|
|
1522
|
+
*/
|
|
1523
|
+
data: Record<string, never>;
|
|
1524
|
+
};
|
|
1525
|
+
RenderedMessageDto: {
|
|
1526
|
+
/** @description Fully-rendered HTML body. */
|
|
1527
|
+
html: string;
|
|
1528
|
+
subject: string;
|
|
1529
|
+
/** @description Plain-text body (derived if not authored). */
|
|
1530
|
+
text: string;
|
|
1531
|
+
};
|
|
1532
|
+
ResolvedBrandTokensDto: {
|
|
1533
|
+
/** @example #f4f4f7 */
|
|
1534
|
+
background_color: string;
|
|
1535
|
+
brand_name: string | null;
|
|
1536
|
+
/** @example 6px */
|
|
1537
|
+
button_radius: string;
|
|
1538
|
+
/** @example #ffffff */
|
|
1539
|
+
card_background_color: string;
|
|
1540
|
+
/** @example 560px */
|
|
1541
|
+
container_max_width: string;
|
|
1542
|
+
/** @description Extra key/value tokens addressable as {{brand.extras.<key>}} in templates. */
|
|
1543
|
+
extras: {
|
|
1544
|
+
[key: string]: string;
|
|
1545
|
+
};
|
|
1546
|
+
/** @example Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica Neue, Arial, sans-serif */
|
|
1547
|
+
font_stack: string;
|
|
1548
|
+
footer_address: string | null;
|
|
1549
|
+
footer_html: string | null;
|
|
1550
|
+
logo_url: string | null;
|
|
1551
|
+
/** @example #6b7280 */
|
|
1552
|
+
muted_text_color: string;
|
|
1553
|
+
/** @example #2d29d7 */
|
|
1554
|
+
primary_color: string;
|
|
1555
|
+
/** @example #4338ca */
|
|
1556
|
+
secondary_color: string;
|
|
1557
|
+
/** @description Map of social-platform → URL. */
|
|
1558
|
+
social_links: {
|
|
1559
|
+
[key: string]: string;
|
|
1560
|
+
};
|
|
1561
|
+
/** @example #0a0a0e */
|
|
1562
|
+
text_color: string;
|
|
1563
|
+
};
|
|
1564
|
+
SendAcceptedDto: {
|
|
1565
|
+
/**
|
|
1566
|
+
* @description Always true on a 202.
|
|
1567
|
+
* @example true
|
|
1568
|
+
*/
|
|
1569
|
+
accepted: boolean;
|
|
1570
|
+
from: string;
|
|
1571
|
+
subject: string;
|
|
1572
|
+
to: string;
|
|
1573
|
+
};
|
|
1574
|
+
SendBatchDto: {
|
|
1575
|
+
/** @description Up to 100 messages to render and enqueue in a single call. Each is processed independently — partial successes are allowed. */
|
|
1576
|
+
messages: components["schemas"]["SendBatchRowDto"][];
|
|
1577
|
+
};
|
|
1578
|
+
SendBatchOpenApiResponseDto: {
|
|
1579
|
+
data: components["schemas"]["SendBatchRowStatusDto"][];
|
|
1580
|
+
summary: components["schemas"]["SendBatchSummaryDto"];
|
|
1581
|
+
};
|
|
1582
|
+
SendBatchRowDto: {
|
|
1583
|
+
/**
|
|
1584
|
+
* @description Template data passed into the Handlebars render.
|
|
1585
|
+
* @example {
|
|
1586
|
+
* "code": "A1B2C3",
|
|
1587
|
+
* "name": "Alice"
|
|
1588
|
+
* }
|
|
1589
|
+
*/
|
|
1590
|
+
data: Record<string, never>;
|
|
1591
|
+
/**
|
|
1592
|
+
* @description From address. Must be authorized to send on its domain.
|
|
1593
|
+
* @example noreply@acme.com
|
|
1594
|
+
*/
|
|
1595
|
+
from: string;
|
|
1596
|
+
/** @description Optional per-row idempotency key. Same dedupe namespace as the `Idempotency-Key` request header. */
|
|
1597
|
+
idempotency_key?: string;
|
|
1598
|
+
/** @description Optional override for the rendered subject. Falls back to the template subject. */
|
|
1599
|
+
subject?: string;
|
|
1600
|
+
/**
|
|
1601
|
+
* @description Recipient address.
|
|
1602
|
+
* @example alice@example.com
|
|
1603
|
+
*/
|
|
1604
|
+
to: string;
|
|
1605
|
+
};
|
|
1606
|
+
SendBatchRowErrorDto: {
|
|
1607
|
+
code: string;
|
|
1608
|
+
message: string;
|
|
1609
|
+
};
|
|
1610
|
+
SendBatchRowStatusDto: {
|
|
1611
|
+
error?: components["schemas"]["SendBatchRowErrorDto"] | null;
|
|
1612
|
+
/** @description Outbound message id when accepted; absent on reject. */
|
|
1613
|
+
id?: string;
|
|
1614
|
+
/** @description Index into the request `messages[]` array. */
|
|
1615
|
+
index: number;
|
|
1616
|
+
/** @enum {string} */
|
|
1617
|
+
status: "accepted" | "rejected";
|
|
1618
|
+
};
|
|
1619
|
+
SendBatchSummaryDto: {
|
|
1620
|
+
accepted: number;
|
|
1621
|
+
rejected: number;
|
|
1622
|
+
};
|
|
1623
|
+
SendTemplateDto: {
|
|
1624
|
+
/**
|
|
1625
|
+
* @description Data object to render into the template
|
|
1626
|
+
* @example {
|
|
1627
|
+
* "name": "Alice",
|
|
1628
|
+
* "order_id": "ord_123"
|
|
1629
|
+
* }
|
|
1630
|
+
*/
|
|
1631
|
+
data: Record<string, never>;
|
|
1632
|
+
/**
|
|
1633
|
+
* @description From email address
|
|
1634
|
+
* @example hello@acme.com
|
|
1635
|
+
*/
|
|
1636
|
+
from: string;
|
|
1637
|
+
/** @description Subject override (optional; uses template subject otherwise) */
|
|
1638
|
+
subject?: string;
|
|
1639
|
+
/**
|
|
1640
|
+
* @description To email address or list of addresses
|
|
1641
|
+
* @example user@example.com
|
|
1642
|
+
*/
|
|
1643
|
+
to: string;
|
|
1644
|
+
};
|
|
1645
|
+
SmtpConfigDto: {
|
|
1646
|
+
/** @description Per-workspace bounce-webhook secret. Embedded in the URL the user pastes into provider dashboards. */
|
|
1647
|
+
bounce_webhook_secret: string;
|
|
1648
|
+
/** @description Fully-qualified webhook URL the user pastes into their provider. */
|
|
1649
|
+
bounce_webhook_url: string;
|
|
1650
|
+
/** Format: date-time */
|
|
1651
|
+
created_at: string;
|
|
1652
|
+
/** @description Null for the workspace-default config, set for a per-domain override. */
|
|
1653
|
+
domain_id: string | null;
|
|
1654
|
+
from_email: string;
|
|
1655
|
+
from_name: string;
|
|
1656
|
+
host: string;
|
|
1657
|
+
/** Format: date-time */
|
|
1658
|
+
last_verified_at: string | null;
|
|
1659
|
+
last_verify_error: string | null;
|
|
1660
|
+
/** @description Always null on the wire — the stored ciphertext is never returned. */
|
|
1661
|
+
password: string | null;
|
|
1662
|
+
password_set: boolean;
|
|
1663
|
+
port: number;
|
|
1664
|
+
secure: boolean;
|
|
1665
|
+
/** @enum {string} */
|
|
1666
|
+
status: "pending" | "active" | "failed";
|
|
1667
|
+
/** Format: date-time */
|
|
1668
|
+
updated_at: string;
|
|
1669
|
+
username: string | null;
|
|
1670
|
+
/** Format: uuid */
|
|
1671
|
+
workspace_id: string;
|
|
1672
|
+
};
|
|
1673
|
+
SmtpVerifyErrorDto: {
|
|
1674
|
+
/** @example EAUTH */
|
|
1675
|
+
code: string;
|
|
1676
|
+
/** @example Authentication failed — check the username and password. */
|
|
1677
|
+
message: string;
|
|
1678
|
+
};
|
|
1679
|
+
SmtpVerifyResultDto: {
|
|
1680
|
+
error?: components["schemas"]["SmtpVerifyErrorDto"] | null;
|
|
1681
|
+
ok: boolean;
|
|
1682
|
+
};
|
|
1683
|
+
StartSyncResponseDto: {
|
|
1684
|
+
started_at: string;
|
|
1685
|
+
sync_id: string;
|
|
1686
|
+
};
|
|
1687
|
+
SuppressionEntryDto: {
|
|
1688
|
+
/**
|
|
1689
|
+
* Format: date-time
|
|
1690
|
+
* @description Insertion (or last-touch) timestamp.
|
|
1691
|
+
*/
|
|
1692
|
+
added_at: string;
|
|
1693
|
+
/**
|
|
1694
|
+
* @description Suppressed recipient (lowercased on insert).
|
|
1695
|
+
* @example user@example.com
|
|
1696
|
+
*/
|
|
1697
|
+
email: string;
|
|
1698
|
+
/**
|
|
1699
|
+
* Format: uuid
|
|
1700
|
+
* @description Suppression row id.
|
|
1701
|
+
*/
|
|
1702
|
+
id: string;
|
|
1703
|
+
/** @description Free-text reason; null when unspecified. */
|
|
1704
|
+
reason: string | null;
|
|
1705
|
+
/**
|
|
1706
|
+
* @description Where the row originated.
|
|
1707
|
+
* @enum {string}
|
|
1708
|
+
*/
|
|
1709
|
+
source: "manual" | "bounce" | "complaint";
|
|
1710
|
+
/**
|
|
1711
|
+
* Format: uuid
|
|
1712
|
+
* @description Workspace this suppression belongs to.
|
|
1713
|
+
*/
|
|
1714
|
+
workspace_id: string;
|
|
1715
|
+
};
|
|
1716
|
+
SyncStatusDto: {
|
|
1717
|
+
ended_at: string | null;
|
|
1718
|
+
error: string | null;
|
|
1719
|
+
started_at: string;
|
|
1720
|
+
/** @enum {string} */
|
|
1721
|
+
status: "running" | "completed" | "failed";
|
|
1722
|
+
summary: {
|
|
1723
|
+
[key: string]: unknown;
|
|
1724
|
+
} | null;
|
|
1725
|
+
};
|
|
1726
|
+
TemplateDto: {
|
|
1727
|
+
body_html: string;
|
|
1728
|
+
body_text: string | null;
|
|
1729
|
+
/** Format: date-time */
|
|
1730
|
+
created_at: string;
|
|
1731
|
+
/** Format: uuid */
|
|
1732
|
+
id: string;
|
|
1733
|
+
/** @enum {string} */
|
|
1734
|
+
kind: "template" | "layout" | "partial";
|
|
1735
|
+
name: string;
|
|
1736
|
+
/**
|
|
1737
|
+
* @description Where this row came from. 'manual' for UI-authored, 'github' for rows maintained by the workspace GitHub integration sync. Migration 0020.
|
|
1738
|
+
* @default manual
|
|
1739
|
+
* @enum {string}
|
|
1740
|
+
*/
|
|
1741
|
+
source: "manual" | "github";
|
|
1742
|
+
/** @description Stable provider pointer used by the editor to build "Open on GitHub →" links. Shape: `github:<owner>/<repo>@<branch>:<path-in-repo>`. */
|
|
1743
|
+
source_ref: string | null;
|
|
1744
|
+
/**
|
|
1745
|
+
* Format: date-time
|
|
1746
|
+
* @description When the sync service last wrote this row. null for manual rows.
|
|
1747
|
+
*/
|
|
1748
|
+
source_synced_at: string | null;
|
|
1749
|
+
subject: string;
|
|
1750
|
+
tags: string[];
|
|
1751
|
+
/** Format: date-time */
|
|
1752
|
+
updated_at: string;
|
|
1753
|
+
/** @description Declared variable schema; arbitrary JSON or null if not configured. */
|
|
1754
|
+
variables_schema: Record<string, never> | null;
|
|
1755
|
+
/** Format: uuid */
|
|
1756
|
+
workspace_id: string;
|
|
1757
|
+
};
|
|
1758
|
+
TemplateVariablesResponseDto: {
|
|
1759
|
+
/** @description Variables auto-detected from the saved template body + subject (Handlebars expressions, dotted paths preserved). */
|
|
1760
|
+
data: string[];
|
|
1761
|
+
};
|
|
1762
|
+
TestSendTemplateDto: {
|
|
1763
|
+
/**
|
|
1764
|
+
* @description Variable values to render into the template. Keys correspond to the dotted paths returned by the /variables endpoint.
|
|
1765
|
+
* @example {
|
|
1766
|
+
* "code": "123456",
|
|
1767
|
+
* "name": "Alice"
|
|
1768
|
+
* }
|
|
1769
|
+
*/
|
|
1770
|
+
data?: Record<string, never>;
|
|
1771
|
+
/** @description From email address. Must be on a verified domain owned by the workspace, same as a normal send. */
|
|
1772
|
+
from: string;
|
|
1773
|
+
/** @description Recipient address for the test email. Suppression-list and rate-limit checks are bypassed for test sends, so a recently-bounced address is still reachable for QA. */
|
|
1774
|
+
to: string;
|
|
1775
|
+
};
|
|
1776
|
+
TimelinePointDto: {
|
|
1777
|
+
/**
|
|
1778
|
+
* @description Count of messages in this bucket.
|
|
1779
|
+
* @example 42
|
|
1780
|
+
*/
|
|
1781
|
+
count: number;
|
|
1782
|
+
/**
|
|
1783
|
+
* @description UTC date in YYYY-MM-DD format.
|
|
1784
|
+
* @example 2026-04-02
|
|
1785
|
+
*/
|
|
1786
|
+
date: string;
|
|
1787
|
+
};
|
|
1788
|
+
UpdateBrandDto: {
|
|
1789
|
+
/** @description Page background — the area outside the email card. */
|
|
1790
|
+
background_color?: string;
|
|
1791
|
+
/** @description Display name shown in the email header (falls back to your workspace display name if not set). */
|
|
1792
|
+
brand_name?: string;
|
|
1793
|
+
/** @description CSS length value for button border-radius (e.g. "6px", "0", "9999px" for fully round). */
|
|
1794
|
+
button_radius?: string;
|
|
1795
|
+
/** @description Email card background. */
|
|
1796
|
+
card_background_color?: string;
|
|
1797
|
+
/** @description Maximum width of the email card. Bulletproof tables max-out at this. */
|
|
1798
|
+
container_max_width?: string;
|
|
1799
|
+
/** @description Extra key/value tokens addressable as {{brand.extras.<key>}} in templates. Use for marketing strings, secondary accent colors, etc. */
|
|
1800
|
+
extras?: {
|
|
1801
|
+
[key: string]: string;
|
|
1802
|
+
};
|
|
1803
|
+
/** @description CSS font-family stack. Email clients can't use webfonts reliably — list system fonts in fallback order. */
|
|
1804
|
+
font_stack?: string;
|
|
1805
|
+
/** @description Postal address line for compliance footers (CAN-SPAM, etc.). Plain text, displayed verbatim. */
|
|
1806
|
+
footer_address?: string;
|
|
1807
|
+
/** @description Custom HTML to render in the email footer. Inline styles only — no <style> tags. Used by templates that opt into `{{> bp.footer}}`. */
|
|
1808
|
+
footer_html?: string;
|
|
1809
|
+
/** @description Public URL of your logo. Recommended: PNG/SVG, ≤200px tall, hosted on a domain you control or any CDN reachable at send time. */
|
|
1810
|
+
logo_url?: string;
|
|
1811
|
+
/** @description Muted text color for footers + secondary copy. */
|
|
1812
|
+
muted_text_color?: string;
|
|
1813
|
+
/** @description Primary brand color. Used for buttons, links, and accent strokes. Hex string (e.g. #2d29d7). */
|
|
1814
|
+
primary_color?: string;
|
|
1815
|
+
/** @description Secondary brand color, typically darker than primary. Used for hover states + secondary accents. */
|
|
1816
|
+
secondary_color?: string;
|
|
1817
|
+
/** @description Map of social-platform → URL. Recognized keys: twitter, x, linkedin, github, instagram, facebook, youtube, tiktok, mastodon, bluesky, web. */
|
|
1818
|
+
social_links?: {
|
|
1819
|
+
[key: string]: string;
|
|
1820
|
+
};
|
|
1821
|
+
/** @description Body text color (default: near-black). */
|
|
1822
|
+
text_color?: string;
|
|
1823
|
+
};
|
|
1824
|
+
UpdateDomainDto: {
|
|
1825
|
+
/** @description Identifier from the wizard's provider list. Free-form so we can ship new entries without a migration. NULL clears the choice. */
|
|
1826
|
+
dns_provider?: string | null;
|
|
1827
|
+
};
|
|
1828
|
+
UpdateGitHubSettingsDto: {
|
|
1829
|
+
/** @example main */
|
|
1830
|
+
branch: string;
|
|
1831
|
+
/** @example octocat/templates */
|
|
1832
|
+
repo_full_name: string;
|
|
1833
|
+
/** @example / */
|
|
1834
|
+
templates_path: string;
|
|
1835
|
+
};
|
|
1836
|
+
UpdateMailboxDto: {
|
|
1837
|
+
/** @description Display name */
|
|
1838
|
+
display_name?: string;
|
|
1839
|
+
/** @description Retention period in days (1–30) */
|
|
1840
|
+
retention_days?: number;
|
|
1841
|
+
/**
|
|
1842
|
+
* @description Mailbox status
|
|
1843
|
+
* @enum {string}
|
|
1844
|
+
*/
|
|
1845
|
+
status?: "active" | "disabled";
|
|
1846
|
+
};
|
|
1847
|
+
UpdateOutboundMessageSettingsDto: {
|
|
1848
|
+
/** @description When true, /messages/:id/body returns null body_html + body_text even to callers with mail.message.body.read. Defaults to false. */
|
|
1849
|
+
redact_bodies: boolean;
|
|
1850
|
+
};
|
|
1851
|
+
UpsertOutboundWebhookDto: {
|
|
1852
|
+
/**
|
|
1853
|
+
* @description Events the destination subscribes to.
|
|
1854
|
+
* @example [
|
|
1855
|
+
* "message.delivered",
|
|
1856
|
+
* "message.bounced"
|
|
1857
|
+
* ]
|
|
1858
|
+
*/
|
|
1859
|
+
event_types: ("message.delivered" | "message.bounced")[];
|
|
1860
|
+
/**
|
|
1861
|
+
* @description Destination URL. Must be absolute https:// with a public TLD.
|
|
1862
|
+
* @example https://api.acme.com/webhooks/mail
|
|
1863
|
+
*/
|
|
1864
|
+
url: string;
|
|
1865
|
+
};
|
|
1866
|
+
UpsertSmtpConfigDto: {
|
|
1867
|
+
/**
|
|
1868
|
+
* @description Default From email address. Must be authorized to send on the chosen domain.
|
|
1869
|
+
* @example noreply@acme.com
|
|
1870
|
+
*/
|
|
1871
|
+
from_email: string;
|
|
1872
|
+
/**
|
|
1873
|
+
* @description Default From name on outbound messages.
|
|
1874
|
+
* @example Acme Notifications
|
|
1875
|
+
*/
|
|
1876
|
+
from_name: string;
|
|
1877
|
+
/**
|
|
1878
|
+
* @description SMTP server hostname.
|
|
1879
|
+
* @example smtp.sendgrid.net
|
|
1880
|
+
*/
|
|
1881
|
+
host: string;
|
|
1882
|
+
/** @description SMTP password. Stored encrypted at rest; never returned by GET endpoints. */
|
|
1883
|
+
password?: string;
|
|
1884
|
+
/**
|
|
1885
|
+
* @description SMTP server port (commonly 587 for STARTTLS, 465 for implicit TLS).
|
|
1886
|
+
* @example 587
|
|
1887
|
+
*/
|
|
1888
|
+
port: number;
|
|
1889
|
+
/**
|
|
1890
|
+
* @description Whether to use implicit TLS (true → port 465 style). For STARTTLS on 587, set false.
|
|
1891
|
+
* @example false
|
|
1892
|
+
*/
|
|
1893
|
+
secure: boolean;
|
|
1894
|
+
/** @description SMTP username. May be omitted alongside password for anonymous SMTP (e.g. postfix on a private network); otherwise both are required. */
|
|
1895
|
+
username?: string;
|
|
1896
|
+
};
|
|
1897
|
+
UpsertTemplateDto: {
|
|
1898
|
+
/** @description HTML body (Handlebars) */
|
|
1899
|
+
body_html: string;
|
|
1900
|
+
/** @description Plain-text body (Handlebars). Auto-derived if omitted. */
|
|
1901
|
+
body_text?: string;
|
|
1902
|
+
/**
|
|
1903
|
+
* @description Kind: "template" (sendable email; default), "layout" (chrome wrapper referenced via {{> layout.<name>}}), "partial" (reusable block referenced via {{> partial.<name>}}). Cannot be changed after create — delete + recreate to switch kinds.
|
|
1904
|
+
* @default template
|
|
1905
|
+
* @enum {string}
|
|
1906
|
+
*/
|
|
1907
|
+
kind: "template" | "layout" | "partial";
|
|
1908
|
+
/**
|
|
1909
|
+
* @description Unique template name within the app (lowercase letters, digits, underscore, hyphen)
|
|
1910
|
+
* @example order-confirmation
|
|
1911
|
+
*/
|
|
1912
|
+
name: string;
|
|
1913
|
+
/** @description Subject line (Handlebars). Layouts and partials ignore this field — they are not standalone-sendable. Pass an empty string for those. */
|
|
1914
|
+
subject: string;
|
|
1915
|
+
/** @description Workspace-scoped labels for organizing templates. Free-form strings; the editor surfaces existing tags as autocomplete. */
|
|
1916
|
+
tags?: string[];
|
|
1917
|
+
/** @description Declared variable schema. Shape: `{version:1, vars:{<name>:{type, required?, default?, options?}}}`. When set, render + send validate the payload against the schema and 400 with descriptive errors on mismatch. */
|
|
1918
|
+
variables_schema?: Record<string, never>;
|
|
1919
|
+
};
|
|
1920
|
+
VerifySmtpConfigDto: {
|
|
1921
|
+
/**
|
|
1922
|
+
* @description Default From email address. Must be authorized to send on the chosen domain.
|
|
1923
|
+
* @example noreply@acme.com
|
|
1924
|
+
*/
|
|
1925
|
+
from_email: string;
|
|
1926
|
+
/**
|
|
1927
|
+
* @description Default From name on outbound messages.
|
|
1928
|
+
* @example Acme Notifications
|
|
1929
|
+
*/
|
|
1930
|
+
from_name: string;
|
|
1931
|
+
/**
|
|
1932
|
+
* @description SMTP server hostname.
|
|
1933
|
+
* @example smtp.sendgrid.net
|
|
1934
|
+
*/
|
|
1935
|
+
host: string;
|
|
1936
|
+
/** @description SMTP password. Stored encrypted at rest; never returned by GET endpoints. */
|
|
1937
|
+
password?: string;
|
|
1938
|
+
/**
|
|
1939
|
+
* @description SMTP server port (commonly 587 for STARTTLS, 465 for implicit TLS).
|
|
1940
|
+
* @example 587
|
|
1941
|
+
*/
|
|
1942
|
+
port: number;
|
|
1943
|
+
/**
|
|
1944
|
+
* @description Whether to use implicit TLS (true → port 465 style). For STARTTLS on 587, set false.
|
|
1945
|
+
* @example false
|
|
1946
|
+
*/
|
|
1947
|
+
secure: boolean;
|
|
1948
|
+
/** @description SMTP username. May be omitted alongside password for anonymous SMTP (e.g. postfix on a private network); otherwise both are required. */
|
|
1949
|
+
username?: string;
|
|
1950
|
+
};
|
|
1951
|
+
};
|
|
1952
|
+
responses: never;
|
|
1953
|
+
parameters: never;
|
|
1954
|
+
requestBodies: never;
|
|
1955
|
+
headers: never;
|
|
1956
|
+
pathItems: never;
|
|
1957
|
+
}
|
|
1958
|
+
interface operations {
|
|
1959
|
+
BounceWebhookController_handleBounceHeader: {
|
|
1960
|
+
parameters: {
|
|
1961
|
+
query?: never;
|
|
1962
|
+
header: {
|
|
1963
|
+
"x-envoi-bounce-secret": string;
|
|
1964
|
+
};
|
|
1965
|
+
path: {
|
|
1966
|
+
workspace_id: string;
|
|
1967
|
+
};
|
|
1968
|
+
cookie?: never;
|
|
1969
|
+
};
|
|
1970
|
+
requestBody?: never;
|
|
1971
|
+
responses: {
|
|
1972
|
+
200: {
|
|
1973
|
+
headers: {
|
|
1974
|
+
[name: string]: unknown;
|
|
1975
|
+
};
|
|
1976
|
+
content: {
|
|
1977
|
+
"application/json": components["schemas"]["BounceWebhookResponseDto"];
|
|
1978
|
+
};
|
|
1979
|
+
};
|
|
1980
|
+
};
|
|
1981
|
+
};
|
|
1982
|
+
BounceWebhookController_handleDomainBounceHeader: {
|
|
1983
|
+
parameters: {
|
|
1984
|
+
query?: never;
|
|
1985
|
+
header: {
|
|
1986
|
+
"x-envoi-bounce-secret": string;
|
|
1987
|
+
};
|
|
1988
|
+
path: {
|
|
1989
|
+
workspace_id: string;
|
|
1990
|
+
domain_id: string;
|
|
1991
|
+
};
|
|
1992
|
+
cookie?: never;
|
|
1993
|
+
};
|
|
1994
|
+
requestBody?: never;
|
|
1995
|
+
responses: {
|
|
1996
|
+
200: {
|
|
1997
|
+
headers: {
|
|
1998
|
+
[name: string]: unknown;
|
|
1999
|
+
};
|
|
2000
|
+
content: {
|
|
2001
|
+
"application/json": components["schemas"]["BounceWebhookResponseDto"];
|
|
2002
|
+
};
|
|
2003
|
+
};
|
|
2004
|
+
};
|
|
2005
|
+
};
|
|
2006
|
+
BounceWebhookController_handleBounce: {
|
|
2007
|
+
parameters: {
|
|
2008
|
+
query?: never;
|
|
2009
|
+
header?: never;
|
|
2010
|
+
path: {
|
|
2011
|
+
workspace_id: string;
|
|
2012
|
+
secret: string;
|
|
2013
|
+
};
|
|
2014
|
+
cookie?: never;
|
|
2015
|
+
};
|
|
2016
|
+
requestBody?: never;
|
|
2017
|
+
responses: {
|
|
2018
|
+
200: {
|
|
2019
|
+
headers: {
|
|
2020
|
+
[name: string]: unknown;
|
|
2021
|
+
};
|
|
2022
|
+
content: {
|
|
2023
|
+
"application/json": components["schemas"]["BounceWebhookResponseDto"];
|
|
2024
|
+
};
|
|
2025
|
+
};
|
|
2026
|
+
};
|
|
2027
|
+
};
|
|
2028
|
+
BounceWebhookController_handleDomainBounce: {
|
|
2029
|
+
parameters: {
|
|
2030
|
+
query?: never;
|
|
2031
|
+
header?: never;
|
|
2032
|
+
path: {
|
|
2033
|
+
workspace_id: string;
|
|
2034
|
+
secret: string;
|
|
2035
|
+
domain_id: string;
|
|
2036
|
+
};
|
|
2037
|
+
cookie?: never;
|
|
2038
|
+
};
|
|
2039
|
+
requestBody?: never;
|
|
2040
|
+
responses: {
|
|
2041
|
+
200: {
|
|
2042
|
+
headers: {
|
|
2043
|
+
[name: string]: unknown;
|
|
2044
|
+
};
|
|
2045
|
+
content: {
|
|
2046
|
+
"application/json": components["schemas"]["BounceWebhookResponseDto"];
|
|
2047
|
+
};
|
|
2048
|
+
};
|
|
2049
|
+
};
|
|
2050
|
+
};
|
|
2051
|
+
BrandController_get: {
|
|
2052
|
+
parameters: {
|
|
2053
|
+
query?: never;
|
|
2054
|
+
header?: never;
|
|
2055
|
+
path: {
|
|
2056
|
+
workspace_id: string;
|
|
2057
|
+
};
|
|
2058
|
+
cookie?: never;
|
|
2059
|
+
};
|
|
2060
|
+
requestBody?: never;
|
|
2061
|
+
responses: {
|
|
2062
|
+
200: {
|
|
2063
|
+
headers: {
|
|
2064
|
+
[name: string]: unknown;
|
|
2065
|
+
};
|
|
2066
|
+
content: {
|
|
2067
|
+
"application/json": components["schemas"]["BrandResponseDto"];
|
|
2068
|
+
};
|
|
2069
|
+
};
|
|
2070
|
+
};
|
|
2071
|
+
};
|
|
2072
|
+
BrandController_update: {
|
|
2073
|
+
parameters: {
|
|
2074
|
+
query?: never;
|
|
2075
|
+
header?: never;
|
|
2076
|
+
path: {
|
|
2077
|
+
workspace_id: string;
|
|
2078
|
+
};
|
|
2079
|
+
cookie?: never;
|
|
2080
|
+
};
|
|
2081
|
+
requestBody: {
|
|
2082
|
+
content: {
|
|
2083
|
+
"application/json": components["schemas"]["UpdateBrandDto"];
|
|
2084
|
+
};
|
|
2085
|
+
};
|
|
2086
|
+
responses: {
|
|
2087
|
+
200: {
|
|
2088
|
+
headers: {
|
|
2089
|
+
[name: string]: unknown;
|
|
2090
|
+
};
|
|
2091
|
+
content: {
|
|
2092
|
+
"application/json": components["schemas"]["BrandResponseDto"];
|
|
2093
|
+
};
|
|
2094
|
+
};
|
|
2095
|
+
/** @description Validation failure on the brand payload. */
|
|
2096
|
+
400: {
|
|
2097
|
+
headers: {
|
|
2098
|
+
[name: string]: unknown;
|
|
2099
|
+
};
|
|
2100
|
+
content?: never;
|
|
2101
|
+
};
|
|
2102
|
+
};
|
|
2103
|
+
};
|
|
2104
|
+
BrandController_reset: {
|
|
2105
|
+
parameters: {
|
|
2106
|
+
query?: never;
|
|
2107
|
+
header?: never;
|
|
2108
|
+
path: {
|
|
2109
|
+
workspace_id: string;
|
|
2110
|
+
};
|
|
2111
|
+
cookie?: never;
|
|
2112
|
+
};
|
|
2113
|
+
requestBody?: never;
|
|
2114
|
+
responses: {
|
|
2115
|
+
/** @description Brand customisations cleared. */
|
|
2116
|
+
204: {
|
|
2117
|
+
headers: {
|
|
2118
|
+
[name: string]: unknown;
|
|
2119
|
+
};
|
|
2120
|
+
content?: never;
|
|
2121
|
+
};
|
|
2122
|
+
};
|
|
2123
|
+
};
|
|
2124
|
+
DomainController_listDomains: {
|
|
2125
|
+
parameters: {
|
|
2126
|
+
query?: never;
|
|
2127
|
+
header?: never;
|
|
2128
|
+
path: {
|
|
2129
|
+
workspace_id: string;
|
|
2130
|
+
};
|
|
2131
|
+
cookie?: never;
|
|
2132
|
+
};
|
|
2133
|
+
requestBody?: never;
|
|
2134
|
+
responses: {
|
|
2135
|
+
200: {
|
|
2136
|
+
headers: {
|
|
2137
|
+
[name: string]: unknown;
|
|
2138
|
+
};
|
|
2139
|
+
content: {
|
|
2140
|
+
"application/json": components["schemas"]["ListDomainsResponseDto"];
|
|
2141
|
+
};
|
|
2142
|
+
};
|
|
2143
|
+
};
|
|
2144
|
+
};
|
|
2145
|
+
DomainController_createDomain: {
|
|
2146
|
+
parameters: {
|
|
2147
|
+
query?: never;
|
|
2148
|
+
header?: never;
|
|
2149
|
+
path: {
|
|
2150
|
+
workspace_id: string;
|
|
2151
|
+
};
|
|
2152
|
+
cookie?: never;
|
|
2153
|
+
};
|
|
2154
|
+
requestBody: {
|
|
2155
|
+
content: {
|
|
2156
|
+
"application/json": components["schemas"]["CreateDomainDto"];
|
|
2157
|
+
};
|
|
2158
|
+
};
|
|
2159
|
+
responses: {
|
|
2160
|
+
201: {
|
|
2161
|
+
headers: {
|
|
2162
|
+
[name: string]: unknown;
|
|
2163
|
+
};
|
|
2164
|
+
content: {
|
|
2165
|
+
"application/json": components["schemas"]["DomainDto"];
|
|
2166
|
+
};
|
|
2167
|
+
};
|
|
2168
|
+
/** @description Validation failure on the request body. */
|
|
2169
|
+
400: {
|
|
2170
|
+
headers: {
|
|
2171
|
+
[name: string]: unknown;
|
|
2172
|
+
};
|
|
2173
|
+
content?: never;
|
|
2174
|
+
};
|
|
2175
|
+
/** @description Domain already registered (globally unique). */
|
|
2176
|
+
409: {
|
|
2177
|
+
headers: {
|
|
2178
|
+
[name: string]: unknown;
|
|
2179
|
+
};
|
|
2180
|
+
content?: never;
|
|
2181
|
+
};
|
|
2182
|
+
};
|
|
2183
|
+
};
|
|
2184
|
+
DomainController_getDomain: {
|
|
2185
|
+
parameters: {
|
|
2186
|
+
query?: never;
|
|
2187
|
+
header?: never;
|
|
2188
|
+
path: {
|
|
2189
|
+
workspace_id: string;
|
|
2190
|
+
domain_id: string;
|
|
2191
|
+
};
|
|
2192
|
+
cookie?: never;
|
|
2193
|
+
};
|
|
2194
|
+
requestBody?: never;
|
|
2195
|
+
responses: {
|
|
2196
|
+
200: {
|
|
2197
|
+
headers: {
|
|
2198
|
+
[name: string]: unknown;
|
|
2199
|
+
};
|
|
2200
|
+
content: {
|
|
2201
|
+
"application/json": components["schemas"]["DomainDto"];
|
|
2202
|
+
};
|
|
2203
|
+
};
|
|
2204
|
+
/** @description Domain not found in this workspace. */
|
|
2205
|
+
404: {
|
|
2206
|
+
headers: {
|
|
2207
|
+
[name: string]: unknown;
|
|
2208
|
+
};
|
|
2209
|
+
content?: never;
|
|
2210
|
+
};
|
|
2211
|
+
};
|
|
2212
|
+
};
|
|
2213
|
+
DomainController_deleteDomain: {
|
|
2214
|
+
parameters: {
|
|
2215
|
+
query?: never;
|
|
2216
|
+
header?: never;
|
|
2217
|
+
path: {
|
|
2218
|
+
workspace_id: string;
|
|
2219
|
+
domain_id: string;
|
|
2220
|
+
};
|
|
2221
|
+
cookie?: never;
|
|
2222
|
+
};
|
|
2223
|
+
requestBody?: never;
|
|
2224
|
+
responses: {
|
|
2225
|
+
/** @description Domain deleted. */
|
|
2226
|
+
204: {
|
|
2227
|
+
headers: {
|
|
2228
|
+
[name: string]: unknown;
|
|
2229
|
+
};
|
|
2230
|
+
content?: never;
|
|
2231
|
+
};
|
|
2232
|
+
/** @description Domain not found in this workspace. */
|
|
2233
|
+
404: {
|
|
2234
|
+
headers: {
|
|
2235
|
+
[name: string]: unknown;
|
|
2236
|
+
};
|
|
2237
|
+
content?: never;
|
|
2238
|
+
};
|
|
2239
|
+
/** @description Domain has existing mailboxes; delete them first */
|
|
2240
|
+
409: {
|
|
2241
|
+
headers: {
|
|
2242
|
+
[name: string]: unknown;
|
|
2243
|
+
};
|
|
2244
|
+
content?: never;
|
|
2245
|
+
};
|
|
2246
|
+
};
|
|
2247
|
+
};
|
|
2248
|
+
DomainController_updateDomain: {
|
|
2249
|
+
parameters: {
|
|
2250
|
+
query?: never;
|
|
2251
|
+
header?: never;
|
|
2252
|
+
path: {
|
|
2253
|
+
workspace_id: string;
|
|
2254
|
+
domain_id: string;
|
|
2255
|
+
};
|
|
2256
|
+
cookie?: never;
|
|
2257
|
+
};
|
|
2258
|
+
requestBody: {
|
|
2259
|
+
content: {
|
|
2260
|
+
"application/json": components["schemas"]["UpdateDomainDto"];
|
|
2261
|
+
};
|
|
2262
|
+
};
|
|
2263
|
+
responses: {
|
|
2264
|
+
200: {
|
|
2265
|
+
headers: {
|
|
2266
|
+
[name: string]: unknown;
|
|
2267
|
+
};
|
|
2268
|
+
content: {
|
|
2269
|
+
"application/json": components["schemas"]["DomainDto"];
|
|
2270
|
+
};
|
|
2271
|
+
};
|
|
2272
|
+
/** @description Validation failure on the request body. */
|
|
2273
|
+
400: {
|
|
2274
|
+
headers: {
|
|
2275
|
+
[name: string]: unknown;
|
|
2276
|
+
};
|
|
2277
|
+
content?: never;
|
|
2278
|
+
};
|
|
2279
|
+
/** @description Domain not found in this workspace. */
|
|
2280
|
+
404: {
|
|
2281
|
+
headers: {
|
|
2282
|
+
[name: string]: unknown;
|
|
2283
|
+
};
|
|
2284
|
+
content?: never;
|
|
2285
|
+
};
|
|
2286
|
+
};
|
|
2287
|
+
};
|
|
2288
|
+
DomainSmtpConfigController_get: {
|
|
2289
|
+
parameters: {
|
|
2290
|
+
query?: never;
|
|
2291
|
+
header?: never;
|
|
2292
|
+
path: {
|
|
2293
|
+
workspace_id: string;
|
|
2294
|
+
domain_id: string;
|
|
2295
|
+
};
|
|
2296
|
+
cookie?: never;
|
|
2297
|
+
};
|
|
2298
|
+
requestBody?: never;
|
|
2299
|
+
responses: {
|
|
2300
|
+
200: {
|
|
2301
|
+
headers: {
|
|
2302
|
+
[name: string]: unknown;
|
|
2303
|
+
};
|
|
2304
|
+
content: {
|
|
2305
|
+
"application/json": components["schemas"]["GetSmtpConfigResponseDto"];
|
|
2306
|
+
};
|
|
2307
|
+
};
|
|
2308
|
+
};
|
|
2309
|
+
};
|
|
2310
|
+
DomainSmtpConfigController_upsert: {
|
|
2311
|
+
parameters: {
|
|
2312
|
+
query?: never;
|
|
2313
|
+
header?: never;
|
|
2314
|
+
path: {
|
|
2315
|
+
workspace_id: string;
|
|
2316
|
+
domain_id: string;
|
|
2317
|
+
};
|
|
2318
|
+
cookie?: never;
|
|
2319
|
+
};
|
|
2320
|
+
requestBody: {
|
|
2321
|
+
content: {
|
|
2322
|
+
"application/json": components["schemas"]["UpsertSmtpConfigDto"];
|
|
2323
|
+
};
|
|
2324
|
+
};
|
|
2325
|
+
responses: {
|
|
2326
|
+
200: {
|
|
2327
|
+
headers: {
|
|
2328
|
+
[name: string]: unknown;
|
|
2329
|
+
};
|
|
2330
|
+
content: {
|
|
2331
|
+
"application/json": components["schemas"]["SmtpConfigDto"];
|
|
2332
|
+
};
|
|
2333
|
+
};
|
|
2334
|
+
/** @description Validation failure or username/password mismatch. */
|
|
2335
|
+
400: {
|
|
2336
|
+
headers: {
|
|
2337
|
+
[name: string]: unknown;
|
|
2338
|
+
};
|
|
2339
|
+
content?: never;
|
|
2340
|
+
};
|
|
2341
|
+
/** @description Domain not found in this workspace. */
|
|
2342
|
+
404: {
|
|
2343
|
+
headers: {
|
|
2344
|
+
[name: string]: unknown;
|
|
2345
|
+
};
|
|
2346
|
+
content?: never;
|
|
2347
|
+
};
|
|
2348
|
+
};
|
|
2349
|
+
};
|
|
2350
|
+
DomainSmtpConfigController_delete: {
|
|
2351
|
+
parameters: {
|
|
2352
|
+
query?: never;
|
|
2353
|
+
header?: never;
|
|
2354
|
+
path: {
|
|
2355
|
+
workspace_id: string;
|
|
2356
|
+
domain_id: string;
|
|
2357
|
+
};
|
|
2358
|
+
cookie?: never;
|
|
2359
|
+
};
|
|
2360
|
+
requestBody?: never;
|
|
2361
|
+
responses: {
|
|
2362
|
+
/** @description Per-domain override deleted. */
|
|
2363
|
+
204: {
|
|
2364
|
+
headers: {
|
|
2365
|
+
[name: string]: unknown;
|
|
2366
|
+
};
|
|
2367
|
+
content?: never;
|
|
2368
|
+
};
|
|
2369
|
+
/** @description No per-domain override to delete */
|
|
2370
|
+
404: {
|
|
2371
|
+
headers: {
|
|
2372
|
+
[name: string]: unknown;
|
|
2373
|
+
};
|
|
2374
|
+
content?: never;
|
|
2375
|
+
};
|
|
2376
|
+
};
|
|
2377
|
+
};
|
|
2378
|
+
DomainSmtpConfigController_verifySaved: {
|
|
2379
|
+
parameters: {
|
|
2380
|
+
query?: never;
|
|
2381
|
+
header?: never;
|
|
2382
|
+
path: {
|
|
2383
|
+
workspace_id: string;
|
|
2384
|
+
domain_id: string;
|
|
2385
|
+
};
|
|
2386
|
+
cookie?: never;
|
|
2387
|
+
};
|
|
2388
|
+
requestBody?: never;
|
|
2389
|
+
responses: {
|
|
2390
|
+
200: {
|
|
2391
|
+
headers: {
|
|
2392
|
+
[name: string]: unknown;
|
|
2393
|
+
};
|
|
2394
|
+
content: {
|
|
2395
|
+
"application/json": components["schemas"]["SmtpVerifyResultDto"];
|
|
2396
|
+
};
|
|
2397
|
+
};
|
|
2398
|
+
/** @description No per-domain override saved */
|
|
2399
|
+
404: {
|
|
2400
|
+
headers: {
|
|
2401
|
+
[name: string]: unknown;
|
|
2402
|
+
};
|
|
2403
|
+
content?: never;
|
|
2404
|
+
};
|
|
2405
|
+
};
|
|
2406
|
+
};
|
|
2407
|
+
DomainController_verifyDomain: {
|
|
2408
|
+
parameters: {
|
|
2409
|
+
query?: never;
|
|
2410
|
+
header?: never;
|
|
2411
|
+
path: {
|
|
2412
|
+
workspace_id: string;
|
|
2413
|
+
domain_id: string;
|
|
2414
|
+
};
|
|
2415
|
+
cookie?: never;
|
|
2416
|
+
};
|
|
2417
|
+
requestBody?: never;
|
|
2418
|
+
responses: {
|
|
2419
|
+
200: {
|
|
2420
|
+
headers: {
|
|
2421
|
+
[name: string]: unknown;
|
|
2422
|
+
};
|
|
2423
|
+
content: {
|
|
2424
|
+
"application/json": components["schemas"]["DomainDto"];
|
|
2425
|
+
};
|
|
2426
|
+
};
|
|
2427
|
+
/** @description Verification failed — one or more required records are still missing or wrong. */
|
|
2428
|
+
400: {
|
|
2429
|
+
headers: {
|
|
2430
|
+
[name: string]: unknown;
|
|
2431
|
+
};
|
|
2432
|
+
content?: never;
|
|
2433
|
+
};
|
|
2434
|
+
/** @description Domain not found in this workspace. */
|
|
2435
|
+
404: {
|
|
2436
|
+
headers: {
|
|
2437
|
+
[name: string]: unknown;
|
|
2438
|
+
};
|
|
2439
|
+
content?: never;
|
|
2440
|
+
};
|
|
2441
|
+
};
|
|
2442
|
+
};
|
|
2443
|
+
IntegrationsController_list: {
|
|
2444
|
+
parameters: {
|
|
2445
|
+
query?: never;
|
|
2446
|
+
header?: never;
|
|
2447
|
+
path: {
|
|
2448
|
+
workspace_id: string;
|
|
2449
|
+
};
|
|
2450
|
+
cookie?: never;
|
|
2451
|
+
};
|
|
2452
|
+
requestBody?: never;
|
|
2453
|
+
responses: {
|
|
2454
|
+
200: {
|
|
2455
|
+
headers: {
|
|
2456
|
+
[name: string]: unknown;
|
|
2457
|
+
};
|
|
2458
|
+
content: {
|
|
2459
|
+
"application/json": components["schemas"]["ListIntegrationsResponseDto"];
|
|
2460
|
+
};
|
|
2461
|
+
};
|
|
2462
|
+
};
|
|
2463
|
+
};
|
|
2464
|
+
GitHubOAuthController_connect: {
|
|
2465
|
+
parameters: {
|
|
2466
|
+
query?: never;
|
|
2467
|
+
header?: never;
|
|
2468
|
+
path: {
|
|
2469
|
+
workspace_id: string;
|
|
2470
|
+
};
|
|
2471
|
+
cookie?: never;
|
|
2472
|
+
};
|
|
2473
|
+
requestBody: {
|
|
2474
|
+
content: {
|
|
2475
|
+
"application/json": components["schemas"]["ConnectGitHubRequestDto"];
|
|
2476
|
+
};
|
|
2477
|
+
};
|
|
2478
|
+
responses: {
|
|
2479
|
+
200: {
|
|
2480
|
+
headers: {
|
|
2481
|
+
[name: string]: unknown;
|
|
2482
|
+
};
|
|
2483
|
+
content: {
|
|
2484
|
+
"application/json": components["schemas"]["ConnectGitHubResponseDto"];
|
|
2485
|
+
};
|
|
2486
|
+
};
|
|
2487
|
+
};
|
|
2488
|
+
};
|
|
2489
|
+
GitHubController_listRepos: {
|
|
2490
|
+
parameters: {
|
|
2491
|
+
query?: never;
|
|
2492
|
+
header?: never;
|
|
2493
|
+
path: {
|
|
2494
|
+
workspace_id: string;
|
|
2495
|
+
};
|
|
2496
|
+
cookie?: never;
|
|
2497
|
+
};
|
|
2498
|
+
requestBody?: never;
|
|
2499
|
+
responses: {
|
|
2500
|
+
200: {
|
|
2501
|
+
headers: {
|
|
2502
|
+
[name: string]: unknown;
|
|
2503
|
+
};
|
|
2504
|
+
content: {
|
|
2505
|
+
"application/json": components["schemas"]["GitHubRepoDto"][];
|
|
2506
|
+
};
|
|
2507
|
+
};
|
|
2508
|
+
};
|
|
2509
|
+
};
|
|
2510
|
+
GitHubController_listBranches: {
|
|
2511
|
+
parameters: {
|
|
2512
|
+
query?: never;
|
|
2513
|
+
header?: never;
|
|
2514
|
+
path: {
|
|
2515
|
+
workspace_id: string;
|
|
2516
|
+
owner: string;
|
|
2517
|
+
repo: string;
|
|
2518
|
+
};
|
|
2519
|
+
cookie?: never;
|
|
2520
|
+
};
|
|
2521
|
+
requestBody?: never;
|
|
2522
|
+
responses: {
|
|
2523
|
+
200: {
|
|
2524
|
+
headers: {
|
|
2525
|
+
[name: string]: unknown;
|
|
2526
|
+
};
|
|
2527
|
+
content: {
|
|
2528
|
+
"application/json": components["schemas"]["GitHubBranchDto"][];
|
|
2529
|
+
};
|
|
2530
|
+
};
|
|
2531
|
+
};
|
|
2532
|
+
};
|
|
2533
|
+
GitHubController_updateSettings: {
|
|
2534
|
+
parameters: {
|
|
2535
|
+
query?: never;
|
|
2536
|
+
header?: never;
|
|
2537
|
+
path: {
|
|
2538
|
+
workspace_id: string;
|
|
2539
|
+
};
|
|
2540
|
+
cookie?: never;
|
|
2541
|
+
};
|
|
2542
|
+
requestBody: {
|
|
2543
|
+
content: {
|
|
2544
|
+
"application/json": components["schemas"]["UpdateGitHubSettingsDto"];
|
|
2545
|
+
};
|
|
2546
|
+
};
|
|
2547
|
+
responses: {
|
|
2548
|
+
/** @description Saved. */
|
|
2549
|
+
204: {
|
|
2550
|
+
headers: {
|
|
2551
|
+
[name: string]: unknown;
|
|
2552
|
+
};
|
|
2553
|
+
content?: never;
|
|
2554
|
+
};
|
|
2555
|
+
};
|
|
2556
|
+
};
|
|
2557
|
+
GitHubController_startSync: {
|
|
2558
|
+
parameters: {
|
|
2559
|
+
query?: never;
|
|
2560
|
+
header?: never;
|
|
2561
|
+
path: {
|
|
2562
|
+
workspace_id: string;
|
|
2563
|
+
};
|
|
2564
|
+
cookie?: never;
|
|
2565
|
+
};
|
|
2566
|
+
requestBody?: never;
|
|
2567
|
+
responses: {
|
|
2568
|
+
202: {
|
|
2569
|
+
headers: {
|
|
2570
|
+
[name: string]: unknown;
|
|
2571
|
+
};
|
|
2572
|
+
content: {
|
|
2573
|
+
"application/json": components["schemas"]["StartSyncResponseDto"];
|
|
2574
|
+
};
|
|
2575
|
+
};
|
|
2576
|
+
};
|
|
2577
|
+
};
|
|
2578
|
+
GitHubController_getSyncStatus: {
|
|
2579
|
+
parameters: {
|
|
2580
|
+
query?: never;
|
|
2581
|
+
header?: never;
|
|
2582
|
+
path: {
|
|
2583
|
+
workspace_id: string;
|
|
2584
|
+
sync_id: string;
|
|
2585
|
+
};
|
|
2586
|
+
cookie?: never;
|
|
2587
|
+
};
|
|
2588
|
+
requestBody?: never;
|
|
2589
|
+
responses: {
|
|
2590
|
+
200: {
|
|
2591
|
+
headers: {
|
|
2592
|
+
[name: string]: unknown;
|
|
2593
|
+
};
|
|
2594
|
+
content: {
|
|
2595
|
+
"application/json": components["schemas"]["SyncStatusDto"];
|
|
2596
|
+
};
|
|
2597
|
+
};
|
|
2598
|
+
/** @description Run not found or expired. */
|
|
2599
|
+
404: {
|
|
2600
|
+
headers: {
|
|
2601
|
+
[name: string]: unknown;
|
|
2602
|
+
};
|
|
2603
|
+
content?: never;
|
|
2604
|
+
};
|
|
2605
|
+
};
|
|
2606
|
+
};
|
|
2607
|
+
IntegrationsController_get: {
|
|
2608
|
+
parameters: {
|
|
2609
|
+
query?: never;
|
|
2610
|
+
header?: never;
|
|
2611
|
+
path: {
|
|
2612
|
+
workspace_id: string;
|
|
2613
|
+
provider: string;
|
|
2614
|
+
};
|
|
2615
|
+
cookie?: never;
|
|
2616
|
+
};
|
|
2617
|
+
requestBody?: never;
|
|
2618
|
+
responses: {
|
|
2619
|
+
200: {
|
|
2620
|
+
headers: {
|
|
2621
|
+
[name: string]: unknown;
|
|
2622
|
+
};
|
|
2623
|
+
content: {
|
|
2624
|
+
"application/json": components["schemas"]["IntegrationDetailDto"];
|
|
2625
|
+
};
|
|
2626
|
+
};
|
|
2627
|
+
/** @description No integration of the requested provider for this workspace. */
|
|
2628
|
+
404: {
|
|
2629
|
+
headers: {
|
|
2630
|
+
[name: string]: unknown;
|
|
2631
|
+
};
|
|
2632
|
+
content?: never;
|
|
2633
|
+
};
|
|
2634
|
+
};
|
|
2635
|
+
};
|
|
2636
|
+
IntegrationsController_disconnect: {
|
|
2637
|
+
parameters: {
|
|
2638
|
+
query?: never;
|
|
2639
|
+
header?: {
|
|
2640
|
+
/** @description Optional client-supplied key to make the disconnect idempotent. */
|
|
2641
|
+
"Idempotency-Key"?: string;
|
|
2642
|
+
};
|
|
2643
|
+
path: {
|
|
2644
|
+
workspace_id: string;
|
|
2645
|
+
provider: string;
|
|
2646
|
+
};
|
|
2647
|
+
cookie?: never;
|
|
2648
|
+
};
|
|
2649
|
+
requestBody?: never;
|
|
2650
|
+
responses: {
|
|
2651
|
+
/** @description Disconnected. */
|
|
2652
|
+
204: {
|
|
2653
|
+
headers: {
|
|
2654
|
+
[name: string]: unknown;
|
|
2655
|
+
};
|
|
2656
|
+
content?: never;
|
|
2657
|
+
};
|
|
2658
|
+
};
|
|
2659
|
+
};
|
|
2660
|
+
MailboxController_listMailboxes: {
|
|
2661
|
+
parameters: {
|
|
2662
|
+
query?: {
|
|
2663
|
+
limit?: number;
|
|
2664
|
+
/** @description Opaque pagination cursor */
|
|
2665
|
+
cursor?: string;
|
|
2666
|
+
};
|
|
2667
|
+
header?: never;
|
|
2668
|
+
path: {
|
|
2669
|
+
workspace_id: string;
|
|
2670
|
+
};
|
|
2671
|
+
cookie?: never;
|
|
2672
|
+
};
|
|
2673
|
+
requestBody?: never;
|
|
2674
|
+
responses: {
|
|
2675
|
+
200: {
|
|
2676
|
+
headers: {
|
|
2677
|
+
[name: string]: unknown;
|
|
2678
|
+
};
|
|
2679
|
+
content: {
|
|
2680
|
+
"application/json": components["schemas"]["ListMailboxesResponseDto"];
|
|
2681
|
+
};
|
|
2682
|
+
};
|
|
2683
|
+
/** @description Caller lacks `mail.read` permission, or workspace has not enabled the `mail` service. */
|
|
2684
|
+
403: {
|
|
2685
|
+
headers: {
|
|
2686
|
+
[name: string]: unknown;
|
|
2687
|
+
};
|
|
2688
|
+
content?: never;
|
|
2689
|
+
};
|
|
2690
|
+
};
|
|
2691
|
+
};
|
|
2692
|
+
MailboxController_createMailbox: {
|
|
2693
|
+
parameters: {
|
|
2694
|
+
query?: never;
|
|
2695
|
+
header?: never;
|
|
2696
|
+
path: {
|
|
2697
|
+
workspace_id: string;
|
|
2698
|
+
};
|
|
2699
|
+
cookie?: never;
|
|
2700
|
+
};
|
|
2701
|
+
requestBody: {
|
|
2702
|
+
content: {
|
|
2703
|
+
"application/json": components["schemas"]["CreateMailboxDto"];
|
|
2704
|
+
};
|
|
2705
|
+
};
|
|
2706
|
+
responses: {
|
|
2707
|
+
201: {
|
|
2708
|
+
headers: {
|
|
2709
|
+
[name: string]: unknown;
|
|
2710
|
+
};
|
|
2711
|
+
content: {
|
|
2712
|
+
"application/json": components["schemas"]["MailboxDto"];
|
|
2713
|
+
};
|
|
2714
|
+
};
|
|
2715
|
+
/** @description Validation failure (invalid local part, retention out of range). */
|
|
2716
|
+
400: {
|
|
2717
|
+
headers: {
|
|
2718
|
+
[name: string]: unknown;
|
|
2719
|
+
};
|
|
2720
|
+
content?: never;
|
|
2721
|
+
};
|
|
2722
|
+
/** @description Caller lacks `mail.create` permission, or workspace has not enabled the `mail` service. */
|
|
2723
|
+
403: {
|
|
2724
|
+
headers: {
|
|
2725
|
+
[name: string]: unknown;
|
|
2726
|
+
};
|
|
2727
|
+
content?: never;
|
|
2728
|
+
};
|
|
2729
|
+
/** @description Domain not found in this workspace. */
|
|
2730
|
+
404: {
|
|
2731
|
+
headers: {
|
|
2732
|
+
[name: string]: unknown;
|
|
2733
|
+
};
|
|
2734
|
+
content?: never;
|
|
2735
|
+
};
|
|
2736
|
+
/** @description Mailbox local-part already exists on this domain, or the domain is not yet verified. */
|
|
2737
|
+
409: {
|
|
2738
|
+
headers: {
|
|
2739
|
+
[name: string]: unknown;
|
|
2740
|
+
};
|
|
2741
|
+
content?: never;
|
|
2742
|
+
};
|
|
2743
|
+
/** @description Local part or retention rejected by service-layer validation. */
|
|
2744
|
+
422: {
|
|
2745
|
+
headers: {
|
|
2746
|
+
[name: string]: unknown;
|
|
2747
|
+
};
|
|
2748
|
+
content?: never;
|
|
2749
|
+
};
|
|
2750
|
+
};
|
|
2751
|
+
};
|
|
2752
|
+
MailboxController_getMailbox: {
|
|
2753
|
+
parameters: {
|
|
2754
|
+
query?: never;
|
|
2755
|
+
header?: never;
|
|
2756
|
+
path: {
|
|
2757
|
+
workspace_id: string;
|
|
2758
|
+
id: string;
|
|
2759
|
+
};
|
|
2760
|
+
cookie?: never;
|
|
2761
|
+
};
|
|
2762
|
+
requestBody?: never;
|
|
2763
|
+
responses: {
|
|
2764
|
+
200: {
|
|
2765
|
+
headers: {
|
|
2766
|
+
[name: string]: unknown;
|
|
2767
|
+
};
|
|
2768
|
+
content: {
|
|
2769
|
+
"application/json": components["schemas"]["MailboxDto"];
|
|
2770
|
+
};
|
|
2771
|
+
};
|
|
2772
|
+
/** @description Mailbox not found in this workspace. */
|
|
2773
|
+
404: {
|
|
2774
|
+
headers: {
|
|
2775
|
+
[name: string]: unknown;
|
|
2776
|
+
};
|
|
2777
|
+
content?: never;
|
|
2778
|
+
};
|
|
2779
|
+
};
|
|
2780
|
+
};
|
|
2781
|
+
MailboxController_deleteMailbox: {
|
|
2782
|
+
parameters: {
|
|
2783
|
+
query?: never;
|
|
2784
|
+
header?: never;
|
|
2785
|
+
path: {
|
|
2786
|
+
workspace_id: string;
|
|
2787
|
+
id: string;
|
|
2788
|
+
};
|
|
2789
|
+
cookie?: never;
|
|
2790
|
+
};
|
|
2791
|
+
requestBody?: never;
|
|
2792
|
+
responses: {
|
|
2793
|
+
/** @description Mailbox soft-deleted. */
|
|
2794
|
+
204: {
|
|
2795
|
+
headers: {
|
|
2796
|
+
[name: string]: unknown;
|
|
2797
|
+
};
|
|
2798
|
+
content?: never;
|
|
2799
|
+
};
|
|
2800
|
+
/** @description Mailbox not found in this workspace. */
|
|
2801
|
+
404: {
|
|
2802
|
+
headers: {
|
|
2803
|
+
[name: string]: unknown;
|
|
2804
|
+
};
|
|
2805
|
+
content?: never;
|
|
2806
|
+
};
|
|
2807
|
+
};
|
|
2808
|
+
};
|
|
2809
|
+
MailboxController_updateMailbox: {
|
|
2810
|
+
parameters: {
|
|
2811
|
+
query?: never;
|
|
2812
|
+
header?: never;
|
|
2813
|
+
path: {
|
|
2814
|
+
workspace_id: string;
|
|
2815
|
+
id: string;
|
|
2816
|
+
};
|
|
2817
|
+
cookie?: never;
|
|
2818
|
+
};
|
|
2819
|
+
requestBody: {
|
|
2820
|
+
content: {
|
|
2821
|
+
"application/json": components["schemas"]["UpdateMailboxDto"];
|
|
2822
|
+
};
|
|
2823
|
+
};
|
|
2824
|
+
responses: {
|
|
2825
|
+
200: {
|
|
2826
|
+
headers: {
|
|
2827
|
+
[name: string]: unknown;
|
|
2828
|
+
};
|
|
2829
|
+
content: {
|
|
2830
|
+
"application/json": components["schemas"]["MailboxDto"];
|
|
2831
|
+
};
|
|
2832
|
+
};
|
|
2833
|
+
/** @description Validation failure or invalid status transition. */
|
|
2834
|
+
400: {
|
|
2835
|
+
headers: {
|
|
2836
|
+
[name: string]: unknown;
|
|
2837
|
+
};
|
|
2838
|
+
content?: never;
|
|
2839
|
+
};
|
|
2840
|
+
/** @description Mailbox not found in this workspace. */
|
|
2841
|
+
404: {
|
|
2842
|
+
headers: {
|
|
2843
|
+
[name: string]: unknown;
|
|
2844
|
+
};
|
|
2845
|
+
content?: never;
|
|
2846
|
+
};
|
|
2847
|
+
/** @description Retention or status rejected by service-layer validation. */
|
|
2848
|
+
422: {
|
|
2849
|
+
headers: {
|
|
2850
|
+
[name: string]: unknown;
|
|
2851
|
+
};
|
|
2852
|
+
content?: never;
|
|
2853
|
+
};
|
|
2854
|
+
};
|
|
2855
|
+
};
|
|
2856
|
+
MessageController_listMessages: {
|
|
2857
|
+
parameters: {
|
|
2858
|
+
query?: {
|
|
2859
|
+
/** @description Filter by From address (substring match) */
|
|
2860
|
+
from?: string;
|
|
2861
|
+
/** @description Filter by subject (substring match) */
|
|
2862
|
+
subject?: string;
|
|
2863
|
+
/** @description Only include messages received on or after this ISO date */
|
|
2864
|
+
since?: string;
|
|
2865
|
+
/** @description Only include messages received on or before this ISO date */
|
|
2866
|
+
until?: string;
|
|
2867
|
+
/** @description Filter to only unread (true) or only read (false) messages */
|
|
2868
|
+
unread?: boolean;
|
|
2869
|
+
limit?: number;
|
|
2870
|
+
/** @description Opaque pagination cursor */
|
|
2871
|
+
cursor?: string;
|
|
2872
|
+
};
|
|
2873
|
+
header?: never;
|
|
2874
|
+
path: {
|
|
2875
|
+
workspace_id: string;
|
|
2876
|
+
id: string;
|
|
2877
|
+
};
|
|
2878
|
+
cookie?: never;
|
|
2879
|
+
};
|
|
2880
|
+
requestBody?: never;
|
|
2881
|
+
responses: {
|
|
2882
|
+
200: {
|
|
2883
|
+
headers: {
|
|
2884
|
+
[name: string]: unknown;
|
|
2885
|
+
};
|
|
2886
|
+
content: {
|
|
2887
|
+
"application/json": components["schemas"]["ListMessagesResponseDto"];
|
|
2888
|
+
};
|
|
2889
|
+
};
|
|
2890
|
+
/** @description Invalid filter or cursor. */
|
|
2891
|
+
400: {
|
|
2892
|
+
headers: {
|
|
2893
|
+
[name: string]: unknown;
|
|
2894
|
+
};
|
|
2895
|
+
content?: never;
|
|
2896
|
+
};
|
|
2897
|
+
/** @description Mailbox not found in this workspace. */
|
|
2898
|
+
404: {
|
|
2899
|
+
headers: {
|
|
2900
|
+
[name: string]: unknown;
|
|
2901
|
+
};
|
|
2902
|
+
content?: never;
|
|
2903
|
+
};
|
|
2904
|
+
};
|
|
2905
|
+
};
|
|
2906
|
+
MessageController_getMessage: {
|
|
2907
|
+
parameters: {
|
|
2908
|
+
query?: never;
|
|
2909
|
+
header?: never;
|
|
2910
|
+
path: {
|
|
2911
|
+
workspace_id: string;
|
|
2912
|
+
id: string;
|
|
2913
|
+
mid: string;
|
|
2914
|
+
};
|
|
2915
|
+
cookie?: never;
|
|
2916
|
+
};
|
|
2917
|
+
requestBody?: never;
|
|
2918
|
+
responses: {
|
|
2919
|
+
200: {
|
|
2920
|
+
headers: {
|
|
2921
|
+
[name: string]: unknown;
|
|
2922
|
+
};
|
|
2923
|
+
content: {
|
|
2924
|
+
"application/json": components["schemas"]["MessageDetailDto"];
|
|
2925
|
+
};
|
|
2926
|
+
};
|
|
2927
|
+
/** @description Message not found */
|
|
2928
|
+
404: {
|
|
2929
|
+
headers: {
|
|
2930
|
+
[name: string]: unknown;
|
|
2931
|
+
};
|
|
2932
|
+
content?: never;
|
|
2933
|
+
};
|
|
2934
|
+
};
|
|
2935
|
+
};
|
|
2936
|
+
MessageController_deleteMessage: {
|
|
2937
|
+
parameters: {
|
|
2938
|
+
query?: never;
|
|
2939
|
+
header?: never;
|
|
2940
|
+
path: {
|
|
2941
|
+
workspace_id: string;
|
|
2942
|
+
id: string;
|
|
2943
|
+
mid: string;
|
|
2944
|
+
};
|
|
2945
|
+
cookie?: never;
|
|
2946
|
+
};
|
|
2947
|
+
requestBody?: never;
|
|
2948
|
+
responses: {
|
|
2949
|
+
/** @description Message soft-deleted */
|
|
2950
|
+
204: {
|
|
2951
|
+
headers: {
|
|
2952
|
+
[name: string]: unknown;
|
|
2953
|
+
};
|
|
2954
|
+
content?: never;
|
|
2955
|
+
};
|
|
2956
|
+
/** @description Message not found */
|
|
2957
|
+
404: {
|
|
2958
|
+
headers: {
|
|
2959
|
+
[name: string]: unknown;
|
|
2960
|
+
};
|
|
2961
|
+
content?: never;
|
|
2962
|
+
};
|
|
2963
|
+
};
|
|
2964
|
+
};
|
|
2965
|
+
MessageController_getAttachment: {
|
|
2966
|
+
parameters: {
|
|
2967
|
+
query?: never;
|
|
2968
|
+
header?: never;
|
|
2969
|
+
path: {
|
|
2970
|
+
workspace_id: string;
|
|
2971
|
+
id: string;
|
|
2972
|
+
mid: string;
|
|
2973
|
+
position: number;
|
|
2974
|
+
};
|
|
2975
|
+
cookie?: never;
|
|
2976
|
+
};
|
|
2977
|
+
requestBody?: never;
|
|
2978
|
+
responses: {
|
|
2979
|
+
/** @description Attachment stream */
|
|
2980
|
+
200: {
|
|
2981
|
+
headers: {
|
|
2982
|
+
[name: string]: unknown;
|
|
2983
|
+
};
|
|
2984
|
+
content?: never;
|
|
2985
|
+
};
|
|
2986
|
+
/** @description Attachment not found */
|
|
2987
|
+
404: {
|
|
2988
|
+
headers: {
|
|
2989
|
+
[name: string]: unknown;
|
|
2990
|
+
};
|
|
2991
|
+
content?: never;
|
|
2992
|
+
};
|
|
2993
|
+
};
|
|
2994
|
+
};
|
|
2995
|
+
MessageController_getRaw: {
|
|
2996
|
+
parameters: {
|
|
2997
|
+
query?: never;
|
|
2998
|
+
header?: never;
|
|
2999
|
+
path: {
|
|
3000
|
+
workspace_id: string;
|
|
3001
|
+
id: string;
|
|
3002
|
+
mid: string;
|
|
3003
|
+
};
|
|
3004
|
+
cookie?: never;
|
|
3005
|
+
};
|
|
3006
|
+
requestBody?: never;
|
|
3007
|
+
responses: {
|
|
3008
|
+
/** @description Raw message stream */
|
|
3009
|
+
200: {
|
|
3010
|
+
headers: {
|
|
3011
|
+
[name: string]: unknown;
|
|
3012
|
+
};
|
|
3013
|
+
content?: never;
|
|
3014
|
+
};
|
|
3015
|
+
/** @description Message not found */
|
|
3016
|
+
404: {
|
|
3017
|
+
headers: {
|
|
3018
|
+
[name: string]: unknown;
|
|
3019
|
+
};
|
|
3020
|
+
content?: never;
|
|
3021
|
+
};
|
|
3022
|
+
};
|
|
3023
|
+
};
|
|
3024
|
+
MessageController_markRead: {
|
|
3025
|
+
parameters: {
|
|
3026
|
+
query?: never;
|
|
3027
|
+
header?: never;
|
|
3028
|
+
path: {
|
|
3029
|
+
workspace_id: string;
|
|
3030
|
+
id: string;
|
|
3031
|
+
mid: string;
|
|
3032
|
+
};
|
|
3033
|
+
cookie?: never;
|
|
3034
|
+
};
|
|
3035
|
+
requestBody?: never;
|
|
3036
|
+
responses: {
|
|
3037
|
+
/** @description Marked read */
|
|
3038
|
+
204: {
|
|
3039
|
+
headers: {
|
|
3040
|
+
[name: string]: unknown;
|
|
3041
|
+
};
|
|
3042
|
+
content?: never;
|
|
3043
|
+
};
|
|
3044
|
+
/** @description Message not found */
|
|
3045
|
+
404: {
|
|
3046
|
+
headers: {
|
|
3047
|
+
[name: string]: unknown;
|
|
3048
|
+
};
|
|
3049
|
+
content?: never;
|
|
3050
|
+
};
|
|
3051
|
+
};
|
|
3052
|
+
};
|
|
3053
|
+
OutboundMessageController_list: {
|
|
3054
|
+
parameters: {
|
|
3055
|
+
query?: {
|
|
3056
|
+
/** @description Page size, 1–100 */
|
|
3057
|
+
limit?: number;
|
|
3058
|
+
/** @description Opaque cursor from previous page. */
|
|
3059
|
+
cursor?: string;
|
|
3060
|
+
/** @description Filter by exact recipient address. */
|
|
3061
|
+
recipient?: string;
|
|
3062
|
+
/** @description Filter by template name. */
|
|
3063
|
+
template?: string;
|
|
3064
|
+
/** @description Filter by status. */
|
|
3065
|
+
status?: "queued" | "sent" | "delivered" | "bounced" | "complained" | "failed" | "suppressed";
|
|
3066
|
+
/** @description Substring filter on subject (case-insensitive, max 200 chars). */
|
|
3067
|
+
subject_contains?: string;
|
|
3068
|
+
};
|
|
3069
|
+
header?: never;
|
|
3070
|
+
path: {
|
|
3071
|
+
workspace_id: string;
|
|
3072
|
+
};
|
|
3073
|
+
cookie?: never;
|
|
3074
|
+
};
|
|
3075
|
+
requestBody?: never;
|
|
3076
|
+
responses: {
|
|
3077
|
+
200: {
|
|
3078
|
+
headers: {
|
|
3079
|
+
[name: string]: unknown;
|
|
3080
|
+
};
|
|
3081
|
+
content: {
|
|
3082
|
+
"application/json": components["schemas"]["ListOutboundMessagesResponseDto"];
|
|
3083
|
+
};
|
|
3084
|
+
};
|
|
3085
|
+
/** @description Invalid filter or cursor. */
|
|
3086
|
+
400: {
|
|
3087
|
+
headers: {
|
|
3088
|
+
[name: string]: unknown;
|
|
3089
|
+
};
|
|
3090
|
+
content?: never;
|
|
3091
|
+
};
|
|
3092
|
+
};
|
|
3093
|
+
};
|
|
3094
|
+
OutboundMessageController_deleteByRecipient: {
|
|
3095
|
+
parameters: {
|
|
3096
|
+
query: {
|
|
3097
|
+
recipient: string;
|
|
3098
|
+
};
|
|
3099
|
+
header?: never;
|
|
3100
|
+
path: {
|
|
3101
|
+
workspace_id: string;
|
|
3102
|
+
};
|
|
3103
|
+
cookie?: never;
|
|
3104
|
+
};
|
|
3105
|
+
requestBody?: never;
|
|
3106
|
+
responses: {
|
|
3107
|
+
200: {
|
|
3108
|
+
headers: {
|
|
3109
|
+
[name: string]: unknown;
|
|
3110
|
+
};
|
|
3111
|
+
content: {
|
|
3112
|
+
"application/json": components["schemas"]["DeleteByRecipientResponseDto"];
|
|
3113
|
+
};
|
|
3114
|
+
};
|
|
3115
|
+
/** @description Missing or invalid recipient. */
|
|
3116
|
+
400: {
|
|
3117
|
+
headers: {
|
|
3118
|
+
[name: string]: unknown;
|
|
3119
|
+
};
|
|
3120
|
+
content?: never;
|
|
3121
|
+
};
|
|
3122
|
+
};
|
|
3123
|
+
};
|
|
3124
|
+
OutboundMessageController_exportCsv: {
|
|
3125
|
+
parameters: {
|
|
3126
|
+
query?: {
|
|
3127
|
+
/** @description Filter by exact recipient address. */
|
|
3128
|
+
recipient?: string;
|
|
3129
|
+
/** @description Filter by template name. */
|
|
3130
|
+
template?: string;
|
|
3131
|
+
/** @description Filter by status. */
|
|
3132
|
+
status?: "queued" | "sent" | "delivered" | "bounced" | "complained" | "failed" | "suppressed";
|
|
3133
|
+
/** @description Substring filter on subject (case-insensitive, max 200 chars). */
|
|
3134
|
+
subject_contains?: string;
|
|
3135
|
+
};
|
|
3136
|
+
header?: never;
|
|
3137
|
+
path: {
|
|
3138
|
+
workspace_id: string;
|
|
3139
|
+
};
|
|
3140
|
+
cookie?: never;
|
|
3141
|
+
};
|
|
3142
|
+
requestBody?: never;
|
|
3143
|
+
responses: {
|
|
3144
|
+
/** @description text/csv stream with one header row + one row per message. Content-Disposition: attachment. */
|
|
3145
|
+
200: {
|
|
3146
|
+
headers: {
|
|
3147
|
+
[name: string]: unknown;
|
|
3148
|
+
};
|
|
3149
|
+
content?: never;
|
|
3150
|
+
};
|
|
3151
|
+
/** @description Another export is already running, or this workspace has hit the hourly export cap. */
|
|
3152
|
+
429: {
|
|
3153
|
+
headers: {
|
|
3154
|
+
[name: string]: unknown;
|
|
3155
|
+
};
|
|
3156
|
+
content?: never;
|
|
3157
|
+
};
|
|
3158
|
+
};
|
|
3159
|
+
};
|
|
3160
|
+
OutboundMessageController_getSettings: {
|
|
3161
|
+
parameters: {
|
|
3162
|
+
query?: never;
|
|
3163
|
+
header?: never;
|
|
3164
|
+
path: {
|
|
3165
|
+
workspace_id: string;
|
|
3166
|
+
};
|
|
3167
|
+
cookie?: never;
|
|
3168
|
+
};
|
|
3169
|
+
requestBody?: never;
|
|
3170
|
+
responses: {
|
|
3171
|
+
200: {
|
|
3172
|
+
headers: {
|
|
3173
|
+
[name: string]: unknown;
|
|
3174
|
+
};
|
|
3175
|
+
content: {
|
|
3176
|
+
"application/json": components["schemas"]["OutboundMessageSettingsDto"];
|
|
3177
|
+
};
|
|
3178
|
+
};
|
|
3179
|
+
};
|
|
3180
|
+
};
|
|
3181
|
+
OutboundMessageController_updateSettings: {
|
|
3182
|
+
parameters: {
|
|
3183
|
+
query?: never;
|
|
3184
|
+
header?: never;
|
|
3185
|
+
path: {
|
|
3186
|
+
workspace_id: string;
|
|
3187
|
+
};
|
|
3188
|
+
cookie?: never;
|
|
3189
|
+
};
|
|
3190
|
+
requestBody: {
|
|
3191
|
+
content: {
|
|
3192
|
+
"application/json": components["schemas"]["UpdateOutboundMessageSettingsDto"];
|
|
3193
|
+
};
|
|
3194
|
+
};
|
|
3195
|
+
responses: {
|
|
3196
|
+
200: {
|
|
3197
|
+
headers: {
|
|
3198
|
+
[name: string]: unknown;
|
|
3199
|
+
};
|
|
3200
|
+
content: {
|
|
3201
|
+
"application/json": components["schemas"]["OutboundMessageSettingsDto"];
|
|
3202
|
+
};
|
|
3203
|
+
};
|
|
3204
|
+
/** @description Invalid payload. */
|
|
3205
|
+
400: {
|
|
3206
|
+
headers: {
|
|
3207
|
+
[name: string]: unknown;
|
|
3208
|
+
};
|
|
3209
|
+
content?: never;
|
|
3210
|
+
};
|
|
3211
|
+
};
|
|
3212
|
+
};
|
|
3213
|
+
MessageTimelineController_getTimeline: {
|
|
3214
|
+
parameters: {
|
|
3215
|
+
query: {
|
|
3216
|
+
/** @description Bucket size. Only `day` is supported today; the param is here so future hour/week additions don’t break clients. */
|
|
3217
|
+
granularity: "day";
|
|
3218
|
+
/** @description Inclusive start of the window (ISO-8601). Treated in UTC for bucket alignment. */
|
|
3219
|
+
since: string;
|
|
3220
|
+
/** @description Exclusive end of the window (ISO-8601). */
|
|
3221
|
+
until: string;
|
|
3222
|
+
/** @description Which counter to bucket. `sent` (default) reads from received messages; `bounced` reads from MX-time rejections matching this workspace's mailbox addresses. */
|
|
3223
|
+
metric?: "sent" | "bounced";
|
|
3224
|
+
};
|
|
3225
|
+
header?: never;
|
|
3226
|
+
path: {
|
|
3227
|
+
workspace_id: string;
|
|
3228
|
+
};
|
|
3229
|
+
cookie?: never;
|
|
3230
|
+
};
|
|
3231
|
+
requestBody?: never;
|
|
3232
|
+
responses: {
|
|
3233
|
+
200: {
|
|
3234
|
+
headers: {
|
|
3235
|
+
[name: string]: unknown;
|
|
3236
|
+
};
|
|
3237
|
+
content: {
|
|
3238
|
+
"application/json": components["schemas"]["MessageTimelineResponseDto"];
|
|
3239
|
+
};
|
|
3240
|
+
};
|
|
3241
|
+
};
|
|
3242
|
+
};
|
|
3243
|
+
OutboundMessageController_get: {
|
|
3244
|
+
parameters: {
|
|
3245
|
+
query?: never;
|
|
3246
|
+
header?: never;
|
|
3247
|
+
path: {
|
|
3248
|
+
workspace_id: string;
|
|
3249
|
+
id: string;
|
|
3250
|
+
};
|
|
3251
|
+
cookie?: never;
|
|
3252
|
+
};
|
|
3253
|
+
requestBody?: never;
|
|
3254
|
+
responses: {
|
|
3255
|
+
200: {
|
|
3256
|
+
headers: {
|
|
3257
|
+
[name: string]: unknown;
|
|
3258
|
+
};
|
|
3259
|
+
content: {
|
|
3260
|
+
"application/json": components["schemas"]["OutboundMessageDto"];
|
|
3261
|
+
};
|
|
3262
|
+
};
|
|
3263
|
+
/** @description Not found. */
|
|
3264
|
+
404: {
|
|
3265
|
+
headers: {
|
|
3266
|
+
[name: string]: unknown;
|
|
3267
|
+
};
|
|
3268
|
+
content?: never;
|
|
3269
|
+
};
|
|
3270
|
+
};
|
|
3271
|
+
};
|
|
3272
|
+
OutboundMessageController_getBody: {
|
|
3273
|
+
parameters: {
|
|
3274
|
+
query?: never;
|
|
3275
|
+
header?: never;
|
|
3276
|
+
path: {
|
|
3277
|
+
workspace_id: string;
|
|
3278
|
+
id: string;
|
|
3279
|
+
};
|
|
3280
|
+
cookie?: never;
|
|
3281
|
+
};
|
|
3282
|
+
requestBody?: never;
|
|
3283
|
+
responses: {
|
|
3284
|
+
200: {
|
|
3285
|
+
headers: {
|
|
3286
|
+
[name: string]: unknown;
|
|
3287
|
+
};
|
|
3288
|
+
content: {
|
|
3289
|
+
"application/json": components["schemas"]["OutboundMessageWithBodyDto"];
|
|
3290
|
+
};
|
|
3291
|
+
};
|
|
3292
|
+
/** @description Not found. */
|
|
3293
|
+
404: {
|
|
3294
|
+
headers: {
|
|
3295
|
+
[name: string]: unknown;
|
|
3296
|
+
};
|
|
3297
|
+
content?: never;
|
|
3298
|
+
};
|
|
3299
|
+
};
|
|
3300
|
+
};
|
|
3301
|
+
SmtpConfigController_get: {
|
|
3302
|
+
parameters: {
|
|
3303
|
+
query?: never;
|
|
3304
|
+
header?: never;
|
|
3305
|
+
path: {
|
|
3306
|
+
workspace_id: string;
|
|
3307
|
+
};
|
|
3308
|
+
cookie?: never;
|
|
3309
|
+
};
|
|
3310
|
+
requestBody?: never;
|
|
3311
|
+
responses: {
|
|
3312
|
+
200: {
|
|
3313
|
+
headers: {
|
|
3314
|
+
[name: string]: unknown;
|
|
3315
|
+
};
|
|
3316
|
+
content: {
|
|
3317
|
+
"application/json": components["schemas"]["GetSmtpConfigResponseDto"];
|
|
3318
|
+
};
|
|
3319
|
+
};
|
|
3320
|
+
};
|
|
3321
|
+
};
|
|
3322
|
+
SmtpConfigController_upsert: {
|
|
3323
|
+
parameters: {
|
|
3324
|
+
query?: never;
|
|
3325
|
+
header?: never;
|
|
3326
|
+
path: {
|
|
3327
|
+
workspace_id: string;
|
|
3328
|
+
};
|
|
3329
|
+
cookie?: never;
|
|
3330
|
+
};
|
|
3331
|
+
requestBody: {
|
|
3332
|
+
content: {
|
|
3333
|
+
"application/json": components["schemas"]["UpsertSmtpConfigDto"];
|
|
3334
|
+
};
|
|
3335
|
+
};
|
|
3336
|
+
responses: {
|
|
3337
|
+
200: {
|
|
3338
|
+
headers: {
|
|
3339
|
+
[name: string]: unknown;
|
|
3340
|
+
};
|
|
3341
|
+
content: {
|
|
3342
|
+
"application/json": components["schemas"]["SmtpConfigDto"];
|
|
3343
|
+
};
|
|
3344
|
+
};
|
|
3345
|
+
/** @description Validation failure or username/password mismatch. */
|
|
3346
|
+
400: {
|
|
3347
|
+
headers: {
|
|
3348
|
+
[name: string]: unknown;
|
|
3349
|
+
};
|
|
3350
|
+
content?: never;
|
|
3351
|
+
};
|
|
3352
|
+
};
|
|
3353
|
+
};
|
|
3354
|
+
SmtpConfigController_delete: {
|
|
3355
|
+
parameters: {
|
|
3356
|
+
query?: never;
|
|
3357
|
+
header?: never;
|
|
3358
|
+
path: {
|
|
3359
|
+
workspace_id: string;
|
|
3360
|
+
};
|
|
3361
|
+
cookie?: never;
|
|
3362
|
+
};
|
|
3363
|
+
requestBody?: never;
|
|
3364
|
+
responses: {
|
|
3365
|
+
/** @description Workspace-default SMTP config deleted. */
|
|
3366
|
+
204: {
|
|
3367
|
+
headers: {
|
|
3368
|
+
[name: string]: unknown;
|
|
3369
|
+
};
|
|
3370
|
+
content?: never;
|
|
3371
|
+
};
|
|
3372
|
+
/** @description No SMTP config to delete */
|
|
3373
|
+
404: {
|
|
3374
|
+
headers: {
|
|
3375
|
+
[name: string]: unknown;
|
|
3376
|
+
};
|
|
3377
|
+
content?: never;
|
|
3378
|
+
};
|
|
3379
|
+
};
|
|
3380
|
+
};
|
|
3381
|
+
SmtpConfigController_verifyTransient: {
|
|
3382
|
+
parameters: {
|
|
3383
|
+
query?: never;
|
|
3384
|
+
header?: never;
|
|
3385
|
+
path: {
|
|
3386
|
+
workspace_id: string;
|
|
3387
|
+
};
|
|
3388
|
+
cookie?: never;
|
|
3389
|
+
};
|
|
3390
|
+
requestBody: {
|
|
3391
|
+
content: {
|
|
3392
|
+
"application/json": components["schemas"]["VerifySmtpConfigDto"];
|
|
3393
|
+
};
|
|
3394
|
+
};
|
|
3395
|
+
responses: {
|
|
3396
|
+
200: {
|
|
3397
|
+
headers: {
|
|
3398
|
+
[name: string]: unknown;
|
|
3399
|
+
};
|
|
3400
|
+
content: {
|
|
3401
|
+
"application/json": components["schemas"]["SmtpVerifyResultDto"];
|
|
3402
|
+
};
|
|
3403
|
+
};
|
|
3404
|
+
/** @description Validation failure on the request body. */
|
|
3405
|
+
400: {
|
|
3406
|
+
headers: {
|
|
3407
|
+
[name: string]: unknown;
|
|
3408
|
+
};
|
|
3409
|
+
content?: never;
|
|
3410
|
+
};
|
|
3411
|
+
};
|
|
3412
|
+
};
|
|
3413
|
+
SmtpConfigController_verifySaved: {
|
|
3414
|
+
parameters: {
|
|
3415
|
+
query?: never;
|
|
3416
|
+
header?: never;
|
|
3417
|
+
path: {
|
|
3418
|
+
workspace_id: string;
|
|
3419
|
+
};
|
|
3420
|
+
cookie?: never;
|
|
3421
|
+
};
|
|
3422
|
+
requestBody?: never;
|
|
3423
|
+
responses: {
|
|
3424
|
+
200: {
|
|
3425
|
+
headers: {
|
|
3426
|
+
[name: string]: unknown;
|
|
3427
|
+
};
|
|
3428
|
+
content: {
|
|
3429
|
+
"application/json": components["schemas"]["SmtpVerifyResultDto"];
|
|
3430
|
+
};
|
|
3431
|
+
};
|
|
3432
|
+
/** @description No SMTP config saved */
|
|
3433
|
+
404: {
|
|
3434
|
+
headers: {
|
|
3435
|
+
[name: string]: unknown;
|
|
3436
|
+
};
|
|
3437
|
+
content?: never;
|
|
3438
|
+
};
|
|
3439
|
+
};
|
|
3440
|
+
};
|
|
3441
|
+
SmtpConfigListController_list: {
|
|
3442
|
+
parameters: {
|
|
3443
|
+
query?: never;
|
|
3444
|
+
header?: never;
|
|
3445
|
+
path: {
|
|
3446
|
+
workspace_id: string;
|
|
3447
|
+
};
|
|
3448
|
+
cookie?: never;
|
|
3449
|
+
};
|
|
3450
|
+
requestBody?: never;
|
|
3451
|
+
responses: {
|
|
3452
|
+
200: {
|
|
3453
|
+
headers: {
|
|
3454
|
+
[name: string]: unknown;
|
|
3455
|
+
};
|
|
3456
|
+
content: {
|
|
3457
|
+
"application/json": components["schemas"]["ListSmtpConfigsResponseDto"];
|
|
3458
|
+
};
|
|
3459
|
+
};
|
|
3460
|
+
};
|
|
3461
|
+
};
|
|
3462
|
+
SuppressionController_list: {
|
|
3463
|
+
parameters: {
|
|
3464
|
+
query?: never;
|
|
3465
|
+
header?: never;
|
|
3466
|
+
path: {
|
|
3467
|
+
workspace_id: string;
|
|
3468
|
+
};
|
|
3469
|
+
cookie?: never;
|
|
3470
|
+
};
|
|
3471
|
+
requestBody?: never;
|
|
3472
|
+
responses: {
|
|
3473
|
+
200: {
|
|
3474
|
+
headers: {
|
|
3475
|
+
[name: string]: unknown;
|
|
3476
|
+
};
|
|
3477
|
+
content: {
|
|
3478
|
+
"application/json": components["schemas"]["ListSuppressionResponseDto"];
|
|
3479
|
+
};
|
|
3480
|
+
};
|
|
3481
|
+
};
|
|
3482
|
+
};
|
|
3483
|
+
SuppressionController_add: {
|
|
3484
|
+
parameters: {
|
|
3485
|
+
query?: never;
|
|
3486
|
+
header?: never;
|
|
3487
|
+
path: {
|
|
3488
|
+
workspace_id: string;
|
|
3489
|
+
};
|
|
3490
|
+
cookie?: never;
|
|
3491
|
+
};
|
|
3492
|
+
requestBody: {
|
|
3493
|
+
content: {
|
|
3494
|
+
"application/json": components["schemas"]["AddSuppressionDto"];
|
|
3495
|
+
};
|
|
3496
|
+
};
|
|
3497
|
+
responses: {
|
|
3498
|
+
201: {
|
|
3499
|
+
headers: {
|
|
3500
|
+
[name: string]: unknown;
|
|
3501
|
+
};
|
|
3502
|
+
content: {
|
|
3503
|
+
"application/json": components["schemas"]["SuppressionEntryDto"];
|
|
3504
|
+
};
|
|
3505
|
+
};
|
|
3506
|
+
/** @description Invalid payload (missing or malformed email). */
|
|
3507
|
+
400: {
|
|
3508
|
+
headers: {
|
|
3509
|
+
[name: string]: unknown;
|
|
3510
|
+
};
|
|
3511
|
+
content?: never;
|
|
3512
|
+
};
|
|
3513
|
+
/** @description Email address rejected as invalid by the service layer. */
|
|
3514
|
+
422: {
|
|
3515
|
+
headers: {
|
|
3516
|
+
[name: string]: unknown;
|
|
3517
|
+
};
|
|
3518
|
+
content?: never;
|
|
3519
|
+
};
|
|
3520
|
+
};
|
|
3521
|
+
};
|
|
3522
|
+
SuppressionController_remove: {
|
|
3523
|
+
parameters: {
|
|
3524
|
+
query?: never;
|
|
3525
|
+
header?: never;
|
|
3526
|
+
path: {
|
|
3527
|
+
workspace_id: string;
|
|
3528
|
+
email: string;
|
|
3529
|
+
};
|
|
3530
|
+
cookie?: never;
|
|
3531
|
+
};
|
|
3532
|
+
requestBody?: never;
|
|
3533
|
+
responses: {
|
|
3534
|
+
/** @description Suppression removed. */
|
|
3535
|
+
204: {
|
|
3536
|
+
headers: {
|
|
3537
|
+
[name: string]: unknown;
|
|
3538
|
+
};
|
|
3539
|
+
content?: never;
|
|
3540
|
+
};
|
|
3541
|
+
/** @description Email is not on this workspace suppression list. */
|
|
3542
|
+
404: {
|
|
3543
|
+
headers: {
|
|
3544
|
+
[name: string]: unknown;
|
|
3545
|
+
};
|
|
3546
|
+
content?: never;
|
|
3547
|
+
};
|
|
3548
|
+
};
|
|
3549
|
+
};
|
|
3550
|
+
TemplateController_list: {
|
|
3551
|
+
parameters: {
|
|
3552
|
+
query: {
|
|
3553
|
+
tags: string;
|
|
3554
|
+
kind: string;
|
|
3555
|
+
};
|
|
3556
|
+
header?: never;
|
|
3557
|
+
path: {
|
|
3558
|
+
workspace_id: string;
|
|
3559
|
+
};
|
|
3560
|
+
cookie?: never;
|
|
3561
|
+
};
|
|
3562
|
+
requestBody?: never;
|
|
3563
|
+
responses: {
|
|
3564
|
+
200: {
|
|
3565
|
+
headers: {
|
|
3566
|
+
[name: string]: unknown;
|
|
3567
|
+
};
|
|
3568
|
+
content: {
|
|
3569
|
+
"application/json": components["schemas"]["ListTemplatesResponseDto"];
|
|
3570
|
+
};
|
|
3571
|
+
};
|
|
3572
|
+
};
|
|
3573
|
+
};
|
|
3574
|
+
TemplateController_upsert: {
|
|
3575
|
+
parameters: {
|
|
3576
|
+
query?: never;
|
|
3577
|
+
header?: never;
|
|
3578
|
+
path: {
|
|
3579
|
+
workspace_id: string;
|
|
3580
|
+
};
|
|
3581
|
+
cookie?: never;
|
|
3582
|
+
};
|
|
3583
|
+
requestBody: {
|
|
3584
|
+
content: {
|
|
3585
|
+
"application/json": components["schemas"]["UpsertTemplateDto"];
|
|
3586
|
+
};
|
|
3587
|
+
};
|
|
3588
|
+
responses: {
|
|
3589
|
+
201: {
|
|
3590
|
+
headers: {
|
|
3591
|
+
[name: string]: unknown;
|
|
3592
|
+
};
|
|
3593
|
+
content: {
|
|
3594
|
+
"application/json": components["schemas"]["TemplateDto"];
|
|
3595
|
+
};
|
|
3596
|
+
};
|
|
3597
|
+
/** @description Validation failure (bad name / payload). */
|
|
3598
|
+
400: {
|
|
3599
|
+
headers: {
|
|
3600
|
+
[name: string]: unknown;
|
|
3601
|
+
};
|
|
3602
|
+
content?: never;
|
|
3603
|
+
};
|
|
3604
|
+
};
|
|
3605
|
+
};
|
|
3606
|
+
TemplateController_lint: {
|
|
3607
|
+
parameters: {
|
|
3608
|
+
query?: never;
|
|
3609
|
+
header?: never;
|
|
3610
|
+
path: {
|
|
3611
|
+
workspace_id: string;
|
|
3612
|
+
};
|
|
3613
|
+
cookie?: never;
|
|
3614
|
+
};
|
|
3615
|
+
requestBody: {
|
|
3616
|
+
content: {
|
|
3617
|
+
"application/json": components["schemas"]["LintTemplateDto"];
|
|
3618
|
+
};
|
|
3619
|
+
};
|
|
3620
|
+
responses: {
|
|
3621
|
+
200: {
|
|
3622
|
+
headers: {
|
|
3623
|
+
[name: string]: unknown;
|
|
3624
|
+
};
|
|
3625
|
+
content: {
|
|
3626
|
+
"application/json": components["schemas"]["LintResultDto"];
|
|
3627
|
+
};
|
|
3628
|
+
};
|
|
3629
|
+
/** @description Underlying render failed. */
|
|
3630
|
+
422: {
|
|
3631
|
+
headers: {
|
|
3632
|
+
[name: string]: unknown;
|
|
3633
|
+
};
|
|
3634
|
+
content?: never;
|
|
3635
|
+
};
|
|
3636
|
+
};
|
|
3637
|
+
};
|
|
3638
|
+
TemplateController_preview: {
|
|
3639
|
+
parameters: {
|
|
3640
|
+
query?: never;
|
|
3641
|
+
header?: never;
|
|
3642
|
+
path: {
|
|
3643
|
+
workspace_id: string;
|
|
3644
|
+
};
|
|
3645
|
+
cookie?: never;
|
|
3646
|
+
};
|
|
3647
|
+
requestBody: {
|
|
3648
|
+
content: {
|
|
3649
|
+
"application/json": components["schemas"]["PreviewTemplateDto"];
|
|
3650
|
+
};
|
|
3651
|
+
};
|
|
3652
|
+
responses: {
|
|
3653
|
+
200: {
|
|
3654
|
+
headers: {
|
|
3655
|
+
[name: string]: unknown;
|
|
3656
|
+
};
|
|
3657
|
+
content: {
|
|
3658
|
+
"application/json": components["schemas"]["RenderedMessageDto"];
|
|
3659
|
+
};
|
|
3660
|
+
};
|
|
3661
|
+
/** @description Render failed (compile or runtime error). */
|
|
3662
|
+
422: {
|
|
3663
|
+
headers: {
|
|
3664
|
+
[name: string]: unknown;
|
|
3665
|
+
};
|
|
3666
|
+
content?: never;
|
|
3667
|
+
};
|
|
3668
|
+
};
|
|
3669
|
+
};
|
|
3670
|
+
TemplateController_listTags: {
|
|
3671
|
+
parameters: {
|
|
3672
|
+
query?: never;
|
|
3673
|
+
header?: never;
|
|
3674
|
+
path: {
|
|
3675
|
+
workspace_id: string;
|
|
3676
|
+
};
|
|
3677
|
+
cookie?: never;
|
|
3678
|
+
};
|
|
3679
|
+
requestBody?: never;
|
|
3680
|
+
responses: {
|
|
3681
|
+
200: {
|
|
3682
|
+
headers: {
|
|
3683
|
+
[name: string]: unknown;
|
|
3684
|
+
};
|
|
3685
|
+
content: {
|
|
3686
|
+
"application/json": components["schemas"]["ListTemplateTagsResponseDto"];
|
|
3687
|
+
};
|
|
3688
|
+
};
|
|
3689
|
+
};
|
|
3690
|
+
};
|
|
3691
|
+
TemplateController_get: {
|
|
3692
|
+
parameters: {
|
|
3693
|
+
query?: never;
|
|
3694
|
+
header?: never;
|
|
3695
|
+
path: {
|
|
3696
|
+
workspace_id: string;
|
|
3697
|
+
name: string;
|
|
3698
|
+
};
|
|
3699
|
+
cookie?: never;
|
|
3700
|
+
};
|
|
3701
|
+
requestBody?: never;
|
|
3702
|
+
responses: {
|
|
3703
|
+
200: {
|
|
3704
|
+
headers: {
|
|
3705
|
+
[name: string]: unknown;
|
|
3706
|
+
};
|
|
3707
|
+
content: {
|
|
3708
|
+
"application/json": components["schemas"]["TemplateDto"];
|
|
3709
|
+
};
|
|
3710
|
+
};
|
|
3711
|
+
/** @description Template not found in this workspace. */
|
|
3712
|
+
404: {
|
|
3713
|
+
headers: {
|
|
3714
|
+
[name: string]: unknown;
|
|
3715
|
+
};
|
|
3716
|
+
content?: never;
|
|
3717
|
+
};
|
|
3718
|
+
};
|
|
3719
|
+
};
|
|
3720
|
+
TemplateController_delete: {
|
|
3721
|
+
parameters: {
|
|
3722
|
+
query?: never;
|
|
3723
|
+
header?: never;
|
|
3724
|
+
path: {
|
|
3725
|
+
workspace_id: string;
|
|
3726
|
+
name: string;
|
|
3727
|
+
};
|
|
3728
|
+
cookie?: never;
|
|
3729
|
+
};
|
|
3730
|
+
requestBody?: never;
|
|
3731
|
+
responses: {
|
|
3732
|
+
/** @description Template deleted. */
|
|
3733
|
+
204: {
|
|
3734
|
+
headers: {
|
|
3735
|
+
[name: string]: unknown;
|
|
3736
|
+
};
|
|
3737
|
+
content?: never;
|
|
3738
|
+
};
|
|
3739
|
+
/** @description Template not found in this workspace. */
|
|
3740
|
+
404: {
|
|
3741
|
+
headers: {
|
|
3742
|
+
[name: string]: unknown;
|
|
3743
|
+
};
|
|
3744
|
+
content?: never;
|
|
3745
|
+
};
|
|
3746
|
+
};
|
|
3747
|
+
};
|
|
3748
|
+
TemplateController_render: {
|
|
3749
|
+
parameters: {
|
|
3750
|
+
query?: never;
|
|
3751
|
+
header?: never;
|
|
3752
|
+
path: {
|
|
3753
|
+
workspace_id: string;
|
|
3754
|
+
name: string;
|
|
3755
|
+
};
|
|
3756
|
+
cookie?: never;
|
|
3757
|
+
};
|
|
3758
|
+
requestBody: {
|
|
3759
|
+
content: {
|
|
3760
|
+
"application/json": components["schemas"]["RenderTemplateDto"];
|
|
3761
|
+
};
|
|
3762
|
+
};
|
|
3763
|
+
responses: {
|
|
3764
|
+
200: {
|
|
3765
|
+
headers: {
|
|
3766
|
+
[name: string]: unknown;
|
|
3767
|
+
};
|
|
3768
|
+
content: {
|
|
3769
|
+
"application/json": components["schemas"]["RenderedMessageDto"];
|
|
3770
|
+
};
|
|
3771
|
+
};
|
|
3772
|
+
/** @description Template not found in this workspace. */
|
|
3773
|
+
404: {
|
|
3774
|
+
headers: {
|
|
3775
|
+
[name: string]: unknown;
|
|
3776
|
+
};
|
|
3777
|
+
content?: never;
|
|
3778
|
+
};
|
|
3779
|
+
/** @description Cannot render a layout/partial — only sendable templates. */
|
|
3780
|
+
409: {
|
|
3781
|
+
headers: {
|
|
3782
|
+
[name: string]: unknown;
|
|
3783
|
+
};
|
|
3784
|
+
content?: never;
|
|
3785
|
+
};
|
|
3786
|
+
/** @description Render or schema validation failed. */
|
|
3787
|
+
422: {
|
|
3788
|
+
headers: {
|
|
3789
|
+
[name: string]: unknown;
|
|
3790
|
+
};
|
|
3791
|
+
content?: never;
|
|
3792
|
+
};
|
|
3793
|
+
};
|
|
3794
|
+
};
|
|
3795
|
+
TemplateController_send: {
|
|
3796
|
+
parameters: {
|
|
3797
|
+
query?: never;
|
|
3798
|
+
header?: {
|
|
3799
|
+
/** @description Opaque client-generated string (1–256 chars, `[A-Za-z0-9_-:]`) used to deduplicate retries within a 24h window. */
|
|
3800
|
+
"Idempotency-Key"?: string;
|
|
3801
|
+
};
|
|
3802
|
+
path: {
|
|
3803
|
+
workspace_id: string;
|
|
3804
|
+
name: string;
|
|
3805
|
+
};
|
|
3806
|
+
cookie?: never;
|
|
3807
|
+
};
|
|
3808
|
+
requestBody: {
|
|
3809
|
+
content: {
|
|
3810
|
+
"application/json": components["schemas"]["SendTemplateDto"];
|
|
3811
|
+
};
|
|
3812
|
+
};
|
|
3813
|
+
responses: {
|
|
3814
|
+
/** @description Send accepted; queued for delivery. */
|
|
3815
|
+
202: {
|
|
3816
|
+
headers: {
|
|
3817
|
+
[name: string]: unknown;
|
|
3818
|
+
};
|
|
3819
|
+
content: {
|
|
3820
|
+
"application/json": components["schemas"]["SendAcceptedDto"];
|
|
3821
|
+
};
|
|
3822
|
+
};
|
|
3823
|
+
/** @description Validation failure (malformed body or recipient). */
|
|
3824
|
+
400: {
|
|
3825
|
+
headers: {
|
|
3826
|
+
[name: string]: unknown;
|
|
3827
|
+
};
|
|
3828
|
+
content?: never;
|
|
3829
|
+
};
|
|
3830
|
+
/** @description From-address domain is not registered to this workspace. */
|
|
3831
|
+
403: {
|
|
3832
|
+
headers: {
|
|
3833
|
+
[name: string]: unknown;
|
|
3834
|
+
};
|
|
3835
|
+
content?: never;
|
|
3836
|
+
};
|
|
3837
|
+
/** @description Template not found in this workspace. */
|
|
3838
|
+
404: {
|
|
3839
|
+
headers: {
|
|
3840
|
+
[name: string]: unknown;
|
|
3841
|
+
};
|
|
3842
|
+
content?: never;
|
|
3843
|
+
};
|
|
3844
|
+
/** @description IDEMPOTENCY_KEY_REUSE — same key, different body — or domain not yet verified. */
|
|
3845
|
+
409: {
|
|
3846
|
+
headers: {
|
|
3847
|
+
[name: string]: unknown;
|
|
3848
|
+
};
|
|
3849
|
+
content?: never;
|
|
3850
|
+
};
|
|
3851
|
+
/** @description Recipient suppressed, render failure, or invalid from address. */
|
|
3852
|
+
422: {
|
|
3853
|
+
headers: {
|
|
3854
|
+
[name: string]: unknown;
|
|
3855
|
+
};
|
|
3856
|
+
content?: never;
|
|
3857
|
+
};
|
|
3858
|
+
/** @description Rate limited. */
|
|
3859
|
+
429: {
|
|
3860
|
+
headers: {
|
|
3861
|
+
[name: string]: unknown;
|
|
3862
|
+
};
|
|
3863
|
+
content?: never;
|
|
3864
|
+
};
|
|
3865
|
+
};
|
|
3866
|
+
};
|
|
3867
|
+
TemplateController_sendBatch: {
|
|
3868
|
+
parameters: {
|
|
3869
|
+
query?: never;
|
|
3870
|
+
header?: never;
|
|
3871
|
+
path: {
|
|
3872
|
+
workspace_id: string;
|
|
3873
|
+
name: string;
|
|
3874
|
+
};
|
|
3875
|
+
cookie?: never;
|
|
3876
|
+
};
|
|
3877
|
+
requestBody: {
|
|
3878
|
+
content: {
|
|
3879
|
+
"application/json": components["schemas"]["SendBatchDto"];
|
|
3880
|
+
};
|
|
3881
|
+
};
|
|
3882
|
+
responses: {
|
|
3883
|
+
200: {
|
|
3884
|
+
headers: {
|
|
3885
|
+
[name: string]: unknown;
|
|
3886
|
+
};
|
|
3887
|
+
content: {
|
|
3888
|
+
"application/json": components["schemas"]["SendBatchOpenApiResponseDto"];
|
|
3889
|
+
};
|
|
3890
|
+
};
|
|
3891
|
+
/** @description Validation failure (malformed body, batch too large). */
|
|
3892
|
+
400: {
|
|
3893
|
+
headers: {
|
|
3894
|
+
[name: string]: unknown;
|
|
3895
|
+
};
|
|
3896
|
+
content?: never;
|
|
3897
|
+
};
|
|
3898
|
+
/** @description Template not found in this workspace. */
|
|
3899
|
+
404: {
|
|
3900
|
+
headers: {
|
|
3901
|
+
[name: string]: unknown;
|
|
3902
|
+
};
|
|
3903
|
+
content?: never;
|
|
3904
|
+
};
|
|
3905
|
+
/** @description Rate limited. */
|
|
3906
|
+
429: {
|
|
3907
|
+
headers: {
|
|
3908
|
+
[name: string]: unknown;
|
|
3909
|
+
};
|
|
3910
|
+
content?: never;
|
|
3911
|
+
};
|
|
3912
|
+
};
|
|
3913
|
+
};
|
|
3914
|
+
TemplateController_testSend: {
|
|
3915
|
+
parameters: {
|
|
3916
|
+
query?: never;
|
|
3917
|
+
header?: never;
|
|
3918
|
+
path: {
|
|
3919
|
+
workspace_id: string;
|
|
3920
|
+
name: string;
|
|
3921
|
+
};
|
|
3922
|
+
cookie?: never;
|
|
3923
|
+
};
|
|
3924
|
+
requestBody: {
|
|
3925
|
+
content: {
|
|
3926
|
+
"application/json": components["schemas"]["TestSendTemplateDto"];
|
|
3927
|
+
};
|
|
3928
|
+
};
|
|
3929
|
+
responses: {
|
|
3930
|
+
202: {
|
|
3931
|
+
headers: {
|
|
3932
|
+
[name: string]: unknown;
|
|
3933
|
+
};
|
|
3934
|
+
content: {
|
|
3935
|
+
"application/json": components["schemas"]["SendAcceptedDto"];
|
|
3936
|
+
};
|
|
3937
|
+
};
|
|
3938
|
+
/** @description From-address domain is not registered to this workspace. */
|
|
3939
|
+
403: {
|
|
3940
|
+
headers: {
|
|
3941
|
+
[name: string]: unknown;
|
|
3942
|
+
};
|
|
3943
|
+
content?: never;
|
|
3944
|
+
};
|
|
3945
|
+
/** @description Template not found in this workspace. */
|
|
3946
|
+
404: {
|
|
3947
|
+
headers: {
|
|
3948
|
+
[name: string]: unknown;
|
|
3949
|
+
};
|
|
3950
|
+
content?: never;
|
|
3951
|
+
};
|
|
3952
|
+
/** @description Cannot test-send a layout/partial; or domain not yet verified. */
|
|
3953
|
+
409: {
|
|
3954
|
+
headers: {
|
|
3955
|
+
[name: string]: unknown;
|
|
3956
|
+
};
|
|
3957
|
+
content?: never;
|
|
3958
|
+
};
|
|
3959
|
+
/** @description Invalid from address or render failure. */
|
|
3960
|
+
422: {
|
|
3961
|
+
headers: {
|
|
3962
|
+
[name: string]: unknown;
|
|
3963
|
+
};
|
|
3964
|
+
content?: never;
|
|
3965
|
+
};
|
|
3966
|
+
};
|
|
3967
|
+
};
|
|
3968
|
+
TemplateController_variables: {
|
|
3969
|
+
parameters: {
|
|
3970
|
+
query?: never;
|
|
3971
|
+
header?: never;
|
|
3972
|
+
path: {
|
|
3973
|
+
workspace_id: string;
|
|
3974
|
+
name: string;
|
|
3975
|
+
};
|
|
3976
|
+
cookie?: never;
|
|
3977
|
+
};
|
|
3978
|
+
requestBody?: never;
|
|
3979
|
+
responses: {
|
|
3980
|
+
200: {
|
|
3981
|
+
headers: {
|
|
3982
|
+
[name: string]: unknown;
|
|
3983
|
+
};
|
|
3984
|
+
content: {
|
|
3985
|
+
"application/json": components["schemas"]["TemplateVariablesResponseDto"];
|
|
3986
|
+
};
|
|
3987
|
+
};
|
|
3988
|
+
/** @description Template not found in this workspace. */
|
|
3989
|
+
404: {
|
|
3990
|
+
headers: {
|
|
3991
|
+
[name: string]: unknown;
|
|
3992
|
+
};
|
|
3993
|
+
content?: never;
|
|
3994
|
+
};
|
|
3995
|
+
};
|
|
3996
|
+
};
|
|
3997
|
+
OutboundWebhookController_list: {
|
|
3998
|
+
parameters: {
|
|
3999
|
+
query?: never;
|
|
4000
|
+
header?: never;
|
|
4001
|
+
path: {
|
|
4002
|
+
workspace_id: string;
|
|
4003
|
+
};
|
|
4004
|
+
cookie?: never;
|
|
4005
|
+
};
|
|
4006
|
+
requestBody?: never;
|
|
4007
|
+
responses: {
|
|
4008
|
+
200: {
|
|
4009
|
+
headers: {
|
|
4010
|
+
[name: string]: unknown;
|
|
4011
|
+
};
|
|
4012
|
+
content: {
|
|
4013
|
+
"application/json": components["schemas"]["OutboundWebhookConfigDto"][];
|
|
4014
|
+
};
|
|
4015
|
+
};
|
|
4016
|
+
};
|
|
4017
|
+
};
|
|
4018
|
+
OutboundWebhookController_listAttempts: {
|
|
4019
|
+
parameters: {
|
|
4020
|
+
query: {
|
|
4021
|
+
limit: string;
|
|
4022
|
+
};
|
|
4023
|
+
header?: never;
|
|
4024
|
+
path: {
|
|
4025
|
+
workspace_id: string;
|
|
4026
|
+
};
|
|
4027
|
+
cookie?: never;
|
|
4028
|
+
};
|
|
4029
|
+
requestBody?: never;
|
|
4030
|
+
responses: {
|
|
4031
|
+
200: {
|
|
4032
|
+
headers: {
|
|
4033
|
+
[name: string]: unknown;
|
|
4034
|
+
};
|
|
4035
|
+
content: {
|
|
4036
|
+
"application/json": components["schemas"]["OutboundWebhookAttemptDto"][];
|
|
4037
|
+
};
|
|
4038
|
+
};
|
|
4039
|
+
};
|
|
4040
|
+
};
|
|
4041
|
+
OutboundWebhookController_getDefault: {
|
|
4042
|
+
parameters: {
|
|
4043
|
+
query?: never;
|
|
4044
|
+
header?: never;
|
|
4045
|
+
path: {
|
|
4046
|
+
workspace_id: string;
|
|
4047
|
+
};
|
|
4048
|
+
cookie?: never;
|
|
4049
|
+
};
|
|
4050
|
+
requestBody?: never;
|
|
4051
|
+
responses: {
|
|
4052
|
+
/** @description Workspace-default config, or null if not configured. */
|
|
4053
|
+
200: {
|
|
4054
|
+
headers: {
|
|
4055
|
+
[name: string]: unknown;
|
|
4056
|
+
};
|
|
4057
|
+
content: {
|
|
4058
|
+
"application/json": components["schemas"]["OutboundWebhookConfigDto"];
|
|
4059
|
+
};
|
|
4060
|
+
};
|
|
4061
|
+
};
|
|
4062
|
+
};
|
|
4063
|
+
OutboundWebhookController_upsertDefault: {
|
|
4064
|
+
parameters: {
|
|
4065
|
+
query?: never;
|
|
4066
|
+
header?: never;
|
|
4067
|
+
path: {
|
|
4068
|
+
workspace_id: string;
|
|
4069
|
+
};
|
|
4070
|
+
cookie?: never;
|
|
4071
|
+
};
|
|
4072
|
+
requestBody: {
|
|
4073
|
+
content: {
|
|
4074
|
+
"application/json": components["schemas"]["UpsertOutboundWebhookDto"];
|
|
4075
|
+
};
|
|
4076
|
+
};
|
|
4077
|
+
responses: {
|
|
4078
|
+
200: {
|
|
4079
|
+
headers: {
|
|
4080
|
+
[name: string]: unknown;
|
|
4081
|
+
};
|
|
4082
|
+
content: {
|
|
4083
|
+
"application/json": components["schemas"]["OutboundWebhookConfigWithSecretDto"];
|
|
4084
|
+
};
|
|
4085
|
+
};
|
|
4086
|
+
/** @description Validation failure (bad URL or event-type set). */
|
|
4087
|
+
400: {
|
|
4088
|
+
headers: {
|
|
4089
|
+
[name: string]: unknown;
|
|
4090
|
+
};
|
|
4091
|
+
content?: never;
|
|
4092
|
+
};
|
|
4093
|
+
/** @description URL failed SSRF + reachability checks at config time. */
|
|
4094
|
+
422: {
|
|
4095
|
+
headers: {
|
|
4096
|
+
[name: string]: unknown;
|
|
4097
|
+
};
|
|
4098
|
+
content?: never;
|
|
4099
|
+
};
|
|
4100
|
+
};
|
|
4101
|
+
};
|
|
4102
|
+
OutboundWebhookController_deleteDefault: {
|
|
4103
|
+
parameters: {
|
|
4104
|
+
query?: never;
|
|
4105
|
+
header?: never;
|
|
4106
|
+
path: {
|
|
4107
|
+
workspace_id: string;
|
|
4108
|
+
};
|
|
4109
|
+
cookie?: never;
|
|
4110
|
+
};
|
|
4111
|
+
requestBody?: never;
|
|
4112
|
+
responses: {
|
|
4113
|
+
/** @description Workspace-default webhook deleted. */
|
|
4114
|
+
204: {
|
|
4115
|
+
headers: {
|
|
4116
|
+
[name: string]: unknown;
|
|
4117
|
+
};
|
|
4118
|
+
content?: never;
|
|
4119
|
+
};
|
|
4120
|
+
};
|
|
4121
|
+
};
|
|
4122
|
+
OutboundWebhookController_rotateDefaultSecret: {
|
|
4123
|
+
parameters: {
|
|
4124
|
+
query?: never;
|
|
4125
|
+
header?: never;
|
|
4126
|
+
path: {
|
|
4127
|
+
workspace_id: string;
|
|
4128
|
+
};
|
|
4129
|
+
cookie?: never;
|
|
4130
|
+
};
|
|
4131
|
+
requestBody?: never;
|
|
4132
|
+
responses: {
|
|
4133
|
+
200: {
|
|
4134
|
+
headers: {
|
|
4135
|
+
[name: string]: unknown;
|
|
4136
|
+
};
|
|
4137
|
+
content: {
|
|
4138
|
+
"application/json": components["schemas"]["OutboundWebhookConfigWithSecretDto"];
|
|
4139
|
+
};
|
|
4140
|
+
};
|
|
4141
|
+
/** @description No webhook configured to rotate. */
|
|
4142
|
+
404: {
|
|
4143
|
+
headers: {
|
|
4144
|
+
[name: string]: unknown;
|
|
4145
|
+
};
|
|
4146
|
+
content?: never;
|
|
4147
|
+
};
|
|
4148
|
+
};
|
|
4149
|
+
};
|
|
4150
|
+
OutboundWebhookController_getDomain: {
|
|
4151
|
+
parameters: {
|
|
4152
|
+
query?: never;
|
|
4153
|
+
header?: never;
|
|
4154
|
+
path: {
|
|
4155
|
+
workspace_id: string;
|
|
4156
|
+
domain_id: string;
|
|
4157
|
+
};
|
|
4158
|
+
cookie?: never;
|
|
4159
|
+
};
|
|
4160
|
+
requestBody?: never;
|
|
4161
|
+
responses: {
|
|
4162
|
+
/** @description Per-domain override, or null if not configured. */
|
|
4163
|
+
200: {
|
|
4164
|
+
headers: {
|
|
4165
|
+
[name: string]: unknown;
|
|
4166
|
+
};
|
|
4167
|
+
content: {
|
|
4168
|
+
"application/json": components["schemas"]["OutboundWebhookConfigDto"];
|
|
4169
|
+
};
|
|
4170
|
+
};
|
|
4171
|
+
};
|
|
4172
|
+
};
|
|
4173
|
+
OutboundWebhookController_upsertDomain: {
|
|
4174
|
+
parameters: {
|
|
4175
|
+
query?: never;
|
|
4176
|
+
header?: never;
|
|
4177
|
+
path: {
|
|
4178
|
+
workspace_id: string;
|
|
4179
|
+
domain_id: string;
|
|
4180
|
+
};
|
|
4181
|
+
cookie?: never;
|
|
4182
|
+
};
|
|
4183
|
+
requestBody: {
|
|
4184
|
+
content: {
|
|
4185
|
+
"application/json": components["schemas"]["UpsertOutboundWebhookDto"];
|
|
4186
|
+
};
|
|
4187
|
+
};
|
|
4188
|
+
responses: {
|
|
4189
|
+
200: {
|
|
4190
|
+
headers: {
|
|
4191
|
+
[name: string]: unknown;
|
|
4192
|
+
};
|
|
4193
|
+
content: {
|
|
4194
|
+
"application/json": components["schemas"]["OutboundWebhookConfigWithSecretDto"];
|
|
4195
|
+
};
|
|
4196
|
+
};
|
|
4197
|
+
/** @description Validation failure (bad URL or event-type set). */
|
|
4198
|
+
400: {
|
|
4199
|
+
headers: {
|
|
4200
|
+
[name: string]: unknown;
|
|
4201
|
+
};
|
|
4202
|
+
content?: never;
|
|
4203
|
+
};
|
|
4204
|
+
/** @description URL failed SSRF + reachability checks at config time. */
|
|
4205
|
+
422: {
|
|
4206
|
+
headers: {
|
|
4207
|
+
[name: string]: unknown;
|
|
4208
|
+
};
|
|
4209
|
+
content?: never;
|
|
4210
|
+
};
|
|
4211
|
+
};
|
|
4212
|
+
};
|
|
4213
|
+
OutboundWebhookController_deleteDomain: {
|
|
4214
|
+
parameters: {
|
|
4215
|
+
query?: never;
|
|
4216
|
+
header?: never;
|
|
4217
|
+
path: {
|
|
4218
|
+
workspace_id: string;
|
|
4219
|
+
domain_id: string;
|
|
4220
|
+
};
|
|
4221
|
+
cookie?: never;
|
|
4222
|
+
};
|
|
4223
|
+
requestBody?: never;
|
|
4224
|
+
responses: {
|
|
4225
|
+
/** @description Per-domain webhook override deleted. */
|
|
4226
|
+
204: {
|
|
4227
|
+
headers: {
|
|
4228
|
+
[name: string]: unknown;
|
|
4229
|
+
};
|
|
4230
|
+
content?: never;
|
|
4231
|
+
};
|
|
4232
|
+
};
|
|
4233
|
+
};
|
|
4234
|
+
OutboundWebhookController_rotateDomainSecret: {
|
|
4235
|
+
parameters: {
|
|
4236
|
+
query?: never;
|
|
4237
|
+
header?: never;
|
|
4238
|
+
path: {
|
|
4239
|
+
workspace_id: string;
|
|
4240
|
+
domain_id: string;
|
|
4241
|
+
};
|
|
4242
|
+
cookie?: never;
|
|
4243
|
+
};
|
|
4244
|
+
requestBody?: never;
|
|
4245
|
+
responses: {
|
|
4246
|
+
200: {
|
|
4247
|
+
headers: {
|
|
4248
|
+
[name: string]: unknown;
|
|
4249
|
+
};
|
|
4250
|
+
content: {
|
|
4251
|
+
"application/json": components["schemas"]["OutboundWebhookConfigWithSecretDto"];
|
|
4252
|
+
};
|
|
4253
|
+
};
|
|
4254
|
+
/** @description No per-domain webhook configured to rotate. */
|
|
4255
|
+
404: {
|
|
4256
|
+
headers: {
|
|
4257
|
+
[name: string]: unknown;
|
|
4258
|
+
};
|
|
4259
|
+
content?: never;
|
|
4260
|
+
};
|
|
4261
|
+
};
|
|
4262
|
+
};
|
|
4263
|
+
}
|
|
4264
|
+
|
|
4265
|
+
/**
|
|
4266
|
+
* Mail — typed `openapi-fetch` client for every endpoint in
|
|
4267
|
+
* `Specs/mail.json`. Reach for `client.GET("/v1/...")` or
|
|
4268
|
+
* `client.POST(...)`; request / response types come from the
|
|
4269
|
+
* generated `paths` interface.
|
|
4270
|
+
*/
|
|
4271
|
+
declare class Mail {
|
|
4272
|
+
/** The underlying typed client. v0 surface — every endpoint reachable. */
|
|
4273
|
+
readonly client: ReturnType<typeof makeClient<paths>>;
|
|
4274
|
+
constructor(config?: PCClientConfig);
|
|
4275
|
+
}
|
|
4276
|
+
|
|
4277
|
+
export { Mail, type paths };
|