@epilot/sdk 2.20.21 → 2.20.23

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 (150) hide show
  1. package/README.md +1 -0
  2. package/definitions/automation-runtime.json +1 -1
  3. package/definitions/automation.json +207 -2
  4. package/definitions/chat-runtime.json +1 -0
  5. package/definitions/chat.json +2909 -0
  6. package/dist/README-7F36AG5O.js +7 -0
  7. package/dist/README-I7JMAFA4.cjs +7 -0
  8. package/dist/{_index-D5TTZP5F.cjs → _index-655GNTWT.cjs} +4 -1
  9. package/dist/{_index-UY46ZN47.js → _index-6FK4PV6Y.js} +3 -0
  10. package/dist/apis/access-token.cjs +6 -6
  11. package/dist/apis/access-token.js +1 -1
  12. package/dist/apis/address-suggestions.cjs +6 -6
  13. package/dist/apis/address-suggestions.js +1 -1
  14. package/dist/apis/address.cjs +6 -6
  15. package/dist/apis/address.js +1 -1
  16. package/dist/apis/ai-agents.cjs +6 -6
  17. package/dist/apis/ai-agents.js +1 -1
  18. package/dist/apis/app.cjs +6 -6
  19. package/dist/apis/app.js +1 -1
  20. package/dist/apis/audit-logs.cjs +6 -6
  21. package/dist/apis/audit-logs.js +1 -1
  22. package/dist/apis/automation.cjs +8 -8
  23. package/dist/apis/automation.d.cts +2 -2
  24. package/dist/apis/automation.d.ts +2 -2
  25. package/dist/apis/automation.js +2 -2
  26. package/dist/apis/billing.cjs +6 -6
  27. package/dist/apis/billing.js +1 -1
  28. package/dist/apis/blueprint-manifest.cjs +6 -6
  29. package/dist/apis/blueprint-manifest.js +1 -1
  30. package/dist/apis/calendar.cjs +6 -6
  31. package/dist/apis/calendar.js +1 -1
  32. package/dist/apis/chat.cjs +38 -0
  33. package/dist/apis/chat.d.cts +18 -0
  34. package/dist/apis/chat.d.ts +18 -0
  35. package/dist/apis/chat.js +38 -0
  36. package/dist/apis/configuration-hub.cjs +6 -6
  37. package/dist/apis/configuration-hub.js +1 -1
  38. package/dist/apis/consent.cjs +6 -6
  39. package/dist/apis/consent.js +1 -1
  40. package/dist/apis/customer-portal.cjs +6 -6
  41. package/dist/apis/customer-portal.js +1 -1
  42. package/dist/apis/dashboard.cjs +6 -6
  43. package/dist/apis/dashboard.js +1 -1
  44. package/dist/apis/data-governance.cjs +6 -6
  45. package/dist/apis/data-governance.js +1 -1
  46. package/dist/apis/deduplication.cjs +6 -6
  47. package/dist/apis/deduplication.js +1 -1
  48. package/dist/apis/design.cjs +6 -6
  49. package/dist/apis/design.js +1 -1
  50. package/dist/apis/document.cjs +6 -6
  51. package/dist/apis/document.js +1 -1
  52. package/dist/apis/email-settings.cjs +6 -6
  53. package/dist/apis/email-settings.js +1 -1
  54. package/dist/apis/email-template.cjs +6 -6
  55. package/dist/apis/email-template.js +1 -1
  56. package/dist/apis/entity-mapping.cjs +6 -6
  57. package/dist/apis/entity-mapping.js +1 -1
  58. package/dist/apis/entity.cjs +6 -6
  59. package/dist/apis/entity.js +1 -1
  60. package/dist/apis/environments.cjs +6 -6
  61. package/dist/apis/environments.js +1 -1
  62. package/dist/apis/event-catalog.cjs +6 -6
  63. package/dist/apis/event-catalog.js +1 -1
  64. package/dist/apis/file.cjs +6 -6
  65. package/dist/apis/file.js +1 -1
  66. package/dist/apis/iban.cjs +6 -6
  67. package/dist/apis/iban.js +1 -1
  68. package/dist/apis/integration-toolkit.cjs +6 -6
  69. package/dist/apis/integration-toolkit.js +1 -1
  70. package/dist/apis/journey.cjs +6 -6
  71. package/dist/apis/journey.js +1 -1
  72. package/dist/apis/kanban.cjs +6 -6
  73. package/dist/apis/kanban.js +1 -1
  74. package/dist/apis/message.cjs +6 -6
  75. package/dist/apis/message.js +1 -1
  76. package/dist/apis/metering.cjs +6 -6
  77. package/dist/apis/metering.js +1 -1
  78. package/dist/apis/notes.cjs +6 -6
  79. package/dist/apis/notes.js +1 -1
  80. package/dist/apis/notification.cjs +6 -6
  81. package/dist/apis/notification.js +1 -1
  82. package/dist/apis/organization.cjs +6 -6
  83. package/dist/apis/organization.js +1 -1
  84. package/dist/apis/partner-directory.cjs +6 -6
  85. package/dist/apis/partner-directory.js +1 -1
  86. package/dist/apis/permissions.cjs +6 -6
  87. package/dist/apis/permissions.js +1 -1
  88. package/dist/apis/pricing-tier.cjs +6 -6
  89. package/dist/apis/pricing-tier.js +1 -1
  90. package/dist/apis/pricing.cjs +6 -6
  91. package/dist/apis/pricing.js +1 -1
  92. package/dist/apis/purpose.cjs +6 -6
  93. package/dist/apis/purpose.js +1 -1
  94. package/dist/apis/query.cjs +6 -6
  95. package/dist/apis/query.js +1 -1
  96. package/dist/apis/sandbox.cjs +6 -6
  97. package/dist/apis/sandbox.js +1 -1
  98. package/dist/apis/sharing.cjs +6 -6
  99. package/dist/apis/sharing.js +1 -1
  100. package/dist/apis/snapshot.cjs +6 -6
  101. package/dist/apis/snapshot.js +1 -1
  102. package/dist/apis/submission.cjs +6 -6
  103. package/dist/apis/submission.js +1 -1
  104. package/dist/apis/target.cjs +6 -6
  105. package/dist/apis/target.js +1 -1
  106. package/dist/apis/targeting.cjs +6 -6
  107. package/dist/apis/targeting.js +1 -1
  108. package/dist/apis/template-variables.cjs +6 -6
  109. package/dist/apis/template-variables.js +1 -1
  110. package/dist/apis/user.cjs +6 -6
  111. package/dist/apis/user.js +1 -1
  112. package/dist/apis/validation-rules.cjs +6 -6
  113. package/dist/apis/validation-rules.js +1 -1
  114. package/dist/apis/webhooks.cjs +6 -6
  115. package/dist/apis/webhooks.js +1 -1
  116. package/dist/apis/workflow-definition.cjs +6 -6
  117. package/dist/apis/workflow-definition.js +1 -1
  118. package/dist/apis/workflow.cjs +6 -6
  119. package/dist/apis/workflow.js +1 -1
  120. package/dist/automation-CDMOEYVP.cjs +7 -0
  121. package/dist/automation-XFMSH7Y3.js +7 -0
  122. package/dist/{automation-runtime-RM5EOZH2.cjs → automation-runtime-KLCXZKEC.cjs} +2 -2
  123. package/dist/{automation-runtime-ORW5BVCD.js → automation-runtime-Y52HM57N.js} +1 -1
  124. package/dist/{automation.d-Bp45eKlU.d.cts → automation.d-2biAmiMc.d.cts} +214 -6
  125. package/dist/{automation.d-Bp45eKlU.d.ts → automation.d-2biAmiMc.d.ts} +214 -6
  126. package/dist/chat-5EOD2OPN.cjs +7 -0
  127. package/dist/chat-D5KXPRYY.js +7 -0
  128. package/dist/chat-runtime-MF35HI2U.js +5 -0
  129. package/dist/chat-runtime-MYMUFT3Y.cjs +5 -0
  130. package/dist/chat.d-CQ5eRtNU.d.cts +1544 -0
  131. package/dist/chat.d-CQ5eRtNU.d.ts +1544 -0
  132. package/dist/chunk-6ZTP7EQE.js +14 -0
  133. package/dist/chunk-A5THJ4SF.cjs +14 -0
  134. package/dist/{chunk-6LUOXPO4.js → chunk-KZXOYL5D.js} +6 -4
  135. package/dist/chunk-QW3ROE6H.js +14 -0
  136. package/dist/chunk-WOUASZJW.cjs +14 -0
  137. package/dist/{chunk-CKLXVVGF.cjs → chunk-YCTBOY3T.cjs} +6 -4
  138. package/dist/index.cjs +27 -19
  139. package/dist/index.d.cts +85 -83
  140. package/dist/index.d.ts +85 -83
  141. package/dist/index.js +22 -14
  142. package/docs/automation.md +99 -17
  143. package/docs/chat.md +695 -0
  144. package/package.json +10 -1
  145. package/dist/README-NBWAQWQS.js +0 -7
  146. package/dist/README-XCIDDEAE.cjs +0 -7
  147. package/dist/automation-FTFGFHT7.cjs +0 -7
  148. package/dist/automation-HJGT6QK5.js +0 -7
  149. package/dist/chunk-ADSWGLIV.cjs +0 -14
  150. package/dist/chunk-LCE7N4ZL.js +0 -14
