@1claw/openapi-spec 0.61.40 → 0.61.41

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 +620 -10
  2. package/openapi.yaml +429 -10
  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.40",
5
+ "version": "0.61.41",
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"
@@ -222,6 +222,10 @@
222
222
  {
223
223
  "name": "Shamir KEK",
224
224
  "description": "Shamir secret-sharing for org-level Key Encryption Keys"
225
+ },
226
+ {
227
+ "name": "Agent Tools",
228
+ "description": "Utility tools an agent calls directly on its own token (web search, etc.)"
225
229
  }
226
230
  ],
227
231
  "paths": {
@@ -2911,7 +2915,7 @@
2911
2915
  "x402"
2912
2916
  ],
2913
2917
  "pricingMode": "fixed",
2914
- "price": "0.0075"
2918
+ "price": "0.0225"
2915
2919
  },
2916
2920
  "parameters": [
2917
2921
  {
@@ -2964,7 +2968,7 @@
2964
2968
  "x402"
2965
2969
  ],
2966
2970
  "pricingMode": "fixed",
2967
- "price": "0.0015"
2971
+ "price": "0.0045"
2968
2972
  },
2969
2973
  "parameters": [
2970
2974
  {
@@ -4116,7 +4120,8 @@
4116
4120
  "protocols": [
4117
4121
  "x402"
4118
4122
  ],
4119
- "pricingMode": "quote"
4123
+ "pricingMode": "fixed",
4124
+ "price": "0.225"
4120
4125
  },
4121
4126
  "description": "Replay protection: send an optional **Idempotency-Key** header (e.g. UUID or opaque string).\nDuplicate requests with the same key within 24 hours return the cached transaction response\n(no second sign/broadcast). Omit the header for non-idempotent submissions.\n",
4122
4127
  "operationId": "submitTransaction",
@@ -4287,7 +4292,8 @@
4287
4292
  "protocols": [
4288
4293
  "x402"
4289
4294
  ],
4290
- "pricingMode": "quote"
4295
+ "pricingMode": "fixed",
4296
+ "price": "0.225"
4291
4297
  },
4292
4298
  "parameters": [
4293
4299
  {
@@ -4342,7 +4348,7 @@
4342
4348
  "x402"
4343
4349
  ],
4344
4350
  "pricingMode": "fixed",
4345
- "price": "0.075"
4351
+ "price": "0.225"
4346
4352
  },
4347
4353
  "parameters": [
4348
4354
  {
@@ -4397,7 +4403,7 @@
4397
4403
  "x402"
4398
4404
  ],
4399
4405
  "pricingMode": "fixed",
4400
- "price": "0.075"
4406
+ "price": "0.225"
4401
4407
  },
4402
4408
  "parameters": [
4403
4409
  {
@@ -6407,7 +6413,7 @@
6407
6413
  "x402"
6408
6414
  ],
6409
6415
  "pricingMode": "fixed",
6410
- "price": "0.003"
6416
+ "price": "0.009"
6411
6417
  },
6412
6418
  "parameters": [
6413
6419
  {
@@ -6466,7 +6472,7 @@
6466
6472
  "x402"
6467
6473
  ],
6468
6474
  "pricingMode": "fixed",
6469
- "price": "0.0015"
6475
+ "price": "0.0045"
6470
6476
  },
6471
6477
  "parameters": [
6472
6478
  {
@@ -7049,6 +7055,114 @@
7049
7055
  }
7050
7056
  }
7051
7057
  },
