@1claw/openapi-spec 0.52.0 → 0.53.1

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 (4) hide show
  1. package/README.md +14 -1
  2. package/openapi.json +1919 -529
  3. package/openapi.yaml +1121 -160
  4. 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.52.0
5
+ version: 0.53.1
6
6
  description: |
7
7
  Secure secret management for AI agents. Provides vaults, secrets,
8
8
  policy-based access control, agent identity, Intents API,
@@ -112,6 +112,12 @@ tags:
112
112
  description: Unified balance aggregator
113
113
  - name: Environment Variables
114
114
  description: Per-vault and org-shared environment variable management
115
+ - name: Wallet Access
116
+ description: Role-based wallet access policies for agents and users
117
+ - name: Credential Recovery
118
+ description: MFA/passkey/password recovery escape hatch with admin approval
119
+ - name: Shamir KEK
120
+ description: Shamir secret-sharing for org-level Key Encryption Keys
115
121
 
116
122
  # =============================================================================
117
123
  # PATHS
@@ -2041,19 +2047,25 @@ paths:
2041
2047
  get:
2042
2048
  tags: [Environment Variables]
2043
2049
  summary: Resolve environment variables
2044
- description: Resolve the final KEY=VALUE set for an environment with full precedence (shared < vault < branch override).
2050
+ description: |
2051
+ Resolve the final KEY=VALUE set for an environment with full precedence (shared < vault < branch override).
2052
+ When the caller is an agent with `env_auto_resolve: true`, the `environment` query parameter may be omitted —
2053
+ the server uses the agent's tagged environment from the JWT. Org setting `env.enforce_agent_environment_scope`
2054
+ blocks agents from resolving vars outside their tagged environment.
2045
2055
  operationId: resolveEnvVars
2046
2056
  parameters:
2047
2057
  - $ref: "#/components/parameters/VaultId"
2048
2058
  - name: environment
2049
2059
  in: query
2050
- required: true
2060
+ required: false
2051
2061
  schema:
2052
2062
  type: string
2063
+ description: Target environment (production, preview, development, or custom). Required for human callers; optional for agents with env_auto_resolve when the agent has an environment tag.
2053
2064
  - name: git_branch
2054
2065
  in: query
2055
2066
  schema:
2056
2067
  type: string
2068
+ description: Optional git branch for preview branch overrides
2057
2069
  responses:
2058
2070
  "200":
2059
2071
  description: Resolved environment variables
@@ -4123,6 +4135,40 @@ paths:
4123
4135
  "402":
4124
4136
  $ref: "#/components/responses/PaymentRequired"
4125
4137
 
4138
+ /v1/audit/verify:
4139
+ get:
4140
+ tags: [Audit]
4141
+ summary: Verify audit hash chain integrity
4142
+ operationId: verifyAuditChain
4143
+ description: |
4144
+ Verifies the HMAC-SHA256 integrity hash chain for audit events in the
4145
+ calling organization. Returns whether the chain is valid, how many
4146
+ events were verified, and the point of first break (if any).
4147
+ parameters:
4148
+ - name: from
4149
+ in: query
4150
+ schema:
4151
+ type: string
4152
+ format: date-time
4153
+ - name: to
4154
+ in: query
4155
+ schema:
4156
+ type: string
4157
+ format: date-time
4158
+ - name: limit
4159
+ in: query
4160
+ schema:
4161
+ type: integer
4162
+ default: 1000
4163
+ maximum: 10000
4164
+ responses:
4165
+ "200":
4166
+ description: Chain verification result
4167
+ content:
4168
+ application/json:
4169
+ schema:
4170
+ $ref: "#/components/schemas/AuditVerifyResponse"
4171
+
4126
4172
  # ---------------------------------------------------------------------------
4127
4173
  # Security (IP Rules)
4128
4174
  # ---------------------------------------------------------------------------
@@ -5422,6 +5468,27 @@ paths:
5422
5468
 
5423
5469
  # --- Shroud Activity ---
5424
5470
 
5471
+ /v1/shroud/attestation:
5472
+ get:
5473
+ tags: [Shroud]
5474
+ summary: TEE attestation proof (public)
5475
+ operationId: getShroudAttestation
5476
+ security: []
5477
+ description: |
5478
+ Public endpoint returning the TEE attestation proof for Shroud.
5479
+ Returns the GCE Confidential VM identity token and image hash so
5480
+ customers can verify Shroud is running inside a Confidential VM
5481
+ before signing contracts. Served from shroud.1claw.xyz.
5482
+ servers:
5483
+ - url: https://shroud.1claw.xyz
5484
+ responses:
5485
+ "200":
5486
+ description: Attestation proof
5487
+ content:
5488
+ application/json:
5489
+ schema:
5490
+ $ref: "#/components/schemas/ShroudAttestationResponse"
5491
+
5425
5492
  /v1/shroud/activity:
5426
5493
  get:
5427
5494
  tags: [Shroud]
@@ -10184,167 +10251,575 @@ paths:
10184
10251
  "403":
10185
10252
  $ref: "#/components/responses/Forbidden"
10186
10253
 
10187
- # =============================================================================
10188
- # COMPONENTS
10189
- # =============================================================================
10254
+ # ---------------------------------------------------------------------------
10255
+ # Wallet Access Policies
10256
+ # ---------------------------------------------------------------------------
10190
10257
 
