@1claw/openapi-spec 0.27.0 → 0.29.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 (4) hide show
  1. package/README.md +3 -1
  2. package/openapi.json +3315 -2003
  3. package/openapi.yaml +845 -11
  4. package/package.json +2 -2
package/openapi.yaml CHANGED
@@ -64,6 +64,10 @@ tags:
64
64
  description: Service health checks
65
65
  - name: Approvals
66
66
  description: Human-in-the-loop approval workflow for agent actions
67
+ - name: Signing Keys
68
+ description: Per-agent multi-chain signing key management
69
+ - name: Webhooks
70
+ description: Event webhook registration and management
67
71
  - name: Platform
68
72
  description: Platform API for developers building on 1Claw (plt_ keys, user provisioning, bootstrap templates)
69
73
 
@@ -2378,6 +2382,37 @@ paths:
2378
2382
  "404":
2379
2383
  $ref: "#/components/responses/NotFound"
2380
2384
 
2385
+ /v1/agents/{agent_id}/signing-keys/{chain}/balance:
2386
+ get:
2387
+ tags: [Signing Keys]
2388
+ summary: Get signing key balance
2389
+ description: |
2390
+ Returns the native token balance for the agent's signing key address
2391
+ on the specified chain.
2392
+ operationId: getSigningKeyBalance
2393
+ security:
2394
+ - BearerAuth: []
2395
+ parameters:
2396
+ - $ref: "#/components/parameters/AgentId"
2397
+ - name: chain
2398
+ in: path
2399
+ required: true
2400
+ schema:
2401
+ type: string
2402
+ responses:
2403
+ "200":
2404
+ description: Signing key balance
2405
+ content:
2406
+ application/json:
2407
+ schema:
2408
+ $ref: "#/components/schemas/SigningKeyBalanceResponse"
2409
+ "401":
2410
+ $ref: "#/components/responses/Unauthorized"
2411
+ "403":
2412
+ $ref: "#/components/responses/Forbidden"
2413
+ "404":
2414
+ $ref: "#/components/responses/NotFound"
2415
+
2381
2416
  # ---------------------------------------------------------------------------
2382
2417
  # Unified Signing Intent
2383
2418
  # ---------------------------------------------------------------------------
@@ -3356,6 +3391,220 @@ paths:
3356
3391
  "404":
3357
3392
  $ref: "#/components/responses/NotFound"
3358
3393
 
