@epilot/sdk 2.8.10 → 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/README.md +0 -1
  2. package/definitions/access-token-runtime.json +1 -1
  3. package/definitions/access-token.json +1 -155
  4. package/definitions/automation.json +0 -120
  5. package/definitions/blueprint-manifest-runtime.json +1 -1
  6. package/definitions/blueprint-manifest.json +1 -571
  7. package/definitions/focus-pocus-runtime.json +1 -0
  8. package/definitions/focus-pocus.json +757 -0
  9. package/definitions/integration-toolkit.json +30 -5
  10. package/definitions/journey.json +2 -19
  11. package/definitions/targeting.json +4 -5
  12. package/definitions/user-runtime.json +1 -1
  13. package/definitions/user.json +0 -441
  14. package/dist/README-46VYEGGW.js +7 -0
  15. package/dist/README-IVBISSWB.cjs +7 -0
  16. package/dist/{_index-UY46ZN47.js → _index-5FB6F5YY.js} +0 -3
  17. package/dist/{_index-D5TTZP5F.cjs → _index-DB2VV4PQ.cjs} +1 -4
  18. package/dist/access-token-6BJDZSFE.cjs +7 -0
  19. package/dist/access-token-GSQZLDXR.js +7 -0
  20. package/dist/{access-token-runtime-2PSLN2U3.js → access-token-runtime-KCKGT4O7.js} +1 -1
  21. package/dist/{access-token-runtime-B6Z7JLUS.cjs → access-token-runtime-NZWZJPWV.cjs} +2 -2
  22. package/dist/{access-token.d-CegaQmrK.d.cts → access-token.d-CnmUTOlq.d.cts} +5 -165
  23. package/dist/{access-token.d-CegaQmrK.d.ts → access-token.d-CnmUTOlq.d.ts} +5 -165
  24. package/dist/{ai-agents.d-CC5IjXrs.d.ts → ai-agents.d-OkXfr2bz.d.cts} +2 -0
  25. package/dist/{ai-agents.d-CC5IjXrs.d.cts → ai-agents.d-OkXfr2bz.d.ts} +2 -0
  26. package/dist/apis/access-token.cjs +8 -8
  27. package/dist/apis/access-token.d.cts +2 -2
  28. package/dist/apis/access-token.d.ts +2 -2
  29. package/dist/apis/access-token.js +2 -2
  30. package/dist/apis/address-suggestions.cjs +6 -6
  31. package/dist/apis/address-suggestions.js +1 -1
  32. package/dist/apis/address.cjs +6 -6
  33. package/dist/apis/address.js +1 -1
  34. package/dist/apis/ai-agents.cjs +6 -6
  35. package/dist/apis/ai-agents.d.cts +2 -2
  36. package/dist/apis/ai-agents.d.ts +2 -2
  37. package/dist/apis/ai-agents.js +1 -1
  38. package/dist/apis/app.cjs +6 -6
  39. package/dist/apis/app.js +1 -1
  40. package/dist/apis/audit-logs.cjs +6 -6
  41. package/dist/apis/audit-logs.js +1 -1
  42. package/dist/apis/automation.cjs +6 -6
  43. package/dist/apis/automation.d.cts +2 -2
  44. package/dist/apis/automation.d.ts +2 -2
  45. package/dist/apis/automation.js +1 -1
  46. package/dist/apis/billing.cjs +6 -6
  47. package/dist/apis/billing.js +1 -1
  48. package/dist/apis/blueprint-manifest.cjs +8 -8
  49. package/dist/apis/blueprint-manifest.d.cts +2 -2
  50. package/dist/apis/blueprint-manifest.d.ts +2 -2
  51. package/dist/apis/blueprint-manifest.js +2 -2
  52. package/dist/apis/calendar.cjs +6 -6
  53. package/dist/apis/calendar.js +1 -1
  54. package/dist/apis/configuration-hub.cjs +6 -6
  55. package/dist/apis/configuration-hub.js +1 -1
  56. package/dist/apis/consent.cjs +6 -6
  57. package/dist/apis/consent.js +1 -1
  58. package/dist/apis/customer-portal.cjs +6 -6
  59. package/dist/apis/customer-portal.js +1 -1
  60. package/dist/apis/dashboard.cjs +6 -6
  61. package/dist/apis/dashboard.js +1 -1
  62. package/dist/apis/data-governance.cjs +6 -6
  63. package/dist/apis/data-governance.js +1 -1
  64. package/dist/apis/deduplication.cjs +6 -6
  65. package/dist/apis/deduplication.js +1 -1
  66. package/dist/apis/design.cjs +6 -6
  67. package/dist/apis/design.js +1 -1
  68. package/dist/apis/document.cjs +6 -6
  69. package/dist/apis/document.js +1 -1
  70. package/dist/apis/email-settings.cjs +6 -6
  71. package/dist/apis/email-settings.js +1 -1
  72. package/dist/apis/email-template.cjs +6 -6
  73. package/dist/apis/email-template.js +1 -1
  74. package/dist/apis/entity-mapping.cjs +6 -6
  75. package/dist/apis/entity-mapping.js +1 -1
  76. package/dist/apis/entity.cjs +6 -6
  77. package/dist/apis/entity.js +1 -1
  78. package/dist/apis/environments.cjs +6 -6
  79. package/dist/apis/environments.js +1 -1
  80. package/dist/apis/event-catalog.cjs +6 -6
  81. package/dist/apis/event-catalog.js +1 -1
  82. package/dist/apis/file.cjs +6 -6
  83. package/dist/apis/file.js +1 -1
  84. package/dist/apis/iban.cjs +6 -6
  85. package/dist/apis/iban.js +1 -1
  86. package/dist/apis/integration-toolkit.cjs +6 -6
  87. package/dist/apis/integration-toolkit.d.cts +2 -2
  88. package/dist/apis/integration-toolkit.d.ts +2 -2
  89. package/dist/apis/integration-toolkit.js +1 -1
  90. package/dist/apis/journey.cjs +6 -6
  91. package/dist/apis/journey.d.cts +2 -2
  92. package/dist/apis/journey.d.ts +2 -2
  93. package/dist/apis/journey.js +1 -1
  94. package/dist/apis/kanban.cjs +6 -6
  95. package/dist/apis/kanban.js +1 -1
  96. package/dist/apis/message.cjs +6 -6
  97. package/dist/apis/message.js +1 -1
  98. package/dist/apis/metering.cjs +6 -6
  99. package/dist/apis/metering.js +1 -1
  100. package/dist/apis/notes.cjs +6 -6
  101. package/dist/apis/notes.js +1 -1
  102. package/dist/apis/notification.cjs +6 -6
  103. package/dist/apis/notification.js +1 -1
  104. package/dist/apis/organization.cjs +6 -6
  105. package/dist/apis/organization.js +1 -1
  106. package/dist/apis/partner-directory.cjs +6 -6
  107. package/dist/apis/partner-directory.js +1 -1
  108. package/dist/apis/permissions.cjs +6 -6
  109. package/dist/apis/permissions.js +1 -1
  110. package/dist/apis/pricing-tier.cjs +6 -6
  111. package/dist/apis/pricing-tier.js +1 -1
  112. package/dist/apis/pricing.cjs +6 -6
  113. package/dist/apis/pricing.js +1 -1
  114. package/dist/apis/purpose.cjs +6 -6
  115. package/dist/apis/purpose.js +1 -1
  116. package/dist/apis/query.cjs +6 -6
  117. package/dist/apis/query.js +1 -1
  118. package/dist/apis/sandbox.cjs +6 -6
  119. package/dist/apis/sandbox.js +1 -1
  120. package/dist/apis/sharing.cjs +6 -6
  121. package/dist/apis/sharing.js +1 -1
  122. package/dist/apis/submission.cjs +6 -6
  123. package/dist/apis/submission.js +1 -1
  124. package/dist/apis/target.cjs +6 -6
  125. package/dist/apis/target.js +1 -1
  126. package/dist/apis/targeting.cjs +6 -6
  127. package/dist/apis/targeting.d.cts +2 -2
  128. package/dist/apis/targeting.d.ts +2 -2
  129. package/dist/apis/targeting.js +1 -1
  130. package/dist/apis/template-variables.cjs +6 -6
  131. package/dist/apis/template-variables.js +1 -1
  132. package/dist/apis/user.cjs +8 -8
  133. package/dist/apis/user.d.cts +2 -2
  134. package/dist/apis/user.d.ts +2 -2
  135. package/dist/apis/user.js +2 -2
  136. package/dist/apis/validation-rules.cjs +6 -6
  137. package/dist/apis/validation-rules.js +1 -1
  138. package/dist/apis/webhooks.cjs +6 -6
  139. package/dist/apis/webhooks.js +1 -1
  140. package/dist/apis/workflow-definition.cjs +6 -6
  141. package/dist/apis/workflow-definition.js +1 -1
  142. package/dist/apis/workflow.cjs +6 -6
  143. package/dist/apis/workflow.js +1 -1
  144. package/dist/automation-BMO7ZFTN.cjs +7 -0
  145. package/dist/automation-MEZTSUR3.js +7 -0
  146. package/dist/{automation.d-DS_YXDE8.d.cts → automation.d-Du6-uiz5.d.cts} +1 -300
  147. package/dist/{automation.d-DS_YXDE8.d.ts → automation.d-Du6-uiz5.d.ts} +1 -300
  148. package/dist/blueprint-manifest-6DEYW5MW.js +7 -0
  149. package/dist/blueprint-manifest-GCV7H74X.cjs +7 -0
  150. package/dist/{blueprint-manifest-runtime-WU5MWPVT.cjs → blueprint-manifest-runtime-EIDOROIQ.cjs} +2 -2
  151. package/dist/{blueprint-manifest-runtime-2344IUIE.js → blueprint-manifest-runtime-FRLU3ZSF.js} +1 -1
  152. package/dist/{blueprint-manifest.d-2-TORV8o.d.ts → blueprint-manifest.d-B8yDxagC.d.cts} +4 -926
  153. package/dist/{blueprint-manifest.d-2-TORV8o.d.cts → blueprint-manifest.d-B8yDxagC.d.ts} +4 -926
  154. package/dist/chunk-3XKBB5AE.js +14 -0
  155. package/dist/{chunk-UWGWRGGB.js → chunk-4YBWMDFP.js} +1 -1
  156. package/dist/{chunk-OMZ2LWNR.cjs → chunk-CULH5PIN.cjs} +12 -14
  157. package/dist/{chunk-T57MT6J5.cjs → chunk-NGHCQ2FA.cjs} +1 -1
  158. package/dist/{chunk-S5HBBTKM.cjs → chunk-OXJOO2YF.cjs} +1 -1
  159. package/dist/{chunk-H5BH4GQQ.js → chunk-RZ4ABDOF.js} +12 -14
  160. package/dist/{chunk-OHHHS4HH.js → chunk-XSE4CFSM.js} +1 -1
  161. package/dist/chunk-Z5TVWG3I.cjs +14 -0
  162. package/dist/index.cjs +16 -24
  163. package/dist/index.d.cts +22 -24
  164. package/dist/index.d.ts +22 -24
  165. package/dist/index.js +6 -14
  166. package/dist/integration-toolkit-334NGEOE.cjs +7 -0
  167. package/dist/integration-toolkit-5VCY6CUN.js +7 -0
  168. package/dist/{integration-toolkit.d-BW9RK5G-.d.cts → integration-toolkit.d-BSA9RRdq.d.cts} +22 -4
  169. package/dist/{integration-toolkit.d-BW9RK5G-.d.ts → integration-toolkit.d-BSA9RRdq.d.ts} +22 -4
  170. package/dist/journey-4DIIPRU4.js +7 -0
  171. package/dist/journey-ATC3Y5AW.cjs +7 -0
  172. package/dist/{journey.d-B1sOeMHw.d.cts → journey.d-BenIUWaO.d.cts} +3 -16
  173. package/dist/{journey.d-B1sOeMHw.d.ts → journey.d-BenIUWaO.d.ts} +3 -16
  174. package/dist/js-yaml-DLCVPJ7G.js +0 -0
  175. package/dist/{targeting-WC62BBZN.cjs → targeting-DAFJBPIZ.cjs} +1 -1
  176. package/dist/{targeting-X4Y2ODBT.js → targeting-TGPCRRI6.js} +1 -1
  177. package/dist/{targeting.d-0rNF7ErD.d.cts → targeting.d-DxHQbn7-.d.cts} +4 -11
  178. package/dist/{targeting.d-0rNF7ErD.d.ts → targeting.d-DxHQbn7-.d.ts} +4 -11
  179. package/dist/user-7ZN2XO7G.cjs +7 -0
  180. package/dist/user-ZK7BK6VY.js +7 -0
  181. package/dist/user-runtime-7O2HLFVQ.cjs +5 -0
  182. package/dist/{user-runtime-6ICV2Y73.js → user-runtime-U4HYUWJU.js} +1 -1
  183. package/dist/{user.d-L-C7_K84.d.cts → user.d-D18fe97W.d.cts} +1 -421
  184. package/dist/{user.d-L-C7_K84.d.ts → user.d-D18fe97W.d.ts} +1 -421
  185. package/docs/access-token.md +3 -111
  186. package/docs/automation.md +37 -180
  187. package/docs/blueprint-manifest.md +95 -421
  188. package/docs/integration-toolkit.md +13 -0
  189. package/docs/journey.md +8 -28
  190. package/docs/targeting.md +3 -6
  191. package/docs/user.md +8 -321
  192. package/package.json +12 -20
  193. package/LICENSE +0 -21
  194. package/definitions/snapshot-runtime.json +0 -1
  195. package/definitions/snapshot.json +0 -966
  196. package/dist/README-NBWAQWQS.js +0 -7
  197. package/dist/README-XCIDDEAE.cjs +0 -7
  198. package/dist/access-token-GD6REL4U.js +0 -7
  199. package/dist/access-token-NQ5BLMOW.cjs +0 -7
  200. package/dist/apis/snapshot.cjs +0 -38
  201. package/dist/apis/snapshot.d.cts +0 -18
  202. package/dist/apis/snapshot.d.ts +0 -18
  203. package/dist/apis/snapshot.js +0 -38
  204. package/dist/automation-S6NFS5KU.cjs +0 -7
  205. package/dist/automation-W75XZG7B.js +0 -7
  206. package/dist/blueprint-manifest-WHYSBU66.cjs +0 -7
  207. package/dist/blueprint-manifest-WZVBTKUL.js +0 -7
  208. package/dist/chunk-54QNWEPZ.js +0 -14
  209. package/dist/chunk-NFIYEMMM.js +0 -14
  210. package/dist/chunk-OWXEZ56F.cjs +0 -14
  211. package/dist/chunk-YXJ4PBFQ.cjs +0 -14
  212. package/dist/integration-toolkit-27Z3VZBZ.cjs +0 -7
  213. package/dist/integration-toolkit-NRLZZFVS.js +0 -7
  214. package/dist/journey-LHVSSVTG.cjs +0 -7
  215. package/dist/journey-NXL264XW.js +0 -7
  216. package/dist/snapshot-HFVQTHYF.cjs +0 -7
  217. package/dist/snapshot-Y6A7QUYS.js +0 -7
  218. package/dist/snapshot-runtime-6DV42FVY.cjs +0 -5
  219. package/dist/snapshot-runtime-IW57MINC.js +0 -5
  220. package/dist/snapshot.d-CPTXg4xN.d.cts +0 -751
  221. package/dist/snapshot.d-CPTXg4xN.d.ts +0 -751
  222. package/dist/user-3SLAEEVD.cjs +0 -7
  223. package/dist/user-PRUYBXQV.js +0 -7
  224. package/dist/user-runtime-Y3227ETX.cjs +0 -5
  225. package/docs/snapshot.md +0 -654
