@1claw/openapi-spec 0.56.3 → 0.58.0

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 +1245 -14
  2. package/openapi.yaml +826 -31
  3. package/package.json +1 -1
package/openapi.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "openapi": "3.1.0",
3
3
  "info": {
4
4
  "title": "1Claw API",
5
- "version": "0.56.3",
5
+ "version": "0.58.0",
6
6
  "description": "Secure secret management for AI agents. Provides vaults, secrets,\npolicy-based access control, agent identity, Intents API,\nsharing, billing, and audit logging. Automations (workflow_spec,\nwebhook tokens, event triggers, Assist), cloud runtimes with\ninteractive shell sessions, agent memory, and discovery.\n\nAll endpoints require JWT Bearer authentication unless marked with\n`security: []`.\n",
7
7
  "contact": {
8
8
  "email": "ops@1claw.xyz"
@@ -1404,6 +1404,9 @@
1404
1404
  "require_passkey_for_vaults": {
1405
1405
  "type": "boolean"
1406
1406
  },
1407
+ "require_passkey_for_mfa": {
1408
+ "type": "boolean"
1409
+ },
1407
1410
  "passkey_count": {
1408
1411
  "type": "integer"
1409
1412
  }
@@ -1419,7 +1422,7 @@
1419
1422
  "Authentication"
1420
1423
  ],
1421
1424
  "summary": "Update user security settings",
1422
- "description": "Disabling `require_passkey_for_vaults` requires `X-Auth-Confirm`\n(purpose `security.vault_passkey.disable`) with a passkey or TOTP\nwhen either is enrolled.\n",
1425
+ "description": "Disabling `require_passkey_for_vaults` requires `X-Auth-Confirm`\n(purpose `security.vault_passkey.disable`) with a passkey or TOTP\nwhen either is enrolled.\n\nDisabling `require_passkey_for_mfa` requires `X-Auth-Confirm`\n(purpose `security.mfa_passkey.disable`) with a passkey or TOTP\nwhen either is enrolled.\n",
1423
1426
  "operationId": "updateSecuritySettings",
1424
1427
  "parameters": [
1425
1428
  {
@@ -1440,6 +1443,9 @@
1440
1443
  "properties": {
1441
1444
  "require_passkey_for_vaults": {
1442
1445
  "type": "boolean"
1446
+ },
1447
+ "require_passkey_for_mfa": {
1448
+ "type": "boolean"
1443
1449
  }
1444
1450
  }
1445
1451
  }
@@ -1624,6 +1630,84 @@
1624
1630
  }
1625
1631
  }
1626
1632
  },
1633
+ "/v1/auth/mfa/passkey/begin": {
1634
+ "post": {
1635
+ "tags": [
1636
+ "Authentication"
1637
+ ],
1638
+ "summary": "Begin passkey MFA verification during login",
1639
+ "operationId": "mfaPasskeyBegin",
1640
+ "security": [],
1641
+ "requestBody": {
1642
+ "required": true,
1643
+ "content": {
1644
+ "application/json": {
1645
+ "schema": {
1646
+ "type": "object",
1647
+ "required": [
1648
+ "mfa_token"
1649
+ ],
1650
+ "properties": {
1651
+ "mfa_token": {
1652
+ "type": "string"
1653
+ }
1654
+ }
1655
+ }
1656
+ }
1657
+ }
1658
+ },
1659
+ "responses": {
1660
+ "200": {
1661
+ "description": "WebAuthn challenge",
1662
+ "content": {
1663
+ "application/json": {
1664
+ "schema": {
1665
+ "$ref": "#/components/schemas/PasskeyAssertBeginResponse"
1666
+ }
1667
+ }
1668
+ }
1669
+ },
1670
+ "400": {
1671
+ "$ref": "#/components/responses/BadRequest"
1672
+ }
1673
+ }
1674
+ }
1675
+ },
1676
+ "/v1/auth/mfa/passkey/complete": {
1677
+ "post": {
1678
+ "tags": [
1679
+ "Authentication"
1680
+ ],
1681
+ "summary": "Complete passkey MFA verification during login",
1682
+ "operationId": "mfaPasskeyComplete",
1683
+ "security": [],
1684
+ "requestBody": {
1685
+ "required": true,
1686
+ "content": {
1687
+ "application/json": {
1688
+ "schema": {
1689
+ "$ref": "#/components/schemas/MfaPasskeyCompleteRequest"
1690
+ }
1691
+ }
1692
+ }
1693
+ },
1694
+ "responses": {
1695
+ "200": {
1696
+ "description": "MFA verified, JWT issued",
1697
+ "content": {
1698
+ "application/json": {
1699
+ "schema": {
1700
+ "$ref": "#/components/schemas/TokenResponse"
1701
+ }
1702
+ }
1703
+ }
1704
+ },
1705
+ "401": {
1706
+ "$ref": "#/components/responses/Unauthorized"
1707
+ }
1708
+ }
1709
+ }
1710
+ },
1627
1711
  "/v1/auth/mfa": {
1628
1712
  "delete": {
1629
1713
  "tags": [
@@ -8557,6 +8641,43 @@
8557
8641
  }
8558
8642
  }
8559
8643
  },
