@1claw/openapi-spec 0.61.42 → 0.61.44

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 +205 -1
  2. package/openapi.yaml +154 -1
  3. package/package.json +2 -2
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.42",
5
+ "version": "0.61.44",
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"
@@ -28151,6 +28151,121 @@
28151
28151
  }
28152
28152
  }
28153
28153
  },
28154
+ "/v1/billing/promo/preview": {
28155
+ "get": {
28156
+ "tags": [
28157
+ "Billing"
28158
+ ],
28159
+ "summary": "What a promotion code does to a plan",
28160
+ "description": "Public, and deliberately so: a promo advertised on social media is read by people who have no account yet, and the price they were promised has to be on the pricing page before they make one. It resolves a Stripe promotion code and one configured plan price; no tenant data is reachable through it.\n\nDistinct from `/v1/billing/promo/validate`, which answers for the `promo_codes` grants an authenticated org can redeem in place. This one describes a checkout discount, which needs a card and therefore has to go through `POST /v1/billing/subscribe` with `promo_code`.\n",
28161
+ "operationId": "preview_promo",
28162
+ "security": [],
28163
+ "parameters": [
28164
+ {
28165
+ "name": "code",
28166
+ "in": "query",
28167
+ "required": true,
28168
+ "schema": {
28169
+ "type": "string",
28170
+ "maxLength": 64
28171
+ },
28172
+ "description": "The promotion code, as advertised."
28173
+ },
28174
+ {
28175
+ "name": "tier",
28176
+ "in": "query",
28177
+ "required": false,
28178
+ "schema": {
28179
+ "type": "string",
28180
+ "enum": [
28181
+ "pro",
28182
+ "team",
28183
+ "business"
28184
+ ],
28185
+ "default": "pro"
28186
+ }
28187
+ },
28188
+ {
28189
+ "name": "interval",
28190
+ "in": "query",
28191
+ "required": false,
28192
+ "schema": {
28193
+ "type": "string",
28194
+ "enum": [
28195
+ "monthly",
28196
+ "annual"
28197
+ ],
28198
+ "default": "monthly"
28199
+ }
28200
+ }
28201
+ ],
28202
+ "responses": {
28203
+ "200": {
28204
+ "description": "The offer, or why the code cannot be used. A code that does not apply answers 200 with `valid: false` and a message, not an error status — \"this code is not for annual billing\" is an answer, not a failure.\n",
28205
+ "content": {
28206
+ "application/json": {
28207
+ "schema": {
28208
+ "type": "object",
28209
+ "required": [
28210
+ "valid",
28211
+ "tier",
28212
+ "interval"
28213
+ ],
28214
+ "properties": {
28215
+ "valid": {
28216
+ "type": "boolean"
28217
+ },
28218
+ "code": {
28219
+ "type": "string",
28220
+ "nullable": true,
28221
+ "description": "The code as Stripe stores it, not the caller's casing."
28222
+ },
28223
+ "headline": {
28224
+ "type": "string",
28225
+ "nullable": true,
28226
+ "description": "The offer in one sentence, derived from the coupon — e.g. \"$5/mo for your first 6 months, then $29/mo\". Rendered rather than composed by the client, so a page cannot advertise terms different from the ones charged.\n"
28227
+ },
28228
+ "tier": {
28229
+ "type": "string"
28230
+ },
28231
+ "interval": {
28232
+ "type": "string"
28233
+ },
28234
+ "list_cents": {
28235
+ "type": "integer",
28236
+ "nullable": true
28237
+ },
28238
+ "first_cents": {
28239
+ "type": "integer",
28240
+ "nullable": true,
28241
+ "description": "What the first invoice comes to, after the discount."
28242
+ },
28243
+ "duration_months": {
28244
+ "type": "integer",
28245
+ "nullable": true,
28246
+ "description": "How many invoices the discount covers."
28247
+ },
28248
+ "expires_at": {
28249
+ "type": "string",
28250
+ "format": "date-time",
28251
+ "nullable": true,
28252
+ "description": "Last moment the code can be redeemed. Someone who subscribes before this keeps the discount for its full length.\n"
28253
+ },
28254
+ "message": {
28255
+ "type": "string",
28256
+ "nullable": true
28257
+ }
28258
+ }
28259
+ }
28260
+ }
28261
+ }
28262
+ },
28263
+ "400": {
28264
+ "description": "Unknown tier or interval"
28265
+ }
28266
+ }
28267
+ }
28268
+ },
28154
28269
  "/v1/billing/promo/validate": {
28155
28270
  "get": {
28156
28271
  "tags": [
@@ -29544,6 +29659,62 @@
29544
29659
  }
29545
29660
  }
29546
29661
  },