7058
+ "/v1/onboarding/guided/status": {
7059
+ "get": {
7060
+ "tags": [
7061
+ "Organization"
7062
+ ],
7063
+ "summary": "Guided onboarding eligibility + status",
7064
+ "description": "Whether this org is in the guided-onboarding rollout cohort, plus the\nsame welcome-bundle progress fields `GET /v1/org/onboarding/status`\nreports. `eligible` decides whether the dashboard's redirect sends a\nnew, still-unprovisioned user to the guided flow or the existing\nMCP-connect flow.\n",
7065
+ "operationId": "getGuidedOnboardingStatus",
7066
+ "responses": {
7067
+ "200": {
7068
+ "description": "Guided onboarding status",
7069
+ "content": {
7070
+ "application/json": {
7071
+ "schema": {
7072
+ "$ref": "#/components/schemas/GuidedOnboardingStatus"
7073
+ }
7074
+ }
7075
+ }
7076
+ }
7077
+ }
7078
+ }
7079
+ },
7080
+ "/v1/onboarding/guided/ask": {
7081
+ "post": {
7082
+ "tags": [
7083
+ "Organization"
7084
+ ],
7085
+ "summary": "Ask the guided onboarding assistant a question",
7086
+ "description": "Scoped, one-shot Q&A for the guided wizard's \"have a question?\" panel.\nNot tied to an agent (many questions arrive before one exists yet) and\nnot persisted as a conversation. The system prompt is fixed server-side\nand refuses anything outside vaults/policies/runtimes/billing/channels —\nnever client-suppliable. Billed like any other Shroud LLM call: the\ncaller's own bearer token is forwarded so usage attributes to their org.\n",
7087
+ "operationId": "guidedOnboardingAsk",
7088
+ "requestBody": {
7089
+ "required": true,
7090
+ "content": {
7091
+ "application/json": {
7092
+ "schema": {
7093
+ "$ref": "#/components/schemas/GuidedAskRequest"
7094
+ }
7095
+ }
7096
+ }
7097
+ },
7098
+ "responses": {
7099
+ "200": {
7100
+ "description": "Assistant's answer",
7101
+ "content": {
7102
+ "application/json": {
7103
+ "schema": {
7104
+ "$ref": "#/components/schemas/GuidedAskResponse"
7105
+ }
7106
+ }
7107
+ }
7108
+ }
7109
+ }
7110
+ }
7111
+ },
7112
+ "/v1/onboarding/guided/trial/setup-intent": {
7113
+ "post": {
7114
+ "tags": [
7115
+ "Organization"
7116
+ ],
7117
+ "summary": "Start a card-on-file trial runtime setup",
7118
+ "description": "Creates a Stripe SetupIntent for the org's customer so the guided\nonboarding wizard can collect a card with Stripe.js — no charge unless\nthe trial runtime is kept past its trial window.\n",
7119
+ "operationId": "createTrialSetupIntent",
7120
+ "responses": {
7121
+ "200": {
7122
+ "description": "SetupIntent client secret",
7123
+ "content": {
7124
+ "application/json": {
7125
+ "schema": {
7126
+ "$ref": "#/components/schemas/TrialSetupIntentResponse"
7127
+ }
7128
+ }
7129
+ }
7130
+ }
7131
+ }
7132
+ }
7133
+ },
7134
+ "/v1/onboarding/guided/trial/runtime": {
7135
+ "post": {
7136
+ "tags": [
7137
+ "Organization"
7138
+ ],
7139
+ "summary": "Create a card-gated trial runtime",
7140
+ "description": "Verifies the given SetupIntent succeeded, then delegates to the same\nruntime-creation logic `POST /v1/runtimes` uses. Only reachable once\nthe guided onboarding wizard has a confirmed SetupIntent for the org.\n",
7141
+ "operationId": "createTrialRuntime",
7142
+ "requestBody": {
7143
+ "required": true,
7144
+ "content": {
7145
+ "application/json": {
7146
+ "schema": {
7147
+ "$ref": "#/components/schemas/CreateTrialRuntimeRequest"
7148
+ }
7149
+ }
7150
+ }
7151
+ },
7152
+ "responses": {
7153
+ "201": {
7154
+ "description": "Created runtime",
7155
+ "content": {
7156
+ "application/json": {
7157
+ "schema": {
7158
+ "$ref": "#/components/schemas/RuntimeResponse"
7159
+ }
7160
+ }
7161
+ }
7162
+ }
7163
+ }
7164
+ }
7165
+ },
7052
7166
  "/v1/org/status": {
7053
7167
  "get": {
7054
7168
  "tags": [
@@ -7906,7 +8020,7 @@
7906
8020
  "x402"
7907
8021
  ],
7908
8022
  "pricingMode": "fixed",
7909
- "price": "0.0008"
8023
+ "price": "0.0024"
7910
8024
  },
7911
8025
  "parameters": [
7912
8026
  {
@@ -12298,6 +12412,72 @@
12298
12412
  }
12299
12413
  }
12300
12414
  },
12415
+ "/v1/shroud/activity/today": {
12416
+ "get": {
12417
+ "tags": [
12418
+ "Shroud"
12419
+ ],
12420
+ "summary": "An agent's inference spend since 00:00 UTC",
12421
+ "operationId": "getAgentSpendToday",
12422
+ "description": "What the agent has spent today per the vault's priced activity rows, plus\nrequests and tokens and how many requests Shroud blocked for budget. Shroud\nsyncs its daily-budget counter from this so `daily_budget_usd` holds across\nShroud instances and restarts. Callable by the agent itself (its own id) or the\nplatform service key — the same gate as activity ingest.\n",
12423
+ "security": [
12424
+ {
12425
+ "BearerAuth": []
12426
+ }
12427
+ ],
12428
+ "parameters": [
12429
+ {
12430
+ "in": "query",
12431
+ "name": "agent_id",
12432
+ "required": true,
12433
+ "schema": {
12434
+ "type": "string",
12435
+ "format": "uuid"
12436
+ }
12437
+ }
12438
+ ],
12439
+ "responses": {
12440
+ "200": {
12441
+ "description": "Today's spend",
12442
+ "content": {
12443
+ "application/json": {
12444
+ "schema": {
12445
+ "type": "object",
12446
+ "properties": {
12447
+ "agent_id": {
12448
+ "type": "string",
12449
+ "format": "uuid"
12450
+ },
12451
+ "day": {
12452
+ "type": "string",
12453
+ "example": "2026-09-21"
12454
+ },
12455
+ "cost_usd": {
12456
+ "type": "number"
12457
+ },
12458
+ "requests": {
12459
+ "type": "integer",
12460
+ "format": "int64"
12461
+ },
12462
+ "tokens": {
12463
+ "type": "integer",
12464
+ "format": "int64"
12465
+ },
12466
+ "blocked_by_budget": {
12467
+ "type": "integer",
12468
+ "format": "int64"
12469
+ }
12470
+ }
12471
+ }
12472
+ }
12473
+ }
12474
+ },
12475
+ "403": {
12476
+ "$ref": "#/components/responses/Forbidden"
12477
+ }
12478
+ }
12479
+ }
12480
+ },
12301
12481
  "/v1/shroud/threat-summary": {
12302
12482
  "get": {
12303
12483
  "tags": [
@@ -18234,6 +18414,149 @@
18234
18414
  }
18235
18415
  }
18236
18416
  },