8644
+ "/v1/treasury/wallets/inference-budget": {
8645
+ "get": {
8646
+ "tags": [
8647
+ "Treasury Wallets"
8648
+ ],
8649
+ "summary": "Get inference budget for current user",
8650
+ "description": "Returns the user's remaining LLM inference allowance when connected via a platform app.\nIncludes allowance, spent, remaining USD, per-request cap, and billing period end.\n",
8651
+ "operationId": "getUserInferenceBudget",
8652
+ "security": [
8653
+ {
8654
+ "BearerAuth": []
8655
+ }
8656
+ ],
8657
+ "responses": {
8658
+ "200": {
8659
+ "description": "Inference budget (or unconfigured message)",
8660
+ "content": {
8661
+ "application/json": {
8662
+ "schema": {
8663
+ "oneOf": [
8664
+ {
8665
+ "$ref": "#/components/schemas/InferenceBudgetResponse"
8666
+ },
8667
+ {
8668
+ "$ref": "#/components/schemas/InferenceBudgetUnconfiguredResponse"
8669
+ }
8670
+ ]
8671
+ }
8672
+ }
8673
+ }
8674
+ },
8675
+ "403": {
8676
+ "$ref": "#/components/responses/Forbidden"
8677
+ }
8678
+ }
8679
+ }
8680
+ },
8560
8681
  "/v1/webhooks": {
8561
8682
  "post": {
8562
8683
  "tags": [
@@ -9527,8 +9648,15 @@
9527
9648
  }
9528
9649
  ],
9529
9650
  "responses": {
9530
- "204": {
9531
- "description": "Deleted"
9651
+ "200": {
9652
+ "description": "Soft-deleted; slug released for reuse within the org",
9653
+ "content": {
9654
+ "application/json": {
9655
+ "schema": {
9656
+ "$ref": "#/components/schemas/PlatformAppDeleteResponse"
9657
+ }
9658
+ }
9659
+ }
9532
9660
  },
9533
9661
  "403": {
9534
9662
  "description": "Only human users can delete platform apps"
@@ -9536,6 +9664,71 @@
9536
9664
  }
9537
9665
  }
9538
9666
  },
9667
+ "/v1/platform/apps/{appId}/transfer-ownership": {
9668
+ "post": {
9669
+ "tags": [
9670
+ "Platform"
9671
+ ],
9672
+ "summary": "Transfer platform app to another organization",
9673
+ "description": "Moves the platform app record to another organization. Requires org\nowner/admin in the source org and step-up auth (`X-Auth-Confirm`,\npurpose `platform.app.transfer`). End-user connections and provisioned\nresources remain in their original organizations.\n",
9674
+ "operationId": "transferPlatformAppOwnership",
9675
+ "security": [
9676
+ {
9677
+ "BearerAuth": []
9678
+ }
9679
+ ],
9680
+ "parameters": [
9681
+ {
9682
+ "in": "path",
9683
+ "name": "appId",
9684
+ "required": true,
9685
+ "schema": {
9686
+ "type": "string",
9687
+ "format": "uuid"
9688
+ }
9689
+ },
9690
+ {
9691
+ "in": "header",
9692
+ "name": "X-Auth-Confirm",
9693
+ "required": true,
9694
+ "schema": {
9695
+ "type": "string"
9696
+ }
9697
+ }
9698
+ ],
9699
+ "requestBody": {
9700
+ "required": true,
9701
+ "content": {
9702
+ "application/json": {
9703
+ "schema": {
9704
+ "$ref": "#/components/schemas/TransferPlatformAppOwnershipRequest"
9705
+ }
9706
+ }
9707
+ }
9708
+ },
9709
+ "responses": {
9710
+ "200": {
9711
+ "description": "Ownership transferred",
9712
+ "content": {
9713
+ "application/json": {
9714
+ "schema": {
9715
+ "$ref": "#/components/schemas/TransferPlatformAppOwnershipResponse"
9716
+ }
9717
+ }
9718
+ }
9719
+ },
9720
+ "400": {
9721
+ "$ref": "#/components/responses/BadRequest"
9722
+ },
9723
+ "403": {
9724
+ "$ref": "#/components/responses/Forbidden"
9725
+ },
9726
+ "404": {
9727
+ "$ref": "#/components/responses/NotFound"
9728
+ }
9729
+ }
9730
+ }
9731
+ },
9539
9732
  "/v1/platform/apps/{appId}/rotate-key": {
9540
9733
  "post": {
9541
9734
  "tags": [
@@ -9907,6 +10100,65 @@
9907
10100
  }
9908
10101
  }
9909
10102
  },
10103
+ "/v1/platform/apps/{appId}/templates/{template_id}/preview": {
10104
+ "post": {
10105
+ "tags": [
10106
+ "Platform"
10107
+ ],
10108
+ "summary": "Preview resolved template spec",
10109
+ "description": "Resolves `{{params.*}}` and `{{subject.*}}` placeholders in a template spec\nwithout provisioning resources. Useful for validating parameterized bootstrap templates.\n",
10110
+ "security": [
10111
+ {
10112
+ "BearerAuth": []
10113
+ }
10114
+ ],
10115
+ "parameters": [
10116
+ {
10117
+ "in": "path",
10118
+ "name": "appId",
10119
+ "required": true,
10120
+ "schema": {
10121
+ "type": "string",
10122
+ "format": "uuid"
10123
+ }
10124
+ },
10125
+ {
10126
+ "in": "path",
10127
+ "name": "template_id",
10128
+ "required": true,
10129
+ "schema": {
10130
+ "type": "string",
10131
+ "format": "uuid"
10132
+ }
10133
+ }
10134
+ ],
10135
+ "requestBody": {
10136
+ "required": false,
10137
+ "content": {
10138
+ "application/json": {
10139
+ "schema": {
10140
+ "$ref": "#/components/schemas/TemplatePreviewRequest"
10141
+ }
10142
+ }
10143
+ }
10144
+ },
10145
+ "responses": {
10146
+ "200": {
10147
+ "description": "Resolved template spec",
10148
+ "content": {
10149
+ "application/json": {
10150
+ "schema": {
10151
+ "$ref": "#/components/schemas/TemplatePreviewResponse"
10152
+ }
10153
+ }
10154
+ }
10155
+ },
10156
+ "404": {
10157
+ "$ref": "#/components/responses/NotFound"
10158
+ }
10159
+ }
10160
+ }
10161
+ },
9910
10162
  "/v1/platform/users/upsert": {
9911
10163
  "post": {
9912
10164
  "tags": [
@@ -9963,6 +10215,45 @@
9963
10215
  }
9964
10216
  }
9965
10217
  },
10218
+ "/v1/platform/siwe/challenge": {
10219
+ "post": {
10220
+ "tags": [
10221
+ "Platform"
10222
+ ],
10223
+ "summary": "Issue SIWE nonce",
10224
+ "description": "Creates a one-time nonce for Sign-In With Ethereum user provisioning.\nRequires platform (`plt_`) authentication. The nonce expires in 5 minutes.\n",
10225
+ "security": [
10226
+ {
10227
+ "BearerAuth": []
10228
+ }
10229
+ ],
10230
+ "requestBody": {
10231
+ "required": false,
10232
+ "content": {
10233
+ "application/json": {
10234
+ "schema": {
10235
+ "$ref": "#/components/schemas/SiweChallengeRequest"
10236
+ }
10237
+ }
10238
+ }
10239
+ },
10240
+ "responses": {
10241
+ "200": {
10242
+ "description": "Nonce issued",
10243
+ "content": {
10244
+ "application/json": {
10245
+ "schema": {
10246
+ "$ref": "#/components/schemas/SiweChallengeResponse"
10247
+ }
10248
+ }
10249
+ }
10250
+ },
10251
+ "400": {
10252
+ "description": "SIWE domain not configured"
10253
+ }
10254
+ }
10255
+ }
10256
+ },
9966
10257
  "/v1/platform/apps/{appId}/users": {
9967
10258
  "get": {
9968
10259
  "tags": [
@@ -10125,7 +10416,160 @@
10125
10416
  }
10126
10417
  }
10127
10418
  },
10128
- "/v1/platform/apps/{appId}/audit": {
10419
+ "/v1/platform/connections/{connectionId}": {
10420
+ "get": {
10421
+ "tags": [
10422
+ "Platform"
10423
+ ],
10424
+ "summary": "Get connection details",
10425
+ "description": "Returns connection status, claim state, wallet address, and provisioned resource IDs.\nUse for polling the claim loop after bootstrap.\n",
10426
+ "security": [
10427
+ {
10428
+ "BearerAuth": []
10429
+ }
10430
+ ],
10431
+ "parameters": [
10432
+ {
10433
+ "in": "path",
10434
+ "name": "connectionId",
10435
+ "required": true,
10436
+ "schema": {
10437
+ "type": "string",
10438
+ "format": "uuid"
10439
+ }
10440
+ }
10441
+ ],
10442
+ "responses": {
10443
+ "200": {
10444
+ "description": "Connection details",
10445
+ "content": {
10446
+ "application/json": {
10447
+ "schema": {
10448
+ "$ref": "#/components/schemas/ConnectionDetailResponse"
10449
+ }
10450
+ }
10451
+ }
10452
+ },
10453
+ "404": {
10454
+ "$ref": "#/components/responses/NotFound"
10455
+ }
10456
+ }
10457
+ }
10458
+ },
10459
+ "/v1/platform/connections/{connectionId}/usage": {
10460
+ "get": {
10461
+ "tags": [
10462
+ "Platform"
10463
+ ],
10464
+ "summary": "Get per-connection usage",
10465
+ "description": "Returns inference spend for the current UTC month for this connection.",
10466
+ "security": [
10467
+ {
10468
+ "BearerAuth": []
10469
+ }
10470
+ ],
10471
+ "parameters": [
10472
+ {
10473
+ "in": "path",
10474
+ "name": "connectionId",
10475
+ "required": true,
10476
+ "schema": {
10477
+ "type": "string",
10478
+ "format": "uuid"
10479
+ }
10480
+ }
10481
+ ],
10482
+ "responses": {
10483
+ "200": {
10484
+ "description": "Usage summary",
10485
+ "content": {
10486
+ "application/json": {
10487
+ "schema": {
10488
+ "$ref": "#/components/schemas/ConnectionUsageResponse"
10489
+ }
10490
+ }
10491
+ }
10492
+ },
10493
+ "404": {
10494
+ "$ref": "#/components/responses/NotFound"
10495
+ }
10496
+ }
10497
+ }
10498
+ },
10499
+ "/v1/platform/connections/{connectionId}/entitlements": {
10500
+ "get": {
10501
+ "tags": [
10502
+ "Platform"
10503
+ ],
10504
+ "summary": "List entitlement evaluations",
10505
+ "description": "Returns on-chain entitlement watch status for the connection.",
10506
+ "security": [
10507
+ {
10508
+ "BearerAuth": []
10509
+ }
10510
+ ],
10511
+ "parameters": [
10512
+ {
10513
+ "in": "path",
10514
+ "name": "connectionId",
10515
+ "required": true,
10516
+ "schema": {
10517
+ "type": "string",
10518
+ "format": "uuid"
10519
+ }
10520
+ }
10521
+ ],
10522
+ "responses": {
10523
+ "200": {
10524
+ "description": "Entitlement watches",
10525
+ "content": {
10526
+ "application/json": {
10527
+ "schema": {
10528
+ "$ref": "#/components/schemas/EntitlementsListResponse"
10529
+ }
10530
+ }
10531
+ }
10532
+ },
10533
+ "404": {
10534
+ "$ref": "#/components/responses/NotFound"
10535
+ }
10536
+ }
10537
+ }
10538
+ },
10539
+ "/v1/platform/connections/{connectionId}/entitlements/refresh": {
10540
+ "post": {
10541
+ "tags": [
10542
+ "Platform"
10543
+ ],
10544
+ "summary": "Refresh entitlement evaluations",
10545
+ "description": "Triggers an immediate entitlement monitor cycle for this connection's org.",
10546
+ "security": [
10547
+ {
10548
+ "BearerAuth": []
10549
+ }
10550
+ ],
10551
+ "parameters": [
10552
+ {
10553
+ "in": "path",
10554
+ "name": "connectionId",
10555
+ "required": true,
10556
+ "schema": {
10557
+ "type": "string",
10558
+ "format": "uuid"
10559
+ }
10560
+ }
10561
+ ],
10562
+ "responses": {
10563
+ "202": {
10564
+ "description": "Refresh accepted"
10565
+ },
10566
+ "404": {
10567
+ "$ref": "#/components/responses/NotFound"
10568
+ }
10569
+ }
10570
+ }
10571
+ },
10572
+ "/v1/platform/apps/{appId}/audit": {
10129
10573
  "get": {
10130
10574
  "tags": [
10131
10575
  "Platform"
@@ -10713,6 +11157,53 @@
10713
11157
  }
10714
11158
  },
10715
11159
  "/v1/platform/apps/{appId}/spend-policies/{policyId}": {
11160
+ "get": {
11161
+ "tags": [
11162
+ "Platform"
11163
+ ],
11164
+ "summary": "Get a spend policy by ID",
11165
+ "operationId": "getSpendPolicy",
11166
+ "security": [
11167
+ {
11168
+ "BearerAuth": []
11169
+ }
11170
+ ],
11171
+ "parameters": [
11172
+ {
11173
+ "in": "path",
11174
+ "name": "appId",
11175
+ "required": true,
11176
+ "schema": {
11177
+ "type": "string",
11178
+ "format": "uuid"
11179
+ }
11180
+ },
11181
+ {
11182
+ "in": "path",
11183
+ "name": "policyId",
11184
+ "required": true,
11185
+ "schema": {
11186
+ "type": "string",
11187
+ "format": "uuid"
11188
+ }
11189
+ }
11190
+ ],
11191
+ "responses": {
11192
+ "200": {
11193
+ "description": "Spend policy",
11194
+ "content": {
11195
+ "application/json": {
11196
+ "schema": {
11197
+ "$ref": "#/components/schemas/SpendPolicyResponse"
11198
+ }
11199
+ }
11200
+ }
11201
+ },
11202
+ "404": {
11203
+ "$ref": "#/components/responses/NotFound"
11204
+ }
11205
+ }
11206
+ },
10716
11207
  "delete": {
10717
11208
  "tags": [
10718
11209
  "Platform"
@@ -10755,6 +11246,57 @@
10755
11246
  }
10756
11247
  },
10757
11248
  "/v1/platform/connections/{connectionId}/spend-policy": {
11249
+ "get": {
11250
+ "tags": [
11251
+ "Platform"
11252
+ ],
11253
+ "summary": "Get effective spend policy for a connection",
11254
+ "description": "Returns the effective spend policy for the connected user, resolving\nper-user overrides before app-level defaults. Requires plt_ platform auth.\n",
11255
+ "operationId": "getConnectionSpendPolicy",
11256
+ "security": [
11257
+ {
11258
+ "BearerAuth": []
11259
+ }
11260
+ ],
11261
+ "parameters": [
11262
+ {
11263
+ "in": "path",
11264
+ "name": "connectionId",
11265
+ "required": true,
11266
+ "schema": {
11267
+ "type": "string",
11268
+ "format": "uuid"
11269
+ }
11270
+ }
11271
+ ],
11272
+ "responses": {
11273
+ "200": {
11274
+ "description": "Effective spend policy (or null)",
11275
+ "content": {
11276
+ "application/json": {
11277
+ "schema": {
11278
+ "type": "object",
11279
+ "properties": {
11280
+ "policy": {
11281
+ "oneOf": [
11282
+ {
11283
+ "$ref": "#/components/schemas/SpendPolicyResponse"
11284
+ },
11285
+ {
11286
+ "type": "null"
11287
+ }
11288
+ ]
11289
+ }
11290
+ }
11291
+ }
11292
+ }
11293
+ }
11294
+ },
11295
+ "404": {
11296
+ "$ref": "#/components/responses/NotFound"
11297
+ }
11298
+ }
11299
+ },
10758
11300
  "put": {
10759
11301
  "tags": [
10760
11302
  "Platform"
@@ -10776,6 +11318,15 @@
10776
11318
  "type": "string",
10777
11319
  "format": "uuid"
10778
11320
  }
11321
+ },
11322
+ {
11323
+ "in": "header",
11324
+ "name": "Idempotency-Key",
11325
+ "required": false,
11326
+ "schema": {
11327
+ "type": "string"
11328
+ },
11329
+ "description": "Optional replay protection; same key + body returns cached response (409 on body mismatch)."
10779
11330
  }
10780
11331
  ],
10781
11332
  "requestBody": {
@@ -10790,7 +11341,17 @@
10790
11341
  },
10791
11342
  "responses": {
10792
11343
  "200": {
10793
- "description": "Spend policy set",
11344
+ "description": "Spend policy set (or idempotent replay)",
11345
+ "content": {
11346
+ "application/json": {
11347
+ "schema": {
11348
+ "$ref": "#/components/schemas/SpendPolicyResponse"
11349
+ }
11350
+ }
11351
+ }
11352
+ },
11353
+ "201": {
11354
+ "description": "Spend policy created",
10794
11355
  "content": {
10795
11356
  "application/json": {
10796
11357
  "schema": {
@@ -10804,19 +11365,214 @@
10804
11365
  },
10805
11366
  "403": {
10806
11367
  "$ref": "#/components/responses/Forbidden"
11368
+ },
11369
+ "404": {
11370
+ "$ref": "#/components/responses/NotFound"
11371
+ },
11372
+ "409": {
11373
+ "description": "Idempotency-Key reused with different body"
10807
11374
  }
10808
11375
  }
10809
11376
  }
10810
11377
  },
10811
- "/v1/approvals": {
11378
+ "/v1/platform/connections/{connectionId}/approvals": {
10812
11379
  "get": {
10813
11380
  "tags": [
10814
- "Approvals"
11381
+ "Platform"
10815
11382
  ],
10816
- "summary": "List pending approvals",
10817
- "description": "Returns approvals for the authenticated user's organization.\nHuman-only. Supports filtering by status and pagination.\n",
10818
- "operationId": "listApprovals",
10819
- "parameters": [
11383
+ "summary": "List approvals for a platform connection",
11384
+ "description": "Returns approvals assigned to the connection's user, filtered to agents\nprovisioned on the connection. Requires plt_ platform auth.\n",
11385
+ "operationId": "listConnectionApprovals",
11386
+ "security": [
11387
+ {
11388
+ "BearerAuth": []
11389
+ }
11390
+ ],
11391
+ "parameters": [
11392
+ {
11393
+ "in": "path",
11394
+ "name": "connectionId",
11395
+ "required": true,
11396
+ "schema": {
11397
+ "type": "string",
11398
+ "format": "uuid"
11399
+ }
11400
+ },
11401
+ {
11402
+ "name": "status",
11403
+ "in": "query",
11404
+ "required": false,
11405
+ "schema": {
11406
+ "type": "string"
11407
+ }
11408
+ },
11409
+ {
11410
+ "name": "risk_tier",
11411
+ "in": "query",
11412
+ "required": false,
11413
+ "schema": {
11414
+ "type": "integer"
11415
+ }
11416
+ },
11417
+ {
11418
+ "name": "limit",
11419
+ "in": "query",
11420
+ "required": false,
11421
+ "schema": {
11422
+ "type": "integer",
11423
+ "default": 50
11424
+ }
11425
+ },
11426
+ {
11427
+ "name": "offset",
11428
+ "in": "query",
11429
+ "required": false,
11430
+ "schema": {
11431
+ "type": "integer",
11432
+ "default": 0
11433
+ }
11434
+ }
11435
+ ],
11436
+ "responses": {
11437
+ "200": {
11438
+ "description": "Connection-scoped approvals",
11439
+ "content": {
11440
+ "application/json": {
11441
+ "schema": {
11442
+ "$ref": "#/components/schemas/ApprovalListResponse"
11443
+ }
11444
+ }
11445
+ }
11446
+ },
11447
+ "404": {
11448
+ "$ref": "#/components/responses/NotFound"
11449
+ }
11450
+ }
11451
+ }
11452
+ },
11453
+ "/v1/platform/connections/{connectionId}/approvals/{approvalId}": {
11454
+ "get": {
11455
+ "tags": [
11456
+ "Platform"
11457
+ ],
11458
+ "summary": "Get a connection-scoped approval",
11459
+ "operationId": "getConnectionApproval",
11460
+ "security": [
11461
+ {
11462
+ "BearerAuth": []
11463
+ }
11464
+ ],
11465
+ "parameters": [
11466
+ {
11467
+ "in": "path",
11468
+ "name": "connectionId",
11469
+ "required": true,
11470
+ "schema": {
11471
+ "type": "string",
11472
+ "format": "uuid"
11473
+ }
11474
+ },
11475
+ {
11476
+ "in": "path",
11477
+ "name": "approvalId",
11478
+ "required": true,
11479
+ "schema": {
11480
+ "type": "string",
11481
+ "format": "uuid"
11482
+ }
11483
+ }
11484
+ ],
11485
+ "responses": {
11486
+ "200": {
11487
+ "description": "Approval detail",
11488
+ "content": {
11489
+ "application/json": {
11490
+ "schema": {
11491
+ "$ref": "#/components/schemas/ApprovalResponse"
11492
+ }
11493
+ }
11494
+ }
11495
+ },
11496
+ "404": {
11497
+ "$ref": "#/components/responses/NotFound"
11498
+ }
11499
+ }
11500
+ }
11501
+ },
11502
+ "/v1/platform/connections/{connectionId}/pending-approvals": {
11503
+ "get": {
11504
+ "tags": [
11505
+ "Platform"
11506
+ ],
11507
+ "summary": "List pending consensus approvals for a connection",
11508
+ "description": "Returns pending approvals for agents provisioned on the connection,\nincluding `action_payload` and `payload_hash` for consensus UX.\nRequires plt_ platform auth.\n",
11509
+ "operationId": "listConnectionPendingApprovals",
11510
+ "security": [
11511
+ {
11512
+ "BearerAuth": []
11513
+ }
11514
+ ],
11515
+ "parameters": [
11516
+ {
11517
+ "in": "path",
11518
+ "name": "connectionId",
11519
+ "required": true,
11520
+ "schema": {
11521
+ "type": "string",
11522
+ "format": "uuid"
11523
+ }
11524
+ },
11525
+ {
11526
+ "name": "status",
11527
+ "in": "query",
11528
+ "schema": {
11529
+ "type": "string",
11530
+ "default": "pending"
11531
+ }
11532
+ },
11533
+ {
11534
+ "name": "limit",
11535
+ "in": "query",
11536
+ "schema": {
11537
+ "type": "integer",
11538
+ "default": 50
11539
+ }
11540
+ },
11541
+ {
11542
+ "name": "offset",
11543
+ "in": "query",
11544
+ "schema": {
11545
+ "type": "integer",
11546
+ "default": 0
11547
+ }
11548
+ }
11549
+ ],
11550
+ "responses": {
11551
+ "200": {
11552
+ "description": "Pending approvals list",
11553
+ "content": {
11554
+ "application/json": {
11555
+ "schema": {
11556
+ "$ref": "#/components/schemas/PendingApprovalListResponse"
11557
+ }
11558
+ }
11559
+ }
11560
+ },
11561
+ "404": {
11562
+ "$ref": "#/components/responses/NotFound"
11563
+ }
11564
+ }
11565
+ }
11566
+ },
11567
+ "/v1/approvals": {
11568
+ "get": {
11569
+ "tags": [
11570
+ "Approvals"
11571
+ ],
11572
+ "summary": "List pending approvals",
11573
+ "description": "Returns approvals for the authenticated user's organization.\nHuman-only. Supports filtering by status and pagination.\n",
11574
+ "operationId": "listApprovals",
11575
+ "parameters": [
10820
11576
  {
10821
11577
  "name": "status",
10822
11578
  "in": "query",
@@ -13827,7 +14583,7 @@
13827
14583
  "Runtimes"
13828
14584
  ],
13829
14585
  "summary": "Chat with a running runtime agent",
13830
- "description": "Human-only. Proxies to the runtime container's OpenAI-compatible\n`POST /v1/chat/completions` (hermes / openclaw / openclaude chat bridge).\nStarts the runtime if stopped. Streams SSE when `Accept: text/event-stream`\nor `stream: true`. Conversation history is ephemeral (pass `messages`).\nRequires a public URL (shell access, Shroud sidecar, or HTTP hosting).\n",
14586
+ "description": "Human-only. Proxies to the runtime container's OpenAI-compatible\n`POST /v1/chat/completions` (hermes / openclaw / openclaude / opencode chat bridge).\nStarts the runtime if stopped. Streams SSE when `Accept: text/event-stream`\nor `stream: true`. Conversation history is ephemeral (pass `messages`).\nRequires a public URL (shell access, Shroud sidecar, or HTTP hosting).\n",
13831
14587
  "operationId": "runtimeChat",
13832
14588
  "parameters": [
13833
14589
  {
@@ -18031,6 +18787,14 @@
18031
18787
  },
18032
18788
  "mfa_token": {
18033
18789
  "type": "string"
18790
+ },
18791
+ "mfa_method": {
18792
+ "type": "string",
18793
+ "enum": [
18794
+ "totp",
18795
+ "passkey"
18796
+ ],
18797
+ "description": "When MFA is required, which second factor to collect"
18034
18798
  }
18035
18799
  }
18036
18800
  },
@@ -18052,6 +18816,19 @@
18052
18816
  },
18053
18817
  "refresh_token": {
18054
18818
  "type": "string"
18819
+ },
18820
+ "mfa_required": {
18821
+ "type": "boolean"
18822
+ },
18823
+ "mfa_token": {
18824
+ "type": "string"
18825
+ },
18826
+ "mfa_method": {
18827
+ "type": "string",
18828
+ "enum": [
18829
+ "totp",
18830
+ "passkey"
18831
+ ]
18055
18832
  }
18056
18833
  }
18057
18834
  },
@@ -18277,6 +19054,15 @@
18277
19054
  "properties": {
18278
19055
  "enabled": {
18279
19056
  "type": "boolean"
19057
+ },
19058
+ "eligible": {
19059
+ "type": "boolean"
19060
+ },
19061
+ "totp_enabled": {
19062
+ "type": "boolean"
19063
+ },
19064
+ "passkey_mfa_enabled": {
19065
+ "type": "boolean"
18280
19066
  }
18281
19067
  }
18282
19068
  },
@@ -24496,6 +25282,69 @@
24496
25282
  }
24497
25283
  }
24498
25284
  },
25285
+ "PlatformAppDeleteResponse": {
25286
+ "type": "object",
25287
+ "required": [
25288
+ "deleted",
25289
+ "soft_delete",
25290
+ "slug_released",
25291
+ "former_slug"
25292
+ ],
25293
+ "properties": {
25294
+ "deleted": {
25295
+ "type": "boolean"
25296
+ },
25297
+ "soft_delete": {
25298
+ "type": "boolean"
25299
+ },
25300
+ "slug_released": {
25301
+ "type": "boolean"
25302
+ },
25303
+ "former_slug": {
25304
+ "type": "string"
25305
+ }
25306
+ }
25307
+ },
25308
+ "TransferPlatformAppOwnershipRequest": {
25309
+ "type": "object",
25310
+ "properties": {
25311
+ "target_org_id": {
25312
+ "type": "string",
25313
+ "format": "uuid"
25314
+ },
25315
+ "target_user_email": {
25316
+ "type": "string",
25317
+ "format": "email"
25318
+ }
25319
+ },
25320
+ "description": "Provide `target_org_id` or `target_user_email` (owner/admin in destination org)."
25321
+ },
25322
+ "TransferPlatformAppOwnershipResponse": {
25323
+ "type": "object",
25324
+ "required": [
25325
+ "app_id",
25326
+ "former_org_id",
25327
+ "new_org_id",
25328
+ "message"
25329
+ ],
25330
+ "properties": {
25331
+ "app_id": {
25332
+ "type": "string",
25333
+ "format": "uuid"
25334
+ },
25335
+ "former_org_id": {
25336
+ "type": "string",
25337
+ "format": "uuid"
25338
+ },
25339
+ "new_org_id": {
25340
+ "type": "string",
25341
+ "format": "uuid"
25342
+ },
25343
+ "message": {
25344
+ "type": "string"
25345
+ }
25346
+ }
25347
+ },
24499
25348
  "PlatformAppResponse": {
24500
25349
  "type": "object",
24501
25350
  "properties": {
@@ -24663,7 +25512,8 @@
24663
25512
  },
24664
25513
  "subject_token_type": {
24665
25514
  "type": "string",
24666
- "default": "urn:ietf:params:oauth:token-type:jwt"
25515
+ "default": "urn:ietf:params:oauth:token-type:jwt",
25516
+ "description": "Token type for subject_token. Use `urn:1claw:params:oauth:token-type:siwe`\nwith `siwe_message` and `siwe_signature` for wallet-based provisioning.\n"
24667
25517
  },
24668
25518
  "email": {
24669
25519
  "type": "string",
@@ -24672,6 +25522,24 @@
24672
25522
  },
24673
25523
  "display_name": {
24674
25524
  "type": "string"
25525
+ },
25526
+ "siwe_message": {
25527
+ "type": "string",
25528
+ "description": "EIP-4361 Sign-In With Ethereum message (required for SIWE upsert)"
25529
+ },
25530
+ "siwe_signature": {
25531
+ "type": "string",
25532
+ "description": "Hex-encoded SIWE signature (required for SIWE upsert)"
25533
+ },
25534
+ "return_to": {
25535
+ "type": "string",
25536
+ "format": "uri",
25537
+ "description": "Redirect URL after cross-org link consent"
25538
+ },
25539
+ "create_sub_org": {
25540
+ "type": "boolean",
25541
+ "default": false,
25542
+ "description": "When true, creates a sub-org under the platform app's org"
24675
25543
  }
24676
25544
  }
24677
25545
  },
@@ -24800,6 +25668,11 @@
24800
25668
  "type": "string",
24801
25669
  "format": "uri",
24802
25670
  "description": "URL to redirect the user to after claiming resources."
25671
+ },
25672
+ "parameters": {
25673
+ "type": "object",
25674
+ "additionalProperties": true,
25675
+ "description": "Template parameters substituted as `{{params.*}}` during bootstrap.\nCombined with `Idempotency-Key` header for params-aware idempotent replay.\n"
24803
25676
  }
