@epilot/sdk 2.3.0 → 2.3.1

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 (210) 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 +4493 -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 +5028 -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 +4619 -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 +15676 -0
  23. package/definitions/dashboard-runtime.json +1 -0
  24. package/definitions/dashboard.json +484 -0
  25. package/definitions/data-governance-runtime.json +1 -0
  26. package/definitions/data-governance.json +1126 -0
  27. package/definitions/deduplication-runtime.json +1 -0
  28. package/definitions/deduplication.json +314 -0
  29. package/definitions/design-runtime.json +1 -0
  30. package/definitions/design.json +1469 -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 +2777 -0
  35. package/definitions/email-template-runtime.json +1 -0
  36. package/definitions/email-template.json +1441 -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 +10474 -0
  41. package/definitions/environments-runtime.json +1 -0
  42. package/definitions/environments.json +363 -0
  43. package/definitions/event-catalog-runtime.json +1 -0
  44. package/definitions/event-catalog.json +1051 -0
  45. package/definitions/file-runtime.json +1 -0
  46. package/definitions/file.json +2842 -0
  47. package/definitions/iban-runtime.json +1 -0
  48. package/definitions/iban.json +132 -0
  49. package/definitions/integration-toolkit-runtime.json +1 -0
  50. package/definitions/integration-toolkit.json +7998 -0
  51. package/definitions/journey-runtime.json +1 -0
  52. package/definitions/journey.json +2603 -0
  53. package/definitions/kanban-runtime.json +1 -0
  54. package/definitions/kanban.json +1505 -0
  55. package/definitions/message-runtime.json +1 -0
  56. package/definitions/message.json +2862 -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 +1192 -0
  65. package/definitions/partner-directory-runtime.json +1 -0
  66. package/definitions/partner-directory.json +2284 -0
  67. package/definitions/permissions-runtime.json +1 -0
  68. package/definitions/permissions.json +1515 -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/sharing-runtime.json +1 -0
  78. package/definitions/sharing.json +956 -0
  79. package/definitions/submission-runtime.json +1 -0
  80. package/definitions/submission.json +313 -0
  81. package/definitions/targeting-runtime.json +1 -0
  82. package/definitions/targeting.json +1474 -0
  83. package/definitions/template-variables-runtime.json +1 -0
  84. package/definitions/template-variables.json +1416 -0
  85. package/definitions/user-runtime.json +1 -0
  86. package/definitions/user.json +2460 -0
  87. package/definitions/validation-rules-runtime.json +1 -0
  88. package/definitions/validation-rules.json +1491 -0
  89. package/definitions/webhooks-runtime.json +1 -0
  90. package/definitions/webhooks.json +1634 -0
  91. package/definitions/workflow-definition-runtime.json +1 -0
  92. package/definitions/workflow-definition.json +3302 -0
  93. package/definitions/workflow-runtime.json +1 -0
  94. package/definitions/workflow.json +4248 -0
  95. package/dist/README-KX4XC2HB.js +7 -0
  96. package/dist/README-PTYV6PQI.cjs +7 -0
  97. package/dist/apis/access-token.cjs +6 -6
  98. package/dist/apis/access-token.js +1 -1
  99. package/dist/apis/address-suggestions.cjs +6 -6
  100. package/dist/apis/address-suggestions.js +1 -1
  101. package/dist/apis/address.cjs +6 -6
  102. package/dist/apis/address.js +1 -1
  103. package/dist/apis/ai-agents.cjs +6 -6
  104. package/dist/apis/ai-agents.js +1 -1
  105. package/dist/apis/app.cjs +6 -6
  106. package/dist/apis/app.js +1 -1
  107. package/dist/apis/audit-logs.cjs +6 -6
  108. package/dist/apis/audit-logs.js +1 -1
  109. package/dist/apis/automation.cjs +6 -6
  110. package/dist/apis/automation.js +1 -1
  111. package/dist/apis/billing.cjs +6 -6
  112. package/dist/apis/billing.js +1 -1
  113. package/dist/apis/blueprint-manifest.cjs +6 -6
  114. package/dist/apis/blueprint-manifest.js +1 -1
  115. package/dist/apis/consent.cjs +6 -6
  116. package/dist/apis/consent.js +1 -1
  117. package/dist/apis/customer-portal.cjs +6 -6
  118. package/dist/apis/customer-portal.js +1 -1
  119. package/dist/apis/dashboard.cjs +6 -6
  120. package/dist/apis/dashboard.js +1 -1
  121. package/dist/apis/data-governance.cjs +6 -6
  122. package/dist/apis/data-governance.js +1 -1
  123. package/dist/apis/deduplication.cjs +6 -6
  124. package/dist/apis/deduplication.js +1 -1
  125. package/dist/apis/design.cjs +6 -6
  126. package/dist/apis/design.js +1 -1
  127. package/dist/apis/document.cjs +6 -6
  128. package/dist/apis/document.js +1 -1
  129. package/dist/apis/email-settings.cjs +6 -6
  130. package/dist/apis/email-settings.js +1 -1
  131. package/dist/apis/email-template.cjs +6 -6
  132. package/dist/apis/email-template.js +1 -1
  133. package/dist/apis/entity-mapping.cjs +6 -6
  134. package/dist/apis/entity-mapping.js +1 -1
  135. package/dist/apis/entity.cjs +6 -6
  136. package/dist/apis/entity.js +1 -1
  137. package/dist/apis/environments.cjs +6 -6
  138. package/dist/apis/environments.js +1 -1
  139. package/dist/apis/erp-integration.cjs +6 -6
  140. package/dist/apis/erp-integration.js +1 -1
  141. package/dist/apis/event-catalog.cjs +6 -6
  142. package/dist/apis/event-catalog.js +1 -1
  143. package/dist/apis/file.cjs +6 -6
  144. package/dist/apis/file.js +1 -1
  145. package/dist/apis/iban.cjs +6 -6
  146. package/dist/apis/iban.js +1 -1
  147. package/dist/apis/integration-toolkit.cjs +6 -6
  148. package/dist/apis/integration-toolkit.js +1 -1
  149. package/dist/apis/journey.cjs +6 -6
  150. package/dist/apis/journey.js +1 -1
  151. package/dist/apis/kanban.cjs +6 -6
  152. package/dist/apis/kanban.js +1 -1
  153. package/dist/apis/message.cjs +6 -6
  154. package/dist/apis/message.js +1 -1
  155. package/dist/apis/metering.cjs +6 -6
  156. package/dist/apis/metering.js +1 -1
  157. package/dist/apis/notes.cjs +6 -6
  158. package/dist/apis/notes.js +1 -1
  159. package/dist/apis/notification.cjs +6 -6
  160. package/dist/apis/notification.js +1 -1
  161. package/dist/apis/organization.cjs +6 -6
  162. package/dist/apis/organization.js +1 -1
  163. package/dist/apis/partner-directory.cjs +6 -6
  164. package/dist/apis/partner-directory.js +1 -1
  165. package/dist/apis/permissions.cjs +6 -6
  166. package/dist/apis/permissions.js +1 -1
  167. package/dist/apis/pricing-tier.cjs +6 -6
  168. package/dist/apis/pricing-tier.js +1 -1
  169. package/dist/apis/pricing.cjs +6 -6
  170. package/dist/apis/pricing.js +1 -1
  171. package/dist/apis/purpose.cjs +6 -6
  172. package/dist/apis/purpose.js +1 -1
  173. package/dist/apis/sandbox.cjs +6 -6
  174. package/dist/apis/sandbox.js +1 -1
  175. package/dist/apis/sharing.cjs +6 -6
  176. package/dist/apis/sharing.js +1 -1
  177. package/dist/apis/submission.cjs +6 -6
  178. package/dist/apis/submission.js +1 -1
  179. package/dist/apis/targeting.cjs +6 -6
  180. package/dist/apis/targeting.js +1 -1
  181. package/dist/apis/template-variables.cjs +6 -6
  182. package/dist/apis/template-variables.js +1 -1
  183. package/dist/apis/user.cjs +6 -6
  184. package/dist/apis/user.d.cts +2 -2
  185. package/dist/apis/user.d.ts +2 -2
  186. package/dist/apis/user.js +1 -1
  187. package/dist/apis/validation-rules.cjs +6 -6
  188. package/dist/apis/validation-rules.js +1 -1
  189. package/dist/apis/webhooks.cjs +6 -6
  190. package/dist/apis/webhooks.js +1 -1
  191. package/dist/apis/workflow-definition.cjs +6 -6
  192. package/dist/apis/workflow-definition.js +1 -1
  193. package/dist/apis/workflow.cjs +6 -6
  194. package/dist/apis/workflow.js +1 -1
  195. package/dist/{chunk-6AO46HG5.js → chunk-QSEIJWJW.js} +2 -2
  196. package/dist/{chunk-MHXQX7FS.cjs → chunk-TKTSGA7G.cjs} +2 -2
  197. package/dist/index.cjs +8 -8
  198. package/dist/index.d.cts +1 -1
  199. package/dist/index.d.ts +1 -1
  200. package/dist/index.js +1 -1
  201. package/dist/user-7ZN2XO7G.cjs +7 -0
  202. package/dist/user-ZK7BK6VY.js +7 -0
  203. package/dist/{user.d-CXqM751M.d.cts → user.d-D18fe97W.d.cts} +75 -3
  204. package/dist/{user.d-CXqM751M.d.ts → user.d-D18fe97W.d.ts} +75 -3
  205. package/docs/user.md +62 -8
  206. package/package.json +1 -1
  207. package/dist/README-7R2JR652.js +0 -7
  208. package/dist/README-Z5AKTGJA.cjs +0 -7
  209. package/dist/user-EIEOI3OG.js +0 -7
  210. package/dist/user-NJJ7XVKB.cjs +0 -7