@@ -1,966 +0,0 @@
1
- {
2
- "openapi": "3.0.3",
3
- "info": {
4
- "title": "Snapshot API",
5
- "description": "Point-in-time backups of epilot configuration with restore.\n\nProvides a safety net for configuration changes: every blueprint install,\nevery Configuration Hub sync, and every manual config change can be preceded\nby a snapshot — giving operators a rollback point if something breaks.\n\nSee `docs/rfcs/RFC-snapshot-api.md` in the `blueprint-manifest-api` repo\nfor the full design.\n",
6
- "version": "0.1.0"
7
- },
8
- "servers": [
9
- {
10
- "url": "https://snapshot.sls.epilot.io"
11
- },
12
- {
13
- "url": "https://snapshot.dev.sls.epilot.io",
14
- "description": "Dev"
15
- },
16
- {
17
- "url": "https://snapshot.staging.sls.epilot.io",
18
- "description": "Staging"
19
- }
20
- ],
21
- "security": [
22
- {
23
- "EpilotAuth": []
24
- }
25
- ],
26
- "tags": [
27
- {
28
- "name": "Snapshots",
29
- "description": "Snapshot CRUD and restore operations"
30
- }
31
- ],
32
- "paths": {
33
- "/v1/snapshots": {
34
- "post": {
35
- "operationId": "createSnapshot",
36
- "summary": "createSnapshot",
37
- "description": "Create a new snapshot of the given resources. Async — returns immediately\nwith a snapshot ID; client polls `getSnapshot` until `create.status`\nmoves from `in_progress` to `completed` or `failed`.\n",
38
- "tags": [
39
- "Snapshots"
40
- ],
41
- "requestBody": {
42
- "required": true,
43
- "content": {
44
- "application/json": {
45
- "schema": {
46
- "$ref": "#/components/schemas/CreateSnapshotRequest"
47
- }
48
- }
49
- }
50
- },
51
- "responses": {
52
- "202": {
53
- "description": "Snapshot creation started",
54
- "content": {
55
- "application/json": {
56
- "schema": {
57
- "$ref": "#/components/schemas/CreateSnapshotResponse"
58
- }
59
- }
60
- }
61
- },
62
- "400": {
63
- "$ref": "#/components/responses/BadRequest"
64
- },
65
- "401": {
66
- "$ref": "#/components/responses/Unauthorized"
67
- }
68
- }
69
- },
70
- "get": {
71
- "operationId": "listSnapshots",
72
- "summary": "listSnapshots",
73
- "description": "List snapshots for the caller's organization, newest first.\n\nPass `resource=<type>:<id>` one or more times to filter to snapshots\ncontaining **any** of the listed resources (OR semantics). Each returned\nsnapshot includes a `matched_count` indicating how many of the filter\npairs are present in it. Hard cap of 50 filter pairs per request. When\nfiltered, pagination is not applied — the result set is bounded.\n",
74
- "tags": [
75
- "Snapshots"
76
- ],
77
- "parameters": [
78
- {
79
- "in": "query",
80
- "name": "cursor",
81
- "schema": {
82
- "type": "string"
83
- }
84
- },
85
- {
86
- "in": "query",
87
- "name": "size",
88
- "schema": {
89
- "type": "integer",
90
- "minimum": 1,
91
- "maximum": 100,
92
- "default": 25
93
- }
94
- },
95
- {
96
- "in": "query",
97
- "name": "resource",
98
- "description": "Filter to snapshots containing one or more resources. Format\n`<type>:<id>`. Split on the first colon — the `<id>` half may\ncontain colons (e.g., role acl ids like `role:acl:internal:foo`).\nRepeat the param for multiple resources — results are OR-unioned.\nMaximum 50 pairs per request.\n",
99
- "schema": {
100
- "type": "array",
101
- "items": {
102
- "type": "string",
103
- "pattern": "^[^:]+:.+$"
104
- }
105
- }
106
- },
107
- {
108
- "in": "query",
109
- "name": "trigger",
110
- "description": "Filter to snapshots with a specific trigger. Uses the `byTrigger` GSI\nfor an efficient indexed query — no table scan. Only snapshots created\nafter the GSI was added carry this index entry; pre-existing rows will\nnot appear in trigger-filtered results.\n",
111
- "schema": {
112
- "type": "string",
113
- "enum": [
114
- "manual",
115
- "sync",
116
- "blueprint_install",
117
- "scheduled"
118
- ]
119
- }
120
- }
121
- ],
122
- "responses": {
123
- "200": {
124
- "description": "Snapshot list",
125
- "content": {
126
- "application/json": {
127
- "schema": {
128
- "type": "object",
129
- "required": [
130
- "results",
131
- "page_size"
132
- ],
133
- "properties": {
134
- "page_size": {
135
- "type": "integer",
136
- "description": "Number of items in this page (not the total across all pages)."
137
- },
138
- "cursor": {
139
- "type": "string",
140
- "description": "Pagination cursor; pass to the next request to get the next page."
141
- },
142
- "results": {
143
- "type": "array",
144
- "items": {
145
- "$ref": "#/components/schemas/Snapshot"
146
- }
147
- }
148
- }
149
- }
150
- }
151
- }
152
- },
153
- "401": {
154
- "$ref": "#/components/responses/Unauthorized"
155
- }
156
- }
157
- }
158
- },
159
- "/v1/snapshots:capture-org": {
160
- "post": {
161
- "operationId": "captureOrgSnapshot",
162
- "summary": "captureOrgSnapshot",
163
- "description": "Snapshot the caller's whole organization now. Fetches a fresh inventory\nof the org's configuration resources from configuration-hub-api, persists\nit as an inventory artifact, and starts a `scope: \"org\"` chunked capture.\nAsync — returns immediately with a snapshot ID; client polls `getSnapshot`\nand watches `capture_summary` fill in until `create.status` moves from\n`in_progress` to `completed` or `failed`.\n\nSensitive types (`access_token`, `environment_variable`), types with no\nengine adapter, and any `excluded_types` are dropped from the capture and\nrecorded in the snapshot's coverage report.\n",
164
- "tags": [
165
- "Snapshots"
166
- ],
167
- "requestBody": {
168
- "required": false,
169
- "content": {
170
- "application/json": {
171
- "schema": {
172
- "$ref": "#/components/schemas/CreateOrgSnapshotRequest"
173
- }
174
- }
175
- }
176
- },
177
- "responses": {
178
- "202": {
179
- "description": "Org snapshot creation started",
180
- "content": {
181
- "application/json": {
182
- "schema": {
183
- "$ref": "#/components/schemas/CreateSnapshotResponse"
184
- }
185
- }
186
- }
187
- },
188
- "401": {
189
- "$ref": "#/components/responses/Unauthorized"
190
- },
191
- "422": {
192
- "$ref": "#/components/responses/UnprocessableEntity"
193
- }
194
- }
195
- }
196
- },
197
- "/v1/snapshots/{id}": {
198
- "parameters": [
199
- {
200
- "in": "path",
201
- "name": "id",
202
- "required": true,
203
- "schema": {
204
- "type": "string"
205
- }
206
- }
207
- ],
208
- "get": {
209
- "operationId": "getSnapshot",
210
- "summary": "getSnapshot",
211
- "description": "Fetch a snapshot's metadata. Poll this endpoint to track create/restore progress.",
212
- "tags": [
213
- "Snapshots"
214
- ],
215
- "responses": {
216
- "200": {
217
- "description": "Snapshot metadata",
218
- "content": {
219
- "application/json": {
220
- "schema": {
221
- "$ref": "#/components/schemas/Snapshot"
222
- }
223
- }
224
- }
225
- },
226
- "401": {
227
- "$ref": "#/components/responses/Unauthorized"
228
- },
229
- "404": {
230
- "$ref": "#/components/responses/NotFound"
231
- }
232
- }
233
- },
234
- "delete": {
235
- "operationId": "deleteSnapshot",
236
- "summary": "deleteSnapshot",
237
- "description": "Delete a snapshot's metadata and S3 manifest.",
238
- "tags": [
239
- "Snapshots"
240
- ],
241
- "responses": {
242
- "204": {
243
- "description": "Deleted"
244
- },
245
- "401": {
246
- "$ref": "#/components/responses/Unauthorized"
247
- },
248
- "404": {
249
- "$ref": "#/components/responses/NotFound"
250
- }
251
- }
252
- }
253
- },
254
- "/v1/snapshots/{id}:restore": {
255
- "parameters": [
256
- {
257
- "in": "path",
258
- "name": "id",
259
- "required": true,
260
- "schema": {
261
- "type": "string"
262
- }
263
- }
264
- ],
265
- "post": {
266
- "operationId": "restoreSnapshot",
267
- "summary": "restoreSnapshot",
268
- "description": "Restore a snapshot to the org. Async — returns immediately; client polls\n`getSnapshot` until the latest entry in `restores` moves from\n`in_progress` to one of `completed | partial | failed`.\n\nv1: full restore only. Cherry-pick (`resources?` body filter) is an open\nquestion — see RFC OQ #1.\n",
269
- "tags": [
270
- "Snapshots"
271
- ],
272
- "requestBody": {
273
- "required": false,
274
- "content": {
275
- "application/json": {
276
- "schema": {
277
- "$ref": "#/components/schemas/RestoreSnapshotRequest"
278
- }
279
- }
280
- }
281
- },
282
- "responses": {
283
- "202": {
284
- "description": "Restore started",
285
- "content": {
286
- "application/json": {
287
- "schema": {
288
- "$ref": "#/components/schemas/RestoreSnapshotResponse"
289
- }
290
- }
291
- }
292
- },
293
- "401": {
294
- "$ref": "#/components/responses/Unauthorized"
295
- },
296
- "404": {
297
- "$ref": "#/components/responses/NotFound"
298
- }
299
- }
300
- }
301
- },
302
- "/v1/snapshots/{id}/resources": {
303
- "parameters": [
304
- {
305
- "in": "path",
306
- "name": "id",
307
- "required": true,
308
- "schema": {
309
- "type": "string"
310
- }
311
- }
312
- ],
313
- "get": {
314
- "operationId": "listSnapshotResources",
315
- "summary": "listSnapshotResources",
316
- "description": "List the resources captured in this snapshot. Returns lightweight\nidentity fields per resource — payloads are fetched via the\nsingle-resource endpoint when needed.\n\nUsed by Config Hub UI to render snapshot contents, and by\nblueprint-manifest-api to partition lineage rows during a restore\nsweep (resources in this list are touched; others are net-new).\n",
317
- "tags": [
318
- "Snapshots"
319
- ],
320
- "responses": {
321
- "200": {
322
- "description": "Captured resources",
323
- "content": {
324
- "application/json": {
325
- "schema": {
326
- "$ref": "#/components/schemas/SnapshotResourceList"
327
- }
328
- }
329
- }
330
- },
331
- "401": {
332
- "$ref": "#/components/responses/Unauthorized"
333
- },
334
- "404": {
335
- "$ref": "#/components/responses/NotFound"
336
- }
337
- }
338
- }
339
- },
340
- "/v1/snapshots/{id}/resources/{lineage_id}": {
341
- "parameters": [
342
- {
343
- "in": "path",
344
- "name": "id",
345
- "required": true,
346
- "schema": {
347
- "type": "string"
348
- }
349
- },
350
- {
351
- "in": "path",
352
- "name": "lineage_id",
353
- "required": true,
354
- "schema": {
355
- "type": "string"
356
- }
357
- }
358
- ],
359
- "get": {
360
- "operationId": "getSnapshotResource",
361
- "summary": "getSnapshotResource",
362
- "description": "Fetch one captured resource with its full payload. For UI views\nthat diff the captured state against the current destination.\n",
363
- "tags": [
364
- "Snapshots"
365
- ],
366
- "responses": {
367
- "200": {
368
- "description": "Captured resource with payload",
369
- "content": {
370
- "application/json": {
371
- "schema": {
372
- "$ref": "#/components/schemas/SnapshotResourceDetail"
373
- }
374
- }
375
- }
376
- },
377
- "401": {
378
- "$ref": "#/components/responses/Unauthorized"
379
- },
380
- "404": {
381
- "$ref": "#/components/responses/NotFound"
382
- }
383
- }
384
- }
385
- },
386
- "/v1/snapshots:list-dependencies": {
387
- "post": {
388
- "operationId": "listDependencies",
389
- "summary": "listDependencies",
390
- "description": "Walk the dependency tree for a set of resources and return the full\ntransitive closure, topologically sorted.\n\n**Not implemented in v1.** Returns 501. Callers should pass an explicit\nresource list to `createSnapshot`. See RFC Phase 5.\n",
391
- "tags": [
392
- "Snapshots"
393
- ],
394
- "requestBody": {
395
- "required": true,
396
- "content": {
397
- "application/json": {
398
- "schema": {
399
- "type": "object",
400
- "required": [
401
- "resources"
402
- ],
403
- "properties": {
404
- "resources": {
405
- "type": "array",
406
- "items": {
407
- "$ref": "#/components/schemas/ResourceRef"
408
- }
409
- }
410
- }
411
- }
412
- }
413
- }
414
- },
415
- "responses": {
416
- "200": {
417
- "description": "Transitive dependency closure for the given resources, topologically sorted.",
418
- "content": {
419
- "application/json": {
420
- "schema": {
421
- "type": "object",
422
- "required": [
423
- "dependencies"
424
- ],
425
- "properties": {
426
- "dependencies": {
427
- "type": "array",
428
- "items": {
429
- "$ref": "#/components/schemas/ResourceRef"
430
- }
431
- }
432
- }
433
- }
434
- }
435
- }
436
- },
437
- "401": {
438
- "$ref": "#/components/responses/Unauthorized"
439
- },
440
- "501": {
441
- "description": "Not implemented",
442
- "content": {
443
- "application/json": {
444
- "schema": {
445
- "$ref": "#/components/schemas/Error"
446
- }
447
- }
448
- }
449
- }
450
- }
451
- }
452
- }
453
- },
454
- "components": {
455
- "securitySchemes": {
456
- "EpilotAuth": {
457
- "type": "apiKey",
458
- "in": "header",
459
- "name": "Authorization"
460
- }
461
- },
462
- "responses": {
463
- "BadRequest": {
464
- "description": "Bad request",
465
- "content": {
466
- "application/json": {
467
- "schema": {
468
- "$ref": "#/components/schemas/Error"
469
- }
470
- }
471
- }
472
- },
473
- "Unauthorized": {
474
- "description": "Unauthorized",
475
- "content": {
476
- "application/json": {
477
- "schema": {
478
- "$ref": "#/components/schemas/Error"
479
- }
480
- }
481
- }
482
- },
483
- "NotFound": {
484
- "description": "Not found",
485
- "content": {
486
- "application/json": {
487
- "schema": {
488
- "$ref": "#/components/schemas/Error"
489
- }
490
- }
491
- }
492
- },
493
- "UnprocessableEntity": {
494
- "description": "Unprocessable entity",
495
- "content": {
496
- "application/json": {
497
- "schema": {
498
- "$ref": "#/components/schemas/EmptyInventoryError"
499
- }
500
- }
501
- }
502
- }
503
- },
504
- "schemas": {
505
- "Error": {
506
- "type": "object",
507
- "required": [
508
- "status",
509
- "error"
510
- ],
511
- "properties": {
512
- "status": {
513
- "type": "integer"
514
- },
515
- "error": {
516
- "type": "string"
517
- }
518
- }
519
- },
520
- "EmptyInventoryError": {
521
- "type": "object",
522
- "required": [
523
- "message",
524
- "skipped_types"
525
- ],
526
- "description": "Returned (422) when the org inventory contains no capturable resources\nafter filtering out sensitive, unsupported, and excluded types. The\n`skipped_types` array explains why every type was dropped.\n",
527
- "properties": {
528
- "message": {
529
- "type": "string",
530
- "example": "No capturable resources in the org inventory"
531
- },
532
- "skipped_types": {
533
- "type": "array",
534
- "items": {
535
- "type": "object",
536
- "required": [
537
- "type",
538
- "reason"
539
- ],
540
- "properties": {
541
- "type": {
542
- "type": "string"
543
- },
544
- "reason": {
545
- "type": "string"
546
- }
547
- }
548
- }
549
- }
550
- }
551
- },
552
- "ResourceRef": {
553
- "type": "object",
554
- "required": [
555
- "type",
556
- "id"
557
- ],
558
- "properties": {
559
- "type": {
560
- "type": "string",
561
- "description": "Resource type (e.g., custom_variable, journey, automation_flow)"
562
- },
563
- "id": {
564
- "type": "string"
565
- }
566
- }
567
- },
568
- "SnapshotResourceSummary": {
569
- "type": "object",
570
- "description": "Lightweight identity for a captured resource. Returned by\n`listSnapshotResources`; the full payload is fetched separately via\n`getSnapshotResource` when needed.\n",
571
- "required": [
572
- "lineage_id",
573
- "target_id",
574
- "type"
575
- ],
576
- "properties": {
577
- "lineage_id": {
578
- "type": "string",
579
- "deprecated": true,
580
- "description": "Deprecated alias of `target_id`. Always equals `target_id` (the\nimplementation never distinguished them). Use `target_id`.\n"
581
- },
582
- "target_id": {
583
- "type": "string",
584
- "description": "Identifier the resource was captured by (passed in via `ResourceRef.id` on createSnapshot)."
585
- },
586
- "type": {
587
- "type": "string"
588
- },
589
- "name": {
590
- "type": "string",
591
- "nullable": true,
592
- "description": "Best-effort display name extracted from the captured payload\n(`name` / `title` / `label` / `key` in that order). Null when\nnone of those fields are present.\n"
593
- }
594
- }
595
- },
596
- "SnapshotResourceList": {
597
- "type": "object",
598
- "required": [
599
- "resources"
600
- ],
601
- "properties": {
602
- "resources": {
603
- "type": "array",
604
- "items": {
605
- "$ref": "#/components/schemas/SnapshotResourceSummary"
606
- }
607
- }
608
- }
609
- },
610
- "SnapshotResourceDetail": {
611
- "type": "object",
612
- "description": "A single captured resource with its full payload. The identity fields\nmatch `SnapshotResourceSummary`; the `captured` payload is the\npre-install state at snapshot time.\n",
613
- "required": [
614
- "lineage_id",
615
- "target_id",
616
- "type",
617
- "captured"
618
- ],
619
- "properties": {
620
- "lineage_id": {
621
- "type": "string"
622
- },
623
- "target_id": {
624
- "type": "string"
625
- },
626
- "type": {
627
- "type": "string"
628
- },
629
- "name": {
630
- "type": "string",
631
- "nullable": true
632
- },
633
- "captured": {
634
- "type": "object",
635
- "additionalProperties": true,
636
- "description": "Full captured payload of the resource at snapshot time."
637
- }
638
- }
639
- },
640
- "CreateSnapshotRequest": {
641
- "type": "object",
642
- "required": [
643
- "name",
644
- "resources"
645
- ],
646
- "properties": {
647
- "name": {
648
- "type": "string"
649
- },
650
- "description": {
651
- "type": "string"
652
- },
653
- "trigger": {
654
- "type": "string",
655
- "enum": [
656
- "manual",
657
- "sync",
658
- "blueprint_install",
659
- "scheduled"
660
- ],
661
- "default": "manual",
662
- "description": "What initiated this snapshot. `scheduled` is used for automatic\nnightly backups triggered by an org's EventBridge schedule\n(RFC — Scheduled org snapshots).\n"
663
- },
664
- "blueprint_instance_id": {
665
- "type": "string",
666
- "description": "Required iff `trigger === 'blueprint_install'`; forbidden otherwise.\nIdentifies the destination blueprint instance whose install this\nsnapshot covers. Used at restore time as the join key for the\nlineage-driven delete sweep.\n"
667
- },
668
- "resources": {
669
- "type": "array",
670
- "items": {
671
- "$ref": "#/components/schemas/ResourceRef"
672
- },
673
- "description": "List of resources to capture. Required non-empty for\n`trigger === 'manual'` or `'sync'`. May be empty when\n`trigger === 'blueprint_install'` — an install with no\nresources to overwrite still needs a snapshot row so the\nblueprint-manifest-api restore endpoint can find it.\n"
674
- }
675
- }
676
- },
677
- "CreateOrgSnapshotRequest": {
678
- "type": "object",
679
- "description": "Request body for `captureOrgSnapshot`. All fields optional — an empty body\nsnapshots the whole org with a default name and the 90-day default TTL.\n",
680
- "properties": {
681
- "name": {
682
- "type": "string",
683
- "description": "Snapshot name. Defaults to \"Org snapshot — <ISO timestamp>\"."
684
- },
685
- "retention": {
686
- "type": "object",
687
- "description": "Retention window. Converted to an absolute `expires_at` at creation\ntime. Omit for the default 90-day TTL.\n",
688
- "required": [
689
- "value",
690
- "unit"
691
- ],
692
- "properties": {
693
- "value": {
694
- "type": "integer",
695
- "minimum": 1
696
- },
697
- "unit": {
698
- "type": "string",
699
- "enum": [
700
- "days",
701
- "weeks",
702
- "months"
703
- ]
704
- }
705
- }
706
- },
707
- "excluded_types": {
708
- "type": "array",
709
- "description": "Resource types to exclude from the capture, in addition to the\nalways-excluded sensitive types (`access_token`,\n`environment_variable`).\n",
710
- "items": {
711
- "type": "string"
712
- }
713
- }
714
- }
715
- },
716
- "CreateSnapshotResponse": {
717
- "type": "object",
718
- "required": [
719
- "id",
720
- "name",
721
- "status",
722
- "created_at"
723
- ],
724
- "properties": {
725
- "id": {
726
- "type": "string"
727
- },
728
- "name": {
729
- "type": "string"
730
- },
731
- "status": {
732
- "type": "string",
733
- "enum": [
734
- "creating"
735
- ]
736
- },
737
- "created_at": {
738
- "type": "string",
739
- "format": "date-time"
740
- }
741
- }
742
- },
743
- "RestoreSnapshotRequest": {
744
- "type": "object",
745
- "description": "Apply a captured snapshot to its source org. All filters default to the\nopen setting (apply everything), which keeps Config Hub's manual-restore\nsemantics unchanged.\n",
746
- "properties": {
747
- "preserve_modified": {
748
- "type": "boolean",
749
- "default": false,
750
- "description": "When `true`, skip captured resources whose live payload's content\nfingerprint diverges from the capture-time fingerprint stored on\nthe manifest entry. snapshot-api fetches the live payload and\nhashes it itself; no cross-service lookup. Surfaces under\n`Operation.skipped` with `reason: 'modified'`. Legacy snapshots\ncaptured before fingerprints were stored fail open (applied).\n"
751
- },
752
- "exclude_target_ids": {
753
- "type": "array",
754
- "items": {
755
- "type": "string"
756
- },
757
- "description": "Target ids the caller has decided not to restore. snapshot-api\napplies the manifest minus these ids. Drops are silent — not\nechoed in `Operation.skipped` — because the caller supplied the\nlist and already knows.\n"
758
- }
759
- }
760
- },
761
- "RestoreSnapshotResponse": {
762
- "type": "object",
763
- "required": [
764
- "id",
765
- "status"
766
- ],
767
- "properties": {
768
- "id": {
769
- "type": "string"
770
- },
771
- "status": {
772
- "type": "string",
773
- "enum": [
774
- "restoring"
775
- ]
776
- }
777
- }
778
- },
779
- "Snapshot": {
780
- "type": "object",
781
- "required": [
782
- "id",
783
- "org_id",
784
- "name",
785
- "trigger",
786
- "resource_counts",
787
- "create",
788
- "restores"
789
- ],
790
- "properties": {
791
- "id": {
792
- "type": "string"
793
- },
794
- "org_id": {
795
- "type": "string"
796
- },
797
- "name": {
798
- "type": "string"
799
- },
800
- "description": {
801
- "type": "string"
802
- },
803
- "trigger": {
804
- "type": "string",
805
- "enum": [
806
- "manual",
807
- "sync",
808
- "blueprint_install",
809
- "scheduled"
810
- ]
811
- },
812
- "blueprint_instance_id": {
813
- "type": "string",
814
- "description": "Set iff `trigger === 'blueprint_install'`. The destination blueprint\ninstance this snapshot covers.\n"
815
- },
816
- "resource_counts": {
817
- "type": "object",
818
- "additionalProperties": {
819
- "type": "integer"
820
- },
821
- "description": "Resource type → count of resources of that type in the snapshot."
822
- },
823
- "create": {
824
- "$ref": "#/components/schemas/Operation"
825
- },
826
- "restores": {
827
- "type": "array",
828
- "items": {
829
- "$ref": "#/components/schemas/Operation"
830
- }
831
- },
832
- "matched_count": {
833
- "type": "integer",
834
- "description": "Number of `resource` filter pairs from the request that are\ncontained in this snapshot. Present only on `listSnapshots`\nresponses where the caller passed at least one `resource`\nfilter — absent on `getSnapshot` and on unfiltered list calls.\nDrives the coverage badge in Config Hub's snapshot picker.\n"
835
- },
836
- "scope": {
837
- "type": "string",
838
- "enum": [
839
- "selection",
840
- "org"
841
- ],
842
- "description": "Capture scope. `selection` (default for manual/sync/blueprint_install)\nmeans only the explicitly listed resources were snapshotted.\n`org` means a full org inventory was discovered and captured\n(scheduled snapshots set this automatically).\n"
843
- },
844
- "expires_at": {
845
- "type": "string",
846
- "format": "date-time",
847
- "description": "ISO-8601 timestamp after which this snapshot will be deleted.\nDerived from the org's retention setting at capture time for\nscheduled snapshots; not set for manual snapshots (which use\na hardcoded 90-day TTL written directly as a DynamoDB `ttl` epoch).\n"
848
- },
849
- "capture_summary": {
850
- "type": "object",
851
- "description": "Per-snapshot coverage report set by the capture worker on completion.\nRecords how many resources were attempted, captured, skipped\n(unsupported type or explicitly excluded), and failed.\n",
852
- "required": [
853
- "total",
854
- "captured",
855
- "skipped",
856
- "failed"
857
- ],
858
- "properties": {
859
- "total": {
860
- "type": "integer",
861
- "description": "Total resources in the inventory that were attempted."
862
- },
863
- "captured": {
864
- "type": "integer",
865
- "description": "Resources successfully fetched and written to the manifest."
866
- },
867
- "skipped": {
868
- "type": "integer",
869
- "description": "Resources skipped — type not supported by config-engine or\nexcluded from capture (e.g. access_token, environment_variable).\n"
870
- },
871
- "failed": {
872
- "type": "integer",
873
- "description": "Resources where the fetch call returned an error."
874
- }
875
- }
876
- }
877
- }
878
- },
879
- "Operation": {
880
- "type": "object",
881
- "required": [
882
- "type",
883
- "started_at",
884
- "status",
885
- "triggered_by"
886
- ],
887
- "properties": {
888
- "type": {
889
- "type": "string",
890
- "enum": [
891
- "create",
892
- "restore"
893
- ]
894
- },
895
- "started_at": {
896
- "type": "string",
897
- "format": "date-time"
898
- },
899
- "completed_at": {
900
- "type": "string",
901
- "format": "date-time"
902
- },
903
- "status": {
904
- "type": "string",
905
- "enum": [
906
- "in_progress",
907
- "completed",
908
- "partial",
909
- "failed"
910
- ],
911
- "description": "`partial` indicates the operation completed but snapshot-api\nskipped at least one captured resource via its own drift check\n(see `skipped`).\n"
912
- },
913
- "error": {
914
- "type": "string"
915
- },
916
- "triggered_by": {
917
- "$ref": "#/components/schemas/CallerIdentity"
918
- },
919
- "skipped": {
920
- "type": "array",
921
- "description": "Captured resources snapshot-api elected to skip — currently\nonly drift detections (`preserve_modified: true`). Caller-\nsupplied `exclude_target_ids` skips are NOT echoed here; the\ncaller built the list, the caller knows.\n",
922
- "items": {
923
- "$ref": "#/components/schemas/SkippedResource"
924
- }
925
- }
926
- }
927
- },
928
- "SkippedResource": {
929
- "type": "object",
930
- "required": [
931
- "target_id",
932
- "reason"
933
- ],
934
- "properties": {
935
- "target_id": {
936
- "type": "string"
937
- },
938
- "reason": {
939
- "type": "string",
940
- "enum": [
941
- "modified"
942
- ],
943
- "description": "- `modified` — live destination payload's content fingerprint\n differs from the capture-time fingerprint stored on the\n manifest entry. Only set when the restore was requested with\n `preserve_modified: true`.\n"
944
- }
945
- }
946
- },
947
- "CallerIdentity": {
948
- "type": "object",
949
- "required": [
950
- "name"
951
- ],
952
- "properties": {
953
- "name": {
954
- "type": "string"
955
- },
956
- "user_id": {
957
- "type": "string"
958
- },
959
- "token_id": {
960
- "type": "string"
961
- }
962
- }
963
- }
964
- }
965
- }
966
- }