24804
25677
  }
24805
25678
  },
@@ -25518,6 +26391,24 @@
25518
26391
  }
25519
26392
  }
25520
26393
  },
26394
+ "ApprovalListResponse": {
26395
+ "type": "object",
26396
+ "required": [
26397
+ "approvals",
26398
+ "total"
26399
+ ],
26400
+ "properties": {
26401
+ "approvals": {
26402
+ "type": "array",
26403
+ "items": {
26404
+ "$ref": "#/components/schemas/ApprovalResponse"
26405
+ }
26406
+ },
26407
+ "total": {
26408
+ "type": "integer"
26409
+ }
26410
+ }
26411
+ },
25521
26412
  "ApprovalStatusResponse": {
25522
26413
  "type": "object",
25523
26414
  "required": [
@@ -25807,6 +26698,34 @@
25807
26698
  "type": "integer",
25808
26699
  "description": "Maximum number of transactions per 24h window"
25809
26700
  },
26701
+ "inference_allowance_usd": {
26702
+ "type": "string",
26703
+ "description": "Monthly LLM inference allowance in USD (decimal string)"
26704
+ },
26705
+ "inference_reserved_pct": {
26706
+ "type": "integer",
26707
+ "minimum": 0,
26708
+ "maximum": 100,
26709
+ "default": 25,
26710
+ "description": "Percent of allowance held in reserve (not spendable)"
26711
+ },
26712
+ "inference_hard_stop": {
26713
+ "type": "boolean",
26714
+ "default": true,
26715
+ "description": "When true, block inference when allowance is exhausted"
26716
+ },
26717
+ "inference_allowance_mode": {
26718
+ "type": "string",
26719
+ "enum": [
26720
+ "policy",
26721
+ "credits"
26722
+ ],
26723
+ "default": "policy"
26724
+ },
26725
+ "max_request_cost_usd": {
26726
+ "type": "string",
26727
+ "description": "Maximum estimated cost per LLM request in USD"
26728
+ },
25810
26729
  "human_factor_auth": {
25811
26730
  "type": "object",
25812
26731
  "additionalProperties": true,
@@ -25814,6 +26733,271 @@
25814
26733
  }
25815
26734
  }