3394
+ # ---------------------------------------------------------------------------
3395
+ # Treasury Proposals (multisig propose / sign / execute)
3396
+ # ---------------------------------------------------------------------------
3397
+
3398
+ /v1/treasury/{treasury_id}/proposals:
3399
+ post:
3400
+ tags: [Treasury Proposals]
3401
+ summary: Create a multisig proposal
3402
+ description: |
3403
+ Create a new Safe multisig transaction proposal. The proposer must be a
3404
+ treasury signer or an agent with an active delegation for the treasury.
3405
+ If auto-approve rules match, the agent's signature is auto-inserted and
3406
+ auto-execute fires if threshold is met.
3407
+ operationId: createTreasuryProposal
3408
+ security:
3409
+ - BearerAuth: []
3410
+ parameters:
3411
+ - name: treasury_id
3412
+ in: path
3413
+ required: true
3414
+ schema:
3415
+ type: string
3416
+ format: uuid
3417
+ requestBody:
3418
+ required: true
3419
+ content:
3420
+ application/json:
3421
+ schema:
3422
+ $ref: "#/components/schemas/CreateTreasuryProposalRequest"
3423
+ responses:
3424
+ "201":
3425
+ description: Proposal created
3426
+ content:
3427
+ application/json:
3428
+ schema:
3429
+ $ref: "#/components/schemas/TreasuryProposalResponse"
3430
+ "400":
3431
+ $ref: "#/components/responses/BadRequest"
3432
+ "401":
3433
+ $ref: "#/components/responses/Unauthorized"
3434
+ "403":
3435
+ $ref: "#/components/responses/Forbidden"
3436
+ get:
3437
+ tags: [Treasury Proposals]
3438
+ summary: List proposals for a treasury
3439
+ operationId: listTreasuryProposals
3440
+ security:
3441
+ - BearerAuth: []
3442
+ parameters:
3443
+ - name: treasury_id
3444
+ in: path
3445
+ required: true
3446
+ schema:
3447
+ type: string
3448
+ format: uuid
3449
+ - name: status
3450
+ in: query
3451
+ required: false
3452
+ schema:
3453
+ type: string
3454
+ enum: [pending, approved, executing, executed, rejected, expired]
3455
+ responses:
3456
+ "200":
3457
+ description: Proposal list
3458
+ content:
3459
+ application/json:
3460
+ schema:
3461
+ $ref: "#/components/schemas/TreasuryProposalListResponse"
3462
+ "401":
3463
+ $ref: "#/components/responses/Unauthorized"
3464
+ "403":
3465
+ $ref: "#/components/responses/Forbidden"
3466
+
3467
+ /v1/treasury/{treasury_id}/proposals/{proposal_id}:
3468
+ get:
3469
+ tags: [Treasury Proposals]
3470
+ summary: Get a proposal with collected signatures
3471
+ operationId: getTreasuryProposal
3472
+ security:
3473
+ - BearerAuth: []
3474
+ parameters:
3475
+ - name: treasury_id
3476
+ in: path
3477
+ required: true
3478
+ schema:
3479
+ type: string
3480
+ format: uuid
3481
+ - name: proposal_id
3482
+ in: path
3483
+ required: true
3484
+ schema:
3485
+ type: string
3486
+ format: uuid
3487
+ responses:
3488
+ "200":
3489
+ description: Proposal details
3490
+ content:
3491
+ application/json:
3492
+ schema:
3493
+ $ref: "#/components/schemas/TreasuryProposalResponse"
3494
+ "401":
3495
+ $ref: "#/components/responses/Unauthorized"
3496
+ "404":
3497
+ $ref: "#/components/responses/NotFound"
3498
+ delete:
3499
+ tags: [Treasury Proposals]
3500
+ summary: Cancel a pending proposal (proposer only)
3501
+ operationId: cancelTreasuryProposal
3502
+ security:
3503
+ - BearerAuth: []
3504
+ parameters:
3505
+ - name: treasury_id
3506
+ in: path
3507
+ required: true
3508
+ schema:
3509
+ type: string
3510
+ format: uuid
3511
+ - name: proposal_id
3512
+ in: path
3513
+ required: true
3514
+ schema:
3515
+ type: string
3516
+ format: uuid
3517
+ responses:
3518
+ "204":
3519
+ description: Proposal cancelled
3520
+ "401":
3521
+ $ref: "#/components/responses/Unauthorized"
3522
+ "403":
3523
+ $ref: "#/components/responses/Forbidden"
3524
+ "404":
3525
+ $ref: "#/components/responses/NotFound"
3526
+
3527
+ /v1/treasury/{treasury_id}/proposals/{proposal_id}/sign:
3528
+ post:
3529
+ tags: [Treasury Proposals]
3530
+ summary: Sign a proposal (approve or reject)
3531
+ description: |
3532
+ Submit an EIP-712 signature for a pending proposal. When approve signatures
3533
+ reach the Safe threshold, auto-execute fires: signatures are collected in
3534
+ address-sorted order, `execTransaction` calldata is built, and the transaction
3535
+ is broadcast via RPC.
3536
+ operationId: signTreasuryProposal
3537
+ security:
3538
+ - BearerAuth: []
3539
+ parameters:
3540
+ - name: treasury_id
3541
+ in: path
3542
+ required: true
3543
+ schema:
3544
+ type: string
3545
+ format: uuid
3546
+ - name: proposal_id
3547
+ in: path
3548
+ required: true
3549
+ schema:
3550
+ type: string
3551
+ format: uuid
3552
+ requestBody:
3553
+ required: true
3554
+ content:
3555
+ application/json:
3556
+ schema:
3557
+ $ref: "#/components/schemas/SignTreasuryProposalRequest"
3558
+ responses:
3559
+ "200":
3560
+ description: Signature recorded (may include executed_tx_hash if auto-executed)
3561
+ content:
3562
+ application/json:
3563
+ schema:
3564
+ $ref: "#/components/schemas/TreasuryProposalResponse"
3565
+ "400":
3566
+ $ref: "#/components/responses/BadRequest"
3567
+ "401":
3568
+ $ref: "#/components/responses/Unauthorized"
3569
+ "403":
3570
+ $ref: "#/components/responses/Forbidden"
3571
+ "404":
3572
+ $ref: "#/components/responses/NotFound"
3573
+
3574
+ /v1/treasury/{treasury_id}/proposals/{proposal_id}/execute:
3575
+ post:
3576
+ tags: [Treasury Proposals]
3577
+ summary: Force-execute a proposal if threshold is met (user-only)
3578
+ operationId: executeTreasuryProposal
3579
+ security:
3580
+ - BearerAuth: []
3581
+ parameters:
3582
+ - name: treasury_id
3583
+ in: path
3584
+ required: true
3585
+ schema:
3586
+ type: string
3587
+ format: uuid
3588
+ - name: proposal_id
3589
+ in: path
3590
+ required: true
3591
+ schema:
3592
+ type: string
3593
+ format: uuid
3594
+ responses:
3595
+ "200":
3596
+ description: Proposal executed
3597
+ content:
3598
+ application/json:
3599
+ schema:
3600
+ $ref: "#/components/schemas/TreasuryProposalResponse"
3601
+ "401":
3602
+ $ref: "#/components/responses/Unauthorized"
3603
+ "403":
3604
+ $ref: "#/components/responses/Forbidden"
3605
+ "404":
3606
+ $ref: "#/components/responses/NotFound"
3607
+
3359
3608
  # ---------------------------------------------------------------------------
