> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bullionwale.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Place a simulated limit order (test)

> **Available on request.** Ask the Bullionwale desk to turn on API access for your account and issue a test key. Test orders are simulated; nothing is booked.

A SIMULATED limit order: the same checks as a real one, nothing reaches the desk, and it never triggers: it rests until you cancel it. `Idempotency-Key` is required (1-64 characters). 201 on first placement; 200 with `Idempotent-Replayed: true` on a replay of the same key and body.



## OpenAPI

````yaml /openapi.json post /api/trading/test/v1/limit-orders
openapi: 3.1.0
info:
  description: >-
    Place and read bullion orders with an API key. The test environment
    (`/api/trading/test/v1`) simulates orders; the production environment
    (`/api/trading/v1`) books real orders. **Test: available on request.
    Production: switched off.** See the availability notice in the
    documentation.
  title: Bullionwale API
  version: 1.0.0
servers:
  - description: Once the API is available
    url: https://api.bullionwale.com
security: []
tags:
  - description: >-
      The account and API key behind a request, the key's scopes, and whether
      production trading is available to the account.
    name: Account
  - description: >-
      Your live Buy and Sell rates per symbol, with freshness and trading flags.
      The same prices on test and production.
    name: Market data
  - description: >-
      The symbols you can trade: metal, price and quantity units, the sizes you
      may order and which sides are offered.
    name: Symbols
  - description: >-
      Whether trading is halted, which symbols are frozen, the market clock and
      your rates at the latest official close.
    name: Market status
  - description: >-
      Your weight allocation per metal and how much of it your open position
      uses.
    name: Trading limits
  - description: >-
      Realized profit and loss from your closed orders, in total, per symbol and
      per day.
    name: Profit & loss
  - description: >-
      Place market orders, list them and read one. Test orders are simulated;
      production orders are real.
    name: Orders
  - description: >-
      Place a buy or sell limit that waits for a price, list your limits, read,
      edit and cancel one. Test limits are simulated and never execute;
      production limits are real.
    name: Limit orders
  - description: Your net position per metal against your weight allocation.
    name: Positions
  - description: Your physical-delivery requests and their status.
    name: Deliveries
  - description: >-
      Your API keys in the calling environment: ids, names, scopes, state. Never
      a secret.
    name: API keys
  - description: >-
      Register HTTPS endpoints that receive signed order and limit-order events,
      test them and rotate their signing secret. Not yet available.
    name: Webhooks
paths:
  /api/trading/test/v1/limit-orders:
    post:
      tags:
        - Limit orders
      summary: Place a simulated limit order (test)
      description: >-
        **Available on request.** Ask the Bullionwale desk to turn on API access
        for your account and issue a test key. Test orders are simulated;
        nothing is booked.


        A SIMULATED limit order: the same checks as a real one, nothing reaches
        the desk, and it never triggers: it rests until you cancel it.
        `Idempotency-Key` is required (1-64 characters). 201 on first placement;
        200 with `Idempotent-Replayed: true` on a replay of the same key and
        body.
      operationId: place_test_limit_api_trading_test_v1_limit_orders_post
      parameters:
        - description: >-
            Required, 1-64 characters. Per account: the same key with the same
            body replays the order.
          in: header
          name: Idempotency-Key
          required: true
          schema:
            anyOf:
              - maxLength: 64
                type: string
              - type: 'null'
            title: Idempotency-Key
      requestBody:
        content:
          application/json:
            examples:
              buy_limit:
                summary: A buy limit, 10 g, below the market
                value:
                  client_order_id: bot-limit-7
                  quantity: 10
                  symbol_code: GOLD_TRADE_999
                  trade_type: buy
                  trigger_price: 140500
            schema:
              $ref: '#/components/schemas/LimitOrderIn'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TestLimitOrder'
          description: Replay of an earlier request with the same key and body.
          headers:
            Idempotent-Replayed:
              description: '`true`.'
              schema:
                type: string
        '201':
          content:
            application/json:
              examples:
                pending:
                  summary: Simulated and resting
                  value:
                    actions:
                      - edit
                      - cancel
                    client_order_id: bot-limit-7
                    created_at: '2026-10-21T09:31:05.120000+00:00'
                    environment: test
                    id: 5c9e2a71-0b3f-4d8e-a6c2-9f1e7d3b4a60
                    quantity: '10'
                    status: pending
                    status_detail: pending
                    symbol_code: GOLD_TRADE_999
                    total: '140500.00'
                    trade_type: buy
                    trigger_price: '140500.00'
                    unit: g
              schema:
                $ref: '#/components/schemas/TestLimitOrder'
          description: Successful Response
        '400':
          content:
            application/json:
              examples:
                limit_would_execute:
                  summary: 'At or past the market: it would execute at once'
                  value:
                    detail:
                      code: limit_would_execute
                      message: >-
                        A buy limit has to be BELOW the current price of
                        141,250.00 — at 141,500.00 it would execute immediately.
                        Lower the limit, or use Buy to trade at the market price
                        now.
              schema:
                $ref: '#/components/schemas/ApiError'
          description: >-
            `idempotency_key_required`: POST /orders needs an Idempotency-Key
            header.

            `symbol_not_trading`: Trading is disabled for the symbol.

            `invalid_side`: trade_type must be buy or sell.

            `symbol_frozen`: The symbol's price feed is frozen.

            `quantity_rule`: The quantity breaks the symbol's size rule.

            `group_quantity_rule`: The quantity breaks the group's size terms.

            `no_live_price`: The symbol has no live price.

            `unpriced`: The symbol could not be priced.

            `limit_would_execute`: The trigger price is at or past the current
            price, so the limit would execute at once; use a market order
            instead.
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: >-
            `missing_credential`: No X-API-Key header.

            `malformed_credential`: The key is not shaped like an API key.

            `wrong_tenant`: The key belongs to a different broker.

            `wrong_environment`: A test key on the production API, or the
            reverse.

            `invalid_credential`: Unknown key or wrong secret.

            `credential_revoked`: The key was revoked.

            `credential_rotated`: The key was replaced and its overlap period
            ended.

            `credential_expired`: The key expired.
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: >-
            `api_access_disabled`: API access is switched off for this account.

            `account_inactive`: The account is not active.

            `insufficient_scope`: The key lacks the scope this route needs.

            `side_not_offered`: This broker does not offer that side.

            `trading_halted`: The desk halted trading.

            `group_trading_disabled`: Trading is disabled for the account's
            group.
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: '`unknown_symbol`: No such symbol.'
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: >-
            `invalid_request`: The request body or parameters are invalid; see
            `detail.errors`.

            `idempotency_key_reused`: The Idempotency-Key was used for a
            different order.
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: >-
            `auth_throttled`: Too many failed authentications from this address;
            see Retry-After.

            `rate_limited`: This key (or, for orders, this account) exhausted
            its budget; see Retry-After.
        '503':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: >-
            `rate_limiter_unavailable`: Order rate limiting is temporarily
            unavailable, so orders are refused (reads keep working). Retry after
            `Retry-After` seconds.

            `pricing_unavailable`: The group price could not be computed.

            `stale_rate`: The rate is stale.
      security:
        - ApiKeyAuth: []
components:
  schemas:
    LimitOrderIn:
      properties:
        client_order_id:
          anyOf:
            - maxLength: 64
              type: string
            - type: 'null'
          title: Client Order Id
        quantity:
          description: >-
            A weight in the symbol's measure (grams or kilograms), at most 4
            decimal places.
          exclusiveMinimum: 0
          maximum: 1000000
          title: Quantity
          type: number
        symbol_code:
          maxLength: 32
          title: Symbol Code
          type: string
        trade_type:
          description: '`buy` or `sell`.'
          title: Trade Type
          type: string
        trigger_price:
          description: >-
            Rupees per the symbol's quoted measure. A buy limit must be below
            the current buy price, a sell limit above the current sell price.
          exclusiveMinimum: 0
          maximum: 100000000
          title: Trigger Price
          type: number
      required:
        - symbol_code
        - trade_type
        - quantity
        - trigger_price
      title: LimitOrderIn
      type: object
    TestLimitOrder:
      properties:
        actions:
          description: '`edit` and `cancel` while `pending`; else empty.'
          items:
            type: string
          title: Actions
          type: array
        cancel_reason:
          anyOf:
            - type: string
            - type: 'null'
          title: Cancel Reason
        client_order_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Client Order Id
        created_at:
          anyOf:
            - type: string
            - type: 'null'
          title: Created At
        environment:
          default: test
          title: Environment
          type: string
        id:
          title: Id
          type: string
        order_id:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            The market order a `triggered` limit became (see GET /orders);
            otherwise null.
          title: Order Id
        quantity:
          title: Quantity
          type: string
        status:
          description: '`pending` or `cancelled` (a test limit never triggers).'
          title: Status
          type: string
        status_detail:
          description: The raw status; branch on `status`.
          title: Status Detail
          type: string
        symbol_code:
          title: Symbol Code
          type: string
        total:
          description: The order's value at the trigger price, in rupees.
          title: Total
          type: string
        trade_type:
          title: Trade Type
          type: string
        trigger_price:
          description: Rupees, 2 decimals, as a string.
          title: Trigger Price
          type: string
        unit:
          description: '`g` or `kg`.'
          title: Unit
          type: string
      required:
        - id
        - symbol_code
        - trade_type
        - quantity
        - unit
        - trigger_price
        - total
        - status
        - status_detail
        - actions
      title: TestLimitOrder
      type: object
    ApiError:
      description: Every refusal on the trading API.
      properties:
        detail:
          $ref: '#/components/schemas/ApiErrorDetail'
      required:
        - detail
      title: ApiError
      type: object
    ApiErrorDetail:
      additionalProperties: true
      properties:
        code:
          description: Stable machine code; branch on this, not on `message`.
          title: Code
          type: string
        message:
          description: Human-readable text; may change.
          title: Message
          type: string
      required:
        - code
        - message
      title: ApiErrorDetail
      type: object
  securitySchemes:
    ApiKeyAuth:
      in: header
      name: X-API-Key
      type: apiKey

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.