10191
- components:
10192
- securitySchemes:
10193
- BearerAuth:
10194
- type: http
10195
- scheme: bearer
10196
- bearerFormat: JWT
10197
- ApiKeyAuth:
10198
- type: http
10199
- scheme: bearer
10200
- description: 1ck_ prefixed API key used as Bearer token
10258
+ /v1/wallets/access-policies:
10259
+ post:
10260
+ tags: [Wallet Access]
10261
+ summary: Create a wallet access policy
10262
+ description: |
10263
+ Create a role-based wallet access policy granting an agent or user
10264
+ specific permissions (send, swap, receive) on a treasury wallet chain.
10265
+ operationId: createWalletAccessPolicy
10266
+ security:
10267
+ - BearerAuth: []
10268
+ requestBody:
10269
+ required: true
10270
+ content:
10271
+ application/json:
10272
+ schema:
10273
+ $ref: "#/components/schemas/CreateWalletAccessPolicyRequest"
10274
+ responses:
10275
+ "201":
10276
+ description: Policy created
10277
+ content:
10278
+ application/json:
10279
+ schema:
10280
+ $ref: "#/components/schemas/WalletAccessPolicyResponse"
10281
+ "400":
10282
+ $ref: "#/components/responses/BadRequest"
10283
+ "401":
10284
+ $ref: "#/components/responses/Unauthorized"
10285
+ "403":
10286
+ $ref: "#/components/responses/Forbidden"
10287
+ get:
10288
+ tags: [Wallet Access]
10289
+ summary: List wallet access policies for the org
10290
+ operationId: listWalletAccessPolicies
10291
+ security:
10292
+ - BearerAuth: []
10293
+ parameters:
10294
+ - name: wallet_chain
10295
+ in: query
10296
+ schema:
10297
+ type: string
10298
+ description: Filter by chain (e.g. ethereum, solana)
10299
+ - name: target_agent_id
10300
+ in: query
10301
+ schema:
10302
+ type: string
10303
+ format: uuid
10304
+ description: Filter by target agent
10305
+ responses:
10306
+ "200":
10307
+ description: Policy list
10308
+ content:
10309
+ application/json:
10310
+ schema:
10311
+ $ref: "#/components/schemas/WalletAccessPolicyListResponse"
10312
+ "401":
10313
+ $ref: "#/components/responses/Unauthorized"
10201
10314
 
10202
- parameters:
10203
- VaultId:
10204
- name: vault_id
10205
- in: path
10206
- required: true
10207
- schema:
10208
- type: string
10209
- format: uuid
10210
- SecretPath:
10211
- name: path
10212
- in: path
10213
- required: true
10214
- schema:
10215
- type: string
10216
- description: Secret path (e.g. "db/credentials")
10217
- AgentId:
10218
- name: agent_id
10219
- in: path
10220
- required: true
10221
- schema:
10222
- type: string
10223
- format: uuid
10224
- PolicyId:
10225
- name: policy_id
10226
- in: path
10227
- required: true
10228
- schema:
10229
- type: string
10230
- format: uuid
10231
- CardId:
10232
- name: card_id
10233
- in: path
10234
- required: true
10235
- schema:
10236
- type: string
10237
- format: uuid
10238
- IncludeSignedTx:
10239
- name: include_signed_tx
10240
- in: query
10241
- required: false
10242
- description: >
10243
- Set to `true` or `1` to include the raw signed transaction hex in the response.
10244
- Omitted by default to reduce key exfiltration risk. Only the literal values "true" or "1" enable inclusion; any other value or omission returns responses without signed_tx.
10245
- Applies to GET /v1/agents/{agent_id}/transactions and GET /v1/agents/{agent_id}/transactions/{tx_id}.
10246
- schema:
10247
- type: boolean
10248
- default: false
10249
- example: false
10315
+ /v1/wallets/access-policies/{id}:
10316
+ delete:
10317
+ tags: [Wallet Access]
10318
+ summary: Delete a wallet access policy
10319
+ operationId: deleteWalletAccessPolicy
10320
+ security:
10321
+ - BearerAuth: []
10322
+ parameters:
10323
+ - name: id
10324
+ in: path
10325
+ required: true
10326
+ schema:
10327
+ type: string
10328
+ format: uuid
10329
+ responses:
10330
+ "204":
10331
+ description: Policy deleted
10332
+ "401":
10333
+ $ref: "#/components/responses/Unauthorized"
10334
+ "403":
10335
+ $ref: "#/components/responses/Forbidden"
10336
+ "404":
10337
+ $ref: "#/components/responses/NotFound"
10250
10338
 
10251
- responses:
10252
- BadRequest:
10253
- description: Invalid request
10254
- content:
10255
- application/json:
10256
- schema:
10257
- $ref: "#/components/schemas/ProblemDetails"
10258
- Unauthorized:
10259
- description: Authentication required or invalid
10260
- content:
10261
- application/json:
10262
- schema:
10263
- $ref: "#/components/schemas/ProblemDetails"
10264
- Forbidden:
10265
- description: Insufficient permissions
10266
- content:
10267
- application/json:
10268
- schema:
10269
- $ref: "#/components/schemas/ProblemDetails"
10270
- NotFound:
10271
- description: Resource not found
10272
- content:
10273
- application/json:
10274
- schema:
10275
- $ref: "#/components/schemas/ProblemDetails"
10276
- PaymentRequired:
10277
- description: x402 payment required
10278
- content:
10279
- application/json:
10280
- schema:
10281
- $ref: "#/components/schemas/PaymentRequirement"
10282
- Conflict:
10283
- description: Resource already exists or conflict
10284
- content:
10285
- application/json:
10286
- schema:
10287
- $ref: "#/components/schemas/ProblemDetails"
10339
+ # ---------------------------------------------------------------------------
10340
+ # Credential Recovery
10341
+ # ---------------------------------------------------------------------------
10288
10342
 