3360
3609
  # Treasury Wallets (multi-chain key generation for human users)
3361
3610
  # ---------------------------------------------------------------------------
@@ -3509,24 +3758,276 @@ paths:
3509
3758
  security:
3510
3759
  - BearerAuth: []
3511
3760
  parameters:
3512
- - name: chain
3761
+ - name: chain
3762
+ in: path
3763
+ required: true
3764
+ schema:
3765
+ type: string
3766
+ responses:
3767
+ "200":
3768
+ description: Wallet rotated
3769
+ content:
3770
+ application/json:
3771
+ schema:
3772
+ $ref: "#/components/schemas/TreasuryWalletResponse"
3773
+ "400":
3774
+ $ref: "#/components/responses/BadRequest"
3775
+ "401":
3776
+ $ref: "#/components/responses/Unauthorized"
3777
+ "403":
3778
+ $ref: "#/components/responses/Forbidden"
3779
+ "404":
3780
+ $ref: "#/components/responses/NotFound"
3781
+
3782
+ /v1/treasury/wallets/{chain}/balance:
3783
+ get:
3784
+ tags: [Treasury Wallets]
3785
+ summary: Get wallet balance
3786
+ description: |
3787
+ Returns the native and token balances for the user's active wallet
3788
+ on the specified chain.
3789
+ operationId: getTreasuryWalletBalance
3790
+ security:
3791
+ - BearerAuth: []
3792
+ parameters:
3793
+ - name: chain
3794
+ in: path
3795
+ required: true
3796
+ schema:
3797
+ type: string
3798
+ - name: tokens
3799
+ in: query
3800
+ required: false
3801
+ description: Optional list of ERC-20 contract addresses to query balances for
3802
+ schema:
3803
+ type: array
3804
+ items:
3805
+ type: string
3806
+ responses:
3807
+ "200":
3808
+ description: Wallet balance
3809
+ content:
3810
+ application/json:
3811
+ schema:
3812
+ $ref: "#/components/schemas/TreasuryWalletBalanceResponse"
3813
+ "401":
3814
+ $ref: "#/components/responses/Unauthorized"
3815
+ "403":
3816
+ $ref: "#/components/responses/Forbidden"
3817
+ "404":
3818
+ $ref: "#/components/responses/NotFound"
3819
+
3820
+ /v1/treasury/wallets/{chain}/send:
3821
+ post:
3822
+ tags: [Treasury Wallets]
3823
+ summary: Send from treasury wallet
3824
+ description: |
3825
+ Signs and broadcasts a transaction from the user's active wallet on
3826
+ the specified chain. Requires re-authentication via `X-Auth-Confirm`
3827
+ header (account password). Human users only.
3828
+ operationId: sendFromTreasuryWallet
3829
+ security:
3830
+ - BearerAuth: []
3831
+ parameters:
3832
+ - name: chain
3833
+ in: path
3834
+ required: true
3835
+ schema:
3836
+ type: string
3837
+ - name: X-Auth-Confirm
3838
+ in: header
3839
+ required: true
3840
+ description: Account password for re-authentication
3841
+ schema:
3842
+ type: string
3843
+ format: password
3844
+ requestBody:
3845
+ required: true
3846
+ content:
3847
+ application/json:
3848
+ schema:
3849
+ $ref: "#/components/schemas/TreasuryWalletSendRequest"
3850
+ responses:
3851
+ "200":
3852
+ description: Transaction sent
3853
+ content:
3854
+ application/json:
3855
+ schema:
3856
+ $ref: "#/components/schemas/TreasuryWalletSendResponse"
3857
+ "400":
3858
+ $ref: "#/components/responses/BadRequest"
3859
+ "401":
3860
+ $ref: "#/components/responses/Unauthorized"
3861
+ "403":
3862
+ $ref: "#/components/responses/Forbidden"
3863
+ "404":
3864
+ $ref: "#/components/responses/NotFound"
3865
+
3866
+ /v1/treasury/wallets/{chain}/swap:
3867
+ post:
3868
+ tags: [Treasury Wallets]
3869
+ summary: Swap tokens via DEX aggregator
3870
+ description: |
3871
+ Executes a token swap through a DEX aggregator from the user's active
3872
+ wallet on the specified chain. Requires re-authentication via
3873
+ `X-Auth-Confirm` header (account password). Human users only.
3874
+ operationId: swapFromTreasuryWallet
3875
+ security:
3876
+ - BearerAuth: []
3877
+ parameters:
3878
+ - name: chain
3879
+ in: path
3880
+ required: true
3881
+ schema:
3882
+ type: string
3883
+ - name: X-Auth-Confirm
3884
+ in: header
3885
+ required: true
3886
+ description: Account password for re-authentication
3887
+ schema:
3888
+ type: string
3889
+ format: password
3890
+ requestBody:
3891
+ required: true
3892
+ content:
3893
+ application/json:
3894
+ schema:
3895
+ $ref: "#/components/schemas/TreasuryWalletSwapRequest"
3896
+ responses:
3897
+ "200":
3898
+ description: Swap executed
3899
+ content:
3900
+ application/json:
3901
+ schema:
3902
+ $ref: "#/components/schemas/TreasuryWalletSwapResponse"
3903
+ "400":
3904
+ $ref: "#/components/responses/BadRequest"
3905
+ "401":
3906
+ $ref: "#/components/responses/Unauthorized"
3907
+ "403":
3908
+ $ref: "#/components/responses/Forbidden"
3909
+ "404":
3910
+ $ref: "#/components/responses/NotFound"
3911
+
3912
+ # ---------------------------------------------------------------------------
3913
+ # Webhooks
3914
+ # ---------------------------------------------------------------------------
3915
+
3916
+ /v1/webhooks:
3917
+ post:
3918
+ tags: [Webhooks]
3919
+ summary: Register a webhook
3920
+ operationId: createWebhook
3921
+ security:
3922
+ - BearerAuth: []
3923
+ requestBody:
3924
+ required: true
3925
+ content:
3926
+ application/json:
3927
+ schema:
3928
+ $ref: "#/components/schemas/CreateWebhookRequest"
3929
+ responses:
3930
+ "201":
3931
+ description: Webhook registered
3932
+ content:
3933
+ application/json:
3934
+ schema:
3935
+ $ref: "#/components/schemas/WebhookCreatedResponse"
3936
+ "400":
3937
+ $ref: "#/components/responses/BadRequest"
3938
+ "401":
3939
+ $ref: "#/components/responses/Unauthorized"
3940
+ get:
3941
+ tags: [Webhooks]
3942
+ summary: List webhooks
3943
+ operationId: listWebhooks
3944
+ security:
3945
+ - BearerAuth: []
3946
+ responses:
3947
+ "200":
3948
+ description: Webhook list
3949
+ content:
3950
+ application/json:
3951
+ schema:
3952
+ $ref: "#/components/schemas/WebhookListResponse"
3953
+ "401":
3954
+ $ref: "#/components/responses/Unauthorized"
3955
+
3956
+ /v1/webhooks/{id}:
3957
+ get:
3958
+ tags: [Webhooks]
3959
+ summary: Get webhook
3960
+ operationId: getWebhook
3961
+ security:
3962
+ - BearerAuth: []
3963
+ parameters:
3964
+ - name: id
3965
+ in: path
3966
+ required: true
3967
+ schema:
3968
+ type: string
3969
+ format: uuid
3970
+ responses:
3971
+ "200":
3972
+ description: Webhook details
3973
+ content:
3974
+ application/json:
3975
+ schema:
3976
+ $ref: "#/components/schemas/WebhookResponse"
3977
+ "401":
3978
+ $ref: "#/components/responses/Unauthorized"
3979
+ "404":
3980
+ $ref: "#/components/responses/NotFound"
3981
+ patch:
3982
+ tags: [Webhooks]
3983
+ summary: Update webhook
3984
+ operationId: updateWebhook
3985
+ security:
3986
+ - BearerAuth: []
3987
+ parameters:
3988
+ - name: id
3989
+ in: path
3990
+ required: true
3991
+ schema:
3992
+ type: string
3993
+ format: uuid
3994
+ requestBody:
3995
+ required: true
3996
+ content:
3997
+ application/json:
3998
+ schema:
3999
+ $ref: "#/components/schemas/UpdateWebhookRequest"
4000
+ responses:
4001
+ "200":
4002
+ description: Webhook updated
4003
+ content:
4004
+ application/json:
4005
+ schema:
4006
+ $ref: "#/components/schemas/WebhookResponse"
4007
+ "400":
4008
+ $ref: "#/components/responses/BadRequest"
4009
+ "401":
4010
+ $ref: "#/components/responses/Unauthorized"
4011
+ "404":
4012
+ $ref: "#/components/responses/NotFound"
4013
+ delete:
4014
+ tags: [Webhooks]
4015
+ summary: Delete webhook
4016
+ operationId: deleteWebhook
4017
+ security:
4018
+ - BearerAuth: []
4019
+ parameters:
4020
+ - name: id
3513
4021
  in: path
