@1claw/openapi-spec 0.22.2 → 0.23.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.
package/openapi.yaml CHANGED
@@ -62,6 +62,8 @@ tags:
62
62
  description: Platform administration
63
63
  - name: Health
64
64
  description: Service health checks
65
+ - name: Platform
66
+ description: Platform API for developers building on 1Claw (plt_ keys, user provisioning, bootstrap templates)
65
67
 
66
68
  # =============================================================================
67
69
  # PATHS
@@ -1843,6 +1845,58 @@ paths:
1843
1845
  "404":
1844
1846
  $ref: "#/components/responses/NotFound"
1845
1847
 
1848
+ /v1/agents/{agent_id}/signing-keys/{chain}/export:
1849
+ post:
1850
+ tags: [Signing Keys]
1851
+ summary: Export a signing key (private key included)
1852
+ description: |
1853
+ Export the private key for an agent's signing key. Requires re-authentication
1854
+ via the X-Auth-Confirm header containing the user's account password.
1855
+ Human users only — agents cannot export keys.
1856
+ operationId: exportSigningKey
1857
+ parameters:
1858
+ - $ref: "#/components/parameters/AgentId"
1859
+ - name: chain
1860
+ in: path
1861
+ required: true
1862
+ schema:
1863
+ type: string
1864
+ - name: X-Auth-Confirm
1865
+ in: header
1866
+ required: true
1867
+ description: Account password for re-authentication
1868
+ schema:
1869
+ type: string
1870
+ format: password
1871
+ responses:
1872
+ "200":
1873
+ description: Signing key exported successfully
1874
+ content:
1875
+ application/json:
1876
+ schema:
1877
+ type: object
1878
+ required: [chain, curve, public_key, private_key, key_version, agent_id]
1879
+ properties:
1880
+ chain:
1881
+ type: string
1882
+ curve:
1883
+ type: string
1884
+ public_key:
1885
+ type: string
1886
+ address:
1887
+ type: string
1888
+ private_key:
1889
+ type: string
1890
+ key_version:
1891
+ type: integer
1892
+ agent_id:
1893
+ type: string
1894
+ format: uuid
1895
+ "403":
1896
+ $ref: "#/components/responses/Forbidden"
1897
+ "404":
1898
+ $ref: "#/components/responses/NotFound"
1899
+
1846
1900
  # ---------------------------------------------------------------------------
1847
1901
  # Unified Signing Intent
1848
1902
  # ---------------------------------------------------------------------------
@@ -2929,7 +2983,8 @@ paths:
2929
2983
  summary: Export the private key for a treasury wallet
2930
2984
  description: |
2931
2985
  Returns the raw private key hex for the user's active wallet on
2932
- the given chain. Audit-logged as `treasury_wallet.export`.
2986
+ the given chain. Requires re-authentication via the `X-Auth-Confirm`
2987
+ header (account password). Audit-logged as `treasury_wallet.export`.
2933
2988
  Human users only.
2934
2989
  operationId: exportTreasuryWallet
2935
2990
  security:
@@ -2940,6 +2995,13 @@ paths:
2940
2995
  required: true
2941
2996
  schema:
2942
2997
  type: string
2998
+ - name: X-Auth-Confirm
2999
+ in: header
3000
+ required: true
3001
+ description: Account password for re-authentication
3002
+ schema:
3003
+ type: string
3004
+ format: password
2943
3005
  responses:
2944
3006
  "200":
2945
3007
  description: Private key exported
@@ -3356,6 +3418,318 @@ paths:
3356
3418
  "401":
3357
3419
  description: Unauthorized
3358
3420
 