18417
+ "/v1/admin/stats/growth-timeseries": {
18418
+ "get": {
18419
+ "tags": [
18420
+ "Admin"
18421
+ ],
18422
+ "summary": "Time-bucketed usage series for one adoption/usage vertical (admin only)",
18423
+ "description": "Gap-filled counts (24h → hourly, 7d/30d/90d → daily, 365d → weekly) for one of 15 adoption/usage verticals, plus a period-over-period delta. Backs both the live admin analytics dashboard and the weekly investor report — same source, two surfaces.\n",
18424
+ "operationId": "adminGrowthTimeseries",
18425
+ "parameters": [
18426
+ {
18427
+ "name": "vertical",
18428
+ "in": "query",
18429
+ "required": true,
18430
+ "schema": {
18431
+ "type": "string",
18432
+ "enum": [
18433
+ "signups_orgs",
18434
+ "signups_users",
18435
+ "subscriptions_new",
18436
+ "subscriptions_churned",
18437
+ "shroud_usage",
18438
+ "shroud_security",
18439
+ "intents_execution",
18440
+ "intents_transactions",
18441
+ "vault_usage",
18442
+ "runtime_usage",
18443
+ "memory_usage",
18444
+ "automations",
18445
+ "embedded_wallets_created",
18446
+ "embedded_wallets_used",
18447
+ "platform_api"
18448
+ ]
18449
+ }
18450
+ },
18451
+ {
18452
+ "name": "period",
18453
+ "in": "query",
18454
+ "schema": {
18455
+ "type": "string",
18456
+ "enum": [
18457
+ "24h",
18458
+ "7d",
18459
+ "30d",
18460
+ "90d",
18461
+ "365d"
18462
+ ],
18463
+ "default": "30d"
18464
+ }
18465
+ }
18466
+ ],
18467
+ "responses": {
18468
+ "200": {
18469
+ "description": "Time-bucketed series for the requested vertical",
18470
+ "content": {
18471
+ "application/json": {
18472
+ "schema": {
18473
+ "$ref": "#/components/schemas/GrowthTimeseriesResponse"
18474
+ }
18475
+ }
18476
+ }
18477
+ },
18478
+ "400": {
18479
+ "$ref": "#/components/responses/BadRequest"
18480
+ },
18481
+ "403": {
18482
+ "$ref": "#/components/responses/Forbidden"
18483
+ }
18484
+ }
18485
+ }
18486
+ },
18487
+ "/v1/admin/stats/retention": {
18488
+ "get": {
18489
+ "tags": [
18490
+ "Admin"
18491
+ ],
18492
+ "summary": "Logo retention over a trailing window (admin only)",
18493
+ "description": "Percentage of organizations older than `window_days` that showed any platform activity (usage_events) in the trailing `window_days` — a simple, defensible retention proxy, not a full cohort matrix.\n",
18494
+ "operationId": "adminRetention",
18495
+ "parameters": [
18496
+ {
18497
+ "name": "window_days",
18498
+ "in": "query",
18499
+ "schema": {
18500
+ "type": "integer",
18501
+ "default": 30,
18502
+ "minimum": 1,
18503
+ "maximum": 365
18504
+ }
18505
+ }
18506
+ ],
18507
+ "responses": {
18508
+ "200": {
18509
+ "description": "Retention over the requested window",
18510
+ "content": {
18511
+ "application/json": {
18512
+ "schema": {
18513
+ "$ref": "#/components/schemas/RetentionResponse"
18514
+ }
18515
+ }
18516
+ }
18517
+ },
18518
+ "403": {
18519
+ "$ref": "#/components/responses/Forbidden"
18520
+ }
18521
+ }
18522
+ }
18523
+ },
18524
+ "/v1/admin/llm-prices": {
18525
+ "get": {
18526
+ "tags": [
18527
+ "Admin"
18528
+ ],
18529
+ "summary": "Global LLM price card (admin only)",
18530
+ "description": "The platform-wide price card with no org-level overrides applied — see `/v1/spend/ai/prices` for the org-resolved view.",
18531
+ "operationId": "adminListLlmPrices",
18532
+ "responses": {
18533
+ "200": {
18534
+ "description": "Prices",
18535
+ "content": {
18536
+ "application/json": {
18537
+ "schema": {
18538
+ "type": "object",
18539
+ "required": [
18540
+ "prices"
18541
+ ],
18542
+ "properties": {
18543
+ "prices": {
18544
+ "type": "array",
18545
+ "items": {
18546
+ "$ref": "#/components/schemas/LlmModelPrice"
18547
+ }
18548
+ }
18549
+ }
18550
+ }
18551
+ }
18552
+ }
18553
+ },
18554
+ "403": {
18555
+ "$ref": "#/components/responses/Forbidden"
18556
+ }
18557
+ }
18558
+ }
18559
+ },
18237
18560
  "/v1/agents/{agent_id}/pay/settings": {
18238
18561
  "patch": {
18239
18562
  "tags": [
@@ -27927,6 +28250,64 @@
27927
28250
  }
27928
28251
  }
27929
28252
  },
28253
+ "/v1/tools/web-search": {
28254
+ "post": {
28255
+ "tags": [
28256
+ "Agent Tools"
28257
+ ],
28258
+ "summary": "Platform-default web search fallback",
28259
+ "description": "Called on the agent's own token (not a Shroud-internal callback). Used by the runtime `web_search` tool when an agent has no BRAVE_API_KEY/TAVILY_API_KEY/SERP_API_KEY/ONECLAW_WEB_SEARCH_BINDING of its own — proxies to a shared, platform-provided Brave Search key under a hard monthly platform-wide cap.\n",
28260
+ "operationId": "agentWebSearch",
28261
+ "requestBody": {
28262
+ "required": true,
28263
+ "content": {
28264
+ "application/json": {
28265
+ "schema": {
28266
+ "type": "object",
28267
+ "required": [
28268
+ "query"
28269
+ ],
28270
+ "properties": {
28271
+ "query": {
28272
+ "type": "string",
28273
+ "maxLength": 500
28274
+ },
28275
+ "num_results": {
28276
+ "type": "integer",
28277
+ "default": 5
28278
+ }
28279
+ }
28280
+ }
28281
+ }
28282
+ }
28283
+ },
28284
+ "responses": {
28285
+ "200": {
28286
+ "description": "Search results",
28287
+ "content": {
28288
+ "application/json": {
28289
+ "schema": {
28290
+ "$ref": "#/components/schemas/WebSearchResponse"
28291
+ }
28292
+ }
28293
+ }
28294
+ },
28295
+ "400": {
28296
+ "$ref": "#/components/responses/BadRequest"
28297
+ },
28298
+ "403": {
28299
+ "description": "Called on a non-agent token",
28300
+ "content": {
28301
+ "application/json": {
28302
+ "schema": {
28303
+ "$ref": "#/components/schemas/ProblemDetails"
28304
+ }
28305
+ }
28306
+ }
28307
+ }
28308
+ }
28309
+ }
28310
+ },
27930
28311
  "/v1/memory/shared-namespaces": {
27931
28312
  "get": {
27932
28313
  "tags": [
@@ -36970,6 +37351,11 @@
36970
37351
  "type": "string",
36971
37352
  "format": "uuid",
36972
37353
  "description": "Approval satisfying an `agent.create` control-plane consensus policy,\nif the org has one. Same field and meaning as on `POST /v1/agents`:\nthe first call returns 202 with the approval to collect, and the\nretry passes its id here.\n"
37354
+ },
37355
+ "guided": {
37356
+ "type": "boolean",
37357
+ "default": false,
37358
+ "description": "Seeds `getting-started/**` instead of `examples/**` in the shared\n`default` vault — the guided onboarding wizard's own sample content,\nkept distinguishable from the MCP-connect developer flow's.\n"
36973
37359
  }
36974
37360
  }
36975
37361
  },