3514
4022
  required: true
3515
4023
  schema:
3516
4024
  type: string
4025
+ format: uuid
3517
4026
  responses:
3518
- "200":
3519
- description: Wallet rotated
3520
- content:
3521
- application/json:
3522
- schema:
3523
- $ref: "#/components/schemas/TreasuryWalletResponse"
3524
- "400":
3525
- $ref: "#/components/responses/BadRequest"
4027
+ "204":
4028
+ description: Webhook deleted
3526
4029
  "401":
3527
4030
  $ref: "#/components/responses/Unauthorized"
3528
- "403":
3529
- $ref: "#/components/responses/Forbidden"
3530
4031
  "404":
3531
4032
  $ref: "#/components/responses/NotFound"
3532
4033
 
@@ -5626,6 +6127,10 @@ components:
5626
6127
  format: date-time
5627
6128
  nullable: true
5628
6129
  description: Optional expiration time for the agent's API key.
6130
+ evm_address:
6131
+ type: string
6132
+ nullable: true
6133
+ description: Agent's Ethereum EOA address (used as Safe signer for smart accounts and Intents API).
5629
6134
  created_at:
5630
6135
  type: string
5631
6136
  format: date-time
@@ -6156,6 +6661,10 @@ components:
6156
6661
  description: Transaction mode