25816
26735
  },
26736
+ "SiweChallengeRequest": {
26737
+ "type": "object",
26738
+ "properties": {
26739
+ "domain": {
26740
+ "type": "string",
26741
+ "description": "Optional SIWE domain override (defaults to platform app's siwe_domain)"
26742
+ }
26743
+ }
26744
+ },
26745
+ "SiweChallengeResponse": {
26746
+ "type": "object",
26747
+ "required": [
26748
+ "nonce",
26749
+ "expires_in",
26750
+ "domain"
26751
+ ],
26752
+ "properties": {
26753
+ "nonce": {
26754
+ "type": "string"
26755
+ },
26756
+ "expires_in": {
26757
+ "type": "integer",
26758
+ "description": "Seconds until nonce expiry"
26759
+ },
26760
+ "domain": {
26761
+ "type": "string"
26762
+ }
26763
+ }
26764
+ },
26765
+ "ConnectionDetailResponse": {
26766
+ "type": "object",
26767
+ "required": [
26768
+ "connection_id",
26769
+ "user_id",
26770
+ "status",
26771
+ "entitlement_status",
26772
+ "vault_ids",
26773
+ "agent_ids",
26774
+ "claim"
26775
+ ],
26776
+ "properties": {
26777
+ "connection_id": {
26778
+ "type": "string",
26779
+ "format": "uuid"
26780
+ },
26781
+ "user_id": {
26782
+ "type": "string",
26783
+ "format": "uuid"
26784
+ },
26785
+ "status": {
26786
+ "type": "string"
26787
+ },
26788
+ "entitlement_status": {
26789
+ "type": "string"
26790
+ },
26791
+ "wallet_address": {
26792
+ "type": "string",
26793
+ "nullable": true
26794
+ },
26795
+ "vault_ids": {
26796
+ "type": "array",
26797
+ "items": {
26798
+ "type": "string",
26799
+ "format": "uuid"
26800
+ }
26801
+ },
26802
+ "agent_ids": {
26803
+ "type": "array",
26804
+ "items": {
26805
+ "type": "string",
26806
+ "format": "uuid"
26807
+ }
26808
+ },
26809
+ "claimed_at": {
26810
+ "type": "string",
26811
+ "format": "date-time",
26812
+ "nullable": true
26813
+ },
26814
+ "claim": {
26815
+ "$ref": "#/components/schemas/ClaimStatusResponse"
26816
+ }
26817
+ }
26818
+ },
26819
+ "ClaimStatusResponse": {
26820
+ "type": "object",
26821
+ "required": [
26822
+ "status"
26823
+ ],
26824
+ "properties": {
26825
+ "status": {
26826
+ "type": "string",
26827
+ "enum": [
26828
+ "pending",
26829
+ "active",
26830
+ "claimed"
26831
+ ]
26832
+ },
26833
+ "redeemed_at": {
26834
+ "type": "string",
26835
+ "format": "date-time",
26836
+ "nullable": true
26837
+ }
26838
+ }
26839
+ },
26840
+ "ConnectionUsageResponse": {
26841
+ "type": "object",
26842
+ "required": [
26843
+ "connection_id",
26844
+ "period",
26845
+ "inference_spent_usd"
26846
+ ],
26847
+ "properties": {
26848
+ "connection_id": {
26849
+ "type": "string",
26850
+ "format": "uuid"
26851
+ },
26852
+ "period": {
26853
+ "type": "string",
26854
+ "description": "UTC month (YYYY-MM)"
26855
+ },
26856
+ "inference_spent_usd": {
26857
+ "type": "string"
26858
+ }
26859
+ }
26860
+ },
26861
+ "EntitlementsListResponse": {
26862
+ "type": "object",
26863
+ "required": [
26864
+ "evaluations"
26865
+ ],
26866
+ "properties": {
26867
+ "evaluations": {
26868
+ "type": "array",
26869
+ "items": {
26870
+ "$ref": "#/components/schemas/EntitlementEvaluationResponse"
26871
+ }
26872
+ }
26873
+ }
26874
+ },
26875
+ "EntitlementEvaluationResponse": {
26876
+ "type": "object",
26877
+ "required": [
26878
+ "id",
26879
+ "status",
26880
+ "watch_kind",
26881
+ "chain",
26882
+ "holder_address"
26883
+ ],
26884
+ "properties": {
26885
+ "id": {
26886
+ "type": "string"
26887
+ },
26888
+ "status": {
26889
+ "type": "string"
26890
+ },
26891
+ "watch_kind": {
26892
+ "type": "string"
26893
+ },
26894
+ "chain": {
26895
+ "type": "string"
26896
+ },
26897
+ "holder_address": {
26898
+ "type": "string"
26899
+ },
26900
+ "last_value_raw": {
26901
+ "type": "string",
26902
+ "nullable": true
26903
+ },
26904
+ "last_checked_at": {
26905
+ "type": "string",
26906
+ "format": "date-time",
26907
+ "nullable": true
26908
+ }
26909
+ }
26910
+ },
26911
+ "TemplatePreviewRequest": {
26912
+ "type": "object",
26913
+ "properties": {
26914
+ "parameters": {
26915
+ "type": "object",
26916
+ "additionalProperties": true
26917
+ },
26918
+ "subject": {
26919
+ "type": "object",
26920
+ "properties": {
26921
+ "user_id": {
26922
+ "type": "string"
26923
+ },
26924
+ "external_subject": {
26925
+ "type": "string"
26926
+ },
26927
+ "wallet_address": {
26928
+ "type": "string"
26929
+ },
26930
+ "email": {
26931
+ "type": "string"
26932
+ }
26933
+ }
26934
+ }
26935
+ }
26936
+ },
26937
+ "TemplatePreviewResponse": {
26938
+ "type": "object",
26939
+ "required": [
26940
+ "resolved_spec"
26941
+ ],
26942
+ "properties": {
26943
+ "resolved_spec": {
26944
+ "type": "object",
26945
+ "additionalProperties": true
26946
+ }
26947
+ }
26948
+ },
26949
+ "InferenceBudgetResponse": {
26950
+ "type": "object",
26951
+ "required": [
26952
+ "allowance_usd",
26953
+ "spent_usd",
26954
+ "remaining_usd",
26955
+ "reserved_pct",
26956
+ "max_request_cost_usd",
26957
+ "period_end"
26958
+ ],
26959
+ "properties": {
26960
+ "allowance_usd": {
26961
+ "type": "string"
26962
+ },
26963
+ "spent_usd": {
26964
+ "type": "string"
26965
+ },
26966
+ "remaining_usd": {
26967
+ "type": "string"
26968
+ },
26969
+ "reserved_pct": {
26970
+ "type": "integer"
26971
+ },
26972
+ "max_request_cost_usd": {
26973
+ "type": "string"
26974
+ },
26975
+ "period_end": {
26976
+ "type": "string",
26977
+ "format": "date-time"
26978
+ },
26979
+ "connection_id": {
26980
+ "type": "string",
26981
+ "format": "uuid",
26982
+ "nullable": true
26983
+ }
26984
+ }
26985
+ },
26986
+ "InferenceBudgetUnconfiguredResponse": {
26987
+ "type": "object",
26988
+ "properties": {
26989
+ "allowance_usd": {
26990
+ "type": "string",
26991
+ "nullable": true
26992
+ },
26993
+ "remaining_usd": {
26994
+ "nullable": true
26995
+ },
26996
+ "message": {
26997
+ "type": "string"
26998
+ }
26999
+ }
27000
+ },
25817
27001
  "SpendPolicyResponse": {
25818
27002
  "type": "object",
25819
27003
  "required": [
@@ -25871,6 +27055,26 @@
25871
27055
  "type": "integer",
25872
27056
  "nullable": true
25873
27057
  },
27058
+ "inference_allowance_usd": {
27059
+ "type": "string",
27060
+ "nullable": true
27061
+ },
27062
+ "inference_reserved_pct": {
27063
+ "type": "integer",
27064
+ "nullable": true
27065
+ },
27066
+ "inference_hard_stop": {
27067
+ "type": "boolean",
27068
+ "nullable": true
27069
+ },
27070
+ "inference_allowance_mode": {
27071
+ "type": "string",
27072
+ "nullable": true
27073
+ },
27074
+ "max_request_cost_usd": {
27075
+ "type": "string",
27076
+ "nullable": true
27077
+ },
25874
27078
  "human_factor_auth": {
25875
27079
  "type": "object",
25876
27080
  "additionalProperties": true,
@@ -26053,6 +27257,33 @@
26053
27257
  }
26054
27258
  }
26055
27259
  },
27260
+ "MfaPasskeyCompleteRequest": {
27261
+ "type": "object",
27262
+ "required": [
27263
+ "mfa_token",
27264
+ "credential_id",
27265
+ "authenticator_data",
27266
+ "client_data_json",
27267
+ "signature"
27268
+ ],
27269
+ "properties": {
27270
+ "mfa_token": {
27271
+ "type": "string"
27272
+ },
27273
+ "credential_id": {
27274
+ "type": "string"
27275
+ },
27276
+ "authenticator_data": {
27277
+ "type": "string"
27278
+ },
27279
+ "client_data_json": {
27280
+ "type": "string"
27281
+ },
27282
+ "signature": {
27283
+ "type": "string"
27284
+ }
27285
+ }
27286
+ },
26056
27287
  "GuardrailWideningQueuedResponse": {
26057
27288
  "type": "object",
26058
27289
  "required": [