@epilot/sdk 2.0.3 → 2.1.0-rc.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.
Files changed (214) hide show
  1. package/definitions/access-token-runtime.json +1 -0
  2. package/definitions/access-token.json +663 -0
  3. package/definitions/address-runtime.json +1 -0
  4. package/definitions/address-suggestions-runtime.json +1 -0
  5. package/definitions/address-suggestions.json +582 -0
  6. package/definitions/address.json +578 -0
  7. package/definitions/ai-agents-runtime.json +1 -0
  8. package/definitions/ai-agents.json +1711 -0
  9. package/definitions/app-runtime.json +1 -0
  10. package/definitions/app.json +4443 -0
  11. package/definitions/audit-logs-runtime.json +1 -0
  12. package/definitions/audit-logs.json +305 -0
  13. package/definitions/automation-runtime.json +1 -0
  14. package/definitions/automation.json +4850 -0
  15. package/definitions/billing-runtime.json +1 -0
  16. package/definitions/billing.json +837 -0
  17. package/definitions/blueprint-manifest-runtime.json +1 -0
  18. package/definitions/blueprint-manifest.json +3376 -0
  19. package/definitions/consent-runtime.json +1 -0
  20. package/definitions/consent.json +344 -0
  21. package/definitions/customer-portal-runtime.json +1 -0
  22. package/definitions/customer-portal.json +15000 -0
  23. package/definitions/dashboard-runtime.json +1 -0
  24. package/definitions/dashboard.json +484 -0
  25. package/definitions/data-management-runtime.json +1 -0
  26. package/definitions/data-management.json +962 -0
  27. package/definitions/deduplication-runtime.json +1 -0
  28. package/definitions/deduplication.json +183 -0
  29. package/definitions/design-runtime.json +1 -0
  30. package/definitions/design.json +1423 -0
  31. package/definitions/document-runtime.json +1 -0
  32. package/definitions/document.json +758 -0
  33. package/definitions/email-settings-runtime.json +1 -0
  34. package/definitions/email-settings.json +2627 -0
  35. package/definitions/email-template-runtime.json +1 -0
  36. package/definitions/email-template.json +1419 -0
  37. package/definitions/entity-mapping-runtime.json +1 -0
  38. package/definitions/entity-mapping.json +1642 -0
  39. package/definitions/entity-runtime.json +1 -0
  40. package/definitions/entity.json +10074 -0
  41. package/definitions/environments-runtime.json +1 -0
  42. package/definitions/environments.json +363 -0
  43. package/definitions/erp-integration-runtime.json +1 -0
  44. package/definitions/erp-integration.json +5845 -0
  45. package/definitions/event-catalog-runtime.json +1 -0
  46. package/definitions/event-catalog.json +1051 -0
  47. package/definitions/file-runtime.json +1 -0
  48. package/definitions/file.json +2842 -0
  49. package/definitions/iban-runtime.json +1 -0
  50. package/definitions/iban.json +132 -0
  51. package/definitions/journey-runtime.json +1 -0
  52. package/definitions/journey.json +2341 -0
  53. package/definitions/kanban-runtime.json +1 -0
  54. package/definitions/kanban.json +929 -0
  55. package/definitions/message-runtime.json +1 -0
  56. package/definitions/message.json +2660 -0
  57. package/definitions/metering-runtime.json +1 -0
  58. package/definitions/metering.json +2321 -0
  59. package/definitions/notes-runtime.json +1 -0
  60. package/definitions/notes.json +1531 -0
  61. package/definitions/notification-runtime.json +1 -0
  62. package/definitions/notification.json +1425 -0
  63. package/definitions/organization-runtime.json +1 -0
  64. package/definitions/organization.json +629 -0
  65. package/definitions/partner-directory-runtime.json +1 -0
  66. package/definitions/partner-directory.json +1718 -0
  67. package/definitions/permissions-runtime.json +1 -0
  68. package/definitions/permissions.json +1480 -0
  69. package/definitions/pricing-runtime.json +1 -0
  70. package/definitions/pricing-tier-runtime.json +1 -0
  71. package/definitions/pricing-tier.json +105 -0
  72. package/definitions/pricing.json +9884 -0
  73. package/definitions/purpose-runtime.json +1 -0
  74. package/definitions/purpose.json +524 -0
  75. package/definitions/sandbox-runtime.json +1 -0
  76. package/definitions/sandbox.json +453 -0
  77. package/definitions/submission-runtime.json +1 -0
  78. package/definitions/submission.json +313 -0
  79. package/definitions/targeting-runtime.json +1 -0
  80. package/definitions/targeting.json +1474 -0
  81. package/definitions/template-variables-runtime.json +1 -0
  82. package/definitions/template-variables.json +1408 -0
  83. package/definitions/user-runtime.json +1 -0
  84. package/definitions/user.json +2408 -0
  85. package/definitions/validation-rules-runtime.json +1 -0
  86. package/definitions/validation-rules.json +1491 -0
  87. package/definitions/webhooks-runtime.json +1 -0
  88. package/definitions/webhooks.json +1525 -0
  89. package/definitions/workflow-definition-runtime.json +1 -0
  90. package/definitions/workflow-definition.json +3417 -0
  91. package/definitions/workflow-runtime.json +1 -0
  92. package/definitions/workflow.json +4106 -0
  93. package/dist/apis/access-token.cjs +7 -7
  94. package/dist/apis/access-token.js +1 -1
  95. package/dist/apis/address-suggestions.cjs +7 -7
  96. package/dist/apis/address-suggestions.js +1 -1
  97. package/dist/apis/address.cjs +7 -7
  98. package/dist/apis/address.js +1 -1
  99. package/dist/apis/ai-agents.cjs +7 -7
  100. package/dist/apis/ai-agents.js +1 -1
  101. package/dist/apis/app.cjs +7 -7
  102. package/dist/apis/app.d.cts +2 -2
  103. package/dist/apis/app.d.ts +2 -2
  104. package/dist/apis/app.js +1 -1
  105. package/dist/apis/audit-logs.cjs +7 -7
  106. package/dist/apis/audit-logs.js +1 -1
  107. package/dist/apis/automation.cjs +7 -7
  108. package/dist/apis/automation.js +1 -1
  109. package/dist/apis/billing.cjs +7 -7
  110. package/dist/apis/billing.js +1 -1
  111. package/dist/apis/blueprint-manifest.cjs +8 -8
  112. package/dist/apis/blueprint-manifest.d.cts +2 -2
  113. package/dist/apis/blueprint-manifest.d.ts +2 -2
  114. package/dist/apis/blueprint-manifest.js +2 -2
  115. package/dist/apis/consent.cjs +7 -7
  116. package/dist/apis/consent.js +1 -1
  117. package/dist/apis/customer-portal.cjs +7 -7
  118. package/dist/apis/customer-portal.js +1 -1
  119. package/dist/apis/dashboard.cjs +7 -7
  120. package/dist/apis/dashboard.js +1 -1
  121. package/dist/apis/data-management.cjs +7 -7
  122. package/dist/apis/data-management.d.cts +2 -2
  123. package/dist/apis/data-management.d.ts +2 -2
  124. package/dist/apis/data-management.js +1 -1
  125. package/dist/apis/deduplication.cjs +7 -7
  126. package/dist/apis/deduplication.js +1 -1
  127. package/dist/apis/design.cjs +7 -7
  128. package/dist/apis/design.js +1 -1
  129. package/dist/apis/document.cjs +7 -7
  130. package/dist/apis/document.js +1 -1
  131. package/dist/apis/email-settings.cjs +7 -7
  132. package/dist/apis/email-settings.js +1 -1
  133. package/dist/apis/email-template.cjs +7 -7
  134. package/dist/apis/email-template.d.cts +2 -2
  135. package/dist/apis/email-template.d.ts +2 -2
  136. package/dist/apis/email-template.js +1 -1
  137. package/dist/apis/entity-mapping.cjs +7 -7
  138. package/dist/apis/entity-mapping.js +1 -1
  139. package/dist/apis/entity.cjs +8 -8
  140. package/dist/apis/entity.d.cts +2 -2
  141. package/dist/apis/entity.d.ts +2 -2
  142. package/dist/apis/entity.js +2 -2
  143. package/dist/apis/environments.cjs +7 -7
  144. package/dist/apis/environments.js +1 -1
  145. package/dist/apis/erp-integration.cjs +7 -7
  146. package/dist/apis/erp-integration.js +1 -1
  147. package/dist/apis/event-catalog.cjs +7 -7
  148. package/dist/apis/event-catalog.js +1 -1
  149. package/dist/apis/file.cjs +7 -7
  150. package/dist/apis/file.js +1 -1
  151. package/dist/apis/iban.cjs +7 -7
  152. package/dist/apis/iban.js +1 -1
  153. package/dist/apis/journey.cjs +7 -7
  154. package/dist/apis/journey.js +1 -1
  155. package/dist/apis/kanban.cjs +7 -7
  156. package/dist/apis/kanban.js +1 -1
  157. package/dist/apis/message.cjs +7 -7
  158. package/dist/apis/message.js +1 -1
  159. package/dist/apis/metering.cjs +7 -7
  160. package/dist/apis/metering.js +1 -1
  161. package/dist/apis/notes.cjs +7 -7
  162. package/dist/apis/notes.js +1 -1
  163. package/dist/apis/notification.cjs +7 -7
  164. package/dist/apis/notification.js +1 -1
  165. package/dist/apis/organization.cjs +7 -7
  166. package/dist/apis/organization.js +1 -1
  167. package/dist/apis/partner-directory.cjs +7 -7
  168. package/dist/apis/partner-directory.js +1 -1
  169. package/dist/apis/permissions.cjs +7 -7
  170. package/dist/apis/permissions.js +1 -1
  171. package/dist/apis/pricing-tier.cjs +7 -7
  172. package/dist/apis/pricing-tier.js +1 -1
  173. package/dist/apis/pricing.cjs +7 -7
  174. package/dist/apis/pricing.js +1 -1
  175. package/dist/apis/purpose.cjs +7 -7
  176. package/dist/apis/purpose.js +1 -1
  177. package/dist/apis/sandbox.cjs +7 -7
  178. package/dist/apis/sandbox.js +1 -1
  179. package/dist/apis/submission.cjs +7 -7
  180. package/dist/apis/submission.js +1 -1
  181. package/dist/apis/targeting.cjs +7 -7
  182. package/dist/apis/targeting.js +1 -1
  183. package/dist/apis/template-variables.cjs +7 -7
  184. package/dist/apis/template-variables.js +1 -1
  185. package/dist/apis/user.cjs +7 -7
  186. package/dist/apis/user.js +1 -1
  187. package/dist/apis/validation-rules.cjs +7 -7
  188. package/dist/apis/validation-rules.js +1 -1
  189. package/dist/apis/webhooks.cjs +7 -7
  190. package/dist/apis/webhooks.js +1 -1
  191. package/dist/apis/workflow-definition.cjs +7 -7
  192. package/dist/apis/workflow-definition.js +1 -1
  193. package/dist/apis/workflow.cjs +7 -7
  194. package/dist/apis/workflow.js +1 -1
  195. package/dist/{app.d-Dr03n4J4.d.cts → app.d-BXy_QUym.d.cts} +21 -3
  196. package/dist/{app.d-Dr03n4J4.d.ts → app.d-BXy_QUym.d.ts} +21 -3
  197. package/dist/bin/cli.js +123 -25
  198. package/dist/{blueprint-manifest.d-CEWRdF3i.d.ts → blueprint-manifest.d-DECw6HdM.d.cts} +110 -2
  199. package/dist/{blueprint-manifest.d-CEWRdF3i.d.cts → blueprint-manifest.d-DECw6HdM.d.ts} +110 -2
  200. package/dist/{chunk-QMQNMCOC.js → chunk-XE25WERA.js} +1 -1
  201. package/dist/{chunk-5LXNSDG2.cjs → chunk-XEQMAKGA.cjs} +1 -1
  202. package/dist/{data-management.d-pnuiRU2h.d.cts → data-management.d-CkDmJwpx.d.cts} +1 -2
  203. package/dist/{data-management.d-pnuiRU2h.d.ts → data-management.d-CkDmJwpx.d.ts} +1 -2
  204. package/dist/{email-template.d-BeqkDHtk.d.cts → email-template.d-gtQkdaXM.d.cts} +17 -3
  205. package/dist/{email-template.d-BeqkDHtk.d.ts → email-template.d-gtQkdaXM.d.ts} +17 -3
  206. package/dist/{entity.d-CrtZaZr8.d.cts → entity.d-DtiajmaY.d.cts} +292 -10
  207. package/dist/{entity.d-CrtZaZr8.d.ts → entity.d-DtiajmaY.d.ts} +292 -10
  208. package/dist/index.cjs +17 -17
  209. package/dist/index.d.cts +5 -5
  210. package/dist/index.d.ts +5 -5
  211. package/dist/index.js +10 -10
  212. package/dist/js-yaml-UPZKYVRY.js +2645 -0
  213. package/package.json +11 -10
  214. package/LICENSE +0 -21