6157
6662
  enum: [eoa, smart_account]
6158
6663
  default: eoa
6664
+ gasless:
6665
+ type: boolean
6666
+ description: Whether to submit as a gasless (sponsored) transaction
6667
+ default: false
6159
6668
 
6160
6669
  SignTransactionRequest:
6161
6670
  type: object
@@ -7344,6 +7853,135 @@ components:
7344
7853
  type: string
7345
7854
  format: date-time
7346
7855
 
7856
+ # --- Treasury Proposals ---
7857
+
7858
+ CreateTreasuryProposalRequest:
7859
+ type: object
7860
+ required: [to_address, value_wei, chain]
7861
+ properties:
7862
+ to_address:
7863
+ type: string
7864
+ description: Destination address (0x-prefixed)
7865
+ value_wei:
7866
+ type: string
7867
+ description: Transaction value in wei
7868
+ chain:
7869
+ type: string
7870
+ description: Chain name (e.g. ethereum, base)
7871
+ chain_id:
7872
+ type: integer
7873
+ description: Numeric chain ID (alternative to chain name)
7874
+ data_hex:
7875
+ type: string
7876
+ description: Hex-encoded calldata (optional)
7877
+ operation:
7878
+ type: integer
7879
+ description: Safe operation type (0 = Call, 1 = DelegateCall)
7880
+ default: 0
7881
+
7882
+ SignTreasuryProposalRequest:
7883
+ type: object
7884
+ required: [decision]
7885
+ properties:
7886
+ decision:
7887
+ type: string
7888
+ enum: [approve, reject]
7889
+ description: Whether to approve or reject the proposal
7890
+ signature:
7891
+ type: string
7892
+ description: EIP-712 signature (hex). If omitted, server signs with caller's key.
7893
+
7894
+ TreasuryProposalResponse:
7895
+ type: object
7896
+ properties:
7897
+ id:
7898
+ type: string
7899
+ format: uuid
7900
+ treasury_id:
7901
+ type: string
7902
+ format: uuid
7903
+ proposed_by:
7904
+ type: string
7905
+ format: uuid
7906
+ proposed_by_type:
7907
+ type: string
7908
+ enum: [user, agent]
7909
+ chain:
7910
+ type: string
7911
+ chain_id:
7912
+ type: integer
7913
+ safe_address:
7914
+ type: string
7915
+ to_address:
7916
+ type: string
7917
+ value_wei:
7918
+ type: string
7919
+ data_hex:
7920
+ type: string
7921
+ nullable: true
7922
+ operation:
7923
+ type: integer
7924
+ safe_tx_hash:
7925
+ type: string
7926
+ nullable: true
7927
+ nonce:
7928
+ type: integer
7929
+ nullable: true
7930
+ status:
7931
+ type: string
7932
+ enum: [pending, approved, executing, executed, rejected, expired]
7933
+ threshold:
7934
+ type: integer
7935
+ expires_at:
7936
+ type: string
7937
+ format: date-time
7938
+ nullable: true
7939
+ executed_tx_hash:
7940
+ type: string
7941
+ nullable: true
7942
+ executed_at:
7943
+ type: string
7944
+ format: date-time
7945
+ nullable: true
7946
+ signatures:
7947
+ type: array
7948
+ items:
7949
+ $ref: "#/components/schemas/ProposalSignatureResponse"
7950
+ created_at:
7951
+ type: string
7952
+ format: date-time
7953
+
7954
+ ProposalSignatureResponse:
7955
+ type: object
7956
+ properties:
7957
+ id:
7958
+ type: string
7959
+ format: uuid
7960
+ signer_id:
7961
+ type: string
7962
+ format: uuid
7963
+ signer_type:
7964
+ type: string
7965
+ enum: [user, agent]
7966
+ signer_address:
7967
+ type: string
7968
+ signature:
7969
+ type: string
7970
+ decision:
7971
+ type: string
7972
+ enum: [approve, reject]
7973
+ created_at:
7974
+ type: string
7975
+ format: date-time
7976
+
7977
+ TreasuryProposalListResponse:
7978
+ type: object
7979
+ properties:
7980
+ proposals:
7981
+ type: array
7982
+ items:
7983
+ $ref: "#/components/schemas/TreasuryProposalResponse"
7984
+
7347
7985
  # --- Treasury Wallets ---
