---
title: "Create vault"
method: POST
path: "/vaults"
tags: ["Vaults"]
---

# Create vault

`POST /vaults`

Create a new vault by providing deployment parameters.Current user will
be set as owner of the account and a new sub-account will be deployed as
vault operator.

## Headers

- `PARADEX-PARENT-ACCOUNT` string, required
- `PARADEX-STARKNET-SIGNATURE` string, required
- `PARADEX-STARKNET-ACCOUNT` string, required
- `PARADEX-STARKNET-ACCOUNT-DERIVATION-PATH` string, required

## Request body

- RequestsCreateVault
  - `curator_name` string — Curator name for the vault (optional)
  - `deposit_tx_signature` string — Initial deposit transfer by vault owner
  - `description` string — Description for the vault
  - `lockup_period` integer — User's deposits lockup period in days
  - `max_tvl` integer — Max TVL locked by the Vault, if any. 0 for unlimited
  - `name` string — Unique name for the vault
  - `operator_eth_address` string — EVM address of the vault operator (empty for legacy Starknet operator)
  - `operator_index` integer — Index of the operator sub-account (0 for legacy Starknet operator)
  - `operator_signer_type` string — Signer type for the operator: "starknet" (default when empty) or "eip191"
  - `profit_share` integer — Vault owner profit share (percentage)
  - `public_key` string — Public key of vault operator
  - `show_balances` boolean — Whether the vault's balances are publicly visible. Defaults to true when omitted.
  - `show_positions` boolean — Whether the vault's positions are publicly visible. Defaults to true when omitted.
  - `strategy_description` string — Strategy description for the vault (optional)

## Response `201`

Created

- ResponsesVaultResp
  - `address` string — Contract address of the vault
  - `created_at` integer — Unix timestamp in milliseconds of when the vault has been created
  - `curator_name` string — Curator name of the vault (empty string if not set)
  - `description` string — Description of the vault
  - `kind` 'user' | 'protocol'
  - `last_updated_at` integer — Unix timestamp in milliseconds of when the vault was last updated
  - `lockup_period` integer — Lockup period of the vault in days
  - `max_tvl` integer — Maximum amount of assets the vault can hold in USDC
  - `name` string — Name of the vault
  - `operator_account` string — Operator account of the vault
  - `owner_account` string — Owner account of the vault
  - `profit_share` integer — Profit share of the vault in percentage, i.e. 10 means 10%
  - `status` 'INITIALIZING' | 'ACTIVE' | 'CLOSED' | 'FAILED'
  - `strategies` ResponsesStrategy[] — Strategies of the vault
    - `address` string — Contract address of the sub-operator
    - `name` string — Strategy name
    - `visibility` ResponsesVisibility
      - `balances` boolean — Whether the vault's balances are publicly visible
      - `positions` boolean — Whether the vault's positions are publicly visible
  - `strategy_description` string — Strategy description of the vault (empty string if not set)
  - `token_address` string — LP token address
  - `visibility` ResponsesVisibility
    - `balances` boolean — Whether the vault's balances are publicly visible
    - `positions` boolean — Whether the vault's positions are publicly visible

## Other responses

- `400` — Bad Request

## Changes

- **2026-07-17** `f1370c46e9e8` — 3 warning, 7 info
  - added the new `BLOCK_TRADE_REPLAYED_SIGNATURE` enum value to the `error/allOf[#/components/schemas/responses.ErrorCode]/` response property for the response status `400`
  - added the new `EVM_VAULT_OPERATORS_DISABLED` enum value to the `error/allOf[#/components/schemas/responses.ErrorCode]/` response property for the response status `400`
  - added the new `VAULT_DATA_PRIVATE` enum value to the `error/allOf[#/components/schemas/responses.ErrorCode]/` response property for the response status `400`
  - added the new optional request property `operator_eth_address`
  - …6 more
- **2026-06-09** `43b81de9b079` — 3 info
  - removed the `INVALID_RHINOFI_QUOTE` enum value from the `error/allOf[#/components/schemas/responses.ErrorCode]/` response property for the response status `400`
  - removed the `INVALID_RHINOFI_QUOTE_COMMIT` enum value from the `error/allOf[#/components/schemas/responses.ErrorCode]/` response property for the response status `400`
  - removed the `INVALID_RHINOFI_REQUEST` enum value from the `error/allOf[#/components/schemas/responses.ErrorCode]/` response property for the response status `400`
- …earlier changes not shown

[Full history](https://skmtc.dev/tradeparadex/apis/paradex-rest-api-2/changes/vaults/post.md)

---

[API](https://skmtc.dev/tradeparadex/apis/paradex-rest-api-2.md) · [All operations](https://skmtc.dev/tradeparadex/apis/paradex-rest-api-2/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/tradeparadex/paradex-rest-api-2/revisions/a73698fdee53/schema)
