---
title: "Place order"
method: POST
path: "/v1/orders/place"
tags: ["Orders"]
---

# Place order

`POST /v1/orders/place`

Place order via RISExUniversalRouter. Client signs permit (server does not hold signer keys).

**Permit:** Client signs EIP-712 VerifyWitness over order data. Server builds byte-packed payload and submits via Router.

**Signature:** 64-byte EIP-2098 compact (r + yParityAndS) or 65-byte (r+s+v, auto-converted).

## Request body

- ApiPlaceOrderRequest
  - `market_id` integer — Market ID (uint16)
  - `size_steps` integer — Order size in steps (uint32)
  - `price_ticks` integer — Order price in ticks (uint24, max 16777215)
  - `side` integer — Order side: 0=Buy, 1=Sell
  - `post_only` boolean
  - `reduce_only` boolean
  - `stp_mode` integer — Self-trade prevention: 0=ExpireMaker, 1=ExpireTaker, 2=ExpireBoth
  - `order_type` integer — Order type: 0=Market, 1=Limit
  - `time_in_force` integer — Time-in-force: 0=GTC, 1=GTT, 2=FOK, 3=IOC
  - `builder_id` integer — Optional builder ID (uint16, 0 = none)
  - `client_order_id` string, uint64 — Optional client order ID (uint64, 0 = none)
  - `ttl_units` integer — Optional TTL units for GTT orders (uint16, 0 = none)
  - `permit` ApiPermitParams — Permit parameters for v3 authenticated operations. Client signs EIP-712 VerifyWitness; server builds byte-packed permit suffix. Uses bitmap nonces for replay protection.
    - `account` string — Account address (hex)
    - `signer` string — Signer address (hex)
    - `nonce_anchor` string, uint64 — Permit nonce anchor (uint48)
    - `nonce_bitmap_index` integer — Permit nonce bitmap index (uint8, 0-255)
    - `deadline` integer — Permit deadline (unix timestamp)
    - `signature` string, byte — EIP-2098 compact signature (64 bytes: r + yParityAndS) or standard 65-byte (r+s+v)
  - `builder_fee_bps` integer — Per-order builder fee in parts per million, denominator 1e6 (uint16, 0 = none). 100 = 1 bps = 0.01%. 10 = 0.1 bps. Must not exceed the user-signed max for this builder (see ApproveBuilderFee). Setting this non-zero changes the signed action hash: builder_fee_bps must be encoded as an extra uint16 word right after builder_id (which is always part of the hash) and before client_order_id/ttl_units. Leave at 0 to use the hash layout without that word.

## Response `200`

A successful response.

- ApiPlaceOrderResponse
  - `order_id` string — Composite order ID: scOrderId-blockNumber-logIndex
  - `tx_hash` string
  - `block_number` string, uint64
  - `sc_order_id` string, uint64 — Raw smart contract order ID for client reference
  - `filled_quantity` string — Total filled size in WAD (1e18). Empty string for non-IOC orders; for IOC orders, "0" if unfilled.
  - `message` string — Human-readable fill status message. Only set for IOC orders.
  - `filled_percent` string — Fill percentage (0-100, two decimal places). Only set for IOC orders.

## Other responses

- `default` — An unexpected error response.

---

[API](https://skmtc.net/rise/apis/risex-rest-api.md) · [All operations](https://skmtc.net/rise/apis/risex-rest-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/rise/risex-rest-api/versions/194af8339c0d/schema)
