@1claw/openapi-spec 0.61.40 → 0.61.42

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 +2359 -1074
  2. package/openapi.yaml +801 -701
  3. package/package.json +1 -1
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.42"
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
@@ -812,8 +814,7 @@ paths:
812
814
  created_at:
813
815
  type: string
814
816
  prf_supported:
815
- type: boolean
816
- nullable: true
817
+ type: [boolean, "null"]
817
818
  description: |
818
819
  `true` — can hold a wallet share (WebAuthn PRF).
819
820
  `false` — cannot. `null` — registered before this
@@ -1979,7 +1980,7 @@ paths:
1979
1980
  x-payment-info:
1980
1981
  protocols: [x402]
1981
1982
  pricingMode: fixed
1982
- price: "0.0075"
1983
+ price: "0.0225"
1983
1984
  parameters:
1984
1985
  - $ref: "#/components/parameters/VaultId"
1985
1986
  - $ref: "#/components/parameters/SecretPath"
@@ -2009,7 +2010,7 @@ paths:
2009
2010
  x-payment-info:
2010
2011
  protocols: [x402]
2011
2012
  pricingMode: fixed
2012
- price: "0.0015"
2013
+ price: "0.0045"
2013
2014
  parameters:
2014
2015
  - $ref: "#/components/parameters/VaultId"
2015
2016
  - $ref: "#/components/parameters/SecretPath"
@@ -2734,7 +2735,8 @@ paths:
2734
2735
  mode: paid
2735
2736
  x-payment-info:
2736
2737
  protocols: [x402]
2737
- pricingMode: quote
2738
+ pricingMode: fixed
2739
+ price: "0.225"
2738
2740
  description: |
2739
2741
  Replay protection: send an optional **Idempotency-Key** header (e.g. UUID or opaque string).
2740
2742
  Duplicate requests with the same key within 24 hours return the cached transaction response
@@ -2845,7 +2847,8 @@ paths:
2845
2847
  mode: paid
2846
2848
  x-payment-info:
2847
2849
  protocols: [x402]
2848
- pricingMode: quote
2850
+ pricingMode: fixed
2851
+ price: "0.225"
2849
2852
  parameters:
2850
2853
  - $ref: "#/components/parameters/AgentId"
2851
2854
  requestBody:
@@ -2878,7 +2881,7 @@ paths:
2878
2881
  x-payment-info:
2879
2882
  protocols: [x402]
2880
2883
  pricingMode: fixed
2881
- price: "0.075"
2884
+ price: "0.225"
2882
2885
  parameters:
2883
2886
  - $ref: "#/components/parameters/AgentId"
2884
2887
  requestBody:
@@ -2911,7 +2914,7 @@ paths:
2911
2914
  x-payment-info:
2912
2915
  protocols: [x402]
2913
2916
  pricingMode: fixed
2914
- price: "0.075"
2917
+ price: "0.225"
2915
2918
  parameters:
2916
2919
  - $ref: "#/components/parameters/AgentId"
2917
2920
  requestBody:
@@ -4023,7 +4026,7 @@ paths:
4023
4026
  required: [tier]
4024
4027
  properties:
4025
4028
  tier: { type: string, enum: [unverified, platform_reviewed, identity_verified, enterprise] }
4026
- notes: { type: string, nullable: true, description: Internal review notes, never public }
4029
+ notes: { type: [string, "null"], description: 'Internal review notes, never public' }
4027
4030
  responses:
4028
4031
  '200':
4029
4032
  description: Tier set
@@ -4151,7 +4154,7 @@ paths:
4151
4154
  x-payment-info:
4152
4155
  protocols: [x402]
4153
4156
  pricingMode: fixed
4154
- price: "0.003"
4157
+ price: "0.009"
4155
4158
  parameters:
4156
4159
  - name: secret_id
4157
4160
  in: path
@@ -4188,7 +4191,7 @@ paths:
4188
4191
  x-payment-info:
4189
4192
  protocols: [x402]
4190
4193
  pricingMode: fixed
4191
- price: "0.0015"
4194
+ price: "0.0045"
4192
4195
  parameters:
4193
4196
  - name: share_id
4194
4197
  in: path
@@ -4556,6 +4559,91 @@ paths:
4556
4559
  schema:
4557
4560
  $ref: "#/components/schemas/OnboardingProvisionResponse"
4558
4561
 
4562
+ /v1/onboarding/guided/status:
4563
+ get:
4564
+ tags: [Organization]
4565
+ summary: Guided onboarding eligibility + status
4566
+ description: |
4567
+ Whether this org is in the guided-onboarding rollout cohort, plus the
4568
+ same welcome-bundle progress fields `GET /v1/org/onboarding/status`
4569
+ reports. `eligible` decides whether the dashboard's redirect sends a
4570
+ new, still-unprovisioned user to the guided flow or the existing
4571
+ MCP-connect flow.
4572
+ operationId: getGuidedOnboardingStatus
4573
+ responses:
4574
+ "200":
4575
+ description: Guided onboarding status
4576
+ content:
4577
+ application/json:
4578
+ schema:
4579
+ $ref: "#/components/schemas/GuidedOnboardingStatus"
4580
+
4581
+ /v1/onboarding/guided/ask:
4582
+ post:
4583
+ tags: [Organization]
4584
+ summary: Ask the guided onboarding assistant a question
4585
+ description: |
4586
+ Scoped, one-shot Q&A for the guided wizard's "have a question?" panel.
4587
+ Not tied to an agent (many questions arrive before one exists yet) and
4588
+ not persisted as a conversation. The system prompt is fixed server-side
4589
+ and refuses anything outside vaults/policies/runtimes/billing/channels —
4590
+ never client-suppliable. Billed like any other Shroud LLM call: the
4591
+ caller's own bearer token is forwarded so usage attributes to their org.
4592
+ operationId: guidedOnboardingAsk
4593
+ requestBody:
4594
+ required: true
4595
+ content:
4596
+ application/json:
4597
+ schema:
4598
+ $ref: "#/components/schemas/GuidedAskRequest"
4599
+ responses:
4600
+ "200":
4601
+ description: Assistant's answer
4602
+ content:
4603
+ application/json:
4604
+ schema:
4605
+ $ref: "#/components/schemas/GuidedAskResponse"
4606
+
4607
+ /v1/onboarding/guided/trial/setup-intent:
4608
+ post:
4609
+ tags: [Organization]
4610
+ summary: Start a card-on-file trial runtime setup
4611
+ description: |
4612
+ Creates a Stripe SetupIntent for the org's customer so the guided
4613
+ onboarding wizard can collect a card with Stripe.js — no charge unless
4614
+ the trial runtime is kept past its trial window.
4615
+ operationId: createTrialSetupIntent
4616
+ responses:
4617
+ "200":
4618
+ description: SetupIntent client secret
4619
+ content:
4620
+ application/json:
4621
+ schema:
4622
+ $ref: "#/components/schemas/TrialSetupIntentResponse"
4623
+
4624
+ /v1/onboarding/guided/trial/runtime:
4625
+ post:
4626
+ tags: [Organization]
4627
+ summary: Create a card-gated trial runtime
4628
+ description: |
4629
+ Verifies the given SetupIntent succeeded, then delegates to the same
4630
+ runtime-creation logic `POST /v1/runtimes` uses. Only reachable once
4631
+ the guided onboarding wizard has a confirmed SetupIntent for the org.
4632
+ operationId: createTrialRuntime
4633
+ requestBody:
4634
+ required: true
4635
+ content:
4636
+ application/json:
4637
+ schema:
4638
+ $ref: "#/components/schemas/CreateTrialRuntimeRequest"
4639
+ responses:
4640
+ "201":
4641
+ description: Created runtime
4642
+ content:
4643
+ application/json:
4644
+ schema:
4645
+ $ref: "#/components/schemas/RuntimeResponse"
4646
+
4559
4647
  /v1/org/status:
4560
4648
  get:
4561
4649
  tags: [Organization]
@@ -4578,9 +4666,8 @@ paths:
4578
4666
  type: string
4579
4667
  enum: [active, frozen]
4580
4668
  frozen_at:
4581
- type: string
4669
+ type: [string, "null"]
4582
4670
  format: date-time
4583
- nullable: true
4584
4671
  "403":
4585
4672
  description: Forbidden
4586
4673
 
@@ -4798,22 +4885,6 @@ paths:
4798
4885
  "404":
4799
4886
  $ref: "#/components/responses/NotFound"
4800
4887
 
4801
- /v1/org/env-vars/{id}:
4802
- delete:
4803
- tags: [Organization]
4804
- summary: Delete org shared environment variable
4805
- operationId: deleteOrgEnvVar
4806
- parameters:
4807
- - name: id
4808
- in: path
4809
- required: true
4810
- schema:
4811
- type: string
4812
- format: uuid
4813
- responses:
4814
- "204":
4815
- description: Deleted
4816
-
4817
4888
  /v1/org/env-vars/{id}/link:
4818
4889
  post:
4819
4890
  tags: [Organization]
@@ -5115,7 +5186,7 @@ paths:
5115
5186
  x-payment-info:
5116
5187
  protocols: [x402]
5117
5188
  pricingMode: fixed
5118
- price: "0.0008"
5189
+ price: "0.0024"
5119
5190
  parameters:
5120
5191
  - name: resource_id
5121
5192
  in: query
@@ -6165,7 +6236,7 @@ paths:
6165
6236
  required: [to, value]
6166
6237
  properties:
6167
6238
  to: { type: string }
6168
- value: { type: string, description: Major units, e.g. "0.5". }
6239
+ value: { type: string, description: 'Major units, e.g. "0.5".' }
6169
6240
  memo: { type: string }
6170
6241
  responses:
6171
6242
  "200":
@@ -6624,7 +6695,7 @@ paths:
6624
6695
  properties:
6625
6696
  to: { type: string }
6626
6697
  value_wei: { type: string }
6627
- data: { type: string, description: Hex calldata, optional. }
6698
+ data: { type: string, description: 'Hex calldata, optional.' }
6628
6699
  responses:
6629
6700
  "200":
6630
6701
  description: What to sign
@@ -6697,7 +6768,7 @@ paths:
6697
6768
  safe_address: { type: string }
6698
6769
  chain: { type: string }
6699
6770
  safe_tx_hash: { type: string }
6700
- deploy_tx_hash: { type: string, nullable: true }
6771
+ deploy_tx_hash: { type: [string, "null"] }
6701
6772
  tx_hash: { type: string }
6702
6773
  status: { type: string }
6703
6774
  "400":
@@ -6764,7 +6835,7 @@ paths:
6764
6835
  properties:
6765
6836
  agent_id: { type: string, format: uuid }
6766
6837
  token: { type: string, description: ERC-20 contract; omit for the native token. }
6767
- allowance_amount: { type: string, description: Base units, decimal string, ≤ 2^96-1. }
6838
+ allowance_amount: { type: string, description: 'Base units, decimal string, ≤ 2^96-1.' }
6768
6839
  reset_time_min: { type: integer, default: 1440, description: Reset period in minutes. }
6769
6840
  responses:
6770
6841
  "200":
@@ -6849,7 +6920,7 @@ paths:
6849
6920
  required: [to, amount]
6850
6921
  properties:
6851
6922
  to: { type: string }
6852
- amount: { type: string, description: Base units, decimal string. }
6923
+ amount: { type: string, description: 'Base units, decimal string.' }
6853
6924
  token: { type: string, description: ERC-20 contract; omit for the native token. }
6854
6925
  responses:
6855
6926
  "200":
@@ -7259,9 +7330,9 @@ paths:
7259
7330
  type: object
7260
7331
  properties:
7261
7332
  policy:
7262
- nullable: true
7263
- allOf:
7333
+ oneOf:
7264
7334
  - $ref: "#/components/schemas/SpendPolicyResponse"
7335
+ - type: "null"
7265
7336
  "401":
7266
7337
  $ref: "#/components/responses/Unauthorized"
7267
7338
 
@@ -7797,6 +7868,41 @@ paths:
7797
7868
  "401":
7798
7869
  description: Unauthorized
7799
7870
 
7871
+ /v1/shroud/activity/today:
7872
+ get:
7873
+ tags: [Shroud]
7874
+ summary: An agent's inference spend since 00:00 UTC
7875
+ operationId: getAgentSpendToday
7876
+ description: |
7877
+ What the agent has spent today per the vault's priced activity rows, plus
7878
+ requests and tokens and how many requests Shroud blocked for budget. Shroud
7879
+ syncs its daily-budget counter from this so `daily_budget_usd` holds across
7880
+ Shroud instances and restarts. Callable by the agent itself (its own id) or the
7881
+ platform service key — the same gate as activity ingest.
7882
+ security:
7883
+ - BearerAuth: []
7884
+ parameters:
7885
+ - in: query
7886
+ name: agent_id
7887
+ required: true
7888
+ schema: { type: string, format: uuid }
7889
+ responses:
7890
+ "200":
7891
+ description: Today's spend
7892
+ content:
7893
+ application/json:
7894
+ schema:
7895
+ type: object
7896
+ properties:
7897
+ agent_id: { type: string, format: uuid }
7898
+ day: { type: string, example: "2026-09-21" }
7899
+ cost_usd: { type: number }
7900
+ requests: { type: integer, format: int64 }
7901
+ tokens: { type: integer, format: int64 }
7902
+ blocked_by_budget: { type: integer, format: int64 }
7903
+ "403":
7904
+ $ref: "#/components/responses/Forbidden"
7905
+
7800
7906
  /v1/shroud/threat-summary:
7801
7907
  get:
7802
7908
  tags: [Shroud]
@@ -8003,9 +8109,8 @@ paths:
8003
8109
  type: object
8004
8110
  properties:
8005
8111
  api_key_expires_at:
8006
- type: string
8112
+ type: [string, "null"]
8007
8113
  format: date-time
8008
- nullable: true
8009
8114
  description: Optional expiration for the new key.
8010
8115
  responses:
8011
8116
  "200":
@@ -8021,9 +8126,8 @@ paths:
8021
8126
  api_key_prefix:
8022
8127
  type: string
8023
8128
  api_key_expires_at:
8024
- type: string
8129
+ type: [string, "null"]
8025
8130
  format: date-time
8026
- nullable: true
8027
8131
  "403":
8028
8132
  description: Only human users can rotate platform keys
8029
8133
 
@@ -8225,8 +8329,7 @@ paths:
8225
8329
  name:
8226
8330
  type: string
8227
8331
  description:
8228
- type: string
8229
- nullable: true
8332
+ type: [string, "null"]
8230
8333
  spec:
8231
8334
  type: object
8232
8335
  additionalProperties: true
@@ -8951,9 +9054,8 @@ paths:
8951
9054
  type: string
8952
9055
  format: date-time
8953
9056
  details:
8954
- type: object
9057
+ type: [object, "null"]
8955
9058
  additionalProperties: true
8956
- nullable: true
8957
9059
  "404":
8958
9060
  $ref: "#/components/responses/NotFound"
8959
9061
 
@@ -11436,8 +11538,9 @@ paths:
11436
11538
  type: object
11437
11539
  properties:
11438
11540
  verdict:
11439
- $ref: "#/components/schemas/RiskVerdict"
11440
- nullable: true
11541
+ oneOf:
11542
+ - $ref: "#/components/schemas/RiskVerdict"
11543
+ - type: "null"
11441
11544
  "401":
11442
11545
  $ref: "#/components/responses/Unauthorized"
11443
11546
  "404":
@@ -11595,6 +11698,106 @@ paths:
11595
11698
  "403":
11596
11699
  $ref: "#/components/responses/Forbidden"
11597
11700
 