29662
+ "/v1/runtimes/{runtime_id}/agent-token/renew": {
29663
+ "parameters": [
29664
+ {
29665
+ "name": "runtime_id",
29666
+ "in": "path",
29667
+ "required": true,
29668
+ "schema": {
29669
+ "type": "string"
29670
+ }
29671
+ }
29672
+ ],
29673
+ "post": {
29674
+ "tags": [
29675
+ "Runtimes"
29676
+ ],
29677
+ "summary": "Renew this runtime's own agent JWT before it expires",
29678
+ "description": "Called by the runtime container itself, not by a human or an external client.\nA runtime's `ONECLAW_AGENT_TOKEN` is a short-lived JWT that Cloud Run resolves from Secret Manager when the instance starts and never again, so a container that outlives the TTL loses its credential — and with it every 1claw tool — until it is restarted. This lets it replace the token in place instead.\nAuthenticated by the credential being renewed: the caller must present a still-valid runtime-bound agent JWT together with a matching `X-1Claw-Runtime-Id` header, and must be the agent that runtime is bound to. It grants nothing new — the same claims with a later expiry — and stops working the moment the token lapses, the token is revoked, the agent is suspended, or the runtime is no longer deployed. Exempt from the monthly request quota: upkeep of an already-paid-for runtime is not itself a billable request.",
29679
+ "operationId": "renew_runtime_agent_token",
29680
+ "responses": {
29681
+ "200": {
29682
+ "description": "A fresh access token",
29683
+ "content": {
29684
+ "application/json": {
29685
+ "schema": {
29686
+ "type": "object",
29687
+ "properties": {
29688
+ "access_token": {
29689
+ "type": "string"
29690
+ },
29691
+ "expires_in": {
29692
+ "type": "integer"
29693
+ },
29694
+ "token_type": {
29695
+ "type": "string",
29696
+ "example": "Bearer"
29697
+ }
29698
+ }
29699
+ }
29700
+ }
29701
+ }
29702
+ },
29703
+ "400": {
29704
+ "description": "The runtime is not deployed, so it has nothing to renew"
29705
+ },
29706
+ "401": {
29707
+ "description": "Unauthenticated, or the token presented has already expired"
29708
+ },
29709
+ "403": {
29710
+ "description": "Not an agent caller"
29711
+ },
29712
+ "404": {
29713
+ "description": "No such runtime, or it is not bound to this agent"
29714
+ }
29715
+ }
29716
+ }
29717
+ },
29547
29718
  "/v1/otel/stream": {
29548
29719
  "get": {
29549
29720
  "tags": [
@@ -30668,6 +30839,39 @@
30668
30839
  }
30669
30840
  }
30670
30841
  },