@@ -37002,6 +37388,104 @@
37002
37388
  }
37003
37389
  }
37004
37390
  },
37391
+ "GuidedOnboardingStatus": {
37392
+ "allOf": [
37393
+ {
37394
+ "type": "object",
37395
+ "required": [
37396
+ "eligible"
37397
+ ],
37398
+ "properties": {
37399
+ "eligible": {
37400
+ "type": "boolean",
37401
+ "description": "Whether this org is in the guided-onboarding rollout cohort —\ndecides whether the dashboard redirects a new user here or to\nthe MCP-connect flow.\n"
37402
+ }
37403
+ }
37404
+ },
37405
+ {
37406
+ "$ref": "#/components/schemas/OnboardingStatus"
37407
+ }
37408
+ ]
37409
+ },
37410
+ "GuidedAskRequest": {
37411
+ "type": "object",
37412
+ "required": [
37413
+ "question"
37414
+ ],
37415
+ "properties": {
37416
+ "question": {
37417
+ "type": "string",
37418
+ "maxLength": 500
37419
+ },
37420
+ "step": {
37421
+ "type": "integer",
37422
+ "description": "Accepted but not yet used to tailor the answer; reserved for later."
37423
+ }
37424
+ }
37425
+ },
37426
+ "GuidedAskResponse": {
37427
+ "type": "object",
37428
+ "required": [
37429
+ "answer"
37430
+ ],
37431
+ "properties": {
37432
+ "answer": {
37433
+ "type": "string"
37434
+ }
37435
+ }
37436
+ },
37437
+ "TrialSetupIntentResponse": {
37438
+ "type": "object",
37439
+ "required": [
37440
+ "client_secret",
37441
+ "publishable_key"
37442
+ ],
37443
+ "properties": {
37444
+ "client_secret": {
37445
+ "type": "string"
37446
+ },
37447
+ "publishable_key": {
37448
+ "type": "string"
37449
+ }
37450
+ }
37451
+ },
37452
+ "CreateTrialRuntimeRequest": {
37453
+ "type": "object",
37454
+ "required": [
37455
+ "setup_intent_id",
37456
+ "agent_id",
37457
+ "template",
37458
+ "name"
37459
+ ],
37460
+ "properties": {
37461
+ "setup_intent_id": {
37462
+ "type": "string"
37463
+ },
37464
+ "agent_id": {
37465
+ "type": "string",
37466
+ "format": "uuid"
37467
+ },
37468
+ "template": {
37469
+ "type": "string"
37470
+ },
37471
+ "preset": {
37472
+ "type": "string",
37473
+ "description": "Defaults to CreateRuntimeRequest's own default (\"small\") when omitted."
37474
+ },
37475
+ "name": {
37476
+ "type": "string"
37477
+ },
37478
+ "always_on": {
37479
+ "type": "boolean",
37480
+ "default": false,
37481
+ "description": "Keeps the runtime running indefinitely instead of auto-stopping after the\ndefault idle window (maps to `idle_timeout_secs: 0`).\n"
37482
+ },
37483
+ "env_public": {
37484
+ "type": "object",
37485
+ "description": "Non-secret runtime config — in practice just `LLM_PROVIDER`/`LLM_MODEL`\nfrom the guided flow's model-choice step. Rejected if any key looks\nsecret-shaped (same `validate_env_public` the canonical runtime API uses).\n"
37486
+ }
37487
+ }
37488
+ },
37005
37489
  "AgentKeysVaultResponse": {
37006
37490
  "type": "object",
37007
37491
  "properties": {
@@ -49189,6 +49673,132 @@
49189
49673
  "type": "boolean"
49190
49674
  }
49191
49675
  }
