@1claw/openapi-spec 0.53.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 (3) hide show
  1. package/openapi.json +1715 -562
  2. package/openapi.yaml +782 -1
  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.53.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
@@ -10245,6 +10251,414 @@ paths:
10245
10251
  "403":
10246
10252
  $ref: "#/components/responses/Forbidden"
10247
10253
 
10254
+ # ---------------------------------------------------------------------------
10255
+ # Wallet Access Policies
10256
+ # ---------------------------------------------------------------------------
10257
+
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"
10314
+
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"
10338
+
10339
+ # ---------------------------------------------------------------------------
10340
+ # Credential Recovery
10341
+ # ---------------------------------------------------------------------------
10342
+
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
+
10248
10662
  # =============================================================================
10249
10663
  # COMPONENTS
10250
10664
  # =============================================================================
@@ -12587,6 +13001,22 @@ components:
12587
13001
  Optional pending approval ID. When consensus policies match,
12588
13002
  clients resubmit with this field set to bypass the 202 gate
12589
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.
12590
13020
 
12591
13021
  SignTransactionRequest:
12592
13022
  type: object
@@ -13061,6 +13491,22 @@ components:
13061
13491
  Optional pending approval ID. When consensus policies match,
13062
13492
  clients resubmit with this field set to bypass the 202 gate
13063
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.
13064
13510
 
13065
13511
  SignIntentResponse:
13066
13512
  type: object
@@ -18544,3 +18990,338 @@ components:
18544
18990
  type: string
18545
18991
  comment:
18546
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