@1claw/openapi-spec 0.61.29 → 0.61.31

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 +249 -2
  2. package/openapi.yaml +159 -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.29",
5
+ "version": "0.61.31",
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"
@@ -277,7 +277,7 @@
277
277
  "Authentication"
278
278
  ],
279
279
  "summary": "Exchange agent credentials for JWT",
280
- "description": "Returns a short-lived EdDSA-signed JWT (`access_token`). Standard claims include `sub`\n(`agent:<uuid>`), `org`, `scopes`, `vault_ids`, optional `intents_api_enabled`, optional\n`shroud_enabled`, optional `llm_token_billing` / `stripe_customer_id` when org LLM billing is on.\n\nWhen **`shroud_enabled`** is true, the JWT payload may include **`shroud_config`**: a JSON object\nmirroring the agent row in Vault (same shape as `ShroudConfig` on `GET /v1/agents/{id}`).\n**Shroud** (TEE proxy) decodes this on each LLM request and runs **PolicyEngine** after the\nglobal inspection pipeline so per-agent limits and threat **block** actions apply without a\nseparate policy fetch. Re-exchange the agent token after changing `shroud_config` so the JWT\nis fresh.\n\nUser JWTs from password, API key, or device flow do **not** include `shroud_config`.\n",
280
+ "description": "Returns a short-lived EdDSA-signed JWT (`access_token`). Standard claims include `sub`\n(`agent:<uuid>`), `org`, `scopes`, `vault_ids`, optional `intents_api_enabled`, optional\n`shroud_enabled`, optional `llm_token_billing` / `stripe_customer_id` when org LLM billing is on.\n\nWhen **`shroud_enabled`** is true, the JWT payload may include **`shroud_config`**: a JSON object\nmirroring the agent row in Vault (same shape as `ShroudConfig` on `GET /v1/agents/{id}`).\n**Shroud** (TEE proxy) decodes this on each LLM request and runs **PolicyEngine** after the\nglobal inspection pipeline so per-agent limits and threat **block** actions apply without a\nseparate policy fetch. Re-exchange the agent token after changing `shroud_config` so the JWT\nis fresh.\n\nUser JWTs from password, API key, or device flow do **not** include `shroud_config`.\n\n**Router keys.** An `sk-shroud-v1-…` key (minted at\n`POST /v1/agents/{agent_id}/router-keys`) is exchanged key-only — send `api_key`\nalone, no `agent_id`. The token carries a `router_key` claim\n(`{id, max_concurrent_streams?, spend_cap_micro_usd?}`), lives at most **60 s**\n(revocation SLA), and is only issued for Shroud-enabled agents. Revoked keys get 401.\n",
281
281
  "operationId": "agentToken",
282
282
  "security": [],
283
283
  "requestBody": {
@@ -23741,6 +23741,136 @@
23741
23741
  }
23742
23742
  }
23743
23743
  },