49676
+ },
49677
+ "GrowthCountBucket": {
49678
+ "type": "object",
49679
+ "required": [
49680
+ "bucket",
49681
+ "count"
49682
+ ],
49683
+ "properties": {
49684
+ "bucket": {
49685
+ "type": "string",
49686
+ "format": "date-time"
49687
+ },
49688
+ "count": {
49689
+ "type": "integer"
49690
+ }
49691
+ }
49692
+ },
49693
+ "GrowthTimeseriesResponse": {
49694
+ "type": "object",
49695
+ "required": [
49696
+ "vertical",
49697
+ "period",
49698
+ "bucket_unit",
49699
+ "points",
49700
+ "total",
49701
+ "prior_total"
49702
+ ],
49703
+ "properties": {
49704
+ "vertical": {
49705
+ "type": "string"
49706
+ },
49707
+ "period": {
49708
+ "type": "string"
49709
+ },
49710
+ "bucket_unit": {
49711
+ "type": "string",
49712
+ "enum": [
49713
+ "hour",
49714
+ "day",
49715
+ "week"
49716
+ ]
49717
+ },
49718
+ "points": {
49719
+ "type": "array",
49720
+ "items": {
49721
+ "$ref": "#/components/schemas/GrowthCountBucket"
49722
+ }
49723
+ },
49724
+ "total": {
49725
+ "type": "integer"
49726
+ },
49727
+ "prior_total": {
49728
+ "type": "integer"
49729
+ },
49730
+ "delta_pct": {
49731
+ "type": "number",
49732
+ "nullable": true,
49733
+ "description": "Null when both the current and prior totals are 0."
49734
+ },
49735
+ "notes": {
49736
+ "type": "string",
49737
+ "nullable": true,
49738
+ "description": "A known limitation worth surfacing for this vertical (e.g. a source table with no org_id to exclude test-fixture activity from). Null for the clean verticals.\n"
49739
+ }
49740
+ }
49741
+ },
49742
+ "RetentionResponse": {
49743
+ "type": "object",
49744
+ "required": [
49745
+ "window_days",
49746
+ "cohort_orgs",
49747
+ "retained_orgs"
49748
+ ],
49749
+ "properties": {
49750
+ "window_days": {
49751
+ "type": "integer"
49752
+ },
49753
+ "cohort_orgs": {
49754
+ "type": "integer"
49755
+ },
49756
+ "retained_orgs": {
49757
+ "type": "integer"
49758
+ },
49759
+ "retention_pct": {
49760
+ "type": "number",
49761
+ "nullable": true,
49762
+ "description": "Null when there is no cohort yet (platform younger than the window)."
49763
+ }
49764
+ }
49765
+ },
49766
+ "WebSearchResult": {
49767
+ "type": "object",
49768
+ "required": [
49769
+ "title",
49770
+ "url",
49771
+ "snippet"
49772
+ ],
49773
+ "properties": {
49774
+ "title": {
49775
+ "type": "string"
49776
+ },
49777
+ "url": {
49778
+ "type": "string"
49779
+ },
49780
+ "snippet": {
49781
+ "type": "string"
49782
+ }
49783
+ }
49784
+ },
49785
+ "WebSearchResponse": {
49786
+ "type": "object",
49787
+ "required": [
49788
+ "results",
49789
+ "provider"
49790
+ ],
49791
+ "properties": {
49792
+ "results": {
49793
+ "type": "array",
49794
+ "items": {
49795
+ "$ref": "#/components/schemas/WebSearchResult"
49796
+ }
49797
+ },
49798
+ "provider": {
49799
+ "type": "string"
49800
+ }
49801
+ }
49192
49802
  }
49193
49803
  }
49194
49804
  }
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.40"
5
+ version: "0.61.41"
6
6
  description: |
7
7
  Secure secret management for AI agents. Provides vaults, secrets,
8
8
  policy-based access control, agent identity, Intents API,
@@ -142,6 +142,8 @@ tags:
142
142
  description: MFA/passkey/password recovery escape hatch with admin approval
143
143
  - name: Shamir KEK
144
144
  description: Shamir secret-sharing for org-level Key Encryption Keys
145
+ - name: Agent Tools
146
+ description: Utility tools an agent calls directly on its own token (web search, etc.)
145
147
 
146
148
  # =============================================================================
147
149
  # PATHS
@@ -1979,7 +1981,7 @@ paths:
1979
1981
  x-payment-info:
1980
1982
  protocols: [x402]
1981
1983
  pricingMode: fixed
1982
- price: "0.0075"
1984
+ price: "0.0225"
1983
1985
  parameters:
1984
1986
  - $ref: "#/components/parameters/VaultId"
1985
1987
  - $ref: "#/components/parameters/SecretPath"
@@ -2009,7 +2011,7 @@ paths:
2009
2011
  x-payment-info:
2010
2012
  protocols: [x402]
2011
2013
  pricingMode: fixed
2012
- price: "0.0015"
2014
+ price: "0.0045"
2013
2015
  parameters:
2014
2016
  - $ref: "#/components/parameters/VaultId"
2015
2017
  - $ref: "#/components/parameters/SecretPath"
@@ -2734,7 +2736,8 @@ paths:
2734
2736
  mode: paid
2735
2737
  x-payment-info:
2736
2738
  protocols: [x402]
2737
- pricingMode: quote
2739
+ pricingMode: fixed
2740
+ price: "0.225"
2738
2741
  description: |
2739
2742
  Replay protection: send an optional **Idempotency-Key** header (e.g. UUID or opaque string).
2740
2743
  Duplicate requests with the same key within 24 hours return the cached transaction response
@@ -2845,7 +2848,8 @@ paths:
2845
2848
  mode: paid
2846
2849
  x-payment-info:
2847
2850
  protocols: [x402]
2848
- pricingMode: quote
2851
+ pricingMode: fixed
2852
+ price: "0.225"
2849
2853
  parameters:
2850
2854
  - $ref: "#/components/parameters/AgentId"
2851
2855
  requestBody:
@@ -2878,7 +2882,7 @@ paths:
2878
2882
  x-payment-info:
2879
2883
  protocols: [x402]
2880
2884
  pricingMode: fixed
2881
- price: "0.075"
2885
+ price: "0.225"
2882
2886
  parameters:
2883
2887
  - $ref: "#/components/parameters/AgentId"
2884
2888
  requestBody:
@@ -2911,7 +2915,7 @@ paths:
2911
2915
  x-payment-info:
2912
2916
  protocols: [x402]
2913
2917
  pricingMode: fixed
2914
- price: "0.075"
2918
+ price: "0.225"
2915
2919
  parameters:
2916
2920
  - $ref: "#/components/parameters/AgentId"
2917
2921
  requestBody:
@@ -4151,7 +4155,7 @@ paths:
4151
4155
  x-payment-info:
4152
4156
  protocols: [x402]
4153
4157
  pricingMode: fixed
4154
- price: "0.003"
4158
+ price: "0.009"
4155
4159
  parameters:
4156
4160
  - name: secret_id
4157
4161
  in: path
