# Order Responses

Each order passes through several validation layers before potentially becoming an active order in the market. Each layer serves a specific purpose and helps maintain the integrity and safety of the trading system. A 400 response indicates non-normal operations, suggesting that an operator should be alerted to the error and/or a client system fix should be considered.

# Validation Layers

# Stateless Validation

The first layer of defense occurs at the API gateway level. This validation checks basic order properties without requiring any market context or state:

  • Input format and data types
  • Required field presence
  • Character limits and encoding
  • Basic business rule violations
  • Authentication status

Failures at this layer return immediate 400 (Invalid Request) or 401 (Unauthorized) responses without creating any orders.

# Stateful Validation

Once an order passes basic validation, it enters the engine where it undergoes checks that require current market state:

  • Instrument existence and status
  • Account status and permissions
  • Price and quantity limits
  • Duplicate order checks
  • Instrument-specific rules

These checks create a command but reject invalid orders before creating an order.

# Market Validation

Orders that pass stateful validation undergo final market-level checks:

  • Margin requirements
  • Risk limits
  • Fill-or-kill conditions
  • Post-only conditions
  • Market liquidity conditions

These checks create both commands and orders, but may result in immediate cancellation if market conditions aren't met.

# Activation Layer

Some order types remain in an inactive state until specific conditions are met:

  • Stop orders (waiting for price trigger)
  • Contingent orders (OneTriggersTheOther, OneCancelsTheOther)

These orders undergo additional market validation when their activation conditions are met before becoming active in the order book.

# Understanding API Responses

The validation layer that processes an order determines the type of response:

  1. Stateless validation failures return immediately with no order creation
  2. Stateful validation failures create a command but no order
  3. Market validation failures create both commands and orders, with a cancellation
  4. Activation layer adds additional states for orders waiting to be triggered
flowchart TD
    A["Order Submitted"] --> B{"Stateless\nValidation"}
    B -- Fail --> C["400/401 Response"]
    B -- Pass --> D{"Stateful\nValidation"}
    D -- Fail --> E["400 Response\nCommand Created"]
    D -- Pass --> F{"Order Type"}
    F -- Regular Order --> G{"Margin and Risk\nValidation"}
    F -- Stop/Trigger Order --> H["Inactive State"]
    H --> Q["200 Response"] & I{"Trigger\nCondition Met"}
    L["Active Order"] --> S["200 Response"] & M{"Execution"}
    I -- Yes --> G
    I -- No --> J["Wait for Trigger"]
    J --> I
    G -- Fail Margin & Risk --> K["Order Cancelled"]
    G -- Fail Market --> U["Order Cancelled"]
    K --> T["400 Response"]
    U --> V["200 Response"]
    G -- Pass --> L
    M -- Full Fill --> N["Order Complete"]
    M -- Partial Fill --> O["Remaining Open or Cancelled"]
    M -- No Fill --> P["Order Open or Cancelled"]

     B:::validation
     C:::response
     D:::validation
     E:::response
     G:::validation
     H:::state
     Q:::response
     L:::state
     S:::response
     K:::state
     U:::state
     T:::response
     V:::response
     N:::state
     O:::state
     P:::state
    classDef validation fill:#f9f,stroke:#333,stroke-width:2px
    classDef response fill:#bbf,stroke:#333,stroke-width:2px
    classDef state fill:#bfb,stroke:#333,stroke-width:2px