23744
+ "/v1/agents/{agent_id}/router-keys": {
23745
+ "post": {
23746
+ "tags": [
23747
+ "Agents"
23748
+ ],
23749
+ "summary": "Mint a router key (sk-shroud-v1)",
23750
+ "description": "Creates an `sk-shroud-v1-<32>` static Bearer for the Shroud gateway, mapped to this\nagent. A stock OpenAI or Anthropic SDK sends it as `Authorization: Bearer …` with\n`base_url` set to the gateway; the gateway exchanges it key-only for the agent's\ntoken. The plaintext key is returned **once**. Up to 20 live keys per agent.\nHuman users only; the agent must have `shroud_enabled: true`.\n",
23751
+ "operationId": "createRouterKey",
23752
+ "parameters": [
23753
+ {
23754
+ "$ref": "#/components/parameters/AgentId"
23755
+ }
23756
+ ],
23757
+ "requestBody": {
23758
+ "required": false,
23759
+ "content": {
23760
+ "application/json": {
23761
+ "schema": {
23762
+ "$ref": "#/components/schemas/CreateRouterKeyRequest"
23763
+ }
23764
+ }
23765
+ }
23766
+ },
23767
+ "responses": {
23768
+ "201": {
23769
+ "description": "Router key created (plaintext returned once)",
23770
+ "content": {
23771
+ "application/json": {
23772
+ "schema": {
23773
+ "$ref": "#/components/schemas/RouterKeyCreated"
23774
+ }
23775
+ }
23776
+ }
23777
+ },
23778
+ "400": {
23779
+ "$ref": "#/components/responses/BadRequest"
23780
+ },
23781
+ "403": {
23782
+ "$ref": "#/components/responses/Forbidden"
23783
+ },
23784
+ "404": {
23785
+ "$ref": "#/components/responses/NotFound"
23786
+ }
23787
+ }
23788
+ },
23789
+ "get": {
23790
+ "tags": [
23791
+ "Agents"
23792
+ ],
23793
+ "summary": "List router keys",
23794
+ "description": "Every router key of the agent, live and revoked, without secrets.",
23795
+ "operationId": "listRouterKeys",
23796
+ "parameters": [
23797
+ {
23798
+ "$ref": "#/components/parameters/AgentId"
23799
+ }
23800
+ ],
23801
+ "responses": {
23802
+ "200": {
23803
+ "description": "Router keys",
23804
+ "content": {
23805
+ "application/json": {
23806
+ "schema": {
23807
+ "type": "object",
23808
+ "required": [
23809
+ "keys"
23810
+ ],
23811
+ "properties": {
23812
+ "keys": {
23813
+ "type": "array",
23814
+ "items": {
23815
+ "$ref": "#/components/schemas/RouterKey"
23816
+ }
23817
+ }
23818
+ }
23819
+ }
23820
+ }
23821
+ }
23822
+ },
23823
+ "403": {
23824
+ "$ref": "#/components/responses/Forbidden"
23825
+ },
23826
+ "404": {
23827
+ "$ref": "#/components/responses/NotFound"
23828
+ }
23829
+ }
23830
+ }
23831
+ },
23832
+ "/v1/agents/{agent_id}/router-keys/{key_id}": {
23833
+ "delete": {
23834
+ "tags": [
23835
+ "Agents"
23836
+ ],
23837
+ "summary": "Revoke a router key",
23838
+ "description": "Revokes the key. The gateway stops accepting it within 60 s (router-key tokens\nlive at most that long and the gateway re-exchanges on expiry). Idempotent.\nHuman users only.\n",
23839
+ "operationId": "revokeRouterKey",
23840
+ "parameters": [
23841
+ {
23842
+ "$ref": "#/components/parameters/AgentId"
23843
+ },
23844
+ {
23845
+ "name": "key_id",
23846
+ "in": "path",
23847
+ "required": true,
23848
+ "schema": {
23849
+ "type": "string",
23850
+ "format": "uuid"
23851
+ }
23852
+ }
23853
+ ],
23854
+ "responses": {
23855
+ "200": {
23856
+ "description": "Revoked",
23857
+ "content": {
23858
+ "application/json": {
23859
+ "schema": {
23860
+ "$ref": "#/components/schemas/RouterKey"
23861
+ }
23862
+ }
23863
+ }
23864
+ },
23865
+ "403": {
23866
+ "$ref": "#/components/responses/Forbidden"
23867
+ },
23868
+ "404": {
23869
+ "$ref": "#/components/responses/NotFound"
23870
+ }
23871
+ }
23872
+ }
23873
+ },
23744
23874
  "/v1/agents/{agent_id}/oauth/connections": {
23745
23875
  "get": {
23746
23876
  "tags": [
@@ -33768,6 +33898,26 @@
33768
33898
  "minimum": 0,
33769
33899
  "maximum": 365,
33770
33900
  "description": "Number of days to retain flagged request bodies for replay/investigation"
33901
+ },
33902
+ "streaming_inspection_mode": {
33903
+ "type": "string",
33904
+ "enum": [
33905
+ "rolling",
33906
+ "holdback"
33907
+ ],
33908
+ "description": "How streamed LLM responses are inspected before release. `rolling` (default) releases text behind a tail buffer at least as long as the org's longest vault secret (capped at 256 bytes; longer secrets are matched by prefix); `holdback` buffers `streaming_holdback_chars` for full parity with buffered inspection. Tool-call deltas are always held until the call is complete."
33909
+ },
33910
+ "streaming_holdback_chars": {
33911
+ "type": "integer",
33912
+ "minimum": 64,
33913
+ "maximum": 65536,
33914
+ "description": "Characters held back per stream in holdback mode (default 512)"
33915
+ },
33916
+ "max_concurrent_streams": {
33917
+ "type": "integer",
33918
+ "minimum": 1,
33919
+ "maximum": 1000,
33920
+ "description": "Open streaming responses allowed per agent key (default 20; 429 with Retry-After beyond it)"
33771
33921
  }
33772
33922
  }
33773
33923
  },
