@1claw/openapi-spec 0.61.43 → 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.
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.43",
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": [
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.43"
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]
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@1claw/openapi-spec",
3
- "version": "0.61.43",
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",