10289
- schemas:
10290
- OrderCardRequest:
10291
- type: object
10292
- required: [kind, amount_usd]
10293
- properties:
10294
- kind:
10295
- type: string
10296
- enum: [prepaid, gift_card]
10297
- amount_usd:
10298
- type: string
10299
- description: USD amount to load onto the card.
10300
- example: "25.00"
10301
- laso_server_id:
10302
- type: string
10303
- description: Optional Laso gift-card server/brand id (gift cards only).
10304
- country:
10305
- type: string
10306
- description: Optional country (prepaid cards; defaults to US).
10307
- CardResponse:
10308
- type: object
10309
- description: Masked card view — never contains PAN/CVV.
10310
- required: [id, issuer, kind, currency, status, storage_mode, reveal_policy, created_at, updated_at]
10311
- properties:
10312
- id:
10313
- type: string
10314
- format: uuid
10315
- agent_id:
10316
- type: string
10317
- format: uuid
10318
- nullable: true
10319
- issuer:
10320
- type: string
10321
- enum: [laso, manual]
10322
- kind:
10323
- type: string
10324
- enum: [prepaid, gift_card]
10325
- brand:
10326
- type: string
10327
- last4:
10328
- type: string
10329
- exp_month:
10330
- type: integer
10331
- exp_year:
10332
- type: integer
10333
- currency:
10334
- type: string
10335
- order_amount_usd:
10336
- type: string
10337
- balance:
10338
- type: string
10339
- status:
10340
- type: string
10341
- enum: [ordering, pending, ready, depleted, expired, voided, orphaned_payment, awaiting_approval, rejected]
10342
- storage_mode:
10343
- type: string
10344
- enum: [reference, full]
10345
- reveal_policy:
10346
- type: object
10347
- additionalProperties: true
10343
+ /v1/auth/credential-recovery/request:
10344
+ post:
10345
+ tags: [Credential Recovery]
10346
+ summary: Initiate credential recovery
10347
+ description: |
10348
+ Start a credential recovery request for MFA reset, passkey reset,
10349
+ or password reset. Requires admin approval per org policy.
10350
+ operationId: requestCredentialRecovery
10351
+ security:
10352
+ - BearerAuth: []
10353
+ requestBody:
10354
+ required: true
10355
+ content:
10356
+ application/json:
10357
+ schema:
10358
+ $ref: "#/components/schemas/CredentialRecoveryRequest"
10359
+ responses:
10360
+ "201":
10361
+ description: Recovery request created
10362
+ content:
10363
+ application/json:
10364
+ schema:
10365
+ $ref: "#/components/schemas/CredentialRecoveryResponse"
10366
+ "400":
10367
+ $ref: "#/components/responses/BadRequest"
10368
+ "401":
10369
+ $ref: "#/components/responses/Unauthorized"
10370
+
10371
+ /v1/auth/credential-recovery/requests:
10372
+ get:
10373
+ tags: [Credential Recovery]
10374
+ summary: List recovery requests for the org
10375
+ description: Admin/owner only. Returns pending, approved, and rejected recovery requests.
10376
+ operationId: listCredentialRecoveryRequests
10377
+ security:
10378
+ - BearerAuth: []
10379
+ parameters:
10380
+ - name: status
10381
+ in: query
10382
+ schema:
10383
+ type: string
10384
+ enum: [pending_approval, approved, rejected, expired]
10385
+ description: Filter by status
10386
+ responses:
10387
+ "200":
10388
+ description: Recovery request list
10389
+ content:
10390
+ application/json:
10391
+ schema:
10392
+ $ref: "#/components/schemas/CredentialRecoveryListResponse"
10393
+ "401":
10394
+ $ref: "#/components/responses/Unauthorized"
10395
+ "403":
10396
+ $ref: "#/components/responses/Forbidden"
10397
+
10398
+ /v1/auth/credential-recovery/requests/{id}/approve:
10399
+ post:
10400
+ tags: [Credential Recovery]
10401
+ summary: Approve a recovery request
10402
+ description: Admin/owner approves a pending recovery request. May return a one-time recovery code.
10403
+ operationId: approveCredentialRecovery
10404
+ security:
10405
+ - BearerAuth: []
10406
+ parameters:
10407
+ - name: id
10408
+ in: path
10409
+ required: true
10410
+ schema:
10411
+ type: string
10412
+ format: uuid
10413
+ responses:
10414
+ "200":
10415
+ description: Request approved
10416
+ content:
10417
+ application/json:
10418
+ schema:
10419
+ $ref: "#/components/schemas/CredentialRecoveryApproveResponse"
10420
+ "401":
10421
+ $ref: "#/components/responses/Unauthorized"
10422
+ "403":
10423
+ $ref: "#/components/responses/Forbidden"
10424
+ "404":
10425
+ $ref: "#/components/responses/NotFound"
10426
+
10427
+ /v1/auth/credential-recovery/requests/{id}/execute:
10428
+ post:
10429
+ tags: [Credential Recovery]
10430
+ summary: Execute an approved credential recovery request
10431
+ description: >-
10432
+ Execute an approved credential recovery request after the delay
10433
+ window has elapsed. Only org owners or admins can execute.
10434
+ operationId: executeCredentialRecovery
10435
+ security:
10436
+ - BearerAuth: []
10437
+ parameters:
10438
+ - name: id
10439
+ in: path
10440
+ required: true
10441
+ schema:
10442
+ type: string
10443
+ format: uuid
10444
+ responses:
10445
+ "200":
10446
+ description: Recovery executed
10447
+ content:
10448
+ application/json:
10449
+ schema:
10450
+ $ref: "#/components/schemas/CredentialRecoveryExecuteResponse"
10451
+ "401":
10452
+ $ref: "#/components/responses/Unauthorized"
10453
+ "403":
10454
+ $ref: "#/components/responses/Forbidden"
10455
+ "404":
10456
+ $ref: "#/components/responses/NotFound"
10457
+
10458
+ /v1/auth/credential-recovery/requests/{id}:
10459
+ delete:
10460
+ tags: [Credential Recovery]
10461
+ summary: Cancel or reject a recovery request
10462
+ operationId: cancelCredentialRecovery
10463
+ security:
10464
+ - BearerAuth: []
10465
+ parameters:
10466
+ - name: id
10467
+ in: path
10468
+ required: true
10469
+ schema:
10470
+ type: string
10471
+ format: uuid
10472
+ responses:
10473
+ "204":
10474
+ description: Request cancelled
10475
+ "401":
10476
+ $ref: "#/components/responses/Unauthorized"
10477
+ "403":
10478
+ $ref: "#/components/responses/Forbidden"
10479
+ "404":
10480
+ $ref: "#/components/responses/NotFound"
10481
+
10482
+ # ---------------------------------------------------------------------------
10483
+ # Org Credential Recovery Policy
10484
+ # ---------------------------------------------------------------------------
10485
+
10486
+ /v1/org/credential-recovery-policy:
10487
+ get:
10488
+ tags: [Credential Recovery]
10489
+ summary: Get org credential recovery policy
10490
+ operationId: getCredentialRecoveryPolicy
10491
+ security:
10492
+ - BearerAuth: []
10493
+ responses:
10494
+ "200":
10495
+ description: Recovery policy
10496
+ content:
10497
+ application/json:
10498
+ schema:
10499
+ $ref: "#/components/schemas/CredentialRecoveryPolicyResponse"
10500
+ "401":
10501
+ $ref: "#/components/responses/Unauthorized"
10502
+ patch:
10503
+ tags: [Credential Recovery]
10504
+ summary: Update org credential recovery policy
10505
+ operationId: updateCredentialRecoveryPolicy
10506
+ security:
10507
+ - BearerAuth: []
10508
+ requestBody:
10509
+ required: true
10510
+ content:
10511
+ application/json:
10512
+ schema:
10513
+ $ref: "#/components/schemas/CredentialRecoveryPolicyRequest"
10514
+ responses:
10515
+ "200":
10516
+ description: Policy updated
10517
+ content:
10518
+ application/json:
10519
+ schema:
10520
+ $ref: "#/components/schemas/CredentialRecoveryPolicyResponse"
10521
+ "400":
10522
+ $ref: "#/components/responses/BadRequest"
10523
+ "401":
10524
+ $ref: "#/components/responses/Unauthorized"
10525
+ "403":
10526
+ $ref: "#/components/responses/Forbidden"
10527
+
10528
+ # ---------------------------------------------------------------------------
10529
+ # Shamir KEK
10530
+ # ---------------------------------------------------------------------------
10531
+
10532
+ /v1/org/shamir-kek/setup:
10533
+ post:
10534
+ tags: [Shamir KEK]
10535
+ summary: Set up Shamir KEK for the org
10536
+ description: |
10537
+ Initialize a Shamir secret-sharing KEK for the org. Splits the master
10538
+ key into shares distributed to custodians. Shares are returned one-time
10539
+ only and must be stored securely by each custodian.
10540
+ operationId: setupShamirKek
10541
+ security:
10542
+ - BearerAuth: []
10543
+ requestBody:
10544
+ required: true
10545
+ content:
10546
+ application/json:
10547
+ schema:
10548
+ $ref: "#/components/schemas/ShamirKekSetupRequest"
10549
+ responses:
10550
+ "201":
10551
+ description: Shamir KEK configured (shares returned one-time)
10552
+ content:
10553
+ application/json:
10554
+ schema:
10555
+ $ref: "#/components/schemas/ShamirKekSetupResponse"
10556
+ "400":
10557
+ $ref: "#/components/responses/BadRequest"
10558
+ "401":
10559
+ $ref: "#/components/responses/Unauthorized"
10560
+ "403":
10561
+ $ref: "#/components/responses/Forbidden"
10562
+
10563
+ /v1/org/shamir-kek:
10564
+ get:
10565
+ tags: [Shamir KEK]
10566
+ summary: Get Shamir KEK status
10567
+ description: Returns the current Shamir KEK configuration status for the org.
10568
+ operationId: getShamirKekStatus
10569
+ security:
10570
+ - BearerAuth: []
10571
+ responses:
10572
+ "200":
10573
+ description: Shamir KEK status
10574
+ content:
10575
+ application/json:
10576
+ schema:
10577
+ $ref: "#/components/schemas/ShamirKekStatusResponse"
10578
+ "401":
10579
+ $ref: "#/components/responses/Unauthorized"
10580
+
10581
+ /v1/org/shamir-kek/reconstruct:
10582
+ post:
10583
+ tags: [Shamir KEK]
10584
+ summary: Reconstruct KEK from shares
10585
+ description: |
10586
+ Submit Shamir shares to reconstruct the org KEK. Requires at least
10587
+ `threshold` valid shares. Used during disaster recovery.
10588
+ operationId: reconstructShamirKek
10589
+ security:
10590
+ - BearerAuth: []
10591
+ requestBody:
10592
+ required: true
10593
+ content:
10594
+ application/json:
10595
+ schema:
10596
+ $ref: "#/components/schemas/ShamirKekReconstructRequest"
10597
+ responses:
10598
+ "200":
10599
+ description: Reconstruction result
10600
+ content:
10601
+ application/json:
10602
+ schema:
10603
+ $ref: "#/components/schemas/ShamirKekReconstructResponse"
10604
+ "400":
10605
+ $ref: "#/components/responses/BadRequest"
10606
+ "401":
10607
+ $ref: "#/components/responses/Unauthorized"
10608
+ "403":
10609
+ $ref: "#/components/responses/Forbidden"
10610
+
10611
+ /v1/org/shamir-kek/recovery-codes:
10612
+ get:
10613
+ tags: [Shamir KEK]
10614
+ summary: Get Shamir recovery codes (one-time)
10615
+ description: |
10616
+ Returns the one-time recovery codes for the Shamir KEK. These codes
10617
+ can be used as an emergency fallback if custodian shares are lost.
10618
+ Codes are only returned once — subsequent calls return 410.
10619
+ operationId: getShamirKekRecoveryCodes
10620
+ security:
10621
+ - BearerAuth: []
10622
+ responses:
10623
+ "200":
10624
+ description: Recovery codes (one-time)
10625
+ content:
10626
+ application/json:
10627
+ schema:
10628
+ $ref: "#/components/schemas/ShamirKekRecoveryCodesResponse"
10629
+ "401":
10630
+ $ref: "#/components/responses/Unauthorized"
10631
+ "403":
10632
+ $ref: "#/components/responses/Forbidden"
10633
+ "410":
10634
+ description: Codes already retrieved
10635
+
10636
+ /v1/org/shamir-kek/verify-recovery-code:
10637
+ post:
10638
+ tags: [Shamir KEK]
10639
+ summary: Verify a Shamir recovery code
10640
+ description: Check whether a recovery code is valid without consuming it.
10641
+ operationId: verifyShamirKekRecoveryCode
10642
+ security:
10643
+ - BearerAuth: []
10644
+ requestBody:
10645
+ required: true
10646
+ content:
10647
+ application/json:
10648
+ schema:
10649
+ $ref: "#/components/schemas/ShamirKekVerifyCodeRequest"
10650
+ responses:
10651
+ "200":
10652
+ description: Verification result
10653
+ content:
10654
+ application/json:
10655
+ schema:
10656
+ $ref: "#/components/schemas/ShamirKekVerifyCodeResponse"
10657
+ "400":
10658
+ $ref: "#/components/responses/BadRequest"
10659
+ "401":
10660
+ $ref: "#/components/responses/Unauthorized"
10661
+
10662
+ # =============================================================================
10663
+ # COMPONENTS
10664
+ # =============================================================================
10665
+
10666
+ components:
10667
+ securitySchemes:
10668
+ BearerAuth:
10669
+ type: http
10670
+ scheme: bearer
10671
+ bearerFormat: JWT
10672
+ ApiKeyAuth:
10673
+ type: http
10674
+ scheme: bearer
10675
+ description: 1ck_ prefixed API key used as Bearer token
10676
+
10677
+ parameters:
10678
+ VaultId:
10679
+ name: vault_id
10680
+ in: path
10681
+ required: true
10682
+ schema:
10683
+ type: string
10684
+ format: uuid
10685
+ SecretPath:
10686
+ name: path
10687
+ in: path
10688
+ required: true
10689
+ schema:
10690
+ type: string
10691
+ description: Secret path (e.g. "db/credentials")
10692
+ AgentId:
10693
+ name: agent_id
10694
+ in: path
10695
+ required: true
10696
+ schema:
10697
+ type: string
10698
+ format: uuid
10699
+ PolicyId:
10700
+ name: policy_id
10701
+ in: path
10702
+ required: true
10703
+ schema:
10704
+ type: string
10705
+ format: uuid
10706
+ CardId:
10707
+ name: card_id
10708
+ in: path
10709
+ required: true
10710
+ schema:
10711
+ type: string
10712
+ format: uuid
10713
+ IncludeSignedTx:
10714
+ name: include_signed_tx
10715
+ in: query
10716
+ required: false
10717
+ description: >
10718
+ Set to `true` or `1` to include the raw signed transaction hex in the response.
10719
+ Omitted by default to reduce key exfiltration risk. Only the literal values "true" or "1" enable inclusion; any other value or omission returns responses without signed_tx.
10720
+ Applies to GET /v1/agents/{agent_id}/transactions and GET /v1/agents/{agent_id}/transactions/{tx_id}.
10721
+ schema:
10722
+ type: boolean
10723
+ default: false
10724
+ example: false
10725
+
10726
+ responses:
10727
+ BadRequest:
10728
+ description: Invalid request
10729
+ content:
10730
+ application/json:
10731
+ schema:
10732
+ $ref: "#/components/schemas/ProblemDetails"
10733
+ Unauthorized:
10734
+ description: Authentication required or invalid
10735
+ content:
10736
+ application/json:
10737
+ schema:
10738
+ $ref: "#/components/schemas/ProblemDetails"
10739
+ Forbidden:
10740
+ description: Insufficient permissions
10741
+ content:
10742
+ application/json:
10743
+ schema:
10744
+ $ref: "#/components/schemas/ProblemDetails"
10745
+ NotFound:
10746
+ description: Resource not found
10747
+ content:
10748
+ application/json:
10749
+ schema:
10750
+ $ref: "#/components/schemas/ProblemDetails"
10751
+ PaymentRequired:
10752
+ description: x402 payment required
10753
+ content:
10754
+ application/json:
10755
+ schema:
10756
+ $ref: "#/components/schemas/PaymentRequirement"
10757
+ Conflict:
10758
+ description: Resource already exists or conflict
10759
+ content:
10760
+ application/json:
10761
+ schema:
10762
+ $ref: "#/components/schemas/ProblemDetails"
10763
+
10764
+ schemas:
10765
+ OrderCardRequest:
10766
+ type: object
10767
+ required: [kind, amount_usd]
10768
+ properties:
10769
+ kind:
10770
+ type: string
10771
+ enum: [prepaid, gift_card]
10772
+ amount_usd:
10773
+ type: string
10774
+ description: USD amount to load onto the card.
10775
+ example: "25.00"
10776
+ laso_server_id:
10777
+ type: string
10778
+ description: Optional Laso gift-card server/brand id (gift cards only).
10779
+ country:
10780
+ type: string
10781
+ description: Optional country (prepaid cards; defaults to US).
10782
+ CardResponse:
10783
+ type: object
10784
+ description: Masked card view — never contains PAN/CVV.
10785
+ required: [id, issuer, kind, currency, status, storage_mode, reveal_policy, created_at, updated_at]
10786
+ properties:
10787
+ id:
10788
+ type: string
10789
+ format: uuid
10790
+ agent_id:
10791
+ type: string
10792
+ format: uuid
10793
+ nullable: true
10794
+ issuer:
10795
+ type: string
10796
+ enum: [laso, manual]
10797
+ kind:
10798
+ type: string
10799
+ enum: [prepaid, gift_card]
10800
+ brand:
10801
+ type: string
10802
+ last4:
10803
+ type: string
10804
+ exp_month:
10805
+ type: integer
10806
+ exp_year:
10807
+ type: integer
10808
+ currency:
10809
+ type: string
10810
+ order_amount_usd:
10811
+ type: string
10812
+ balance:
10813
+ type: string
10814
+ status:
10815
+ type: string
10816
+ enum: [ordering, pending, ready, depleted, expired, voided, orphaned_payment, awaiting_approval, rejected]
10817
+ storage_mode:
10818
+ type: string
10819
+ enum: [reference, full]
10820
+ reveal_policy:
10821
+ type: object
10822
+ additionalProperties: true
10348
10823
  approval_id:
10349
10824
  type: string
10350
10825
  format: uuid
@@ -11174,6 +11649,19 @@ components:
11174
11649
  $ref: "#/components/schemas/ConsensusTrigger"
11175
11650
  tx_conditions:
11176
11651
  $ref: "#/components/schemas/TxConditions"
11652
+ approval_id:
11653
+ type: string
11654
+ format: uuid
11655
+ description: >
11656
+ Optional completed approval ID for control-plane consensus bypass.
11657
+ When control-plane consensus policies match, resubmit with this
11658
+ field after the approval has been executed.
11659
+ policy_schema_version:
11660
+ type: integer
11661
+ default: 2
11662
+ description: |
11663
+ Policy schema version. Version 1 = legacy field-matching only.
11664
+ Version 2 = expression engine support in tx_conditions.
11177
11665
 
11178
11666
  UpdatePolicyRequest:
11179
11667
  type: object
@@ -11203,6 +11691,11 @@ components:
11203
11691
  $ref: "#/components/schemas/ConsensusTrigger"
11204
11692
  tx_conditions:
11205
11693
  $ref: "#/components/schemas/TxConditions"
11694
+ approval_id:
11695
+ type: string
11696
+ format: uuid
11697
+ description: >
11698
+ Optional completed approval ID for control-plane consensus bypass.
11206
11699
 