3421
+ # --- Platform API ---
3422
+
3423
+ /v1/platform/apps:
3424
+ post:
3425
+ tags: [Platform]
3426
+ summary: Register a platform app
3427
+ description: Register a new platform app for building on top of 1Claw. Returns an API key (plt_ prefix) that must be saved immediately.
3428
+ security:
3429
+ - BearerAuth: []
3430
+ requestBody:
3431
+ required: true
3432
+ content:
3433
+ application/json:
3434
+ schema:
3435
+ $ref: "#/components/schemas/CreatePlatformAppRequest"
3436
+ responses:
3437
+ "201":
3438
+ description: Platform app created
3439
+ content:
3440
+ application/json:
3441
+ schema:
3442
+ $ref: "#/components/schemas/PlatformAppCreatedResponse"
3443
+ "400":
3444
+ description: Invalid request
3445
+ "403":
3446
+ description: Only human users can register platform apps
3447
+ get:
3448
+ tags: [Platform]
3449
+ summary: List platform apps
3450
+ description: List all platform apps in the organization.
3451
+ security:
3452
+ - BearerAuth: []
3453
+ responses:
3454
+ "200":
3455
+ description: List of platform apps
3456
+ content:
3457
+ application/json:
3458
+ schema:
3459
+ type: array
3460
+ items:
3461
+ $ref: "#/components/schemas/PlatformAppResponse"
3462
+
3463
+ /v1/platform/apps/{appId}:
3464
+ get:
3465
+ tags: [Platform]
3466
+ summary: Get platform app details
3467
+ security:
3468
+ - BearerAuth: []
3469
+ parameters:
3470
+ - in: path
3471
+ name: appId
3472
+ required: true
3473
+ schema:
3474
+ type: string
3475
+ format: uuid
3476
+ responses:
3477
+ "200":
3478
+ description: Platform app details
3479
+ content:
3480
+ application/json:
3481
+ schema:
3482
+ $ref: "#/components/schemas/PlatformAppResponse"
3483
+ "404":
3484
+ description: Not found
3485
+ patch:
3486
+ tags: [Platform]
3487
+ summary: Update platform app
3488
+ security:
3489
+ - BearerAuth: []
3490
+ parameters:
3491
+ - in: path
3492
+ name: appId
3493
+ required: true
3494
+ schema:
3495
+ type: string
3496
+ format: uuid
3497
+ requestBody:
3498
+ required: true
3499
+ content:
3500
+ application/json:
3501
+ schema:
3502
+ $ref: "#/components/schemas/UpdatePlatformAppRequest"
3503
+ responses:
3504
+ "200":
3505
+ description: Updated platform app
3506
+ content:
3507
+ application/json:
3508
+ schema:
3509
+ $ref: "#/components/schemas/PlatformAppResponse"
3510
+ delete:
3511
+ tags: [Platform]
3512
+ summary: Delete platform app
3513
+ security:
3514
+ - BearerAuth: []
3515
+ parameters:
3516
+ - in: path
3517
+ name: appId
3518
+ required: true
3519
+ schema:
3520
+ type: string
3521
+ format: uuid
3522
+ responses:
3523
+ "204":
3524
+ description: Deleted
3525
+ "403":
3526
+ description: Only human users can delete platform apps
3527
+
3528
+ /v1/platform/apps/{appId}/templates:
3529
+ post:
3530
+ tags: [Platform]
3531
+ summary: Create bootstrap template
3532
+ description: Create a template that defines what vault, agents, and policies to bootstrap for each connected user.
3533
+ security:
3534
+ - BearerAuth: []
3535
+ parameters:
3536
+ - in: path
3537
+ name: appId
3538
+ required: true
3539
+ schema:
3540
+ type: string
3541
+ format: uuid
3542
+ requestBody:
3543
+ required: true
3544
+ content:
3545
+ application/json:
3546
+ schema:
3547
+ $ref: "#/components/schemas/CreateTemplateRequest"
3548
+ responses:
3549
+ "201":
3550
+ description: Template created
3551
+ content:
3552
+ application/json:
3553
+ schema:
3554
+ $ref: "#/components/schemas/PlatformTemplateResponse"
3555
+ get:
3556
+ tags: [Platform]
3557
+ summary: List templates
3558
+ security:
3559
+ - BearerAuth: []
3560
+ parameters:
3561
+ - in: path
3562
+ name: appId
3563
+ required: true
3564
+ schema:
3565
+ type: string
3566
+ format: uuid
3567
+ responses:
3568
+ "200":
3569
+ description: List of templates
3570
+ content:
3571
+ application/json:
3572
+ schema:
3573
+ type: array
3574
+ items:
3575
+ $ref: "#/components/schemas/PlatformTemplateResponse"
3576
+
3577
+ /v1/platform/users/upsert:
3578
+ post:
3579
+ tags: [Platform]
3580
+ summary: Provision or look up a platform user
3581
+ description: Upserts a user using either an OIDC subject_token (verified against the platform app's JWKS) or an email address. Returns the user handle and connection ID.
3582
+ security:
3583
+ - BearerAuth: []
3584
+ requestBody:
3585
+ required: true
3586
+ content:
3587
+ application/json:
3588
+ schema:
3589
+ $ref: "#/components/schemas/UpsertPlatformUserRequest"
3590
+ responses:
3591
+ "200":
3592
+ description: Existing user found
3593
+ content:
3594
+ application/json:
3595
+ schema:
3596
+ $ref: "#/components/schemas/PlatformUserResponse"
3597
+ "201":
3598
+ description: New user created
3599
+ content:
3600
+ application/json:
3601
+ schema:
3602
+ $ref: "#/components/schemas/PlatformUserResponse"
3603
+
3604
+ /v1/platform/apps/{appId}/users:
3605
+ get:
3606
+ tags: [Platform]
3607
+ summary: List connected users
3608
+ description: List all users connected to this platform app.
3609
+ security:
3610
+ - BearerAuth: []
3611
+ parameters:
3612
+ - in: path
3613
+ name: appId
3614
+ required: true
3615
+ schema:
3616
+ type: string
3617
+ format: uuid
3618
+ responses:
3619
+ "200":
3620
+ description: Connected users
3621
+ content:
3622
+ application/json:
3623
+ schema:
3624
+ type: array
3625
+ items:
3626
+ $ref: "#/components/schemas/PlatformConnectedUserResponse"
3627
+
3628
+ /v1/platform/connections/{connectionId}/bootstrap:
3629
+ post:
3630
+ tags: [Platform]
3631
+ summary: Bootstrap resources for a connected user
3632
+ description: Executes a template to create vault, agent, and policies for the connected user. Returns a claim URL and token for the user to claim their resources.
3633
+ security:
3634
+ - BearerAuth: []
3635
+ parameters:
3636
+ - in: path
3637
+ name: connectionId
3638
+ required: true
3639
+ schema:
3640
+ type: string
3641
+ format: uuid
3642
+ requestBody:
3643
+ required: true
3644
+ content:
3645
+ application/json:
3646
+ schema:
3647
+ $ref: "#/components/schemas/BootstrapRequest"
3648
+ responses:
3649
+ "201":
3650
+ description: Resources bootstrapped
3651
+ content:
3652
+ application/json:
3653
+ schema:
3654
+ $ref: "#/components/schemas/BootstrapResponse"
3655
+
3656
+ /v1/platform/apps/{appId}/audit:
3657
+ get:
3658
+ tags: [Platform]
3659
+ summary: Platform audit log
3660
+ description: Returns audit events related to this platform app.
3661
+ security:
3662
+ - BearerAuth: []
3663
+ parameters:
3664
+ - in: path
3665
+ name: appId
3666
+ required: true
3667
+ schema:
3668
+ type: string
3669
+ format: uuid
3670
+ - in: query
3671
+ name: limit
3672
+ schema:
3673
+ type: integer
3674
+ default: 50
3675
+ - in: query
3676
+ name: offset
3677
+ schema:
3678
+ type: integer
3679
+ default: 0
3680
+ responses:
3681
+ "200":
3682
+ description: Audit events
3683
+ content:
3684
+ application/json:
3685
+ schema:
3686
+ type: object
3687
+ properties:
3688
+ events:
3689
+ type: array
3690
+ items:
3691
+ type: object
3692
+
3693
+ /v1/platform/connected-apps:
3694
+ get:
3695
+ tags: [Platform]
3696
+ summary: List connected apps (user side)
3697
+ description: Returns platform apps connected to the calling user's account.
3698
+ security:
3699
+ - BearerAuth: []
3700
+ responses:
3701
+ "200":
3702
+ description: Connected apps
3703
+ content:
3704
+ application/json:
3705
+ schema:
3706
+ type: object
3707
+ properties:
3708
+ connected_apps:
3709
+ type: array
3710
+ items:
3711
+ $ref: "#/components/schemas/ConnectedAppResponse"
3712
+
3713
+ /v1/platform/connected-apps/{connectionId}:
3714
+ delete:
3715
+ tags: [Platform]
3716
+ summary: Disconnect a platform app
3717
+ description: Disconnect the calling user from a platform app.
3718
+ security:
3719
+ - BearerAuth: []
3720
+ parameters:
3721
+ - in: path
3722
+ name: connectionId
3723
+ required: true
3724
+ schema:
3725
+ type: string
3726
+ format: uuid
3727
+ responses:
3728
+ "204":
3729
+ description: Disconnected
3730
+ "404":
3731
+ description: Connection not found
3732
+
3359
3733
  # =============================================================================
3360
3734
  # COMPONENTS
3361
3735
  # =============================================================================
@@ -6512,3 +6886,315 @@ components:
6512
6886
  enum: [healthy, degraded]
6513
6887
  version:
6514
6888
  type: string
6889
+
6890
+ # --- Platform API Schemas ---
6891
+
6892
+ CreatePlatformAppRequest:
6893
+ type: object
6894
+ required: [name, slug]
6895
+ properties:
6896
+ name:
6897
+ type: string
6898
+ slug:
6899
+ type: string
6900
+ minLength: 3
6901
+ maxLength: 64
6902
+ pattern: "^[a-zA-Z0-9_-]+$"
6903
+ description:
6904
+ type: string
6905
+ oidc_jwks_url:
6906
+ type: string
6907
+ format: uri
6908
+ oidc_issuer:
6909
+ type: string
6910
+ format: uri
6911
+ oidc_audience:
6912
+ type: string
6913
+ description: Expected audience claim for OIDC token validation
6914
+ redirect_uris:
6915
+ type: array
6916
+ items:
6917
+ type: string
6918
+ format: uri
6919
+ billing_model:
6920
+ type: string
6921
+ enum: [platform_pays, user_pays, hybrid]
6922
+ default: platform_pays
6923
+ auth_mode:
6924
+ type: string
6925
+ enum: [silent, user_signin, configurable]
6926
+ default: silent
6927
+ max_connected_users:
6928
+ type: integer
6929
+ nullable: true
6930
+
6931
+ UpdatePlatformAppRequest:
6932
+ type: object
6933
+ properties:
6934
+ name:
6935
+ type: string
6936
+ description:
6937
+ type: string
6938
+ logo_url:
6939
+ type: string
6940
+ oidc_jwks_url:
6941
+ type: string
6942
+ oidc_issuer:
6943
+ type: string
6944
+ oidc_audience:
6945
+ type: string
6946
+ description: Expected audience claim for OIDC token validation
6947
+ redirect_uris:
6948
+ type: array
6949
+ items:
6950
+ type: string
6951
+ webhook_url:
6952
+ type: string
6953
+ billing_model:
6954
+ type: string
6955
+ enum: [platform_pays, user_pays, hybrid]
6956
+ auth_mode:
6957
+ type: string
6958
+ enum: [silent, user_signin, configurable]
6959
+ max_connected_users:
6960
+ type: integer
6961
+ nullable: true
6962
+ is_active:
6963
+ type: boolean
6964
+
6965
+ PlatformAppResponse:
6966
+ type: object
6967
+ properties:
6968
+ id:
6969
+ type: string
6970
+ format: uuid
6971
+ name:
6972
+ type: string
6973
+ slug:
6974
+ type: string
6975
+ description:
6976
+ type: string
6977
+ logo_url:
6978
+ type: string
6979
+ nullable: true
6980
+ api_key_prefix:
6981
+ type: string
6982
+ oidc_jwks_url:
6983
+ type: string
6984
+ nullable: true
6985
+ oidc_issuer:
6986
+ type: string
6987
+ nullable: true
6988
+ oidc_audience:
6989
+ type: string
6990
+ nullable: true
6991
+ description: Expected audience claim for OIDC token validation
6992
+ redirect_uris:
6993
+ type: array
6994
+ items:
6995
+ type: string
6996
+ webhook_url:
6997
+ type: string
6998
+ nullable: true
6999
+ is_active:
7000
+ type: boolean
7001
+ billing_model:
7002
+ type: string
7003
+ auth_mode:
7004
+ type: string
7005
+ max_connected_users:
7006
+ type: integer
7007
+ nullable: true
7008
+ connected_users:
7009
+ type: integer
7010
+ created_at:
7011
+ type: string
7012
+ format: date-time
7013
+ updated_at:
7014
+ type: string
7015
+ format: date-time
7016
+
7017
+ PlatformAppCreatedResponse:
7018
+ allOf:
7019
+ - $ref: "#/components/schemas/PlatformAppResponse"
7020
+ - type: object
7021
+ required: [api_key]
7022
+ properties:
7023
+ api_key:
7024
+ type: string
7025
+ description: The platform API key. Save immediately - it cannot be retrieved again.
7026
+
7027
+ CreateTemplateRequest:
7028
+ type: object
7029
+ required: [name, spec]
7030
+ properties:
7031
+ name:
7032
+ type: string
7033
+ description:
7034
+ type: string
7035
+ spec:
7036
+ type: object
7037
+ description: |
7038
+ Template specification defining vault, agents, policies, and signing keys to bootstrap.
7039
+ Top-level fields: `vault` (object with name, description), `agents` (array of agent specs
7040
+ with name, description, shroud_enabled, intents, shroud_config), `policies` (array with
7041
+ vault_ref, principal_ref, paths, permissions, conditions), and `signing_keys` (array of
7042
+ `{ chain }` objects — supported chains: ethereum, bitcoin, solana, xrp, cardano, tron).
7043
+ When `signing_keys` is present, HSM-backed signing keys are auto-provisioned for the
7044
+ bootstrapped agent.
7045
+
7046
+ PlatformTemplateResponse:
7047
+ type: object
7048
+ properties:
7049
+ id:
7050
+ type: string
7051
+ format: uuid
7052
+ platform_app_id:
7053
+ type: string
7054
+ format: uuid
7055
+ name:
7056
+ type: string
7057
+ description:
7058
+ type: string
7059
+ version:
7060
+ type: integer
7061
+ spec:
7062
+ type: object
7063
+ is_active:
7064
+ type: boolean
7065
+ created_at:
7066
+ type: string
7067
+ format: date-time
7068
+ updated_at:
7069
+ type: string
7070
+ format: date-time
7071
+
7072
+ UpsertPlatformUserRequest:
7073
+ type: object
7074
+ properties:
7075
+ subject_token:
7076
+ type: string
7077
+ description: OIDC JWT from the platform's IdP (verified against JWKS)
7078
+ subject_token_type:
7079
+ type: string
7080
+ default: "urn:ietf:params:oauth:token-type:jwt"
7081
+ email:
7082
+ type: string
7083
+ format: email
7084
+ description: Fallback when subject_token is not provided
7085
+ display_name:
7086
+ type: string
7087
+
7088
+ PlatformUserResponse:
7089
+ type: object
7090
+ properties:
7091
+ user_handle:
7092
+ type: string
7093
+ format: uuid
7094
+ is_new:
7095
+ type: boolean
7096
+ connection_id:
7097
+ type: string
7098
+ format: uuid
7099
+ email:
7100
+ type: string
7101
+
7102
+ PlatformConnectedUserResponse:
7103
+ type: object
7104
+ properties:
7105
+ connection_id:
7106
+ type: string
7107
+ format: uuid
7108
+ user_id:
7109
+ type: string
7110
+ format: uuid
7111
+ external_subject:
7112
+ type: string
7113
+ status:
7114
+ type: string
7115
+ vault_ids:
7116
+ type: array
7117
+ items:
7118
+ type: string
7119
+ format: uuid
7120
+ agent_ids:
7121
+ type: array
7122
+ items:
7123
+ type: string
7124
+ format: uuid
7125
+ created_at:
7126
+ type: string
7127
+ format: date-time
7128
+ claimed_at:
7129
+ type: string
7130
+ format: date-time
7131
+ nullable: true
7132
+
7133
+ BootstrapRequest:
7134
+ type: object
7135
+ properties:
7136
+ template_id:
7137
+ type: string
7138
+ format: uuid
7139
+ description: Template to use. Falls back to the app's default template.
7140
+ return_to:
7141
+ type: string
7142
+ format: uri
7143
+ description: URL to redirect the user to after claiming resources.
7144
+
7145
+ BootstrapResponse:
7146
+ type: object
7147
+ properties:
7148
+ claim_url:
7149
+ type: string
7150
+ format: uri
7151
+ claim_token:
7152
+ type: string
7153
+ expires_in:
7154
+ type: integer
7155
+ description: Seconds until the claim token expires
7156
+ connection_id:
7157
+ type: string
7158
+ format: uuid
7159
+ summary:
7160
+ type: object
7161
+ properties:
7162
+ vault_id:
7163
+ type: string
7164
+ format: uuid
7165
+ nullable: true
7166
+ agent_id:
7167
+ type: string
7168
+ format: uuid
7169
+ nullable: true
7170
+ policy_ids:
7171
+ type: array
7172
+ items:
7173
+ type: string
7174
+ format: uuid
7175
+
7176
+ ConnectedAppResponse:
7177
+ type: object
7178
+ properties:
7179
+ connection_id:
7180
+ type: string
7181
+ format: uuid
7182
+ app_name:
7183
+ type: string
7184
+ app_slug:
7185
+ type: string
7186
+ status:
7187
+ type: string
7188
+ vault_ids:
7189
+ type: array
7190
+ items:
7191
+ type: string
7192
+ format: uuid
7193
+ agent_ids:
7194
+ type: array
7195
+ items:
7196
+ type: string
7197
+ format: uuid
7198
+ created_at:
7199
+ type: string
7200
+ format: date-time