@1claw/openapi-spec 0.61.6 → 0.61.8

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 (3) hide show
  1. package/openapi.json +295 -1
  2. package/openapi.yaml +161 -1
  3. 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.6",
5
+ "version": "0.61.8",
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"
@@ -25248,6 +25248,191 @@
25248
25248
  }
25249
25249
  }
25250
25250
  },
25251
+ "/v1/org/settings/otel-export": {
25252
+ "get": {
25253
+ "tags": [
25254
+ "Observability"
25255
+ ],
25256
+ "summary": "Read the org's OTLP export configuration",
25257
+ "description": "Owner or admin, Team tier and above. Returns header *names* only — the values are the customer's collector credentials and never round-trip through the browser.",
25258
+ "operationId": "get_otel_export_config",
25259
+ "responses": {
25260
+ "200": {
25261
+ "description": "Current config, or null when unconfigured",
25262
+ "content": {
25263
+ "application/json": {
25264
+ "schema": {
25265
+ "nullable": true,
25266
+ "type": "object",
25267
+ "properties": {
25268
+ "enabled": {
25269
+ "type": "boolean"
25270
+ },
25271
+ "endpoint": {
25272
+ "type": "string"
25273
+ },
25274
+ "header_names": {
25275
+ "type": "array",
25276
+ "items": {
25277
+ "type": "string"
25278
+ }
25279
+ },
25280
+ "resource_attributes": {
25281
+ "type": "object",
25282
+ "additionalProperties": {
25283
+ "type": "string"
25284
+ }
25285
+ },
25286
+ "signal_filter": {
25287
+ "type": "array",
25288
+ "items": {
25289
+ "type": "string",
25290
+ "enum": [
25291
+ "spans",
25292
+ "metrics",
25293
+ "logs"
25294
+ ]
25295
+ }
25296
+ }
25297
+ }
25298
+ }
25299
+ }
25300
+ }
25301
+ },
25302
+ "401": {
25303
+ "description": "Unauthenticated"
25304
+ },
25305
+ "402": {
25306
+ "description": "Requires the Team plan or higher"
25307
+ },
25308
+ "403": {
25309
+ "description": "Not an owner or admin"
25310
+ }
25311
+ }
25312
+ },
25313
+ "patch": {
25314
+ "tags": [
25315
+ "Observability"
25316
+ ],
25317
+ "summary": "Update the org's OTLP export configuration",
25318
+ "description": "Every field is optional and only present fields change. The endpoint is validated *and DNS-resolved* on save: HTTPS only, no embedded credentials, and refused if any resolved address is private, loopback, link-local, metadata or ULA. A URL that resolves to a private address is the SSRF, and it is refused here rather than left in the database looking configured.\n\n`headers` replaces the whole map when present and is encrypted at rest under the org's key. Omit it to change other fields without touching stored header values you cannot read back.\n\nTransport is OTLP over HTTP with JSON encoding, posted to `<endpoint>/v1/traces`, `/v1/metrics` and `/v1/logs`. What leaves is exactly what the org's own dashboard stream carries — signals already through the collector's redaction pass.",
25319
+ "operationId": "patch_otel_export_config",
25320
+ "requestBody": {
25321
+ "content": {
25322
+ "application/json": {
25323
+ "schema": {
25324
+ "type": "object",
25325
+ "properties": {
25326
+ "enabled": {
25327
+ "type": "boolean"
25328
+ },
25329
+ "endpoint": {
25330
+ "type": "string",
25331
+ "format": "uri",
25332
+ "description": "HTTPS only."
25333
+ },
25334
+ "headers": {
25335
+ "type": "object",
25336
+ "additionalProperties": {
25337
+ "type": "string"
25338
+ },
25339
+ "description": "Sent on every export request, e.g. an Authorization header. Reserved hop-by-hop names are refused."
25340
+ },
25341
+ "resource_attributes": {
25342
+ "type": "object",
25343
+ "additionalProperties": {
25344
+ "type": "string"
25345
+ }
25346
+ },
25347
+ "signal_filter": {
25348
+ "type": "array",
25349
+ "minItems": 1,
25350
+ "items": {
25351
+ "type": "string",
25352
+ "enum": [
25353
+ "spans",
25354
+ "metrics",
25355
+ "logs"
25356
+ ]
25357
+ }
25358
+ }
25359
+ }
25360
+ }
25361
+ }
25362
+ }
25363
+ },
25364
+ "responses": {
25365
+ "200": {
25366
+ "description": "The updated config, header names only"
25367
+ },
25368
+ "400": {
25369
+ "description": "Endpoint refused (scheme",
25370
+ "credentials": null,
25371
+ "private or unresolvable host)": null,
25372
+ "reserved header": null,
25373
+ "or enabling with no endpoint": null
25374
+ },
25375
+ "401": {
25376
+ "description": "Unauthenticated"
25377
+ },
25378
+ "402": {
25379
+ "description": "Requires the Team plan or higher"
25380
+ },
25381
+ "403": {
25382
+ "description": "Not an owner or admin"
25383
+ }
25384
+ }
25385
+ }
25386
+ },
25387
+ "/v1/org/settings/otel-export/test": {
25388
+ "post": {
25389
+ "tags": [
25390
+ "Observability"
25391
+ ],
25392
+ "summary": "Send one synthetic span to the configured endpoint",
25393
+ "description": "Re-resolves the endpoint at send time and pins the connection to the resolved address, with redirects disabled. Rate-limited to 5 per minute per org: even a validated endpoint is an outbound request the caller chose the target of.",
25394
+ "operationId": "test_otel_export",
25395
+ "responses": {
25396
+ "200": {
25397
+ "description": "The collector's HTTP status for the probe",
25398
+ "content": {
25399
+ "application/json": {
25400
+ "schema": {
25401
+ "type": "object",
25402
+ "properties": {
25403
+ "endpoint": {
25404
+ "type": "string"
25405
+ },
25406
+ "status": {
25407
+ "type": "integer"
25408
+ },
25409
+ "ok": {
25410
+ "type": "boolean"
25411
+ }
25412
+ }
25413
+ }
25414
+ }
25415
+ }
25416
+ },
25417
+ "400": {
25418
+ "description": "Not configured",
25419
+ "or the send failed": null
25420
+ },
25421
+ "401": {
25422
+ "description": "Unauthenticated"
25423
+ },
25424
+ "402": {
25425
+ "description": "Requires the Team plan or higher"
25426
+ },
25427
+ "403": {
25428
+ "description": "Not an owner or admin"
25429
+ },
25430
+ "429": {
25431
+ "description": "More than 5 test sends this minute"
25432
+ }
25433
+ }
25434
+ }
25435
+ },
25251
25436
  "/v1/otel/metrics": {
25252
25437
  "get": {
25253
25438
  "tags": [
@@ -25366,6 +25551,109 @@
25366
25551
  }
25367
25552
  }
25368
25553
  },
