OpenPit
Pre-trade Integrity Toolkit
pre-trade risk go python rust c api open source apache 2.0

Rejects

Back to the C API index

OpenPitPretradeRejectScope

Raw reject-scope code accepted from C callers.

Zero is not valid; callers must set this field explicitly.

typedef uint8_t OpenPitPretradeRejectScope;

OPENPIT_PRETRADE_REJECT_SCOPE_ORDER

The reject applies to one order or order-like request.

#define OPENPIT_PRETRADE_REJECT_SCOPE_ORDER ((OpenPitPretradeRejectScope) 1)

OPENPIT_PRETRADE_REJECT_SCOPE_ACCOUNT

The reject applies to account state rather than to one order only.

#define OPENPIT_PRETRADE_REJECT_SCOPE_ACCOUNT ((OpenPitPretradeRejectScope) 2)

OpenPitPretradeRejectCode

Raw stable classification code for a reject.

Read this first when you need machine-readable handling. The textual fields in OpenPitPretradeReject provide operator-facing explanation and extra context.

Valid codes are 1..=42, 254 (Custom), and 255 (Other). Unknown incoming codes are mapped to Other (255).

typedef uint16_t OpenPitPretradeRejectCode;

OPENPIT_PRETRADE_REJECT_CODE_MISSING_REQUIRED_FIELD

A required field is absent.

#define OPENPIT_PRETRADE_REJECT_CODE_MISSING_REQUIRED_FIELD \
    ((OpenPitPretradeRejectCode) 1)

OPENPIT_PRETRADE_REJECT_CODE_INVALID_FIELD_FORMAT

A field cannot be parsed from the supplied wire value.

#define OPENPIT_PRETRADE_REJECT_CODE_INVALID_FIELD_FORMAT \
    ((OpenPitPretradeRejectCode) 2)

OPENPIT_PRETRADE_REJECT_CODE_INVALID_FIELD_VALUE

A field is syntactically valid but semantically unacceptable.

#define OPENPIT_PRETRADE_REJECT_CODE_INVALID_FIELD_VALUE \
    ((OpenPitPretradeRejectCode) 3)

OPENPIT_PRETRADE_REJECT_CODE_UNSUPPORTED_ORDER_TYPE

The requested order type is not supported.

#define OPENPIT_PRETRADE_REJECT_CODE_UNSUPPORTED_ORDER_TYPE \
    ((OpenPitPretradeRejectCode) 4)

OPENPIT_PRETRADE_REJECT_CODE_UNSUPPORTED_TIME_IN_FORCE

The requested time-in-force is not supported.

#define OPENPIT_PRETRADE_REJECT_CODE_UNSUPPORTED_TIME_IN_FORCE \
    ((OpenPitPretradeRejectCode) 5)

OPENPIT_PRETRADE_REJECT_CODE_UNSUPPORTED_ORDER_ATTRIBUTE

Another order attribute is unsupported.

#define OPENPIT_PRETRADE_REJECT_CODE_UNSUPPORTED_ORDER_ATTRIBUTE \
    ((OpenPitPretradeRejectCode) 6)

OPENPIT_PRETRADE_REJECT_CODE_DUPLICATE_CLIENT_ORDER_ID

The client order identifier duplicates an active order.

#define OPENPIT_PRETRADE_REJECT_CODE_DUPLICATE_CLIENT_ORDER_ID \
    ((OpenPitPretradeRejectCode) 7)

OPENPIT_PRETRADE_REJECT_CODE_TOO_LATE_TO_ENTER

The order arrived after the allowed entry deadline.

#define OPENPIT_PRETRADE_REJECT_CODE_TOO_LATE_TO_ENTER \
    ((OpenPitPretradeRejectCode) 8)

OPENPIT_PRETRADE_REJECT_CODE_EXCHANGE_CLOSED

Trading is closed for the relevant venue or session.

#define OPENPIT_PRETRADE_REJECT_CODE_EXCHANGE_CLOSED \
    ((OpenPitPretradeRejectCode) 9)