11207
11700
  PolicyResponse:
11208
11701
  type: object
@@ -11261,6 +11754,9 @@ components:
11261
11754
  $ref: "#/components/schemas/ConsensusTrigger"
11262
11755
  tx_conditions:
11263
11756
  $ref: "#/components/schemas/TxConditions"
11757
+ policy_schema_version:
11758
+ type: integer
11759
+ description: Policy schema version (1 = legacy, 2 = expression engine)
11264
11760
 
11265
11761
  PolicyListResponse:
11266
11762
  type: object
@@ -11468,6 +11964,12 @@ components:
11468
11964
  type: boolean
11469
11965
  default: false
11470
11966
  description: When true, env var resolve endpoints auto-fill environment from this agent's tag.
11967
+ approval_id:
11968
+ type: string
11969
+ format: uuid
11970
+ description: >
11971
+ Optional completed approval ID for control-plane consensus bypass
11972
+ when creating an agent under a control-plane governance policy.
11471
11973
 
11472
11974
  UpdateAgentRequest:
11473
11975
  type: object
@@ -12499,6 +13001,22 @@ components:
12499
13001
  Optional pending approval ID. When consensus policies match,
12500
13002
  clients resubmit with this field set to bypass the 202 gate
12501
13003
  after the approval has been executed.
