---
title: "Create block trade offer"
method: POST
path: "/block-trades/{block_trade_id}/offers"
tags: ["BlockTrades"]
---

# Create block trade offer

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

Create a sub-block offer for an existing block trade.

Required signers submit their order details and pricing for
markets defined in the parent block trade.

**Requirements:**
- Account must be listed as required signer with active onboarding
- Valid order signatures for all markets
- Orders must match parent block trade constraints

**Includes:**
- Individual order signatures per market
- Block trade execution signature with expiration
- Proper nonce and signature verification data

Returns the created offer with unique ID, parent reference, and order details.

## Path parameters

- `block_trade_id` string, required

## Request body

- RequestsBlockOfferRequest
  - `nonce` string, required — Unique nonce for this offer request
  - `offering_account` string, required — Starknet address of the account making this offer
  - `signature` ResponsesBlockTradeSignature, required
    - `nonce` string, required — Unique nonce to prevent replay attacks
    - `signature_data` string, required — Order signature in as a string "[r,s]" signed by account's paradex private key
    - `signature_expiration` integer, required — Unix timestamp in milliseconds when signature expires
    - `signature_timestamp` integer, required — Unix timestamp in milliseconds when signature was created
    - `signature_type` 'STARKNET', required — Type of cryptographic signature used
    - `signer_account` string, required — Starknet account address of the signer
  - `trades` object, required — Map of market symbol to offer details

## Response `201`

Created

- 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
  - `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' | 'COMPLETED' | 'FAILED' | 'CANCELLED'
  - `trades` object — Map of market to trade details

## Other responses

- `400` — Bad Request

## Changes

- **2025-12-24** `846a2e2b455b` — 1 breaking, 2 info
  - added required request body
  - added the media type `application/json` for the response with the status `201`
  - added the media type `application/json` for the response with the status `400`

[Change history](https://skmtc.dev/tradeparadex/apis/paradex-rest-api-2/changes/block-trades/:block_trade_id/offers/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/846a2e2b455b?raw)