30842
+ "/v1/runtimes/{runtime_id}/enable-recommended-tools": {
30843
+ "parameters": [
30844
+ {
30845
+ "name": "runtime_id",
30846
+ "in": "path",
30847
+ "required": true,
30848
+ "schema": {
30849
+ "type": "string"
30850
+ }
30851
+ }
30852
+ ],
30853
+ "post": {
30854
+ "tags": [
30855
+ "Runtimes"
30856
+ ],
30857
+ "summary": "Enable the recommended tool set (image generation, web search, memory, Shroud, intents) on the runtime's agent. Human-only.",
30858
+ "operationId": "enable_recommended_tools",
30859
+ "responses": {
30860
+ "200": {
30861
+ "description": "Success"
30862
+ },
30863
+ "401": {
30864
+ "description": "Unauthenticated"
30865
+ },
30866
+ "403": {
30867
+ "description": "Forbidden, or the plan does not include this"
30868
+ },
30869
+ "404": {
30870
+ "description": "Not found"
30871
+ }
30872
+ }
30873
+ }
30874
+ },
30671
30875
  "/v1/vaults/{vault_id}/secret-version-disable/{*path_and_version}": {
30672
30876
  "parameters": [
30673
30877
  {
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.42"
5
+ version: "0.61.44"
6
6
  description: |
7
7
  Secure secret management for AI agents. Provides vaults, secrets,
8
8
  policy-based access control, agent identity, Intents API,
@@ -18000,6 +18000,87 @@ paths:
18000
18000
  description: Forbidden, or the plan does not include this
18001
18001
  '404':
18002
18002
  description: Not found
18003
+ /v1/billing/promo/preview:
18004
+ get:
18005
+ tags: [Billing]
18006
+ summary: "What a promotion code does to a plan"
18007
+ description: >
18008
+ Public, and deliberately so: a promo advertised on social media
18009
+ is read by people who have no account yet, and the price they
18010
+ were promised has to be on the pricing page before they make
18011
+ one. It resolves a Stripe promotion code and one configured
18012
+ plan price; no tenant data is reachable through it.
18013
+
18014
+
18015
+ Distinct from `/v1/billing/promo/validate`, which answers for
18016
+ the `promo_codes` grants an authenticated org can redeem in
18017
+ place. This one describes a checkout discount, which needs a
18018
+ card and therefore has to go through
18019
+ `POST /v1/billing/subscribe` with `promo_code`.
18020
+ operationId: preview_promo
18021
+ security: []
18022
+ parameters:
18023
+ - name: code
18024
+ in: query
18025
+ required: true
18026
+ schema: { type: string, maxLength: 64 }
18027
+ description: The promotion code, as advertised.
18028
+ - name: tier
18029
+ in: query
18030
+ required: false
18031
+ schema: { type: string, enum: [pro, team, business], default: pro }
18032
+ - name: interval
18033
+ in: query
18034
+ required: false
18035
+ schema: { type: string, enum: [monthly, annual], default: monthly }
18036
+ responses:
18037
+ '200':
18038
+ description: >
18039
+ The offer, or why the code cannot be used. A code that
18040
+ does not apply answers 200 with `valid: false` and a
18041
+ message, not an error status — "this code is not for
18042
+ annual billing" is an answer, not a failure.
18043
+ content:
18044
+ application/json:
18045
+ schema:
18046
+ type: object
18047
+ required: [valid, tier, interval]
18048
+ properties:
18049
+ valid: { type: boolean }
18050
+ code:
18051
+ type: string
18052
+ nullable: true
18053
+ description: The code as Stripe stores it, not the caller's casing.
18054
+ headline:
18055
+ type: string
18056
+ nullable: true
18057
+ description: >
18058
+ The offer in one sentence, derived from the coupon —
18059
+ e.g. "$5/mo for your first 6 months, then $29/mo".
18060
+ Rendered rather than composed by the client, so a page
18061
+ cannot advertise terms different from the ones charged.
18062
+ tier: { type: string }
18063
+ interval: { type: string }
18064
+ list_cents: { type: integer, nullable: true }
18065
+ first_cents:
18066
+ type: integer
18067
+ nullable: true
18068
+ description: What the first invoice comes to, after the discount.
18069
+ duration_months:
18070
+ type: integer
18071
+ nullable: true
18072
+ description: How many invoices the discount covers.
18073
+ expires_at:
18074
+ type: string
18075
+ format: date-time
18076
+ nullable: true
18077
+ description: >
18078
+ Last moment the code can be redeemed. Someone who
18079
+ subscribes before this keeps the discount for its
18080
+ full length.
18081
+ message: { type: string, nullable: true }
18082
+ '400':
18083
+ description: Unknown tier or interval
18003
18084
  /v1/billing/promo/validate:
18004
18085
  get:
18005
18086
  tags: [Billing]
@@ -18893,6 +18974,58 @@ paths:
18893
18974
  description: Forbidden, or the plan does not include this
18894
18975
  '404':
18895
18976
  description: Not found
18977
+ /v1/runtimes/{runtime_id}/agent-token/renew:
18978
+ parameters:
18979
+ - name: runtime_id
18980
+ in: path
18981
+ required: true
18982
+ schema:
18983
+ type: string
18984
+ post:
18985
+ tags: [Runtimes]
18986
+ summary: "Renew this runtime's own agent JWT before it expires"
18987
+ description: >-
18988
+ Called by the runtime container itself, not by a human or an
18989
+ external client.
18990
+
18991
+ A runtime's `ONECLAW_AGENT_TOKEN` is a short-lived JWT that Cloud
18992
+ Run resolves from Secret Manager when the instance starts and
18993
+ never again, so a container that outlives the TTL loses its
18994
+ credential — and with it every 1claw tool — until it is
18995
+ restarted. This lets it replace the token in place instead.
18996
+
18997
+ Authenticated by the credential being renewed: the caller must
18998
+ present a still-valid runtime-bound agent JWT together with a
18999
+ matching `X-1Claw-Runtime-Id` header, and must be the agent that
19000
+ runtime is bound to. It grants nothing new — the same claims with
19001
+ a later expiry — and stops working the moment the token lapses,
19002
+ the token is revoked, the agent is suspended, or the runtime is
19003
+ no longer deployed. Exempt from the monthly request quota: upkeep
19004
+ of an already-paid-for runtime is not itself a billable request.
19005
+ operationId: renew_runtime_agent_token
19006
+ responses:
19007
+ '200':
19008
+ description: A fresh access token
19009
+ content:
19010
+ application/json:
19011
+ schema:
19012
+ type: object
19013
+ properties:
19014
+ access_token:
19015
+ type: string
19016
+ expires_in:
19017
+ type: integer
19018
+ token_type:
19019
+ type: string
19020
+ example: Bearer
19021
+ '400':
19022
+ description: The runtime is not deployed, so it has nothing to renew
19023
+ '401':
19024
+ description: Unauthenticated, or the token presented has already expired
19025
+ '403':
19026
+ description: Not an agent caller
19027
+ '404':
19028
+ description: No such runtime, or it is not bound to this agent
18896
19029
  /v1/otel/stream:
18897
19030
  get:
18898
19031
  tags: [Observability]
@@ -19596,6 +19729,26 @@ paths:
19596
19729
  description: Forbidden, or the plan does not include this
19597
19730
  '404':
19598
19731
  description: Not found
19732
+ /v1/runtimes/{runtime_id}/enable-recommended-tools:
19733
+ parameters:
19734
+ - name: runtime_id
19735
+ in: path
19736
+ required: true
19737
+ schema:
19738
+ type: string
19739
+ post:
19740
+ tags: [Runtimes]
19741
+ summary: "Enable the recommended tool set (image generation, web search, memory, Shroud, intents) on the runtime's agent. Human-only."
19742
+ operationId: enable_recommended_tools
19743
+ responses:
19744
+ '200':
19745
+ description: Success
19746
+ '401':
19747
+ description: Unauthenticated
19748
+ '403':
19749
+ description: Forbidden, or the plan does not include this
19750
+ '404':
19751
+ description: Not found
19599
19752
  /v1/vaults/{vault_id}/secret-version-disable/{*path_and_version}:
19600
19753
  parameters:
19601
19754
  - name: vault_id
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@1claw/openapi-spec",
3
- "version": "0.61.42",
4
- "description": "OpenAPI 3.1.0 specification for the 1Claw Vault API \u2014 generate clients in any language",
3
+ "version": "0.61.44",
4
+ "description": "OpenAPI 3.1.0 specification for the 1Claw Vault API — generate clients in any language",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",