---
title: "Create batch of orders"
method: POST
path: "/orders/batch"
tags: ["Orders"]
---

# Create batch of orders

`POST /orders/batch`

Place a batch of orders

+ Valid batch size is between 1-10 order(s)
+ If basic validation(including signature) fails - all orders will be rejected.
+ Orders are queued for risk checking independently and failure of one order
  doesn't affect processing of another order.

## Request body

- RequestsOrderRequest[]
  - `client_id` string — Unique client assigned ID for the order
  - `dime_discount` boolean — If true, fees are charged in DIME with the DIME discount applied; falls back to USDC if balance is insufficient
  - `flags` ResponsesOrderFlag[] — Order flags, allow flag: REDUCE_ONLY
  - `instruction` 'GTC' | 'POST_ONLY' | 'IOC' | 'RPI', required
  - `market` string, required — Market for which order is created
  - `on_behalf_of_account` string — ID corresponding to the configured isolated margin account. Only for isolated margin orders
  - `price` string, required — Order price
  - `recv_window` integer — Order will be created if it is received by API within RecvWindow milliseconds from signature timestamp, minimum is 10 milliseconds
  - `side` 'BUY' | 'SELL', required
  - `signature` string, required — Order signature in as a string "[r,s]" signed by account's paradex private key
  - `signature_timestamp` integer, required — Unix timestamp in milliseconds of order creation, used for signature verification
  - `size` string, required — Size of the order
  - `stp` string — Self Trade Prevention, EXPIRE_MAKER, EXPIRE_TAKER or EXPIRE_BOTH, if empty EXPIRE_TAKER
  - `trigger_price` string — Trigger price for stop order
  - `type` 'MARKET' | 'LIMIT' | 'STOP_LIMIT' | 'STOP_MARKET' | 'TAKE_PROFIT_LIMIT' | 'TAKE_PROFIT_MARKET' | 'STOP_LOSS_MARKET' | 'STOP_LOSS_LIMIT', required
  - `vwap_price` string — Optional VWAP price for market orders used for VWAP instruction, bounded by price band

## Response `201`

Created

- ResponsesBatchResponse
  - `errors` ResponsesErrorResponse[]
    - `error` 'VALIDATION_ERROR' | 'BINDING_ERROR' | 'INTERNAL_ERROR' | 'NOT_FOUND' | 'SERVICE_UNAVAILABLE' | 'INVALID_REQUEST_PARAMETER' | 'ORDER_ID_NOT_FOUND' | 'ORDER_IS_CLOSED' | 'ORDER_IS_NOT_OPEN' | 'INVALID_ORDER_SIZE' | 'CLIENT_ORDER_ID_NOT_FOUND' | 'DUPLICATED_CLIENT_ID' | 'INVALID_SYMBOL' | 'INVALID_TOKEN' | 'INVALID_ETHEREUM_ADDRESS' | 'INVALID_ETHEREUM_SIGNATURE' | 'INVALID_STARKNET_ADDRESS' | 'INVALID_STARKNET_SIGNATURE' | 'STARKNET_SIGNATURE_VERIFICATION_FAILED' | 'ETHEREUM_SIGNER_MISMATCH' | 'ETHEREUM_HASH_MISMATCH' | 'NOT_ONBOARDED' | 'INVALID_TIMESTAMP' | 'INVALID_BLOCK_EXPIRATION' | 'ACCOUNT_NOT_FOUND' | 'MEDIA_NOT_FOUND' | 'INVALID_ORDER_SIGNATURE' | 'PUBLIC_KEY_INVALID' | 'UNAUTHORIZED_ETHEREUM_ADDRESS' | 'UNAUTHORIZED_ERROR' | 'ETHEREUM_ADDRESS_ALREADY_ONBOARDED' | 'EVM_ADDRESS_ALREADY_ONBOARDED' | 'MARKET_NOT_FOUND' | 'ALLOWLIST_ENTRY_NOT_FOUND' | 'USERNAME_IN_USE' | 'GEO_IP_BLOCK' | 'ETHEREUM_ADDRESS_BLOCKED' | 'PROGRAM_NOT_FOUND' | 'PROGRAM_NOT_SUPPORTED' | 'INVALID_DASHBOARD' | 'MARKET_NOT_OPEN' | 'MARKET_NOT_SETTLED' | 'INVALID_REFERRAL_CODE' | 'REQUEST_NOT_ALLOWED' | 'PARENT_ADDRESS_ALREADY_ONBOARDED' | 'INVALID_PARENT_ACCOUNT' | 'INVALID_VAULT_OPERATOR_CHAIN' | 'VAULT_OPERATOR_ALREADY_ONBOARDED' | 'VAULT_NAME_IN_USE' | 'VAULT_NOT_FOUND' | 'VAULT_STRATEGY_NOT_FOUND' | 'VAULT_LIMIT_REACHED' | 'VAULT_DATA_PRIVATE' | 'BATCH_SIZE_OUT_OF_RANGE' | 'ISOLATED_MARKET_ACCOUNT_MISMATCH' | 'NO_ACCESS_TO_MARKET' | 'POINTS_SUMMARY_NOT_FOUND' | 'ALGO_ID_NOT_FOUND' | 'INVALID_DERIVATION_PATH' | 'PROFILE_STATS_NOT_FOUND' | 'INVALID_CHAIN' | 'INVALID_LAYERSWAP_SWAP' | 'SOCIAL_USERNAME_IN_USE' | 'INVALID_OAUTH_REQUEST' | 'RPI_ACCOUNT_NOT_WHITELISTED' | 'SYSTEM_STATUS_POST_ONLY' | 'SYSTEM_STATUS_CANCEL_ONLY' | 'INVALID_MARKETING_CODE' | 'OFFER_NOT_FOUND' | 'MARKET_MARGIN_RESTRICTED' | 'NOT_UNIQUE' | 'ACCOUNT_ALREADY_REFERRED' | 'ONBOARDING_PERIOD_EXPIRED' | 'ONBOARDING_RATE_LIMITED' | 'SUBACCOUNTS_LIMIT_EXCEEDED' | 'INSUFFICIENT_MIN_CHAIN_BALANCE' | 'INSUFFICIENT_EVM_BALANCE' | 'PORTFOLIO_MARGIN_ONBOARDING_DISABLED' | 'PORTFOLIO_MARGIN_INVALID_ACCOUNT_KIND' | 'EVM_VAULT_OPERATORS_DISABLED' | 'INVALID_EVM_SIGNATURE' | 'EVM_SIGNATURE_VERIFICATION_FAILED' | 'INVALID_SUBKEY' | 'SUBKEY_NOT_ACTIVATABLE' | 'TOKEN_LIMIT_REACHED' | 'INVALID_TOKEN_SCOPE' | 'IP_NOT_ALLOWED' | 'INSUFFICIENT_TRANSFERRABLE_XP' | 'TRANSFER_LIMIT_REACHED' | 'XP_TRANSFERS_DISABLED' | 'BLOCK_TRADE_NOT_FOUND' | 'BLOCK_TRADE_NOT_ENABLED' | 'BLOCK_TRADE_EXPIRED' | 'BLOCK_TRADE_ALREADY_CANCELLED' | 'BLOCK_TRADE_INVALID_STATUS' | 'BLOCK_TRADE_UNAUTHORIZED' | 'BLOCK_TRADE_MISSING_TRADES' | 'BLOCK_TRADE_MISSING_SIGNERS' | 'BLOCK_TRADE_MISSING_SIGNATURE' | 'BLOCK_TRADE_ACCOUNT_MISMATCH' | 'BLOCK_TRADE_INVALID_SIGNATURE' | 'BLOCK_TRADE_SIGNER_KEY_UNAUTHORIZED' | 'BLOCK_TRADE_REPLAYED_SIGNATURE' | 'OFFER_ALREADY_CANCELLED' | 'OFFER_INVALID_STATUS' | 'OFFER_UNAUTHORIZED' | 'OFFER_PARENT_MISMATCH' | 'OFFER_PARENT_NOT_ACCEPTING' | 'PORTFOLIO_MARGIN_CONFIG_NOT_FOUND'
    - `message` string
  - `orders` ResponsesOrderResp[]
    - `account` string — Paradex Account
    - `avg_fill_price` string — Average fill price of the order
    - `cancel_reason` string — Reason for order cancellation if it was closed by cancel
    - `client_id` string — Client order id provided by the client at order creation
    - `created_at` integer — Order creation time
    - `flags` ResponsesOrderFlag[] — Order flags, allow flag: REDUCE_ONLY
    - `id` string — Unique order identifier generated by Paradex
    - `instruction` 'GTC' | 'POST_ONLY' | 'IOC' | 'RPI'
    - `last_updated_at` integer — Order last update time. No changes once status=CLOSED
    - `market` string — Market
    - `price` string — Order price. 0 for MARKET orders
    - `published_at` integer — Timestamp in milliseconds when order was sent to the client
    - `received_at` integer — Timestamp in milliseconds when order was received by API service
    - `remaining_size` string — Remaining size of the order
    - `request_info` ResponsesRequestInfo
      - `id` string — Request id
      - `message` string — Error message for failed requests
      - `request_type` string — Type of request (MODIFY_ORDER)
      - `status` string — Status of modify order request
    - `seq_no` integer — Unique increasing number (non-sequential) that is assigned to this order update and changes on every order update. Can be used to deduplicate multiple feeds. WebSocket and REST responses use independently generated seq_no per event.
    - `side` 'BUY' | 'SELL'
    - `size` string — Order size
    - `status` 'NEW' | 'UNTRIGGERED' | 'OPEN' | 'CLOSED'
    - `stp` 'EXPIRE_MAKER' | 'EXPIRE_TAKER' | 'EXPIRE_BOTH'
    - `timestamp` integer — Order signature timestamp
    - `trigger_price` string — Trigger price for stop order
    - `type` 'MARKET' | 'LIMIT' | 'STOP_LIMIT' | 'STOP_MARKET' | 'TAKE_PROFIT_LIMIT' | 'TAKE_PROFIT_MARKET' | 'STOP_LOSS_MARKET' | 'STOP_LOSS_LIMIT'

## Other responses

- `400` — Bad Request

---

[API](https://skmtc.net/tradeparadex/apis/paradex-rest-api-2.md) · [All operations](https://skmtc.net/tradeparadex/apis/paradex-rest-api-2/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/tradeparadex/paradex-rest-api-2/versions/6a76453d754c/schema)