13004
+ raw_transaction:
13005
+ type: string
13006
+ description: >
13007
+ Pre-built raw transaction as a base64-encoded byte string.
13008
+ When provided, the handler decodes and deep-inspects the
13009
+ transaction for policy evaluation before signing. Supported
13010
+ for non-EVM chains where the client constructs the
13011
+ transaction payload.
13012
+ tron_transaction:
13013
+ type: object
13014
+ additionalProperties: true
13015
+ description: >
13016
+ Pre-built Tron transaction JSON object. When provided,
13017
+ the handler signs the transaction as-is using the Tron
13018
+ protobuf format. Enables full Tron transaction type
13019
+ coverage beyond simple TRX/TRC-20 transfers.
12502
13020
 
12503
13021
  SignTransactionRequest:
12504
13022
  type: object
@@ -12973,6 +13491,22 @@ components:
12973
13491
  Optional pending approval ID. When consensus policies match,
12974
13492
  clients resubmit with this field set to bypass the 202 gate
12975
13493
  after the approval has been executed.
13494
+ raw_transaction:
13495
+ type: string
13496
+ description: >
13497
+ Pre-built raw transaction as a base64-encoded byte string.
13498
+ When provided, the handler decodes and deep-inspects the
13499
+ transaction for policy evaluation before signing. Supported
13500
+ for non-EVM chains where the client constructs the
13501
+ transaction payload.
13502
+ tron_transaction:
13503
+ type: object
13504
+ additionalProperties: true
13505
+ description: >
13506
+ Pre-built Tron transaction JSON object. When provided,
13507
+ the handler signs the transaction as-is using the Tron
13508
+ protobuf format. Enables full Tron transaction type
13509
+ coverage beyond simple TRX/TRC-20 transfers.
12976
13510
 
12977
13511
  SignIntentResponse:
12978
13512
  type: object
@@ -13699,6 +14233,67 @@ components:
13699
14233
  count:
13700
14234
  type: integer
13701
14235
 
14236
+ AuditVerifyResponse:
14237
+ type: object
14238
+ required: [chain_valid, events_verified, events_checked, scheme]
14239
+ properties:
14240
+ chain_valid:
14241
+ type: boolean
14242
+ description: Whether the integrity hash chain is unbroken
14243
+ events_verified:
14244
+ type: integer
14245
+ format: int64
14246
+ description: Number of events with valid integrity hashes
14247
+ events_checked:
14248
+ type: integer
14249
+ description: Total events examined
14250
+ broken_at_event_id:
14251
+ type: string
14252
+ format: uuid
14253
+ nullable: true
14254
+ description: First event where chain integrity broke (null if valid)
14255
+ scheme:
14256
+ type: object
14257
+ properties:
14258
+ algorithm:
14259
+ type: string
14260
+ example: HMAC-SHA256
14261
+ chain_structure:
14262
+ type: string
14263
+ hash_field:
14264
+ type: string
14265
+ link_field:
14266
+ type: string
14267
+ documentation:
14268
+ type: string
14269
+ format: uri
14270
+
14271
+ ShroudAttestationResponse:
14272
+ type: object
14273
+ required: [attested, image_hash, identity_token, verification]
14274
+ properties:
14275
+ attested:
14276
+ type: boolean
14277
+ description: Whether TEE attestation was successfully fetched
14278
+ image_hash:
14279
+ type: string
14280
+ description: Confidential VM image hash (compare against published Docker digest)
14281
+ identity_token:
14282
+ type: string
14283
+ description: GCE metadata identity JWT (verify against Google public keys)
14284
+ verification:
14285
+ type: object
14286
+ properties:
14287
+ steps:
14288
+ type: array
14289
+ items:
14290
+ type: string
14291
+ google_certs_url:
14292
+ type: string
14293
+ format: uri
14294
+ expected_audience:
14295
+ type: string
14296
+
13702
14297
  AuditEvent:
