---
title: "Execute block trade"
method: POST
path: "/block-trades/{block_trade_id}/execute"
tags: ["BlockTrades"]
---

# Execute block trade

`POST /block-trades/{block_trade_id}/execute`

Execute a block trade with selected offers.

Executes a parent block trade by selecting specific offers from required signers.

**Requirements:**
- Called by block trade initiator
- All selected offers must have valid, unexpired signatures
- Required signers must have submitted offers for all markets
- Block trade must be in READY_TO_EXECUTE state

**Execution Process:**
- All trades processed together
- Creates fills and updates balances upon success
- Participants receive fill notifications

**Returns:** Executed block trade with status (COMPLETED/FAILED), fill details,
timestamps, and settlement info.

## Path parameters

- `block_trade_id` string, required

## Request body

- RequestsBlockExecuteRequest
  - `execution_nonce` string, required — Unique nonce for this execution request
  - `selected_offers` string[] — Array of offer IDs selected for execution (offers are atomic, not partial)
  - `signatures` object, required — Map of offer IDs to initiator signatures accepting each offer. Block id if it is a direct block trade.

## Response `200`

OK

- ResponsesBlockTradeDetailFullResponse
  - `block_expiration` integer — Unix timestamp in milliseconds when block expires
  - `block_id` string — Backend-generated unique identifier
  - `block_type` 'DIRECT' | 'OFFER_BASED'
  - `created_at` integer — When block was created
  - `failure_reason` string — Reason for failure (if status is FAILED). Names a participant by role, never by address: <maker>, <taker>, <initiator>, <participant> (a party whose side is ambiguous), or <redacted> (an identifier belonging to no participant)
  - `initiator` string — Account that initiated this block trade
  - `last_updated_at` integer — When block was last updated
  - `nonce` string — Original block nonce
  - `parent_block_id` string — Parent block ID (if offer-based)
  - `required_signers` string[] — List of accounts that can participate in the block trade
  - `signatures` object — Current signatures on this block (for signature verification)
  - `status` 'CREATED' | 'OFFER_COLLECTION' | 'READY_TO_EXECUTE' | 'EXECUTING' | 'PENDING_SETTLEMENT' | 'COMPLETED' | 'FAILED' | 'CANCELLED'
  - `trades` object — Map of market to trade details

## Other responses

- `400` — Bad Request
- `404` — Not Found

## Changes

- **2026-09-24** `c8ee50dffebb` — 2 warning
  - added the new `MMP_MIN_FREEZE_NOT_ELAPSED` enum value to the `error/allOf[#/components/schemas/responses.ErrorCode]/` response property for the response status `400`
  - added the new `MMP_MIN_FREEZE_NOT_ELAPSED` enum value to the `error/allOf[#/components/schemas/responses.ErrorCode]/` response property for the response status `404`
- **2026-09-22** `250909706663` — 10 warning
  - added the new `MMP` enum value to the `trades/additionalProperties/maker_order/allOf[#/components/schemas/responses.BlockTradeOrder]/flags/items/` response property for the response status `200`
  - added the new `MMP` enum value to the `trades/additionalProperties/taker_order/allOf[#/components/schemas/responses.BlockTradeOrder]/flags/items/` response property for the response status `200`
  - added the new `MMP_CONFIG_INVALID` enum value to the `error/allOf[#/components/schemas/responses.ErrorCode]/` response property for the response status `400`
  - added the new `MMP_CONFIG_INVALID` enum value to the `error/allOf[#/components/schemas/responses.ErrorCode]/` response property for the response status `404`
  - …6 more
- …earlier changes not shown

[Full history](https://skmtc.dev/tradeparadex/apis/paradex-rest-api-2/changes/block-trades/:block_trade_id/execute/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.dev/tradeparadex/apis/paradex-rest-api-2/revisions/c8ee50dffebb?raw)
