@shipeasy/openapi 2.2.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-643YSMLU.js → chunk-4QSU744W.js} +183 -1
- package/dist/chunk-4QSU744W.js.map +1 -0
- package/dist/{chunk-MRW3DJ57.js → chunk-ZPKHTUVV.js} +1238 -335
- package/dist/chunk-ZPKHTUVV.js.map +1 -0
- package/dist/{client-K0ShmsC7.d.ts → client-WGNXT4xl.d.ts} +5818 -2647
- package/dist/client.d.ts +1 -1
- package/dist/client.js +51 -1
- package/dist/custom.js +4 -4
- package/dist/custom.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +52 -2
- package/dist/index.js.map +1 -1
- package/dist/schemas.d.ts +3538 -534
- package/dist/schemas.js +253 -5
- package/openapi.json +12914 -7158
- package/openapi.yaml +7672 -3742
- package/package.json +1 -1
- package/spec/components/errors.yaml +33 -1
- package/spec/components/schemas/alerts.yaml +138 -0
- package/spec/components/schemas/attributes.yaml +53 -3
- package/spec/components/schemas/common.yaml +16 -0
- package/spec/components/schemas/configs.yaml +58 -0
- package/spec/components/schemas/connectors.yaml +5 -1
- package/spec/components/schemas/errors-api.yaml +116 -6
- package/spec/components/schemas/experiment-api-row.yaml +293 -0
- package/spec/components/schemas/experiments.yaml +395 -380
- package/spec/components/schemas/gates.yaml +355 -272
- package/spec/components/schemas/i18n.yaml +169 -40
- package/spec/components/schemas/keys.yaml +2 -1
- package/spec/components/schemas/killswitches.yaml +36 -0
- package/spec/components/schemas/metrics.yaml +200 -23
- package/spec/components/schemas/ops.yaml +918 -29
- package/spec/components/schemas/projects.yaml +246 -2
- package/spec/components/schemas/universes.yaml +83 -1
- package/spec/openapi.yaml +61 -0
- package/spec/paths/alert-rules.yaml +1 -0
- package/spec/paths/alerts.yaml +184 -0
- package/spec/paths/attributes.yaml +23 -5
- package/spec/paths/configs.yaml +71 -0
- package/spec/paths/errors.yaml +112 -2
- package/spec/paths/events.yaml +1 -0
- package/spec/paths/experiments.yaml +244 -16
- package/spec/paths/gates.yaml +138 -0
- package/spec/paths/i18n.yaml +290 -6
- package/spec/paths/keys.yaml +1 -0
- package/spec/paths/killswitches.yaml +7 -0
- package/spec/paths/metrics.yaml +187 -0
- package/spec/paths/ops.yaml +410 -0
- package/spec/paths/projects.yaml +62 -2
- package/spec/paths/universes.yaml +1 -0
- package/dist/chunk-643YSMLU.js.map +0 -1
- package/dist/chunk-MRW3DJ57.js.map +0 -1
|
@@ -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:
|
|
@@ -192,6 +195,7 @@
|
|
|
192
195
|
- FORBIDDEN
|
|
193
196
|
- ALREADY_EXISTS
|
|
194
197
|
- VALIDATION
|
|
198
|
+
- PLAN_LIMIT
|
|
195
199
|
x-cli:
|
|
196
200
|
name: create
|
|
197
201
|
positional:
|
|
@@ -225,6 +229,7 @@
|
|
|
225
229
|
id: cfg_01j7wae5h6j7k8l9m0n1p2q3r4
|
|
226
230
|
name: pricing.tiers
|
|
227
231
|
description: Pricing tier definitions consumed by the checkout flow.
|
|
232
|
+
folder: pricing
|
|
228
233
|
schema:
|
|
229
234
|
type: object
|
|
230
235
|
properties:
|
|
@@ -687,6 +692,72 @@
|
|
|
687
692
|
name: activity
|
|
688
693
|
positional:
|
|
689
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
|
|
690
761
|
/api/admin/configs/{id}/schema:
|
|
691
762
|
patch:
|
|
692
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":
|
|
@@ -96,9 +99,9 @@
|
|
|
96
99
|
operationId: getError
|
|
97
100
|
summary: Get a tracked error
|
|
98
101
|
description: |-
|
|
99
|
-
Returns a single tracked error by its id, including the latest occurrence's stack, extras, and consequence. Returns `404` if no such error exists in the project.
|
|
102
|
+
Returns a single tracked error by its id, including the latest occurrence's stack, extras, and consequence, plus `occurrences` — the sampled per-instance detail rows behind the issue (newest first; exhaustive while the issue is small, thinned at volume, capped at 100). Returns `404` if no such error exists in the project.
|
|
100
103
|
|
|
101
|
-
**Use case:** Drill into one issue — fetch its full stack and `seenUrls` to investigate, or
|
|
104
|
+
**Use case:** Drill into one issue — fetch its full stack and `seenUrls` to investigate, or walk `occurrences` to see how the failing message/stack varies across instances.
|
|
102
105
|
tags:
|
|
103
106
|
- Errors
|
|
104
107
|
parameters:
|
|
@@ -142,6 +145,38 @@
|
|
|
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
|
|
151
|
+
occurrences:
|
|
152
|
+
- id: occ_01j7w7qq0v3k9d2m5rc8t1xh4n
|
|
153
|
+
projectId: e976b15e-2f0d-4c6e-9b1a-3a7c1f2d8e90
|
|
154
|
+
errorId: err_01j7w7m9q4hxbf6npe6s9zr3vc
|
|
155
|
+
message: Cannot read properties of undefined (reading 'id')
|
|
156
|
+
stack: |-
|
|
157
|
+
TypeError: Cannot read properties of undefined (reading 'id')
|
|
158
|
+
at GateEditor (/app/gates/[id]/page.tsx:42:18)
|
|
159
|
+
url: https://app.example.com/dashboard/gat_01j7/edit
|
|
160
|
+
env: prod
|
|
161
|
+
side: client
|
|
162
|
+
sdkVersion: 6.0.0
|
|
163
|
+
extrasJson: '{"gateId":"gat_01j7"}'
|
|
164
|
+
sampleRate: 100
|
|
165
|
+
seenAt: 2026-06-28T14:55:31.000Z
|
|
166
|
+
- id: occ_01j7w7pk8s6e3f9b0zad7y5w2q
|
|
167
|
+
projectId: e976b15e-2f0d-4c6e-9b1a-3a7c1f2d8e90
|
|
168
|
+
errorId: err_01j7w7m9q4hxbf6npe6s9zr3vc
|
|
169
|
+
message: Cannot read properties of undefined (reading 'id')
|
|
170
|
+
stack: |-
|
|
171
|
+
TypeError: Cannot read properties of undefined (reading 'id')
|
|
172
|
+
at GateEditor (/app/gates/[id]/page.tsx:42:18)
|
|
173
|
+
url: https://app.example.com/dashboard/gat_02c4/edit
|
|
174
|
+
env: prod
|
|
175
|
+
side: client
|
|
176
|
+
sdkVersion: 6.0.0
|
|
177
|
+
extrasJson: '{"gateId":"gat_02c4"}'
|
|
178
|
+
sampleRate: 10
|
|
179
|
+
seenAt: 2026-06-24T09:12:05.000Z
|
|
145
180
|
"400":
|
|
146
181
|
$ref: ../components/responses.yaml#/BadRequest
|
|
147
182
|
"401":
|
|
@@ -232,6 +267,9 @@
|
|
|
232
267
|
lastSeenAt: 2026-06-28T14:55:31.000Z
|
|
233
268
|
createdAt: 2026-06-20T08:11:02.000Z
|
|
234
269
|
updatedAt: 2026-06-28T15:02:10.000Z
|
|
270
|
+
assigneeId: null
|
|
271
|
+
assigneeConnectorId: null
|
|
272
|
+
assigneeAgent: null
|
|
235
273
|
"400":
|
|
236
274
|
$ref: ../components/responses.yaml#/BadRequest
|
|
237
275
|
"401":
|
|
@@ -303,6 +341,78 @@
|
|
|
303
341
|
name: file
|
|
304
342
|
positional:
|
|
305
343
|
- id
|
|
344
|
+
/api/admin/errors/{id}/resolve:
|
|
345
|
+
post:
|
|
346
|
+
operationId: resolveError
|
|
347
|
+
summary: Resolve a tracked error
|
|
348
|
+
description: |-
|
|
349
|
+
Marks one tracked error `resolved` — the single-purpose "close out" action. Takes no body; it is `PATCH /api/admin/errors/{id}` pinned to `{ "status": "resolved" }`, exposed so tooling can close an error without being handed the full open/resolved/ignored status machine. A resolved error reopens automatically (ingestion-side) if it recurs, so resolving is always safe: a premature resolve un-does itself on the next occurrence. Returns the updated row; `404` if the error does not exist.
|
|
350
|
+
|
|
351
|
+
**Use case:** Close out a tracked error from an agent or script once its fix has shipped — e.g. after a deploy, resolve every open issue the change addressed and let recurrence reopen anything that wasn't actually fixed.
|
|
352
|
+
tags:
|
|
353
|
+
- Errors
|
|
354
|
+
parameters:
|
|
355
|
+
- $ref: ../components/parameters.yaml#/ProjectId
|
|
356
|
+
- name: id
|
|
357
|
+
in: path
|
|
358
|
+
required: true
|
|
359
|
+
description: Stable opaque error id (`err_…`).
|
|
360
|
+
schema:
|
|
361
|
+
$ref: ../components/schemas/common.yaml#/ResourceId
|
|
362
|
+
responses:
|
|
363
|
+
"200":
|
|
364
|
+
description: Resolve a tracked error
|
|
365
|
+
content:
|
|
366
|
+
application/json:
|
|
367
|
+
schema:
|
|
368
|
+
$ref: ../components/schemas/errors-api.yaml#/ErrorRecord
|
|
369
|
+
example:
|
|
370
|
+
id: err_01j7w7m9q4hxbf6npe6s9zr3vc
|
|
371
|
+
projectId: e976b15e-2f0d-4c6e-9b1a-3a7c1f2d8e90
|
|
372
|
+
fingerprint: 9c1f4f1f2c0c4a5fa1c2b6d3e7c8e3a1
|
|
373
|
+
causedByFingerprint: null
|
|
374
|
+
message: Cannot read properties of undefined (reading 'id')
|
|
375
|
+
errorType: TypeError
|
|
376
|
+
stack: null
|
|
377
|
+
source: shipeasy
|
|
378
|
+
url: https://app.example.com/dashboard/gat_01j7/edit
|
|
379
|
+
seenUrls: null
|
|
380
|
+
subject: gate editor
|
|
381
|
+
outcome: crash on load
|
|
382
|
+
side: client
|
|
383
|
+
env: prod
|
|
384
|
+
kind: uncaught
|
|
385
|
+
lastExtrasJson: null
|
|
386
|
+
sdkVersion: 6.0.0
|
|
387
|
+
count: 137
|
|
388
|
+
status: resolved
|
|
389
|
+
firstSeenAt: 2026-06-20T08:11:02.000Z
|
|
390
|
+
lastSeenAt: 2026-06-28T14:55:31.000Z
|
|
391
|
+
createdAt: 2026-06-20T08:11:02.000Z
|
|
392
|
+
updatedAt: 2026-06-28T15:02:10.000Z
|
|
393
|
+
assigneeId: null
|
|
394
|
+
assigneeConnectorId: null
|
|
395
|
+
assigneeAgent: null
|
|
396
|
+
"400":
|
|
397
|
+
$ref: ../components/responses.yaml#/BadRequest
|
|
398
|
+
"401":
|
|
399
|
+
$ref: ../components/responses.yaml#/Unauthorized
|
|
400
|
+
"403":
|
|
401
|
+
$ref: ../components/responses.yaml#/Forbidden
|
|
402
|
+
"404":
|
|
403
|
+
$ref: ../components/responses.yaml#/NotFound
|
|
404
|
+
"409":
|
|
405
|
+
$ref: ../components/responses.yaml#/Conflict
|
|
406
|
+
"422":
|
|
407
|
+
$ref: ../components/responses.yaml#/UnprocessableEntity
|
|
408
|
+
x-error-codes:
|
|
409
|
+
- UNAUTHORIZED
|
|
410
|
+
- FORBIDDEN
|
|
411
|
+
- NOT_FOUND
|
|
412
|
+
x-cli:
|
|
413
|
+
name: resolve
|
|
414
|
+
positional:
|
|
415
|
+
- id
|
|
306
416
|
/api/admin/errors/{id}/series:
|
|
307
417
|
post:
|
|
308
418
|
operationId: getErrorSeries
|