@@ -0,0 +1,1425 @@
1
+ {
2
+ "openapi": "3.0.3",
3
+ "info": {
4
+ "title": "Notification API",
5
+ "version": "1.7.0",
6
+ "description": "Notification API for epilot 360"
7
+ },
8
+ "security": [
9
+ {
10
+ "EpilotAuth": []
11
+ },
12
+ {
13
+ "EpilotOrg": []
14
+ }
15
+ ],
16
+ "tags": [
17
+ {
18
+ "name": "Notification",
19
+ "description": "Notification"
20
+ },
21
+ {
22
+ "name": "Template",
23
+ "description": "Notification Template"
24
+ }
25
+ ],
26
+ "paths": {
27
+ "/v2/notification/notifications": {
28
+ "get": {
29
+ "operationId": "getNotificationsV2",
30
+ "summary": "getNotificationsV2",
31
+ "description": "Get notifications items. These items may eventually contain entities within their payload, which can be hydrated by the client if desired by calling the Entity API directly.",
32
+ "tags": [
33
+ "Notification"
34
+ ],
35
+ "parameters": [
36
+ {
37
+ "in": "query",
38
+ "name": "cursor",
39
+ "schema": {
40
+ "type": "string"
41
+ },
42
+ "required": false,
43
+ "description": "Base64 encoded cursor to be used for pagination"
44
+ },
45
+ {
46
+ "in": "query",
47
+ "name": "after_id",
48
+ "schema": {
49
+ "type": "integer"
50
+ }
51
+ },
52
+ {
53
+ "in": "query",
54
+ "name": "limit",
55
+ "schema": {
56
+ "type": "integer"
57
+ },
58
+ "description": "The numbers of items to return"
59
+ }
60
+ ],
61
+ "responses": {
62
+ "200": {
63
+ "description": "Success",
64
+ "content": {
65
+ "application/json": {
66
+ "schema": {
67
+ "type": "object",
68
+ "properties": {
69
+ "cursor": {
70
+ "type": "string",
71
+ "example": "eyJjcmVhd",
72
+ "description": "Base64 encoded cursor to be used for pagination"
73
+ },
74
+ "total": {
75
+ "type": "integer",
76
+ "example": 1
77
+ },
78
+ "total_unread": {
79
+ "type": "integer",
80
+ "example": 1
81
+ },
82
+ "results": {
83
+ "type": "array",
84
+ "items": {
85
+ "$ref": "#/components/schemas/NotificationItem"
86
+ }
87
+ }
88
+ }
89
+ }
90
+ }
91
+ }
92
+ }
93
+ }
94
+ }
95
+ },
96
+ "/v1/notification/notifications": {
97
+ "post": {
98
+ "operationId": "createNotification",
99
+ "summary": "createNotification",
100
+ "description": "Create a message that can be displayed in the notification panel.",
101
+ "tags": [
102
+ "Notification"
103
+ ],
104
+ "requestBody": {
105
+ "content": {
106
+ "application/json": {
107
+ "schema": {
108
+ "$ref": "#/components/schemas/Notification"
109
+ }
110
+ }
111
+ }
112
+ },
113
+ "responses": {
114
+ "202": {
115
+ "description": "Success"
116
+ }
117
+ }
118
+ },
119
+ "get": {
120
+ "operationId": "getNotifications",
121
+ "summary": "getNotifications",
122
+ "description": "Get notifications",
123
+ "tags": [
124
+ "Notification"
125
+ ],
126
+ "parameters": [
127
+ {
128
+ "in": "query",
129
+ "name": "after_id",
130
+ "schema": {
131
+ "type": "integer"
132
+ }
133
+ },
134
+ {
135
+ "in": "query",
136
+ "name": "limit",
137
+ "schema": {
138
+ "type": "integer"
139
+ },
140
+ "description": "The numbers of items to return"
141
+ },
142
+ {
143
+ "in": "query",
144
+ "name": "no_hydrate",
145
+ "schema": {
146
+ "type": "boolean"
147
+ },
148
+ "description": "When true, the payload will not be hydrated with the entity data. This is useful when the client does not need the entity data and wants to save on API calls (performance gain). When false, the payload will be hydrated with the entity data. This is useful when the client needs the entity data to display the notification (e.g. to show the name of the contact in the notification message), but can have a significative performance impact.\n\nThis endpoint will eventually be deprecated in favor of GET /v2/notification/notifications which no longer hydrates the payload by default.\n"
149
+ }
150
+ ],
151
+ "responses": {
152
+ "200": {
153
+ "description": "Success",
154
+ "content": {
155
+ "application/json": {
156
+ "schema": {
157
+ "type": "object",
158
+ "properties": {
159
+ "total": {
160
+ "type": "integer",
161
+ "example": 1
162
+ },
163
+ "total_unread": {
164
+ "type": "integer",
165
+ "example": 1
166
+ },
167
+ "results": {
168
+ "type": "array",
169
+ "items": {
170
+ "$ref": "#/components/schemas/NotificationItem"
171
+ }
172
+ }
173
+ }
174
+ }
175
+ }
176
+ }
177
+ }
178
+ }
179
+ }
180
+ },
181
+ "/v1/notification/notifications/{id}": {
182
+ "get": {
183
+ "operationId": "getNotification",
184
+ "summary": "getNotification",
185
+ "description": "Get the details of a single notification.",
186
+ "tags": [
187
+ "Notification"
188
+ ],
189
+ "parameters": [
190
+ {
191
+ "in": "path",
192
+ "name": "id",
193
+ "description": "Notification Id",
194
+ "required": true,
195
+ "schema": {
196
+ "type": "number"
197
+ }
198
+ }
199
+ ],
200
+ "responses": {
201
+ "200": {
202
+ "description": "Success",
203
+ "content": {
204
+ "application/json": {
205
+ "schema": {
206
+ "$ref": "#/components/schemas/NotificationItem"
207
+ }
208
+ }
209
+ }
210
+ }
211
+ }
212
+ }
213
+ },
214
+ "/v1/notification/notifications/mark": {
215
+ "put": {
216
+ "operationId": "markAllAsRead",
217
+ "summary": "markAllAsRead",
218
+ "description": "Mark all as read",
219
+ "tags": [
220
+ "Notification"
221
+ ],
222
+ "responses": {
223
+ "204": {
224
+ "description": "ok"
225
+ }
226
+ }
227
+ }
228
+ },
229
+ "/v1/notification/notifications/{id}/mark": {
230
+ "put": {
231
+ "operationId": "markAsRead",
232
+ "summary": "markAsRead",
233
+ "description": "Mark as read",
234
+ "parameters": [
235
+ {
236
+ "in": "path",
237
+ "name": "id",
238
+ "schema": {
239
+ "type": "integer"
240
+ },
241
+ "required": true,
242
+ "description": "Numeric ID of the notification to mark as read"
243
+ }
244
+ ],
245
+ "tags": [
246
+ "Notification"
247
+ ],
248
+ "responses": {
249
+ "204": {
250
+ "description": "Success"
251
+ }
252
+ }
253
+ }
254
+ },
255
+ "/v1/notification/unreads": {
256
+ "get": {
257
+ "operationId": "getTotalUnread",
258
+ "summary": "getTotalUnread",
259
+ "description": "Get total unread",
260
+ "tags": [
261
+ "Notification"
262
+ ],
263
+ "responses": {
264
+ "200": {
265
+ "description": "Success",
266
+ "content": {
267
+ "text/plain": {
268
+ "schema": {
269
+ "type": "number",
270
+ "example": 999
271
+ }
272
+ }
273
+ }
274
+ }
275
+ }
276
+ }
277
+ },
278
+ "/v1/notification/templates": {
279
+ "get": {
280
+ "operationId": "listNotificationTemplates",
281
+ "summary": "listNotificationTemplates",
282
+ "description": "List notification templates with optional filtering and pagination",
283
+ "tags": [
284
+ "Template"
285
+ ],
286
+ "parameters": [
287
+ {
288
+ "name": "q",
289
+ "in": "query",
290
+ "required": false,
291
+ "description": "Lucene query string for filtering",
292
+ "schema": {
293
+ "type": "string"
294
+ }
295
+ },
296
+ {
297
+ "name": "from",
298
+ "in": "query",
299
+ "required": false,
300
+ "description": "Pagination offset (0-based)",
301
+ "schema": {
302
+ "type": "integer",
303
+ "minimum": 0,
304
+ "default": 0
305
+ }
306
+ },
307
+ {
308
+ "name": "size",
309
+ "in": "query",
310
+ "required": false,
311
+ "description": "Results per page",
312
+ "schema": {
313
+ "type": "integer",
314
+ "minimum": 1,
315
+ "maximum": 1000,
316
+ "default": 25
317
+ }
318
+ },
319
+ {
320
+ "name": "sort",
321
+ "in": "query",
322
+ "required": false,
323
+ "description": "Sort fields (prefix with - for descending)",
324
+ "schema": {
325
+ "type": "string"
326
+ }
327
+ },
328
+ {
329
+ "name": "fields",
330
+ "in": "query",
331
+ "required": false,
332
+ "description": "Comma-separated fields to include",
333
+ "schema": {
334
+ "type": "string"
335
+ }
336
+ },
337
+ {
338
+ "name": "hydrate",
339
+ "in": "query",
340
+ "required": false,
341
+ "description": "Resolve nested relations",
342
+ "schema": {
343
+ "type": "boolean",
344
+ "default": false
345
+ }
346
+ }
347
+ ],
348
+ "responses": {
349
+ "200": {
350
+ "description": "Success",
351
+ "content": {
352
+ "application/json": {
353
+ "schema": {
354
+ "$ref": "#/components/schemas/NotificationTemplateListResponse"
355
+ }
356
+ }
357
+ }
358
+ },
359
+ "401": {
360
+ "description": "Unauthorized",
361
+ "content": {
362
+ "application/json": {
363
+ "schema": {
364
+ "$ref": "#/components/schemas/Error"
365
+ }
366
+ }
367
+ }
368
+ },
369
+ "500": {
370
+ "description": "Internal Server Error",
371
+ "content": {
372
+ "application/json": {
373
+ "schema": {
374
+ "$ref": "#/components/schemas/Error"
375
+ }
376
+ }
377
+ }
378
+ }
379
+ }
380
+ },
381
+ "post": {
382
+ "operationId": "createNotificationTemplate",
383
+ "summary": "createNotificationTemplate",
384
+ "description": "Create a new notification template",
385
+ "tags": [
386
+ "Template"
387
+ ],
388
+ "requestBody": {
389
+ "required": true,
390
+ "content": {
391
+ "application/json": {
392
+ "schema": {
393
+ "$ref": "#/components/schemas/CreateNotificationTemplateInput"
394
+ }
395
+ }
396
+ }
397
+ },
398
+ "responses": {
399
+ "201": {
400
+ "description": "Created",
401
+ "content": {
402
+ "application/json": {
403
+ "schema": {
404
+ "$ref": "#/components/schemas/NotificationTemplate"
405
+ }
406
+ }
407
+ }
408
+ },
409
+ "400": {
410
+ "description": "Bad Request",
411
+ "content": {
412
+ "application/json": {
413
+ "schema": {
414
+ "$ref": "#/components/schemas/Error"
415
+ }
416
+ }
417
+ }
418
+ },
419
+ "401": {
420
+ "description": "Unauthorized",
421
+ "content": {
422
+ "application/json": {
423
+ "schema": {
424
+ "$ref": "#/components/schemas/Error"
425
+ }
426
+ }
427
+ }
428
+ },
429
+ "500": {
430
+ "description": "Internal Server Error",
431
+ "content": {
432
+ "application/json": {
433
+ "schema": {
434
+ "$ref": "#/components/schemas/Error"
435
+ }
436
+ }
437
+ }
438
+ }
439
+ }
440
+ }
441
+ },
442
+ "/v1/notification/templates/{id}": {
443
+ "get": {
444
+ "operationId": "getNotificationTemplate",
445
+ "summary": "getNotificationTemplate",
446
+ "description": "Get a single notification template by ID",
447
+ "tags": [
448
+ "Template"
449
+ ],
450
+ "parameters": [
451
+ {
452
+ "$ref": "#/components/parameters/TemplateIdPathParam"
453
+ }
454
+ ],
455
+ "responses": {
456
+ "200": {
457
+ "description": "Success",
458
+ "content": {
459
+ "application/json": {
460
+ "schema": {
461
+ "$ref": "#/components/schemas/NotificationTemplate"
462
+ }
463
+ }
464
+ }
465
+ },
466
+ "401": {
467
+ "description": "Unauthorized",
468
+ "content": {
469
+ "application/json": {
470
+ "schema": {
471
+ "$ref": "#/components/schemas/Error"
472
+ }
473
+ }
474
+ }
475
+ },
476
+ "404": {
477
+ "description": "Not Found",
478
+ "content": {
479
+ "application/json": {
480
+ "schema": {
481
+ "$ref": "#/components/schemas/Error"
482
+ }
483
+ }
484
+ }
485
+ },
486
+ "500": {
487
+ "description": "Internal Server Error",
488
+ "content": {
489
+ "application/json": {
490
+ "schema": {
491
+ "$ref": "#/components/schemas/Error"
492
+ }
493
+ }
494
+ }
495
+ }
496
+ }
497
+ },
498
+ "put": {
499
+ "operationId": "updateNotificationTemplate",
500
+ "summary": "updateNotificationTemplate",
501
+ "description": "Update a notification template (full replacement)",
502
+ "tags": [
503
+ "Template"
504
+ ],
505
+ "parameters": [
506
+ {
507
+ "$ref": "#/components/parameters/TemplateIdPathParam"
508
+ }
509
+ ],
510
+ "requestBody": {
511
+ "required": true,
512
+ "content": {
513
+ "application/json": {
514
+ "schema": {
515
+ "$ref": "#/components/schemas/UpdateNotificationTemplateInput"
516
+ }
517
+ }
518
+ }
519
+ },
520
+ "responses": {
521
+ "200": {
522
+ "description": "Success",
523
+ "content": {
524
+ "application/json": {
525
+ "schema": {
526
+ "$ref": "#/components/schemas/NotificationTemplate"
527
+ }
528
+ }
529
+ }
530
+ },
531
+ "400": {
532
+ "description": "Bad Request",
533
+ "content": {
534
+ "application/json": {
535
+ "schema": {
536
+ "$ref": "#/components/schemas/Error"
537
+ }
538
+ }
539
+ }
540
+ },
541
+ "401": {
542
+ "description": "Unauthorized",
543
+ "content": {
544
+ "application/json": {
545
+ "schema": {
546
+ "$ref": "#/components/schemas/Error"
547
+ }
548
+ }
549
+ }
550
+ },
551
+ "404": {
552
+ "description": "Not Found",
553
+ "content": {
554
+ "application/json": {
555
+ "schema": {
556
+ "$ref": "#/components/schemas/Error"
557
+ }
558
+ }
559
+ }
560
+ },
561
+ "500": {
562
+ "description": "Internal Server Error",
563
+ "content": {
564
+ "application/json": {
565
+ "schema": {
566
+ "$ref": "#/components/schemas/Error"
567
+ }
568
+ }
569
+ }
570
+ }
571
+ }
572
+ },
573
+ "patch": {
574
+ "operationId": "patchNotificationTemplate",
575
+ "summary": "patchNotificationTemplate",
576
+ "description": "Partially update a notification template",
577
+ "tags": [
578
+ "Template"
579
+ ],
580
+ "parameters": [
581
+ {
582
+ "$ref": "#/components/parameters/TemplateIdPathParam"
583
+ }
584
+ ],
585
+ "requestBody": {
586
+ "required": true,
587
+ "content": {
588
+ "application/json": {
589
+ "schema": {
590
+ "$ref": "#/components/schemas/UpdateNotificationTemplateInput"
591
+ }
592
+ }
593
+ }
594
+ },
595
+ "responses": {
596
+ "200": {
597
+ "description": "Success",
598
+ "content": {
599
+ "application/json": {
600
+ "schema": {
601
+ "$ref": "#/components/schemas/NotificationTemplate"
602
+ }
603
+ }
604
+ }
605
+ },
606
+ "400": {
607
+ "description": "Bad Request",
608
+ "content": {
609
+ "application/json": {
610
+ "schema": {
611
+ "$ref": "#/components/schemas/Error"
612
+ }
613
+ }
614
+ }
615
+ },
616
+ "401": {
617
+ "description": "Unauthorized",
618
+ "content": {
619
+ "application/json": {
620
+ "schema": {
621
+ "$ref": "#/components/schemas/Error"
622
+ }
623
+ }
624
+ }
625
+ },
626
+ "404": {
627
+ "description": "Not Found",
628
+ "content": {
629
+ "application/json": {
630
+ "schema": {
631
+ "$ref": "#/components/schemas/Error"
632
+ }
633
+ }
634
+ }
635
+ },
636
+ "500": {
637
+ "description": "Internal Server Error",
638
+ "content": {
639
+ "application/json": {
640
+ "schema": {
641
+ "$ref": "#/components/schemas/Error"
642
+ }
643
+ }
644
+ }
645
+ }
646
+ }
647
+ },
648
+ "delete": {
649
+ "operationId": "deleteNotificationTemplate",
650
+ "summary": "deleteNotificationTemplate",
651
+ "description": "Delete a notification template permanently",
652
+ "tags": [
653
+ "Template"
654
+ ],
655
+ "parameters": [
656
+ {
657
+ "$ref": "#/components/parameters/TemplateIdPathParam"
658
+ }
659
+ ],
660
+ "responses": {
661
+ "200": {
662
+ "description": "Success",
663
+ "content": {
664
+ "application/json": {
665
+ "schema": {
666
+ "$ref": "#/components/schemas/NotificationTemplate"
667
+ }
668
+ }
669
+ }
670
+ },
671
+ "401": {
672
+ "description": "Unauthorized",
673
+ "content": {
674
+ "application/json": {
675
+ "schema": {
676
+ "$ref": "#/components/schemas/Error"
677
+ }
678
+ }
679
+ }
680
+ },
681
+ "404": {
682
+ "description": "Not Found",
683
+ "content": {
684
+ "application/json": {
685
+ "schema": {
686
+ "$ref": "#/components/schemas/Error"
687
+ }
688
+ }
689
+ }
690
+ },
691
+ "500": {
692
+ "description": "Internal Server Error",
693
+ "content": {
694
+ "application/json": {
695
+ "schema": {
696
+ "$ref": "#/components/schemas/Error"
697
+ }
698
+ }
699
+ }
700
+ }
701
+ }
702
+ }
703
+ },
704
+ "/v1/notification/templates/send-preview": {
705
+ "post": {
706
+ "operationId": "sendPreview",
707
+ "summary": "sendPreview",
708
+ "description": "Send a preview notification (both email and in-app) to the requesting user.\nUsed to test notification templates before saving.\n",
709
+ "tags": [
710
+ "Template"
711
+ ],
712
+ "requestBody": {
713
+ "required": true,
714
+ "content": {
715
+ "application/json": {
716
+ "schema": {
717
+ "$ref": "#/components/schemas/SendPreviewInput"
718
+ }
719
+ }
720
+ }
721
+ },
722
+ "responses": {
723
+ "200": {
724
+ "description": "Preview notification sent successfully",
725
+ "content": {
726
+ "application/json": {
727
+ "schema": {
728
+ "$ref": "#/components/schemas/SendPreviewResponse"
729
+ }
730
+ }
731
+ }
732
+ },
733
+ "400": {
734
+ "description": "Bad Request",
735
+ "content": {
736
+ "application/json": {
737
+ "schema": {
738
+ "$ref": "#/components/schemas/Error"
739
+ }
740
+ }
741
+ }
742
+ },
743
+ "401": {
744
+ "description": "Unauthorized",
745
+ "content": {
746
+ "application/json": {
747
+ "schema": {
748
+ "$ref": "#/components/schemas/Error"
749
+ }
750
+ }
751
+ }
752
+ },
753
+ "500": {
754
+ "description": "Internal Server Error",
755
+ "content": {
756
+ "application/json": {
757
+ "schema": {
758
+ "$ref": "#/components/schemas/Error"
759
+ }
760
+ }
761
+ }
762
+ }
763
+ }
764
+ }
765
+ }
766
+ },
767
+ "components": {
768
+ "securitySchemes": {
769
+ "EpilotAuth": {
770
+ "type": "http",
771
+ "scheme": "bearer",
772
+ "description": "Authorization header with epilot OAuth2 bearer token",
773
+ "bearerFormat": "JWT"
774
+ },
775
+ "EpilotOrg": {
776
+ "description": "Overrides the target organization to allow shared tenant access",
777
+ "name": "x-epilot-org-id",
778
+ "in": "header",
779
+ "type": "apiKey"
780
+ }
781
+ },
782
+ "parameters": {
783
+ "TemplateIdPathParam": {
784
+ "name": "id",
785
+ "in": "path",
786
+ "required": true,
787
+ "description": "Template ID (UUID)",
788
+ "schema": {
789
+ "type": "string",
790
+ "format": "uuid"
791
+ }
792
+ }
793
+ },
794
+ "schemas": {
795
+ "Error": {
796
+ "type": "object",
797
+ "properties": {
798
+ "message": {
799
+ "type": "string",
800
+ "description": "Error message"
801
+ },
802
+ "code": {
803
+ "type": "string",
804
+ "description": "Error code"
805
+ }
806
+ },
807
+ "required": [
808
+ "message"
809
+ ]
810
+ },
811
+ "EntityOperation": {
812
+ "type": "object",
813
+ "properties": {
814
+ "entity": {
815
+ "$ref": "#/components/schemas/EntityId"
816
+ },
817
+ "operation": {
818
+ "type": "string",
819
+ "example": "updateEntity"
820
+ },
821
+ "params": {
822
+ "type": "object",
823
+ "properties": {
824
+ "id": {
825
+ "$ref": "#/components/schemas/EntityId"
826
+ },
827
+ "slug": {
828
+ "$ref": "#/components/schemas/EntitySlug"
829
+ }
830
+ },
831
+ "example": {
832
+ "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
833
+ "slug": "contact"
834
+ }
835
+ },
836
+ "payload": {
837
+ "allOf": [
838
+ {
839
+ "$ref": "#/components/schemas/Entity"
840
+ },
841
+ {
842
+ "example": {
843
+ "_schema": "contact",
844
+ "_org": "123",
845
+ "status": "Inactive"
846
+ }
847
+ }
848
+ ]
849
+ }
850
+ },
851
+ "required": [
852
+ "entity",
853
+ "name"
854
+ ]
855
+ },
856
+ "NotificationItem": {
857
+ "allOf": [
858
+ {
859
+ "type": "object",
860
+ "properties": {
861
+ "id": {
862
+ "$ref": "#/components/schemas/Id"
863
+ },
864
+ "notification_id": {
865
+ "$ref": "#/components/schemas/NotificationId"
866
+ },
867
+ "timestamp": {
868
+ "type": "string",
869
+ "format": "date-time"
870
+ },
871
+ "read_state": {
872
+ "type": "boolean",
873
+ "example": false
874
+ }
875
+ }
876
+ },
877
+ {
878
+ "$ref": "#/components/schemas/NotificationBase"
879
+ },
880
+ {
881
+ "type": "object",
882
+ "properties": {
883
+ "caller": {
884
+ "$ref": "#/components/schemas/NotificationCallerContext"
885
+ }
886
+ }
887
+ },
888
+ {
889
+ "type": "object",
890
+ "properties": {
891
+ "operations": {
892
+ "type": "array",
893
+ "items": {
894
+ "$ref": "#/components/schemas/EntityOperation"
895
+ }
896
+ }
897
+ }
898
+ }
899
+ ]
900
+ },
901
+ "Notification": {
902
+ "allOf": [
903
+ {
904
+ "$ref": "#/components/schemas/NotificationBase"
905
+ },
906
+ {
907
+ "type": "object",
908
+ "properties": {
909
+ "read_state": {
910
+ "type": "boolean",
911
+ "example": false
912
+ },
913
+ "visibility_user_ids": {
914
+ "description": "The person who is the corresponding event recipient.",
915
+ "type": "array",
916
+ "items": {
917
+ "type": "string"
918
+ },
919
+ "example": [
920
+ "1",
921
+ "2",
922
+ "3",
923
+ "4",
924
+ "5"
925
+ ]
926
+ }
927
+ }
928
+ }
929
+ ]
930
+ },
931
+ "NotificationBase": {
932
+ "type": "object",
933
+ "properties": {
934
+ "notification_id": {
935
+ "type": "number"
936
+ },
937
+ "timestamp": {
938
+ "type": "string",
939
+ "format": "date-time"
940
+ },
941
+ "type": {
942
+ "description": "Type of notification",
943
+ "type": "string",
944
+ "example": "workflow"
945
+ },
946
+ "redirect_url": {
947
+ "description": "Redirect url",
948
+ "type": "string",
949
+ "example": "https://epilot.cloud"
950
+ },
951
+ "organization_id": {
952
+ "description": "Organization Id",
953
+ "type": "string",
954
+ "example": "206801"
955
+ },
956
+ "title": {
957
+ "type": "object",
958
+ "properties": {
959
+ "en": {
960
+ "type": "string",
961
+ "description": "Title for notification. Supports handlebars syntax.",
962
+ "example": "My custom notification"
963
+ },
964
+ "de": {
965
+ "type": "string",
966
+ "description": "Title for notification. Supports handlebars syntax.",
967
+ "example": "Meine benutzerdefinierte Aktivität"
968
+ }
969
+ }
970
+ },
971
+ "message": {
972
+ "type": "object",
973
+ "properties": {
974
+ "en": {
975
+ "type": "string",
976
+ "description": "Message for notification. Supports handlebars syntax.",
977
+ "example": "{{caller}} did something with {{contact.entity.id}} {{branch.name}}."
978
+ },
979
+ "de": {
980
+ "type": "string",
981
+ "description": "Message for notification. Supports handlebars syntax.",
982
+ "example": "{{caller}} habe etwas damit gemacht {{contact.entity.id}} {{branch.name}}."
983
+ }
984
+ }
985
+ },
986
+ "payload": {
987
+ "type": "object",
988
+ "properties": {},
989
+ "additionalProperties": true,
990
+ "example": {
991
+ "entity": {
992
+ "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
993
+ "schema": "contact"
994
+ }
995
+ }
996
+ },
997
+ "caller": {
998
+ "$ref": "#/components/schemas/NotificationCallerContext"
999
+ },
1000
+ "operations": {
1001
+ "type": "array",
1002
+ "items": {
1003
+ "$ref": "#/components/schemas/EntityOperation"
1004
+ }
1005
+ },
1006
+ "force_notify_users": {
1007
+ "type": "object",
1008
+ "properties": {},
1009
+ "additionalProperties": true,
1010
+ "example": {
1011
+ "12345": {
1012
+ "email": false,
1013
+ "in_app": false
1014
+ }
1015
+ }
1016
+ }
1017
+ },
1018
+ "required": [
1019
+ "type",
1020
+ "title",
1021
+ "message"
1022
+ ]
1023
+ },
1024
+ "EntityId": {
1025
+ "type": "string",
1026
+ "format": "uuid"
1027
+ },
1028
+ "Entity": {
1029
+ "type": "object",
1030
+ "properties": {},
1031
+ "additionalProperties": true
1032
+ },
1033
+ "Id": {
1034
+ "type": "number",
1035
+ "example": 123456789
1036
+ },
1037
+ "NotificationId": {
1038
+ "type": "number",
1039
+ "example": 123456789
1040
+ },
1041
+ "NotificationCallerContext": {
1042
+ "type": "object",
1043
+ "additionalProperties": true,
1044
+ "properties": {
1045
+ "EpilotAuth": {
1046
+ "type": "object",
1047
+ "properties": {
1048
+ "token": {
1049
+ "type": "object",
1050
+ "properties": {
1051
+ "sub": {
1052
+ "type": "string",
1053
+ "example": "476e9b48-42f4-4234-a2b0-4668b34626ce"
1054
+ },
1055
+ "email": {
1056
+ "type": "string",
1057
+ "example": "example@epilot.cloud"
1058
+ },
1059
+ "cognito:username": {
1060
+ "type": "string",
1061
+ "example": "example@epilot.cloud"
1062
+ },
1063
+ "custom:ivy_user_id": {
1064
+ "type": "string",
1065
+ "example": "10006129"
1066
+ }
1067
+ },
1068
+ "example": {
1069
+ "sub": "476e9b48-42f4-4234-a2b0-4668b34626ce",
1070
+ "cognito:groups": [
1071
+ "Administrator"
1072
+ ],
1073
+ "cognito:preferred_role": "arn:aws:iam::912468240823:role/base-administrator-role",
1074
+ "iss": "https://cognito-idp.eu-central-1.amazonaws.com/eu-central-1_6lZSgmU6D",
1075
+ "custom:ivy_org_id": "739224",
1076
+ "cognito:username": "n.ahmad@epilot.cloud",
1077
+ "custom:ivy_user_id": "10006129",
1078
+ "cognito:roles": [
1079
+ "arn:aws:iam::912468240823:role/base-administrator-role"
1080
+ ],
1081
+ "aud": "6e0jbdnger7nmoktaaflarue1l",
1082
+ "event_id": "cd5f5583-d90c-4db5-8e99-5f5dd29a4d75",
1083
+ "token_use": "id",
1084
+ "auth_time": 1614333023,
1085
+ "exp": 1614336623,
1086
+ "iat": 1614333023,
1087
+ "email": "n.ahmad@epilot.cloud"
1088
+ }
1089
+ }
1090
+ }
1091
+ }
1092
+ }
1093
+ },
1094
+ "EntitySlug": {
1095
+ "description": "URL-friendly identifier for the entity schema",
1096
+ "type": "string",
1097
+ "example": "contact"
1098
+ },
1099
+ "EntityOwner": {
1100
+ "type": "object",
1101
+ "required": [
1102
+ "org_id",
1103
+ "user_id"
1104
+ ],
1105
+ "properties": {
1106
+ "org_id": {
1107
+ "type": "string",
1108
+ "description": "Organization ID"
1109
+ },
1110
+ "user_id": {
1111
+ "type": "string",
1112
+ "description": "User ID"
1113
+ }
1114
+ }
1115
+ },
1116
+ "EntityAcl": {
1117
+ "type": "object",
1118
+ "description": "Access control list",
1119
+ "properties": {
1120
+ "view": {
1121
+ "type": "array",
1122
+ "items": {
1123
+ "type": "string"
1124
+ }
1125
+ },
1126
+ "edit": {
1127
+ "type": "array",
1128
+ "items": {
1129
+ "type": "string"
1130
+ }
1131
+ },
1132
+ "delete": {
1133
+ "type": "array",
1134
+ "items": {
1135
+ "type": "string"
1136
+ }
1137
+ }
1138
+ }
1139
+ },
1140
+ "NotificationTemplate": {
1141
+ "type": "object",
1142
+ "required": [
1143
+ "_id",
1144
+ "_org",
1145
+ "_schema",
1146
+ "_title",
1147
+ "_created_at",
1148
+ "_updated_at"
1149
+ ],
1150
+ "properties": {
1151
+ "_id": {
1152
+ "type": "string",
1153
+ "format": "uuid",
1154
+ "description": "Unique identifier"
1155
+ },
1156
+ "_schema": {
1157
+ "type": "string",
1158
+ "description": "Entity schema type"
1159
+ },
1160
+ "_title": {
1161
+ "type": "string",
1162
+ "nullable": true,
1163
+ "description": "Display title"
1164
+ },
1165
+ "_org": {
1166
+ "type": "string",
1167
+ "description": "Organization ID"
1168
+ },
1169
+ "_tags": {
1170
+ "type": "array",
1171
+ "items": {
1172
+ "type": "string"
1173
+ },
1174
+ "nullable": true,
1175
+ "description": "Tags for categorization"
1176
+ },
1177
+ "_created_at": {
1178
+ "type": "string",
1179
+ "format": "date-time",
1180
+ "nullable": true,
1181
+ "description": "ISO timestamp of creation"
1182
+ },
1183
+ "_updated_at": {
1184
+ "type": "string",
1185
+ "format": "date-time",
1186
+ "nullable": true,
1187
+ "description": "ISO timestamp of last update"
1188
+ },
1189
+ "_manifest": {
1190
+ "type": "array",
1191
+ "description": "Manifest ID used to create/update the entity",
1192
+ "items": {
1193
+ "type": "string",
1194
+ "format": "uuid",
1195
+ "example": "123e4567-e89b-12d3-a456-426614174000"
1196
+ }
1197
+ },
1198
+ "_owners": {
1199
+ "type": "array",
1200
+ "items": {
1201
+ "$ref": "#/components/schemas/EntityOwner"
1202
+ },
1203
+ "description": "Entity owners",
1204
+ "readOnly": true
1205
+ },
1206
+ "_acl": {
1207
+ "allOf": [
1208
+ {
1209
+ "$ref": "#/components/schemas/EntityAcl"
1210
+ }
1211
+ ],
1212
+ "description": "Access control list",
1213
+ "readOnly": true
1214
+ },
1215
+ "name": {
1216
+ "type": "string",
1217
+ "description": "Internal template name"
1218
+ },
1219
+ "type": {
1220
+ "type": "string",
1221
+ "description": "Notification type key"
1222
+ },
1223
+ "notification_title": {
1224
+ "type": "string",
1225
+ "description": "Notification title (Lexical editor JSON, supports variables)"
1226
+ },
1227
+ "message": {
1228
+ "type": "string",
1229
+ "description": "Notification body (Lexical editor JSON, supports variables)"
1230
+ },
1231
+ "action_label": {
1232
+ "type": "string",
1233
+ "description": "CTA button text (supports variables)"
1234
+ },
1235
+ "action_url": {
1236
+ "type": "string",
1237
+ "description": "CTA button URL (supports variables)"
1238
+ },
1239
+ "style": {
1240
+ "type": "string",
1241
+ "description": "JSON string with style config"
1242
+ },
1243
+ "system_template": {
1244
+ "type": "boolean",
1245
+ "description": "Whether this is a system template",
1246
+ "readOnly": true
1247
+ },
1248
+ "created_by": {
1249
+ "type": "string",
1250
+ "description": "User ID who created the template",
1251
+ "readOnly": true
1252
+ },
1253
+ "updated_by": {
1254
+ "type": "string",
1255
+ "description": "User ID who last updated the template",
1256
+ "readOnly": true
1257
+ }
1258
+ }
1259
+ },
1260
+ "CreateNotificationTemplateInput": {
1261
+ "type": "object",
1262
+ "required": [
1263
+ "name",
1264
+ "type"
1265
+ ],
1266
+ "properties": {
1267
+ "name": {
1268
+ "type": "string",
1269
+ "description": "Internal template name (required)"
1270
+ },
1271
+ "type": {
1272
+ "type": "string",
1273
+ "description": "Notification type key (required)"
1274
+ },
1275
+ "notification_title": {
1276
+ "type": "string",
1277
+ "description": "Notification title (Lexical editor JSON, supports variables)"
1278
+ },
1279
+ "message": {
1280
+ "type": "string",
1281
+ "description": "Notification body (Lexical editor JSON, supports variables)"
1282
+ },
1283
+ "action_label": {
1284
+ "type": "string",
1285
+ "description": "CTA button text (supports variables)"
1286
+ },
1287
+ "action_url": {
1288
+ "type": "string",
1289
+ "description": "CTA button URL (supports variables)"
1290
+ },
1291
+ "style": {
1292
+ "type": "string",
1293
+ "description": "JSON string with style config"
1294
+ },
1295
+ "_title": {
1296
+ "type": "string",
1297
+ "description": "Display title"
1298
+ },
1299
+ "_tags": {
1300
+ "type": "array",
1301
+ "items": {
1302
+ "type": "string"
1303
+ },
1304
+ "description": "Tags for categorization"
1305
+ },
1306
+ "_manifest": {
1307
+ "type": "array",
1308
+ "description": "Manifest ID used to create/update the entity",
1309
+ "items": {
1310
+ "type": "string",
1311
+ "format": "uuid",
1312
+ "example": "123e4567-e89b-12d3-a456-426614174000"
1313
+ }
1314
+ }
1315
+ }
1316
+ },
1317
+ "UpdateNotificationTemplateInput": {
1318
+ "type": "object",
1319
+ "properties": {
1320
+ "name": {
1321
+ "type": "string",
1322
+ "description": "Internal template name"
1323
+ },
1324
+ "notification_title": {
1325
+ "type": "string",
1326
+ "description": "Notification title (Lexical editor JSON, supports variables)"
1327
+ },
1328
+ "message": {
1329
+ "type": "string",
1330
+ "description": "Notification body (Lexical editor JSON, supports variables)"
1331
+ },
1332
+ "action_label": {
1333
+ "type": "string",
1334
+ "description": "CTA button text (supports variables)"
1335
+ },
1336
+ "action_url": {
1337
+ "type": "string",
1338
+ "description": "CTA button URL (supports variables)"
1339
+ },
1340
+ "style": {
1341
+ "type": "string",
1342
+ "description": "JSON string with style config"
1343
+ },
1344
+ "_title": {
1345
+ "type": "string",
1346
+ "description": "Display title"
1347
+ },
1348
+ "_tags": {
1349
+ "type": "array",
1350
+ "items": {
1351
+ "type": "string"
1352
+ },
1353
+ "description": "Tags for categorization"
1354
+ },
1355
+ "_manifest": {
1356
+ "type": "array",
1357
+ "description": "Manifest ID used to create/update the entity",
1358
+ "items": {
1359
+ "type": "string",
1360
+ "format": "uuid",
1361
+ "example": "123e4567-e89b-12d3-a456-426614174000"
1362
+ }
1363
+ }
1364
+ }
1365
+ },
1366
+ "NotificationTemplateListResponse": {
1367
+ "type": "object",
1368
+ "properties": {
1369
+ "results": {
1370
+ "type": "array",
1371
+ "items": {
1372
+ "$ref": "#/components/schemas/NotificationTemplate"
1373
+ }
1374
+ },
1375
+ "hits": {
1376
+ "type": "integer",
1377
+ "description": "Total number of matching results"
1378
+ }
1379
+ }
1380
+ },
1381
+ "SendPreviewInput": {
1382
+ "type": "object",
1383
+ "required": [
1384
+ "template"
1385
+ ],
1386
+ "properties": {
1387
+ "template": {
1388
+ "$ref": "#/components/schemas/UpdateNotificationTemplateInput"
1389
+ },
1390
+ "context_ids": {
1391
+ "type": "object",
1392
+ "description": "Optional context IDs for variable replacement",
1393
+ "additionalProperties": {
1394
+ "type": "string"
1395
+ }
1396
+ }
1397
+ }
1398
+ },
1399
+ "SendPreviewResponse": {
1400
+ "type": "array",
1401
+ "description": "Array of results for each notification channel (email, in-app)",
1402
+ "items": {
1403
+ "type": "object",
1404
+ "required": [
1405
+ "success"
1406
+ ],
1407
+ "properties": {
1408
+ "success": {
1409
+ "type": "boolean",
1410
+ "description": "Whether this notification was sent successfully"
1411
+ },
1412
+ "data": {
1413
+ "description": "Result data"
1414
+ }
1415
+ }
1416
+ }
1417
+ }
1418
+ }
1419
+ },
1420
+ "servers": [
1421
+ {
1422
+ "url": "https://notification.sls.epilot.io"
1423
+ }
1424
+ ]
1425
+ }