@@ -0,0 +1,2909 @@
1
+ {
2
+ "openapi": "3.0.3",
3
+ "info": {
4
+ "title": "epilot Chat API",
5
+ "version": "0.1.0",
6
+ "description": "Widget management and anonymous browser chat."
7
+ },
8
+ "servers": [
9
+ {
10
+ "url": "https://chat.sls.epilot.io"
11
+ }
12
+ ],
13
+ "security": [
14
+ {
15
+ "EpilotAuth": []
16
+ }
17
+ ],
18
+ "paths": {
19
+ "/v1/widgets": {
20
+ "get": {
21
+ "tags": [
22
+ "Chat widgets"
23
+ ],
24
+ "operationId": "listChatWidgets",
25
+ "security": [
26
+ {
27
+ "EpilotAuth": []
28
+ }
29
+ ],
30
+ "responses": {
31
+ "200": {
32
+ "description": "Widget response",
33
+ "content": {
34
+ "application/json": {
35
+ "schema": {
36
+ "type": "object",
37
+ "required": [
38
+ "widgets"
39
+ ],
40
+ "properties": {
41
+ "widgets": {
42
+ "type": "array",
43
+ "items": {
44
+ "type": "object",
45
+ "required": [
46
+ "widget_id",
47
+ "org_id",
48
+ "agent_id",
49
+ "binding_id",
50
+ "version",
51
+ "name",
52
+ "website_chat",
53
+ "website_chat_embed",
54
+ "created_at",
55
+ "updated_at"
56
+ ],
57
+ "properties": {
58
+ "name": {
59
+ "type": "string",
60
+ "minLength": 1,
61
+ "maxLength": 100
62
+ },
63
+ "agent_id": {
64
+ "type": "string",
65
+ "format": "uuid",
66
+ "nullable": true
67
+ },
68
+ "website_chat": {
69
+ "type": "object",
70
+ "additionalProperties": false,
71
+ "required": [
72
+ "allowed_origins",
73
+ "organisation_name",
74
+ "default_locale"
75
+ ],
76
+ "properties": {
77
+ "allowed_origins": {
78
+ "type": "array",
79
+ "maxItems": 50,
80
+ "uniqueItems": true,
81
+ "description": "Exact HTTPS origins. Empty means the widget cannot start sessions.",
82
+ "items": {
83
+ "type": "string",
84
+ "maxLength": 2048
85
+ }
86
+ },
87
+ "organisation_name": {
88
+ "type": "string",
89
+ "minLength": 1,
90
+ "maxLength": 100
91
+ },
92
+ "default_locale": {
93
+ "type": "string",
94
+ "enum": [
95
+ "en",
96
+ "de"
97
+ ]
98
+ },
99
+ "design_id": {
100
+ "type": "string",
101
+ "format": "uuid",
102
+ "nullable": true,
103
+ "description": "Design Builder configuration for the widget only."
104
+ },
105
+ "authentication": {
106
+ "type": "object",
107
+ "additionalProperties": false,
108
+ "properties": {
109
+ "email_code": {
110
+ "type": "object",
111
+ "additionalProperties": false,
112
+ "properties": {
113
+ "email_template_id": {
114
+ "type": "string",
115
+ "format": "uuid",
116
+ "nullable": true
117
+ }
118
+ }
119
+ }
120
+ },
121
+ "nullable": true,
122
+ "description": "Email Builder template selection. Does not enable verification by itself.",
123
+ "required": [
124
+ "email_code"
125
+ ]
126
+ }
127
+ }
128
+ },
129
+ "widget_id": {
130
+ "type": "string",
131
+ "format": "uuid",
132
+ "readOnly": true,
133
+ "description": "Stable public embed identifier, independent of the assigned agent. Not a credential."
134
+ },
135
+ "org_id": {
136
+ "type": "string",
137
+ "readOnly": true
138
+ },
139
+ "binding_id": {
140
+ "type": "string",
141
+ "format": "uuid",
142
+ "readOnly": true,
143
+ "description": "Server-owned session binding; changes on reassignment or allowed-origin changes."
144
+ },
145
+ "version": {
146
+ "type": "integer",
147
+ "minimum": 1,
148
+ "readOnly": true
149
+ },
150
+ "created_at": {
151
+ "type": "string",
152
+ "format": "date-time",
153
+ "readOnly": true
154
+ },
155
+ "updated_at": {
156
+ "type": "string",
157
+ "format": "date-time",
158
+ "readOnly": true
159
+ },
160
+ "website_chat_embed": {
161
+ "type": "object",
162
+ "readOnly": true,
163
+ "required": [
164
+ "script_url",
165
+ "chat_api_origin",
166
+ "demo_url"
167
+ ],
168
+ "properties": {
169
+ "script_url": {
170
+ "type": "string",
171
+ "format": "uri"
172
+ },
173
+ "chat_api_origin": {
174
+ "type": "string",
175
+ "format": "uri"
176
+ },
177
+ "demo_url": {
178
+ "type": "string",
179
+ "format": "uri"
180
+ }
181
+ }
182
+ }
183
+ }
184
+ }
185
+ },
186
+ "next_cursor": {
187
+ "type": "string"
188
+ }
189
+ }
190
+ }
191
+ }
192
+ }
193
+ },
194
+ "400": {
195
+ "description": "Invalid widget settings",
196
+ "content": {
197
+ "application/json": {
198
+ "schema": {
199
+ "type": "object",
200
+ "properties": {
201
+ "error": {
202
+ "type": "string"
203
+ },
204
+ "message": {
205
+ "type": "string"
206
+ },
207
+ "details": {
208
+ "type": "object"
209
+ }
210
+ }
211
+ }
212
+ }
213
+ }
214
+ },
215
+ "404": {
216
+ "description": "Widget not found in this organisation",
217
+ "content": {
218
+ "application/json": {
219
+ "schema": {
220
+ "type": "object",
221
+ "properties": {
222
+ "error": {
223
+ "type": "string"
224
+ },
225
+ "message": {
226
+ "type": "string"
227
+ },
228
+ "details": {
229
+ "type": "object"
230
+ }
231
+ }
232
+ }
233
+ }
234
+ }
235
+ },
236
+ "409": {
237
+ "description": "Widget or assigned agent changed; reload before retrying",
238
+ "content": {
239
+ "application/json": {
240
+ "schema": {
241
+ "type": "object",
242
+ "properties": {
243
+ "error": {
244
+ "type": "string"
245
+ },
246
+ "message": {
247
+ "type": "string"
248
+ },
249
+ "details": {
250
+ "type": "object"
251
+ }
252
+ }
253
+ }
254
+ }
255
+ }
256
+ }
257
+ },
258
+ "parameters": [
259
+ {
260
+ "in": "query",
261
+ "name": "cursor",
262
+ "schema": {
263
+ "type": "string",
264
+ "maxLength": 1024
265
+ }
266
+ }
267
+ ]
268
+ },
269
+ "post": {
270
+ "tags": [
271
+ "Chat widgets"
272
+ ],
273
+ "operationId": "createChatWidget",
274
+ "security": [
275
+ {
276
+ "EpilotAuth": []
277
+ }
278
+ ],
279
+ "responses": {
280
+ "201": {
281
+ "description": "Widget response",
282
+ "content": {
283
+ "application/json": {
284
+ "schema": {
285
+ "type": "object",
286
+ "required": [
287
+ "widget_id",
288
+ "org_id",
289
+ "agent_id",
290
+ "binding_id",
291
+ "version",
292
+ "name",
293
+ "website_chat",
294
+ "website_chat_embed",
295
+ "created_at",
296
+ "updated_at"
297
+ ],
298
+ "properties": {
299
+ "name": {
300
+ "type": "string",
301
+ "minLength": 1,
302
+ "maxLength": 100
303
+ },
304
+ "agent_id": {
305
+ "type": "string",
306
+ "format": "uuid",
307
+ "nullable": true
308
+ },
309
+ "website_chat": {
310
+ "type": "object",
311
+ "additionalProperties": false,
312
+ "required": [
313
+ "allowed_origins",
314
+ "organisation_name",
315
+ "default_locale"
316
+ ],
317
+ "properties": {
318
+ "allowed_origins": {
319
+ "type": "array",
320
+ "maxItems": 50,
321
+ "uniqueItems": true,
322
+ "description": "Exact HTTPS origins. Empty means the widget cannot start sessions.",
323
+ "items": {
324
+ "type": "string",
325
+ "maxLength": 2048
326
+ }
327
+ },
328
+ "organisation_name": {
329
+ "type": "string",
330
+ "minLength": 1,
331
+ "maxLength": 100
332
+ },
333
+ "default_locale": {
334
+ "type": "string",
335
+ "enum": [
336
+ "en",
337
+ "de"
338
+ ]
339
+ },
340
+ "design_id": {
341
+ "type": "string",
342
+ "format": "uuid",
343
+ "nullable": true,
344
+ "description": "Design Builder configuration for the widget only."
345
+ },
346
+ "authentication": {
347
+ "type": "object",
348
+ "additionalProperties": false,
349
+ "properties": {
350
+ "email_code": {
351
+ "type": "object",
352
+ "additionalProperties": false,
353
+ "properties": {
354
+ "email_template_id": {
355
+ "type": "string",
356
+ "format": "uuid",
357
+ "nullable": true
358
+ }
359
+ }
360
+ }
361
+ },
362
+ "nullable": true,
363
+ "description": "Email Builder template selection. Does not enable verification by itself.",
364
+ "required": [
365
+ "email_code"
366
+ ]
367
+ }
368
+ }
369
+ },
370
+ "widget_id": {
371
+ "type": "string",
372
+ "format": "uuid",
373
+ "readOnly": true,
374
+ "description": "Stable public embed identifier, independent of the assigned agent. Not a credential."
375
+ },
376
+ "org_id": {
377
+ "type": "string",
378
+ "readOnly": true
379
+ },
380
+ "binding_id": {
381
+ "type": "string",
382
+ "format": "uuid",
383
+ "readOnly": true,
384
+ "description": "Server-owned session binding; changes on reassignment or allowed-origin changes."
385
+ },
386
+ "version": {
387
+ "type": "integer",
388
+ "minimum": 1,
389
+ "readOnly": true
390
+ },
391
+ "created_at": {
392
+ "type": "string",
393
+ "format": "date-time",
394
+ "readOnly": true
395
+ },
396
+ "updated_at": {
397
+ "type": "string",
398
+ "format": "date-time",
399
+ "readOnly": true
400
+ },
401
+ "website_chat_embed": {
402
+ "type": "object",
403
+ "readOnly": true,
404
+ "required": [
405
+ "script_url",
406
+ "chat_api_origin",
407
+ "demo_url"
408
+ ],
409
+ "properties": {
410
+ "script_url": {
411
+ "type": "string",
412
+ "format": "uri"
413
+ },
414
+ "chat_api_origin": {
415
+ "type": "string",
416
+ "format": "uri"
417
+ },
418
+ "demo_url": {
419
+ "type": "string",
420
+ "format": "uri"
421
+ }
422
+ }
423
+ }
424
+ }
425
+ }
426
+ }
427
+ }
428
+ },
429
+ "400": {
430
+ "description": "Invalid widget settings",
431
+ "content": {
432
+ "application/json": {
433
+ "schema": {
434
+ "type": "object",
435
+ "properties": {
436
+ "error": {
437
+ "type": "string"
438
+ },
439
+ "message": {
440
+ "type": "string"
441
+ },
442
+ "details": {
443
+ "type": "object"
444
+ }
445
+ }
446
+ }
447
+ }
448
+ }
449
+ },
450
+ "404": {
451
+ "description": "Widget not found in this organisation",
452
+ "content": {
453
+ "application/json": {
454
+ "schema": {
455
+ "type": "object",
456
+ "properties": {
457
+ "error": {
458
+ "type": "string"
459
+ },
460
+ "message": {
461
+ "type": "string"
462
+ },
463
+ "details": {
464
+ "type": "object"
465
+ }
466
+ }
467
+ }
468
+ }
469
+ }
470
+ },
471
+ "409": {
472
+ "description": "Widget or assigned agent changed; reload before retrying",
473
+ "content": {
474
+ "application/json": {
475
+ "schema": {
476
+ "type": "object",
477
+ "properties": {
478
+ "error": {
479
+ "type": "string"
480
+ },
481
+ "message": {
482
+ "type": "string"
483
+ },
484
+ "details": {
485
+ "type": "object"
486
+ }
487
+ }
488
+ }
489
+ }
490
+ }
491
+ }
492
+ },
493
+ "requestBody": {
494
+ "required": true,
495
+ "content": {
496
+ "application/json": {
497
+ "schema": {
498
+ "type": "object",
499
+ "additionalProperties": false,
500
+ "required": [
501
+ "name",
502
+ "agent_id",
503
+ "website_chat"
504
+ ],
505
+ "properties": {
506
+ "name": {
507
+ "type": "string",
508
+ "minLength": 1,
509
+ "maxLength": 100
510
+ },
511
+ "agent_id": {
512
+ "type": "string",
513
+ "format": "uuid",
514
+ "nullable": true
515
+ },
516
+ "website_chat": {
517
+ "type": "object",
518
+ "additionalProperties": false,
519
+ "required": [
520
+ "allowed_origins",
521
+ "organisation_name",
522
+ "default_locale"
523
+ ],
524
+ "properties": {
525
+ "allowed_origins": {
526
+ "type": "array",
527
+ "maxItems": 50,
528
+ "uniqueItems": true,
529
+ "description": "Exact HTTPS origins. Empty means the widget cannot start sessions.",
530
+ "items": {
531
+ "type": "string",
532
+ "maxLength": 2048
533
+ }
534
+ },
535
+ "organisation_name": {
536
+ "type": "string",
537
+ "minLength": 1,
538
+ "maxLength": 100
539
+ },
540
+ "default_locale": {
541
+ "type": "string",
542
+ "enum": [
543
+ "en",
544
+ "de"
545
+ ]
546
+ },
547
+ "design_id": {
548
+ "type": "string",
549
+ "format": "uuid",
550
+ "nullable": true,
551
+ "description": "Design Builder configuration for the widget only."
552
+ },
553
+ "authentication": {
554
+ "type": "object",
555
+ "additionalProperties": false,
556
+ "properties": {
557
+ "email_code": {
558
+ "type": "object",
559
+ "additionalProperties": false,
560
+ "properties": {
561
+ "email_template_id": {
562
+ "type": "string",
563
+ "format": "uuid",
564
+ "nullable": true
565
+ }
566
+ }
567
+ }
568
+ },
569
+ "nullable": true,
570
+ "description": "Email Builder template selection. Does not enable verification by itself.",
571
+ "required": [
572
+ "email_code"
573
+ ]
574
+ }
575
+ }
576
+ }
577
+ }
578
+ }
579
+ }
580
+ }
581
+ }
582
+ }
583
+ },
584
+ "/v1/widgets/{widget_id}": {
585
+ "parameters": [
586
+ {
587
+ "in": "path",
588
+ "name": "widget_id",
589
+ "required": true,
590
+ "schema": {
591
+ "type": "string",
592
+ "format": "uuid"
593
+ }
594
+ }
595
+ ],
596
+ "get": {
597
+ "tags": [
598
+ "Chat widgets"
599
+ ],
600
+ "operationId": "getChatWidget",
601
+ "security": [
602
+ {
603
+ "EpilotAuth": []
604
+ }
605
+ ],
606
+ "responses": {
607
+ "200": {
608
+ "description": "Widget response",
609
+ "content": {
610
+ "application/json": {
611
+ "schema": {
612
+ "type": "object",
613
+ "required": [
614
+ "widget_id",
615
+ "org_id",
616
+ "agent_id",
617
+ "binding_id",
618
+ "version",
619
+ "name",
620
+ "website_chat",
621
+ "website_chat_embed",
622
+ "created_at",
623
+ "updated_at"
624
+ ],
625
+ "properties": {
626
+ "name": {
627
+ "type": "string",
628
+ "minLength": 1,
629
+ "maxLength": 100
630
+ },
631
+ "agent_id": {
632
+ "type": "string",
633
+ "format": "uuid",
634
+ "nullable": true
635
+ },
636
+ "website_chat": {
637
+ "type": "object",
638
+ "additionalProperties": false,
639
+ "required": [
640
+ "allowed_origins",
641
+ "organisation_name",
642
+ "default_locale"
643
+ ],
644
+ "properties": {
645
+ "allowed_origins": {
646
+ "type": "array",
647
+ "maxItems": 50,
648
+ "uniqueItems": true,
649
+ "description": "Exact HTTPS origins. Empty means the widget cannot start sessions.",
650
+ "items": {
651
+ "type": "string",
652
+ "maxLength": 2048
653
+ }
654
+ },
655
+ "organisation_name": {
656
+ "type": "string",
657
+ "minLength": 1,
658
+ "maxLength": 100
659
+ },
660
+ "default_locale": {
661
+ "type": "string",
662
+ "enum": [
663
+ "en",
664
+ "de"
665
+ ]
666
+ },
667
+ "design_id": {
668
+ "type": "string",
669
+ "format": "uuid",
670
+ "nullable": true,
671
+ "description": "Design Builder configuration for the widget only."
672
+ },
673
+ "authentication": {
674
+ "type": "object",
675
+ "additionalProperties": false,
676
+ "properties": {
677
+ "email_code": {
678
+ "type": "object",
679
+ "additionalProperties": false,
680
+ "properties": {
681
+ "email_template_id": {
682
+ "type": "string",
683
+ "format": "uuid",
684
+ "nullable": true
685
+ }
686
+ }
687
+ }
688
+ },
689
+ "nullable": true,
690
+ "description": "Email Builder template selection. Does not enable verification by itself.",
691
+ "required": [
692
+ "email_code"
693
+ ]
694
+ }
695
+ }
696
+ },
697
+ "widget_id": {
698
+ "type": "string",
699
+ "format": "uuid",
700
+ "readOnly": true,
701
+ "description": "Stable public embed identifier, independent of the assigned agent. Not a credential."
702
+ },
703
+ "org_id": {
704
+ "type": "string",
705
+ "readOnly": true
706
+ },
707
+ "binding_id": {
708
+ "type": "string",
709
+ "format": "uuid",
710
+ "readOnly": true,
711
+ "description": "Server-owned session binding; changes on reassignment or allowed-origin changes."
712
+ },
713
+ "version": {
714
+ "type": "integer",
715
+ "minimum": 1,
716
+ "readOnly": true
717
+ },
718
+ "created_at": {
719
+ "type": "string",
720
+ "format": "date-time",
721
+ "readOnly": true
722
+ },
723
+ "updated_at": {
724
+ "type": "string",
725
+ "format": "date-time",
726
+ "readOnly": true
727
+ },
728
+ "website_chat_embed": {
729
+ "type": "object",
730
+ "readOnly": true,
731
+ "required": [
732
+ "script_url",
733
+ "chat_api_origin",
734
+ "demo_url"
735
+ ],
736
+ "properties": {
737
+ "script_url": {
738
+ "type": "string",
739
+ "format": "uri"
740
+ },
741
+ "chat_api_origin": {
742
+ "type": "string",
743
+ "format": "uri"
744
+ },
745
+ "demo_url": {
746
+ "type": "string",
747
+ "format": "uri"
748
+ }
749
+ }
750
+ }
751
+ }
752
+ }
753
+ }
754
+ }
755
+ },
756
+ "400": {
757
+ "description": "Invalid widget settings",
758
+ "content": {
759
+ "application/json": {
760
+ "schema": {
761
+ "type": "object",
762
+ "properties": {
763
+ "error": {
764
+ "type": "string"
765
+ },
766
+ "message": {
767
+ "type": "string"
768
+ },
769
+ "details": {
770
+ "type": "object"
771
+ }
772
+ }
773
+ }
774
+ }
775
+ }
776
+ },
777
+ "404": {
778
+ "description": "Widget not found in this organisation",
779
+ "content": {
780
+ "application/json": {
781
+ "schema": {
782
+ "type": "object",
783
+ "properties": {
784
+ "error": {
785
+ "type": "string"
786
+ },
787
+ "message": {
788
+ "type": "string"
789
+ },
790
+ "details": {
791
+ "type": "object"
792
+ }
793
+ }
794
+ }
795
+ }
796
+ }
797
+ },
798
+ "409": {
799
+ "description": "Widget or assigned agent changed; reload before retrying",
800
+ "content": {
801
+ "application/json": {
802
+ "schema": {
803
+ "type": "object",
804
+ "properties": {
805
+ "error": {
806
+ "type": "string"
807
+ },
808
+ "message": {
809
+ "type": "string"
810
+ },
811
+ "details": {
812
+ "type": "object"
813
+ }
814
+ }
815
+ }
816
+ }
817
+ }
818
+ }
819
+ }
820
+ },
821
+ "put": {
822
+ "tags": [
823
+ "Chat widgets"
824
+ ],
825
+ "operationId": "updateChatWidget",
826
+ "security": [
827
+ {
828
+ "EpilotAuth": []
829
+ }
830
+ ],
831
+ "responses": {
832
+ "200": {
833
+ "description": "Widget response",
834
+ "content": {
835
+ "application/json": {
836
+ "schema": {
837
+ "type": "object",
838
+ "required": [
839
+ "widget_id",
840
+ "org_id",
841
+ "agent_id",
842
+ "binding_id",
843
+ "version",
844
+ "name",
845
+ "website_chat",
846
+ "website_chat_embed",
847
+ "created_at",
848
+ "updated_at"
849
+ ],
850
+ "properties": {
851
+ "name": {
852
+ "type": "string",
853
+ "minLength": 1,
854
+ "maxLength": 100
855
+ },
856
+ "agent_id": {
857
+ "type": "string",
858
+ "format": "uuid",
859
+ "nullable": true
860
+ },
861
+ "website_chat": {
862
+ "type": "object",
863
+ "additionalProperties": false,
864
+ "required": [
865
+ "allowed_origins",
866
+ "organisation_name",
867
+ "default_locale"
868
+ ],
869
+ "properties": {
870
+ "allowed_origins": {
871
+ "type": "array",
872
+ "maxItems": 50,
873
+ "uniqueItems": true,
874
+ "description": "Exact HTTPS origins. Empty means the widget cannot start sessions.",
875
+ "items": {
876
+ "type": "string",
877
+ "maxLength": 2048
878
+ }
879
+ },
880
+ "organisation_name": {
881
+ "type": "string",
882
+ "minLength": 1,
883
+ "maxLength": 100
884
+ },
885
+ "default_locale": {
886
+ "type": "string",
887
+ "enum": [
888
+ "en",
889
+ "de"
890
+ ]
891
+ },
892
+ "design_id": {
893
+ "type": "string",
894
+ "format": "uuid",
895
+ "nullable": true,
896
+ "description": "Design Builder configuration for the widget only."
897
+ },
898
+ "authentication": {
899
+ "type": "object",
900
+ "additionalProperties": false,
901
+ "properties": {
902
+ "email_code": {
903
+ "type": "object",
904
+ "additionalProperties": false,
905
+ "properties": {
906
+ "email_template_id": {
907
+ "type": "string",
908
+ "format": "uuid",
909
+ "nullable": true
910
+ }
911
+ }
912
+ }
913
+ },
914
+ "nullable": true,
915
+ "description": "Email Builder template selection. Does not enable verification by itself.",
916
+ "required": [
917
+ "email_code"
918
+ ]
919
+ }
920
+ }
921
+ },
922
+ "widget_id": {
923
+ "type": "string",
924
+ "format": "uuid",
925
+ "readOnly": true,
926
+ "description": "Stable public embed identifier, independent of the assigned agent. Not a credential."
927
+ },
928
+ "org_id": {
929
+ "type": "string",
930
+ "readOnly": true
931
+ },
932
+ "binding_id": {
933
+ "type": "string",
934
+ "format": "uuid",
935
+ "readOnly": true,
936
+ "description": "Server-owned session binding; changes on reassignment or allowed-origin changes."
937
+ },
938
+ "version": {
939
+ "type": "integer",
940
+ "minimum": 1,
941
+ "readOnly": true
942
+ },
943
+ "created_at": {
944
+ "type": "string",
945
+ "format": "date-time",
946
+ "readOnly": true
947
+ },
948
+ "updated_at": {
949
+ "type": "string",
950
+ "format": "date-time",
951
+ "readOnly": true
952
+ },
953
+ "website_chat_embed": {
954
+ "type": "object",
955
+ "readOnly": true,
956
+ "required": [
957
+ "script_url",
958
+ "chat_api_origin",
959
+ "demo_url"
960
+ ],
961
+ "properties": {
962
+ "script_url": {
963
+ "type": "string",
964
+ "format": "uri"
965
+ },
966
+ "chat_api_origin": {
967
+ "type": "string",
968
+ "format": "uri"
969
+ },
970
+ "demo_url": {
971
+ "type": "string",
972
+ "format": "uri"
973
+ }
974
+ }
975
+ }
976
+ }
977
+ }
978
+ }
979
+ }
980
+ },
981
+ "400": {
982
+ "description": "Invalid widget settings",
983
+ "content": {
984
+ "application/json": {
985
+ "schema": {
986
+ "type": "object",
987
+ "properties": {
988
+ "error": {
989
+ "type": "string"
990
+ },
991
+ "message": {
992
+ "type": "string"
993
+ },
994
+ "details": {
995
+ "type": "object"
996
+ }
997
+ }
998
+ }
999
+ }
1000
+ }
1001
+ },
1002
+ "404": {
1003
+ "description": "Widget not found in this organisation",
1004
+ "content": {
1005
+ "application/json": {
1006
+ "schema": {
1007
+ "type": "object",
1008
+ "properties": {
1009
+ "error": {
1010
+ "type": "string"
1011
+ },
1012
+ "message": {
1013
+ "type": "string"
1014
+ },
1015
+ "details": {
1016
+ "type": "object"
1017
+ }
1018
+ }
1019
+ }
1020
+ }
1021
+ }
1022
+ },
1023
+ "409": {
1024
+ "description": "Widget or assigned agent changed; reload before retrying",
1025
+ "content": {
1026
+ "application/json": {
1027
+ "schema": {
1028
+ "type": "object",
1029
+ "properties": {
1030
+ "error": {
1031
+ "type": "string"
1032
+ },
1033
+ "message": {
1034
+ "type": "string"
1035
+ },
1036
+ "details": {
1037
+ "type": "object"
1038
+ }
1039
+ }
1040
+ }
1041
+ }
1042
+ }
1043
+ }
1044
+ },
1045
+ "requestBody": {
1046
+ "required": true,
1047
+ "content": {
1048
+ "application/json": {
1049
+ "schema": {
1050
+ "type": "object",
1051
+ "additionalProperties": false,
1052
+ "required": [
1053
+ "version"
1054
+ ],
1055
+ "properties": {
1056
+ "name": {
1057
+ "type": "string",
1058
+ "minLength": 1,
1059
+ "maxLength": 100
1060
+ },
1061
+ "agent_id": {
1062
+ "type": "string",
1063
+ "format": "uuid",
1064
+ "nullable": true
1065
+ },
1066
+ "website_chat": {
1067
+ "type": "object",
1068
+ "additionalProperties": false,
1069
+ "required": [
1070
+ "allowed_origins",
1071
+ "organisation_name",
1072
+ "default_locale"
1073
+ ],
1074
+ "properties": {
1075
+ "allowed_origins": {
1076
+ "type": "array",
1077
+ "maxItems": 50,
1078
+ "uniqueItems": true,
1079
+ "description": "Exact HTTPS origins. Empty means the widget cannot start sessions.",
1080
+ "items": {
1081
+ "type": "string",
1082
+ "maxLength": 2048
1083
+ }
1084
+ },
1085
+ "organisation_name": {
1086
+ "type": "string",
1087
+ "minLength": 1,
1088
+ "maxLength": 100
1089
+ },
1090
+ "default_locale": {
1091
+ "type": "string",
1092
+ "enum": [
1093
+ "en",
1094
+ "de"
1095
+ ]
1096
+ },
1097
+ "design_id": {
1098
+ "type": "string",
1099
+ "format": "uuid",
1100
+ "nullable": true,
1101
+ "description": "Design Builder configuration for the widget only."
1102
+ },
1103
+ "authentication": {
1104
+ "type": "object",
1105
+ "additionalProperties": false,
1106
+ "properties": {
1107
+ "email_code": {
1108
+ "type": "object",
1109
+ "additionalProperties": false,
1110
+ "properties": {
1111
+ "email_template_id": {
1112
+ "type": "string",
1113
+ "format": "uuid",
1114
+ "nullable": true
1115
+ }
1116
+ }
1117
+ }
1118
+ },
1119
+ "nullable": true,
1120
+ "description": "Email Builder template selection. Does not enable verification by itself.",
1121
+ "required": [
1122
+ "email_code"
1123
+ ]
1124
+ }
1125
+ }
1126
+ },
1127
+ "version": {
1128
+ "type": "integer",
1129
+ "minimum": 1,
1130
+ "description": "Version read by the editor; stale writes return 409."
1131
+ }
1132
+ }
1133
+ }
1134
+ }
1135
+ }
1136
+ }
1137
+ },
1138
+ "delete": {
1139
+ "tags": [
1140
+ "Chat widgets"
1141
+ ],
1142
+ "operationId": "deleteChatWidget",
1143
+ "security": [
1144
+ {
1145
+ "EpilotAuth": []
1146
+ }
1147
+ ],
1148
+ "responses": {
1149
+ "204": {
1150
+ "description": "Widget deleted"
1151
+ },
1152
+ "400": {
1153
+ "description": "Invalid widget settings",
1154
+ "content": {
1155
+ "application/json": {
1156
+ "schema": {
1157
+ "type": "object",
1158
+ "properties": {
1159
+ "error": {
1160
+ "type": "string"
1161
+ },
1162
+ "message": {
1163
+ "type": "string"
1164
+ },
1165
+ "details": {
1166
+ "type": "object"
1167
+ }
1168
+ }
1169
+ }
1170
+ }
1171
+ }
1172
+ },
1173
+ "404": {
1174
+ "description": "Widget not found in this organisation",
1175
+ "content": {
1176
+ "application/json": {
1177
+ "schema": {
1178
+ "type": "object",
1179
+ "properties": {
1180
+ "error": {
1181
+ "type": "string"
1182
+ },
1183
+ "message": {
1184
+ "type": "string"
1185
+ },
1186
+ "details": {
1187
+ "type": "object"
1188
+ }
1189
+ }
1190
+ }
1191
+ }
1192
+ }
1193
+ },
1194
+ "409": {
1195
+ "description": "Widget or assigned agent changed; reload before retrying",
1196
+ "content": {
1197
+ "application/json": {
1198
+ "schema": {
1199
+ "type": "object",
1200
+ "properties": {
1201
+ "error": {
1202
+ "type": "string"
1203
+ },
1204
+ "message": {
1205
+ "type": "string"
1206
+ },
1207
+ "details": {
1208
+ "type": "object"
1209
+ }
1210
+ }
1211
+ }
1212
+ }
1213
+ }
1214
+ }
1215
+ },
1216
+ "parameters": [
1217
+ {
1218
+ "in": "query",
1219
+ "name": "version",
1220
+ "required": true,
1221
+ "schema": {
1222
+ "type": "integer",
1223
+ "minimum": 1
1224
+ }
1225
+ }
1226
+ ]
1227
+ }
1228
+ },
1229
+ "/v1/widgets/{widget_id}/configuration": {
1230
+ "get": {
1231
+ "operationId": "getPublicChatWidget",
1232
+ "description": "Resolve visitor-facing configuration for an independent widget and its current agent assignment. The widget ID is not an organisation ID or a destination such as website or portal.",
1233
+ "parameters": [
1234
+ {
1235
+ "in": "path",
1236
+ "name": "widget_id",
1237
+ "description": "Public widget ID, also used as widget_key in bootstrap and data-epilot-chat in the embed.",
1238
+ "example": "550e8400-e29b-41d4-a716-446655440000",
1239
+ "required": true,
1240
+ "schema": {
1241
+ "type": "string",
1242
+ "pattern": "^[a-zA-Z0-9_-]{1,100}$"
1243
+ }
1244
+ }
1245
+ ],
1246
+ "responses": {
1247
+ "200": {
1248
+ "description": "Public presentation only",
1249
+ "content": {
1250
+ "application/json": {
1251
+ "schema": {
1252
+ "type": "object",
1253
+ "required": [
1254
+ "key",
1255
+ "organisationName",
1256
+ "assistantName",
1257
+ "defaultLocale",
1258
+ "locales"
1259
+ ],
1260
+ "properties": {
1261
+ "key": {
1262
+ "type": "string"
1263
+ },
1264
+ "organisationName": {
1265
+ "type": "string"
1266
+ },
1267
+ "assistantName": {
1268
+ "type": "string"
1269
+ },
1270
+ "defaultLocale": {
1271
+ "type": "string",
1272
+ "enum": [
1273
+ "en",
1274
+ "de"
1275
+ ]
1276
+ },
1277
+ "design": {
1278
+ "type": "object",
1279
+ "additionalProperties": false,
1280
+ "properties": {
1281
+ "id": {
1282
+ "type": "string",
1283
+ "format": "uuid"
1284
+ },
1285
+ "last_modified_at": {
1286
+ "type": "string",
1287
+ "maxLength": 200
1288
+ },
1289
+ "style": {
1290
+ "type": "object",
1291
+ "additionalProperties": false,
1292
+ "properties": {
1293
+ "palette": {
1294
+ "type": "object",
1295
+ "additionalProperties": false,
1296
+ "properties": {
1297
+ "primary": {
1298
+ "type": "string",
1299
+ "maxLength": 200
1300
+ },
1301
+ "background": {
1302
+ "type": "string",
1303
+ "maxLength": 200
1304
+ }
1305
+ }
1306
+ },
1307
+ "typography": {
1308
+ "type": "object",
1309
+ "additionalProperties": false,
1310
+ "properties": {
1311
+ "font": {
1312
+ "type": "object",
1313
+ "additionalProperties": false,
1314
+ "properties": {
1315
+ "font_family": {
1316
+ "type": "string",
1317
+ "maxLength": 200
1318
+ }
1319
+ }
1320
+ }
1321
+ }
1322
+ },
1323
+ "shape": {
1324
+ "type": "object",
1325
+ "additionalProperties": false,
1326
+ "properties": {
1327
+ "border_radius": {
1328
+ "type": "number",
1329
+ "minimum": 0,
1330
+ "maximum": 100
1331
+ }
1332
+ }
1333
+ }
1334
+ }
1335
+ },
1336
+ "spark_theme": {
1337
+ "type": "object",
1338
+ "additionalProperties": false,
1339
+ "properties": {
1340
+ "accentColor": {
1341
+ "type": "string",
1342
+ "maxLength": 200
1343
+ },
1344
+ "backgroundColor": {
1345
+ "type": "string",
1346
+ "maxLength": 200
1347
+ },
1348
+ "fontBody": {
1349
+ "type": "string",
1350
+ "maxLength": 200
1351
+ },
1352
+ "fontHeading": {
1353
+ "type": "string",
1354
+ "maxLength": 200
1355
+ },
1356
+ "radius": {
1357
+ "type": "string",
1358
+ "maxLength": 200
1359
+ },
1360
+ "scaling": {
1361
+ "type": "string",
1362
+ "maxLength": 200
1363
+ },
1364
+ "spacing": {
1365
+ "type": "string",
1366
+ "maxLength": 200
1367
+ },
1368
+ "appearance": {
1369
+ "type": "string",
1370
+ "maxLength": 200
1371
+ },
1372
+ "neutralColor": {
1373
+ "type": "string",
1374
+ "maxLength": 200
1375
+ },
1376
+ "styleVariant": {
1377
+ "type": "string",
1378
+ "maxLength": 200
1379
+ },
1380
+ "labelPosition": {
1381
+ "type": "string",
1382
+ "maxLength": 200
1383
+ },
1384
+ "inputStyle": {
1385
+ "type": "string",
1386
+ "maxLength": 200
1387
+ },
1388
+ "inputColor": {
1389
+ "type": "string",
1390
+ "maxLength": 200
1391
+ },
1392
+ "cardVariant": {
1393
+ "type": "string",
1394
+ "maxLength": 200
1395
+ },
1396
+ "cardColor": {
1397
+ "type": "string",
1398
+ "maxLength": 200
1399
+ },
1400
+ "highContrast": {
1401
+ "type": "boolean"
1402
+ }
1403
+ }
1404
+ }
1405
+ },
1406
+ "required": [
1407
+ "id"
1408
+ ]
1409
+ },
1410
+ "locales": {
1411
+ "type": "array",
1412
+ "items": {
1413
+ "type": "string",
1414
+ "enum": [
1415
+ "en",
1416
+ "de"
1417
+ ]
1418
+ }
1419
+ }
1420
+ }
1421
+ }
1422
+ }
1423
+ }
1424
+ },
1425
+ "default": {
1426
+ "description": "400 invalid input, 401 expired capability, 403 origin denied, 404 unpublished widget, 409 conflict, 413 too large, 429 rate limit, or 503 unavailable.",
1427
+ "content": {
1428
+ "application/json": {
1429
+ "schema": {
1430
+ "type": "object",
1431
+ "required": [
1432
+ "code"
1433
+ ],
1434
+ "properties": {
1435
+ "code": {
1436
+ "type": "string",
1437
+ "enum": [
1438
+ "INVALID_REQUEST",
1439
+ "ORIGIN_DENIED",
1440
+ "NOT_FOUND",
1441
+ "INVALID_GRANT",
1442
+ "SESSION_EXPIRED",
1443
+ "RATE_LIMITED",
1444
+ "SESSION_LIMIT",
1445
+ "USAGE_LIMIT",
1446
+ "REQUEST_CONFLICT",
1447
+ "IN_PROGRESS",
1448
+ "UNAVAILABLE",
1449
+ "TEMPORARILY_UNAVAILABLE"
1450
+ ]
1451
+ }
1452
+ }
1453
+ }
1454
+ }
1455
+ }
1456
+ }
1457
+ },
1458
+ "security": []
1459
+ }
1460
+ },
1461
+ "/v1/bootstrap": {
1462
+ "post": {
1463
+ "operationId": "createPublicChatGrant",
1464
+ "description": "Called by the host website with its widget_key. Checks the saved website origin allowlist and issues a single-use grant for the iframe to exchange at POST /v1/sessions within 60 seconds. This deadline does not limit the resulting session.",
1465
+ "requestBody": {
1466
+ "required": true,
1467
+ "content": {
1468
+ "application/json": {
1469
+ "schema": {
1470
+ "type": "object",
1471
+ "additionalProperties": false,
1472
+ "required": [
1473
+ "widget_key"
1474
+ ],
1475
+ "properties": {
1476
+ "widget_key": {
1477
+ "type": "string",
1478
+ "pattern": "^[a-zA-Z0-9_-]{1,100}$"
1479
+ }
1480
+ }
1481
+ }
1482
+ }
1483
+ }
1484
+ },
1485
+ "responses": {
1486
+ "201": {
1487
+ "description": "Single-use handoff grant, valid for 60 seconds. If unused at expiry, request a fresh grant. Contains no account identity.",
1488
+ "content": {
1489
+ "application/json": {
1490
+ "schema": {
1491
+ "type": "object",
1492
+ "required": [
1493
+ "grant",
1494
+ "expires_in",
1495
+ "widget_origin"
1496
+ ],
1497
+ "properties": {
1498
+ "grant": {
1499
+ "type": "string"
1500
+ },
1501
+ "expires_in": {
1502
+ "type": "integer",
1503
+ "example": 60
1504
+ },
1505
+ "widget_origin": {
1506
+ "type": "string",
1507
+ "format": "uri"
1508
+ }
1509
+ }
1510
+ }
1511
+ }
1512
+ }
1513
+ },
1514
+ "default": {
1515
+ "description": "400 invalid input, 401 expired capability, 403 origin denied, 404 unpublished widget, 409 conflict, 413 too large, 429 rate limit, or 503 unavailable.",
1516
+ "content": {
1517
+ "application/json": {
1518
+ "schema": {
1519
+ "type": "object",
1520
+ "required": [
1521
+ "code"
1522
+ ],
1523
+ "properties": {
1524
+ "code": {
1525
+ "type": "string",
1526
+ "enum": [
1527
+ "INVALID_REQUEST",
1528
+ "ORIGIN_DENIED",
1529
+ "NOT_FOUND",
1530
+ "INVALID_GRANT",
1531
+ "SESSION_EXPIRED",
1532
+ "RATE_LIMITED",
1533
+ "SESSION_LIMIT",
1534
+ "USAGE_LIMIT",
1535
+ "REQUEST_CONFLICT",
1536
+ "IN_PROGRESS",
1537
+ "UNAVAILABLE",
1538
+ "TEMPORARILY_UNAVAILABLE"
1539
+ ]
1540
+ }
1541
+ }
1542
+ }
1543
+ }
1544
+ }
1545
+ }
1546
+ },
1547
+ "security": []
1548
+ }
1549
+ },
1550
+ "/v1/sessions": {
1551
+ "post": {
1552
+ "operationId": "createAnonymousChatSession",
1553
+ "description": "Exchanges an unexpired grant once for an independent 30-minute session. Expired or previously used grants return 401 INVALID_GRANT; the host must bootstrap again.",
1554
+ "requestBody": {
1555
+ "required": true,
1556
+ "content": {
1557
+ "application/json": {
1558
+ "schema": {
1559
+ "type": "object",
1560
+ "additionalProperties": false,
1561
+ "required": [
1562
+ "grant"
1563
+ ],
1564
+ "properties": {
1565
+ "grant": {
1566
+ "type": "string",
1567
+ "pattern": "^[A-Za-z0-9_-]{43}$"
1568
+ }
1569
+ }
1570
+ }
1571
+ }
1572
+ }
1573
+ },
1574
+ "responses": {
1575
+ "201": {
1576
+ "description": "An isolated anonymous conversation",
1577
+ "content": {
1578
+ "application/json": {
1579
+ "schema": {
1580
+ "type": "object",
1581
+ "required": [
1582
+ "token",
1583
+ "conversation_id",
1584
+ "expires_at",
1585
+ "widget"
1586
+ ],
1587
+ "properties": {
1588
+ "token": {
1589
+ "type": "string"
1590
+ },
1591
+ "conversation_id": {
1592
+ "type": "string",
1593
+ "format": "uuid"
1594
+ },
1595
+ "expires_at": {
1596
+ "type": "integer",
1597
+ "description": "Unix seconds"
1598
+ },
1599
+ "widget": {
1600
+ "type": "object",
1601
+ "required": [
1602
+ "key",
1603
+ "organisationName",
1604
+ "assistantName",
1605
+ "defaultLocale",
1606
+ "locales"
1607
+ ],
1608
+ "properties": {
1609
+ "key": {
1610
+ "type": "string"
1611
+ },
1612
+ "organisationName": {
1613
+ "type": "string"
1614
+ },
1615
+ "assistantName": {
1616
+ "type": "string"
1617
+ },
1618
+ "defaultLocale": {
1619
+ "type": "string",
1620
+ "enum": [
1621
+ "en",
1622
+ "de"
1623
+ ]
1624
+ },
1625
+ "design": {
1626
+ "type": "object",
1627
+ "additionalProperties": false,
1628
+ "properties": {
1629
+ "id": {
1630
+ "type": "string",
1631
+ "format": "uuid"
1632
+ },
1633
+ "last_modified_at": {
1634
+ "type": "string",
1635
+ "maxLength": 200
1636
+ },
1637
+ "style": {
1638
+ "type": "object",
1639
+ "additionalProperties": false,
1640
+ "properties": {
1641
+ "palette": {
1642
+ "type": "object",
1643
+ "additionalProperties": false,
1644
+ "properties": {
1645
+ "primary": {
1646
+ "type": "string",
1647
+ "maxLength": 200
1648
+ },
1649
+ "background": {
1650
+ "type": "string",
1651
+ "maxLength": 200
1652
+ }
1653
+ }
1654
+ },
1655
+ "typography": {
1656
+ "type": "object",
1657
+ "additionalProperties": false,
1658
+ "properties": {
1659
+ "font": {
1660
+ "type": "object",
1661
+ "additionalProperties": false,
1662
+ "properties": {
1663
+ "font_family": {
1664
+ "type": "string",
1665
+ "maxLength": 200
1666
+ }
1667
+ }
1668
+ }
1669
+ }
1670
+ },
1671
+ "shape": {
1672
+ "type": "object",
1673
+ "additionalProperties": false,
1674
+ "properties": {
1675
+ "border_radius": {
1676
+ "type": "number",
1677
+ "minimum": 0,
1678
+ "maximum": 100
1679
+ }
1680
+ }
1681
+ }
1682
+ }
1683
+ },
1684
+ "spark_theme": {
1685
+ "type": "object",
1686
+ "additionalProperties": false,
1687
+ "properties": {
1688
+ "accentColor": {
1689
+ "type": "string",
1690
+ "maxLength": 200
1691
+ },
1692
+ "backgroundColor": {
1693
+ "type": "string",
1694
+ "maxLength": 200
1695
+ },
1696
+ "fontBody": {
1697
+ "type": "string",
1698
+ "maxLength": 200
1699
+ },
1700
+ "fontHeading": {
1701
+ "type": "string",
1702
+ "maxLength": 200
1703
+ },
1704
+ "radius": {
1705
+ "type": "string",
1706
+ "maxLength": 200
1707
+ },
1708
+ "scaling": {
1709
+ "type": "string",
1710
+ "maxLength": 200
1711
+ },
1712
+ "spacing": {
1713
+ "type": "string",
1714
+ "maxLength": 200
1715
+ },
1716
+ "appearance": {
1717
+ "type": "string",
1718
+ "maxLength": 200
1719
+ },
1720
+ "neutralColor": {
1721
+ "type": "string",
1722
+ "maxLength": 200
1723
+ },
1724
+ "styleVariant": {
1725
+ "type": "string",
1726
+ "maxLength": 200
1727
+ },
1728
+ "labelPosition": {
1729
+ "type": "string",
1730
+ "maxLength": 200
1731
+ },
1732
+ "inputStyle": {
1733
+ "type": "string",
1734
+ "maxLength": 200
1735
+ },
1736
+ "inputColor": {
1737
+ "type": "string",
1738
+ "maxLength": 200
1739
+ },
1740
+ "cardVariant": {
1741
+ "type": "string",
1742
+ "maxLength": 200
1743
+ },
1744
+ "cardColor": {
1745
+ "type": "string",
1746
+ "maxLength": 200
1747
+ },
1748
+ "highContrast": {
1749
+ "type": "boolean"
1750
+ }
1751
+ }
1752
+ }
1753
+ },
1754
+ "required": [
1755
+ "id"
1756
+ ]
1757
+ },
1758
+ "locales": {
1759
+ "type": "array",
1760
+ "items": {
1761
+ "type": "string",
1762
+ "enum": [
1763
+ "en",
1764
+ "de"
1765
+ ]
1766
+ }
1767
+ }
1768
+ }
1769
+ }
1770
+ }
1771
+ }
1772
+ }
1773
+ }
1774
+ },
1775
+ "default": {
1776
+ "description": "400 invalid input, 401 expired capability, 403 origin denied, 404 unpublished widget, 409 conflict, 413 too large, 429 rate limit, or 503 unavailable.",
1777
+ "content": {
1778
+ "application/json": {
1779
+ "schema": {
1780
+ "type": "object",
1781
+ "required": [
1782
+ "code"
1783
+ ],
1784
+ "properties": {
1785
+ "code": {
1786
+ "type": "string",
1787
+ "enum": [
1788
+ "INVALID_REQUEST",
1789
+ "ORIGIN_DENIED",
1790
+ "NOT_FOUND",
1791
+ "INVALID_GRANT",
1792
+ "SESSION_EXPIRED",
1793
+ "RATE_LIMITED",
1794
+ "SESSION_LIMIT",
1795
+ "USAGE_LIMIT",
1796
+ "REQUEST_CONFLICT",
1797
+ "IN_PROGRESS",
1798
+ "UNAVAILABLE",
1799
+ "TEMPORARILY_UNAVAILABLE"
1800
+ ]
1801
+ }
1802
+ }
1803
+ }
1804
+ }
1805
+ }
1806
+ }
1807
+ },
1808
+ "security": []
1809
+ }
1810
+ },
1811
+ "/v1/messages": {
1812
+ "post": {
1813
+ "operationId": "sendAnonymousChatMessage",
1814
+ "security": [
1815
+ {
1816
+ "AnonymousSession": []
1817
+ }
1818
+ ],
1819
+ "description": "Creates a turn or replays its persisted result. Reuse request_id and the exact\npayload for a retry. History, org, agent, tools and account identity cannot be supplied.\nTEMPORARILY_UNAVAILABLE means the request outcome could not be checked; retry the same request ID and payload.\nA running request returns 409 IN_PROGRESS; a changed payload returns 409 REQUEST_CONFLICT.\nA failed admitted request never starts another model execution when retried.\n",
1820
+ "requestBody": {
1821
+ "required": true,
1822
+ "content": {
1823
+ "application/json": {
1824
+ "schema": {
1825
+ "type": "object",
1826
+ "additionalProperties": false,
1827
+ "required": [
1828
+ "request_id",
1829
+ "message",
1830
+ "locale",
1831
+ "simple_language"
1832
+ ],
1833
+ "properties": {
1834
+ "request_id": {
1835
+ "type": "string",
1836
+ "format": "uuid",
1837
+ "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
1838
+ },
1839
+ "message": {
1840
+ "type": "string",
1841
+ "minLength": 1,
1842
+ "maxLength": 4000,
1843
+ "pattern": "\\S"
1844
+ },
1845
+ "locale": {
1846
+ "type": "string",
1847
+ "enum": [
1848
+ "en",
1849
+ "de"
1850
+ ]
1851
+ },
1852
+ "simple_language": {
1853
+ "type": "boolean"
1854
+ }
1855
+ }
1856
+ }
1857
+ }
1858
+ }
1859
+ },
1860
+ "responses": {
1861
+ "200": {
1862
+ "description": "SSE data frames whose JSON payload follows the PublicEvent component schema.\nOnly delta, complete and error events are public. Completion follows persistence.\n",
1863
+ "content": {
1864
+ "text/event-stream": {
1865
+ "schema": {
1866
+ "type": "string"
1867
+ },
1868
+ "example": "data: {\"type\":\"delta\",\"text\":\"Hello\",\"request_id\":\"bd73e89b-01a5-4e8c-b12b-2b1a743e2ae0\"}\n\ndata: {\"type\":\"complete\",\"text\":\"Hello\",\"request_id\":\"bd73e89b-01a5-4e8c-b12b-2b1a743e2ae0\"}\n\n"
1869
+ }
1870
+ }
1871
+ },
1872
+ "default": {
1873
+ "description": "400 invalid input, 401 expired capability, 403 origin denied, 404 unpublished widget, 409 conflict, 413 too large, 429 rate limit, or 503 unavailable.",
1874
+ "content": {
1875
+ "application/json": {
1876
+ "schema": {
1877
+ "type": "object",
1878
+ "required": [
1879
+ "code"
1880
+ ],
1881
+ "properties": {
1882
+ "code": {
1883
+ "type": "string",
1884
+ "enum": [
1885
+ "INVALID_REQUEST",
1886
+ "ORIGIN_DENIED",
1887
+ "NOT_FOUND",
1888
+ "INVALID_GRANT",
1889
+ "SESSION_EXPIRED",
1890
+ "RATE_LIMITED",
1891
+ "SESSION_LIMIT",
1892
+ "USAGE_LIMIT",
1893
+ "REQUEST_CONFLICT",
1894
+ "IN_PROGRESS",
1895
+ "UNAVAILABLE",
1896
+ "TEMPORARILY_UNAVAILABLE"
1897
+ ]
1898
+ }
1899
+ }
1900
+ }
1901
+ }
1902
+ }
1903
+ }
1904
+ }
1905
+ }
1906
+ }
1907
+ },
1908
+ "components": {
1909
+ "securitySchemes": {
1910
+ "EpilotAuth": {
1911
+ "type": "http",
1912
+ "scheme": "bearer"
1913
+ },
1914
+ "AnonymousSession": {
1915
+ "type": "http",
1916
+ "scheme": "bearer",
1917
+ "description": "Opaque, expiring anonymous session token; never an epilot user access token."
1918
+ }
1919
+ },
1920
+ "schemas": {
1921
+ "ListChatWidgetsResponse": {
1922
+ "type": "object",
1923
+ "required": [
1924
+ "widgets"
1925
+ ],
1926
+ "properties": {
1927
+ "widgets": {
1928
+ "type": "array",
1929
+ "items": {
1930
+ "type": "object",
1931
+ "required": [
1932
+ "widget_id",
1933
+ "org_id",
1934
+ "agent_id",
1935
+ "binding_id",
1936
+ "version",
1937
+ "name",
1938
+ "website_chat",
1939
+ "website_chat_embed",
1940
+ "created_at",
1941
+ "updated_at"
1942
+ ],
1943
+ "properties": {
1944
+ "name": {
1945
+ "type": "string",
1946
+ "minLength": 1,
1947
+ "maxLength": 100
1948
+ },
1949
+ "agent_id": {
1950
+ "type": "string",
1951
+ "format": "uuid",
1952
+ "nullable": true
1953
+ },
1954
+ "website_chat": {
1955
+ "type": "object",
1956
+ "additionalProperties": false,
1957
+ "required": [
1958
+ "allowed_origins",
1959
+ "organisation_name",
1960
+ "default_locale"
1961
+ ],
1962
+ "properties": {
1963
+ "allowed_origins": {
1964
+ "type": "array",
1965
+ "maxItems": 50,
1966
+ "uniqueItems": true,
1967
+ "description": "Exact HTTPS origins. Empty means the widget cannot start sessions.",
1968
+ "items": {
1969
+ "type": "string",
1970
+ "maxLength": 2048
1971
+ }
1972
+ },
1973
+ "organisation_name": {
1974
+ "type": "string",
1975
+ "minLength": 1,
1976
+ "maxLength": 100
1977
+ },
1978
+ "default_locale": {
1979
+ "type": "string",
1980
+ "enum": [
1981
+ "en",
1982
+ "de"
1983
+ ]
1984
+ },
1985
+ "design_id": {
1986
+ "type": "string",
1987
+ "format": "uuid",
1988
+ "nullable": true,
1989
+ "description": "Design Builder configuration for the widget only."
1990
+ },
1991
+ "authentication": {
1992
+ "type": "object",
1993
+ "additionalProperties": false,
1994
+ "properties": {
1995
+ "email_code": {
1996
+ "type": "object",
1997
+ "additionalProperties": false,
1998
+ "properties": {
1999
+ "email_template_id": {
2000
+ "type": "string",
2001
+ "format": "uuid",
2002
+ "nullable": true
2003
+ }
2004
+ }
2005
+ }
2006
+ },
2007
+ "nullable": true,
2008
+ "description": "Email Builder template selection. Does not enable verification by itself.",
2009
+ "required": [
2010
+ "email_code"
2011
+ ]
2012
+ }
2013
+ }
2014
+ },
2015
+ "widget_id": {
2016
+ "type": "string",
2017
+ "format": "uuid",
2018
+ "readOnly": true,
2019
+ "description": "Stable public embed identifier, independent of the assigned agent. Not a credential."
2020
+ },
2021
+ "org_id": {
2022
+ "type": "string",
2023
+ "readOnly": true
2024
+ },
2025
+ "binding_id": {
2026
+ "type": "string",
2027
+ "format": "uuid",
2028
+ "readOnly": true,
2029
+ "description": "Server-owned session binding; changes on reassignment or allowed-origin changes."
2030
+ },
2031
+ "version": {
2032
+ "type": "integer",
2033
+ "minimum": 1,
2034
+ "readOnly": true
2035
+ },
2036
+ "created_at": {
2037
+ "type": "string",
2038
+ "format": "date-time",
2039
+ "readOnly": true
2040
+ },
2041
+ "updated_at": {
2042
+ "type": "string",
2043
+ "format": "date-time",
2044
+ "readOnly": true
2045
+ },
2046
+ "website_chat_embed": {
2047
+ "type": "object",
2048
+ "readOnly": true,
2049
+ "required": [
2050
+ "script_url",
2051
+ "chat_api_origin",
2052
+ "demo_url"
2053
+ ],
2054
+ "properties": {
2055
+ "script_url": {
2056
+ "type": "string",
2057
+ "format": "uri"
2058
+ },
2059
+ "chat_api_origin": {
2060
+ "type": "string",
2061
+ "format": "uri"
2062
+ },
2063
+ "demo_url": {
2064
+ "type": "string",
2065
+ "format": "uri"
2066
+ }
2067
+ }
2068
+ }
2069
+ }
2070
+ }
2071
+ },
2072
+ "next_cursor": {
2073
+ "type": "string"
2074
+ }
2075
+ }
2076
+ },
2077
+ "ChatWidget": {
2078
+ "type": "object",
2079
+ "required": [
2080
+ "widget_id",
2081
+ "org_id",
2082
+ "agent_id",
2083
+ "binding_id",
2084
+ "version",
2085
+ "name",
2086
+ "website_chat",
2087
+ "website_chat_embed",
2088
+ "created_at",
2089
+ "updated_at"
2090
+ ],
2091
+ "properties": {
2092
+ "name": {
2093
+ "type": "string",
2094
+ "minLength": 1,
2095
+ "maxLength": 100
2096
+ },
2097
+ "agent_id": {
2098
+ "type": "string",
2099
+ "format": "uuid",
2100
+ "nullable": true
2101
+ },
2102
+ "website_chat": {
2103
+ "type": "object",
2104
+ "additionalProperties": false,
2105
+ "required": [
2106
+ "allowed_origins",
2107
+ "organisation_name",
2108
+ "default_locale"
2109
+ ],
2110
+ "properties": {
2111
+ "allowed_origins": {
2112
+ "type": "array",
2113
+ "maxItems": 50,
2114
+ "uniqueItems": true,
2115
+ "description": "Exact HTTPS origins. Empty means the widget cannot start sessions.",
2116
+ "items": {
2117
+ "type": "string",
2118
+ "maxLength": 2048
2119
+ }
2120
+ },
2121
+ "organisation_name": {
2122
+ "type": "string",
2123
+ "minLength": 1,
2124
+ "maxLength": 100
2125
+ },
2126
+ "default_locale": {
2127
+ "type": "string",
2128
+ "enum": [
2129
+ "en",
2130
+ "de"
2131
+ ]
2132
+ },
2133
+ "design_id": {
2134
+ "type": "string",
2135
+ "format": "uuid",
2136
+ "nullable": true,
2137
+ "description": "Design Builder configuration for the widget only."
2138
+ },
2139
+ "authentication": {
2140
+ "type": "object",
2141
+ "additionalProperties": false,
2142
+ "properties": {
2143
+ "email_code": {
2144
+ "type": "object",
2145
+ "additionalProperties": false,
2146
+ "properties": {
2147
+ "email_template_id": {
2148
+ "type": "string",
2149
+ "format": "uuid",
2150
+ "nullable": true
2151
+ }
2152
+ }
2153
+ }
2154
+ },
2155
+ "nullable": true,
2156
+ "description": "Email Builder template selection. Does not enable verification by itself.",
2157
+ "required": [
2158
+ "email_code"
2159
+ ]
2160
+ }
2161
+ }
2162
+ },
2163
+ "widget_id": {
2164
+ "type": "string",
2165
+ "format": "uuid",
2166
+ "readOnly": true,
2167
+ "description": "Stable public embed identifier, independent of the assigned agent. Not a credential."
2168
+ },
2169
+ "org_id": {
2170
+ "type": "string",
2171
+ "readOnly": true
2172
+ },
2173
+ "binding_id": {
2174
+ "type": "string",
2175
+ "format": "uuid",
2176
+ "readOnly": true,
2177
+ "description": "Server-owned session binding; changes on reassignment or allowed-origin changes."
2178
+ },
2179
+ "version": {
2180
+ "type": "integer",
2181
+ "minimum": 1,
2182
+ "readOnly": true
2183
+ },
2184
+ "created_at": {
2185
+ "type": "string",
2186
+ "format": "date-time",
2187
+ "readOnly": true
2188
+ },
2189
+ "updated_at": {
2190
+ "type": "string",
2191
+ "format": "date-time",
2192
+ "readOnly": true
2193
+ },
2194
+ "website_chat_embed": {
2195
+ "type": "object",
2196
+ "readOnly": true,
2197
+ "required": [
2198
+ "script_url",
2199
+ "chat_api_origin",
2200
+ "demo_url"
2201
+ ],
2202
+ "properties": {
2203
+ "script_url": {
2204
+ "type": "string",
2205
+ "format": "uri"
2206
+ },
2207
+ "chat_api_origin": {
2208
+ "type": "string",
2209
+ "format": "uri"
2210
+ },
2211
+ "demo_url": {
2212
+ "type": "string",
2213
+ "format": "uri"
2214
+ }
2215
+ }
2216
+ }
2217
+ }
2218
+ },
2219
+ "WebsiteChatSettings": {
2220
+ "type": "object",
2221
+ "additionalProperties": false,
2222
+ "required": [
2223
+ "allowed_origins",
2224
+ "organisation_name",
2225
+ "default_locale"
2226
+ ],
2227
+ "properties": {
2228
+ "allowed_origins": {
2229
+ "type": "array",
2230
+ "maxItems": 50,
2231
+ "uniqueItems": true,
2232
+ "description": "Exact HTTPS origins. Empty means the widget cannot start sessions.",
2233
+ "items": {
2234
+ "type": "string",
2235
+ "maxLength": 2048
2236
+ }
2237
+ },
2238
+ "organisation_name": {
2239
+ "type": "string",
2240
+ "minLength": 1,
2241
+ "maxLength": 100
2242
+ },
2243
+ "default_locale": {
2244
+ "type": "string",
2245
+ "enum": [
2246
+ "en",
2247
+ "de"
2248
+ ]
2249
+ },
2250
+ "design_id": {
2251
+ "type": "string",
2252
+ "format": "uuid",
2253
+ "nullable": true,
2254
+ "description": "Design Builder configuration for the widget only."
2255
+ },
2256
+ "authentication": {
2257
+ "type": "object",
2258
+ "additionalProperties": false,
2259
+ "properties": {
2260
+ "email_code": {
2261
+ "type": "object",
2262
+ "additionalProperties": false,
2263
+ "properties": {
2264
+ "email_template_id": {
2265
+ "type": "string",
2266
+ "format": "uuid",
2267
+ "nullable": true
2268
+ }
2269
+ }
2270
+ }
2271
+ },
2272
+ "nullable": true,
2273
+ "description": "Email Builder template selection. Does not enable verification by itself.",
2274
+ "required": [
2275
+ "email_code"
2276
+ ]
2277
+ }
2278
+ }
2279
+ },
2280
+ "Error": {
2281
+ "type": "object",
2282
+ "properties": {
2283
+ "error": {
2284
+ "type": "string"
2285
+ },
2286
+ "message": {
2287
+ "type": "string"
2288
+ },
2289
+ "details": {
2290
+ "type": "object"
2291
+ }
2292
+ }
2293
+ },
2294
+ "CreateChatWidgetRequest": {
2295
+ "type": "object",
2296
+ "additionalProperties": false,
2297
+ "required": [
2298
+ "name",
2299
+ "agent_id",
2300
+ "website_chat"
2301
+ ],
2302
+ "properties": {
2303
+ "name": {
2304
+ "type": "string",
2305
+ "minLength": 1,
2306
+ "maxLength": 100
2307
+ },
2308
+ "agent_id": {
2309
+ "type": "string",
2310
+ "format": "uuid",
2311
+ "nullable": true
2312
+ },
2313
+ "website_chat": {
2314
+ "type": "object",
2315
+ "additionalProperties": false,
2316
+ "required": [
2317
+ "allowed_origins",
2318
+ "organisation_name",
2319
+ "default_locale"
2320
+ ],
2321
+ "properties": {
2322
+ "allowed_origins": {
2323
+ "type": "array",
2324
+ "maxItems": 50,
2325
+ "uniqueItems": true,
2326
+ "description": "Exact HTTPS origins. Empty means the widget cannot start sessions.",
2327
+ "items": {
2328
+ "type": "string",
2329
+ "maxLength": 2048
2330
+ }
2331
+ },
2332
+ "organisation_name": {
2333
+ "type": "string",
2334
+ "minLength": 1,
2335
+ "maxLength": 100
2336
+ },
2337
+ "default_locale": {
2338
+ "type": "string",
2339
+ "enum": [
2340
+ "en",
2341
+ "de"
2342
+ ]
2343
+ },
2344
+ "design_id": {
2345
+ "type": "string",
2346
+ "format": "uuid",
2347
+ "nullable": true,
2348
+ "description": "Design Builder configuration for the widget only."
2349
+ },
2350
+ "authentication": {
2351
+ "type": "object",
2352
+ "additionalProperties": false,
2353
+ "properties": {
2354
+ "email_code": {
2355
+ "type": "object",
2356
+ "additionalProperties": false,
2357
+ "properties": {
2358
+ "email_template_id": {
2359
+ "type": "string",
2360
+ "format": "uuid",
2361
+ "nullable": true
2362
+ }
2363
+ }
2364
+ }
2365
+ },
2366
+ "nullable": true,
2367
+ "description": "Email Builder template selection. Does not enable verification by itself.",
2368
+ "required": [
2369
+ "email_code"
2370
+ ]
2371
+ }
2372
+ }
2373
+ }
2374
+ }
2375
+ },
2376
+ "UpdateChatWidgetRequest": {
2377
+ "type": "object",
2378
+ "additionalProperties": false,
2379
+ "required": [
2380
+ "version"
2381
+ ],
2382
+ "properties": {
2383
+ "name": {
2384
+ "type": "string",
2385
+ "minLength": 1,
2386
+ "maxLength": 100
2387
+ },
2388
+ "agent_id": {
2389
+ "type": "string",
2390
+ "format": "uuid",
2391
+ "nullable": true
2392
+ },
2393
+ "website_chat": {
2394
+ "type": "object",
2395
+ "additionalProperties": false,
2396
+ "required": [
2397
+ "allowed_origins",
2398
+ "organisation_name",
2399
+ "default_locale"
2400
+ ],
2401
+ "properties": {
2402
+ "allowed_origins": {
2403
+ "type": "array",
2404
+ "maxItems": 50,
2405
+ "uniqueItems": true,
2406
+ "description": "Exact HTTPS origins. Empty means the widget cannot start sessions.",
2407
+ "items": {
2408
+ "type": "string",
2409
+ "maxLength": 2048
2410
+ }
2411
+ },
2412
+ "organisation_name": {
2413
+ "type": "string",
2414
+ "minLength": 1,
2415
+ "maxLength": 100
2416
+ },
2417
+ "default_locale": {
2418
+ "type": "string",
2419
+ "enum": [
2420
+ "en",
2421
+ "de"
2422
+ ]
2423
+ },
2424
+ "design_id": {
2425
+ "type": "string",
2426
+ "format": "uuid",
2427
+ "nullable": true,
2428
+ "description": "Design Builder configuration for the widget only."
2429
+ },
2430
+ "authentication": {
2431
+ "type": "object",
2432
+ "additionalProperties": false,
2433
+ "properties": {
2434
+ "email_code": {
2435
+ "type": "object",
2436
+ "additionalProperties": false,
2437
+ "properties": {
2438
+ "email_template_id": {
2439
+ "type": "string",
2440
+ "format": "uuid",
2441
+ "nullable": true
2442
+ }
2443
+ }
2444
+ }
2445
+ },
2446
+ "nullable": true,
2447
+ "description": "Email Builder template selection. Does not enable verification by itself.",
2448
+ "required": [
2449
+ "email_code"
2450
+ ]
2451
+ }
2452
+ }
2453
+ },
2454
+ "version": {
2455
+ "type": "integer",
2456
+ "minimum": 1,
2457
+ "description": "Version read by the editor; stale writes return 409."
2458
+ }
2459
+ }
2460
+ },
2461
+ "Widget": {
2462
+ "type": "object",
2463
+ "required": [
2464
+ "key",
2465
+ "organisationName",
2466
+ "assistantName",
2467
+ "defaultLocale",
2468
+ "locales"
2469
+ ],
2470
+ "properties": {
2471
+ "key": {
2472
+ "type": "string"
2473
+ },
2474
+ "organisationName": {
2475
+ "type": "string"
2476
+ },
2477
+ "assistantName": {
2478
+ "type": "string"
2479
+ },
2480
+ "defaultLocale": {
2481
+ "type": "string",
2482
+ "enum": [
2483
+ "en",
2484
+ "de"
2485
+ ]
2486
+ },
2487
+ "design": {
2488
+ "type": "object",
2489
+ "additionalProperties": false,
2490
+ "properties": {
2491
+ "id": {
2492
+ "type": "string",
2493
+ "format": "uuid"
2494
+ },
2495
+ "last_modified_at": {
2496
+ "type": "string",
2497
+ "maxLength": 200
2498
+ },
2499
+ "style": {
2500
+ "type": "object",
2501
+ "additionalProperties": false,
2502
+ "properties": {
2503
+ "palette": {
2504
+ "type": "object",
2505
+ "additionalProperties": false,
2506
+ "properties": {
2507
+ "primary": {
2508
+ "type": "string",
2509
+ "maxLength": 200
2510
+ },
2511
+ "background": {
2512
+ "type": "string",
2513
+ "maxLength": 200
2514
+ }
2515
+ }
2516
+ },
2517
+ "typography": {
2518
+ "type": "object",
2519
+ "additionalProperties": false,
2520
+ "properties": {
2521
+ "font": {
2522
+ "type": "object",
2523
+ "additionalProperties": false,
2524
+ "properties": {
2525
+ "font_family": {
2526
+ "type": "string",
2527
+ "maxLength": 200
2528
+ }
2529
+ }
2530
+ }
2531
+ }
2532
+ },
2533
+ "shape": {
2534
+ "type": "object",
2535
+ "additionalProperties": false,
2536
+ "properties": {
2537
+ "border_radius": {
2538
+ "type": "number",
2539
+ "minimum": 0,
2540
+ "maximum": 100
2541
+ }
2542
+ }
2543
+ }
2544
+ }
2545
+ },
2546
+ "spark_theme": {
2547
+ "type": "object",
2548
+ "additionalProperties": false,
2549
+ "properties": {
2550
+ "accentColor": {
2551
+ "type": "string",
2552
+ "maxLength": 200
2553
+ },
2554
+ "backgroundColor": {
2555
+ "type": "string",
2556
+ "maxLength": 200
2557
+ },
2558
+ "fontBody": {
2559
+ "type": "string",
2560
+ "maxLength": 200
2561
+ },
2562
+ "fontHeading": {
2563
+ "type": "string",
2564
+ "maxLength": 200
2565
+ },
2566
+ "radius": {
2567
+ "type": "string",
2568
+ "maxLength": 200
2569
+ },
2570
+ "scaling": {
2571
+ "type": "string",
2572
+ "maxLength": 200
2573
+ },
2574
+ "spacing": {
2575
+ "type": "string",
2576
+ "maxLength": 200
2577
+ },
2578
+ "appearance": {
2579
+ "type": "string",
2580
+ "maxLength": 200
2581
+ },
2582
+ "neutralColor": {
2583
+ "type": "string",
2584
+ "maxLength": 200
2585
+ },
2586
+ "styleVariant": {
2587
+ "type": "string",
2588
+ "maxLength": 200
2589
+ },
2590
+ "labelPosition": {
2591
+ "type": "string",
2592
+ "maxLength": 200
2593
+ },
2594
+ "inputStyle": {
2595
+ "type": "string",
2596
+ "maxLength": 200
2597
+ },
2598
+ "inputColor": {
2599
+ "type": "string",
2600
+ "maxLength": 200
2601
+ },
2602
+ "cardVariant": {
2603
+ "type": "string",
2604
+ "maxLength": 200
2605
+ },
2606
+ "cardColor": {
2607
+ "type": "string",
2608
+ "maxLength": 200
2609
+ },
2610
+ "highContrast": {
2611
+ "type": "boolean"
2612
+ }
2613
+ }
2614
+ }
2615
+ },
2616
+ "required": [
2617
+ "id"
2618
+ ]
2619
+ },
2620
+ "locales": {
2621
+ "type": "array",
2622
+ "items": {
2623
+ "type": "string",
2624
+ "enum": [
2625
+ "en",
2626
+ "de"
2627
+ ]
2628
+ }
2629
+ }
2630
+ }
2631
+ },
2632
+ "WidgetDesign": {
2633
+ "type": "object",
2634
+ "additionalProperties": false,
2635
+ "properties": {
2636
+ "id": {
2637
+ "type": "string",
2638
+ "format": "uuid"
2639
+ },
2640
+ "last_modified_at": {
2641
+ "type": "string",
2642
+ "maxLength": 200
2643
+ },
2644
+ "style": {
2645
+ "type": "object",
2646
+ "additionalProperties": false,
2647
+ "properties": {
2648
+ "palette": {
2649
+ "type": "object",
2650
+ "additionalProperties": false,
2651
+ "properties": {
2652
+ "primary": {
2653
+ "type": "string",
2654
+ "maxLength": 200
2655
+ },
2656
+ "background": {
2657
+ "type": "string",
2658
+ "maxLength": 200
2659
+ }
2660
+ }
2661
+ },
2662
+ "typography": {
2663
+ "type": "object",
2664
+ "additionalProperties": false,
2665
+ "properties": {
2666
+ "font": {
2667
+ "type": "object",
2668
+ "additionalProperties": false,
2669
+ "properties": {
2670
+ "font_family": {
2671
+ "type": "string",
2672
+ "maxLength": 200
2673
+ }
2674
+ }
2675
+ }
2676
+ }
2677
+ },
2678
+ "shape": {
2679
+ "type": "object",
2680
+ "additionalProperties": false,
2681
+ "properties": {
2682
+ "border_radius": {
2683
+ "type": "number",
2684
+ "minimum": 0,
2685
+ "maximum": 100
2686
+ }
2687
+ }
2688
+ }
2689
+ }
2690
+ },
2691
+ "spark_theme": {
2692
+ "type": "object",
2693
+ "additionalProperties": false,
2694
+ "properties": {
2695
+ "accentColor": {
2696
+ "type": "string",
2697
+ "maxLength": 200
2698
+ },
2699
+ "backgroundColor": {
2700
+ "type": "string",
2701
+ "maxLength": 200
2702
+ },
2703
+ "fontBody": {
2704
+ "type": "string",
2705
+ "maxLength": 200
2706
+ },
2707
+ "fontHeading": {
2708
+ "type": "string",
2709
+ "maxLength": 200
2710
+ },
2711
+ "radius": {
2712
+ "type": "string",
2713
+ "maxLength": 200
2714
+ },
2715
+ "scaling": {
2716
+ "type": "string",
2717
+ "maxLength": 200
2718
+ },
2719
+ "spacing": {
2720
+ "type": "string",
2721
+ "maxLength": 200
2722
+ },
2723
+ "appearance": {
2724
+ "type": "string",
2725
+ "maxLength": 200
2726
+ },
2727
+ "neutralColor": {
2728
+ "type": "string",
2729
+ "maxLength": 200
2730
+ },
2731
+ "styleVariant": {
2732
+ "type": "string",
2733
+ "maxLength": 200
2734
+ },
2735
+ "labelPosition": {
2736
+ "type": "string",
2737
+ "maxLength": 200
2738
+ },
2739
+ "inputStyle": {
2740
+ "type": "string",
2741
+ "maxLength": 200
2742
+ },
2743
+ "inputColor": {
2744
+ "type": "string",
2745
+ "maxLength": 200
2746
+ },
2747
+ "cardVariant": {
2748
+ "type": "string",
2749
+ "maxLength": 200
2750
+ },
2751
+ "cardColor": {
2752
+ "type": "string",
2753
+ "maxLength": 200
2754
+ },
2755
+ "highContrast": {
2756
+ "type": "boolean"
2757
+ }
2758
+ }
2759
+ }
2760
+ },
2761
+ "required": [
2762
+ "id"
2763
+ ]
2764
+ },
2765
+ "PublicEvent": {
2766
+ "description": "JSON payload of one SSE data frame from sendAnonymousChatMessage.",
2767
+ "oneOf": [
2768
+ {
2769
+ "type": "object",
2770
+ "additionalProperties": false,
2771
+ "required": [
2772
+ "type",
2773
+ "text",
2774
+ "request_id"
2775
+ ],
2776
+ "properties": {
2777
+ "type": {
2778
+ "type": "string",
2779
+ "enum": [
2780
+ "delta"
2781
+ ]
2782
+ },
2783
+ "text": {
2784
+ "type": "string",
2785
+ "maxLength": 12000
2786
+ },
2787
+ "request_id": {
2788
+ "type": "string",
2789
+ "format": "uuid"
2790
+ }
2791
+ }
2792
+ },
2793
+ {
2794
+ "type": "object",
2795
+ "additionalProperties": false,
2796
+ "required": [
2797
+ "type",
2798
+ "text",
2799
+ "request_id"
2800
+ ],
2801
+ "properties": {
2802
+ "type": {
2803
+ "type": "string",
2804
+ "enum": [
2805
+ "complete"
2806
+ ]
2807
+ },
2808
+ "text": {
2809
+ "type": "string",
2810
+ "minLength": 1,
2811
+ "maxLength": 12000
2812
+ },
2813
+ "request_id": {
2814
+ "type": "string",
2815
+ "format": "uuid"
2816
+ }
2817
+ }
2818
+ },
2819
+ {
2820
+ "type": "object",
2821
+ "additionalProperties": false,
2822
+ "required": [
2823
+ "type",
2824
+ "code",
2825
+ "request_id"
2826
+ ],
2827
+ "properties": {
2828
+ "type": {
2829
+ "type": "string",
2830
+ "enum": [
2831
+ "error"
2832
+ ]
2833
+ },
2834
+ "code": {
2835
+ "type": "string",
2836
+ "enum": [
2837
+ "UNAVAILABLE"
2838
+ ]
2839
+ },
2840
+ "request_id": {
2841
+ "type": "string",
2842
+ "format": "uuid"
2843
+ }
2844
+ }
2845
+ }
2846
+ ]
2847
+ },
2848
+ "PublicChatError": {
2849
+ "type": "object",
2850
+ "required": [
2851
+ "code"
2852
+ ],
2853
+ "properties": {
2854
+ "code": {
2855
+ "type": "string",
2856
+ "enum": [
2857
+ "INVALID_REQUEST",
2858
+ "ORIGIN_DENIED",
2859
+ "NOT_FOUND",
2860
+ "INVALID_GRANT",
2861
+ "SESSION_EXPIRED",
2862
+ "RATE_LIMITED",
2863
+ "SESSION_LIMIT",
2864
+ "USAGE_LIMIT",
2865
+ "REQUEST_CONFLICT",
2866
+ "IN_PROGRESS",
2867
+ "UNAVAILABLE",
2868
+ "TEMPORARILY_UNAVAILABLE"
2869
+ ]
2870
+ }
2871
+ }
2872
+ }
2873
+ },
2874
+ "responses": {
2875
+ "Error": {
2876
+ "description": "400 invalid input, 401 expired capability, 403 origin denied, 404 unpublished widget, 409 conflict, 413 too large, 429 rate limit, or 503 unavailable.",
2877
+ "content": {
2878
+ "application/json": {
2879
+ "schema": {
2880
+ "type": "object",
2881
+ "required": [
2882
+ "code"
2883
+ ],
2884
+ "properties": {
2885
+ "code": {
2886
+ "type": "string",
2887
+ "enum": [
2888
+ "INVALID_REQUEST",
2889
+ "ORIGIN_DENIED",
2890
+ "NOT_FOUND",
2891
+ "INVALID_GRANT",
2892
+ "SESSION_EXPIRED",
2893
+ "RATE_LIMITED",
2894
+ "SESSION_LIMIT",
2895
+ "USAGE_LIMIT",
2896
+ "REQUEST_CONFLICT",
2897
+ "IN_PROGRESS",
2898
+ "UNAVAILABLE",
2899
+ "TEMPORARILY_UNAVAILABLE"
2900
+ ]
2901
+ }
2902
+ }
2903
+ }
2904
+ }
2905
+ }
2906
+ }
2907
+ }
2908
+ }
2909
+ }