@epilot/sdk 2.0.3 → 2.0.4

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