@@ -0,0 +1,1416 @@
1
+ {
2
+ "openapi": "3.0.2",
3
+ "info": {
4
+ "title": "Template Variables API",
5
+ "description": "This API provides dynamic template processing and variable management, seamless Handlebars template compilation, custom variable operations, and context-aware content generation across email, document templates and snippets.\n",
6
+ "version": "1.1.0"
7
+ },
8
+ "servers": [
9
+ {
10
+ "url": "https://template-variables-api.sls.epilot.io"
11
+ },
12
+ {
13
+ "url": "https://template-variables-api.dev.sls.epilot.io",
14
+ "description": "Production server"
15
+ }
16
+ ],
17
+ "tags": [
18
+ {
19
+ "name": "Templates",
20
+ "description": "Template-based Operations"
21
+ },
22
+ {
23
+ "name": "Custom Variables",
24
+ "description": "Custom Variables Operations"
25
+ }
26
+ ],
27
+ "security": [
28
+ {
29
+ "EpilotAuth": []
30
+ },
31
+ {
32
+ "EpilotOrg": []
33
+ }
34
+ ],
35
+ "paths": {
36
+ "/v1/template-variables/categories": {
37
+ "get": {
38
+ "operationId": "getCategories",
39
+ "summary": "getCategories",
40
+ "description": "Get all template variable categories",
41
+ "tags": [
42
+ "Templates"
43
+ ],
44
+ "parameters": [
45
+ {
46
+ "name": "lang",
47
+ "in": "query",
48
+ "schema": {
49
+ "$ref": "#/components/schemas/Language"
50
+ }
51
+ }
52
+ ],
53
+ "responses": {
54
+ "200": {
55
+ "description": "ok",
56
+ "content": {
57
+ "application/json": {
58
+ "schema": {
59
+ "type": "array",
60
+ "items": {
61
+ "$ref": "#/components/schemas/CategoryResult"
62
+ }
63
+ },
64
+ "example": [
65
+ {
66
+ "category": "contact",
67
+ "description": "Contact"
68
+ },
69
+ {
70
+ "category": "account",
71
+ "description": "Account"
72
+ },
73
+ {
74
+ "category": "organization",
75
+ "description": "Organization"
76
+ }
77
+ ]
78
+ }
79
+ }
80
+ }
81
+ }
82
+ }
83
+ },
84
+ "/v1/template-variables:search": {
85
+ "post": {
86
+ "operationId": "searchVariables",
87
+ "summary": "searchVariables",
88
+ "description": "Search variables",
89
+ "tags": [
90
+ "Templates"
91
+ ],
92
+ "requestBody": {
93
+ "content": {
94
+ "application/json": {
95
+ "schema": {
96
+ "type": "object",
97
+ "properties": {
98
+ "template_type": {
99
+ "$ref": "#/components/schemas/TemplateType"
100
+ },
101
+ "query": {
102
+ "type": "string",
103
+ "description": "Search string",
104
+ "example": "logo"
105
+ },
106
+ "from": {
107
+ "type": "integer",
108
+ "default": 0
109
+ },
110
+ "size": {
111
+ "type": "integer",
112
+ "default": 25
113
+ },
114
+ "lang": {
115
+ "$ref": "#/components/schemas/Language"
116
+ },
117
+ "entity_schemas": {
118
+ "type": "array",
119
+ "items": {
120
+ "type": "string",
121
+ "description": "Schema slug",
122
+ "example": "contact"
123
+ }
124
+ }
125
+ },
126
+ "required": [
127
+ "template_type",
128
+ "query"
129
+ ]
130
+ }
131
+ }
132
+ }
133
+ },
134
+ "responses": {
135
+ "200": {
136
+ "description": "ok",
137
+ "content": {
138
+ "application/json": {
139
+ "schema": {
140
+ "type": "array",
141
+ "items": {
142
+ "$ref": "#/components/schemas/VariableResult"
143
+ }
144
+ },
145
+ "example": [
146
+ {
147
+ "group": "Personal Details",
148
+ "insert": "{{account.name}}",
149
+ "description": "Company name",
150
+ "type": "simple"
151
+ },
152
+ {
153
+ "group": "Personal Details",
154
+ "insert": "{{account.tax_id}}",
155
+ "description": "Tax ID",
156
+ "type": "simple"
157
+ },
158
+ {
159
+ "group": "Address details",
160
+ "qrdata": "{{account.address_details}}",
161
+ "description": "Address Details",
162
+ "type": "partial"
163
+ },
164
+ {
165
+ "group": "Address Details",
166
+ "insert": "{{account.address.street}}",
167
+ "description": "Address - Street name",
168
+ "type": "simple"
169
+ },
170
+ {
171
+ "group": "Address Details",
172
+ "insert": "{{account.address.street_number}}",
173
+ "description": "Address - Street number",
174
+ "type": "simple"
175
+ },
176
+ {
177
+ "group": "Address Details",
178
+ "insert": "{{account.address.postal_code}}",
179
+ "description": "Address - Postal code",
180
+ "type": "simple"
181
+ },
182
+ {
183
+ "group": "Address Details",
184
+ "insert": "{{account.address.city}}",
185
+ "description": "Address - City",
186
+ "type": "simple"
187
+ }
188
+ ]
189
+ }
190
+ }
191
+ }
192
+ }
193
+ }
194
+ },
195
+ "/v1/template-variables:context": {
196
+ "post": {
197
+ "operationId": "getVariableContext",
198
+ "summary": "getVariableContext",
199
+ "description": "Get full variable context\n\nCalls Entity API, User API, Brand API and others to construct full context object used for template variable replace\n",
200
+ "tags": [
201
+ "Templates"
202
+ ],
203
+ "requestBody": {
204
+ "content": {
205
+ "application/json": {
206
+ "schema": {
207
+ "type": "object",
208
+ "properties": {
209
+ "parameters": {
210
+ "$ref": "#/components/schemas/VariableParameters"
211
+ }
212
+ }
213
+ }
214
+ }
215
+ }
216
+ },
217
+ "responses": {
218
+ "200": {
219
+ "description": "ok",
220
+ "content": {
221
+ "application/json": {
222
+ "schema": {
223
+ "$ref": "#/components/schemas/VariableContext"
224
+ }
225
+ }
226
+ }
227
+ }
228
+ }
229
+ }
230
+ },
231
+ "/v1/template-variables:replace": {
232
+ "post": {
233
+ "operationId": "replaceTemplates",
234
+ "summary": "replaceTemplates",
235
+ "description": "Replace variables in handlebars templates\n\nTakes in an array of input templates and outputs the output text with replaced variables\n",
236
+ "tags": [
237
+ "Templates"
238
+ ],
239
+ "requestBody": {
240
+ "content": {
241
+ "application/json": {
242
+ "schema": {
243
+ "type": "object",
244
+ "properties": {
245
+ "inputs": {
246
+ "type": "array",
247
+ "items": {
248
+ "type": "string",
249
+ "example": "Hello, {{contact.first_name}}!\n\n{{{brand.signature}}}\n"
250
+ }
251
+ },
252
+ "parameters": {
253
+ "$ref": "#/components/schemas/VariableParameters"
254
+ }
255
+ }
256
+ }
257
+ }
258
+ }
259
+ },
260
+ "responses": {
261
+ "200": {
262
+ "description": "ok",
263
+ "content": {
264
+ "application/json": {
265
+ "schema": {
266
+ "$ref": "#/components/schemas/ReplacementOutput"
267
+ }
268
+ }
269
+ }
270
+ }
271
+ }
272
+ }
273
+ },
274
+ "/v2/template:replace": {
275
+ "post": {
276
+ "operationId": "replaceTemplatesV2",
277
+ "summary": "Replace variables in templates (V2)",
278
+ "description": "Replace variables in handlebars templates with raw value preservation\n\nV2 returns parsed outputs that preserve the original data types (arrays, objects, strings)\ninstead of stringifying always. Variables with strings mixed with other variables will be returned in the stringified format. \nAlongside the parsed outputs for every single variable.\n\nTakes in an array of input templates and outputs an object mapping each input and variable\nto their rendered values with type preservation.\n",
279
+ "tags": [
280
+ "Templates"
281
+ ],
282
+ "requestBody": {
283
+ "content": {
284
+ "application/json": {
285
+ "schema": {
286
+ "type": "object",
287
+ "properties": {
288
+ "inputs": {
289
+ "type": "array",
290
+ "items": {
291
+ "type": "string",
292
+ "example": "Hello, {{contact.first_name}}!\n"
293
+ }
294
+ },
295
+ "parameters": {
296
+ "$ref": "#/components/schemas/VariableParameters"
297
+ }
298
+ }
299
+ }
300
+ }
301
+ }
302
+ },
303
+ "responses": {
304
+ "200": {
305
+ "description": "ok",
306
+ "content": {
307
+ "application/json": {
308
+ "schema": {
309
+ "$ref": "#/components/schemas/ReplacementOutputV2"
310
+ }
311
+ }
312
+ }
313
+ }
314
+ }
315
+ }
316
+ },
317
+ "/v1/custom-variables": {
318
+ "get": {
319
+ "operationId": "getCustomVariables",
320
+ "summary": "Get custom variables",
321
+ "description": "Get all custom variables of organization",
322
+ "tags": [
323
+ "Custom Variables"
324
+ ],
325
+ "responses": {
326
+ "200": {
327
+ "description": "Success",
328
+ "content": {
329
+ "application/json": {
330
+ "schema": {
331
+ "type": "array",
332
+ "items": {
333
+ "$ref": "#/components/schemas/CustomVariable"
334
+ }
335
+ }
336
+ }
337
+ }
338
+ },
339
+ "403": {
340
+ "description": "Forbidden"
341
+ }
342
+ }
343
+ },
344
+ "post": {
345
+ "operationId": "createCustomVariable",
346
+ "summary": "Create custom variable",
347
+ "description": "Create custom variable",
348
+ "tags": [
349
+ "Custom Variables"
350
+ ],
351
+ "requestBody": {
352
+ "content": {
353
+ "application/json": {
354
+ "schema": {
355
+ "$ref": "#/components/schemas/CustomVariable"
356
+ }
357
+ }
358
+ }
359
+ },
360
+ "responses": {
361
+ "201": {
362
+ "description": "Success",
363
+ "content": {
364
+ "application/json": {
365
+ "schema": {
366
+ "$ref": "#/components/schemas/CustomVariable"
367
+ }
368
+ }
369
+ }
370
+ },
371
+ "403": {
372
+ "description": "Forbidden"
373
+ },
374
+ "409": {
375
+ "description": "Conflict - Custom variable with the same key already exists"
376
+ }
377
+ }
378
+ }
379
+ },
380
+ "/v1/custom-variables:search": {
381
+ "post": {
382
+ "operationId": "searchCustomVariables",
383
+ "summary": "searchCustomVariables",
384
+ "description": "Search custom variables",
385
+ "tags": [
386
+ "Custom Variables"
387
+ ],
388
+ "requestBody": {
389
+ "content": {
390
+ "application/json": {
391
+ "schema": {
392
+ "$ref": "#/components/schemas/CustomVariablesSearchParams"
393
+ }
394
+ }
395
+ }
396
+ },
397
+ "responses": {
398
+ "200": {
399
+ "description": "Success",
400
+ "content": {
401
+ "application/json": {
402
+ "schema": {
403
+ "type": "object",
404
+ "properties": {
405
+ "results": {
406
+ "type": "array",
407
+ "items": {
408
+ "$ref": "#/components/schemas/CustomVariable"
409
+ }
410
+ },
411
+ "hits": {
412
+ "type": "integer",
413
+ "description": "Total number of results",
414
+ "example": 100
415
+ }
416
+ }
417
+ }
418
+ }
419
+ }
420
+ },
421
+ "403": {
422
+ "description": "Forbidden"
423
+ }
424
+ }
425
+ }
426
+ },
427
+ "/v1/custom-variables/{id}": {
428
+ "put": {
429
+ "operationId": "updateCustomVariable",
430
+ "summary": "Update custom variable",
431
+ "description": "Update custom variable",
432
+ "tags": [
433
+ "Custom Variables"
434
+ ],
435
+ "parameters": [
436
+ {
437
+ "name": "id",
438
+ "description": "Custom variable ID",
439
+ "in": "path",
440
+ "required": true,
441
+ "schema": {
442
+ "type": "string"
443
+ },
444
+ "example": "rbse777b-3cf8-4bff-bb0c-253fd1123250"
445
+ }
446
+ ],
447
+ "requestBody": {
448
+ "content": {
449
+ "application/json": {
450
+ "schema": {
451
+ "$ref": "#/components/schemas/CustomVariable"
452
+ }
453
+ }
454
+ }
455
+ },
456
+ "responses": {
457
+ "200": {
458
+ "description": "Success",
459
+ "content": {
460
+ "application/json": {
461
+ "schema": {
462
+ "$ref": "#/components/schemas/CustomVariable"
463
+ }
464
+ }
465
+ }
466
+ },
467
+ "403": {
468
+ "description": "Forbidden"
469
+ },
470
+ "409": {
471
+ "description": "Conflict - Custom variable with the same key already exists"
472
+ }
473
+ }
474
+ },
475
+ "get": {
476
+ "operationId": "getCustomVariable",
477
+ "summary": "Get custom variable",
478
+ "description": "Get custom variable",
479
+ "tags": [
480
+ "Custom Variables"
481
+ ],
482
+ "parameters": [
483
+ {
484
+ "name": "id",
485
+ "description": "Custom vairable ID",
486
+ "in": "path",
487
+ "required": true,
488
+ "schema": {
489
+ "type": "string"
490
+ },
491
+ "example": "rbse777b-3cf8-4bff-bb0c-253fd1123250"
492
+ }
493
+ ],
494
+ "responses": {
495
+ "200": {
496
+ "description": "Success",
497
+ "content": {
498
+ "application/json": {
499
+ "schema": {
500
+ "$ref": "#/components/schemas/CustomVariable"
501
+ }
502
+ }
503
+ }
504
+ },
505
+ "403": {
506
+ "description": "Forbidden"
507
+ },
508
+ "404": {
509
+ "description": "Not found"
510
+ }
511
+ }
512
+ },
513
+ "delete": {
514
+ "operationId": "deleteCustomVariable",
515
+ "summary": "Delete custom variable",
516
+ "description": "Immediately and permanently deletes a custom variable",
517
+ "tags": [
518
+ "Custom Variables"
519
+ ],
520
+ "parameters": [
521
+ {
522
+ "name": "id",
523
+ "description": "Custom vairable ID",
524
+ "in": "path",
525
+ "required": true,
526
+ "schema": {
527
+ "type": "string"
528
+ },
529
+ "example": "rbse777b-3cf8-4bff-bb0c-253fd1123250"
530
+ }
531
+ ],
532
+ "responses": {
533
+ "204": {
534
+ "description": "Success"
535
+ },
536
+ "403": {
537
+ "description": "Forbidden"
538
+ }
539
+ }
540
+ }
541
+ },
542
+ "/v1/custom-variables/order-table-blueprint": {
543
+ "get": {
544
+ "operationId": "getBluePrintTableConfig",
545
+ "summary": "Get default table config",
546
+ "description": "Get default table config",
547
+ "tags": [
548
+ "Custom Variables"
549
+ ],
550
+ "responses": {
551
+ "200": {
552
+ "description": "Success",
553
+ "content": {
554
+ "application/json": {
555
+ "schema": {
556
+ "$ref": "#/components/schemas/CustomVariable"
557
+ }
558
+ }
559
+ }
560
+ },
561
+ "403": {
562
+ "description": "Forbidden"
563
+ }
564
+ }
565
+ }
566
+ }
567
+ },
568
+ "components": {
569
+ "securitySchemes": {
570
+ "EpilotAuth": {
571
+ "type": "http",
572
+ "scheme": "bearer",
573
+ "description": "Authorization header with epilot OAuth2 bearer token",
574
+ "bearerFormat": "JWT"
575
+ },
576
+ "EpilotOrg": {
577
+ "description": "Overrides the target organization",
578
+ "name": "x-ivy-org-id",
579
+ "in": "header",
580
+ "type": "apiKey"
581
+ }
582
+ },
583
+ "schemas": {
584
+ "Language": {
585
+ "type": "string",
586
+ "description": "2-letter language code (ISO 639-1)",
587
+ "default": "de"
588
+ },
589
+ "VariableParameters": {
590
+ "type": "object",
591
+ "properties": {
592
+ "template_type": {
593
+ "$ref": "#/components/schemas/TemplateType"
594
+ },
595
+ "language": {
596
+ "$ref": "#/components/schemas/Language"
597
+ },
598
+ "main_entity_id": {
599
+ "type": "string",
600
+ "format": "uuid",
601
+ "description": "The main entity ID. Use main entity in order to use the variable without schema slug prefix - or just pass directly to other object ID.",
602
+ "example": "63753437-c9e2-4e83-82bb-b1c666514561"
603
+ },
604
+ "brand_id": {
605
+ "type": "number",
606
+ "nullable": true,
607
+ "description": "Brand ID",
608
+ "example": 123451
609
+ },
610
+ "user_id": {
611
+ "type": "string",
612
+ "nullable": true,
613
+ "description": "User ID",
614
+ "example": "50001"
615
+ },
616
+ "user_org_id": {
617
+ "type": "string",
618
+ "nullable": true,
619
+ "description": "Organization ID of the user",
620
+ "example": "729224"
621
+ },
622
+ "custom_variables": {
623
+ "type": "array",
624
+ "description": "Custom variables with specified values form other services.",
625
+ "items": {
626
+ "$ref": "#/components/schemas/ExternalCustomVariable"
627
+ }
628
+ },
629
+ "context_data": {
630
+ "type": "object",
631
+ "description": "If context data is available, this data will be used for variable replace."
632
+ },
633
+ "template_name": {
634
+ "type": "string",
635
+ "description": "The name of email template"
636
+ },
637
+ "template_tags": {
638
+ "type": "array",
639
+ "description": "The tags of email template",
640
+ "items": {
641
+ "type": "string"
642
+ }
643
+ },
644
+ "template_id": {
645
+ "type": "string",
646
+ "description": "The Id of email template"
647
+ },
648
+ "variables_version": {
649
+ "type": "string",
650
+ "description": "The version of the variables syntax supported. Default is 1.0",
651
+ "example": "2"
652
+ }
653
+ },
654
+ "required": [
655
+ "template_type"
656
+ ]
657
+ },
658
+ "ReplacementOutput": {
659
+ "type": "object",
660
+ "properties": {
661
+ "outputs": {
662
+ "type": "array",
663
+ "items": {
664
+ "type": "string"
665
+ },
666
+ "example": [
667
+ "[Brand Name GmbH] Order confirmation\nHello Customer Name\n\n<span color=\"#ccc\">Brand Name GmbH</span>\n<img src=\"https://logobucket.s3.amazonaws.com/brandlogo.png\" alt=\"Brand Name\"/>\n<a href=\"https://company.com/imprint\">imprint</a>\n"
668
+ ]
669
+ }
670
+ }
671
+ },
672
+ "ReplacementOutputV2": {
673
+ "type": "object",
674
+ "properties": {
675
+ "outputs": {
676
+ "type": "object",
677
+ "description": "Dictionary mapping input templates and variable names to their resolved output values.\nValues preserve their original types (string, array, object) instead of being stringified.\n\nKeys include:\n- Original input templates (e.g., \"Hello {{name}}\")\n- Individual variables found in templates (e.g., \"{{name}}\", \"{{product_images[*].public_url}}\")\n",
678
+ "additionalProperties": {
679
+ "anyOf": [
680
+ {
681
+ "type": "string"
682
+ },
683
+ {
684
+ "type": "number"
685
+ },
686
+ {
687
+ "type": "boolean"
688
+ },
689
+ {
690
+ "type": "array",
691
+ "items": {}
692
+ },
693
+ {
694
+ "type": "object",
695
+ "additionalProperties": {}
696
+ }
697
+ ]
698
+ },
699
+ "example": {
700
+ "Hello {{first_name}}": "Hello John",
701
+ "{{first_name}}": "John",
702
+ "{{product_images[*].public_url}}": [
703
+ "http://myimage.server.com/img1.png",
704
+ "http://myimage.server.com/img2.png"
705
+ ]
706
+ }
707
+ }
708
+ }
709
+ },
710
+ "VariableResult": {
711
+ "type": "object",
712
+ "properties": {
713
+ "type": {
714
+ "type": "string",
715
+ "enum": [
716
+ "simple",
717
+ "partial"
718
+ ]
719
+ },
720
+ "qrdata": {
721
+ "type": "string",
722
+ "description": "Payload for the QR data"
723
+ },
724
+ "group": {
725
+ "type": "string",
726
+ "description": "Variable group"
727
+ },
728
+ "insert": {
729
+ "type": "string",
730
+ "description": "The value which is used to insert to template"
731
+ },
732
+ "description": {
733
+ "type": "string",
734
+ "description": "Variable description"
735
+ }
736
+ }
737
+ },
738
+ "CustomVariablesSearchParams": {
739
+ "type": "object",
740
+ "properties": {
741
+ "type": {
742
+ "type": "string",
743
+ "description": "Variable type",
744
+ "enum": [
745
+ "order_table",
746
+ "custom",
747
+ "journey_link",
748
+ "snippet"
749
+ ]
750
+ },
751
+ "tags": {
752
+ "type": "array",
753
+ "description": "The tags of custom variable",
754
+ "items": {
755
+ "type": "string"
756
+ }
757
+ },
758
+ "query": {
759
+ "type": "string",
760
+ "description": "Search string",
761
+ "example": "logo"
762
+ },
763
+ "from": {
764
+ "type": "integer",
765
+ "default": 0
766
+ },
767
+ "size": {
768
+ "type": "integer",
769
+ "default": 25
770
+ },
771
+ "sort_by": {
772
+ "type": "string",
773
+ "description": "Sort by field",
774
+ "example": "created_at, name, key"
775
+ },
776
+ "fields": {
777
+ "type": "array",
778
+ "description": "Fields to return",
779
+ "items": {
780
+ "type": "string"
781
+ }
782
+ }
783
+ }
784
+ },
785
+ "VariableContext": {
786
+ "type": "object",
787
+ "properties": {
788
+ "unsubscribe_url": {
789
+ "type": "string",
790
+ "example": "https://consent.sls.epilot.io/v1/unsubscribe?token=abc123"
791
+ },
792
+ "main": {
793
+ "type": "object",
794
+ "additionalProperties": true,
795
+ "example": {
796
+ "_id": "03be777b-3cf8-4bff-bb0c-253fd1128479",
797
+ "_title": "Example Customer",
798
+ "customer_number": 123,
799
+ "first_name": "Example",
800
+ "last_name": "Customer",
801
+ "title": "Prof.",
802
+ "salutation": "Ms. / Mrs.",
803
+ "birthdate": "2018-03-03",
804
+ "email": [
805
+ {
806
+ "email": "contact.primary@domain.com",
807
+ "_tags": [
808
+ "primary"
809
+ ]
810
+ },
811
+ {
812
+ "email": "sale@domain.com"
813
+ }
814
+ ],
815
+ "phone": [
816
+ {
817
+ "phone": "+49123456789",
818
+ "_tags": [
819
+ "primary",
820
+ "support"
821
+ ]
822
+ },
823
+ {
824
+ "phone": "+49504305025"
825
+ }
826
+ ],
827
+ "address": [
828
+ {
829
+ "_tags": [
830
+ "primary",
831
+ "delivery"
832
+ ],
833
+ "country": "Germany",
834
+ "city": "Köln",
835
+ "postal_code": "50825",
836
+ "street": "Im Mediapark",
837
+ "street_number": "8a",
838
+ "additional_info": "11th floor"
839
+ },
840
+ {
841
+ "_tags": [
842
+ "billing"
843
+ ],
844
+ "country": "Finland",
845
+ "city": "Köln",
846
+ "postal_code": "50670",
847
+ "street": "Im Mediapark",
848
+ "street_number": "8a",
849
+ "additional_info": ""
850
+ }
851
+ ],
852
+ "account": [
853
+ {
854
+ "status": "Active",
855
+ "_id": "c8d20ff6-df7a-465a-a26e-e5d28c2a3f79",
856
+ "tax_id": "123abc",
857
+ "name": "name",
858
+ "email": [
859
+ {
860
+ "email": "account.primary@domain.com",
861
+ "_tags": [
862
+ "primary"
863
+ ]
864
+ },
865
+ {
866
+ "email": "account.sale@domain.com"
867
+ }
868
+ ],
869
+ "phone": [
870
+ {
871
+ "phone": "+49123456789",
872
+ "_tags": [
873
+ "primary",
874
+ "support"
875
+ ]
876
+ },
877
+ {
878
+ "phone": "+49504305025"
879
+ }
880
+ ],
881
+ "address": [
882
+ {
883
+ "_tags": [
884
+ "primary",
885
+ "delivery"
886
+ ],
887
+ "country": "Germany",
888
+ "city": "Köln",
889
+ "postal_code": "50825",
890
+ "street": "Im Mediapark",
891
+ "street_number": "8a",
892
+ "additional_info": "11th floor"
893
+ }
894
+ ]
895
+ }
896
+ ]
897
+ }
898
+ },
899
+ "contact": {
900
+ "type": "object",
901
+ "additionalProperties": true,
902
+ "example": {
903
+ "_id": "03be777b-3cf8-4bff-bb0c-253fd1128479",
904
+ "_title": "Example Customer",
905
+ "customer_number": 123,
906
+ "first_name": "Example",
907
+ "last_name": "Customer",
908
+ "title": "Prof.",
909
+ "salutation": "Ms. / Mrs.",
910
+ "birthdate": "2018-03-03",
911
+ "email": [
912
+ {
913
+ "email": "contact.primary@domain.com",
914
+ "_tags": [
915
+ "primary"
916
+ ]
917
+ },
918
+ {
919
+ "email": "sale@domain.com"
920
+ }
921
+ ],
922
+ "phone": [
923
+ {
924
+ "phone": "+49123456789",
925
+ "_tags": [
926
+ "primary",
927
+ "support"
928
+ ]
929
+ },
930
+ {
931
+ "phone": "+49504305025"
932
+ }
933
+ ],
934
+ "address": [
935
+ {
936
+ "_tags": [
937
+ "primary",
938
+ "delivery"
939
+ ],
940
+ "country": "Germany",
941
+ "city": "Köln",
942
+ "postal_code": "50825",
943
+ "street": "Im Mediapark",
944
+ "street_number": "8a",
945
+ "additional_info": "11th floor"
946
+ },
947
+ {
948
+ "_tags": [
949
+ "billing"
950
+ ],
951
+ "country": "Finland",
952
+ "city": "Köln",
953
+ "postal_code": "50670",
954
+ "street": "Im Mediapark",
955
+ "street_number": "8a",
956
+ "additional_info": ""
957
+ }
958
+ ],
959
+ "account": [
960
+ {
961
+ "status": "Active",
962
+ "_id": "c8d20ff6-df7a-465a-a26e-e5d28c2a3f79",
963
+ "tax_id": "123abc",
964
+ "name": "name",
965
+ "email": [
966
+ {
967
+ "email": "account.primary@domain.com",
968
+ "_tags": [
969
+ "primary"
970
+ ]
971
+ },
972
+ {
973
+ "email": "account.sale@domain.com"
974
+ }
975
+ ],
976
+ "phone": [
977
+ {
978
+ "phone": "+49123456789",
979
+ "_tags": [
980
+ "primary",
981
+ "support"
982
+ ]
983
+ },
984
+ {
985
+ "phone": "+49504305025"
986
+ }
987
+ ],
988
+ "address": [
989
+ {
990
+ "_tags": [
991
+ "primary",
992
+ "delivery"
993
+ ],
994
+ "country": "Germany",
995
+ "city": "KölnSS",
996
+ "postal_code": "50825",
997
+ "street": "Im Mediapark",
998
+ "street_number": "8a",
999
+ "additional_info": "11th floor"
1000
+ }
1001
+ ]
1002
+ }
1003
+ ]
1004
+ }
1005
+ },
1006
+ "brand": {
1007
+ "type": "object",
1008
+ "additionalProperties": true,
1009
+ "example": {
1010
+ "id": 123453,
1011
+ "name": "Brand name",
1012
+ "signature": "Signature"
1013
+ }
1014
+ }
1015
+ }
1016
+ },
1017
+ "TemplateType": {
1018
+ "type": "string",
1019
+ "enum": [
1020
+ "email",
1021
+ "document"
1022
+ ]
1023
+ },
1024
+ "CategoryResult": {
1025
+ "type": "object",
1026
+ "properties": {
1027
+ "category": {
1028
+ "type": "string",
1029
+ "example": "contact"
1030
+ },
1031
+ "description": {
1032
+ "type": "string",
1033
+ "example": "Contact"
1034
+ }
1035
+ }
1036
+ },
1037
+ "ExternalCustomVariable": {
1038
+ "type": "object",
1039
+ "properties": {
1040
+ "variable": {
1041
+ "type": "string",
1042
+ "example": "{{craftsmen.invitation_link}}"
1043
+ },
1044
+ "value": {
1045
+ "type": "string",
1046
+ "example": "https://partner.epilot.cloud/activate-account?user_name=htny.pct%2Btet%40gmail.com&confirmation_code=EdXPRW19"
1047
+ }
1048
+ }
1049
+ },
1050
+ "CustomVariable": {
1051
+ "type": "object",
1052
+ "properties": {
1053
+ "id": {
1054
+ "type": "string",
1055
+ "description": "ID",
1056
+ "example": "rbse777b-3cf8-4bff-bb0c-253fd1123250"
1057
+ },
1058
+ "type": {
1059
+ "type": "string",
1060
+ "description": "Custom variable type",
1061
+ "enum": [
1062
+ "order_table",
1063
+ "custom",
1064
+ "journey_link",
1065
+ "snippet"
1066
+ ]
1067
+ },
1068
+ "name": {
1069
+ "type": "string",
1070
+ "description": "Custom variable name",
1071
+ "example": "My Custom table"
1072
+ },
1073
+ "key": {
1074
+ "type": "string",
1075
+ "description": "The key which is used for Handlebar variable syntax {{key}}",
1076
+ "example": "my_custom_table"
1077
+ },
1078
+ "_tags": {
1079
+ "type": "array",
1080
+ "description": "The tags of custom variable",
1081
+ "items": {
1082
+ "type": "string"
1083
+ }
1084
+ },
1085
+ "_manifest": {
1086
+ "type": "array",
1087
+ "description": "The manifest IDs associated with this custom variable",
1088
+ "items": {
1089
+ "type": "string"
1090
+ }
1091
+ },
1092
+ "helper_params": {
1093
+ "type": "array",
1094
+ "description": "The helper function parameter's names",
1095
+ "items": {
1096
+ "type": "string"
1097
+ },
1098
+ "example": [
1099
+ "param1",
1100
+ "param2"
1101
+ ]
1102
+ },
1103
+ "helper_logic": {
1104
+ "type": "string",
1105
+ "description": "The helper function logic",
1106
+ "example": "return param1 * param2;"
1107
+ },
1108
+ "config": {
1109
+ "type": "object",
1110
+ "description": "Variable configuration",
1111
+ "example": {
1112
+ "header": null,
1113
+ "style": {
1114
+ "color": "#222",
1115
+ "background": "#fff",
1116
+ "font-size": "16px",
1117
+ "font-family": "",
1118
+ "padding-bottom": "4px",
1119
+ "font-weight": "bold",
1120
+ "border": "none !important",
1121
+ "text-align": "left"
1122
+ },
1123
+ "columns": [
1124
+ {
1125
+ "id": "item",
1126
+ "index": 0,
1127
+ "label": {
1128
+ "en": "Item",
1129
+ "de": "Produkt"
1130
+ },
1131
+ "enable": true,
1132
+ "draggable": true,
1133
+ "style": {
1134
+ "padding-left": "10px",
1135
+ "max-width": "30%"
1136
+ }
1137
+ },
1138
+ {
1139
+ "id": "quantity",
1140
+ "index": 1,
1141
+ "label": {
1142
+ "en": "Quanity",
1143
+ "de": "Menge"
1144
+ },
1145
+ "enable": true,
1146
+ "draggable": true,
1147
+ "style": {
1148
+ "min-width": "60px",
1149
+ "width": "30%"
1150
+ }
1151
+ },
1152
+ {
1153
+ "id": "tax",
1154
+ "index": 2,
1155
+ "label": {
1156
+ "en": "Tax Rate",
1157
+ "de": "Steuerrate"
1158
+ },
1159
+ "enable": true,
1160
+ "draggable": true,
1161
+ "style": {
1162
+ "min-width": "60px",
1163
+ "width": "30%"
1164
+ }
1165
+ },
1166
+ {
1167
+ "id": "unit_amount",
1168
+ "index": 3,
1169
+ "label": {
1170
+ "en": "Unit Net Price",
1171
+ "de": "Nettopreis"
1172
+ },
1173
+ "enable": true,
1174
+ "draggable": true,
1175
+ "style": {
1176
+ "min-width": "60px",
1177
+ "width": "30%"
1178
+ }
1179
+ },
1180
+ {
1181
+ "id": "net_total",
1182
+ "index": 4,
1183
+ "label": {
1184
+ "en": "Net total",
1185
+ "de": "Nettosumme"
1186
+ },
1187
+ "enable": "true,",
1188
+ "draggable": true,
1189
+ "style": {
1190
+ "min-width": "60px",
1191
+ "width": "30%"
1192
+ }
1193
+ },
1194
+ {
1195
+ "id": "gross_total",
1196
+ "index": 5,
1197
+ "label": {
1198
+ "en": "Total",
1199
+ "de": "Gesamt"
1200
+ },
1201
+ "enable": true,
1202
+ "draggable": true,
1203
+ "style": {
1204
+ "min-width": "60px",
1205
+ "width": "30%"
1206
+ }
1207
+ }
1208
+ ],
1209
+ "body": {
1210
+ "product_name": {
1211
+ "parent_column": "item",
1212
+ "enable": true,
1213
+ "style": {
1214
+ "color": "#222",
1215
+ "background": "#fff",
1216
+ "font-size": "14px",
1217
+ "font-family": "",
1218
+ "font-weight": "bold",
1219
+ "font-style": "normal",
1220
+ "padding-top": "16px",
1221
+ "padding-bottom": "8px",
1222
+ "border": "none !important",
1223
+ "vertical-align": "top",
1224
+ "text-align": "left",
1225
+ "max-width": "30%",
1226
+ "padding-left": "10px"
1227
+ }
1228
+ },
1229
+ "price_description": {
1230
+ "parent_column": "item",
1231
+ "enable": true,
1232
+ "style": {
1233
+ "color": "#222",
1234
+ "background": "#fff",
1235
+ "font-size": "12px",
1236
+ "font-family": "",
1237
+ "font-weight": "normal",
1238
+ "font-style": "normal",
1239
+ "text-align": "left",
1240
+ "max-width": "30%"
1241
+ }
1242
+ },
1243
+ "product_description": {
1244
+ "parent_column": "item",
1245
+ "enable": true,
1246
+ "style": {
1247
+ "color": "#222",
1248
+ "background": "#fff",
1249
+ "font-size": "12px",
1250
+ "font-family": "",
1251
+ "font-weight": "normal",
1252
+ "font-style": "normal",
1253
+ "text-align": "left",
1254
+ "max-width": "30%"
1255
+ }
1256
+ },
1257
+ "quantity": {
1258
+ "enable": true,
1259
+ "style": {
1260
+ "color": "#222",
1261
+ "background": "#fff",
1262
+ "font-size": "12px",
1263
+ "font-family": "",
1264
+ "font-weight": "normal",
1265
+ "font-style": "normal",
1266
+ "text-align": "left",
1267
+ "max-width": "30%"
1268
+ }
1269
+ },
1270
+ "tax": {
1271
+ "enable": true,
1272
+ "style": {
1273
+ "color": "#222",
1274
+ "background": "#fff",
1275
+ "font-size": "12px",
1276
+ "font-family": "",
1277
+ "font-weight": "normal",
1278
+ "font-style": "normal",
1279
+ "text-align": "left",
1280
+ "max-width": "30%"
1281
+ }
1282
+ },
1283
+ "unit_amount": {
1284
+ "enable": true,
1285
+ "style": {
1286
+ "color": "#222",
1287
+ "background": "#fff",
1288
+ "font-size": "12px",
1289
+ "font-family": "",
1290
+ "font-weight": "normal",
1291
+ "font-style": "normal",
1292
+ "text-align": "left",
1293
+ "max-width": "30%"
1294
+ }
1295
+ },
1296
+ "net_total": {
1297
+ "enable": true,
1298
+ "style": {
1299
+ "color": "#222",
1300
+ "background": "#fff",
1301
+ "font-size": "12px",
1302
+ "font-family": "",
1303
+ "font-weight": "normal",
1304
+ "font-style": "normal",
1305
+ "text-align": "left",
1306
+ "max-width": "30%"
1307
+ }
1308
+ },
1309
+ "gross_total": {
1310
+ "enable": true,
1311
+ "style": {
1312
+ "color": "#222",
1313
+ "background": "#fff",
1314
+ "font-size": "12px",
1315
+ "font-family": "",
1316
+ "font-weight": "normal",
1317
+ "font-style": "normal",
1318
+ "text-align": "left",
1319
+ "max-width": "30%"
1320
+ }
1321
+ }
1322
+ },
1323
+ "footer": {
1324
+ "payment_type": {
1325
+ "enable": true,
1326
+ "style": {
1327
+ "color": "#222",
1328
+ "background": "#fff",
1329
+ "font-size": "12px",
1330
+ "font-family": "",
1331
+ "font-weight": "normal",
1332
+ "font-style": "normal",
1333
+ "text-align": "left",
1334
+ "max-width": "30%"
1335
+ }
1336
+ },
1337
+ "net_total": {
1338
+ "enable": true,
1339
+ "style": {
1340
+ "color": "#222",
1341
+ "background": "#fff",
1342
+ "font-size": "12px",
1343
+ "font-family": "",
1344
+ "font-weight": "normal",
1345
+ "font-style": "normal",
1346
+ "text-align": "left",
1347
+ "max-width": "30%"
1348
+ }
1349
+ },
1350
+ "amount_tax": {
1351
+ "enable": true,
1352
+ "style": {
1353
+ "color": "#222",
1354
+ "background": "#fff",
1355
+ "font-size": "12px",
1356
+ "font-family": "",
1357
+ "font-weight": "normal",
1358
+ "font-style": "normal",
1359
+ "text-align": "left",
1360
+ "max-width": "30%"
1361
+ }
1362
+ },
1363
+ "gross_total": {
1364
+ "enable": true,
1365
+ "style": {
1366
+ "color": "#222",
1367
+ "background": "#fff",
1368
+ "font-size": "12px",
1369
+ "font-family": "",
1370
+ "font-weight": "normal",
1371
+ "font-style": "normal",
1372
+ "text-align": "left",
1373
+ "max-width": "30%"
1374
+ }
1375
+ }
1376
+ }
1377
+ }
1378
+ },
1379
+ "template": {
1380
+ "type": "string",
1381
+ "description": "Handlebar template that used to generate the variable content",
1382
+ "example": "<table style=\"table-layout: fixed;width: 100%;max-width: 1000px;border-collapse: collapse;\">\n <thead>\n <tr style=\"height: 48px;border-bottom: 1px solid #D5E1ED;\">\n {{#each table_config.header.columns as |column|}}\n {{#if column.enable}}\n <th style=\"{{makeStyle @root.table_config.header.style}};{{makeStyle column.style}};\">{{column._label}}</th>\n {{/if}}\n {{/each}}\n </tr>\n </thead>\n <tbody style=\"vertical-align: baseline !important;font-weight: 400;font-size: 12px;position: relative;\">\n <!-- Start rendering products -->\n {{#each order.products as |product|}}\n {{#if @last}}\n <tr style=\"height: 48px;;font-size:14px;border-bottom: 1px solid #D5E1ED;\">\n {{else}}\n <tr style=\"height: 48px;;font-size:14px;\">\n {{/if}}\n {{#each @root.table_config.header.columns as |column|}}\n {{#if column.enable}}\n {{#if (eq column.id 'item')}}\n <!-- Item -->\n <td style=\"{{makeStyle @root.table_config.body.product_name.style}}\">\n {{#if @root.table_config.body.product_name.enable}}\n {{product.name}}\n {{/if}}\n {{#if @root.table_config.body.price_description.enable}}\n <br>\n <span style=\"{{makeStyle @root.table_config.body.price_description.style}}\">{{product.price.description}}</span>\n {{/if}}\n {{#if @root.table_config.body.product_description.enable}}\n <br>\n <span style=\"{{makeStyle @root.table_config.body.product_description.style}}\">{{product.description}}</span>\n {{/if}}\n </td>\n {{/if}}\n {{#if (eq column.id 'quantity')}}\n <!-- Quantity -->\n <td style=\"{{makeStyle @root.table_config.body.quantity.style}}\">{{product.price.quantity}}\n </td>\n {{/if}}\n {{#if (eq column.id 'tax')}}\n <!-- Tax -->\n <td style=\"{{makeStyle @root.table_config.body.tax.style}}\">\n {{product.price.tax_rate}}\n </td>\n {{/if}}\n {{#if (eq column.id 'unit_amount')}}\n <!-- Unit amount -->\n <td style=\"{{makeStyle @root.table_config.body.unit_amount.style}}\">\n {{product.price.unit_amount_net}}\n </td>\n {{/if}}\n {{#if (eq column.id 'net_total')}}\n <!-- Amount Subtotal -->\n <td style=\"{{makeStyle @root.table_config.body.net_total.style}}\">\n {{product.price.amount_subtotal}}\n </td>\n {{/if}}\n {{#if (eq column.id 'amount_tax')}}\n <!-- Tax amount-->\n <td style=\"{{makeStyle @root.table_config.body.amount_tax.style}}\">\n {{product.price.amount_tax}}\n </td>\n {{/if}}\n {{#if (eq column.id 'gross_total')}}\n <!-- Gross total -->\n <td style=\"{{makeStyle @root.table_config.body.gross_total.style}}\">\n {{product.price.amount_total}}\n {{#if @root.table_config.body.payment_type.enable}}\n {{#if (eq product.price.type 'recurring')}}\n <br>\n <span style=\"{{makeStyle @root.table_config.body.payment_type.style}}\">{{product.price.billing_period}}</span>\n {{/if}}\n {{/if}}\n </td>\n {{/if}}\n {{/if}}\n {{/each}}\n </tr>\n {{/each}}\n <!-- Finish rendering products -->\n {{#if table_config.footer.gross_total.enable}}\n {{#each order.total_details.recurrences as |item|}}\n <tr style=\"height: 48px;font-size: 14px;\">\n <td style=\"padding-top: 16px; padding-bottom: 8px; border: none !important; vertical-align: top;\" colspan=\"{{calculate_colspan @root.table_config}}\"></td>\n {{#if @root.table_config.footer.payment_type.enable}}\n <td style=\"{{makeStyle @root.table_config.footer.payment_type.style}}\" colspan=\"2\">{{item.billing_period}}</td>\n {{/if}}\n {{#if (isColumnEnabled @root.table_config 'net_total')}}\n {{#if @root.table_config.footer.net_total.enable}}\n <td style=\"{{makeStyle @root.table_config.footer.net_total.style}}\">{{item.amount_subtotal}}</td>\n {{/if}}\n {{/if}}\n <td style=\"{{makeStyle @root.table_config.footer.gross_total.style}}\">{{item.amount_total}}\n {{#if @root.table_config.footer.amount_tax.enable}}\n <br>\n <span style=\"{{makeStyle @root.table_config.footer.amount_tax.style}}\">{{item.full_amount_tax}}</span>\n {{/if}}\n </td>\n </tr>\n {{/each}}\n {{/if}}\n <tr style=\"height:16px !important;\"></tr>\n </tbody>\n</table>\n"
1383
+ },
1384
+ "created_at": {
1385
+ "type": "string",
1386
+ "description": "Creation time",
1387
+ "example": "2022-04-19T12:41:43.662Z",
1388
+ "readOnly": true
1389
+ },
1390
+ "created_by": {
1391
+ "type": "string",
1392
+ "description": "Created by",
1393
+ "example": "100042",
1394
+ "readOnly": true
1395
+ },
1396
+ "updated_at": {
1397
+ "type": "string",
1398
+ "description": "Last update time",
1399
+ "example": "2022-04-20T12:41:43.662Z",
1400
+ "readOnly": true
1401
+ },
1402
+ "updated_by": {
1403
+ "type": "string",
1404
+ "description": "Updated by",
1405
+ "example": "100042",
1406
+ "readOnly": true
1407
+ }
1408
+ },
1409
+ "required": [
1410
+ "key",
1411
+ "template"
1412
+ ]
1413
+ }
1414
+ }
1415
+ }
1416
+ }