@shipeasy/openapi 2.3.0 → 2.4.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.
- package/dist/{chunk-LYNWK55D.js → chunk-4QSU744W.js} +161 -1
- package/dist/chunk-4QSU744W.js.map +1 -0
- package/dist/{chunk-PRN4AEAM.js → chunk-ZPKHTUVV.js} +1004 -251
- package/dist/chunk-ZPKHTUVV.js.map +1 -0
- package/dist/{client-DO5HTb_L.d.ts → client-WGNXT4xl.d.ts} +5267 -2643
- package/dist/client.d.ts +1 -1
- package/dist/client.js +45 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +46 -2
- package/dist/index.js.map +1 -1
- package/dist/schemas.d.ts +2933 -542
- package/dist/schemas.js +213 -1
- package/openapi.json +11646 -6855
- package/openapi.yaml +4939 -1675
- package/package.json +1 -1
- package/spec/components/errors.yaml +3 -0
- package/spec/components/schemas/alerts.yaml +138 -0
- package/spec/components/schemas/attributes.yaml +53 -3
- package/spec/components/schemas/common.yaml +10 -0
- package/spec/components/schemas/configs.yaml +58 -0
- package/spec/components/schemas/connectors.yaml +5 -1
- package/spec/components/schemas/errors-api.yaml +51 -4
- package/spec/components/schemas/experiments.yaml +347 -87
- package/spec/components/schemas/gates.yaml +341 -277
- package/spec/components/schemas/i18n.yaml +169 -40
- package/spec/components/schemas/killswitches.yaml +36 -0
- package/spec/components/schemas/metrics.yaml +183 -6
- package/spec/components/schemas/ops.yaml +817 -29
- package/spec/components/schemas/projects.yaml +129 -3
- package/spec/openapi.yaml +47 -0
- package/spec/paths/alerts.yaml +184 -0
- package/spec/paths/attributes.yaml +23 -5
- package/spec/paths/configs.yaml +70 -0
- package/spec/paths/errors.yaml +16 -0
- package/spec/paths/experiments.yaml +236 -16
- package/spec/paths/gates.yaml +137 -0
- package/spec/paths/i18n.yaml +290 -6
- package/spec/paths/killswitches.yaml +6 -0
- package/spec/paths/metrics.yaml +186 -0
- package/spec/paths/ops.yaml +299 -0
- package/spec/paths/projects.yaml +60 -0
- package/dist/chunk-LYNWK55D.js.map +0 -1
- package/dist/chunk-PRN4AEAM.js.map +0 -1
|
@@ -91,9 +91,9 @@ GetCurrentProjectResponse:
|
|
|
91
91
|
defaultAllocationPct:
|
|
92
92
|
type: integer
|
|
93
93
|
description: Default traffic allocation (basis points) new experiments start with.
|
|
94
|
-
|
|
94
|
+
defaultHoldoutBp:
|
|
95
95
|
type: integer
|
|
96
|
-
description: Default holdout carve-out (basis points) that seeds each new universe's holdout.
|
|
96
|
+
description: Default holdout carve-out (basis points) that seeds each new universe's holdout (0 = none).
|
|
97
97
|
defaultWinsorizePct:
|
|
98
98
|
type: integer
|
|
99
99
|
description: Default winsorization percentile new metrics start with.
|
|
@@ -120,6 +120,110 @@ GetCurrentProjectResponse:
|
|
|
120
120
|
srmThreshold:
|
|
121
121
|
type: number
|
|
122
122
|
description: SRM chi-square p-value below which the run is called invalid.
|
|
123
|
+
slug:
|
|
124
|
+
anyOf:
|
|
125
|
+
- type: string
|
|
126
|
+
- type: "null"
|
|
127
|
+
description: URL-safe project identifier used in app URLs and SDK config, or `null` if unset.
|
|
128
|
+
logo:
|
|
129
|
+
anyOf:
|
|
130
|
+
- type: string
|
|
131
|
+
- type: "null"
|
|
132
|
+
description: Cache-busted URL of the project logo (served from the admin logo route), or `null` when no logo is set.
|
|
133
|
+
defaultEnv:
|
|
134
|
+
type: string
|
|
135
|
+
enum:
|
|
136
|
+
- dev
|
|
137
|
+
- staging
|
|
138
|
+
- prod
|
|
139
|
+
description: Default environment new resources are scoped to.
|
|
140
|
+
timezone:
|
|
141
|
+
type: string
|
|
142
|
+
description: IANA timezone the project's daily analysis runs in.
|
|
143
|
+
statMethod:
|
|
144
|
+
type: string
|
|
145
|
+
enum:
|
|
146
|
+
- sequential
|
|
147
|
+
- fixed
|
|
148
|
+
- bayesian
|
|
149
|
+
description: Statistical method the experiment analyzer uses.
|
|
150
|
+
sigThreshold:
|
|
151
|
+
type: string
|
|
152
|
+
description: Significance threshold (alpha) for experiment analysis, as a decimal string (e.g. `"0.05"`).
|
|
153
|
+
autoRollback:
|
|
154
|
+
type: boolean
|
|
155
|
+
description: Whether a failing guardrail auto-rolls back the experiment.
|
|
156
|
+
minSampleDays:
|
|
157
|
+
type: integer
|
|
158
|
+
description: Minimum number of days an experiment must run before it can be called.
|
|
159
|
+
moduleUser:
|
|
160
|
+
anyOf:
|
|
161
|
+
- type: boolean
|
|
162
|
+
- type: number
|
|
163
|
+
description: Whether the user-management module is enabled.
|
|
164
|
+
moduleEvents:
|
|
165
|
+
anyOf:
|
|
166
|
+
- type: boolean
|
|
167
|
+
- type: number
|
|
168
|
+
description: Whether the events module is enabled.
|
|
169
|
+
allowPublicTickets:
|
|
170
|
+
anyOf:
|
|
171
|
+
- type: boolean
|
|
172
|
+
- type: number
|
|
173
|
+
description: Whether key-authenticated public ticket creation (`POST /cli/report`) is allowed into this project. Off by default.
|
|
174
|
+
stripeSubscriptionId:
|
|
175
|
+
anyOf:
|
|
176
|
+
- type: string
|
|
177
|
+
- type: "null"
|
|
178
|
+
description: Stripe subscription id backing the project's billing, or `null` when unsubscribed.
|
|
179
|
+
scheduledInterval:
|
|
180
|
+
anyOf:
|
|
181
|
+
- type: string
|
|
182
|
+
enum:
|
|
183
|
+
- monthly
|
|
184
|
+
- annual
|
|
185
|
+
- type: "null"
|
|
186
|
+
description: Pending billing-interval change deferred to period end (only the annual→monthly downgrade), or `null` when no switch is pending.
|
|
187
|
+
spendLimitEnabled:
|
|
188
|
+
anyOf:
|
|
189
|
+
- type: boolean
|
|
190
|
+
- type: number
|
|
191
|
+
description: Whether the advisory monthly spend limit is enabled.
|
|
192
|
+
spendLimitUsd:
|
|
193
|
+
anyOf:
|
|
194
|
+
- type: integer
|
|
195
|
+
- type: "null"
|
|
196
|
+
description: Advisory monthly spend limit in whole USD, or `null` if unset.
|
|
197
|
+
spendAlertEmail:
|
|
198
|
+
anyOf:
|
|
199
|
+
- type: string
|
|
200
|
+
- type: "null"
|
|
201
|
+
description: Email address the spend alert is sent to, or `null` if unset.
|
|
202
|
+
defaultAssigneePendingApproval:
|
|
203
|
+
anyOf:
|
|
204
|
+
- type: string
|
|
205
|
+
- type: "null"
|
|
206
|
+
description: Default person owner (user id) auto-assigned to new `pending_approval` feedback items, or `null` when unset.
|
|
207
|
+
defaultAssigneeConnectorPendingApproval:
|
|
208
|
+
anyOf:
|
|
209
|
+
- type: string
|
|
210
|
+
- type: "null"
|
|
211
|
+
description: Default agent owner (connector id) auto-assigned to new `pending_approval` feedback items, or `null` when unset.
|
|
212
|
+
defaultAssigneeOpen:
|
|
213
|
+
anyOf:
|
|
214
|
+
- type: string
|
|
215
|
+
- type: "null"
|
|
216
|
+
description: Default person owner (user id) auto-assigned to new `open` feedback items, or `null` when unset.
|
|
217
|
+
defaultAssigneeConnectorOpen:
|
|
218
|
+
anyOf:
|
|
219
|
+
- type: string
|
|
220
|
+
- type: "null"
|
|
221
|
+
description: Default agent owner (connector id) auto-assigned to new `open` feedback items, or `null` when unset.
|
|
222
|
+
deletedAt:
|
|
223
|
+
anyOf:
|
|
224
|
+
- type: string
|
|
225
|
+
- type: "null"
|
|
226
|
+
description: ISO-8601 timestamp the project was soft-deleted (purged after a 14-day grace period), or `null` when live.
|
|
123
227
|
createdAt:
|
|
124
228
|
type: string
|
|
125
229
|
description: ISO-8601 timestamp of project creation.
|
|
@@ -143,10 +247,32 @@ GetCurrentProjectResponse:
|
|
|
143
247
|
- moduleGates
|
|
144
248
|
- moduleExperiments
|
|
145
249
|
- moduleFeedback
|
|
250
|
+
- moduleUser
|
|
251
|
+
- moduleEvents
|
|
252
|
+
- allowPublicTickets
|
|
253
|
+
- slug
|
|
254
|
+
- logo
|
|
255
|
+
- defaultEnv
|
|
256
|
+
- timezone
|
|
257
|
+
- statMethod
|
|
258
|
+
- sigThreshold
|
|
259
|
+
- autoRollback
|
|
260
|
+
- minSampleDays
|
|
261
|
+
- defaultHoldoutBp
|
|
262
|
+
- stripeSubscriptionId
|
|
263
|
+
- scheduledInterval
|
|
264
|
+
- spendLimitEnabled
|
|
265
|
+
- spendLimitUsd
|
|
266
|
+
- spendAlertEmail
|
|
267
|
+
- defaultAssigneePendingApproval
|
|
268
|
+
- defaultAssigneeConnectorPendingApproval
|
|
269
|
+
- defaultAssigneeOpen
|
|
270
|
+
- defaultAssigneeConnectorOpen
|
|
271
|
+
- deletedAt
|
|
146
272
|
- createdAt
|
|
147
273
|
- updatedAt
|
|
148
274
|
additionalProperties: {}
|
|
149
|
-
description: The project the caller's auth header resolves to. The shape is open — additional project fields may be present.
|
|
275
|
+
description: The project the caller's auth header resolves to. The shape is open — additional project fields may be present. Stripe billing internals (`stripeCustomerId`, the `stripeItemId*` family) are intentionally undocumented.
|
|
150
276
|
UpsertProjectRequest:
|
|
151
277
|
type: object
|
|
152
278
|
properties:
|
package/spec/openapi.yaml
CHANGED
|
@@ -180,6 +180,25 @@ tags:
|
|
|
180
180
|
**Immutable metric.** The bound metric (and its aggregation) is fixed at create time — there is no update path for `metricId`. Tune `threshold`/`comparator`/`windowHours`/`severity`/`name`/`enabled` instead, or delete + recreate to repoint the rule at a different metric.
|
|
181
181
|
|
|
182
182
|
**Delivery.** `notify` optionally targets a Slack channel and/or email for this rule; `null` falls back to the project's default notification settings. Slack targets require a connected Slack connector.
|
|
183
|
+
- name: Fired Alerts
|
|
184
|
+
parent: Ops
|
|
185
|
+
description: |-
|
|
186
|
+
Fired alerts: the conditions the platform has actually raised — metric-rule
|
|
187
|
+
crossings, armed kill switches, experiment SRM/peek guards, and guardrail
|
|
188
|
+
breaches. Raised only by the platform (UI killswitch handlers plus the
|
|
189
|
+
worker analysis consumer and alerts cron), never filed by hand; deduped per
|
|
190
|
+
`(source, dedupeKey)` with auto-resolve when the condition clears. This
|
|
191
|
+
surface lists them and triages one (status flip + person/agent owner). The
|
|
192
|
+
*rules* that define metric-threshold alerts are the sibling alert-rules
|
|
193
|
+
resource.
|
|
194
|
+
- name: Agents
|
|
195
|
+
parent: Ops
|
|
196
|
+
description: |-
|
|
197
|
+
Connected AI agents — one per authenticated trigger connector (Claude /
|
|
198
|
+
Cursor / Copilot / Jules). The read-only roster behind agent assignment
|
|
199
|
+
and the `ops ack` agent types: an AI ack (`ops ack <handle> --agent
|
|
200
|
+
<type>`) requires the type to appear here, so this list is where an
|
|
201
|
+
`AGENT_NOT_CONNECTED` error sends you.
|
|
183
202
|
- name: Comments
|
|
184
203
|
parent: Ops
|
|
185
204
|
description: |-
|
|
@@ -252,6 +271,8 @@ paths:
|
|
|
252
271
|
$ref: ./paths/gates.yaml#/~1api~1admin~1gates~1{id}~1enable
|
|
253
272
|
/api/admin/gates/{id}/disable:
|
|
254
273
|
$ref: ./paths/gates.yaml#/~1api~1admin~1gates~1{id}~1disable
|
|
274
|
+
/api/admin/gates/{id}/activity:
|
|
275
|
+
$ref: ./paths/gates.yaml#/~1api~1admin~1gates~1{id}~1activity
|
|
255
276
|
/api/admin/experiments:
|
|
256
277
|
$ref: ./paths/experiments.yaml#/~1api~1admin~1experiments
|
|
257
278
|
/api/admin/experiments/{id}:
|
|
@@ -266,6 +287,10 @@ paths:
|
|
|
266
287
|
$ref: ./paths/experiments.yaml#/~1api~1admin~1experiments~1{id}~1timeseries
|
|
267
288
|
/api/admin/experiments/{id}/reanalyze:
|
|
268
289
|
$ref: ./paths/experiments.yaml#/~1api~1admin~1experiments~1{id}~1reanalyze
|
|
290
|
+
/api/admin/experiments/{id}/readouts:
|
|
291
|
+
$ref: ./paths/experiments.yaml#/~1api~1admin~1experiments~1{id}~1readouts
|
|
292
|
+
/api/admin/experiments/{id}/readouts/{readoutId}:
|
|
293
|
+
$ref: ./paths/experiments.yaml#/~1api~1admin~1experiments~1{id}~1readouts~1{readoutId}
|
|
269
294
|
/api/admin/configs:
|
|
270
295
|
$ref: ./paths/configs.yaml#/~1api~1admin~1configs
|
|
271
296
|
/api/admin/configs/{id}:
|
|
@@ -278,6 +303,8 @@ paths:
|
|
|
278
303
|
$ref: ./paths/configs.yaml#/~1api~1admin~1configs~1{id}~1activity
|
|
279
304
|
/api/admin/configs/{id}/schema:
|
|
280
305
|
$ref: ./paths/configs.yaml#/~1api~1admin~1configs~1{id}~1schema
|
|
306
|
+
/api/admin/configs/{id}/versions:
|
|
307
|
+
$ref: ./paths/configs.yaml#/~1api~1admin~1configs~1{id}~1versions
|
|
281
308
|
/api/admin/killswitches:
|
|
282
309
|
$ref: ./paths/killswitches.yaml#/~1api~1admin~1killswitches
|
|
283
310
|
/api/admin/killswitches/{id}:
|
|
@@ -302,6 +329,12 @@ paths:
|
|
|
302
329
|
$ref: ./paths/metrics.yaml#/~1api~1admin~1metrics
|
|
303
330
|
/api/admin/metrics/{id}:
|
|
304
331
|
$ref: ./paths/metrics.yaml#/~1api~1admin~1metrics~1{id}
|
|
332
|
+
/api/admin/metrics/{id}/experiments:
|
|
333
|
+
$ref: ./paths/metrics.yaml#/~1api~1admin~1metrics~1{id}~1experiments
|
|
334
|
+
/api/admin/metrics/{id}/unarchive:
|
|
335
|
+
$ref: ./paths/metrics.yaml#/~1api~1admin~1metrics~1{id}~1unarchive
|
|
336
|
+
/api/admin/metrics/{id}/series:
|
|
337
|
+
$ref: ./paths/metrics.yaml#/~1api~1admin~1metrics~1{id}~1series
|
|
305
338
|
/api/admin/events:
|
|
306
339
|
$ref: ./paths/events.yaml#/~1api~1admin~1events
|
|
307
340
|
/api/admin/events/{id}:
|
|
@@ -314,6 +347,12 @@ paths:
|
|
|
314
347
|
$ref: ./paths/ops.yaml#/~1api~1admin~1ops~1{handle}
|
|
315
348
|
/api/admin/ops/{handle}/link-pr:
|
|
316
349
|
$ref: ./paths/ops.yaml#/~1api~1admin~1ops~1{handle}~1link-pr
|
|
350
|
+
/api/admin/ops/{handle}/ack:
|
|
351
|
+
$ref: ./paths/ops.yaml#/~1api~1admin~1ops~1{handle}~1ack
|
|
352
|
+
/api/admin/ops/{handle}/investigation:
|
|
353
|
+
$ref: ./paths/ops.yaml#/~1api~1admin~1ops~1{handle}~1investigation
|
|
354
|
+
/api/admin/agent-profiles:
|
|
355
|
+
$ref: ./paths/ops.yaml#/~1api~1admin~1agent-profiles
|
|
317
356
|
/api/admin/ops/{handle}/comments:
|
|
318
357
|
$ref: ./paths/ops.yaml#/~1api~1admin~1ops~1{handle}~1comments
|
|
319
358
|
/api/admin/notifications:
|
|
@@ -324,6 +363,10 @@ paths:
|
|
|
324
363
|
$ref: ./paths/alert-rules.yaml#/~1api~1admin~1alert-rules
|
|
325
364
|
/api/admin/alert-rules/{id}:
|
|
326
365
|
$ref: ./paths/alert-rules.yaml#/~1api~1admin~1alert-rules~1{id}
|
|
366
|
+
/api/admin/alerts:
|
|
367
|
+
$ref: ./paths/alerts.yaml#/~1api~1admin~1alerts
|
|
368
|
+
/api/admin/alerts/{id}:
|
|
369
|
+
$ref: ./paths/alerts.yaml#/~1api~1admin~1alerts~1{id}
|
|
327
370
|
/api/admin/projects/current:
|
|
328
371
|
$ref: ./paths/projects.yaml#/~1api~1admin~1projects~1current
|
|
329
372
|
/api/admin/projects/upsert:
|
|
@@ -340,6 +383,10 @@ paths:
|
|
|
340
383
|
$ref: ./paths/i18n.yaml#/~1api~1admin~1i18n~1drafts
|
|
341
384
|
/api/admin/i18n/drafts/{draftId}:
|
|
342
385
|
$ref: ./paths/i18n.yaml#/~1api~1admin~1i18n~1drafts~1{draftId}
|
|
386
|
+
/api/admin/i18n/profiles/{profileId}:
|
|
387
|
+
$ref: ./paths/i18n.yaml#/~1api~1admin~1i18n~1profiles~1{profileId}
|
|
388
|
+
/api/admin/i18n/drafts/{draftId}/keys:
|
|
389
|
+
$ref: ./paths/i18n.yaml#/~1api~1admin~1i18n~1drafts~1{draftId}~1keys
|
|
343
390
|
/api/admin/i18n/profiles/{profileId}/publish:
|
|
344
391
|
$ref: ./paths/i18n.yaml#/~1api~1admin~1i18n~1profiles~1{profileId}~1publish
|
|
345
392
|
/api/admin/i18n/set:
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/api/admin/alerts:
|
|
2
|
+
get:
|
|
3
|
+
operationId: listAlerts
|
|
4
|
+
summary: List fired alerts
|
|
5
|
+
description: |-
|
|
6
|
+
Returns the project's FIRED alerts as a **bare JSON array** (no pagination envelope), ordered by `createdAt desc`. Defaults to the currently-firing ones (`status=active`); pass a `status` to widen to resolved/dismissed history or `all`.
|
|
7
|
+
|
|
8
|
+
Fired alerts are raised only by the platform — the UI's killswitch handlers plus the worker's analysis consumer and alerts cron — never filed by hand, so this surface is list + triage (via PATCH), with no create. The rules that *define* metric-threshold alerts live at `/api/admin/alert-rules`.
|
|
9
|
+
|
|
10
|
+
**Use case:** Snapshot what is currently firing for an on-call view or the home Alerts block, or pull `status=all` to audit how a noisy rule has behaved over time.
|
|
11
|
+
tags:
|
|
12
|
+
- Fired Alerts
|
|
13
|
+
parameters:
|
|
14
|
+
- $ref: ../components/parameters.yaml#/ProjectId
|
|
15
|
+
- name: status
|
|
16
|
+
in: query
|
|
17
|
+
required: false
|
|
18
|
+
description: Filter by lifecycle state. Defaults to `active` (currently firing); `all` returns every status.
|
|
19
|
+
schema:
|
|
20
|
+
type: string
|
|
21
|
+
enum:
|
|
22
|
+
- active
|
|
23
|
+
- resolved
|
|
24
|
+
- dismissed
|
|
25
|
+
- all
|
|
26
|
+
default: active
|
|
27
|
+
responses:
|
|
28
|
+
"200":
|
|
29
|
+
description: List fired alerts
|
|
30
|
+
content:
|
|
31
|
+
application/json:
|
|
32
|
+
schema:
|
|
33
|
+
$ref: ../components/schemas/alerts.yaml#/ListAlertsResponse
|
|
34
|
+
example:
|
|
35
|
+
- id: al_01j7w9c4d5e6f7g8h9i0j1k2l3
|
|
36
|
+
source: metric_rule
|
|
37
|
+
ruleId: ar_01j7w8a1b2c3d4e5f6g7h8i9j0
|
|
38
|
+
severity: danger
|
|
39
|
+
dedupeKey: ar_01j7w8a1b2c3d4e5f6g7h8i9j0
|
|
40
|
+
title: Checkout error rate above threshold
|
|
41
|
+
detail: checkout_errors was 137 over the trailing 24h — above the rule's threshold of 50.
|
|
42
|
+
href: /dashboard/metrics/met_01j6abc2d3e4f5g6h7i8j9k0l1
|
|
43
|
+
observedValue: 137
|
|
44
|
+
status: active
|
|
45
|
+
createdAt: 2026-06-28T14:55:31.000Z
|
|
46
|
+
resolvedAt: null
|
|
47
|
+
dismissedAt: null
|
|
48
|
+
assigneeId: null
|
|
49
|
+
assigneeConnectorId: null
|
|
50
|
+
assigneeAgent: null
|
|
51
|
+
- id: al_01j7w9b2a1z0y9x8w7v6u5t4s3
|
|
52
|
+
source: killswitch_armed
|
|
53
|
+
ruleId: null
|
|
54
|
+
severity: warn
|
|
55
|
+
dedupeKey: ks_01j5checkout_kill
|
|
56
|
+
title: Kill switch "checkout_kill" is armed
|
|
57
|
+
detail: The kill switch has been armed for 3 days — confirm it is still intentional.
|
|
58
|
+
href: /dashboard/killswitches/ks_01j5checkout_kill
|
|
59
|
+
observedValue: null
|
|
60
|
+
status: active
|
|
61
|
+
createdAt: 2026-06-27T09:12:05.000Z
|
|
62
|
+
resolvedAt: null
|
|
63
|
+
dismissedAt: null
|
|
64
|
+
assigneeId: 6f1d2c3b-4a5e-4f60-9b7c-8d9e0f1a2b3c
|
|
65
|
+
assigneeConnectorId: null
|
|
66
|
+
assigneeAgent: null
|
|
67
|
+
"400":
|
|
68
|
+
$ref: ../components/responses.yaml#/BadRequest
|
|
69
|
+
"401":
|
|
70
|
+
$ref: ../components/responses.yaml#/Unauthorized
|
|
71
|
+
"403":
|
|
72
|
+
$ref: ../components/responses.yaml#/Forbidden
|
|
73
|
+
"404":
|
|
74
|
+
$ref: ../components/responses.yaml#/NotFound
|
|
75
|
+
"409":
|
|
76
|
+
$ref: ../components/responses.yaml#/Conflict
|
|
77
|
+
"422":
|
|
78
|
+
$ref: ../components/responses.yaml#/UnprocessableEntity
|
|
79
|
+
x-error-codes:
|
|
80
|
+
- BAD_REQUEST
|
|
81
|
+
- UNAUTHORIZED
|
|
82
|
+
- FORBIDDEN
|
|
83
|
+
x-cli:
|
|
84
|
+
name: list
|
|
85
|
+
/api/admin/alerts/{id}:
|
|
86
|
+
patch:
|
|
87
|
+
operationId: updateAlert
|
|
88
|
+
summary: Update a fired alert
|
|
89
|
+
description: |-
|
|
90
|
+
Triage writes on one fired alert — the only mutations this surface allows. All body fields are optional (at least one required); only the fields present are changed.
|
|
91
|
+
|
|
92
|
+
- **`status`** — flip between `active` / `resolved` / `dismissed`. `resolved` and `dismissed` stamp `resolvedAt` / `dismissedAt`; `active` re-opens and clears both. A resolved alert re-fires (as the same row, re-activated) if its condition is raised again.
|
|
93
|
+
- **`assigneeId`** — the PERSON owner (a `users.id`), or `null` to unassign.
|
|
94
|
+
- **`agent`** — the AGENT owner: a connected trigger connector's id, or the built-in `"jarvis"` (**Enterprise plan only** — `403` otherwise), or `null` to clear. Person and agent halves are independent.
|
|
95
|
+
|
|
96
|
+
Returns the updated row; `404` if the alert does not exist in the project.
|
|
97
|
+
|
|
98
|
+
**Use cases**
|
|
99
|
+
|
|
100
|
+
- **Wave off a known condition** — `{ "status": "dismissed" }` on an alert that needs no action.
|
|
101
|
+
- **Hand it to someone** — `{ "assigneeId": "…" }` from the ops cockpit's Owner column.
|
|
102
|
+
tags:
|
|
103
|
+
- Fired Alerts
|
|
104
|
+
parameters:
|
|
105
|
+
- $ref: ../components/parameters.yaml#/ProjectId
|
|
106
|
+
- name: id
|
|
107
|
+
in: path
|
|
108
|
+
required: true
|
|
109
|
+
description: Stable opaque alert id (`al_…`).
|
|
110
|
+
schema:
|
|
111
|
+
$ref: ../components/schemas/common.yaml#/ResourceId
|
|
112
|
+
requestBody:
|
|
113
|
+
required: true
|
|
114
|
+
content:
|
|
115
|
+
application/json:
|
|
116
|
+
schema:
|
|
117
|
+
$ref: ../components/schemas/alerts.yaml#/UpdateAlertRequest
|
|
118
|
+
examples:
|
|
119
|
+
resolve:
|
|
120
|
+
summary: Mark resolved
|
|
121
|
+
description: Close out a fired alert once the underlying condition is handled.
|
|
122
|
+
value:
|
|
123
|
+
status: resolved
|
|
124
|
+
dismiss:
|
|
125
|
+
summary: Dismiss a benign alert
|
|
126
|
+
description: Wave off an alert that needs no action.
|
|
127
|
+
value:
|
|
128
|
+
status: dismissed
|
|
129
|
+
assignPerson:
|
|
130
|
+
summary: Assign a person owner
|
|
131
|
+
description: Hand the alert to a teammate from the ops cockpit's Owner column.
|
|
132
|
+
value:
|
|
133
|
+
assigneeId: 6f1d2c3b-4a5e-4f60-9b7c-8d9e0f1a2b3c
|
|
134
|
+
assignAgent:
|
|
135
|
+
summary: Assign an agent owner
|
|
136
|
+
description: Hand the alert to a connected coding agent (a connector id, or `"jarvis"` on Enterprise).
|
|
137
|
+
value:
|
|
138
|
+
agent: con_01j7wagentclaude0001
|
|
139
|
+
responses:
|
|
140
|
+
"200":
|
|
141
|
+
description: Update a fired alert
|
|
142
|
+
content:
|
|
143
|
+
application/json:
|
|
144
|
+
schema:
|
|
145
|
+
$ref: ../components/schemas/alerts.yaml#/UpdateAlertResponse
|
|
146
|
+
example:
|
|
147
|
+
id: al_01j7w9c4d5e6f7g8h9i0j1k2l3
|
|
148
|
+
source: metric_rule
|
|
149
|
+
ruleId: ar_01j7w8a1b2c3d4e5f6g7h8i9j0
|
|
150
|
+
severity: danger
|
|
151
|
+
dedupeKey: ar_01j7w8a1b2c3d4e5f6g7h8i9j0
|
|
152
|
+
title: Checkout error rate above threshold
|
|
153
|
+
detail: checkout_errors was 137 over the trailing 24h — above the rule's threshold of 50.
|
|
154
|
+
href: /dashboard/metrics/met_01j6abc2d3e4f5g6h7i8j9k0l1
|
|
155
|
+
observedValue: 137
|
|
156
|
+
status: resolved
|
|
157
|
+
createdAt: 2026-06-28T14:55:31.000Z
|
|
158
|
+
resolvedAt: 2026-06-28T16:40:12.000Z
|
|
159
|
+
dismissedAt: null
|
|
160
|
+
assigneeId: null
|
|
161
|
+
assigneeConnectorId: null
|
|
162
|
+
assigneeAgent: null
|
|
163
|
+
"400":
|
|
164
|
+
$ref: ../components/responses.yaml#/BadRequest
|
|
165
|
+
"401":
|
|
166
|
+
$ref: ../components/responses.yaml#/Unauthorized
|
|
167
|
+
"403":
|
|
168
|
+
$ref: ../components/responses.yaml#/Forbidden
|
|
169
|
+
"404":
|
|
170
|
+
$ref: ../components/responses.yaml#/NotFound
|
|
171
|
+
"409":
|
|
172
|
+
$ref: ../components/responses.yaml#/Conflict
|
|
173
|
+
"422":
|
|
174
|
+
$ref: ../components/responses.yaml#/UnprocessableEntity
|
|
175
|
+
x-error-codes:
|
|
176
|
+
- BAD_REQUEST
|
|
177
|
+
- UNAUTHORIZED
|
|
178
|
+
- FORBIDDEN
|
|
179
|
+
- NOT_FOUND
|
|
180
|
+
- VALIDATION
|
|
181
|
+
x-cli:
|
|
182
|
+
name: update
|
|
183
|
+
positional:
|
|
184
|
+
- id
|
|
@@ -19,12 +19,30 @@
|
|
|
19
19
|
schema:
|
|
20
20
|
$ref: ../components/schemas/attributes.yaml#/ListAttributesResponse
|
|
21
21
|
example:
|
|
22
|
-
-
|
|
22
|
+
- id: attr_01j7w8a1b2c3
|
|
23
|
+
name: plan
|
|
24
|
+
type: enum
|
|
25
|
+
enumValues:
|
|
26
|
+
- free
|
|
27
|
+
- paid
|
|
28
|
+
required: 1
|
|
29
|
+
description: Billing plan of the calling user.
|
|
30
|
+
sdkPath: user.plan
|
|
31
|
+
createdAt: 2026-06-20T09:14:08.000Z
|
|
32
|
+
source: manual
|
|
33
|
+
lastSeenAt: 2026-07-16T22:04:11.000Z
|
|
34
|
+
deprecated: 0
|
|
35
|
+
- id: attr_01j7w8a1b2c4
|
|
36
|
+
name: country
|
|
23
37
|
type: string
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
38
|
+
enumValues: null
|
|
39
|
+
required: 0
|
|
40
|
+
description: null
|
|
41
|
+
sdkPath: null
|
|
42
|
+
createdAt: 2026-06-20T09:14:08.000Z
|
|
43
|
+
source: auto
|
|
44
|
+
lastSeenAt: 2026-07-16T22:04:11.000Z
|
|
45
|
+
deprecated: 0
|
|
28
46
|
"400":
|
|
29
47
|
$ref: ../components/responses.yaml#/BadRequest
|
|
30
48
|
"401":
|
package/spec/paths/configs.yaml
CHANGED
|
@@ -25,6 +25,9 @@
|
|
|
25
25
|
- id: cfg_01j7wae5h6j7k8l9m0n1p2q3r4
|
|
26
26
|
name: pricing.tiers
|
|
27
27
|
description: Pricing tier definitions consumed by the checkout flow.
|
|
28
|
+
folder: pricing
|
|
29
|
+
creatorEmail: ana@example.com
|
|
30
|
+
createdAt: 2026-05-01T10:12:00.000Z
|
|
28
31
|
schema:
|
|
29
32
|
type: object
|
|
30
33
|
properties:
|
|
@@ -226,6 +229,7 @@
|
|
|
226
229
|
id: cfg_01j7wae5h6j7k8l9m0n1p2q3r4
|
|
227
230
|
name: pricing.tiers
|
|
228
231
|
description: Pricing tier definitions consumed by the checkout flow.
|
|
232
|
+
folder: pricing
|
|
229
233
|
schema:
|
|
230
234
|
type: object
|
|
231
235
|
properties:
|
|
@@ -688,6 +692,72 @@
|
|
|
688
692
|
name: activity
|
|
689
693
|
positional:
|
|
690
694
|
- id
|
|
695
|
+
/api/admin/configs/{id}/versions:
|
|
696
|
+
get:
|
|
697
|
+
operationId: listConfigVersions
|
|
698
|
+
summary: List config version history
|
|
699
|
+
description: |-
|
|
700
|
+
Returns every published version of the config's value on one env, newest first. The `env` query parameter picks the environment (`dev`, `staging`, or `prod`) and defaults to `prod`; an unknown env returns `400`. The config's JSON Schema is config-level and not versioned — this is value history only.
|
|
701
|
+
|
|
702
|
+
**Use case:** Render the History timeline in the config detail pane (value diff + restore), or audit which value was live on prod at a given version.
|
|
703
|
+
tags:
|
|
704
|
+
- Configs
|
|
705
|
+
parameters:
|
|
706
|
+
- $ref: ../components/parameters.yaml#/ProjectId
|
|
707
|
+
- name: id
|
|
708
|
+
in: path
|
|
709
|
+
required: true
|
|
710
|
+
description: Stable opaque config id (`cfg_…`) or the config's `name`.
|
|
711
|
+
schema:
|
|
712
|
+
$ref: ../components/schemas/common.yaml#/ResourceId
|
|
713
|
+
- name: env
|
|
714
|
+
in: query
|
|
715
|
+
required: false
|
|
716
|
+
description: Environment to list history for (`dev`, `staging`, or `prod`). Defaults to `prod` when omitted.
|
|
717
|
+
schema:
|
|
718
|
+
$ref: ../components/schemas/common.yaml#/Env
|
|
719
|
+
responses:
|
|
720
|
+
"200":
|
|
721
|
+
description: List config version history
|
|
722
|
+
content:
|
|
723
|
+
application/json:
|
|
724
|
+
schema:
|
|
725
|
+
$ref: ../components/schemas/configs.yaml#/ListConfigVersionsResponse
|
|
726
|
+
example:
|
|
727
|
+
- version: 5
|
|
728
|
+
value:
|
|
729
|
+
tiers:
|
|
730
|
+
- name: free
|
|
731
|
+
- name: pro
|
|
732
|
+
publishedAt: 2026-05-09T18:22:11.000Z
|
|
733
|
+
publishedBy: ana@example.com
|
|
734
|
+
- version: 4
|
|
735
|
+
value:
|
|
736
|
+
tiers:
|
|
737
|
+
- name: free
|
|
738
|
+
publishedAt: 2026-05-08T11:05:22.000Z
|
|
739
|
+
publishedBy: bo@example.com
|
|
740
|
+
"400":
|
|
741
|
+
$ref: ../components/responses.yaml#/BadRequest
|
|
742
|
+
"401":
|
|
743
|
+
$ref: ../components/responses.yaml#/Unauthorized
|
|
744
|
+
"403":
|
|
745
|
+
$ref: ../components/responses.yaml#/Forbidden
|
|
746
|
+
"404":
|
|
747
|
+
$ref: ../components/responses.yaml#/NotFound
|
|
748
|
+
"409":
|
|
749
|
+
$ref: ../components/responses.yaml#/Conflict
|
|
750
|
+
"422":
|
|
751
|
+
$ref: ../components/responses.yaml#/UnprocessableEntity
|
|
752
|
+
x-error-codes:
|
|
753
|
+
- BAD_REQUEST
|
|
754
|
+
- UNAUTHORIZED
|
|
755
|
+
- FORBIDDEN
|
|
756
|
+
- NOT_FOUND
|
|
757
|
+
x-cli:
|
|
758
|
+
name: versions
|
|
759
|
+
positional:
|
|
760
|
+
- id
|
|
691
761
|
/api/admin/configs/{id}/schema:
|
|
692
762
|
patch:
|
|
693
763
|
operationId: updateConfigSchema
|
package/spec/paths/errors.yaml
CHANGED
|
@@ -73,6 +73,9 @@
|
|
|
73
73
|
lastSeenAt: 2026-06-28T14:55:31.000Z
|
|
74
74
|
createdAt: 2026-06-20T08:11:02.000Z
|
|
75
75
|
updatedAt: 2026-06-28T14:55:31.000Z
|
|
76
|
+
assigneeId: null
|
|
77
|
+
assigneeConnectorId: null
|
|
78
|
+
assigneeAgent: null
|
|
76
79
|
"400":
|
|
77
80
|
$ref: ../components/responses.yaml#/BadRequest
|
|
78
81
|
"401":
|
|
@@ -142,8 +145,13 @@
|
|
|
142
145
|
lastSeenAt: 2026-06-28T14:55:31.000Z
|
|
143
146
|
createdAt: 2026-06-20T08:11:02.000Z
|
|
144
147
|
updatedAt: 2026-06-28T14:55:31.000Z
|
|
148
|
+
assigneeId: 6f1d2c3b-4a5e-4f60-9b7c-8d9e0f1a2b3c
|
|
149
|
+
assigneeConnectorId: null
|
|
150
|
+
assigneeAgent: null
|
|
145
151
|
occurrences:
|
|
146
152
|
- id: occ_01j7w7qq0v3k9d2m5rc8t1xh4n
|
|
153
|
+
projectId: e976b15e-2f0d-4c6e-9b1a-3a7c1f2d8e90
|
|
154
|
+
errorId: err_01j7w7m9q4hxbf6npe6s9zr3vc
|
|
147
155
|
message: Cannot read properties of undefined (reading 'id')
|
|
148
156
|
stack: |-
|
|
149
157
|
TypeError: Cannot read properties of undefined (reading 'id')
|
|
@@ -156,6 +164,8 @@
|
|
|
156
164
|
sampleRate: 100
|
|
157
165
|
seenAt: 2026-06-28T14:55:31.000Z
|
|
158
166
|
- id: occ_01j7w7pk8s6e3f9b0zad7y5w2q
|
|
167
|
+
projectId: e976b15e-2f0d-4c6e-9b1a-3a7c1f2d8e90
|
|
168
|
+
errorId: err_01j7w7m9q4hxbf6npe6s9zr3vc
|
|
159
169
|
message: Cannot read properties of undefined (reading 'id')
|
|
160
170
|
stack: |-
|
|
161
171
|
TypeError: Cannot read properties of undefined (reading 'id')
|
|
@@ -257,6 +267,9 @@
|
|
|
257
267
|
lastSeenAt: 2026-06-28T14:55:31.000Z
|
|
258
268
|
createdAt: 2026-06-20T08:11:02.000Z
|
|
259
269
|
updatedAt: 2026-06-28T15:02:10.000Z
|
|
270
|
+
assigneeId: null
|
|
271
|
+
assigneeConnectorId: null
|
|
272
|
+
assigneeAgent: null
|
|
260
273
|
"400":
|
|
261
274
|
$ref: ../components/responses.yaml#/BadRequest
|
|
262
275
|
"401":
|
|
@@ -377,6 +390,9 @@
|
|
|
377
390
|
lastSeenAt: 2026-06-28T14:55:31.000Z
|
|
378
391
|
createdAt: 2026-06-20T08:11:02.000Z
|
|
379
392
|
updatedAt: 2026-06-28T15:02:10.000Z
|
|
393
|
+
assigneeId: null
|
|
394
|
+
assigneeConnectorId: null
|
|
395
|
+
assigneeAgent: null
|
|
380
396
|
"400":
|
|
381
397
|
$ref: ../components/responses.yaml#/BadRequest
|
|
382
398
|
"401":
|