OPENPIT_PRETRADE_REJECT_CODE_UNKNOWN_INSTRUMENT

The instrument cannot be resolved.

#define OPENPIT_PRETRADE_REJECT_CODE_UNKNOWN_INSTRUMENT \
    ((OpenPitPretradeRejectCode) 10)

OPENPIT_PRETRADE_REJECT_CODE_UNKNOWN_ACCOUNT

The account cannot be resolved.

#define OPENPIT_PRETRADE_REJECT_CODE_UNKNOWN_ACCOUNT \
    ((OpenPitPretradeRejectCode) 11)

OPENPIT_PRETRADE_REJECT_CODE_UNKNOWN_VENUE

The venue cannot be resolved.

#define OPENPIT_PRETRADE_REJECT_CODE_UNKNOWN_VENUE \
    ((OpenPitPretradeRejectCode) 12)

OPENPIT_PRETRADE_REJECT_CODE_UNKNOWN_CLEARING_ACCOUNT

The clearing account cannot be resolved.

#define OPENPIT_PRETRADE_REJECT_CODE_UNKNOWN_CLEARING_ACCOUNT \
    ((OpenPitPretradeRejectCode) 13)

OPENPIT_PRETRADE_REJECT_CODE_UNKNOWN_COLLATERAL_ASSET

The collateral asset cannot be resolved.

#define OPENPIT_PRETRADE_REJECT_CODE_UNKNOWN_COLLATERAL_ASSET \
    ((OpenPitPretradeRejectCode) 14)

OPENPIT_PRETRADE_REJECT_CODE_INSUFFICIENT_FUNDS

Available balance is insufficient.

#define OPENPIT_PRETRADE_REJECT_CODE_INSUFFICIENT_FUNDS \
    ((OpenPitPretradeRejectCode) 15)

OPENPIT_PRETRADE_REJECT_CODE_INSUFFICIENT_MARGIN

Available margin is insufficient.

#define OPENPIT_PRETRADE_REJECT_CODE_INSUFFICIENT_MARGIN \
    ((OpenPitPretradeRejectCode) 16)

OPENPIT_PRETRADE_REJECT_CODE_INSUFFICIENT_POSITION

Available position is insufficient.

#define OPENPIT_PRETRADE_REJECT_CODE_INSUFFICIENT_POSITION \
    ((OpenPitPretradeRejectCode) 17)

OPENPIT_PRETRADE_REJECT_CODE_CREDIT_LIMIT_EXCEEDED

A credit limit was exceeded.

#define OPENPIT_PRETRADE_REJECT_CODE_CREDIT_LIMIT_EXCEEDED \
    ((OpenPitPretradeRejectCode) 18)

OPENPIT_PRETRADE_REJECT_CODE_RISK_LIMIT_EXCEEDED

A risk limit was exceeded.

#define OPENPIT_PRETRADE_REJECT_CODE_RISK_LIMIT_EXCEEDED \
    ((OpenPitPretradeRejectCode) 19)

OPENPIT_PRETRADE_REJECT_CODE_ORDER_EXCEEDS_LIMIT

The order exceeds a generic configured limit.

#define OPENPIT_PRETRADE_REJECT_CODE_ORDER_EXCEEDS_LIMIT \
    ((OpenPitPretradeRejectCode) 20)

OPENPIT_PRETRADE_REJECT_CODE_ORDER_QTY_EXCEEDS_LIMIT

The order quantity exceeds a configured limit.

#define OPENPIT_PRETRADE_REJECT_CODE_ORDER_QTY_EXCEEDS_LIMIT \
    ((OpenPitPretradeRejectCode) 21)

OPENPIT_PRETRADE_REJECT_CODE_ORDER_NOTIONAL_EXCEEDS_LIMIT

The order notional exceeds a configured limit.

#define OPENPIT_PRETRADE_REJECT_CODE_ORDER_NOTIONAL_EXCEEDS_LIMIT \
    ((OpenPitPretradeRejectCode) 22)