25554
+ "/v1/otel/flows": {
25555
+ "get": {
25556
+ "tags": [
25557
+ "Observability"
25558
+ ],
25559
+ "summary": "Who actually read from which vault",
25560
+ "description": "Reachability (the topology's policy edges) says who *could* read a vault. This says who *did*, counted from `audit_events.action = 'secret.read'` — the durable record every read already writes — grouped by agent and vault. That is what lets a Sankey ribbon's width be a count of real reads rather than a guess.\n\nAgent actors only; a human reading a secret through the dashboard is not an agent flow. Deleted agents and vaults are kept and labelled as such — a read that happened is still a read.",
25561
+ "operationId": "get_otel_flows",
25562
+ "parameters": [
25563
+ {
25564
+ "name": "window",
25565
+ "in": "query",
25566
+ "required": false,
25567
+ "description": "Lookback, e.g. `1h`, `24h`, `7d`. Default 24h, maximum 30d.",
25568
+ "schema": {
25569
+ "type": "string",
25570
+ "default": "24h"
25571
+ }
25572
+ }
25573
+ ],
25574
+ "responses": {
25575
+ "200": {
25576
+ "description": "Read flows, highest first",
25577
+ "content": {
25578
+ "application/json": {
25579
+ "schema": {
25580
+ "type": "object",
25581
+ "required": [
25582
+ "window",
25583
+ "edges",
25584
+ "total_reads"
25585
+ ],
25586
+ "properties": {
25587
+ "window": {
25588
+ "type": "object",
25589
+ "properties": {
25590
+ "window_secs": {
25591
+ "type": "integer"
25592
+ },
25593
+ "step_secs": {
25594
+ "type": "integer"
25595
+ }
25596
+ }
25597
+ },
25598
+ "edges": {
25599
+ "type": "array",
25600
+ "maxItems": 500,
25601
+ "items": {
25602
+ "type": "object",
25603
+ "required": [
25604
+ "agent_id",
25605
+ "agent_name",
25606
+ "vault_id",
25607
+ "vault_name",
25608
+ "reads",
25609
+ "distinct_paths"
25610
+ ],
25611
+ "properties": {
25612
+ "agent_id": {
25613
+ "type": "string",
25614
+ "format": "uuid"
25615
+ },
25616
+ "agent_name": {
25617
+ "type": "string"
25618
+ },
25619
+ "vault_id": {
25620
+ "type": "string",
25621
+ "format": "uuid"
25622
+ },
25623
+ "vault_name": {
25624
+ "type": "string"
25625
+ },
25626
+ "reads": {
25627
+ "type": "integer",
25628
+ "description": "secret.read events in the window."
25629
+ },
25630
+ "distinct_paths": {
25631
+ "type": "integer",
25632
+ "description": "Distinct secret paths touched."
25633
+ }
25634
+ }
25635
+ }
25636
+ },
25637
+ "total_reads": {
25638
+ "type": "integer"
25639
+ }
25640
+ }
25641
+ }
25642
+ }
25643
+ }
25644
+ },
25645
+ "400": {
25646
+ "description": "Unparseable window or window over 30d"
25647
+ },
25648
+ "401": {
25649
+ "description": "Unauthenticated"
25650
+ },
25651
+ "403": {
25652
+ "description": "Not a human user"
25653
+ }
25654
+ }
25655
+ }
25656
+ },
25369
25657
  "/v1/otel/summary": {
25370
25658
  "get": {
25371
25659
  "tags": [
@@ -25501,6 +25789,12 @@
25501
25789
  "suspended",
25502
25790
  "ok"
25503
25791
  ]
25792
+ },
25793
+ "trust": {
25794
+ "type": "integer",
25795
+ "minimum": 0,
25796
+ "maximum": 100,
25797
+ "description": "Agents only. Absent until the trust engine has scored the agent."
25504
25798
  }
25505
25799
  }
25506
25800
  }
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.6"
5
+ version: "0.61.8"
6
6
  description: |
7
7
  Secure secret management for AI agents. Provides vaults, secrets,
8
8
  policy-based access control, agent identity, Intents API,
@@ -16230,6 +16230,106 @@ paths:
16230
16230
  description: Unauthenticated
16231
16231
  '403':
16232
16232
  description: Not a human user
16233
+ /v1/org/settings/otel-export:
16234
+ get:
16235
+ tags: [Observability]
16236
+ summary: "Read the org's OTLP export configuration"
16237
+ description: >-
16238
+ Owner or admin, Team tier and above. Returns header *names*
16239
+ only — the values are the customer's collector credentials and
16240
+ never round-trip through the browser.
16241
+ operationId: get_otel_export_config
16242
+ responses:
16243
+ '200':
16244
+ description: Current config, or null when unconfigured
16245
+ content:
16246
+ application/json:
16247
+ schema:
16248
+ nullable: true
16249
+ type: object
16250
+ properties:
16251
+ enabled: { type: boolean }
16252
+ endpoint: { type: string }
16253
+ header_names: { type: array, items: { type: string } }
16254
+ resource_attributes: { type: object, additionalProperties: { type: string } }
16255
+ signal_filter:
16256
+ type: array
16257
+ items: { type: string, enum: [spans, metrics, logs] }
16258
+ '401': { description: Unauthenticated }
16259
+ '402': { description: Requires the Team plan or higher }
16260
+ '403': { description: Not an owner or admin }
16261
+ patch:
16262
+ tags: [Observability]
16263
+ summary: "Update the org's OTLP export configuration"
16264
+ description: >-
16265
+ Every field is optional and only present fields change. The
16266
+ endpoint is validated *and DNS-resolved* on save: HTTPS only, no
16267
+ embedded credentials, and refused if any resolved address is
16268
+ private, loopback, link-local, metadata or ULA. A URL that
16269
+ resolves to a private address is the SSRF, and it is refused
16270
+ here rather than left in the database looking configured.
16271
+
16272
+
16273
+ `headers` replaces the whole map when present and is encrypted
16274
+ at rest under the org's key. Omit it to change other fields
16275
+ without touching stored header values you cannot read back.
16276
+
16277
+
16278
+ Transport is OTLP over HTTP with JSON encoding, posted to
16279
+ `<endpoint>/v1/traces`, `/v1/metrics` and `/v1/logs`. What
16280
+ leaves is exactly what the org's own dashboard stream carries —
16281
+ signals already through the collector's redaction pass.
16282
+ operationId: patch_otel_export_config
16283
+ requestBody:
16284
+ content:
16285
+ application/json:
16286
+ schema:
16287
+ type: object
16288
+ properties:
16289
+ enabled: { type: boolean }
16290
+ endpoint: { type: string, format: uri, description: "HTTPS only." }
16291
+ headers:
16292
+ type: object
16293
+ additionalProperties: { type: string }
16294
+ description: "Sent on every export request, e.g. an Authorization header. Reserved hop-by-hop names are refused."
16295
+ resource_attributes: { type: object, additionalProperties: { type: string } }
16296
+ signal_filter:
16297
+ type: array
16298
+ minItems: 1
16299
+ items: { type: string, enum: [spans, metrics, logs] }
16300
+ responses:
16301
+ '200':
16302
+ description: The updated config, header names only
16303
+ '400': { description: Endpoint refused (scheme, credentials, private or unresolvable host), reserved header, or enabling with no endpoint }
16304
+ '401': { description: Unauthenticated }
16305
+ '402': { description: Requires the Team plan or higher }
16306
+ '403': { description: Not an owner or admin }
16307
+ /v1/org/settings/otel-export/test:
16308
+ post:
16309
+ tags: [Observability]
16310
+ summary: "Send one synthetic span to the configured endpoint"
16311
+ description: >-
16312
+ Re-resolves the endpoint at send time and pins the connection to
16313
+ the resolved address, with redirects disabled. Rate-limited to 5
16314
+ per minute per org: even a validated endpoint is an outbound
16315
+ request the caller chose the target of.
16316
+ operationId: test_otel_export
16317
+ responses:
16318
+ '200':
16319
+ description: The collector's HTTP status for the probe
16320
+ content:
16321
+ application/json:
16322
+ schema:
16323
+ type: object
16324
+ properties:
16325
+ endpoint: { type: string }
16326
+ status: { type: integer }
16327
+ ok: { type: boolean }
16328
+ '400': { description: Not configured, or the send failed }
16329
+ '401': { description: Unauthenticated }
16330
+ '402': { description: Requires the Team plan or higher }
16331
+ '403': { description: Not an owner or admin }
16332
+ '429': { description: More than 5 test sends this minute }
16233
16333
  /v1/otel/metrics:
16234
16334
  get:
16235
16335
  tags: [Observability]
@@ -16302,6 +16402,61 @@ paths:
16302
16402
  description: Unauthenticated
16303
16403
  '403':
16304
16404
  description: Not a human user
16405
+ /v1/otel/flows:
16406
+ get:
16407
+ tags: [Observability]
16408
+ summary: "Who actually read from which vault"
16409
+ description: >-
16410
+ Reachability (the topology's policy edges) says who *could*
16411
+ read a vault. This says who *did*, counted from
16412
+ `audit_events.action = 'secret.read'` — the durable record every
16413
+ read already writes — grouped by agent and vault. That is what
16414
+ lets a Sankey ribbon's width be a count of real reads rather
16415
+ than a guess.
16416
+
16417
+
16418
+ Agent actors only; a human reading a secret through the
16419
+ dashboard is not an agent flow. Deleted agents and vaults are
16420
+ kept and labelled as such — a read that happened is still a
16421
+ read.
16422
+ operationId: get_otel_flows
16423
+ parameters:
16424
+ - name: window
16425
+ in: query
16426
+ required: false
16427
+ description: "Lookback, e.g. `1h`, `24h`, `7d`. Default 24h, maximum 30d."
16428
+ schema: { type: string, default: "24h" }
16429
+ responses:
16430
+ '200':
16431
+ description: Read flows, highest first
16432
+ content:
16433
+ application/json:
16434
+ schema:
16435
+ type: object
16436
+ required: [window, edges, total_reads]
16437
+ properties:
16438
+ window:
16439
+ type: object
16440
+ properties:
16441
+ window_secs: { type: integer }
16442
+ step_secs: { type: integer }
16443
+ edges:
16444
+ type: array
16445
+ maxItems: 500
16446
+ items:
16447
+ type: object
16448
+ required: [agent_id, agent_name, vault_id, vault_name, reads, distinct_paths]
16449
+ properties:
16450
+ agent_id: { type: string, format: uuid }
16451
+ agent_name: { type: string }
16452
+ vault_id: { type: string, format: uuid }
16453
+ vault_name: { type: string }
16454
+ reads: { type: integer, description: "secret.read events in the window." }
16455
+ distinct_paths: { type: integer, description: "Distinct secret paths touched." }
16456
+ total_reads: { type: integer }
16457
+ '400': { description: Unparseable window or window over 30d }
16458
+ '401': { description: Unauthenticated }
16459
+ '403': { description: Not a human user }
16305
16460
  /v1/otel/summary:
16306
16461
  get:
16307
16462
  tags: [Observability]
@@ -16402,6 +16557,11 @@ paths:
16402
16557
  type: string
16403
16558
  description: Agents only. Derived, not stored.
16404
16559
  enum: [compromised, warn, suspended, ok]
16560
+ trust:
16561
+ type: integer
16562
+ minimum: 0
16563
+ maximum: 100
16564
+ description: Agents only. Absent until the trust engine has scored the agent.
16405
16565
  edges:
16406
16566
  type: array
16407
16567
  items:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1claw/openapi-spec",
3
- "version": "0.61.6",
3
+ "version": "0.61.8",
4
4
  "description": "OpenAPI 3.1.0 specification for the 1Claw Vault API \u2014 generate clients in any language",
5
5
  "license": "MIT",
6
6
  "repository": {