11701
+ /v1/admin/stats/growth-timeseries:
11702
+ get:
11703
+ tags: [Admin]
11704
+ summary: Time-bucketed usage series for one adoption/usage vertical (admin only)
11705
+ description: >
11706
+ Gap-filled counts (24h → hourly, 7d/30d/90d → daily, 365d → weekly)
11707
+ for one of 15 adoption/usage verticals, plus a period-over-period
11708
+ delta. Backs both the live admin analytics dashboard and the
11709
+ weekly investor report — same source, two surfaces.
11710
+ operationId: adminGrowthTimeseries
11711
+ parameters:
11712
+ - name: vertical
11713
+ in: query
11714
+ required: true
11715
+ schema:
11716
+ type: string
11717
+ enum:
11718
+ - signups_orgs
11719
+ - signups_users
11720
+ - subscriptions_new
11721
+ - subscriptions_churned
11722
+ - shroud_usage
11723
+ - shroud_security
11724
+ - intents_execution
11725
+ - intents_transactions
11726
+ - vault_usage
11727
+ - runtime_usage
11728
+ - memory_usage
11729
+ - automations
11730
+ - embedded_wallets_created
11731
+ - embedded_wallets_used
11732
+ - platform_api
11733
+ - name: period
11734
+ in: query
11735
+ schema:
11736
+ type: string
11737
+ enum: [24h, 7d, 30d, 90d, 365d]
11738
+ default: 30d
11739
+ responses:
11740
+ "200":
11741
+ description: Time-bucketed series for the requested vertical
11742
+ content:
11743
+ application/json:
11744
+ schema:
11745
+ $ref: "#/components/schemas/GrowthTimeseriesResponse"
11746
+ "400":
11747
+ $ref: "#/components/responses/BadRequest"
11748
+ "403":
11749
+ $ref: "#/components/responses/Forbidden"
11750
+
11751
+ /v1/admin/stats/retention:
11752
+ get:
11753
+ tags: [Admin]
11754
+ summary: Logo retention over a trailing window (admin only)
11755
+ description: >
11756
+ Percentage of organizations older than `window_days` that showed
11757
+ any platform activity (usage_events) in the trailing
11758
+ `window_days` — a simple, defensible retention proxy, not a full
11759
+ cohort matrix.
11760
+ operationId: adminRetention
11761
+ parameters:
11762
+ - name: window_days
11763
+ in: query
11764
+ schema:
11765
+ type: integer
11766
+ default: 30
11767
+ minimum: 1
11768
+ maximum: 365
11769
+ responses:
11770
+ "200":
11771
+ description: Retention over the requested window
11772
+ content:
11773
+ application/json:
11774
+ schema:
11775
+ $ref: "#/components/schemas/RetentionResponse"
11776
+ "403":
11777
+ $ref: "#/components/responses/Forbidden"
11778
+
11779
+ /v1/admin/llm-prices:
11780
+ get:
11781
+ tags: [Admin]
11782
+ summary: Global LLM price card (admin only)
11783
+ description: The platform-wide price card with no org-level overrides applied — see `/v1/spend/ai/prices` for the org-resolved view.
11784
+ operationId: adminListLlmPrices
11785
+ responses:
11786
+ "200":
11787
+ description: Prices
11788
+ content:
11789
+ application/json:
11790
+ schema:
11791
+ type: object
11792
+ required: [prices]
11793
+ properties:
11794
+ prices:
11795
+ type: array
11796
+ items:
11797
+ $ref: "#/components/schemas/LlmModelPrice"
11798
+ "403":
11799
+ $ref: "#/components/responses/Forbidden"
11800
+
11598
11801
  /v1/agents/{agent_id}/pay/settings:
11599
11802
  patch:
11600
11803
  tags: [Pay]
@@ -11647,7 +11850,7 @@ paths:
11647
11850
  application/json:
11648
11851
  schema:
11649
11852
  $ref: "#/components/schemas/PayPrepareResponse"
11650
- "400": { description: Not a usable 402 challenge, or a non-USDC asset }
11853
+ "400": { description: 'Not a usable 402 challenge, or a non-USDC asset' }
11651
11854
  "403": { description: pay is not enabled for this agent }
11652
11855
  /v1/agents/{agent_id}/pay/sign:
11653
11856
  post:
@@ -11682,7 +11885,7 @@ paths:
11682
11885
  application/json:
11683
11886
  schema:
11684
11887
  $ref: "#/components/schemas/PaySignResponse"
11685
- "403": { description: Policy refused, or the required authorization was absent }
11888
+ "403": { description: 'Policy refused, or the required authorization was absent' }
11686
11889
  "409":
11687
11890
  description: >
11688
11891
  ChallengeExpired. Re-fetch the resource for a fresh 402 and
@@ -11715,9 +11918,8 @@ paths:
11715
11918
  cap_usd: { type: string }
11716
11919
  ttl_secs: { type: integer }
11717
11920
  allowed_paytos:
11718
- type: array
11921
+ type: [array, "null"]
11719
11922
  items: { type: string }
11720
- nullable: true
11721
11923
  responses:
11722
11924
  '200':
11723
11925
  description: The digest to assert over
@@ -11731,7 +11933,7 @@ paths:
11731
11933
  action: { type: string, enum: [x402_grant] }
11732
11934
  expires_in_secs: { type: integer }
11733
11935
  '400': { description: Invalid terms }