OPENPIT_PRETRADE_REJECT_CODE_POSITION_LIMIT_EXCEEDED

The resulting position exceeds a configured limit.

#define OPENPIT_PRETRADE_REJECT_CODE_POSITION_LIMIT_EXCEEDED \
    ((OpenPitPretradeRejectCode) 23)

OPENPIT_PRETRADE_REJECT_CODE_CONCENTRATION_LIMIT_EXCEEDED

Concentration constraints were violated.

#define OPENPIT_PRETRADE_REJECT_CODE_CONCENTRATION_LIMIT_EXCEEDED \
    ((OpenPitPretradeRejectCode) 24)

OPENPIT_PRETRADE_REJECT_CODE_LEVERAGE_LIMIT_EXCEEDED

Leverage constraints were violated.

#define OPENPIT_PRETRADE_REJECT_CODE_LEVERAGE_LIMIT_EXCEEDED \
    ((OpenPitPretradeRejectCode) 25)

OPENPIT_PRETRADE_REJECT_CODE_RATE_LIMIT_EXCEEDED

The request rate exceeded a configured limit.

#define OPENPIT_PRETRADE_REJECT_CODE_RATE_LIMIT_EXCEEDED \
    ((OpenPitPretradeRejectCode) 26)

OPENPIT_PRETRADE_REJECT_CODE_PNL_KILL_SWITCH_TRIGGERED

A loss barrier has blocked further risk-taking.

#define OPENPIT_PRETRADE_REJECT_CODE_PNL_KILL_SWITCH_TRIGGERED \
    ((OpenPitPretradeRejectCode) 27)

OPENPIT_PRETRADE_REJECT_CODE_ACCOUNT_BLOCKED

The account is blocked.

#define OPENPIT_PRETRADE_REJECT_CODE_ACCOUNT_BLOCKED \
    ((OpenPitPretradeRejectCode) 28)

OPENPIT_PRETRADE_REJECT_CODE_ACCOUNT_NOT_AUTHORIZED

The account is not authorized for this action.

#define OPENPIT_PRETRADE_REJECT_CODE_ACCOUNT_NOT_AUTHORIZED \
    ((OpenPitPretradeRejectCode) 29)

OPENPIT_PRETRADE_REJECT_CODE_COMPLIANCE_RESTRICTION

A compliance restriction blocked the action.

#define OPENPIT_PRETRADE_REJECT_CODE_COMPLIANCE_RESTRICTION \
    ((OpenPitPretradeRejectCode) 30)

OPENPIT_PRETRADE_REJECT_CODE_INSTRUMENT_RESTRICTED

The instrument is restricted.

#define OPENPIT_PRETRADE_REJECT_CODE_INSTRUMENT_RESTRICTED \
    ((OpenPitPretradeRejectCode) 31)

OPENPIT_PRETRADE_REJECT_CODE_JURISDICTION_RESTRICTION

A jurisdiction restriction blocked the action.

#define OPENPIT_PRETRADE_REJECT_CODE_JURISDICTION_RESTRICTION \
    ((OpenPitPretradeRejectCode) 32)

OPENPIT_PRETRADE_REJECT_CODE_WASH_TRADE_PREVENTION

The action would violate wash-trade prevention.

#define OPENPIT_PRETRADE_REJECT_CODE_WASH_TRADE_PREVENTION \
    ((OpenPitPretradeRejectCode) 33)

OPENPIT_PRETRADE_REJECT_CODE_SELF_MATCH_PREVENTION

The action would violate self-match prevention.

#define OPENPIT_PRETRADE_REJECT_CODE_SELF_MATCH_PREVENTION \
    ((OpenPitPretradeRejectCode) 34)

OPENPIT_PRETRADE_REJECT_CODE_SHORT_SALE_RESTRICTION

Short-sale restriction blocked the action.