7348
7986
 
7349
7987
  GenerateTreasuryWalletsRequest:
@@ -7395,6 +8033,202 @@ components:
7395
8033
  type: string
7396
8034
  description: Raw private key in hex encoding. Handle with extreme care.
7397
8035
 
8036
+ TreasuryWalletBalanceResponse:
8037
+ type: object
8038
+ required: [chain, address, native]
8039
+ properties:
8040
+ chain:
8041
+ type: string
8042
+ address:
8043
+ type: string
8044
+ native:
8045
+ type: object
8046
+ required: [symbol, balance_wei, balance_display]
8047
+ properties:
8048
+ symbol:
8049
+ type: string
8050
+ balance_wei:
8051
+ type: string
8052
+ balance_display:
8053
+ type: string
8054
+ tokens:
8055
+ type: array
8056
+ items:
8057
+ type: object
8058
+ required: [contract_address, balance_raw]
8059
+ properties:
8060
+ contract_address:
8061
+ type: string
8062
+ balance_raw:
8063
+ type: string
8064
+
8065
+ TreasuryWalletSendRequest:
8066
+ type: object
8067
+ required: [to, value_wei]
8068
+ properties:
8069
+ to:
8070
+ type: string
8071
+ description: Destination address (0x-prefixed)
8072
+ value_wei:
8073
+ type: string
8074
+ description: Value in wei
8075
+ data:
8076
+ type: string
8077
+ description: Hex-encoded calldata (optional)
8078
+ gas_limit:
8079
+ type: integer
8080
+ description: Gas limit override
8081
+
8082
+ TreasuryWalletSendResponse:
8083
+ type: object
8084
+ required: [tx_hash, from, to, value_wei, chain, status]
8085
+ properties:
8086
+ tx_hash:
8087
+ type: string
8088
+ from:
8089
+ type: string
8090
+ to:
8091
+ type: string
8092
+ value_wei:
8093
+ type: string
8094
+ chain:
8095
+ type: string
8096
+ status:
8097
+ type: string
8098
+
8099
+ TreasuryWalletSwapRequest:
8100
+ type: object
8101
+ required: [sell_token, buy_token, sell_amount]
8102
+ properties:
8103
+ sell_token:
8104
+ type: string
8105
+ description: Address of the token to sell (or "native" for ETH)
8106
+ buy_token:
8107
+ type: string
8108
+ description: Address of the token to buy (or "native" for ETH)
8109
+ sell_amount:
8110
+ type: string
8111
+ description: Amount to sell in token's smallest unit
8112
+
8113
+ TreasuryWalletSwapResponse:
8114
+ type: object
8115
+ required: [tx_hash, sell_token, buy_token, sell_amount, buy_amount, chain, status]
8116
+ properties:
8117
+ tx_hash:
8118
+ type: string
8119
+ sell_token:
8120
+ type: string
8121
+ buy_token:
8122
+ type: string
8123
+ sell_amount:
8124
+ type: string
8125
+ buy_amount:
8126
+ type: string
8127
+ chain:
8128
+ type: string
8129
+ status:
8130
+ type: string
8131
+
8132
+ # --- Webhooks ---
8133
+
8134
+ CreateWebhookRequest:
8135
+ type: object
8136
+ required: [url, events]
8137
+ properties:
8138
+ url:
8139
+ type: string
8140
+ format: uri
8141
+ description: HTTPS URL to deliver webhook events to
8142
+ events:
8143
+ type: array
8144
+ items:
8145
+ type: string
8146
+ description: Event types to subscribe to
8147
+ description:
8148
+ type: string
8149
+
8150
+ UpdateWebhookRequest:
8151
+ type: object
8152
+ properties:
8153
+ url:
8154
+ type: string
8155
+ format: uri
8156
+ events:
8157
+ type: array
8158
+ items:
8159
+ type: string
8160
+ is_active:
8161
+ type: boolean
8162
+ description:
8163
+ type: string
8164
+
8165
+ WebhookCreatedResponse:
8166
+ type: object
8167
+ required: [id, url, events, secret, created_at]
8168
+ properties:
8169
+ id:
8170
+ type: string
8171
+ format: uuid
8172
+ url:
8173
+ type: string
8174
+ format: uri
8175
+ events:
8176
+ type: array
8177
+ items:
8178
+ type: string
8179
+ secret:
8180
+ type: string
8181
+ description: HMAC signing secret for verifying payloads (shown only once)
8182
+ created_at:
8183
+ type: string
8184
+ format: date-time
8185
+
8186
+ WebhookResponse:
8187
+ type: object
8188
+ required: [id, url, events, is_active, created_at]
8189
+ properties:
8190
+ id:
8191
+ type: string
8192
+ format: uuid
8193
+ url:
8194
+ type: string
8195
+ format: uri
8196
+ events:
8197
+ type: array
8198
+ items:
8199
+ type: string
8200
+ is_active:
8201
+ type: boolean
8202
+ description:
8203
+ type: string
8204
+ created_at:
8205
+ type: string
8206
+ format: date-time
8207
+
8208
+ WebhookListResponse:
8209
+ type: object
8210
+ required: [webhooks]
8211
+ properties:
8212
+ webhooks:
8213
+ type: array
8214
+ items:
8215
+ $ref: "#/components/schemas/WebhookResponse"
8216
+
8217
+ # --- Signing Key Balance ---
8218
+
8219
+ SigningKeyBalanceResponse:
8220
+ type: object
8221
+ required: [chain, address, balance_wei, balance_display]
8222
+ properties:
8223
+ chain:
8224
+ type: string
8225
+ address:
8226
+ type: string
8227
+ balance_wei:
8228
+ type: string
8229
+ balance_display:
8230
+ type: string
8231
+
7398
8232
  # --- x402 ---
7399
8233
 
7400
8234
  PaymentRequirement: