---
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`

## Request

- Base URL: `https://api.prod.paradex.trade/v1`
- URL: `https://api.prod.paradex.trade/v1/block-trades/{block_trade_id}/offers`
- Auth: API key in header `Authorization`

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
- Account cannot be an isolated margin account
- 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: Paradex account address of the signer
    - `signer_public_key` string: Hex pubkey used to sign (main account key or active subkey). Empty defaults to account main key.
  - `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
  - `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' | 'EXECUTING' | 'PENDING_SETTLEMENT' | 'COMPLETED' | 'FAILED' | 'CANCELLED'
  - `trades` object: Map of market to trade details

## Other responses

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

## Changes

- **2026-10-22** `f33feb7333ea`: 6 warning
  - added the new `ADDRESS_BOOK_NOT_PARADEX_ACCOUNT` enum value to the `error/allOf[#/components/schemas/responses.ErrorCode]/` response property for the response status `400`
  - added the new `ADDRESS_BOOK_NOT_PARADEX_ACCOUNT` enum value to the `error/allOf[#/components/schemas/responses.ErrorCode]/` response property for the response status `404`
  - added the new `ADDRESS_BOOK_REPEATED_IN_IMPORT` enum value to the `error/allOf[#/components/schemas/responses.ErrorCode]/` response property for the response status `400`
  - added the new `ADDRESS_BOOK_REPEATED_IN_IMPORT` enum value to the `error/allOf[#/components/schemas/responses.ErrorCode]/` response property for the response status `404`
  - …2 more
- **2026-10-22** `ed1654c95ef8`: 1 info
  - removed the `READY_TO_EXECUTE` enum value from the `status/allOf[#/components/schemas/responses.BlockTradeStatus]/` response property for the response status `201`
- …earlier changes not shown

[Operation 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/f33feb7333ea?raw)
