@1claw/openapi-spec 0.61.3 → 0.61.4
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/openapi.json +199 -1
- package/openapi.yaml +108 -1
- package/package.json +1 -1
package/openapi.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"openapi": "3.1.0",
|
|
3
3
|
"info": {
|
|
4
4
|
"title": "1Claw API",
|
|
5
|
-
"version": "0.61.
|
|
5
|
+
"version": "0.61.4",
|
|
6
6
|
"description": "Secure secret management for AI agents. Provides vaults, secrets,\npolicy-based access control, agent identity, Intents API,\nsharing, billing, and audit logging. Automations (workflow_spec,\nwebhook tokens, event triggers, Assist), cloud runtimes with\ninteractive shell sessions, agent memory, and discovery.\n\n## Domains\n\n`api.1claw.co` is canonical: it is the OIDC issuer, the `aud` the API\nmints, and the first entry in `servers` — a generated client takes its\nbase URL from there, and the previous ordering pointed every SDK at the\ndomain the issuer had already left. `api.1claw.xyz` still answers and is\nstill accepted on token validation, because tokens minted before the\nmove carry it; it is never minted now.\n\nOne deliberate exception: the Shroud attestation identity token is\nrequested from GCP with `audience: https://api.1claw.xyz`, so\n`/v1/shroud/attestation` reports that as its `expected_audience`. That\nis accurate rather than stale — the audience is a verification contract\nwith anyone already checking the token, and moving it is a breaking\nchange for them, not a rename.\n\nAll endpoints require JWT Bearer authentication unless marked with\n`security: []`.\n",
|
|
7
7
|
"contact": {
|
|
8
8
|
"email": "ops@1claw.co"
|
|
@@ -25112,6 +25112,204 @@
|
|
|
25112
25112
|
}
|
|
25113
25113
|
}
|
|
25114
25114
|
},
|
|
25115
|
+
"/otel/v1/threats": {
|
|
25116
|
+
"get": {
|
|
25117
|
+
"tags": [
|
|
25118
|
+
"Observability"
|
|
25119
|
+
],
|
|
25120
|
+
"summary": "Durable threat register for the org, worst reach first",
|
|
25121
|
+
"description": "Threats are ranked by blast radius — the size of the affected agent's topology neighbourhood (vaults + connectors + chains) — not by recency or severity alone, so the row an operator should look at first is first. Ties fall back to recency.\n\n`shadow: true` marks a threat the trust engine produced while running in recommend-only mode. Those are shown with a badge and never acted on automatically.\n\nEvidence carries trace and span ids and a note. It never contains secret values or HTTP bodies.",
|
|
25122
|
+
"operationId": "list_otel_threats",
|
|
25123
|
+
"parameters": [
|
|
25124
|
+
{
|
|
25125
|
+
"name": "state",
|
|
25126
|
+
"in": "query",
|
|
25127
|
+
"required": false,
|
|
25128
|
+
"description": "`open` (default) returns anything not yet resolved; `all` includes resolved.",
|
|
25129
|
+
"schema": {
|
|
25130
|
+
"type": "string",
|
|
25131
|
+
"enum": [
|
|
25132
|
+
"open",
|
|
25133
|
+
"all"
|
|
25134
|
+
]
|
|
25135
|
+
}
|
|
25136
|
+
}
|
|
25137
|
+
],
|
|
25138
|
+
"responses": {
|
|
25139
|
+
"200": {
|
|
25140
|
+
"description": "Threats, highest blast radius first",
|
|
25141
|
+
"content": {
|
|
25142
|
+
"application/json": {
|
|
25143
|
+
"schema": {
|
|
25144
|
+
"type": "array",
|
|
25145
|
+
"items": {
|
|
25146
|
+
"type": "object",
|
|
25147
|
+
"required": [
|
|
25148
|
+
"id",
|
|
25149
|
+
"agent_id",
|
|
25150
|
+
"class",
|
|
25151
|
+
"severity",
|
|
25152
|
+
"detected_by",
|
|
25153
|
+
"status",
|
|
25154
|
+
"shadow",
|
|
25155
|
+
"blast_radius",
|
|
25156
|
+
"blast_radius_size"
|
|
25157
|
+
],
|
|
25158
|
+
"properties": {
|
|
25159
|
+
"id": {
|
|
25160
|
+
"type": "string",
|
|
25161
|
+
"format": "uuid"
|
|
25162
|
+
},
|
|
25163
|
+
"agent_id": {
|
|
25164
|
+
"type": "string",
|
|
25165
|
+
"format": "uuid"
|
|
25166
|
+
},
|
|
25167
|
+
"class": {
|
|
25168
|
+
"type": "string",
|
|
25169
|
+
"enum": [
|
|
25170
|
+
"prompt_injection",
|
|
25171
|
+
"policy_breach",
|
|
25172
|
+
"spend_anomaly",
|
|
25173
|
+
"key_exfil",
|
|
25174
|
+
"off_hours",
|
|
25175
|
+
"consensus_bypass",
|
|
25176
|
+
"trust_breach"
|
|
25177
|
+
]
|
|
25178
|
+
},
|
|
25179
|
+
"severity": {
|
|
25180
|
+
"type": "string",
|
|
25181
|
+
"enum": [
|
|
25182
|
+
"critical",
|
|
25183
|
+
"warn"
|
|
25184
|
+
]
|
|
25185
|
+
},
|
|
25186
|
+
"detected_by": {
|
|
25187
|
+
"type": "string"
|
|
25188
|
+
},
|
|
25189
|
+
"status": {
|
|
25190
|
+
"type": "string",
|
|
25191
|
+
"enum": [
|
|
25192
|
+
"open",
|
|
25193
|
+
"acknowledged",
|
|
25194
|
+
"resolved"
|
|
25195
|
+
]
|
|
25196
|
+
},
|
|
25197
|
+
"shadow": {
|
|
25198
|
+
"type": "boolean"
|
|
25199
|
+
},
|
|
25200
|
+
"evidence": {
|
|
25201
|
+
"type": "array",
|
|
25202
|
+
"items": {
|
|
25203
|
+
"type": "object"
|
|
25204
|
+
}
|
|
25205
|
+
},
|
|
25206
|
+
"blast_radius": {
|
|
25207
|
+
"type": "object",
|
|
25208
|
+
"properties": {
|
|
25209
|
+
"vaults": {
|
|
25210
|
+
"type": "integer"
|
|
25211
|
+
},
|
|
25212
|
+
"connectors": {
|
|
25213
|
+
"type": "integer"
|
|
25214
|
+
},
|
|
25215
|
+
"chains": {
|
|
25216
|
+
"type": "integer"
|
|
25217
|
+
}
|
|
25218
|
+
}
|
|
25219
|
+
},
|
|
25220
|
+
"blast_radius_size": {
|
|
25221
|
+
"type": "integer",
|
|
25222
|
+
"description": "Sum of the blast radius. The sort key."
|
|
25223
|
+
},
|
|
25224
|
+
"resolved_by": {
|
|
25225
|
+
"type": "string",
|
|
25226
|
+
"nullable": true
|
|
25227
|
+
},
|
|
25228
|
+
"created_at": {
|
|
25229
|
+
"type": "string",
|
|
25230
|
+
"format": "date-time"
|
|
25231
|
+
},
|
|
25232
|
+
"updated_at": {
|
|
25233
|
+
"type": "string",
|
|
25234
|
+
"format": "date-time"
|
|
25235
|
+
}
|
|
25236
|
+
}
|
|
25237
|
+
}
|
|
25238
|
+
}
|
|
25239
|
+
}
|
|
25240
|
+
}
|
|
25241
|
+
},
|
|
25242
|
+
"401": {
|
|
25243
|
+
"description": "Unauthenticated"
|
|
25244
|
+
},
|
|
25245
|
+
"403": {
|
|
25246
|
+
"description": "Not a human user"
|
|
25247
|
+
}
|
|
25248
|
+
}
|
|
25249
|
+
}
|
|
25250
|
+
},
|
|
25251
|
+
"/otel/v1/summary": {
|
|
25252
|
+
"get": {
|
|
25253
|
+
"tags": [
|
|
25254
|
+
"Observability"
|
|
25255
|
+
],
|
|
25256
|
+
"summary": "Posture score and the counts behind it",
|
|
25257
|
+
"description": "`posture_score` is the mean agent trust score, less a penalty per open critical threat scaled by the fraction of the organization that threat can reach. Scaling by fraction rather than count is what makes the number comparable between a seven-agent org and a fifty-agent one.\n\nIt returns 100 when there are no agents, and also while the trust engine is still in shadow mode and no scores exist yet — absence of data is not evidence of compromise. It never goes below 0.\n\n`top_threats` uses the same ranking as `/otel/v1/threats`, so clicking through from the summary lands on the same first row.",
|
|
25258
|
+
"operationId": "get_otel_summary",
|
|
25259
|
+
"responses": {
|
|
25260
|
+
"200": {
|
|
25261
|
+
"description": "Posture summary",
|
|
25262
|
+
"content": {
|
|
25263
|
+
"application/json": {
|
|
25264
|
+
"schema": {
|
|
25265
|
+
"type": "object",
|
|
25266
|
+
"required": [
|
|
25267
|
+
"posture_score",
|
|
25268
|
+
"open_threats",
|
|
25269
|
+
"open_critical",
|
|
25270
|
+
"pending_approvals",
|
|
25271
|
+
"agent_count",
|
|
25272
|
+
"top_threats"
|
|
25273
|
+
],
|
|
25274
|
+
"properties": {
|
|
25275
|
+
"posture_score": {
|
|
25276
|
+
"type": "integer",
|
|
25277
|
+
"minimum": 0,
|
|
25278
|
+
"maximum": 100
|
|
25279
|
+
},
|
|
25280
|
+
"open_threats": {
|
|
25281
|
+
"type": "integer"
|
|
25282
|
+
},
|
|
25283
|
+
"open_critical": {
|
|
25284
|
+
"type": "integer"
|
|
25285
|
+
},
|
|
25286
|
+
"pending_approvals": {
|
|
25287
|
+
"type": "integer"
|
|
25288
|
+
},
|
|
25289
|
+
"agent_count": {
|
|
25290
|
+
"type": "integer"
|
|
25291
|
+
},
|
|
25292
|
+
"top_threats": {
|
|
25293
|
+
"type": "array",
|
|
25294
|
+
"description": "At most five, same ranking as /otel/v1/threats.",
|
|
25295
|
+
"items": {
|
|
25296
|
+
"type": "object"
|
|
25297
|
+
}
|
|
25298
|
+
}
|
|
25299
|
+
}
|
|
25300
|
+
}
|
|
25301
|
+
}
|
|
25302
|
+
}
|
|
25303
|
+
},
|
|
25304
|
+
"401": {
|
|
25305
|
+
"description": "Unauthenticated"
|
|
25306
|
+
},
|
|
25307
|
+
"403": {
|
|
25308
|
+
"description": "Not a human user"
|
|
25309
|
+
}
|
|
25310
|
+
}
|
|
25311
|
+
}
|
|
25312
|
+
},
|
|
25115
25313
|
"/otel/v1/topology": {
|
|
25116
25314
|
"get": {
|
|
25117
25315
|
"tags": [
|
package/openapi.yaml
CHANGED
|
@@ -2,7 +2,7 @@ openapi: 3.1.0
|
|
|
2
2
|
|
|
3
3
|
info:
|
|
4
4
|
title: 1Claw API
|
|
5
|
-
version: "0.61.
|
|
5
|
+
version: "0.61.4"
|
|
6
6
|
description: |
|
|
7
7
|
Secure secret management for AI agents. Provides vaults, secrets,
|
|
8
8
|
policy-based access control, agent identity, Intents API,
|
|
@@ -16166,6 +16166,113 @@ paths:
|
|
|
16166
16166
|
description: Not a human user, or fixtures are not available here
|
|
16167
16167
|
'429':
|
|
16168
16168
|
description: Too many concurrent streams for this user
|
|
16169
|
+
/otel/v1/threats:
|
|
16170
|
+
get:
|
|
16171
|
+
tags: [Observability]
|
|
16172
|
+
summary: "Durable threat register for the org, worst reach first"
|
|
16173
|
+
description: >-
|
|
16174
|
+
Threats are ranked by blast radius — the size of the affected
|
|
16175
|
+
agent's topology neighbourhood (vaults + connectors + chains) —
|
|
16176
|
+
not by recency or severity alone, so the row an operator should
|
|
16177
|
+
look at first is first. Ties fall back to recency.
|
|
16178
|
+
|
|
16179
|
+
|
|
16180
|
+
`shadow: true` marks a threat the trust engine produced while
|
|
16181
|
+
running in recommend-only mode. Those are shown with a badge and
|
|
16182
|
+
never acted on automatically.
|
|
16183
|
+
|
|
16184
|
+
|
|
16185
|
+
Evidence carries trace and span ids and a note. It never
|
|
16186
|
+
contains secret values or HTTP bodies.
|
|
16187
|
+
operationId: list_otel_threats
|
|
16188
|
+
parameters:
|
|
16189
|
+
- name: state
|
|
16190
|
+
in: query
|
|
16191
|
+
required: false
|
|
16192
|
+
description: "`open` (default) returns anything not yet resolved; `all` includes resolved."
|
|
16193
|
+
schema:
|
|
16194
|
+
type: string
|
|
16195
|
+
enum: [open, all]
|
|
16196
|
+
responses:
|
|
16197
|
+
'200':
|
|
16198
|
+
description: Threats, highest blast radius first
|
|
16199
|
+
content:
|
|
16200
|
+
application/json:
|
|
16201
|
+
schema:
|
|
16202
|
+
type: array
|
|
16203
|
+
items:
|
|
16204
|
+
type: object
|
|
16205
|
+
required: [id, agent_id, class, severity, detected_by, status, shadow, blast_radius, blast_radius_size]
|
|
16206
|
+
properties:
|
|
16207
|
+
id: { type: string, format: uuid }
|
|
16208
|
+
agent_id: { type: string, format: uuid }
|
|
16209
|
+
class:
|
|
16210
|
+
type: string
|
|
16211
|
+
enum: [prompt_injection, policy_breach, spend_anomaly, key_exfil, off_hours, consensus_bypass, trust_breach]
|
|
16212
|
+
severity: { type: string, enum: [critical, warn] }
|
|
16213
|
+
detected_by: { type: string }
|
|
16214
|
+
status: { type: string, enum: [open, acknowledged, resolved] }
|
|
16215
|
+
shadow: { type: boolean }
|
|
16216
|
+
evidence: { type: array, items: { type: object } }
|
|
16217
|
+
blast_radius:
|
|
16218
|
+
type: object
|
|
16219
|
+
properties:
|
|
16220
|
+
vaults: { type: integer }
|
|
16221
|
+
connectors: { type: integer }
|
|
16222
|
+
chains: { type: integer }
|
|
16223
|
+
blast_radius_size:
|
|
16224
|
+
type: integer
|
|
16225
|
+
description: Sum of the blast radius. The sort key.
|
|
16226
|
+
resolved_by: { type: string, nullable: true }
|
|
16227
|
+
created_at: { type: string, format: date-time }
|
|
16228
|
+
updated_at: { type: string, format: date-time }
|
|
16229
|
+
'401':
|
|
16230
|
+
description: Unauthenticated
|
|
16231
|
+
'403':
|
|
16232
|
+
description: Not a human user
|
|
16233
|
+
/otel/v1/summary:
|
|
16234
|
+
get:
|
|
16235
|
+
tags: [Observability]
|
|
16236
|
+
summary: "Posture score and the counts behind it"
|
|
16237
|
+
description: >-
|
|
16238
|
+
`posture_score` is the mean agent trust score, less a penalty
|
|
16239
|
+
per open critical threat scaled by the fraction of the
|
|
16240
|
+
organization that threat can reach. Scaling by fraction rather
|
|
16241
|
+
than count is what makes the number comparable between a
|
|
16242
|
+
seven-agent org and a fifty-agent one.
|
|
16243
|
+
|
|
16244
|
+
|
|
16245
|
+
It returns 100 when there are no agents, and also while the
|
|
16246
|
+
trust engine is still in shadow mode and no scores exist yet —
|
|
16247
|
+
absence of data is not evidence of compromise. It never goes
|
|
16248
|
+
below 0.
|
|
16249
|
+
|
|
16250
|
+
|
|
16251
|
+
`top_threats` uses the same ranking as `/otel/v1/threats`, so
|
|
16252
|
+
clicking through from the summary lands on the same first row.
|
|
16253
|
+
operationId: get_otel_summary
|
|
16254
|
+
responses:
|
|
16255
|
+
'200':
|
|
16256
|
+
description: Posture summary
|
|
16257
|
+
content:
|
|
16258
|
+
application/json:
|
|
16259
|
+
schema:
|
|
16260
|
+
type: object
|
|
16261
|
+
required: [posture_score, open_threats, open_critical, pending_approvals, agent_count, top_threats]
|
|
16262
|
+
properties:
|
|
16263
|
+
posture_score: { type: integer, minimum: 0, maximum: 100 }
|
|
16264
|
+
open_threats: { type: integer }
|
|
16265
|
+
open_critical: { type: integer }
|
|
16266
|
+
pending_approvals: { type: integer }
|
|
16267
|
+
agent_count: { type: integer }
|
|
16268
|
+
top_threats:
|
|
16269
|
+
type: array
|
|
16270
|
+
description: At most five, same ranking as /otel/v1/threats.
|
|
16271
|
+
items: { type: object }
|
|
16272
|
+
'401':
|
|
16273
|
+
description: Unauthenticated
|
|
16274
|
+
'403':
|
|
16275
|
+
description: Not a human user
|
|
16169
16276
|
/otel/v1/topology:
|
|
16170
16277
|
get:
|
|
16171
16278
|
tags: [Observability]
|