@@ -4188,7 +4192,7 @@ paths:
4188
4192
  x-payment-info:
4189
4193
  protocols: [x402]
4190
4194
  pricingMode: fixed
4191
- price: "0.0015"
4195
+ price: "0.0045"
4192
4196
  parameters:
4193
4197
  - name: share_id
4194
4198
  in: path
@@ -4556,6 +4560,91 @@ paths:
4556
4560
  schema:
4557
4561
  $ref: "#/components/schemas/OnboardingProvisionResponse"
4558
4562
 
4563
+ /v1/onboarding/guided/status:
4564
+ get:
4565
+ tags: [Organization]
4566
+ summary: Guided onboarding eligibility + status
4567
+ description: |
4568
+ Whether this org is in the guided-onboarding rollout cohort, plus the
4569
+ same welcome-bundle progress fields `GET /v1/org/onboarding/status`
4570
+ reports. `eligible` decides whether the dashboard's redirect sends a
4571
+ new, still-unprovisioned user to the guided flow or the existing
4572
+ MCP-connect flow.
4573
+ operationId: getGuidedOnboardingStatus
4574
+ responses:
4575
+ "200":
4576
+ description: Guided onboarding status
4577
+ content:
4578
+ application/json:
4579
+ schema:
4580
+ $ref: "#/components/schemas/GuidedOnboardingStatus"
4581
+
4582
+ /v1/onboarding/guided/ask:
4583
+ post:
4584
+ tags: [Organization]
4585
+ summary: Ask the guided onboarding assistant a question
4586
+ description: |
4587
+ Scoped, one-shot Q&A for the guided wizard's "have a question?" panel.
4588
+ Not tied to an agent (many questions arrive before one exists yet) and
4589
+ not persisted as a conversation. The system prompt is fixed server-side
4590
+ and refuses anything outside vaults/policies/runtimes/billing/channels —
4591
+ never client-suppliable. Billed like any other Shroud LLM call: the
4592
+ caller's own bearer token is forwarded so usage attributes to their org.
4593
+ operationId: guidedOnboardingAsk
4594
+ requestBody:
4595
+ required: true
4596
+ content:
4597
+ application/json:
4598
+ schema:
4599
+ $ref: "#/components/schemas/GuidedAskRequest"
4600
+ responses:
4601
+ "200":
4602
+ description: Assistant's answer
4603
+ content:
4604
+ application/json:
4605
+ schema:
4606
+ $ref: "#/components/schemas/GuidedAskResponse"
4607
+
4608
+ /v1/onboarding/guided/trial/setup-intent:
4609
+ post:
4610
+ tags: [Organization]
4611
+ summary: Start a card-on-file trial runtime setup
4612
+ description: |
4613
+ Creates a Stripe SetupIntent for the org's customer so the guided
4614
+ onboarding wizard can collect a card with Stripe.js — no charge unless
4615
+ the trial runtime is kept past its trial window.
4616
+ operationId: createTrialSetupIntent
4617
+ responses:
4618
+ "200":
4619
+ description: SetupIntent client secret
4620
+ content:
4621
+ application/json:
4622
+ schema:
4623
+ $ref: "#/components/schemas/TrialSetupIntentResponse"
4624
+
4625
+ /v1/onboarding/guided/trial/runtime:
4626
+ post:
4627
+ tags: [Organization]
4628
+ summary: Create a card-gated trial runtime
4629
+ description: |
4630
+ Verifies the given SetupIntent succeeded, then delegates to the same
4631
+ runtime-creation logic `POST /v1/runtimes` uses. Only reachable once
4632
+ the guided onboarding wizard has a confirmed SetupIntent for the org.
4633
+ operationId: createTrialRuntime
4634
+ requestBody:
4635
+ required: true
4636
+ content:
4637
+ application/json:
4638
+ schema:
4639
+ $ref: "#/components/schemas/CreateTrialRuntimeRequest"
4640
+ responses:
4641
+ "201":
4642
+ description: Created runtime
4643
+ content:
4644
+ application/json:
4645
+ schema:
4646
+ $ref: "#/components/schemas/RuntimeResponse"
4647
+
4559
4648
  /v1/org/status:
4560
4649
  get:
4561
4650
  tags: [Organization]
@@ -5115,7 +5204,7 @@ paths:
5115
5204
  x-payment-info:
5116
5205
  protocols: [x402]
5117
5206
  pricingMode: fixed
5118
- price: "0.0008"
5207
+ price: "0.0024"
5119
5208
  parameters:
5120
5209
  - name: resource_id
5121
5210
  in: query
@@ -7797,6 +7886,41 @@ paths:
7797
7886
  "401":
7798
7887
  description: Unauthorized
7799
7888
 
7889
+ /v1/shroud/activity/today:
7890
+ get:
7891
+ tags: [Shroud]
7892
+ summary: An agent's inference spend since 00:00 UTC
7893
+ operationId: getAgentSpendToday
7894
+ description: |
7895
+ What the agent has spent today per the vault's priced activity rows, plus
7896
+ requests and tokens and how many requests Shroud blocked for budget. Shroud
7897
+ syncs its daily-budget counter from this so `daily_budget_usd` holds across
7898
+ Shroud instances and restarts. Callable by the agent itself (its own id) or the
7899
+ platform service key — the same gate as activity ingest.
7900
+ security:
7901
+ - BearerAuth: []
7902
+ parameters:
7903
+ - in: query
7904
+ name: agent_id
7905
+ required: true
7906
+ schema: { type: string, format: uuid }
7907
+ responses:
7908
+ "200":
7909
+ description: Today's spend
7910
+ content:
7911
+ application/json:
7912
+ schema:
7913
+ type: object
7914
+ properties:
7915
+ agent_id: { type: string, format: uuid }
7916
+ day: { type: string, example: "2026-09-21" }
7917
+ cost_usd: { type: number }
7918
+ requests: { type: integer, format: int64 }
7919
+ tokens: { type: integer, format: int64 }
7920
+ blocked_by_budget: { type: integer, format: int64 }
7921
+ "403":
7922
+ $ref: "#/components/responses/Forbidden"
7923
+
7800
7924
  /v1/shroud/threat-summary:
7801
7925
  get:
7802
7926
  tags: [Shroud]
@@ -11595,6 +11719,106 @@ paths:
11595
11719
  "403":
11596
11720
  $ref: "#/components/responses/Forbidden"
11597
11721
 
11722
+ /v1/admin/stats/growth-timeseries:
11723
+ get:
11724
+ tags: [Admin]
11725
+ summary: Time-bucketed usage series for one adoption/usage vertical (admin only)
11726
+ description: >
11727
+ Gap-filled counts (24h → hourly, 7d/30d/90d → daily, 365d → weekly)
11728
+ for one of 15 adoption/usage verticals, plus a period-over-period
11729
+ delta. Backs both the live admin analytics dashboard and the
11730
+ weekly investor report — same source, two surfaces.
11731
+ operationId: adminGrowthTimeseries
11732
+ parameters:
11733
+ - name: vertical
11734
+ in: query
11735
+ required: true
11736
+ schema:
11737
+ type: string
11738
+ enum:
11739
+ - signups_orgs
11740
+ - signups_users
11741
+ - subscriptions_new
11742
+ - subscriptions_churned
11743
+ - shroud_usage
11744
+ - shroud_security
11745
+ - intents_execution
11746
+ - intents_transactions
11747
+ - vault_usage
11748
+ - runtime_usage
11749
+ - memory_usage
11750
+ - automations
11751
+ - embedded_wallets_created
11752
+ - embedded_wallets_used
11753
+ - platform_api
11754
+ - name: period
11755
+ in: query
11756
+ schema:
11757
+ type: string
11758
+ enum: [24h, 7d, 30d, 90d, 365d]
11759
+ default: 30d
11760
+ responses:
11761
+ "200":
11762
+ description: Time-bucketed series for the requested vertical
11763
+ content:
11764
+ application/json:
11765
+ schema:
11766
+ $ref: "#/components/schemas/GrowthTimeseriesResponse"
11767
+ "400":
11768
+ $ref: "#/components/responses/BadRequest"
11769
+ "403":
11770
+ $ref: "#/components/responses/Forbidden"
11771
+
11772
+ /v1/admin/stats/retention:
11773
+ get:
11774
+ tags: [Admin]
11775
+ summary: Logo retention over a trailing window (admin only)
11776
+ description: >
11777
+ Percentage of organizations older than `window_days` that showed
11778
+ any platform activity (usage_events) in the trailing
11779
+ `window_days` — a simple, defensible retention proxy, not a full
11780
+ cohort matrix.
11781
+ operationId: adminRetention
11782
+ parameters:
11783
+ - name: window_days
11784
+ in: query
11785
+ schema:
11786
+ type: integer
11787
+ default: 30
11788
+ minimum: 1
11789
+ maximum: 365
11790
+ responses:
11791
+ "200":
11792
+ description: Retention over the requested window
11793
+ content:
11794
+ application/json:
11795
+ schema:
11796
+ $ref: "#/components/schemas/RetentionResponse"
11797
+ "403":
11798
+ $ref: "#/components/responses/Forbidden"
11799
+
11800
+ /v1/admin/llm-prices:
11801
+ get:
11802
+ tags: [Admin]
11803
+ summary: Global LLM price card (admin only)
11804
+ description: The platform-wide price card with no org-level overrides applied — see `/v1/spend/ai/prices` for the org-resolved view.
11805
+ operationId: adminListLlmPrices
11806
+ responses:
11807
+ "200":
11808
+ description: Prices
11809
+ content:
11810
+ application/json:
11811
+ schema:
11812
+ type: object
11813
+ required: [prices]
11814
+ properties:
11815
+ prices:
11816
+ type: array
11817
+ items:
11818
+ $ref: "#/components/schemas/LlmModelPrice"
11819
+ "403":
11820
+ $ref: "#/components/responses/Forbidden"
11821
+
11598
11822
  /v1/agents/{agent_id}/pay/settings:
11599
11823
  patch:
11600
11824
  tags: [Pay]
@@ -17864,6 +18088,47 @@ paths:
17864
18088
  description: Forbidden, or the plan does not include this
17865
18089
  '404':
17866
18090
  description: Not found
18091
+ /v1/tools/web-search:
18092
+ post:
18093
+ tags: [Agent Tools]
18094
+ summary: Platform-default web search fallback
18095
+ description: >
18096
+ Called on the agent's own token (not a Shroud-internal callback).
18097
+ Used by the runtime `web_search` tool when an agent has no
18098
+ BRAVE_API_KEY/TAVILY_API_KEY/SERP_API_KEY/ONECLAW_WEB_SEARCH_BINDING
18099
+ of its own — proxies to a shared, platform-provided Brave Search
18100
+ key under a hard monthly platform-wide cap.
18101
+ operationId: agentWebSearch
18102
+ requestBody:
18103
+ required: true
18104
+ content:
18105
+ application/json:
18106
+ schema:
18107
+ type: object
18108
+ required: [query]
18109
+ properties:
18110
+ query:
18111
+ type: string
18112
+ maxLength: 500
18113
+ num_results:
18114
+ type: integer
18115
+ default: 5
18116
+ responses:
18117
+ "200":
18118
+ description: Search results
18119
+ content:
18120
+ application/json:
18121
+ schema:
18122
+ $ref: "#/components/schemas/WebSearchResponse"
18123
+ "400":
18124
+ $ref: "#/components/responses/BadRequest"
18125
+ "403":
18126
+ description: Called on a non-agent token
18127
+ content:
18128
+ application/json:
18129
+ schema:
18130
+ $ref: "#/components/schemas/ProblemDetails"
18131
+
17867
18132
  /v1/memory/shared-namespaces:
17868
18133
  get:
17869
18134
  tags: [Memory]
@@ -24016,6 +24281,13 @@ components:
24016
24281
  if the org has one. Same field and meaning as on `POST /v1/agents`:
24017
24282
  the first call returns 202 with the approval to collect, and the
24018
24283
  retry passes its id here.
24284
+ guided:
24285
+ type: boolean
24286
+ default: false
24287
+ description: |
24288
+ Seeds `getting-started/**` instead of `examples/**` in the shared
24289
+ `default` vault — the guided onboarding wizard's own sample content,
24290
+ kept distinguishable from the MCP-connect developer flow's.
24019
24291
 
24020
24292
  OnboardingProvisionResponse:
24021
24293
  type: object
@@ -24034,6 +24306,75 @@ components:
24034
24306
  verify_prompt:
24035
24307
  type: string
24036
24308
 
24309
+ GuidedOnboardingStatus:
24310
+ allOf:
24311
+ - type: object
24312
+ required: [eligible]
24313
+ properties:
24314
+ eligible:
24315
+ type: boolean
24316
+ description: |
24317
+ Whether this org is in the guided-onboarding rollout cohort —
24318
+ decides whether the dashboard redirects a new user here or to
24319
+ the MCP-connect flow.
24320
+ - $ref: "#/components/schemas/OnboardingStatus"
24321
+
24322
+ GuidedAskRequest:
24323
+ type: object
24324
+ required: [question]
24325
+ properties:
24326
+ question:
24327
+ type: string
24328
+ maxLength: 500
24329
+ step:
24330
+ type: integer
24331
+ description: Accepted but not yet used to tailor the answer; reserved for later.
24332
+
24333
+ GuidedAskResponse:
24334
+ type: object
24335
+ required: [answer]
24336
+ properties:
24337
+ answer:
24338
+ type: string
24339
+
24340
+ TrialSetupIntentResponse:
24341
+ type: object
24342
+ required: [client_secret, publishable_key]
24343
+ properties:
24344
+ client_secret:
24345
+ type: string
24346
+ publishable_key:
24347
+ type: string
24348
+
24349
+ CreateTrialRuntimeRequest:
24350
+ type: object
24351
+ required: [setup_intent_id, agent_id, template, name]
24352
+ properties:
24353
+ setup_intent_id:
24354
+ type: string
24355
+ agent_id:
24356
+ type: string
24357
+ format: uuid
24358
+ template:
24359
+ type: string
24360
+ preset:
24361
+ type: string
24362
+ description: Defaults to CreateRuntimeRequest's own default ("small") when omitted.
24363
+ name:
24364
+ type: string
24365
+ always_on:
24366
+ type: boolean
24367
+ default: false
24368
+ description: |
24369
+ Keeps the runtime running indefinitely instead of auto-stopping after the
24370
+ default idle window (maps to `idle_timeout_secs: 0`).
24371
+ env_public:
24372
+ type: object
24373
+ description: |
24374
+ Non-secret runtime config — in practice just `LLM_PROVIDER`/`LLM_MODEL`
24375
+ from the guided flow's model-choice step. Rejected if any key looks
24376
+ secret-shaped (same `validate_env_public` the canonical runtime API uses).
24377
+
24037
24378
  AgentKeysVaultResponse:
24038
24379
  type: object
24039
24380
  properties:
@@ -31869,3 +32210,81 @@ components:
31869
32210
  properties:
31870
32211
  valid:
31871
32212
  type: boolean
32213
+
32214
+ GrowthCountBucket:
32215
+ type: object
32216
+ required: [bucket, count]
32217
+ properties:
32218
+ bucket:
32219
+ type: string
32220
+ format: date-time
32221
+ count:
32222
+ type: integer
32223
+
32224
+ GrowthTimeseriesResponse:
32225
+ type: object
32226
+ required: [vertical, period, bucket_unit, points, total, prior_total]
32227
+ properties:
32228
+ vertical:
32229
+ type: string
32230
+ period:
32231
+ type: string
32232
+ bucket_unit:
32233
+ type: string
32234
+ enum: [hour, day, week]
32235
+ points:
32236
+ type: array
32237
+ items:
32238
+ $ref: "#/components/schemas/GrowthCountBucket"
32239
+ total:
32240
+ type: integer
32241
+ prior_total:
32242
+ type: integer
32243
+ delta_pct:
32244
+ type: number
32245
+ nullable: true
32246
+ description: Null when both the current and prior totals are 0.
32247
+ notes:
32248
+ type: string
32249
+ nullable: true
32250
+ description: >
32251
+ A known limitation worth surfacing for this vertical (e.g.
32252
+ a source table with no org_id to exclude test-fixture
32253
+ activity from). Null for the clean verticals.
32254
+
32255
+ RetentionResponse:
32256
+ type: object
32257
+ required: [window_days, cohort_orgs, retained_orgs]
32258
+ properties:
32259
+ window_days:
32260
+ type: integer
32261
+ cohort_orgs:
32262
+ type: integer
32263
+ retained_orgs:
32264
+ type: integer
32265
+ retention_pct:
32266
+ type: number
32267
+ nullable: true
32268
+ description: Null when there is no cohort yet (platform younger than the window).
32269
+
32270
+ WebSearchResult:
32271
+ type: object
32272
+ required: [title, url, snippet]
32273
+ properties:
32274
+ title:
32275
+ type: string
32276
+ url:
32277
+ type: string
32278
+ snippet:
32279
+ type: string
32280
+
32281
+ WebSearchResponse:
32282
+ type: object
32283
+ required: [results, provider]
32284
+ properties:
32285
+ results:
32286
+ type: array
32287
+ items:
32288
+ $ref: "#/components/schemas/WebSearchResult"
32289
+ provider:
32290
+ type: string
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1claw/openapi-spec",
3
- "version": "0.61.40",
3
+ "version": "0.61.41",
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": {