11734
- '403': { description: Not a human caller, grant mode disabled, or over the agent's maximum }
11936
+ '403': { description: 'Not a human caller, grant mode disabled, or over the agent''s maximum' }
11735
11937
  /v1/agents/{agent_id}/pay/grants:
11736
11938
  post:
11737
11939
  tags: [Pay]
@@ -11757,7 +11959,7 @@ paths:
11757
11959
  $ref: "#/components/schemas/CreatePayGrantRequest"
11758
11960
  responses:
11759
11961
  "200": { description: Grant created }
11760
- "403": { description: Not a human caller, grant mode disabled, or terms exceed the agent's maximum }
11962
+ "403": { description: 'Not a human caller, grant mode disabled, or terms exceed the agent''s maximum' }
11761
11963
  /v1/agents/{agent_id}/pay/{payment_id}/result:
11762
11964
  post:
11763
11965
  tags: [Pay]
@@ -11811,8 +12013,8 @@ paths:
11811
12013
  required: true
11812
12014
  schema: { type: string, format: uuid }
11813
12015
  responses:
11814
- "200": { description: Quote and status, rendered from the stored preimage }
11815
- "403": { description: Not a human caller, or the session was raised for someone else }
12016
+ "200": { description: 'Quote and status, rendered from the stored preimage' }
12017
+ "403": { description: 'Not a human caller, or the session was raised for someone else' }
11816
12018
  /v1/pay-sessions/{session_id}/authorize:
11817
12019
  post:
11818
12020
  tags: [Pay]
@@ -11852,7 +12054,7 @@ paths:
11852
12054
  schema: { type: string, format: uuid }
11853
12055
  responses:
11854
12056
  "200": { description: Revoked }
11855
- "404": { description: Not found, or already revoked }
12057
+ "404": { description: 'Not found, or already revoked' }
11856
12058
  /v1/agents/{agent_id}/cards/order:
11857
12059
  post:
11858
12060
  tags: [Payment Cards]
@@ -13772,11 +13974,9 @@ paths:
13772
13974
  success:
13773
13975
  type: boolean
13774
13976
  message:
13775
- type: string
13776
- nullable: true
13977
+ type: [string, "null"]
13777
13978
  error:
13778
- type: string
13779
- nullable: true
13979
+ type: [string, "null"]
13780
13980
  "401":
13781
13981
  $ref: "#/components/responses/Unauthorized"
13782
13982
  "404":
@@ -14060,7 +14260,7 @@ paths:
14060
14260
  fingerprint_bucket: { type: string, example: "refund.create|0-10|known|a@b.co" }
14061
14261
  consecutive_approvals: { type: integer }
14062
14262
  total_requests: { type: integer }
14063
- would_write_rule: { type: object, nullable: true }
14263
+ would_write_rule: { type: [object, "null"] }
14064
14264
  blocked:
14065
14265
  type: string
14066
14266
  description: Present when a bound prevents promotion, saying which.
@@ -14557,7 +14757,7 @@ paths:
14557
14757
  properties:
14558
14758
  tier: { type: string, enum: [unverified, platform_reviewed, identity_verified, enterprise] }
14559
14759
  install_count: { type: integer }
14560
- avg_rating: { type: number, nullable: true }
14760
+ avg_rating: { type: [number, "null"] }
14561
14761
  review_count: { type: integer }
14562
14762
  badges: { type: array, items: { type: string } }
14563
14763
  flagged_for_review: { type: boolean }
@@ -14712,7 +14912,7 @@ paths:
14712
14912
  properties:
14713
14913
  fact_key: { type: string }
14714
14914
  fact_value: { type: object }
14715
- confidence: { type: string, nullable: true }
14915
+ confidence: { type: [string, "null"] }
14716
14916
  why_we_believe_this: { type: array, items: { type: object } }
14717
14917
  corrected_by_a_human: { type: boolean }
14718
14918
  raw_observations: { type: array, items: { type: object } }
@@ -15016,8 +15216,7 @@ paths:
15016
15216
  required: [reasoning, suggest_auto]
15017
15217
  properties:
15018
15218
  likelihood:
15019
- type: number
15020
- nullable: true
15219
+ type: [number, "null"]
15021
15220
  description: Absent when there is no comparable history.
15022
15221
  reasoning: { type: string }
15023
15222
  suggest_auto:
@@ -15509,8 +15708,7 @@ paths:
15509
15708
  binding_name: { type: string }
15510
15709
  preset_slug: { type: string }
15511
15710
  authorization_url:
15512
- type: string
15513
- nullable: true
15711
+ type: [string, "null"]
15514
15712
  description: Absent for connectors that use a pasted API key rather than OAuth.
15515
15713
  next_step:
15516
15714
  type: string
@@ -17864,6 +18062,47 @@ paths:
17864
18062
  description: Forbidden, or the plan does not include this
17865
18063
  '404':
17866
18064
  description: Not found
18065
+ /v1/tools/web-search:
18066
+ post:
18067
+ tags: [Agent Tools]
18068
+ summary: Platform-default web search fallback
18069
+ description: >
18070
+ Called on the agent's own token (not a Shroud-internal callback).
18071
+ Used by the runtime `web_search` tool when an agent has no
18072
+ BRAVE_API_KEY/TAVILY_API_KEY/SERP_API_KEY/ONECLAW_WEB_SEARCH_BINDING
18073
+ of its own — proxies to a shared, platform-provided Brave Search
18074
+ key under a hard monthly platform-wide cap.
18075
+ operationId: agentWebSearch
18076
+ requestBody:
18077
+ required: true
18078
+ content:
18079
+ application/json:
18080
+ schema:
18081
+ type: object
18082
+ required: [query]
18083
+ properties:
18084
+ query:
18085
+ type: string
18086
+ maxLength: 500
18087
+ num_results:
18088
+ type: integer
18089
+ default: 5
18090
+ responses:
18091
+ "200":
18092
+ description: Search results
18093
+ content:
18094
+ application/json:
18095
+ schema:
18096
+ $ref: "#/components/schemas/WebSearchResponse"
18097
+ "400":
18098
+ $ref: "#/components/responses/BadRequest"
18099
+ "403":
18100
+ description: Called on a non-agent token
18101
+ content:
18102
+ application/json:
18103
+ schema:
18104
+ $ref: "#/components/schemas/ProblemDetails"
18105
+
17867
18106
  /v1/memory/shared-namespaces:
17868
18107
  get:
17869
18108
  tags: [Memory]
@@ -18755,8 +18994,7 @@ paths:
18755
18994
  content:
18756
18995
  application/json:
18757
18996
  schema:
18758
- nullable: true
18759
- type: object
18997
+ type: [object, "null"]
18760
18998
  properties:
18761
18999
  enabled: { type: boolean }
18762
19000
  endpoint: { type: string }
@@ -18810,7 +19048,7 @@ paths:
18810
19048
  responses:
18811
19049
  '200':
18812
19050
  description: The updated config, header names only
18813
- '400': { description: Endpoint refused (scheme, credentials, private or unresolvable host), reserved header, or enabling with no endpoint }
19051
+ '400': { description: 'Endpoint refused (scheme, credentials, private or unresolvable host), reserved header, or enabling with no endpoint' }
18814
19052
  '401': { description: Unauthenticated }
18815
19053
  '402': { description: Requires the Team plan or higher }
18816
19054
  '403': { description: Not an owner or admin }
@@ -18835,7 +19073,7 @@ paths:
18835
19073
  endpoint: { type: string }
18836
19074
  status: { type: integer }
18837
19075
  ok: { type: boolean }
18838
- '400': { description: Not configured, or the send failed }
19076
+ '400': { description: 'Not configured, or the send failed' }
18839
19077
  '401': { description: Unauthenticated }
18840
19078
  '402': { description: Requires the Team plan or higher }
18841
19079
  '403': { description: Not an owner or admin }
@@ -18900,10 +19138,9 @@ paths:
18900
19138
  transactions: { type: integer }
18901
19139
  llm_calls: { type: integer }
18902
19140
  latency_p50_ms:
18903
- type: number
18904
- nullable: true
19141
+ type: [number, "null"]
18905
19142
  description: Null when nothing in the window recorded a duration.
18906
- latency_p95_ms: { type: number, nullable: true }
19143
+ latency_p95_ms: { type: [number, "null"] }
18907
19144
  total_executions: { type: integer }
18908
19145
  total_denials: { type: integer }
18909
19146
  '400':
@@ -18948,19 +19185,19 @@ paths:
18948
19185
  required: [agent_id, shadow, components, history, recent]
18949
19186
  properties:
18950
19187
  agent_id: { type: string, format: uuid }
18951
- score: { type: integer, minimum: 0, maximum: 100, nullable: true }
19188
+ score: { type: [integer, "null"], minimum: 0, maximum: 100 }
18952
19189
  shadow: { type: boolean, description: "True while the engine is recommend-only or the agent is unscored." }
18953
- updated_at: { type: string, format: date-time, nullable: true }
19190
+ updated_at: { type: [string, "null"], format: date-time }
18954
19191
  components:
18955
19192
  type: object
18956
19193
  description: "0-100 per component; null means no source in this deployment."
18957
19194
  properties:
18958
- denial_rate: { type: integer, nullable: true }
18959
- threat_hits: { type: integer, nullable: true }
18960
- egress_blocks: { type: integer, nullable: true }
18961
- spend_velocity: { type: integer, nullable: true }
18962
- off_hours: { type: integer, nullable: true }
18963
- consensus_bypass: { type: integer, nullable: true }
19195
+ denial_rate: { type: [integer, "null"] }
19196
+ threat_hits: { type: [integer, "null"] }
19197
+ egress_blocks: { type: [integer, "null"] }
19198
+ spend_velocity: { type: [integer, "null"] }
19199
+ off_hours: { type: [integer, "null"] }
19200
+ consensus_bypass: { type: [integer, "null"] }
18964
19201
  history:
18965
19202
  type: array
18966
19203
  maxItems: 96
@@ -18981,7 +19218,7 @@ paths:
18981
19218
  properties:
18982
19219
  at: { type: string, format: date-time }
18983
19220
  action: { type: string }
18984
- resource_type: { type: string, nullable: true }
19221
+ resource_type: { type: [string, "null"] }
18985
19222
  '401': { description: Unauthenticated }
18986
19223
  '403': { description: Not a human user }
18987
19224
  '404': { description: No such agent in the caller's organization }
@@ -19283,8 +19520,7 @@ paths:
19283
19520
  masked:
19284
19521
  type: boolean
19285
19522
  overrides:
19286
- type: string
19287
- nullable: true
19523
+ type: [string, "null"]
19288
19524
  "401":
19289
19525
  $ref: "#/components/responses/Unauthorized"
19290
19526
  "404":
@@ -19483,15 +19719,13 @@ paths:
19483
19719
  chat_capable:
19484
19720
  type: boolean
19485
19721
  license:
19486
- type: string
19487
- nullable: true
19722
+ type: [string, "null"]
19488
19723
  description: SPDX id, or null when the agent is proprietary
19489
19724
  requires_vendor_subscription:
19490
19725
  type: boolean
19491
19726
  description: Whether the agent needs a paid account with its vendor. Independent of licence — the Codex CLI is Apache-2.0 and still requires a ChatGPT plan.
19492
19727
  vendor_credential_env:
19493
- type: string
19494
- nullable: true
19728
+ type: [string, "null"]
19495
19729
  '401':
19496
19730
  description: Unauthenticated
19497
19731
  /v1/automations/step-types:
@@ -19591,19 +19825,15 @@ paths:
19591
19825
  label:
19592
19826
  type: string
19593
19827
  platform:
19594
- type: string
19595
- nullable: true
19828
+ type: [string, "null"]
19596
19829
  bridge_version:
19597
- type: string
19598
- nullable: true
19830
+ type: [string, "null"]
19599
19831
  last_seen_at:
19600
- type: string
19832
+ type: [string, "null"]
19601
19833
  format: date-time
19602
- nullable: true
19603
19834
  revoked_at:
19604
- type: string
19835
+ type: [string, "null"]
19605
19836
  format: date-time
19606
- nullable: true
19607
19837
  description: Set once revoked. A revoked credential stops resolving.
19608
19838
  created_at:
19609
19839
  type: string
@@ -20140,7 +20370,7 @@ components:
20140
20370
  blast_radius_size:
20141
20371
  type: integer
20142
20372
  description: Sum of the blast radius. The sort key.
20143
- resolved_by: { type: string, nullable: true }
20373
+ resolved_by: { type: [string, "null"] }
20144
20374
  created_at: { type: string, format: date-time }
20145
20375
  updated_at: { type: string, format: date-time }
20146
20376
  OtelSummary:
@@ -20160,11 +20390,10 @@ components:
20160
20390
  type: object
20161
20391
  properties:
20162
20392
  pay_enabled: { type: boolean }
20163
- pay_max_usd: { type: string, nullable: true }
20164
- pay_daily_limit_usd: { type: string, nullable: true }
20393
+ pay_max_usd: { type: [string, "null"] }
20394
+ pay_daily_limit_usd: { type: [string, "null"] }
20165
20395
  pay_payto_allowlist:
20166
- type: array
20167
- nullable: true
20396
+ type: [array, "null"]
20168
20397
  items: { type: string }
20169
20398
  description: >
20170
20399
  Recipients an unattended agent may pay. Null is not a
@@ -20174,8 +20403,8 @@ components:
20174
20403
  description: Defaults true. Turning it off is what "unattended" means.
20175
20404
  pay_require_approval: { type: boolean }
20176
20405
  pay_grant_mode_enabled: { type: boolean }
20177
- pay_grant_max_usd: { type: string, nullable: true }
20178
- pay_grant_max_ttl_secs: { type: integer, nullable: true }
20406
+ pay_grant_max_usd: { type: [string, "null"] }
20407
+ pay_grant_max_ttl_secs: { type: [integer, "null"] }
20179
20408
  PayPrepareRequest:
20180
20409
  type: object
20181
20410
  required: [challenge_b64, method, resource_url]
@@ -20205,7 +20434,7 @@ components:
20205
20434
  payment_digest: { type: string }
20206
20435
  sign_idempotency_key: { type: string }
20207
20436
  quote: { type: object, additionalProperties: true }
20208
- valid_before: { type: string, format: date-time, nullable: true }
20437
+ valid_before: { type: [string, "null"], format: date-time }
20209
20438
  expires_at: { type: string, format: date-time }
20210
20439
  authorization:
20211
20440
  type: string
@@ -20234,19 +20463,18 @@ components:
20234
20463
  description: The X-PAYMENT header value. The signature, never the key.
20235
20464
  amount_usd: { type: string }
20236
20465
  pay_to: { type: string }
20237
- grant_id: { type: string, format: uuid, nullable: true }
20466
+ grant_id: { type: [string, "null"], format: uuid }
20238
20467
  PayResultRequest:
20239
20468
  type: object
20240
20469
  properties:
20241
20470
  http_status: { type: integer }
20242
20471
  settled:
20243
- type: boolean
20244
- nullable: true
20472
+ type: [boolean, "null"]
20245
20473
  description: >
20246
20474
  Null means the caller could not tell — a timeout after the
20247
20475
  header was sent, where the payment may or may not have
20248
20476
  been presented.
20249
- error: { type: string, nullable: true }
20477
+ error: { type: [string, "null"] }
20250
20478
  CreatePayGrantRequest:
20251
20479
  type: object
20252
20480
  required: [cap_usd, ttl_secs, grant_digest]
@@ -20254,8 +20482,7 @@ components:
20254
20482
  cap_usd: { type: string }
20255
20483
  ttl_secs: { type: integer }
20256
20484
  allowed_paytos:
20257
- type: array
20258
- nullable: true
20485
+ type: [array, "null"]
20259
20486
  items: { type: string }
20260
20487
  description: >
20261
20488
  Null means any recipient; an empty list means none. The two
@@ -20293,9 +20520,8 @@ components:
20293
20520
  type: string
20294
20521
  format: uuid
20295
20522
  agent_id:
20296
- type: string
20523
+ type: [string, "null"]
20297
20524
  format: uuid
20298
- nullable: true
20299
20525
  issuer:
20300
20526
  type: string
20301
20527
  enum: [laso, manual]
@@ -20379,13 +20605,11 @@ components:
20379
20605
  max_reveals:
20380
20606
  type: integer
20381
20607
  reveal_expires_at:
20382
- type: string
20608
+ type: [string, "null"]
20383
20609
  format: date-time
20384
- nullable: true
20385
20610
  void_after:
20386
- type: string
20611
+ type: [string, "null"]
20387
20612
  format: date-time
20388
- nullable: true
20389
20613
  ImportCardRequest:
20390
20614
  type: object
20391
20615
  required: [pan, cvv, exp_month, exp_year]
@@ -21411,7 +21635,7 @@ components:
21411
21635
  type: string
21412
21636
  enum: [pending, approved, denied, expired]
21413
21637
  agent_name: { type: string }
21414
- fingerprint: { type: string, nullable: true }
21638
+ fingerprint: { type: [string, "null"] }
21415
21639
  agent_id: { type: string, format: uuid }
21416
21640
  api_key:
21417
21641
  type: string
@@ -21509,8 +21733,7 @@ components:
21509
21733
  items:
21510
21734
  type: string
21511
21735
  token_ttl_seconds:
21512
- type: integer
21513
- nullable: true
21736
+ type: [integer, "null"]
21514
21737
  description: Per-agent token TTL in seconds (overrides global default)
21515
21738
  vault_ids:
21516
21739
  type: array
@@ -21576,12 +21799,10 @@ components:
21576
21799
  gas_daily_budget_native (UTC-day cumulative EVM gas estimate in native units).
21577
21800
  Strictest of global and per-chain limits wins. Daily limits apply per chain family spend, not cross-chain totals.
21578
21801
  tx_max_per_day:
21579
- type: integer
21580
- nullable: true
21802
+ type: [integer, "null"]
21581
21803
  description: Max transactions per UTC calendar day. Null = unlimited.
21582
21804
  tx_overhead_budget:
21583
- type: object
21584
- nullable: true
21805
+ type: [object, "null"]
21585
21806
  additionalProperties:
21586
21807
  type: string
21587
21808
  description: Per-chain daily overhead budget in native units (e.g. {"solana":"0.5","xrp":"100"}).
@@ -21612,14 +21833,12 @@ components:
21612
21833
  default: true
21613
21834
  description: When true, card orders route through the human approval queue before x402 payment.
21614
21835
  tx_approval_policy:
21615
- type: object
21836
+ type: [object, "null"]
21616
21837
  additionalProperties: true
21617
- nullable: true
21618
21838
  description: Graduated transaction approval policy (HITL thresholds). Separate from hard guardrails.
21619
21839
  action_approval_policy:
21620
- type: object
21840
+ type: [object, "null"]
21621
21841
  additionalProperties: true
21622
- nullable: true
21623
21842
  description: |
21624
21843
  Which business actions this agent must ask a human about, and above what
21625
21844
  amount. `{}` means no per-action rules.
@@ -21645,24 +21864,19 @@ components:
21645
21864
  default: false
21646
21865
  description: Block unlimited ERC-20 approvals (max uint256 / setApprovalForAll).
21647
21866
  tx_per_recipient_max_per_day:
21648
- type: integer
21649
- nullable: true
21867
+ type: [integer, "null"]
21650
21868
  description: Max transactions to the same recipient address per UTC day.
21651
21869
  tx_per_recipient_daily_limit:
21652
- type: string
21653
- nullable: true
21870
+ type: [string, "null"]
21654
21871
  description: Max native-unit spend to the same recipient per UTC day.
21655
21872
  new_recipient_cap_native:
21656
- type: string
21657
- nullable: true
21873
+ type: [string, "null"]
21658
21874
  description: Cap on first-time recipient spend in native units.
21659
21875
  tx_max_value_usd:
21660
- type: string
21661
- nullable: true
21876
+ type: [string, "null"]
21662
21877
  description: Per-transaction USD cap (requires price oracle).
21663
21878
  tx_daily_limit_usd:
21664
- type: string
21665
- nullable: true
21879
+ type: [string, "null"]
21666
21880
  description: Rolling 24h USD spend cap (requires price oracle).
21667
21881
  raw_signing_policy:
21668
21882
  type: string
@@ -21682,9 +21896,8 @@ components:
21682
21896
  default: false
21683
21897
  description: Allow EIP-7702 (tx type 4) set-code transactions.
21684
21898
  api_key_expires_at:
21685
- type: string
21899
+ type: [string, "null"]
21686
21900
  format: date-time
21687
- nullable: true
21688
21901
  description: Optional expiration time for the agent's API key.
21689
21902
  environment:
21690
21903
  type: string
@@ -21807,8 +22020,7 @@ components:
21807
22020
  items:
21808
22021
  type: string
21809
22022
  token_ttl_seconds:
21810
- type: integer
21811
- nullable: true
22023
+ type: [integer, "null"]
21812
22024
  vault_ids:
21813
22025
  type: array
21814
22026
  items:
@@ -21820,8 +22032,7 @@ components:
21820
22032
  shroud_config:
21821
22033
  $ref: "#/components/schemas/ShroudConfig"
21822
22034
  system_prompt:
21823
- type: string
21824
- nullable: true
22035
+ type: [string, "null"]
21825
22036
  description: Default system prompt for agent chat (null clears).
21826
22037
  execution_intents_enabled:
21827
22038
  type: boolean
@@ -21837,12 +22048,10 @@ components:
21837
22048
  type: boolean
21838
22049
  description: When true, execute requests must arrive via TEE and all direct secret reads are blocked (Pro+ only)
21839
22050
  tx_max_per_day:
21840
- type: integer
21841
- nullable: true
22051
+ type: [integer, "null"]
21842
22052
  description: Max transactions per UTC calendar day. Null = unlimited.
21843
22053
  tx_overhead_budget:
21844
- type: object
21845
- nullable: true
22054
+ type: [object, "null"]
21846
22055
  additionalProperties:
21847
22056
  type: string
21848
22057
  description: Per-chain daily overhead budget in native units.
@@ -21855,12 +22064,10 @@ components:
21855
22064
  type: boolean
21856
22065
  description: Whether this agent may order payment cards (x402 card ordering). Pro+ tier.
21857
22066
  card_max_order_usd:
21858
- type: string
21859
- nullable: true
22067
+ type: [string, "null"]
21860
22068
  description: Maximum USD amount for a single card order. null clears.
21861
22069
  card_daily_limit_usd:
21862
- type: string
21863
- nullable: true
22070
+ type: [string, "null"]
21864
22071
  description: Maximum cumulative USD spent ordering cards per rolling 24h window. null clears.
21865
22072
  card_payto_allowlist:
21866
22073
  type: array
@@ -21874,14 +22081,12 @@ components:
21874
22081
  type: boolean
21875
22082
  description: When true, card orders route through the human approval queue before x402 payment.
21876
22083
  tx_approval_policy:
21877
- type: object
22084
+ type: [object, "null"]
21878
22085
  additionalProperties: true
21879
- nullable: true
21880
22086
  description: Graduated transaction approval policy (HITL thresholds).
21881
22087
  action_approval_policy:
21882
- type: object
22088
+ type: [object, "null"]
21883
22089
  additionalProperties: true
21884
- nullable: true
21885
22090
  description: |
21886
22091
  Which business actions this agent must ask a human about, and above what
21887
22092
  amount. `{}` means no per-action rules.
@@ -21895,37 +22100,30 @@ components:
21895
22100
  transaction limit. Malformed rules are rejected on write rather than
21896
22101
  ignored at request time.
21897
22102
  typed_data_policy:
21898
- type: string
22103
+ type: [string, "null"]
21899
22104
  enum: [deny, approve]
21900
- nullable: true
21901
22105
  description: EIP-712 escalation policy.
21902
22106
  simulation_failure_policy:
21903
- type: string
22107
+ type: [string, "null"]
21904
22108
  enum: [deny, approve]
21905
- nullable: true
21906
22109
  description: Simulation failure escalation policy.
21907
22110
  tx_block_unlimited_approvals:
21908
22111
  type: boolean
21909
22112
  description: Block unlimited ERC-20 approvals (max uint256 / setApprovalForAll).
21910
22113
  tx_per_recipient_max_per_day:
21911
- type: integer
21912
- nullable: true
22114
+ type: [integer, "null"]
21913
22115
  description: Max transactions to the same recipient per UTC day. Null clears.
21914
22116
  tx_per_recipient_daily_limit:
21915
- type: string
21916
- nullable: true
22117
+ type: [string, "null"]
21917
22118
  description: Max native spend to same recipient per UTC day. Null clears.
21918
22119
  new_recipient_cap_native:
21919
- type: string
21920
- nullable: true
22120
+ type: [string, "null"]
21921
22121
  description: First-time recipient native cap. Null clears.
21922
22122
  tx_max_value_usd:
21923
- type: string
21924
- nullable: true
22123
+ type: [string, "null"]
21925
22124
  description: Per-tx USD cap. Null clears.
21926
22125
  tx_daily_limit_usd:
21927
- type: string
21928
- nullable: true
22126
+ type: [string, "null"]
21929
22127
  description: Rolling 24h USD spend cap. Null clears.
21930
22128
  raw_signing_policy:
21931
22129
  type: string
@@ -21960,10 +22158,9 @@ components:
21960
22158
  tokens for (e.g. `["https://api.anthropic.com"]`). Empty array
21961
22159
  blocks all federation requests (zero-trust default).
21962
22160
  federated_token_ttl_seconds:
21963
- type: integer
22161
+ type: [integer, "null"]
21964
22162
  minimum: 60
21965
22163
  maximum: 3600
21966
- nullable: true
21967
22164
  description: |
21968
22165
  Per-agent TTL override for federation tokens (seconds). NULL falls
21969
22166
  back to the global default (`ONECLAW_JWT_FEDERATED_TOKEN_EXPIRY_SECS`).
@@ -21991,13 +22188,11 @@ components:
21991
22188
  max_fee_per_gas_gwei, max_gas_limit, gas_daily_budget_native (UTC-day cumulative EVM gas in native units).
21992
22189
  Strictest of global and per-chain limits wins. Daily limits apply per chain family spend, not cross-chain totals.
21993
22190
  api_key_expires_at:
21994
- type: string
22191
+ type: [string, "null"]
21995
22192
  format: date-time
21996
- nullable: true
21997
22193
  description: Optional expiration time for the agent's API key. Set to null to clear.
21998
22194
  environment:
21999
- type: string
22000
- nullable: true
22195
+ type: [string, "null"]
22001
22196
  description: Named environment for this agent (production, preview, development, or custom).
22002
22197
  environment_locked:
22003
22198
  type: boolean
@@ -22109,8 +22304,7 @@ components:
22109
22304
  items:
22110
22305
  type: string
22111
22306
  token_ttl_seconds:
22112
- type: integer
22113
- nullable: true
22307
+ type: [integer, "null"]
22114
22308
  vault_ids:
22115
22309
  type: array
22116
22310
  items:
@@ -22153,12 +22347,10 @@ components:
22153
22347
  type: boolean
22154
22348
  description: When true, execute requests must arrive via TEE and all direct secret reads are blocked (Pro+ only)
22155
22349
  tx_max_per_day:
22156
- type: integer
22157
- nullable: true
22350
+ type: [integer, "null"]
22158
22351
  description: Max transactions per UTC calendar day. Null = unlimited.
22159
22352
  tx_overhead_budget:
22160
- type: object
22161
- nullable: true
22353
+ type: [object, "null"]
22162
22354
  additionalProperties:
22163
22355
  type: string
22164
22356
  description: Per-chain daily overhead budget in native units.
@@ -22188,14 +22380,12 @@ components:
22188
22380
  type: boolean
22189
22381
  description: When true, card orders route through the human approval queue before x402 payment.
22190
22382
  tx_approval_policy:
22191
- type: object
22383
+ type: [object, "null"]
22192
22384
  additionalProperties: true
22193
- nullable: true
22194
22385
  description: Graduated transaction approval policy (HITL thresholds).
22195
22386
  action_approval_policy:
22196
- type: object
22387
+ type: [object, "null"]
22197
22388
  additionalProperties: true
22198
- nullable: true
22199
22389
  description: |
22200
22390
  Which business actions this agent must ask a human about, and above what
22201
22391
  amount. `{}` means no per-action rules.
@@ -22209,38 +22399,30 @@ components:
22209
22399
  transaction limit. Malformed rules are rejected on write rather than
22210
22400
  ignored at request time.
22211
22401
  typed_data_policy:
22212
- type: string
22402
+ type: [string, "null"]
22213
22403
  enum: [deny, approve]
22214
- nullable: true
22215
22404
  simulation_failure_policy:
22216
- type: string
22405
+ type: [string, "null"]
22217
22406
  enum: [deny, approve]
22218
- nullable: true
22219
22407
  tx_block_unlimited_approvals:
22220
22408
  type: boolean
22221
22409
  description: Block unlimited ERC-20 approvals.
22222
22410
  tx_per_recipient_max_per_day:
22223
- type: integer
22224
- nullable: true
22411
+ type: [integer, "null"]
22225
22412
  tx_per_recipient_daily_limit:
22226
- type: string
22227
- nullable: true
22413
+ type: [string, "null"]
22228
22414
  new_recipient_cap_native:
22229
- type: string
22230
- nullable: true
22415
+ type: [string, "null"]
22231
22416
  tx_max_value_usd:
22232
- type: string
22233
- nullable: true
22417
+ type: [string, "null"]
22234
22418
  tx_daily_limit_usd:
22235
- type: string
22236
- nullable: true
22419
+ type: [string, "null"]
22237
22420
  raw_signing_policy:
22238
22421
  type: string
22239
22422
  enum: [allow, deny, approve]
22240
22423
  personal_sign_policy:
22241
- type: object
22424
+ type: [object, "null"]
22242
22425
  additionalProperties: true
22243
- nullable: true
22244
22426
  allow_erc4337:
22245
22427
  type: boolean
22246
22428
  allow_eip7702:
@@ -22268,8 +22450,7 @@ components:
22268
22450
  format: uri
22269
22451
  description: Allowlist of audience URIs the agent may federate to.
22270
22452
  federated_token_ttl_seconds:
22271
- type: integer
22272
- nullable: true
22453
+ type: [integer, "null"]
22273
22454
  description: Per-agent TTL override for federation tokens (60..=3600).
22274
22455
  signing_chains:
22275
22456
  type: array
@@ -22317,13 +22498,11 @@ components:
22317
22498
  type: string
22318
22499
  description: 'Per-chain-family daily spend in native major units (keys: evm, bitcoin, solana, xrp, cardano, tron).'
22319
22500
  api_key_expires_at:
22320
- type: string
22501
+ type: [string, "null"]
22321
22502
  format: date-time
22322
- nullable: true
22323
22503
  description: Optional expiration time for the agent's API key.
22324
22504
  evm_address:
22325
- type: string
22326
- nullable: true
22505
+ type: [string, "null"]
22327
22506
  description: Agent's Ethereum EOA address (used as Safe signer for smart accounts and Intents API).
22328
22507
  created_at:
22329
22508
  type: string
@@ -22340,8 +22519,7 @@ components:
22340
22519
  items:
22341
22520
  $ref: "#/components/schemas/AgentSmartAccountResponse"
22342
22521
  environment:
22343
- type: string
22344
- nullable: true
22522
+ type: [string, "null"]
22345
22523
  description: Named environment this agent belongs to (production, preview, development, or custom).
22346
22524
  environment_locked:
22347
22525
  type: boolean
@@ -22380,8 +22558,7 @@ components:
22380
22558
  is_verified:
22381
22559
  type: boolean
22382
22560
  logo_url:
22383
- type: string
22384
- nullable: true
22561
+ type: [string, "null"]
22385
22562
  created_at:
22386
22563
  type: string
22387
22564
  format: date-time
@@ -22419,8 +22596,7 @@ components:
22419
22596
  type: boolean
22420
22597
  default: true
22421
22598
  logo_url:
22422
- type: string
22423
- nullable: true
22599
+ type: [string, "null"]
22424
22600
 
22425
22601
  AgentSmartAccountResponse:
22426
22602
  type: object
@@ -23172,8 +23348,7 @@ components:
23172
23348
  public_key:
23173
23349
  type: string
23174
23350
  address:
23175
- type: string
23176
- nullable: true
23351
+ type: [string, "null"]
23177
23352
  key_version:
23178
23353
  type: integer
23179
23354
  is_active:
@@ -23182,9 +23357,8 @@ components:
23182
23357
  type: string
23183
23358
  format: date-time
23184
23359
  rotated_at:
23185
- type: string
23360
+ type: [string, "null"]
23186
23361
  format: date-time
23187
- nullable: true
23188
23362
  custody:
23189
23363
  type: string
23190
23364
  enum: [server, client_tss]
@@ -23256,8 +23430,7 @@ components:
23256
23430
  the capability was reachable only from the end user's own
23257
23431
  dashboard. Templates now honour the flag too.
23258
23432
  system_prompt:
23259
- type: string
23260
- nullable: true
23433
+ type: [string, "null"]
23261
23434
 
23262
23435
  PatchConnectionAgentResponse:
23263
23436
  type: object
@@ -23272,8 +23445,7 @@ components:
23272
23445
  memory_enabled:
23273
23446
  type: boolean
23274
23447
  system_prompt:
23275
- type: string
23276
- nullable: true
23448
+ type: [string, "null"]
23277
23449
 
23278
23450
  # Bankr Dynamic Key Vending
23279
23451
  LeaseBankrKeyRequest:
@@ -23407,9 +23579,8 @@ components:
23407
23579
  is_active:
23408
23580
  type: boolean
23409
23581
  expires_at:
23410
- type: string
23582
+ type: [string, "null"]
23411
23583
  format: date-time
23412
- nullable: true
23413
23584
 
23414
23585
  DelegationResponse:
23415
23586
  type: object
@@ -23439,8 +23610,7 @@ components:
23439
23610
  items:
23440
23611
  type: string
23441
23612
  max_daily_delegations:
23442
- type: integer
23443
- nullable: true
23613
+ type: [integer, "null"]
23444
23614
  max_depth:
23445
23615
  type: integer
23446
23616
  guardrails:
@@ -23454,9 +23624,8 @@ components:
23454
23624
  type: string
23455
23625
  format: uuid
23456
23626
  expires_at:
23457
- type: string
23627
+ type: [string, "null"]
23458
23628
  format: date-time
23459
- nullable: true
23460
23629
  created_at:
23461
23630
  type: string
23462
23631
  format: date-time
@@ -23603,23 +23772,17 @@ components:
23603
23772
  from:
23604
23773
  type: string
23605
23774
  signature:
23606
- type: string
23607
- nullable: true
23775
+ type: [string, "null"]
23608
23776
  signed_tx:
23609
- type: string
23610
- nullable: true
23777
+ type: [string, "null"]
23611
23778
  tx_hash:
23612
- type: string
23613
- nullable: true
23779
+ type: [string, "null"]
23614
23780
  message_hash:
23615
- type: string
23616
- nullable: true
23781
+ type: [string, "null"]
23617
23782
  typed_data_hash:
23618
- type: string
23619
- nullable: true
23783
+ type: [string, "null"]
23620
23784
  tx_type:
23621
- type: integer
23622
- nullable: true
23785
+ type: [integer, "null"]
23623
23786
 
23624
23787
  TransactionResponse:
23625
23788
  type: object
@@ -23643,8 +23806,7 @@ components:
23643
23806
  enum:
23644
23807
  [pending, signed, sign_only, broadcast, failed, simulation_failed]
23645
23808
  signed_tx:
23646
- type: string
23647
- nullable: true
23809
+ type: [string, "null"]
23648
23810
  description: >
23649
23811
  Raw signed transaction hex. On GET list and GET by id, this property is omitted by default (absent from the response). Pass `include_signed_tx=true` on those endpoints to include it. Always present on the initial POST submit response.
23650
23812
  tx_hash:
@@ -23997,9 +24159,8 @@ components:
23997
24159
  welcome_bundle_complete:
23998
24160
  type: boolean
23999
24161
  default_vault_id:
24000
- type: string
24162
+ type: [string, "null"]
24001
24163
  format: uuid
24002
- nullable: true
24003
24164
 
24004
24165
  OnboardingProvisionRequest:
24005
24166
  type: object
@@ -24016,6 +24177,13 @@ components:
24016
24177
  if the org has one. Same field and meaning as on `POST /v1/agents`:
24017
24178
  the first call returns 202 with the approval to collect, and the
24018
24179
  retry passes its id here.
24180
+ guided:
24181
+ type: boolean
24182
+ default: false
24183
+ description: |
24184
+ Seeds `getting-started/**` instead of `examples/**` in the shared
24185
+ `default` vault — the guided onboarding wizard's own sample content,
24186
+ kept distinguishable from the MCP-connect developer flow's.
24019
24187
 
24020
24188
  OnboardingProvisionResponse:
24021
24189
  type: object
@@ -24034,6 +24202,75 @@ components:
24034
24202
  verify_prompt:
24035
24203
  type: string
24036
24204
 
24205
+ GuidedOnboardingStatus:
24206
+ allOf:
24207
+ - type: object
24208
+ required: [eligible]
24209
+ properties:
24210
+ eligible:
24211
+ type: boolean
24212
+ description: |
24213
+ Whether this org is in the guided-onboarding rollout cohort —
24214
+ decides whether the dashboard redirects a new user here or to
24215
+ the MCP-connect flow.
24216
+ - $ref: "#/components/schemas/OnboardingStatus"
24217
+
24218
+ GuidedAskRequest:
24219
+ type: object
24220
+ required: [question]
24221
+ properties:
24222
+ question:
24223
+ type: string
24224
+ maxLength: 500
24225
+ step:
24226
+ type: integer
24227
+ description: Accepted but not yet used to tailor the answer; reserved for later.
24228
+
24229
+ GuidedAskResponse:
24230
+ type: object
24231
+ required: [answer]
24232
+ properties:
24233
+ answer:
24234
+ type: string
24235
+
24236
+ TrialSetupIntentResponse:
24237
+ type: object
24238
+ required: [client_secret, publishable_key]
24239
+ properties:
24240
+ client_secret:
24241
+ type: string
24242
+ publishable_key:
24243
+ type: string
24244
+
24245
+ CreateTrialRuntimeRequest:
24246
+ type: object
24247
+ required: [setup_intent_id, agent_id, template, name]
24248
+ properties:
24249
+ setup_intent_id:
24250
+ type: string
24251
+ agent_id:
24252
+ type: string
24253
+ format: uuid
24254
+ template:
24255
+ type: string
24256
+ preset:
24257
+ type: string
24258
+ description: Defaults to CreateRuntimeRequest's own default ("small") when omitted.
24259
+ name:
24260
+ type: string
24261
+ always_on:
24262
+ type: boolean
24263
+ default: false
24264
+ description: |
24265
+ Keeps the runtime running indefinitely instead of auto-stopping after the
24266
+ default idle window (maps to `idle_timeout_secs: 0`).
24267
+ env_public:
24268
+ type: object
24269
+ description: |
24270
+ Non-secret runtime config — in practice just `LLM_PROVIDER`/`LLM_MODEL`
24271
+ from the guided flow's model-choice step. Rejected if any key looks
24272
+ secret-shaped (same `validate_env_public` the canonical runtime API uses).
24273
+
24037
24274
  AgentKeysVaultResponse:
24038
24275
  type: object
24039
24276
  properties:
@@ -24220,31 +24457,26 @@ components:
24220
24457
  description: Metered line from Stripe upcoming invoice (usage detail when available).
24221
24458
  properties:
24222
24459
  description:
24223
- type: string
24224
- nullable: true
24460
+ type: [string, "null"]
24225
24461
  amount_cents:
24226
24462
  type: integer
24227
24463
  format: int64
24228
24464
  quantity:
24229
- type: number
24230
- nullable: true
24465
+ type: [number, "null"]
24231
24466
  description: Billed usage units when Stripe returns quantity (e.g. tokens).
24232
24467
  price_nickname:
24233
- type: string
24234
- nullable: true
24468
+ type: [string, "null"]
24235
24469
 
24236
24470
  LlmBillingCycleUsage:
24237
24471
  type: object
24238
24472
  description: Accrued LLM charges for the current Stripe subscription period (upcoming invoice).
24239
24473
  properties:
24240
24474
  period_start:
24241
- type: string
24475
+ type: [string, "null"]
24242
24476
  format: date-time
24243
- nullable: true
24244
24477
  period_end:
24245
- type: string
24478
+ type: [string, "null"]
24246
24479
  format: date-time
24247
- nullable: true
24248
24480
  accrued_usage_cents:
24249
24481
  type: integer
24250
24482
  format: int64
@@ -24416,9 +24648,8 @@ components:
24416
24648
  type: integer
24417
24649
  description: Total events examined
24418
24650
  broken_at_event_id:
24419
- type: string
24651
+ type: [string, "null"]
24420
24652
  format: uuid
24421
- nullable: true
24422
24653
  description: First event where chain integrity broke (null if valid)
24423
24654
  scheme:
24424
24655
  type: object
@@ -24460,9 +24691,10 @@ components:
24460
24691
  type: string
24461
24692
  description: GCE metadata identity JWT (verify against Google public keys)
24462
24693
  confidential_claims:
24463
- nullable: true
24464
24694
  description: Confidential Computing claims extracted from the identity JWT
24465
- $ref: "#/components/schemas/ConfidentialClaims"
24695
+ oneOf:
24696
+ - $ref: "#/components/schemas/ConfidentialClaims"
24697
+ - type: "null"
24466
24698
  verification:
24467
24699
  type: object
24468
24700
  properties:
@@ -24477,8 +24709,7 @@ components:
24477
24709
  type: string
24478
24710
 
24479
24711
  ConfidentialClaims:
24480
- type: object
24481
- nullable: true
24712
+ type: [object, "null"]
24482
24713
  properties:
24483
24714
  secboot:
24484
24715
  type: boolean
@@ -24881,32 +25112,26 @@ components:
24881
25112
  value_wei:
24882
25113
  type: string
24883
25114
  data_hex:
24884
- type: string
24885
- nullable: true
25115
+ type: [string, "null"]
24886
25116
  operation:
24887
25117
  type: integer
24888
25118
  safe_tx_hash:
24889
- type: string
24890
- nullable: true
25119
+ type: [string, "null"]
24891
25120
  nonce:
24892
- type: integer
24893
- nullable: true
25121
+ type: [integer, "null"]
24894
25122
  status:
24895
25123
  type: string
24896
25124
  enum: [pending, approved, executing, executed, rejected, expired]
24897
25125
  threshold:
24898
25126
  type: integer
24899
25127
  expires_at:
24900
- type: string
25128
+ type: [string, "null"]
24901
25129
  format: date-time
24902
- nullable: true
24903
25130
  executed_tx_hash:
24904
- type: string
24905
- nullable: true
25131
+ type: [string, "null"]
24906
25132
  executed_at:
24907
- type: string
25133
+ type: [string, "null"]
24908
25134
  format: date-time
24909
- nullable: true
24910
25135
  signatures:
24911
25136
  type: array
24912
25137
  items:
@@ -25245,13 +25470,11 @@ components:
25245
25470
  contract_address:
25246
25471
  type: string
25247
25472
  symbol:
25248
- type: string
25249
- nullable: true
25473
+ type: [string, "null"]
25250
25474
  balance:
25251
25475
  type: string
25252
25476
  decimals:
25253
- type: integer
25254
- nullable: true
25477
+ type: [integer, "null"]
25255
25478
 
25256
25479
  # --- x402 ---
25257
25480
 
@@ -25523,12 +25746,10 @@ components:
25523
25746
  enum: [silent, user_signin, configurable]
25524
25747
  default: silent
25525
25748
  max_connected_users:
25526
- type: integer
25527
- nullable: true
25749
+ type: [integer, "null"]
25528
25750
  api_key_expires_at:
25529
- type: string
25751
+ type: [string, "null"]
25530
25752
  format: date-time
25531
- nullable: true
25532
25753
  description: Optional expiration time for the platform API key.
25533
25754
 
25534
25755
  UpdatePlatformAppRequest:
@@ -25560,18 +25781,15 @@ components:
25560
25781
  type: string
25561
25782
  enum: [silent, user_signin, configurable]
25562
25783
  max_connected_users:
25563
- type: integer
25564
- nullable: true
25784
+ type: [integer, "null"]
25565
25785
  is_active:
25566
25786
  type: boolean
25567
25787
  api_key_expires_at:
25568
- type: string
25788
+ type: [string, "null"]
25569
25789
  format: date-time
25570
- nullable: true
25571
25790
  description: Optional expiration time for the platform API key. Set to null to clear.
25572
25791
  siwe_domain:
25573
- type: string
25574
- nullable: true
25792
+ type: [string, "null"]
25575
25793
  description: Hostname allowed in SIWE messages for wallet sign-in (EIP-4361).
25576
25794
 
25577
25795
  PlatformAppDeleteResponse:
@@ -25627,27 +25845,22 @@ components:
25627
25845
  description:
25628
25846
  type: string
25629
25847
  logo_url:
25630
- type: string
25631
- nullable: true
25848
+ type: [string, "null"]
25632
25849
  api_key_prefix:
25633
25850
  type: string
25634
25851
  oidc_jwks_url:
25635
- type: string
25636
- nullable: true
25852
+ type: [string, "null"]
25637
25853
  oidc_issuer:
25638
- type: string
25639
- nullable: true
25854
+ type: [string, "null"]
25640
25855
  oidc_audience:
25641
- type: string
25642
- nullable: true
25856
+ type: [string, "null"]
25643
25857
  description: Expected audience claim for OIDC token validation
25644
25858
  redirect_uris:
25645
25859
  type: array
25646
25860
  items:
25647
25861
  type: string
25648
25862
  webhook_url:
25649
- type: string
25650
- nullable: true
25863
+ type: [string, "null"]
25651
25864
  is_active:
25652
25865
  type: boolean
25653
25866
  billing_model:
@@ -25655,23 +25868,19 @@ components:
25655
25868
  auth_mode:
25656
25869
  type: string
25657
25870
  max_connected_users:
25658
- type: integer
25659
- nullable: true
25871
+ type: [integer, "null"]
25660
25872
  connected_users:
25661
25873
  type: integer
25662
25874
  api_key_expires_at:
25663
- type: string
25875
+ type: [string, "null"]
25664
25876
  format: date-time
25665
- nullable: true
25666
25877
  description: When the platform API key expires.
25667
25878
  api_key_rotated_at:
25668
- type: string
25879
+ type: [string, "null"]
25669
25880
  format: date-time
25670
- nullable: true
25671
25881
  description: When the platform API key was last rotated.
25672
25882
  siwe_domain:
25673
- type: string
25674
- nullable: true
25883
+ type: [string, "null"]
25675
25884
  description: Hostname allowed in SIWE messages for wallet sign-in (EIP-4361).
25676
25885
  created_at:
25677
25886
  type: string
@@ -26072,9 +26281,8 @@ components:
26072
26281
  type: string
26073
26282
  format: date-time
26074
26283
  claimed_at:
26075
- type: string
26284
+ type: [string, "null"]
26076
26285
  format: date-time
26077
- nullable: true
26078
26286
 
26079
26287
  BootstrapRequest:
26080
26288
  type: object
@@ -26112,13 +26320,11 @@ components:
26112
26320
  type: object
26113
26321
  properties:
26114
26322
  vault_id:
26115
- type: string
26323
+ type: [string, "null"]
26116
26324
  format: uuid
26117
- nullable: true
26118
26325
  agent_id:
26119
- type: string
26326
+ type: [string, "null"]
26120
26327
  format: uuid
26121
- nullable: true
26122
26328
  agent_ids:
26123
26329
  type: array
26124
26330
  items:
@@ -26136,12 +26342,10 @@ components:
26136
26342
  type: string
26137
26343
  description: Chains with provisioned signing keys
26138
26344
  agent_api_key:
26139
- type: string
26140
- nullable: true
26345
+ type: [string, "null"]
26141
26346
  description: One-time agent API key (ocv_ prefix). Store securely — not retrievable later.
26142
26347
  agent_evm_address:
26143
- type: string
26144
- nullable: true
26348
+ type: [string, "null"]
26145
26349
  description: EOA address when provision_eoa is true in the template
26146
26350
  signing_keys:
26147
26351
  type: array
@@ -26208,11 +26412,9 @@ components:
26208
26412
  description:
26209
26413
  type: string
26210
26414
  logo_url:
26211
- type: string
26212
- nullable: true
26415
+ type: [string, "null"]
26213
26416
  category:
26214
- type: string
26215
- nullable: true
26417
+ type: [string, "null"]
26216
26418
  listing_tags:
26217
26419
  type: array
26218
26420
  items:
@@ -26222,8 +26424,7 @@ components:
26222
26424
  items:
26223
26425
  type: string
26224
26426
  pricing_summary:
26225
- type: string
26226
- nullable: true
26427
+ type: [string, "null"]
26227
26428
 
26228
26429
  ConnectedAppResponse:
26229
26430
  type: object
@@ -26301,9 +26502,8 @@ components:
26301
26502
  items:
26302
26503
  type: string
26303
26504
  expires_at:
26304
- type: string
26505
+ type: [string, "null"]
26305
26506
  format: date-time
26306
- nullable: true
26307
26507
  created_at:
26308
26508
  type: string
26309
26509
  format: date-time
@@ -26345,8 +26545,7 @@ components:
26345
26545
  app_slug:
26346
26546
  type: string
26347
26547
  app_logo_url:
26348
- type: string
26349
- nullable: true
26548
+ type: [string, "null"]
26350
26549
  auth_mode:
26351
26550
  type: string
26352
26551
  vault_ids:
@@ -26368,8 +26567,7 @@ components:
26368
26567
  expired:
26369
26568
  type: boolean
26370
26569
  return_to:
26371
- type: string
26372
- nullable: true
26570
+ type: [string, "null"]
26373
26571
 
26374
26572
  ClaimRedeemResponse:
26375
26573
  type: object
@@ -26390,8 +26588,7 @@ components:
26390
26588
  type: string
26391
26589
  format: uuid
26392
26590
  return_to:
26393
- type: string
26394
- nullable: true
26591
+ type: [string, "null"]
26395
26592
  dashboard_url:
26396
26593
  type: string
26397
26594
 
@@ -26448,9 +26645,8 @@ components:
26448
26645
  attestation_verified:
26449
26646
  type: boolean
26450
26647
  last_used_at:
26451
- type: string
26648
+ type: [string, "null"]
26452
26649
  format: date-time
26453
- nullable: true
26454
26650
  created_at:
26455
26651
  type: string
26456
26652
  format: date-time
@@ -26581,7 +26777,7 @@ components:
26581
26777
  id: { type: string, format: uuid }
26582
26778
  peer_type: { type: string, enum: [user, platform_connection, external] }
26583
26779
  peer_ref: { type: string }
26584
- display_name: { type: string, nullable: true }
26780
+ display_name: { type: [string, "null"] }
26585
26781
  profile: { type: object, additionalProperties: true }
26586
26782
  status:
26587
26783
  type: string
@@ -26601,8 +26797,7 @@ components:
26601
26797
  fact_key: { type: string, example: "approval_tendency:refund.create|0-10|known|a@b.co" }
26602
26798
  fact_value: { type: object, additionalProperties: true }
26603
26799
  confidence:
26604
- type: string
26605
- nullable: true
26800
+ type: [string, "null"]
26606
26801
  description: 0..1, capped below certainty — no history makes the next decision certain.
26607
26802
  provenance:
26608
26803
  type: array
@@ -26623,8 +26818,8 @@ components:
26623
26818
  target_type:
26624
26819
  type: string
26625
26820
  enum: [sms, webhook, expo, email]
26626
- user_id: { type: string, format: uuid, nullable: true }
26627
- agent_id: { type: string, format: uuid, nullable: true }
26821
+ user_id: { type: [string, "null"], format: uuid }
26822
+ agent_id: { type: [string, "null"], format: uuid }
26628
26823
  config: { type: object, additionalProperties: true }
26629
26824
  events:
26630
26825
  type: array
@@ -26646,8 +26841,7 @@ components:
26646
26841
  description: { type: string }
26647
26842
  category: { type: string, example: communication }
26648
26843
  provider_slug:
26649
- type: string
26650
- nullable: true
26844
+ type: [string, "null"]
26651
26845
  description: "`oauth_providers.slug`, or null when the connector uses a pasted API key."
26652
26846
  oauth_scopes:
26653
26847
  type: array
@@ -26720,11 +26914,11 @@ components:
26720
26914
  key_prefix:
26721
26915
  type: string
26722
26916
  description: First 20 characters (`sk-shroud-v1-` + 7) — enough to recognise, not to use
26723
- max_concurrent_streams: { type: integer, nullable: true }
26724
- spend_cap_usd: { type: number, nullable: true }
26917
+ max_concurrent_streams: { type: [integer, "null"] }
26918
+ spend_cap_usd: { type: [number, "null"] }
26725
26919
  created_at: { type: string, format: date-time }
26726
- last_used_at: { type: string, format: date-time, nullable: true }
26727
- revoked_at: { type: string, format: date-time, nullable: true }
26920
+ last_used_at: { type: [string, "null"], format: date-time }
26921
+ revoked_at: { type: [string, "null"], format: date-time }
26728
26922
 
26729
26923
  RouterKeyCreated:
26730
26924
  allOf:
@@ -26775,7 +26969,7 @@ components:
26775
26969
  destination_hosts:
26776
26970
  type: array
26777
26971
  items: { type: string }
26778
- created_by: { type: string, format: uuid, nullable: true }
26972
+ created_by: { type: [string, "null"], format: uuid }
26779
26973
  created_at: { type: string, format: date-time }
26780
26974
 
26781
26975
  X402TopupResponse:
@@ -26812,8 +27006,8 @@ components:
26812
27006
  type: boolean
26813
27007
  description: False until the first poll has recorded what already exists. That poll emits nothing.
26814
27008
  next_poll_at: { type: string, format: date-time }
26815
- last_polled_at: { type: string, format: date-time, nullable: true }
26816
- last_error: { type: string, nullable: true }
27009
+ last_polled_at: { type: [string, "null"], format: date-time }
27010
+ last_error: { type: [string, "null"] }
26817
27011
  consecutive_errors: { type: integer }
26818
27012
  events_emitted: { type: integer, format: int64 }
26819
27013
  created_at: { type: string, format: date-time }
@@ -26826,8 +27020,7 @@ components:
26826
27020
  binding_name: { type: string }
26827
27021
  preset_slug: { type: string }
26828
27022
  display_name:
26829
- type: string
26830
- nullable: true
27023
+ type: [string, "null"]
26831
27024
  description: Null if the preset has since been retired from the catalogue.
26832
27025
  is_active: { type: boolean }
26833
27026
  connected:
@@ -26852,9 +27045,8 @@ components:
26852
27045
  type: string
26853
27046
  format: uuid
26854
27047
  agent_id:
26855
- type: string
27048
+ type: [string, "null"]
26856
27049
  format: uuid
26857
- nullable: true
26858
27050
  action:
26859
27051
  type: string
26860
27052
  target_type:
@@ -26867,17 +27059,15 @@ components:
26867
27059
  maximum: 3
26868
27060
  description: "The tier actually enforced. Authoritative."
26869
27061
  declared_risk_tier:
26870
- type: integer
27062
+ type: [integer, "null"]
26871
27063
  minimum: 1
26872
27064
  maximum: 3
26873
- nullable: true
26874
27065
  description: "What the caller asked for, when it asked for anything."
26875
27066
  declared_below_floor:
26876
27067
  type: boolean
26877
27068
  description: "The caller asked for a lower tier than policy required."
26878
27069
  human_summary:
26879
- type: string
26880
- nullable: true
27070
+ type: [string, "null"]
26881
27071
  description: "Plain-language line sent to SMS, push and email."
26882
27072
  payload:
26883
27073
  type: object
@@ -26889,23 +27079,18 @@ components:
26889
27079
  type: object
26890
27080
  description: Structured summary of the action requiring approval
26891
27081
  reason:
26892
- type: string
26893
- nullable: true
27082
+ type: [string, "null"]
26894
27083
  decision_reason:
26895
- type: string
26896
- nullable: true
27084
+ type: [string, "null"]
26897
27085
  decided_by:
26898
- type: string
27086
+ type: [string, "null"]
26899
27087
  format: uuid
26900
- nullable: true
26901
27088
  decided_at:
26902
- type: string
27089
+ type: [string, "null"]
26903
27090
  format: date-time
26904
- nullable: true
26905
27091
  expires_at:
26906
- type: string
27092
+ type: [string, "null"]
26907
27093
  format: date-time
26908
- nullable: true
26909
27094
  created_at:
26910
27095
  type: string
26911
27096
  format: date-time
@@ -26929,9 +27114,8 @@ components:
26929
27114
  type: string
26930
27115
  enum: [pending, approved, rejected, expired, cancelled]
26931
27116
  expires_at:
26932
- type: string
27117
+ type: [string, "null"]
26933
27118
  format: date-time
26934
- nullable: true
26935
27119
 
26936
27120
  GuardrailReasonCode:
26937
27121
  type: string
@@ -26980,23 +27164,18 @@ components:
26980
27164
  reason_code:
26981
27165
  $ref: "#/components/schemas/GuardrailReasonCode"
26982
27166
  limit:
26983
- type: string
26984
- nullable: true
27167
+ type: [string, "null"]
26985
27168
  current:
26986
- type: string
26987
- nullable: true
27169
+ type: [string, "null"]
26988
27170
  attempted:
26989
- type: string
26990
- nullable: true
27171
+ type: [string, "null"]
26991
27172
  approval_available:
26992
27173
  type: boolean
26993
27174
  default: false
26994
27175
  retry_after_seconds:
26995
- type: integer
26996
- nullable: true
27176
+ type: [integer, "null"]
26997
27177
  detail:
26998
- type: string
26999
- nullable: true
27178
+ type: [string, "null"]
27000
27179
 
27001
27180
  GuardrailDenial:
27002
27181
  description: Alias of GuardrailViolation (Convention 1 JSON shape).
@@ -27024,8 +27203,7 @@ components:
27024
27203
  type: string
27025
27204
  format: email
27026
27205
  wallet_address:
27027
- type: string
27028
- nullable: true
27206
+ type: [string, "null"]
27029
27207
  description: Ethereum address if auto_provision_chains included an EVM chain
27030
27208
 
27031
27209
  # --- OAuth ---
@@ -27039,9 +27217,8 @@ components:
27039
27217
  app_slug:
27040
27218
  type: string
27041
27219
  app_logo_url:
27042
- type: string
27220
+ type: [string, "null"]
27043
27221
  format: uri
27044
- nullable: true
27045
27222
  scopes:
27046
27223
  type: array
27047
27224
  items: { type: string }
@@ -27064,12 +27241,10 @@ components:
27064
27241
  type: integer
27065
27242
  description: Token lifetime in seconds
27066
27243
  refresh_token:
27067
- type: string
27068
- nullable: true
27244
+ type: [string, "null"]
27069
27245
  description: Refresh token for obtaining new access tokens (when offline_access scope was granted)
27070
27246
  id_token:
27071
- type: string
27072
- nullable: true
27247
+ type: [string, "null"]
27073
27248
  description: OIDC ID token (when openid scope was granted)
27074
27249
  scope:
27075
27250
  type: string
@@ -27085,11 +27260,9 @@ components:
27085
27260
  type: string
27086
27261
  format: email
27087
27262
  name:
27088
- type: string
27089
- nullable: true
27263
+ type: [string, "null"]
27090
27264
  wallet_address:
27091
- type: string
27092
- nullable: true
27265
+ type: [string, "null"]
27093
27266
 
27094
27267
  # --- Spend Policies ---
27095
27268
 
@@ -27192,14 +27365,12 @@ components:
27192
27365
  entitlement_status:
27193
27366
  type: string
27194
27367
  provisioned_tier:
27195
- type: string
27196
- nullable: true
27368
+ type: [string, "null"]
27197
27369
  description: |
27198
27370
  Billing tier granted to the end-user org when billing_model is platform_pays
27199
27371
  (from template plan at bootstrap). Null when not provisioned.
27200
27372
  wallet_address:
27201
- type: string
27202
- nullable: true
27373
+ type: [string, "null"]
27203
27374
  vault_ids:
27204
27375
  type: array
27205
27376
  items:
@@ -27221,9 +27392,8 @@ components:
27221
27392
  type: string
27222
27393
  format: uuid
27223
27394
  claimed_at:
27224
- type: string
27395
+ type: [string, "null"]
27225
27396
  format: date-time
27226
- nullable: true
27227
27397
  claim:
27228
27398
  $ref: "#/components/schemas/ClaimStatusResponse"
27229
27399
 
@@ -27235,9 +27405,8 @@ components:
27235
27405
  type: string
27236
27406
  enum: [pending, active, claimed]
27237
27407
  redeemed_at:
27238
- type: string
27408
+ type: [string, "null"]
27239
27409
  format: date-time
27240
- nullable: true
27241
27410
 
27242
27411
  ConnectionUsageResponse:
27243
27412
  type: object
@@ -27293,12 +27462,10 @@ components:
27293
27462
  holder_address:
27294
27463
  type: string
27295
27464
  last_value_raw:
27296
- type: string
27297
- nullable: true
27465
+ type: [string, "null"]
27298
27466
  last_checked_at:
27299
- type: string
27467
+ type: [string, "null"]
27300
27468
  format: date-time
27301
- nullable: true
27302
27469
 
27303
27470
  TemplatePreviewRequest:
27304
27471
  type: object
@@ -27350,18 +27517,15 @@ components:
27350
27517
  type: string
27351
27518
  format: date-time
27352
27519
  connection_id:
27353
- type: string
27520
+ type: [string, "null"]
27354
27521
  format: uuid
27355
- nullable: true
27356
27522
 
27357
27523
  InferenceBudgetUnconfiguredResponse:
27358
27524
  type: object
27359
27525
  properties:
27360
27526
  allowance_usd:
27361
- type: string
27362
- nullable: true
27363
- remaining_usd:
27364
- nullable: true
27527
+ type: [string, "null"]
27528
+ remaining_usd: {}
27365
27529
  message:
27366
27530
  type: string
27367
27531
 
@@ -27376,9 +27540,8 @@ components:
27376
27540
  type: string
27377
27541
  format: uuid
27378
27542
  user_id:
27379
- type: string
27543
+ type: [string, "null"]
27380
27544
  format: uuid
27381
- nullable: true
27382
27545
  to_allowlist:
27383
27546
  type: array
27384
27547
  items: { type: string }
@@ -27386,11 +27549,9 @@ components:
27386
27549
  type: array
27387
27550
  items: { type: string }
27388
27551
  max_value_per_tx_eth:
27389
- type: string
27390
- nullable: true
27552
+ type: [string, "null"]
27391
27553
  daily_limit_eth:
27392
- type: string
27393
- nullable: true
27554
+ type: [string, "null"]
27394
27555
  allowed_chains:
27395
27556
  type: array
27396
27557
  items: { type: string }
@@ -27398,27 +27559,20 @@ components:
27398
27559
  type: array
27399
27560
  items: { type: string }
27400
27561
  max_transactions_per_day:
27401
- type: integer
27402
- nullable: true
27562
+ type: [integer, "null"]
27403
27563
  inference_allowance_usd:
27404
- type: string
27405
- nullable: true
27564
+ type: [string, "null"]
27406
27565
  inference_reserved_pct:
27407
- type: integer
27408
- nullable: true
27566
+ type: [integer, "null"]
27409
27567
  inference_hard_stop:
27410
- type: boolean
27411
- nullable: true
27568
+ type: [boolean, "null"]
27412
27569
  inference_allowance_mode:
27413
- type: string
27414
- nullable: true
27570
+ type: [string, "null"]
27415
27571
  max_request_cost_usd:
27416
- type: string
27417
- nullable: true
27572
+ type: [string, "null"]
27418
27573
  human_factor_auth:
27419
- type: object
27574
+ type: [object, "null"]
27420
27575
  additionalProperties: true
27421
- nullable: true
27422
27576
  created_at:
27423
27577
  type: string
27424
27578
  format: date-time
@@ -27441,8 +27595,7 @@ components:
27441
27595
  type: object
27442
27596
  properties:
27443
27597
  require_passkey_above_usd:
27444
- type: string
27445
- nullable: true
27598
+ type: [string, "null"]
27446
27599
  require_passkey_for_new_recipient:
27447
27600
  type: boolean
27448
27601
 
@@ -27518,8 +27671,7 @@ components:
27518
27671
  name:
27519
27672
  type: string
27520
27673
  prf_supported:
27521
- type: boolean
27522
- nullable: true
27674
+ type: [boolean, "null"]
27523
27675
  description: |
27524
27676
  `prf.enabled` from `credential.getClientExtensionResults()` —
27525
27677
  whether this authenticator can derive the secret that wraps a
@@ -27534,9 +27686,8 @@ components:
27534
27686
  enum: [passkey_prf, recovery_code]
27535
27687
  description: Sidecar wraps are stored through `PUT /v1/keys/{key_id}/client-share/holder`.
27536
27688
  credential_id:
27537
- type: string
27689
+ type: [string, "null"]
27538
27690
  format: uuid
27539
- nullable: true
27540
27691
  description: Required for `passkey_prf`; the passkey id from `GET /v1/auth/passkeys`.
27541
27692
  wrapped_share:
27542
27693
  type: string
@@ -27561,13 +27712,11 @@ components:
27561
27712
  type: string
27562
27713
  enum: [passkey_prf, recovery_code, sidecar]
27563
27714
  credential_id:
27564
- type: string
27715
+ type: [string, "null"]
27565
27716
  format: uuid
27566
- nullable: true
27567
27717
  holder_id:
27568
- type: string
27718
+ type: [string, "null"]
27569
27719
  format: uuid
27570
- nullable: true
27571
27720
  wrapped_share:
27572
27721
  type: string
27573
27722
  description: Base64, exactly as stored.
@@ -27599,11 +27748,11 @@ components:
27599
27748
  chain_id: { type: integer }
27600
27749
  safe_address: { type: string }
27601
27750
  passkey_id: { type: string, format: uuid }
27602
- passkey_name: { type: string, nullable: true, description: The owning passkey's name — only that credential can sign for the Safe. }
27603
- passkey_rp_id: { type: string, nullable: true, description: The domain the owning passkey was registered under (WebAuthn rpId); a browser on another domain cannot use it. }
27751
+ passkey_name: { type: [string, "null"], description: The owning passkey's name — only that credential can sign for the Safe. }
27752
+ passkey_rp_id: { type: [string, "null"], description: The domain the owning passkey was registered under (WebAuthn rpId); a browser on another domain cannot use it. }
27604
27753
  custody: { type: string, enum: [passkey_owner] }
27605
27754
  deploy_status: { type: string, enum: [pending, deployed] }
27606
- deploy_tx_hash: { type: string, nullable: true }
27755
+ deploy_tx_hash: { type: [string, "null"] }
27607
27756
  owner_signer: { type: string, description: The SafeWebAuthnSharedSigner address listed as the Safe's owner. }
27608
27757
  created_at: { type: string, format: date-time }
27609
27758
 
@@ -27624,11 +27773,10 @@ components:
27624
27773
  safe_tx_hash: { type: string, description: Hex SafeTx hash — the WebAuthn challenge (raw 32 bytes). }
27625
27774
  credential_id: { type: string }
27626
27775
  transports:
27627
- type: array
27628
- nullable: true
27776
+ type: [array, "null"]
27629
27777
  items: { type: string }
27630
27778
  description: The passkey's registered transports (`internal`, `hybrid`, `usb`…) — pass as the `allowCredentials` hint so the browser asks the right authenticator.
27631
- passkey_name: { type: string, nullable: true }
27779
+ passkey_name: { type: [string, "null"] }
27632
27780
  rp_id: { type: string }
27633
27781
 
27634
27782
  PasskeySafeGrant:
@@ -27643,8 +27791,8 @@ components:
27643
27791
  allowance_amount: { type: string, description: Base units per reset period. }
27644
27792
  reset_time_min: { type: integer }
27645
27793
  status: { type: string, enum: [pending, active, revoking, revoked] }
27646
- setup_tx_hash: { type: string, nullable: true }
27647
- revoke_tx_hash: { type: string, nullable: true }
27794
+ setup_tx_hash: { type: [string, "null"] }
27795
+ revoke_tx_hash: { type: [string, "null"] }
27648
27796
  created_at: { type: string, format: date-time }
27649
27797
 
27650
27798
  PasskeySafeGrantPrepare:
@@ -27785,35 +27933,25 @@ components:
27785
27933
  type: string
27786
27934
  description: "Risk event type (e.g. first_seen, geo_velocity, honeytoken_access)"
27787
27935
  ip:
27788
- type: string
27789
- nullable: true
27936
+ type: [string, "null"]
27790
27937
  asn:
27791
- type: integer
27792
- nullable: true
27938
+ type: [integer, "null"]
27793
27939
  asn_org:
27794
- type: string
27795
- nullable: true
27940
+ type: [string, "null"]
27796
27941
  country_code:
27797
- type: string
27798
- nullable: true
27942
+ type: [string, "null"]
27799
27943
  region:
27800
- type: string
27801
- nullable: true
27944
+ type: [string, "null"]
27802
27945
  city:
27803
- type: string
27804
- nullable: true
27946
+ type: [string, "null"]
27805
27947
  latitude:
27806
- type: number
27807
- nullable: true
27948
+ type: [number, "null"]
27808
27949
  longitude:
27809
- type: number
27810
- nullable: true
27950
+ type: [number, "null"]
27811
27951
  user_agent:
27812
- type: string
27813
- nullable: true
27952
+ type: [string, "null"]
27814
27953
  severity:
27815
- type: string
27816
- nullable: true
27954
+ type: [string, "null"]
27817
27955
  description: "Computed severity at event time (low, medium, high, critical)"
27818
27956
  payload:
27819
27957
  type: object
@@ -27905,14 +28043,12 @@ components:
27905
28043
  type: string
27906
28044
  format: date-time
27907
28045
  notes:
27908
- type: string
27909
- nullable: true
28046
+ type: [string, "null"]
27910
28047
  triggered_count:
27911
28048
  type: integer
27912
28049
  last_triggered_at:
27913
- type: string
28050
+ type: [string, "null"]
27914
28051
  format: date-time
27915
- nullable: true
27916
28052
 
27917
28053
  CreateHoneytokenRequest:
27918
28054
  type: object
@@ -28083,18 +28219,15 @@ components:
28083
28219
  type: boolean
28084
28220
  description: Whether a credential is stored for this binding. The value itself is never returned.
28085
28221
  credential_source_type:
28086
- type: string
28222
+ type: [string, "null"]
28087
28223
  enum: [inline, vault_ref]
28088
- nullable: true
28089
28224
  description: How the credential is sourced — inline (HSM-encrypted copy) or vault_ref (live pointer).
28090
28225
  credential_vault_id:
28091
- type: string
28226
+ type: [string, "null"]
28092
28227
  format: uuid
28093
- nullable: true
28094
28228
  description: For vault_ref credentials — the vault containing the referenced secret.
28095
28229
  credential_path:
28096
- type: string
28097
- nullable: true
28230
+ type: [string, "null"]
28098
28231
  description: For vault_ref credentials — the secret path in the referenced vault.
28099
28232
  created_at:
28100
28233
  type: string
@@ -28112,8 +28245,7 @@ components:
28112
28245
  latency_ms:
28113
28246
  type: integer
28114
28247
  error:
28115
- type: string
28116
- nullable: true
28248
+ type: [string, "null"]
28117
28249
 
28118
28250
  ExecuteRequest:
28119
28251
  type: object
@@ -28157,9 +28289,8 @@ components:
28157
28289
  type: string
28158
28290
  enum: [pending]
28159
28291
  expires_at:
28160
- type: string
28292
+ type: [string, "null"]
28161
28293
  format: date-time
28162
- nullable: true
28163
28294
 
28164
28295
  TxAwaitingApproval:
28165
28296
  type: object
@@ -28172,13 +28303,11 @@ components:
28172
28303
  type: string
28173
28304
  format: uuid
28174
28305
  tx_id:
28175
- type: string
28306
+ type: [string, "null"]
28176
28307
  format: uuid
28177
- nullable: true
28178
28308
  expires_at:
28179
- type: string
28309
+ type: [string, "null"]
28180
28310
  format: date-time
28181
- nullable: true
28182
28311
 
28183
28312
  ExecuteResponse:
28184
28313
  type: object
@@ -28190,12 +28319,10 @@ components:
28190
28319
  status:
28191
28320
  type: string
28192
28321
  result:
28193
- type: object
28322
+ type: [object, "null"]
28194
28323
  additionalProperties: true
28195
- nullable: true
28196
28324
  error:
28197
- type: string
28198
- nullable: true
28325
+ type: [string, "null"]
28199
28326
  duration_ms:
28200
28327
  type: integer
28201
28328
  redactions_applied:
@@ -28225,21 +28352,17 @@ components:
28225
28352
  status:
28226
28353
  type: string
28227
28354
  request_summary:
28228
- type: object
28355
+ type: [object, "null"]
28229
28356
  additionalProperties: true
28230
- nullable: true
28231
28357
  result_summary:
28232
- type: object
28358
+ type: [object, "null"]
28233
28359
  additionalProperties: true
28234
- nullable: true
28235
28360
  error_message:
28236
- type: string
28237
- nullable: true
28361
+ type: [string, "null"]
28238
28362
  duration_ms:
28239
28363
  type: integer
28240
28364
  cost_cents:
28241
- type: integer
28242
- nullable: true
28365
+ type: [integer, "null"]
28243
28366
  redactions_applied:
28244
28367
  type: integer
28245
28368
  created_at:
@@ -28275,9 +28398,8 @@ components:
28275
28398
  default: UTC
28276
28399
  example: UTC
28277
28400
  event_filter:
28278
- type: object
28401
+ type: [object, "null"]
28279
28402
  additionalProperties: true
28280
- nullable: true
28281
28403
  workflow_spec:
28282
28404
  description: |
28283
28405
  Workflow steps. Accepts a bare array `[...]` or
@@ -28327,14 +28449,12 @@ components:
28327
28449
  name:
28328
28450
  type: string
28329
28451
  cron_expr:
28330
- type: string
28331
- nullable: true
28452
+ type: [string, "null"]
28332
28453
  timezone:
28333
28454
  type: string
28334
28455
  event_filter:
28335
- type: object
28456
+ type: [object, "null"]
28336
28457
  additionalProperties: true
28337
- nullable: true
28338
28458
  workflow_spec:
28339
28459
  oneOf:
28340
28460
  - type: array
@@ -28356,7 +28476,6 @@ components:
28356
28476
  type: string
28357
28477
  description: Note recorded on the new spec version.
28358
28478
  webhook_signature:
28359
- nullable: true
28360
28479
  description: |
28361
28480
  Inbound signature scheme for a webhook-triggered automation. `stripe`
28362
28481
  (`Stripe-Signature: t=…,v1=…` over `<t>.<body>`), `github`
@@ -28364,7 +28483,7 @@ components:
28364
28483
  (`<header>: <hex|base64>` over the body). The secret is stored encrypted
28365
28484
  and never returned; `null` removes the scheme. With a scheme set, an
28366
28485
  unsigned or mis-signed delivery starts nothing.
28367
- type: object
28486
+ type: [object, "null"]
28368
28487
  properties:
28369
28488
  scheme:
28370
28489
  type: string
@@ -28401,8 +28520,7 @@ components:
28401
28520
  created_by_type:
28402
28521
  type: string
28403
28522
  note:
28404
- type: string
28405
- nullable: true
28523
+ type: [string, "null"]
28406
28524
  created_at:
28407
28525
  type: string
28408
28526
  format: date-time
@@ -28436,9 +28554,8 @@ components:
28436
28554
  properties:
28437
28555
  id: { type: string, format: uuid }
28438
28556
  org_id:
28439
- type: string
28557
+ type: [string, "null"]
28440
28558
  format: uuid
28441
- nullable: true
28442
28559
  description: Null for a global row.
28443
28560
  provider: { type: string }
28444
28561
  model_pattern: { type: string }
@@ -28500,7 +28617,7 @@ components:
28500
28617
  requests: { type: integer, format: int64 }
28501
28618
  previous_cost_usd: { type: number }
28502
28619
  share_pct: { type: number }
28503
- trend_pct: { type: number, nullable: true }
28620
+ trend_pct: { type: [number, "null"] }
28504
28621
  by_model:
28505
28622
  type: array
28506
28623
  items:
@@ -28515,7 +28632,7 @@ components:
28515
28632
  previous_cost_usd: { type: number }
28516
28633
  priced: { type: boolean }
28517
28634
  share_pct: { type: number }
28518
- trend_pct: { type: number, nullable: true }
28635
+ trend_pct: { type: [number, "null"] }
28519
28636
  by_agent:
28520
28637
  type: array
28521
28638
  items:
@@ -28528,18 +28645,18 @@ components:
28528
28645
  tokens: { type: integer, format: int64 }
28529
28646
  requests: { type: integer, format: int64 }
28530
28647
  blocked: { type: integer, format: int64 }
28531
- top_model: { type: string, nullable: true }
28532
- top_provider: { type: string, nullable: true }
28648
+ top_model: { type: [string, "null"] }
28649
+ top_provider: { type: [string, "null"] }
28533
28650
  previous_cost_usd: { type: number }
28534
- last_request_at: { type: string, format: date-time, nullable: true }
28535
- daily_budget_usd: { type: number, nullable: true }
28651
+ last_request_at: { type: [string, "null"], format: date-time }
28652
+ daily_budget_usd: { type: [number, "null"] }
28536
28653
  today_cost_usd: { type: number }
28537
28654
  blocked_by_budget: { type: integer, format: int64 }
28538
- max_tokens_per_request: { type: integer, format: int64, nullable: true }
28539
- max_requests_per_day: { type: integer, format: int64, nullable: true }
28655
+ max_tokens_per_request: { type: [integer, "null"], format: int64 }
28656
+ max_requests_per_day: { type: [integer, "null"], format: int64 }
28540
28657
  share_pct: { type: number }
28541
- trend_pct: { type: number, nullable: true }
28542
- budget_used_pct: { type: number, nullable: true }
28658
+ trend_pct: { type: [number, "null"] }
28659
+ budget_used_pct: { type: [number, "null"] }
28543
28660
  limits:
28544
28661
  type: object
28545
28662
  properties:
@@ -28557,8 +28674,8 @@ components:
28557
28674
  agent_name: { type: string }
28558
28675
  name: { type: string }
28559
28676
  spent_usd: { type: number }
28560
- cap_usd: { type: number, nullable: true }
28561
- last_used_at: { type: string, format: date-time, nullable: true }
28677
+ cap_usd: { type: [number, "null"] }
28678
+ last_used_at: { type: [string, "null"], format: date-time }
28562
28679
  credit_balance_usd: { type: number }
28563
28680
  inspection_fees_usd: { type: number }
28564
28681
  billing_tier: { type: string }
@@ -28667,8 +28784,7 @@ components:
28667
28784
  index:
28668
28785
  type: integer
28669
28786
  name:
28670
- type: string
28671
- nullable: true
28787
+ type: [string, "null"]
28672
28788
  type:
28673
28789
  type: string
28674
28790
  known:
@@ -28678,8 +28794,7 @@ components:
28678
28794
  additionalProperties: true
28679
28795
  description: The step after template substitution.
28680
28796
  skipped_by:
28681
- type: string
28682
- nullable: true
28797
+ type: [string, "null"]
28683
28798
  effect:
28684
28799
  type: string
28685
28800
  on_error:
@@ -28696,8 +28811,7 @@ components:
28696
28811
  items:
28697
28812
  type: string
28698
28813
  budget_exceeded:
28699
- type: string
28700
- nullable: true
28814
+ type: [string, "null"]
28701
28815
 
28702
28816
  TriggerAutomationRequest:
28703
28817
  type: object
@@ -28729,14 +28843,12 @@ components:
28729
28843
  type: string
28730
28844
  enum: [cron, event, webhook, manual]
28731
28845
  cron_expr:
28732
- type: string
28733
- nullable: true
28846
+ type: [string, "null"]
28734
28847
  timezone:
28735
28848
  type: string
28736
28849
  event_filter:
28737
- type: object
28850
+ type: [object, "null"]
28738
28851
  additionalProperties: true
28739
- nullable: true
28740
28852
  workflow_spec:
28741
28853
  oneOf:
28742
28854
  - type: array
@@ -28748,28 +28860,22 @@ components:
28748
28860
  is_active:
28749
28861
  type: boolean
28750
28862
  last_run_at:
28751
- type: string
28863
+ type: [string, "null"]
28752
28864
  format: date-time
28753
- nullable: true
28754
28865
  next_run_at:
28755
- type: string
28866
+ type: [string, "null"]
28756
28867
  format: date-time
28757
- nullable: true
28758
28868
  last_run_status:
28759
- type: string
28760
- nullable: true
28869
+ type: [string, "null"]
28761
28870
  description: Status of the most recent run (enriched list field)
28762
28871
  total_runs:
28763
- type: integer
28764
- nullable: true
28872
+ type: [integer, "null"]
28765
28873
  description: Total runs in the last 30 days (enriched list field)
28766
28874
  success_rate:
28767
- type: number
28768
- nullable: true
28875
+ type: [number, "null"]
28769
28876
  description: Success rate percentage (enriched list field)
28770
28877
  agent_name:
28771
- type: string
28772
- nullable: true
28878
+ type: [string, "null"]
28773
28879
  description: Resolved agent display name (enriched list field)
28774
28880
  created_by_type:
28775
28881
  type: string
@@ -28785,8 +28891,7 @@ components:
28785
28891
  type: integer
28786
28892
  description: Current `automation_versions` version.
28787
28893
  webhook_signature_scheme:
28788
- type: string
28789
- nullable: true
28894
+ type: [string, "null"]
28790
28895
  description: Inbound signature scheme name, never the secret.
28791
28896
 
28792
28897
  AutomationCreatedResponse:
@@ -28833,12 +28938,10 @@ components:
28833
28938
  items:
28834
28939
  type: string
28835
28940
  runtime_id:
28836
- type: string
28941
+ type: [string, "null"]
28837
28942
  format: uuid
28838
- nullable: true
28839
28943
  runtime_status:
28840
- type: string
28841
- nullable: true
28944
+ type: [string, "null"]
28842
28945
  cli_hint:
28843
28946
  type: string
28844
28947
 
@@ -28872,55 +28975,42 @@ components:
28872
28975
  are parked states: the run's clock is stopped and it continues when the
28873
28976
  approval is decided, the wake time passes, or the callback URL is posted to.
28874
28977
  paused_reason:
28875
- type: string
28876
- nullable: true
28978
+ type: [string, "null"]
28877
28979
  enum: [approval, wait_until, callback]
28878
28980
  paused_at_step:
28879
- type: integer
28880
- nullable: true
28981
+ type: [integer, "null"]
28881
28982
  paused_approval_id:
28882
- type: string
28983
+ type: [string, "null"]
28883
28984
  format: uuid
28884
- nullable: true
28885
28985
  paused_until:
28886
- type: string
28986
+ type: [string, "null"]
28887
28987
  format: date-time
28888
- nullable: true
28889
28988
  paused_expires_at:
28890
- type: string
28989
+ type: [string, "null"]
28891
28990
  format: date-time
28892
- nullable: true
28893
28991
  spec_version:
28894
- type: integer
28895
- nullable: true
28992
+ type: [integer, "null"]
28896
28993
  idempotency_key:
28897
- type: string
28898
- nullable: true
28994
+ type: [string, "null"]
28899
28995
  parent_run_id:
28900
- type: string
28996
+ type: [string, "null"]
28901
28997
  format: uuid
28902
- nullable: true
28903
28998
  description: Set when a `call_automation` step started this run.
28904
- step_results:
28905
- nullable: true
28999
+ step_results: {}
28906
29000
  error:
28907
- type: string
28908
- nullable: true
29001
+ type: [string, "null"]
28909
29002
  trigger_source:
28910
- type: string
28911
- nullable: true
29003
+ type: [string, "null"]
28912
29004
  context:
28913
- type: object
29005
+ type: [object, "null"]
28914
29006
  additionalProperties: true
28915
- nullable: true
28916
29007
  description: JSONB context passed between workflow steps
28917
29008
  started_at:
28918
29009
  type: string
28919
29010
  format: date-time
28920
29011
  finished_at:
28921
- type: string
29012
+ type: [string, "null"]
28922
29013
  format: date-time
28923
- nullable: true
28924
29014
  tokens_used:
28925
29015
  type: integer
28926
29016
  cost_cents:
@@ -28953,8 +29043,7 @@ components:
28953
29043
  trigger_type:
28954
29044
  type: string
28955
29045
  cron_expr:
28956
- type: string
28957
- nullable: true
29046
+ type: [string, "null"]
28958
29047
  workflow_spec:
28959
29048
  type: object
28960
29049
  additionalProperties: true
@@ -29037,12 +29126,11 @@ components:
29037
29126
  type: object
29038
29127
  properties:
29039
29128
  schedule:
29040
- nullable: true
29041
29129
  description: |
29042
29130
  Scheduled start/stop: start the container when `start_cron` fires (IANA
29043
29131
  `timezone`, default UTC) and stop it `stop_after_secs` later (60–86400; null
29044
29132
  leaves it to the idle reconciler). `null` clears the schedule.
29045
- type: object
29133
+ type: [object, "null"]
29046
29134
  properties:
29047
29135
  start_cron:
29048
29136
  type: string
@@ -29050,8 +29138,7 @@ components:
29050
29138
  type: string
29051
29139
  default: UTC
29052
29140
  stop_after_secs:
29053
- type: integer
29054
- nullable: true
29141
+ type: [integer, "null"]
29055
29142
  name:
29056
29143
  type: string
29057
29144
  template:
@@ -29090,24 +29177,19 @@ components:
29090
29177
  required: [id, name, agent_id, status, created_at, updated_at]
29091
29178
  properties:
29092
29179
  previous_image_digest:
29093
- type: string
29094
- nullable: true
29180
+ type: [string, "null"]
29095
29181
  image_digest:
29096
- type: string
29097
- nullable: true
29182
+ type: [string, "null"]
29098
29183
  description: Resolved image (digest form when the provider reports one); runtime-minted agent tokens carry it as `runtime_image`, which access policies can require via `conditions.runtime_image_in`.
29099
29184
  schedule:
29100
- type: object
29101
- nullable: true
29185
+ type: [object, "null"]
29102
29186
  additionalProperties: true
29103
29187
  next_scheduled_start_at:
29104
- type: string
29188
+ type: [string, "null"]
29105
29189
  format: date-time
29106
- nullable: true
29107
29190
  scheduled_stop_at:
29108
- type: string
29191
+ type: [string, "null"]
29109
29192
  format: date-time
29110
- nullable: true
29111
29193
  id:
29112
29194
  type: string
29113
29195
  format: uuid
@@ -29117,48 +29199,36 @@ components:
29117
29199
  type: string
29118
29200
  format: uuid
29119
29201
  template:
29120
- type: string
29121
- nullable: true
29202
+ type: [string, "null"]
29122
29203
  preset:
29123
- type: string
29124
- nullable: true
29204
+ type: [string, "null"]
29125
29205
  provider:
29126
- type: string
29127
- nullable: true
29206
+ type: [string, "null"]
29128
29207
  status:
29129
29208
  type: string
29130
29209
  enum: [creating, running, stopping, stopped, failed, deleting]
29131
29210
  image:
29132
- type: string
29133
- nullable: true
29211
+ type: [string, "null"]
29134
29212
  environment:
29135
- type: string
29136
- nullable: true
29213
+ type: [string, "null"]
29137
29214
  description: Vault environment for env var resolution
29138
29215
  env_public:
29139
- type: object
29216
+ type: [object, "null"]
29140
29217
  additionalProperties:
29141
29218
  type: string
29142
- nullable: true
29143
29219
  idle_timeout_secs:
29144
- type: integer
29145
- nullable: true
29220
+ type: [integer, "null"]
29146
29221
  expose_http:
29147
- type: boolean
29148
- nullable: true
29222
+ type: [boolean, "null"]
29149
29223
  slug:
29150
- type: string
29151
- nullable: true
29224
+ type: [string, "null"]
29152
29225
  public_url:
29153
- type: string
29154
- nullable: true
29226
+ type: [string, "null"]
29155
29227
  http_port:
29156
- type: integer
29157
- nullable: true
29228
+ type: [integer, "null"]
29158
29229
  inbound_auth:
29159
- type: string
29230
+ type: [string, "null"]
29160
29231
  enum: [api_key, jwt, public]
29161
- nullable: true
29162
29232
  shell_access_enabled:
29163
29233
  type: boolean
29164
29234
  shell_auth_policy:
@@ -29166,8 +29236,7 @@ components:
29166
29236
  shell_max_session_minutes:
29167
29237
  type: integer
29168
29238
  monthly_hours_used:
29169
- type: number
29170
- nullable: true
29239
+ type: [number, "null"]
29171
29240
  has_paid_addon:
29172
29241
  type: boolean
29173
29242
  description: Whether this runtime has a paid Stripe add-on (unlimited hours).
@@ -29213,8 +29282,7 @@ components:
29213
29282
  slug:
29214
29283
  type: string
29215
29284
  reason:
29216
- type: string
29217
- nullable: true
29285
+ type: [string, "null"]
29218
29286
 
29219
29287
  ShellSessionRequest:
29220
29288
  type: object
@@ -29299,9 +29367,8 @@ components:
29299
29367
  type: string
29300
29368
  format: date-time
29301
29369
  ttl_expires_at:
29302
- type: string
29370
+ type: [string, "null"]
29303
29371
  format: date-time
29304
- nullable: true
29305
29372
 
29306
29373
  PutMemoryRequest:
29307
29374
  type: object
@@ -29310,8 +29377,7 @@ components:
29310
29377
  value:
29311
29378
  type: string
29312
29379
  ttl_seconds:
29313
- type: integer
29314
- nullable: true
29380
+ type: [integer, "null"]
29315
29381
 
29316
29382
  MemorySearchRequest:
29317
29383
  type: object
@@ -29373,18 +29439,15 @@ components:
29373
29439
  name:
29374
29440
  type: string
29375
29441
  description:
29376
- type: string
29377
- nullable: true
29442
+ type: [string, "null"]
29378
29443
  capabilities:
29379
29444
  type: array
29380
29445
  items:
29381
29446
  type: string
29382
29447
  a2a_url:
29383
- type: string
29384
- nullable: true
29448
+ type: [string, "null"]
29385
29449
  mcp_url:
29386
- type: string
29387
- nullable: true
29450
+ type: [string, "null"]
29388
29451
  tags:
29389
29452
  type: array
29390
29453
  items:
@@ -29400,8 +29463,7 @@ components:
29400
29463
  name:
29401
29464
  type: string
29402
29465
  description:
29403
- type: string
29404
- nullable: true
29466
+ type: [string, "null"]
29405
29467
  tags:
29406
29468
  type: array
29407
29469
  items:
@@ -29411,14 +29473,11 @@ components:
29411
29473
  items:
29412
29474
  type: string
29413
29475
  a2a_url:
29414
- type: string
29415
- nullable: true
29476
+ type: [string, "null"]
29416
29477
  mcp_url:
29417
- type: string
29418
- nullable: true
29478
+ type: [string, "null"]
29419
29479
  org_name:
29420
- type: string
29421
- nullable: true
29480
+ type: [string, "null"]
29422
29481
 
29423
29482
  DirectoryResponse:
29424
29483
  type: object
@@ -29451,11 +29510,9 @@ components:
29451
29510
  items:
29452
29511
  type: string
29453
29512
  a2a_url:
29454
- type: string
29455
- nullable: true
29513
+ type: [string, "null"]
29456
29514
  mcp_url:
29457
- type: string
29458
- nullable: true
29515
+ type: [string, "null"]
29459
29516
  intents_api_enabled:
29460
29517
  type: boolean
29461
29518
  execution_intents_enabled:
@@ -29695,9 +29752,8 @@ components:
29695
29752
  is_active:
29696
29753
  type: boolean
29697
29754
  config:
29698
- type: object
29755
+ type: [object, "null"]
29699
29756
  additionalProperties: true
29700
- nullable: true
29701
29757
  description: |
29702
29758
  Channel-specific configuration JSON. May include:
29703
29759
  - sender_allowlist (array of strings): restrict which external senders can trigger the agent
@@ -29712,18 +29768,16 @@ components:
29712
29768
  type: boolean
29713
29769
  description: Whether voice message transcription is enabled
29714
29770
  unified_conversation_id:
29715
- type: string
29771
+ type: [string, "null"]
29716
29772
  format: uuid
29717
- nullable: true
29718
29773
  description: ID linking this channel to a unified cross-platform conversation
29719
29774
  is_home_platform:
29720
29775
  type: boolean
29721
29776
  description: Whether this is the agent's home platform channel
29722
29777
  sender_allowlist:
29723
- type: array
29778
+ type: [array, "null"]
29724
29779
  items:
29725
29780
  type: string
29726
- nullable: true
29727
29781
  description: List of allowed sender IDs for auto-respond
29728
29782
  auto_respond_enabled:
29729
29783
  type: boolean
@@ -29782,16 +29836,13 @@ components:
29782
29836
  type: boolean
29783
29837
  description: Whether this message was a voice message
29784
29838
  voice_file_id:
29785
- type: string
29786
- nullable: true
29839
+ type: [string, "null"]
29787
29840
  description: Telegram voice file ID
29788
29841
  voice_duration_secs:
29789
- type: integer
29790
- nullable: true
29842
+ type: [integer, "null"]
29791
29843
  description: Duration of voice message in seconds
29792
29844
  transcription_status:
29793
- type: string
29794
- nullable: true
29845
+ type: [string, "null"]
29795
29846
  enum: [pending, completed, failed]
29796
29847
  description: Status of voice transcription
29797
29848
  created_at:
@@ -29846,17 +29897,15 @@ components:
29846
29897
  items:
29847
29898
  type: string
29848
29899
  extra_auth_params:
29849
- type: object
29900
+ type: [object, "null"]
29850
29901
  additionalProperties:
29851
29902
  type: string
29852
- nullable: true
29853
29903
  requires_app_credentials:
29854
29904
  type: boolean
29855
29905
  description: Whether custom app credentials are required (vs. shared 1Claw app)
29856
29906
  documentation_url:
29857
- type: string
29907
+ type: [string, "null"]
29858
29908
  format: uri
29859
- nullable: true
29860
29909
 
29861
29910
  OAuthProviderListResponse:
29862
29911
  type: object
@@ -29949,9 +29998,8 @@ components:
29949
29998
  client_id:
29950
29999
  type: string
29951
30000
  redirect_uri:
29952
- type: string
30001
+ type: [string, "null"]
29953
30002
  format: uri
29954
- nullable: true
29955
30003
  created_at:
29956
30004
  type: string
29957
30005
  format: date-time
@@ -30339,9 +30387,8 @@ components:
30339
30387
  type: string
30340
30388
  enum: [narrowing, widening, neutral]
30341
30389
  approval_id:
30342
- type: string
30390
+ type: [string, "null"]
30343
30391
  format: uuid
30344
- nullable: true
30345
30392
  created_at:
30346
30393
  type: string
30347
30394
  format: date-time
@@ -31314,8 +31361,7 @@ components:
31314
31361
  safe_address:
31315
31362
  type: string
31316
31363
  nonce:
31317
- type: integer
31318
- nullable: true
31364
+ type: [integer, "null"]
31319
31365
  created_at:
31320
31366
  type: string
31321
31367
  format: date-time
@@ -31337,22 +31383,18 @@ components:
31337
31383
  items:
31338
31384
  type: string
31339
31385
  git_branch:
31340
- type: string
31341
- nullable: true
31386
+ type: [string, "null"]
31342
31387
  sensitive:
31343
31388
  type: boolean
31344
31389
  comment:
31345
- type: string
31346
- nullable: true
31390
+ type: [string, "null"]
31347
31391
  value:
31348
- type: string
31349
- nullable: true
31392
+ type: [string, "null"]
31350
31393
  description: Null for sensitive vars in list responses
31351
31394
  version:
31352
31395
  type: integer
31353
31396
  created_by:
31354
- type: string
31355
- nullable: true
31397
+ type: [string, "null"]
31356
31398
  created_at:
31357
31399
  type: string
31358
31400
  format: date-time
@@ -31412,8 +31454,7 @@ components:
31412
31454
  environment:
31413
31455
  type: string
31414
31456
  git_branch:
31415
- type: string
31416
- nullable: true
31457
+ type: [string, "null"]
31417
31458
  resolved_at:
31418
31459
  type: string
31419
31460
  format: date-time
@@ -31427,13 +31468,11 @@ components:
31427
31468
  slug:
31428
31469
  type: string
31429
31470
  description:
31430
- type: string
31431
- nullable: true
31471
+ type: [string, "null"]
31432
31472
  is_builtin:
31433
31473
  type: boolean
31434
31474
  copied_from:
31435
- type: string
31436
- nullable: true
31475
+ type: [string, "null"]
31437
31476
  is_detached:
31438
31477
  type: boolean
31439
31478
  created_at:
@@ -31468,11 +31507,9 @@ components:
31468
31507
  sensitive:
31469
31508
  type: boolean
31470
31509
  comment:
31471
- type: string
31472
- nullable: true
31510
+ type: [string, "null"]
31473
31511
  value:
31474
- type: string
31475
- nullable: true
31512
+ type: [string, "null"]
31476
31513
  version:
31477
31514
  type: integer
31478
31515
  linked_vaults:
@@ -31531,9 +31568,8 @@ components:
31531
31568
  enum: [wallet, platform_app, org]
31532
31569
  description: Policy scope — org-wide, platform app, or single wallet
31533
31570
  scope_id:
31534
- type: string
31571
+ type: [string, "null"]
31535
31572
  format: uuid
31536
- nullable: true
31537
31573
  description: Wallet or platform app UUID when scope_type is not org
31538
31574
  principal_type:
31539
31575
  type: string
@@ -31587,9 +31623,8 @@ components:
31587
31623
  scope_type:
31588
31624
  type: string
31589
31625
  scope_id:
31590
- type: string
31626
+ type: [string, "null"]
31591
31627
  format: uuid
31592
- nullable: true
31593
31628
  principal_type:
31594
31629
  type: string
31595
31630
  principal_id:
@@ -31609,19 +31644,16 @@ components:
31609
31644
  items:
31610
31645
  type: string
31611
31646
  max_value_per_tx_eth:
31612
- type: string
31613
- nullable: true
31647
+ type: [string, "null"]
31614
31648
  daily_limit_eth:
31615
- type: string
31616
- nullable: true
31649
+ type: [string, "null"]
31617
31650
  conditions:
31618
31651
  type: object
31619
31652
  is_active:
31620
31653
  type: boolean
31621
31654
  expires_at:
31622
- type: string
31655
+ type: [string, "null"]
31623
31656
  format: date-time
31624
- nullable: true
31625
31657
  created_by:
31626
31658
  type: string
31627
31659
  format: uuid
@@ -31689,8 +31721,7 @@ components:
31689
31721
  type: string
31690
31722
  enum: [approved]
31691
31723
  recovery_code:
31692
- type: string
31693
- nullable: true
31724
+ type: [string, "null"]
31694
31725
  description: One-time recovery code (only present for certain recovery types)
31695
31726
 
31696
31727
  CredentialRecoveryExecuteResponse:
@@ -31797,20 +31828,15 @@ components:
31797
31828
  configured:
31798
31829
  type: boolean
31799
31830
  kek_id:
31800
- type: string
31801
- nullable: true
31831
+ type: [string, "null"]
31802
31832
  threshold:
31803
- type: integer
31804
- nullable: true
31833
+ type: [integer, "null"]
31805
31834
  total_shares:
31806
- type: integer
31807
- nullable: true
31835
+ type: [integer, "null"]
31808
31836
  custody_mode:
31809
- type: string
31810
- nullable: true
31837
+ type: [string, "null"]
31811
31838
  custodians:
31812
- type: array
31813
- nullable: true
31839
+ type: [array, "null"]
31814
31840
  items:
31815
31841
  type: object
31816
31842
  properties:
@@ -31820,9 +31846,8 @@ components:
31820
31846
  share_provided:
31821
31847
  type: boolean
31822
31848
  created_at:
31823
- type: string
31849
+ type: [string, "null"]
31824
31850
  format: date-time
31825
- nullable: true
31826
31851
 
31827
31852
  ShamirKekReconstructRequest:
31828
31853
  type: object
@@ -31869,3 +31894,78 @@ components:
31869
31894
  properties:
31870
31895
  valid:
31871
31896
  type: boolean
31897
+
31898
+ GrowthCountBucket:
31899
+ type: object
31900
+ required: [bucket, count]
31901
+ properties:
31902
+ bucket:
31903
+ type: string
31904
+ format: date-time
31905
+ count:
31906
+ type: integer
31907
+
31908
+ GrowthTimeseriesResponse:
31909
+ type: object
31910
+ required: [vertical, period, bucket_unit, points, total, prior_total]
31911
+ properties:
31912
+ vertical:
31913
+ type: string
31914
+ period:
31915
+ type: string
31916
+ bucket_unit:
31917
+ type: string
31918
+ enum: [hour, day, week]
31919
+ points:
31920
+ type: array
31921
+ items:
31922
+ $ref: "#/components/schemas/GrowthCountBucket"
31923
+ total:
31924
+ type: integer
31925
+ prior_total:
31926
+ type: integer
31927
+ delta_pct:
31928
+ type: [number, "null"]
31929
+ description: Null when both the current and prior totals are 0.
31930
+ notes:
31931
+ type: [string, "null"]
31932
+ description: >
31933
+ A known limitation worth surfacing for this vertical (e.g.
31934
+ a source table with no org_id to exclude test-fixture
31935
+ activity from). Null for the clean verticals.
31936
+
31937
+ RetentionResponse:
31938
+ type: object
31939
+ required: [window_days, cohort_orgs, retained_orgs]
31940
+ properties:
31941
+ window_days:
31942
+ type: integer
31943
+ cohort_orgs:
31944
+ type: integer
31945
+ retained_orgs:
31946
+ type: integer
31947
+ retention_pct:
31948
+ type: [number, "null"]
31949
+ description: Null when there is no cohort yet (platform younger than the window).
31950
+
31951
+ WebSearchResult:
31952
+ type: object
31953
+ required: [title, url, snippet]
31954
+ properties:
31955
+ title:
31956
+ type: string
31957
+ url:
31958
+ type: string
31959
+ snippet:
31960
+ type: string
31961
+
31962
+ WebSearchResponse:
31963
+ type: object
31964
+ required: [results, provider]
31965
+ properties:
31966
+ results:
31967
+ type: array
31968
+ items:
31969
+ $ref: "#/components/schemas/WebSearchResult"
31970
+ provider:
31971
+ type: string