@shipeasy/openapi 2.3.0 → 2.5.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 (46) hide show
  1. package/dist/{chunk-PRN4AEAM.js → chunk-DBTSD3W5.js} +1085 -261
  2. package/dist/chunk-DBTSD3W5.js.map +1 -0
  3. package/dist/{chunk-LYNWK55D.js → chunk-RDMD5XQT.js} +171 -1
  4. package/dist/chunk-RDMD5XQT.js.map +1 -0
  5. package/dist/{client-DO5HTb_L.d.ts → client-ObcuFHaV.d.ts} +5605 -2734
  6. package/dist/client.d.ts +1 -1
  7. package/dist/client.js +47 -1
  8. package/dist/custom.d.ts +9 -4
  9. package/dist/custom.js +57 -9
  10. package/dist/custom.js.map +1 -1
  11. package/dist/index.d.ts +2 -2
  12. package/dist/index.js +48 -2
  13. package/dist/index.js.map +1 -1
  14. package/dist/schemas.d.ts +3171 -485
  15. package/dist/schemas.js +229 -1
  16. package/openapi.json +13264 -8071
  17. package/openapi.yaml +5108 -1550
  18. package/package.json +1 -1
  19. package/spec/components/errors.yaml +3 -0
  20. package/spec/components/schemas/alerts.yaml +138 -0
  21. package/spec/components/schemas/attributes.yaml +53 -3
  22. package/spec/components/schemas/common.yaml +10 -0
  23. package/spec/components/schemas/configs.yaml +91 -3
  24. package/spec/components/schemas/connectors.yaml +5 -1
  25. package/spec/components/schemas/errors-api.yaml +51 -4
  26. package/spec/components/schemas/experiments.yaml +347 -87
  27. package/spec/components/schemas/gates.yaml +350 -277
  28. package/spec/components/schemas/i18n.yaml +169 -40
  29. package/spec/components/schemas/killswitches.yaml +36 -0
  30. package/spec/components/schemas/metrics.yaml +199 -7
  31. package/spec/components/schemas/ops.yaml +961 -29
  32. package/spec/components/schemas/projects.yaml +129 -3
  33. package/spec/openapi.yaml +58 -0
  34. package/spec/paths/alerts.yaml +184 -0
  35. package/spec/paths/attributes.yaml +23 -5
  36. package/spec/paths/configs.yaml +98 -21
  37. package/spec/paths/errors.yaml +16 -0
  38. package/spec/paths/experiments.yaml +236 -16
  39. package/spec/paths/gates.yaml +137 -0
  40. package/spec/paths/i18n.yaml +290 -6
  41. package/spec/paths/killswitches.yaml +6 -0
  42. package/spec/paths/metrics.yaml +186 -0
  43. package/spec/paths/ops.yaml +382 -0
  44. package/spec/paths/projects.yaml +60 -0
  45. package/dist/chunk-LYNWK55D.js.map +0 -1
  46. 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
- defaultHoldout:
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: |-
@@ -190,6 +209,15 @@ tags:
190
209
  **Mentions.** `@teammate` in a body raises an in-app notification for that
191
210
  person; `@shipeasy` asks Jarvis (the AI agent) to read the item and reply.
192
211
  Comments authored by Jarvis carry `authorType: system`.
212
+ - name: Investigations
213
+ parent: Ops
214
+ description: |-
215
+ Investigation records on a queue item — the structured, read-only write-ups
216
+ an AI agent produces while working it (findings / a blocking question / QA
217
+ notes), plus the `working` run rows an ack or an AI hand-off opens. This is
218
+ the AI-write seam the cockpit's detail panel renders: `list` reads what a
219
+ previous run found, `create` appends a new record, and `update` fills in the
220
+ `working` run record you were handed (findings, PR, confidence) as you work.
193
221
  - name: Projects
194
222
  description: |-
195
223
  Projects: the account-level container every other resource is scoped to.
@@ -252,6 +280,8 @@ paths:
252
280
  $ref: ./paths/gates.yaml#/~1api~1admin~1gates~1{id}~1enable
253
281
  /api/admin/gates/{id}/disable:
254
282
  $ref: ./paths/gates.yaml#/~1api~1admin~1gates~1{id}~1disable
283
+ /api/admin/gates/{id}/activity:
284
+ $ref: ./paths/gates.yaml#/~1api~1admin~1gates~1{id}~1activity
255
285
  /api/admin/experiments:
256
286
  $ref: ./paths/experiments.yaml#/~1api~1admin~1experiments
257
287
  /api/admin/experiments/{id}:
@@ -266,6 +296,10 @@ paths:
266
296
  $ref: ./paths/experiments.yaml#/~1api~1admin~1experiments~1{id}~1timeseries
267
297
  /api/admin/experiments/{id}/reanalyze:
268
298
  $ref: ./paths/experiments.yaml#/~1api~1admin~1experiments~1{id}~1reanalyze