13703
14298
  type: object
13704
14299
  properties:
@@ -17652,6 +18247,14 @@ components:
17652
18247
  When true, conditions are also evaluated against inner calls
17653
18248
  extracted from wrapper transactions (multicall, Safe execTransaction,
17654
18249
  ERC-4337 handleOps). A match on any inner call counts as an overall match.
18250
+ expression:
18251
+ type: string
18252
+ maxLength: 1024
18253
+ description: |
18254
+ Mini expression DSL for policy conditions (schema version 2+).
18255
+ References transaction context fields (chain, value_wei, to_address,
18256
+ function_selector, etc.) with boolean operators. Fail-closed on parse
18257
+ or evaluation errors. Example: `chain == 'ethereum' && value_wei > 1000000000000000000`
17655
18258
 
17656
18259
  ConsensusTrigger:
17657
18260
  type: object
@@ -17725,6 +18328,17 @@ components:
17725
18328
  always:
17726
18329
  type: boolean
17727
18330
  description: When true, this entry always matches regardless of other fields
18331
+ action_in:
18332
+ type: array
18333
+ items:
18334
+ type: string
18335
+ description: Control-plane actions to match (e.g. policy.create, signing_key.export)
18336
+ action_kind_in:
18337
+ type: array
18338
+ items:
18339
+ type: string
18340
+ description: |
18341
+ Version-agnostic action kind groups (e.g. signing_key.*, policy.*, member.*)
17728
18342
 
17729
18343
  TimeWindow:
17730
18344
  type: object
@@ -17837,6 +18451,18 @@ components:
17837
18451
  description: |
17838
18452
  Control-plane actions to match, e.g. policy.create, policy.update,
17839
18453
  policy.delete, signing_key.export, member.role_change, member.remove
18454
+ - type: object
18455
+ required: [type, action_kinds]
18456
+ properties:
18457
+ type:
18458
+ type: string
18459
+ enum: [action_kind_in]
18460
+ action_kinds:
18461
+ type: array
18462
+ items:
18463
+ type: string
18464
+ description: |
18465
+ Version-agnostic action kind groups, e.g. signing_key.*, policy.*, member.*
17840
18466
 
17841
18467
  ApprovalRequirement:
17842
18468
  type: object
@@ -18364,3 +18990,338 @@ components:
18364
18990
  type: string
18365
18991
  comment:
18366
18992
  type: string