@@ -39788,6 +39938,103 @@
39788
39938
  }
39789
39939
  }
39790
39940
  },
39941
+ "CreateRouterKeyRequest": {
39942
+ "type": "object",
39943
+ "additionalProperties": false,
39944
+ "properties": {
39945
+ "name": {
39946
+ "type": "string",
39947
+ "maxLength": 64,
39948
+ "description": "Shown in lists; defaults to `default`"
39949
+ },
39950
+ "max_concurrent_streams": {
39951
+ "type": "integer",
39952
+ "minimum": 1,
39953
+ "maximum": 1000,
39954
+ "description": "Open streaming responses this key may hold at once (gateway default 20)"
39955
+ },
39956
+ "spend_cap_usd": {
39957
+ "type": "number",
39958
+ "minimum": 0,
39959
+ "description": "Optional spend cap in USD, metered by the gateway"
39960
+ }
39961
+ }
39962
+ },
39963
+ "RouterKey": {
39964
+ "type": "object",
39965
+ "required": [
39966
+ "id",
39967
+ "agent_id",
39968
+ "name",
39969
+ "key_prefix",
39970
+ "created_at"
39971
+ ],
39972
+ "properties": {
39973
+ "id": {
39974
+ "type": "string",
39975
+ "format": "uuid"
39976
+ },
39977
+ "agent_id": {
39978
+ "type": "string",
39979
+ "format": "uuid"
39980
+ },
39981
+ "name": {
39982
+ "type": "string"
39983
+ },
39984
+ "key_prefix": {
39985
+ "type": "string",
39986
+ "description": "First 20 characters (`sk-shroud-v1-` + 7) — enough to recognise, not to use"
39987
+ },
39988
+ "max_concurrent_streams": {
39989
+ "type": "integer",
39990
+ "nullable": true
39991
+ },
39992
+ "spend_cap_usd": {
39993
+ "type": "number",
39994
+ "nullable": true
39995
+ },
39996
+ "created_at": {
39997
+ "type": "string",
39998
+ "format": "date-time"
39999
+ },
40000
+ "last_used_at": {
40001
+ "type": "string",
40002
+ "format": "date-time",
40003
+ "nullable": true
40004
+ },
40005
+ "revoked_at": {
40006
+ "type": "string",
40007
+ "format": "date-time",
40008
+ "nullable": true
40009
+ }
40010
+ }
40011
+ },
40012
+ "RouterKeyCreated": {
40013
+ "allOf": [
40014
+ {
40015
+ "$ref": "#/components/schemas/RouterKey"
40016
+ },
40017
+ {
40018
+ "type": "object",
40019
+ "required": [
40020
+ "router_key",
40021
+ "base_url"
40022
+ ],
40023
+ "properties": {
40024
+ "router_key": {
40025
+ "type": "string",
40026
+ "description": "The plaintext `sk-shroud-v1-…` key. Returned once.",
40027
+ "example": "sk-shroud-v1-Q2c5o0yQ3bHkT9m1vXz8Lw7nRp4aEf6u"
40028
+ },
40029
+ "base_url": {
40030
+ "type": "string",
40031
+ "description": "The Shroud gateway to point the SDK at",
40032
+ "example": "https://shroud.1claw.co"
40033
+ }
40034
+ }
40035
+ }
40036
+ ]
40037
+ },
39791
40038
  "EventSubscription": {
39792
40039
  "type": "object",
39793
40040
  "required": [
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.29"
5
+ version: "0.61.31"
6
6
  description: |
7
7
  Secure secret management for AI agents. Provides vaults, secrets,
8
8
  policy-based access control, agent identity, Intents API,
@@ -198,6 +198,12 @@ paths:
198
198
  is fresh.
199
199
 
200
200
  User JWTs from password, API key, or device flow do **not** include `shroud_config`.
201
+
202
+ **Router keys.** An `sk-shroud-v1-…` key (minted at
203
+ `POST /v1/agents/{agent_id}/router-keys`) is exchanged key-only — send `api_key`
204
+ alone, no `agent_id`. The token carries a `router_key` claim
205
+ (`{id, max_concurrent_streams?, spend_cap_micro_usd?}`), lives at most **60 s**
206
+ (revocation SLA), and is only issued for Shroud-enabled agents. Revoked keys get 401.
201
207
  operationId: agentToken
202
208
  security: []
203
209
  requestBody:
@@ -15180,6 +15186,90 @@ paths:
15180
15186
  "404":
15181
15187
  $ref: "#/components/responses/NotFound"
15182
15188
 
15189
+ /v1/agents/{agent_id}/router-keys:
15190
+ post:
15191
+ tags: [Agents]
15192
+ summary: Mint a router key (sk-shroud-v1)
15193
+ description: |
15194
+ Creates an `sk-shroud-v1-<32>` static Bearer for the Shroud gateway, mapped to this
15195
+ agent. A stock OpenAI or Anthropic SDK sends it as `Authorization: Bearer …` with
15196
+ `base_url` set to the gateway; the gateway exchanges it key-only for the agent's
15197
+ token. The plaintext key is returned **once**. Up to 20 live keys per agent.
15198
+ Human users only; the agent must have `shroud_enabled: true`.
15199
+ operationId: createRouterKey
15200
+ parameters:
15201
+ - $ref: "#/components/parameters/AgentId"
15202
+ requestBody:
15203
+ required: false
15204
+ content:
15205
+ application/json:
15206
+ schema:
15207
+ $ref: "#/components/schemas/CreateRouterKeyRequest"
15208
+ responses:
15209
+ "201":
15210
+ description: Router key created (plaintext returned once)
15211
+ content:
15212
+ application/json:
15213
+ schema:
15214
+ $ref: "#/components/schemas/RouterKeyCreated"
15215
+ "400":
15216
+ $ref: "#/components/responses/BadRequest"
15217
+ "403":
15218
+ $ref: "#/components/responses/Forbidden"
15219
+ "404":
15220
+ $ref: "#/components/responses/NotFound"
15221
+ get:
15222
+ tags: [Agents]
15223
+ summary: List router keys
15224
+ description: Every router key of the agent, live and revoked, without secrets.
15225
+ operationId: listRouterKeys
15226
+ parameters:
15227
+ - $ref: "#/components/parameters/AgentId"
15228
+ responses:
15229
+ "200":
15230
+ description: Router keys
15231
+ content:
15232
+ application/json:
15233
+ schema:
15234
+ type: object
15235
+ required: [keys]
15236
+ properties:
15237
+ keys:
15238
+ type: array
15239
+ items:
15240
+ $ref: "#/components/schemas/RouterKey"
15241
+ "403":
15242
+ $ref: "#/components/responses/Forbidden"
15243
+ "404":
15244
+ $ref: "#/components/responses/NotFound"
15245
+
15246
+ /v1/agents/{agent_id}/router-keys/{key_id}:
15247
+ delete:
15248
+ tags: [Agents]
15249
+ summary: Revoke a router key
15250
+ description: |
15251
+ Revokes the key. The gateway stops accepting it within 60 s (router-key tokens
15252
+ live at most that long and the gateway re-exchanges on expiry). Idempotent.
15253
+ Human users only.
15254
+ operationId: revokeRouterKey
15255
+ parameters:
15256
+ - $ref: "#/components/parameters/AgentId"
15257
+ - name: key_id
15258
+ in: path
15259
+ required: true
15260
+ schema: { type: string, format: uuid }
15261
+ responses:
15262
+ "200":
15263
+ description: Revoked
15264
+ content:
15265
+ application/json:
15266
+ schema:
15267
+ $ref: "#/components/schemas/RouterKey"
15268
+ "403":
15269
+ $ref: "#/components/responses/Forbidden"
15270
+ "404":
15271
+ $ref: "#/components/responses/NotFound"
15272
+
15183
15273
  /v1/agents/{agent_id}/oauth/connections:
15184
15274
  get:
15185
15275
  tags: [OAuth Connect]
@@ -21757,6 +21847,25 @@ components:
21757
21847
  minimum: 0
21758
21848
  maximum: 365
21759
21849
  description: Number of days to retain flagged request bodies for replay/investigation
21850
+ streaming_inspection_mode:
21851
+ type: string
21852
+ enum: [rolling, holdback]
21853
+ description: >-
21854
+ How streamed LLM responses are inspected before release. `rolling` (default)
21855
+ releases text behind a tail buffer at least as long as the org's longest vault
21856
+ secret (capped at 256 bytes; longer secrets are matched by prefix); `holdback`
21857
+ buffers `streaming_holdback_chars` for full parity with buffered inspection.
21858
+ Tool-call deltas are always held until the call is complete.
21859
+ streaming_holdback_chars:
21860
+ type: integer
21861
+ minimum: 64
21862
+ maximum: 65536
21863
+ description: Characters held back per stream in holdback mode (default 512)
21864
+ max_concurrent_streams:
21865
+ type: integer
21866
+ minimum: 1
21867
+ maximum: 1000
21868
+ description: Open streaming responses allowed per agent key (default 20; 429 with Retry-After beyond it)
21760
21869
 
21761
21870
  UnicodeNormalizationConfig:
21762
21871
  type: object
@@ -25824,6 +25933,55 @@ components:
25824
25933
  description: Pointers within one item whose values together identify it.
25825
25934
  min_interval_secs: { type: integer, example: 60 }
25826
25935
 
25936
+ CreateRouterKeyRequest:
25937
+ type: object
25938
+ additionalProperties: false
25939
+ properties:
25940
+ name:
25941
+ type: string
25942
+ maxLength: 64
25943
+ description: Shown in lists; defaults to `default`
25944
+ max_concurrent_streams:
25945
+ type: integer
25946
+ minimum: 1
25947
+ maximum: 1000
25948
+ description: Open streaming responses this key may hold at once (gateway default 20)
25949
+ spend_cap_usd:
25950
+ type: number
25951
+ minimum: 0
25952
+ description: Optional spend cap in USD, metered by the gateway
25953
+
25954
+ RouterKey:
25955
+ type: object
25956
+ required: [id, agent_id, name, key_prefix, created_at]
25957
+ properties:
25958
+ id: { type: string, format: uuid }
25959
+ agent_id: { type: string, format: uuid }
25960
+ name: { type: string }
25961
+ key_prefix:
25962
+ type: string
25963
+ description: First 20 characters (`sk-shroud-v1-` + 7) — enough to recognise, not to use
25964
+ max_concurrent_streams: { type: integer, nullable: true }
25965
+ spend_cap_usd: { type: number, nullable: true }
25966
+ created_at: { type: string, format: date-time }
25967
+ last_used_at: { type: string, format: date-time, nullable: true }
25968
+ revoked_at: { type: string, format: date-time, nullable: true }
25969
+
25970
+ RouterKeyCreated:
25971
+ allOf:
25972
+ - $ref: "#/components/schemas/RouterKey"
25973
+ - type: object
25974
+ required: [router_key, base_url]
25975
+ properties:
25976
+ router_key:
25977
+ type: string
25978
+ description: The plaintext `sk-shroud-v1-…` key. Returned once.
25979
+ example: sk-shroud-v1-Q2c5o0yQ3bHkT9m1vXz8Lw7nRp4aEf6u
25980
+ base_url:
25981
+ type: string
25982
+ description: The Shroud gateway to point the SDK at
25983
+ example: https://shroud.1claw.co
25984
+
25827
25985
  EventSubscription:
25828
25986
  type: object
25829
25987
  required: [id, agent_id, binding_id, event_type, interval_secs, is_active, primed, next_poll_at, consecutive_errors, events_emitted, created_at]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1claw/openapi-spec",
3
- "version": "0.61.29",
3
+ "version": "0.61.31",
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": {