#define OPENPIT_PRETRADE_REJECT_CODE_SHORT_SALE_RESTRICTION \
    ((OpenPitPretradeRejectCode) 35)

OPENPIT_PRETRADE_REJECT_CODE_RISK_CONFIGURATION_MISSING

Required risk configuration is missing.

#define OPENPIT_PRETRADE_REJECT_CODE_RISK_CONFIGURATION_MISSING \
    ((OpenPitPretradeRejectCode) 36)

OPENPIT_PRETRADE_REJECT_CODE_REFERENCE_DATA_UNAVAILABLE

Required reference data is unavailable.

#define OPENPIT_PRETRADE_REJECT_CODE_REFERENCE_DATA_UNAVAILABLE \
    ((OpenPitPretradeRejectCode) 37)

OPENPIT_PRETRADE_REJECT_CODE_ORDER_VALUE_CALCULATION_FAILED

The system could not compute an order value needed for validation.

#define OPENPIT_PRETRADE_REJECT_CODE_ORDER_VALUE_CALCULATION_FAILED \
    ((OpenPitPretradeRejectCode) 38)

OPENPIT_PRETRADE_REJECT_CODE_SYSTEM_UNAVAILABLE

A required service or subsystem is unavailable.

#define OPENPIT_PRETRADE_REJECT_CODE_SYSTEM_UNAVAILABLE \
    ((OpenPitPretradeRejectCode) 39)

OPENPIT_PRETRADE_REJECT_CODE_MARK_PRICE_UNAVAILABLE

Required mark price is unavailable.

#define OPENPIT_PRETRADE_REJECT_CODE_MARK_PRICE_UNAVAILABLE \
    ((OpenPitPretradeRejectCode) 40)

OPENPIT_PRETRADE_REJECT_CODE_ACCOUNT_ADJUSTMENT_BOUNDS_EXCEEDED

Account adjustment would violate configured bounds.

#define OPENPIT_PRETRADE_REJECT_CODE_ACCOUNT_ADJUSTMENT_BOUNDS_EXCEEDED \
    ((OpenPitPretradeRejectCode) 41)

OPENPIT_PRETRADE_REJECT_CODE_ARITHMETIC_OVERFLOW

Underlying decimal arithmetic overflowed during evaluation.

#define OPENPIT_PRETRADE_REJECT_CODE_ARITHMETIC_OVERFLOW \
    ((OpenPitPretradeRejectCode) 42)

OPENPIT_PRETRADE_REJECT_CODE_CUSTOM

Reserved code for caller-defined reject classes.

#define OPENPIT_PRETRADE_REJECT_CODE_CUSTOM ((OpenPitPretradeRejectCode) 254)

OPENPIT_PRETRADE_REJECT_CODE_OTHER

A catch-all code for rejects that do not fit a more specific class.

#define OPENPIT_PRETRADE_REJECT_CODE_OTHER ((OpenPitPretradeRejectCode) 255)

OpenPitPretradeReject

Single rejection record returned by checks.

typedef struct OpenPitPretradeReject {
    OpenPitStringView policy;
    OpenPitStringView reason;
    OpenPitStringView details;
    void * user_data;
    OpenPitPretradeRejectCode code;
    OpenPitPretradeRejectScope scope;
} OpenPitPretradeReject;

OpenPitPretradeRejectList

Caller-owned list of rejects.

typedef struct OpenPitPretradeRejectList OpenPitPretradeRejectList;

openpit_pretrade_create_reject_list

Creates a caller-owned reject list with preallocated capacity.

reserve is the requested number of elements to preallocate.

Contract:

  • returns a new caller-owned list;
  • release it with openpit_pretrade_destroy_reject_list;
  • this function always succeeds.
OpenPitPretradeRejectList * openpit_pretrade_create_reject_list(
    size_t reserve
);

openpit_pretrade_destroy_reject_list

Releases a caller-owned reject list.

Contract:

  • passing null is allowed;
  • this function always succeeds.
void openpit_pretrade_destroy_reject_list(
    OpenPitPretradeRejectList * rejects
);

openpit_pretrade_reject_list_push

Appends one reject to the list by copying its payload.

Contract:

  • list must be a valid non-null pointer;
  • string views in reject are copied before this function returns;
  • returns true after appending a reject with a valid scope;
  • returns false for an unknown scope and leaves the list unchanged;
  • violating the pointer contract aborts the call.
bool openpit_pretrade_reject_list_push(
    OpenPitPretradeRejectList * list,
    OpenPitPretradeReject reject
);

openpit_pretrade_reject_list_len

Returns the number of rejects in the list.

Contract:

  • list must be a valid non-null pointer;
  • this function never fails;
  • violating the pointer contract aborts the call.
size_t openpit_pretrade_reject_list_len(
    const OpenPitPretradeRejectList * list
);

openpit_pretrade_reject_list_get

Copies a non-owning reject view at index into out_reject.

The copied view borrows string memory from list.

Contract:

  • list must be a valid non-null pointer;
  • out_reject must be a valid non-null pointer;
  • returns true when a value exists and was copied;
  • returns false when index is out of bounds and does not write out_reject;
  • the copied view remains valid while list is alive and unchanged;
  • this function never fails;
  • violating the pointer contract aborts the call.
bool openpit_pretrade_reject_list_get(
    const OpenPitPretradeRejectList * list,
    size_t index,
    OpenPitPretradeReject * out_reject
);

OpenPitPretradeAccountBlock

Single account-block record returned by kill-switch checks.

typedef struct OpenPitPretradeAccountBlock {
    OpenPitStringView policy;
    OpenPitStringView reason;
    OpenPitStringView details;
    void * user_data;
    OpenPitPretradeRejectCode code;
} OpenPitPretradeAccountBlock;

OpenPitPretradeAccountBlockList

Caller-owned list of account blocks.

typedef struct OpenPitPretradeAccountBlockList OpenPitPretradeAccountBlockList;

openpit_pretrade_create_account_block_list

Creates a caller-owned account-block list with preallocated capacity.

reserve is the requested number of elements to preallocate.

Contract:

  • returns a new caller-owned list;
  • release it with openpit_pretrade_destroy_account_block_list;
  • this function always succeeds.
OpenPitPretradeAccountBlockList * openpit_pretrade_create_account_block_list(
    size_t reserve
);

openpit_pretrade_destroy_account_block_list

Releases a caller-owned account-block list.

Contract:

  • passing null is allowed;
  • this function always succeeds.
void openpit_pretrade_destroy_account_block_list(
    OpenPitPretradeAccountBlockList * blocks
);

openpit_pretrade_account_block_list_push

Appends one account block to the list by copying its payload.

Contract:

  • list must be a valid non-null pointer;
  • string views in block are copied before this function returns;
  • this function never fails;
  • violating the pointer contract aborts the call.
void openpit_pretrade_account_block_list_push(
    OpenPitPretradeAccountBlockList * list,
    OpenPitPretradeAccountBlock block
);

openpit_pretrade_account_block_list_len

Returns the number of account blocks in the list.

Contract:

  • list must be a valid non-null pointer;
  • this function never fails;
  • violating the pointer contract aborts the call.
size_t openpit_pretrade_account_block_list_len(
    const OpenPitPretradeAccountBlockList * list
);

openpit_pretrade_account_block_list_get

Copies a non-owning account-block view at index into out_block.

The copied view borrows string memory from list.

Contract:

  • list must be a valid non-null pointer;
  • out_block must be a valid non-null pointer;
  • returns true when a value exists and was copied;
  • returns false when index is out of bounds and does not write out_block;
  • the copied view remains valid while list is alive and unchanged;
  • this function never fails;
  • violating the pointer contract aborts the call.
bool openpit_pretrade_account_block_list_get(
    const OpenPitPretradeAccountBlockList * list,
    size_t index,
    OpenPitPretradeAccountBlock * out_block
);