18993
+
18994
+ # -----------------------------------------------------------------
18995
+ # Wallet Access Policy schemas
18996
+ # -----------------------------------------------------------------
18997
+
18998
+ CreateWalletAccessPolicyRequest:
18999
+ type: object
19000
+ required: [wallet_chain, permissions]
19001
+ properties:
19002
+ wallet_chain:
19003
+ type: string
19004
+ description: Chain for which the policy applies (e.g. ethereum, solana)
19005
+ target_agent_id:
19006
+ type: string
19007
+ format: uuid
19008
+ description: Agent granted access (mutually exclusive with target_user_id)
19009
+ target_user_id:
19010
+ type: string
19011
+ format: uuid
19012
+ description: User granted access (mutually exclusive with target_agent_id)
19013
+ permissions:
19014
+ type: array
19015
+ items:
19016
+ type: string
19017
+ enum: [send, swap, receive]
19018
+ conditions:
19019
+ type: object
19020
+ properties:
19021
+ max_value_per_tx_eth:
19022
+ type: string
19023
+ description: Max value per transaction in ETH
19024
+ daily_limit_eth:
19025
+ type: string
19026
+ description: Daily spend limit in ETH
19027
+ allowed_chains:
19028
+ type: array
19029
+ items:
19030
+ type: string
19031
+ allowed_tokens:
19032
+ type: array
19033
+ items:
19034
+ type: string
19035
+ expires_at:
19036
+ type: string
19037
+ format: date-time
19038
+
19039
+ WalletAccessPolicyResponse:
19040
+ type: object
19041
+ properties:
19042
+ id:
19043
+ type: string
19044
+ format: uuid
19045
+ org_id:
19046
+ type: string
19047
+ format: uuid
19048
+ wallet_chain:
19049
+ type: string
19050
+ target_agent_id:
19051
+ type: string
19052
+ format: uuid
19053
+ nullable: true
19054
+ target_user_id:
19055
+ type: string
19056
+ format: uuid
19057
+ nullable: true
19058
+ permissions:
19059
+ type: array
19060
+ items:
19061
+ type: string
19062
+ enum: [send, swap, receive]
19063
+ conditions:
19064
+ type: object
19065
+ nullable: true
19066
+ properties:
19067
+ max_value_per_tx_eth:
19068
+ type: string
19069
+ nullable: true
19070
+ daily_limit_eth:
19071
+ type: string
19072
+ nullable: true
19073
+ allowed_chains:
19074
+ type: array
19075
+ items:
19076
+ type: string
19077
+ nullable: true
19078
+ allowed_tokens:
19079
+ type: array
19080
+ items:
19081
+ type: string
19082
+ nullable: true
19083
+ expires_at:
19084
+ type: string
19085
+ format: date-time
19086
+ nullable: true
19087
+ created_at:
19088
+ type: string
19089
+ format: date-time
19090
+
19091
+ WalletAccessPolicyListResponse:
19092
+ type: object
19093
+ properties:
19094
+ policies:
19095
+ type: array
19096
+ items:
19097
+ $ref: "#/components/schemas/WalletAccessPolicyResponse"
19098
+
19099
+ # -----------------------------------------------------------------
19100
+ # Credential Recovery schemas
19101
+ # -----------------------------------------------------------------
19102
+
19103
+ CredentialRecoveryRequest:
19104
+ type: object
19105
+ required: [recovery_type]
19106
+ properties:
19107
+ recovery_type:
19108
+ type: string
19109
+ enum: [mfa_reset, passkey_reset, password_reset]
19110
+ reason:
19111
+ type: string
19112
+ description: Optional justification for the recovery request
19113
+
19114
+ CredentialRecoveryResponse:
19115
+ type: object
19116
+ properties:
19117
+ request_id:
19118
+ type: string
19119
+ format: uuid
19120
+ status:
19121
+ type: string
19122
+ enum: [pending_approval, approved, rejected, expired]
19123
+ recovery_type:
19124
+ type: string
19125
+ enum: [mfa_reset, passkey_reset, password_reset]
19126
+ created_at:
19127
+ type: string
19128
+ format: date-time
19129
+
19130
+ CredentialRecoveryListResponse:
19131
+ type: object
19132
+ properties:
19133
+ requests:
19134
+ type: array
19135
+ items:
19136
+ $ref: "#/components/schemas/CredentialRecoveryResponse"
19137
+
19138
+ CredentialRecoveryApproveResponse:
19139
+ type: object
19140
+ properties:
19141
+ request_id:
19142
+ type: string
19143
+ format: uuid
19144
+ status:
19145
+ type: string
19146
+ enum: [approved]
19147
+ recovery_code:
19148
+ type: string
19149
+ nullable: true
19150
+ description: One-time recovery code (only present for certain recovery types)
19151
+
19152
+ CredentialRecoveryExecuteResponse:
19153
+ type: object
19154
+ properties:
19155
+ request_id:
19156
+ type: string
19157
+ format: uuid
19158
+ status:
19159
+ type: string
19160
+ enum: [executed]
19161
+ recovery_type:
19162
+ type: string
19163
+ executed_at:
19164
+ type: string
19165
+ format: date-time
19166
+
19167
+ CredentialRecoveryPolicyResponse:
19168
+ type: object
19169
+ properties:
19170
+ enabled:
19171
+ type: boolean
19172
+ require_admin_approval:
19173
+ type: boolean
19174
+ delay_hours:
19175
+ type: integer
19176
+ description: Waiting period before recovery takes effect
19177
+ allowed_types:
19178
+ type: array
19179
+ items:
19180
+ type: string
19181
+ enum: [mfa_reset, passkey_reset, password_reset]
19182
+
19183
+ CredentialRecoveryPolicyRequest:
19184
+ type: object
19185
+ properties:
19186
+ enabled:
19187
+ type: boolean
19188
+ require_admin_approval:
19189
+ type: boolean
19190
+ delay_hours:
19191
+ type: integer
19192
+ allowed_types:
19193
+ type: array
19194
+ items:
19195
+ type: string
19196
+ enum: [mfa_reset, passkey_reset, password_reset]
19197
+
19198
+ # -----------------------------------------------------------------
19199
+ # Shamir KEK schemas
19200
+ # -----------------------------------------------------------------
19201
+
19202
+ ShamirKekSetupRequest:
19203
+ type: object
19204
+ required: [threshold, total_shares, custodian_emails]
19205
+ properties:
19206
+ threshold:
19207
+ type: integer
19208
+ enum: [2, 3]
19209
+ description: Minimum shares required to reconstruct the KEK
19210
+ total_shares:
19211
+ type: integer
19212
+ enum: [3, 5]
19213
+ description: Total number of shares to generate
19214
+ custodian_emails:
19215
+ type: array
19216
+ items:
19217
+ type: string
19218
+ format: email
19219
+ description: Email addresses of share custodians
19220
+
19221
+ ShamirKekSetupResponse:
19222
+ type: object
19223
+ properties:
19224
+ kek_id:
19225
+ type: string
19226
+ threshold:
19227
+ type: integer
19228
+ total_shares:
19229
+ type: integer
19230
+ shares:
19231
+ type: array
19232
+ description: One-time share distribution (never returned again)
19233
+ items:
19234
+ type: object
19235
+ properties:
19236
+ index:
19237
+ type: integer
19238
+ custodian_email:
19239
+ type: string
19240
+ format: email
19241
+ share_b64:
19242
+ type: string
19243
+ description: Base64-encoded share
19244
+ custody_mode:
19245
+ type: string
19246
+ created_at:
19247
+ type: string
19248
+ format: date-time
19249
+
19250
+ ShamirKekStatusResponse:
19251
+ type: object
19252
+ properties:
19253
+ configured:
19254
+ type: boolean
19255
+ kek_id:
19256
+ type: string
19257
+ nullable: true
19258
+ threshold:
19259
+ type: integer
19260
+ nullable: true
19261
+ total_shares:
19262
+ type: integer
19263
+ nullable: true
19264
+ custody_mode:
19265
+ type: string
19266
+ nullable: true
19267
+ custodians:
19268
+ type: array
19269
+ nullable: true
19270
+ items:
19271
+ type: object
19272
+ properties:
19273
+ email:
19274
+ type: string
19275
+ format: email
19276
+ share_provided:
19277
+ type: boolean
19278
+ created_at:
19279
+ type: string
19280
+ format: date-time
19281
+ nullable: true
19282
+
19283
+ ShamirKekReconstructRequest:
19284
+ type: object
19285
+ required: [shares]
19286
+ properties:
19287
+ shares:
19288
+ type: array
19289
+ items:
19290
+ type: object
19291
+ required: [index, share_b64]
19292
+ properties:
19293
+ index:
19294
+ type: integer
19295
+ share_b64:
19296
+ type: string
19297
+ description: Base64-encoded share
19298
+
19299
+ ShamirKekReconstructResponse:
19300
+ type: object
19301
+ properties:
19302
+ status:
19303
+ type: string
19304
+ enum: [accepted, reconstructed]
19305
+ message:
19306
+ type: string
19307
+
19308
+ ShamirKekRecoveryCodesResponse:
19309
+ type: object
19310
+ properties:
19311
+ codes:
19312
+ type: array
19313
+ items:
19314
+ type: string
19315
+
19316
+ ShamirKekVerifyCodeRequest:
19317
+ type: object
19318
+ required: [code]
19319
+ properties:
19320
+ code:
19321
+ type: string
19322
+
19323
+ ShamirKekVerifyCodeResponse:
19324
+ type: object
19325
+ properties:
19326
+ valid:
19327
+ type: boolean