299
+ /api/admin/experiments/{id}/readouts:
300
+ $ref: ./paths/experiments.yaml#/~1api~1admin~1experiments~1{id}~1readouts
301
+ /api/admin/experiments/{id}/readouts/{readoutId}:
302
+ $ref: ./paths/experiments.yaml#/~1api~1admin~1experiments~1{id}~1readouts~1{readoutId}
269
303
  /api/admin/configs:
270
304
  $ref: ./paths/configs.yaml#/~1api~1admin~1configs
271
305
  /api/admin/configs/{id}:
@@ -278,6 +312,8 @@ paths:
278
312
  $ref: ./paths/configs.yaml#/~1api~1admin~1configs~1{id}~1activity
279
313
  /api/admin/configs/{id}/schema:
280
314
  $ref: ./paths/configs.yaml#/~1api~1admin~1configs~1{id}~1schema
315
+ /api/admin/configs/{id}/versions:
316
+ $ref: ./paths/configs.yaml#/~1api~1admin~1configs~1{id}~1versions
281
317
  /api/admin/killswitches:
282
318
  $ref: ./paths/killswitches.yaml#/~1api~1admin~1killswitches
283
319
  /api/admin/killswitches/{id}:
@@ -302,6 +338,12 @@ paths:
302
338
  $ref: ./paths/metrics.yaml#/~1api~1admin~1metrics
303
339
  /api/admin/metrics/{id}:
304
340
  $ref: ./paths/metrics.yaml#/~1api~1admin~1metrics~1{id}
341
+ /api/admin/metrics/{id}/experiments:
342
+ $ref: ./paths/metrics.yaml#/~1api~1admin~1metrics~1{id}~1experiments
343
+ /api/admin/metrics/{id}/unarchive:
344
+ $ref: ./paths/metrics.yaml#/~1api~1admin~1metrics~1{id}~1unarchive
345
+ /api/admin/metrics/{id}/series:
346
+ $ref: ./paths/metrics.yaml#/~1api~1admin~1metrics~1{id}~1series
305
347
  /api/admin/events:
306
348
  $ref: ./paths/events.yaml#/~1api~1admin~1events
307
349
  /api/admin/events/{id}:
@@ -314,6 +356,14 @@ paths:
314
356
  $ref: ./paths/ops.yaml#/~1api~1admin~1ops~1{handle}
315
357
  /api/admin/ops/{handle}/link-pr:
316
358
  $ref: ./paths/ops.yaml#/~1api~1admin~1ops~1{handle}~1link-pr
359
+ /api/admin/ops/{handle}/ack:
360
+ $ref: ./paths/ops.yaml#/~1api~1admin~1ops~1{handle}~1ack
361
+ /api/admin/ops/{handle}/investigation:
362
+ $ref: ./paths/ops.yaml#/~1api~1admin~1ops~1{handle}~1investigation
363
+ /api/admin/ops/{handle}/investigation/{investigationId}:
364
+ $ref: ./paths/ops.yaml#/~1api~1admin~1ops~1{handle}~1investigation~1{investigationId}
365
+ /api/admin/agent-profiles:
366
+ $ref: ./paths/ops.yaml#/~1api~1admin~1agent-profiles
317
367
  /api/admin/ops/{handle}/comments:
318
368
  $ref: ./paths/ops.yaml#/~1api~1admin~1ops~1{handle}~1comments
319
369
  /api/admin/notifications:
@@ -324,6 +374,10 @@ paths:
324
374
  $ref: ./paths/alert-rules.yaml#/~1api~1admin~1alert-rules
325
375
  /api/admin/alert-rules/{id}:
326
376
  $ref: ./paths/alert-rules.yaml#/~1api~1admin~1alert-rules~1{id}
377
+ /api/admin/alerts:
378
+ $ref: ./paths/alerts.yaml#/~1api~1admin~1alerts
379
+ /api/admin/alerts/{id}:
380
+ $ref: ./paths/alerts.yaml#/~1api~1admin~1alerts~1{id}
327
381
  /api/admin/projects/current:
328
382
  $ref: ./paths/projects.yaml#/~1api~1admin~1projects~1current
329
383
  /api/admin/projects/upsert:
@@ -340,6 +394,10 @@ paths:
340
394
  $ref: ./paths/i18n.yaml#/~1api~1admin~1i18n~1drafts
341
395
  /api/admin/i18n/drafts/{draftId}:
342
396
  $ref: ./paths/i18n.yaml#/~1api~1admin~1i18n~1drafts~1{draftId}
397
+ /api/admin/i18n/profiles/{profileId}:
398
+ $ref: ./paths/i18n.yaml#/~1api~1admin~1i18n~1profiles~1{profileId}
399
+ /api/admin/i18n/drafts/{draftId}/keys:
400
+ $ref: ./paths/i18n.yaml#/~1api~1admin~1i18n~1drafts~1{draftId}~1keys
343
401
  /api/admin/i18n/profiles/{profileId}/publish:
344
402
  $ref: ./paths/i18n.yaml#/~1api~1admin~1i18n~1profiles~1{profileId}~1publish
345
403
  /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
- - name: plan
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
- - name: country
25
- type: string
26
- - name: seats
27
- type: number
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":