ATS / PPEX
All requests require clientID and developerAPIKey parameters for authentication.
Base URL: https://api-sandboxdash.norcapsecurities.com
Endpoints
Order status values
The order status field reports where an order sits in its execution lifecycle. An order is created Pending or Live, becomes matchable when Live, and ends in one of the terminal states below. Filled quantity is always total shares − remaining shares (number_shares − shares_remaining on getOrder, shares − remainingShares on ppex/orders), regardless of status.
| Status | Terminal | Meaning |
Pending | No | Order created but not yet active — awaiting issuer approval before it can be matched. |
Live | No | Order is active and open on the book, eligible for matching. No shares filled yet. |
Partially Executed | No | Some shares have filled; the unfilled remainder is still open and eligible for further matching. |
Executed | Yes | Fully filled — remaining shares are 0. |
Cancelled | Yes | Order cancelled via API or admin. Usually no shares were filled, but cancelOrder also accepts Partially Executed orders, so a Cancelled order may have fills. |
Partially Executed & Cancelled | Yes | Order was partially filled, then the unfilled remainder was cancelled (from the admin console or by automated expiry). The filled portion stands; only the open remainder was withdrawn. |
Not Approved | Yes | Order was not approved for activation (issuer or compliance declined) and never became Live; no shares filled. |
Do not rely on the status string to detect fills on a cancelled order: an order cancelled through the API after a partial fill reports Cancelled, not Partially Executed & Cancelled. To detect a partial fill on any cancelled order, compare filled vs. total shares (above).
POST /v3/cancelOrder
Cancel the order
Parameters
| Parameter | Type | Required | Description |
orderid | string | Yes | orderid |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/cancelOrder
-d clientID=someclientid
-d developerAPIKey=somedeveloperkey
-d orderid=41994
Response
| Field | Type | Description |
orderStatus | string | Order status after the cancel request. See Order status values. |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"orderStatus": "Cancelled"
}
POST /v3/createOrder
Create the Order
Parameters
| Parameter | Type | Required | Description |
memberid | string | Yes | Member ID |
issuerid | string | Yes | PPEX Issuer ID |
accountid | string | No | Investor placing the order |
securityid | string | Yes | Security ID |
type | conditional | Yes | Limit / RFQ |
action | conditional | Yes | Buy / Sell |
quantity | integer | Yes | Number of shares |
price | decimal | Yes | Price per share |
expiration | conditional | Yes | GTC / Day / Other |
expirationDate | date | No | Date if "Other" is selected |
disclosePrice | conditional | Yes | Yes / No, if "no" is selected, price is not shown on order book |
contingencies | conditional | No | All or None / Minimum Quantity / "" or None, if All or None, order cannot be partially executed, if Minimum Quantity, order will not execute unless threshold is met, if blank or none - no contingencies |
minimumThreshold | integer | No | Minimum Quantity of Shares required for the trade to execute |
solicited | string | Yes | Solicited / Unsolicited |
token | string | No | Value for identifying the responses |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/createOrder
-d clientID=someClient Id
-d developerAPIKey=somedeveloperAPIKey
-d memberid=memberid
-d issuerid=issuerid
-d accountid=accountid
-d securityid= securityid
-d type=type
-d action=action
-d quantity=quantity
-d price=price
-d expiration=expiration
-d expirationDate=expirationDate
-d disclosePrice=disclosePrice
-d contingencies=All or None
-d minimumThreshold=
-d solicited=Unsolicited
-d token=some value
Response
| Field | Type | Description |
orderDetails | object | The created order (see fields below) |
Each orderDetails object contains:
| Field | Type | Description |
id | string | Internal record ID of the created order |
securityId | string | Security ID the order was placed for |
orderId | string | Order ID |
action | string | Order side: Bid (buy) or Offer (sell) |
orderStatus | string | Initial order status, set by the system: Pending (awaiting issuer approval) or Live (active). A client-supplied status is ignored. See Order status values. |
token | string | Caller-supplied token echoed back (present only when token was sent in the request) |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"orderDetails": {
"id": "12345",
"securityId": "28365032",
"orderId": "325253233",
"action": "Bid",
"orderStatus": "Live",
"token": "some value"
}
}
POST /v3/createSecurityMarketHours
Parameters
| Parameter | Type | Required | Description |
securityId | string | Yes | Security ID |
mondayClosed | string | No | "yes" if the market is closed, null if hours are specified |
mondayHoursStart | string | No | specified time (EST) |
mondayHoursEnd | string | No | specified time (EST) |
tuesdayClosed | string | No | "yes" if the market is closed, null if hours are specified |
tuesdayHoursStart | string | No | specified time (EST) |
tuesdayHoursEnd | string | No | specified time (EST) |
wednesdayClosed | string | No | "yes" if the market is closed, null if hours are specified |
wednesdayHoursStart | string | No | specified time (EST) |
wednesdayHoursEnd | string | No | specified time (EST) |
thursdayClosed | string | No | "yes" if the market is closed, null if hours are specified |
thursdayHoursStart | string | No | specified time (EST) |
thursdayHoursEnd | string | No | specified time (EST) |
fridayClosed | string | No | "yes" if the market is closed, null if hours are specified |
fridayHoursStart | string | No | specified time (EST) |
fridayHoursEnd | string | No | specified time (EST) |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/createSecurityMarketHours
-d clientID=someclientid
-d developerAPIKey=somedeveloperkey
-d securityId=94216
-d mondayHoursStart=06:01
-d mondayHoursEnd=16:01
-d mondayClosed=no
-d tuesdayHoursStart=06:01
-d tuesdayHoursEnd=16:01
-d tuesdayClosed=no
-d wednesdayHoursStart=06:01
-d wednesdayHoursEnd=16:01
-d wednesdayClosed=no
-d thursdayHoursStart=06:01
-d thursdayHoursEnd=16:01
-d thursdayClosed=no
-d fridayHoursStart=06:01
-d fridayHoursEnd=16:01
-d fridayClosed=no
Response
| Field | Type | Description |
securityHoursDetails | object | Market hours configured for the security ID |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"securityHoursDetails": {
"securityId": "94216",
"mondayClosed": "No",
"mondayStartHours": "6",
"mondayStartMins": "1",
"mondayCloseHours": "23",
"mondayCloseMins": "59",
"tuesdayClosed": "No",
"tuesdayStartHours": "5",
"tuesdayStartMins": "15",
"tuesdayCloseHours": "23",
"tuesdayCloseMins": "59",
"wednesdayClosed": "No",
"wednesdayStartHours": "3",
"wednesdayStartMins": "0",
"wednesdayCloseHours": "23",
"wednesdayCloseMins": "59",
"thursdayClosed": "No",
"thursdayStartHours": "0",
"thursdayStartMins": "0",
"thursdayCloseHours": "23",
"thursdayCloseMins": "59",
"fridayClosed": "No",
"fridayStartHours": "0",
"fridayStartMins": "0",
"fridayCloseHours": "23",
"fridayCloseMins": "59"
}
}
POST /v3/deleteSecurityMarketHours
Parameters
| Parameter | Type | Required | Description |
securityId | string | Yes | Security ID |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/deleteSecurityMarketHours
-d clientID=someclientid
-d developerAPIKey=somedeveloperkey
-d securityId=94216
Response
| Field | Type | Description |
securityHoursDetails | string | Confirmation message (Security market hour deleted successfully.) |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"securityHoursDetails": "Security market hour deleted successfully."
}
POST /v3/getClob
Returns the consolidated limit order book (CLOB) top-of-book for a security: the best (highest) live Bid price and the best (lowest) live Offer price. Prices are drawn from orders in Live or Partially Executed status. For request-for-quote orders the price is reported as RFQ; a side with no live orders is reported as --.
Parameters
| Parameter | Type | Required | Description |
securityID | string | Yes | Security ID for PPEX/ATS |
issuerID | integer | Yes | Issuer ID for PPEX/ATS |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/getClob
-d clientID=someclientid
-d developerAPIKey=somedeveloperkey
-d securityID=77654
-d issuerID=148745
Response
| Field | Type | Description |
orderDetailsAll | object | Top-of-book summary for the security (see fields below) |
The orderDetailsAll object contains:
| Field | Type | Description |
securityID | string | Security ID the book is for |
orderDetailsBid | string | Best (highest) live Bid price per share, RFQ for a request-for-quote bid, or -- when there are no live bids |
orderDetailsOffer | string | Best (lowest) live Offer price per share, RFQ for a request-for-quote offer, or -- when there are no live offers |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"orderDetailsAll": {
"securityID": "77654",
"orderDetailsBid": "90.00",
"orderDetailsOffer": "100.00"
}
}
POST /v3/getIssuerApprovedSecurities
Returns the list of approved, active securities (offerings) for an issuer. Only offerings whose offeringStatus is Approved and whose virtualStatus is ACTIVE are returned.
Parameters
| Parameter | Type | Required | Description |
issuerID | string | Yes | Issuer ID |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/getIssuerApprovedSecurities
-d clientID=someclientid
-d developerAPIKey=somedeveloperkey
-d issuerID=77654
Response
| Field | Type | Description |
issuerDetails | array | Array of the issuer's approved, active securities (see fields below) |
Each issuerDetails element contains:
| Field | Type | Description |
SecurityName | string | Security (offering) name |
SecurityID | string | Security ID (offering ID) |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"issuerDetails": [
{
"SecurityName": "Tesla",
"SecurityID": "77654"
},
{
"SecurityName": "Carta",
"SecurityID": "25644"
}
]
}
POST /v3/getMarketHolidays
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/getMarketHolidays
-d clientID=someclientid
-d developerAPIKey=somedeveloperkey
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"globalMarketHolidays": {
"saturdayclosed": "Yes",
"saturdayStartHours": "0",
"saturdayStartMins": "0",
"saturdayCloseHours": "0",
"saturdayCloseMins": "0",
"sundayclosed": "Yes",
"sundayStartHours": "0",
"sundayStartMins": "0",
"sundayCloseHours": "0",
"sundayCloseMins": "0"
}
}
POST /v3/getMarketHours
Returns the PPEX global weekday market hours (Monday through Friday). Each day reports whether the market is closed and its opening and closing hours and minutes (US Eastern time). Saturday and Sunday are reported separately by getMarketHolidays.
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/getMarketHours
-d clientID=someclientid
-d developerAPIKey=somedeveloperkey
Response
| Field | Type | Description |
globalMarketHours | object | PPEX global weekday market hours (see fields below) |
The globalMarketHours object contains, for each weekday monday–friday:
| Field | Type | Description |
{day}closed | string | Yes if the market is closed that day, otherwise No |
{day}StartHours | string | Opening hour (0–23) |
{day}StartMins | string | Opening minute (0–59) |
{day}CloseHours | string | Closing hour (0–23) |
{day}CloseMins | string | Closing minute (0–59) |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"globalMarketHours": {
"mondayclosed": "No",
"mondayStartHours": "6",
"mondayStartMins": "0",
"mondayCloseHours": "23",
"mondayCloseMins": "59",
"tuesdayclosed": "No",
"tuesdayStartHours": "5",
"tuesdayStartMins": "15",
"tuesdayCloseHours": "23",
"tuesdayCloseMins": "59",
"wednesdayclosed": "No",
"wednesdayStartHours": "1",
"wednesdayStartMins": "0",
"wednesdayCloseHours": "23",
"wednesdayCloseMins": "59",
"thursdayclosed": "No",
"thursdayStartHours": "0",
"thursdayStartMins": "0",
"thursdayCloseHours": "23",
"thursdayCloseMins": "59",
"fridayclosed": "No",
"fridayStartHours": "0",
"fridayStartMins": "0",
"fridayCloseHours": "23",
"fridayCloseMins": "59"
}
}
POST /v3/getMatchedTrade
Returns the details of a single matched trade (the pairing of a Bid order against an Offer order) identified by its match/trade ID, including the two order IDs that were matched.
Parameters
| Parameter | Type | Required | Description |
matchId | string | Yes | Match/Trade ID |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/getMatchedTrade
-d clientID=someclientid
-d developerAPIKey=somedeveloperkey
-d matchId=232242322
Response
| Field | Type | Description |
matchedTradeDetails | object | The matched trade (see fields below) |
The matchedTradeDetails object contains:
| Field | Type | Description |
executionTime | string | Trade creation/execution timestamp (YYYY-MM-DD HH:MM:SS) |
numberOfShares | string | Total shares matched in the trade |
Price | string | Execution price per share |
ordersMatched | object | The two order IDs matched against each other (see below) |
The ordersMatched object contains:
| Field | Type | Description |
askOrderId | string | Order ID of the sell (Offer) side |
bidOrderId | string | Order ID of the buy (Bid) side |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"matchedTradeDetails": {
"executionTime": "2026-03-24 14:30:00",
"numberOfShares": "56",
"Price": "8.000000",
"ordersMatched": {
"askOrderId": "23467891",
"bidOrderId": "130486295"
}
}
}
POST /v3/getOrder
Parameters
| Parameter | Type | Required | Description |
orderid | string | Yes | Order ID |
token | string | No | Value for identifying the responses |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/getOrder
-d clientID=someclientid
-d developerAPIKey=somedeveloperkey
-d orderid=232242322
Response
| Field | Type | Description |
orderDetails | array | Array of order objects. For a single orderid request the array contains one element; for a token request it contains one element per order sharing that token. |
Each orderDetails element contains:
| Field | Type | Description |
memberID | string | Investor account ID associated with the order. Always carries the same value as accountID on this endpoint. |
accountID | string | Investor account ID associated with the order (same value as memberID) |
security_id | string | Security ID the order is for |
security_name | string | Security name |
order_Id | string | Order ID |
order_type | string | Order side: Bid (buy) or Offer (sell) |
number_shares | string | Total share quantity on the order |
shares_remaining | string | Shares still unfilled |
price_per_share | string | Limit price per share, or RFQ for request-for-quote orders |
total_amount | string | Total order amount |
PND | string | Price Not Displayed flag (Yes / No) |
Contingencies | string | Order contingencies |
MinimumThreshold | string | Minimum quantity threshold for execution |
Solicited | string | Whether the order was solicited (Yes / No) |
status | string | Order status. See Order status values for the full set and their meanings. |
token | string | Caller-supplied token echoed back |
createdDate | string | Order creation timestamp |
updateDate | string | Last update timestamp |
createdIPAddress | string | IP address recorded when the order was created |
matchedOrders | array | Fills matched against this order (empty when there are no fills) |
Each matchedOrders element contains:
| Field | Type | Description |
matchid | string | ID of the matched (opposing) order |
executedPrice | string | Execution price per share |
executedQuantity | string | Executed share quantity |
executedTotal Commitment | string | Executed total amount (the key contains a literal space) |
createdDate | string | Fill creation timestamp |
updateDate | string | Fill update timestamp |
createdIPAddress | string | IP address recorded for the fill |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"orderDetails": [
{
"memberID": "A04834434",
"accountID": "A04834434",
"security_id": "28365032",
"security_name": "ABCD",
"order_Id": "2482",
"order_type": "Offer",
"number_shares": "100",
"shares_remaining": "0",
"price_per_share": "4.53",
"total_amount": "453.00",
"PND": "No",
"Contingencies": "All",
"MinimumThreshold": "0",
"Solicited": "No",
"status": "Executed",
"token": "b8s0zjstfaf",
"createdDate": "2026-03-24 11:24:59",
"updateDate": "2026-03-24 14:30:00",
"createdIPAddress": "0.0.0.0",
"matchedOrders": [
{
"matchid": "2483",
"executedPrice": "4.53",
"executedQuantity": "100",
"executedTotal Commitment": "453.00",
"createdDate": "2026-03-24 14:30:00",
"updateDate": "2026-03-24 14:30:00",
"createdIPAddress": "0.0.0.0"
}
]
}
]
}
POST /v3/getOrderBook
Returns the open order book for a security: every live order resting on the book (status Live or Partially Executed). Each entry reports the order side as Buy or Sell, the remaining (unfilled) share quantity, and the price. Request-for-quote orders report RFQ for both share_per_price and total_amount.
Parameters
| Parameter | Type | Required | Description |
securityID | string | Yes | Security ID for the PPEX/ATS |
issuerID | integer | Yes | Issuer ID |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/getOrderBook
-d clientID=someclientid
-d developerAPIKey=somedeveloperkey
-d securityID=28365032
-d issuerID=148745
Response
| Field | Type | Description |
orderDetailsAll | array | Array of open orders on the book (see fields below) |
Each orderDetailsAll element contains:
| Field | Type | Description |
security_name | string | Security name |
Action | string | Order side: Buy (Bid) or Sell (Offer) |
number_shares | string | Remaining (unfilled) share quantity |
share_per_price | string | Price per share, or RFQ for request-for-quote orders |
total_amount | string | Remaining shares × price, or RFQ for request-for-quote orders |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"orderDetailsAll": [
{
"security_name": "Instacart",
"Action": "Buy",
"number_shares": "18",
"share_per_price": "RFQ",
"total_amount": "RFQ"
},
{
"security_name": "Instacart",
"Action": "Buy",
"number_shares": "33",
"share_per_price": "RFQ",
"total_amount": "RFQ"
},
{
"security_name": "Instacart",
"Action": "Sell",
"number_shares": "15",
"share_per_price": "15.0",
"total_amount": "225.0000"
}
]
}
POST /v3/getOrdersForADay
POST /v3/getSecurityInformation
Returns descriptive information for an approved, active security (offering): issuer, name, ticker, CUSIP, industry, security type, and description. Only offerings whose offeringStatus is Approved and whose virtualStatus is ACTIVE are returned.
Parameters
| Parameter | Type | Required | Description |
securityID | string | Yes | Security ID for the ATS/PPEX |
issuerID | integer | Yes | Issuer ID |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/getSecurityInformation
-d clientID=someclientid
-d developerAPIKey=somedeveloperkey
-d securityID=977654
-d issuerID=148745
Response
| Field | Type | Description |
SecurityDetails | array | Array of matching securities (see fields below) |
Each SecurityDetails element contains:
| Field | Type | Description |
securityID | string | Security ID (offering ID) |
IssuerName | string | Issuer name |
SecurityName | string | Security (offering) name |
Ticker | string | Ticker symbol |
CUSIP | string | CUSIP identifier |
Industries | string | Industry / offering text |
SecurityType | string | Security type (e.g. CommonEquity) |
Description | string | Company / security description |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"SecurityDetails": [
{
"securityID": "977654",
"IssuerName": "Carta",
"SecurityName": "Carta",
"Ticker": "CRTA",
"CUSIP": "14575E105",
"Industries": "Financial Technology",
"SecurityType": "CommonEquity",
"Description": "Company bio"
}
]
}
POST /v3/getSecurityMarketHours
Parameters
| Parameter | Type | Required | Description |
securityId | string | Yes | Security ID |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/getSecurityMarketHours
-d clientID=someclientid
-d developerAPIKey=somedeveloperkey
-d securityId=94216
Response
| Field | Type | Description |
securityHoursDetails | object | Market hours configured for the security ID |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"securityHoursDetails": {
"securityId": "94216",
"mondayClosed": "No",
"mondayStartHours": "6",
"mondayStartMins": "1",
"mondayCloseHours": "23",
"mondayCloseMins": "59",
"tuesdayClosed": "No",
"tuesdayStartHours": "5",
"tuesdayStartMins": "15",
"tuesdayCloseHours": "23",
"tuesdayCloseMins": "59",
"wednesdayClosed": "No",
"wednesdayStartHours": "3",
"wednesdayStartMins": "0",
"wednesdayCloseHours": "23",
"wednesdayCloseMins": "59",
"thursdayClosed": "No",
"thursdayStartHours": "0",
"thursdayStartMins": "0",
"thursdayCloseHours": "23",
"thursdayCloseMins": "59",
"fridayClosed": "No",
"fridayStartHours": "0",
"fridayStartMins": "0",
"fridayCloseHours": "23",
"fridayCloseMins": "59"
}
}
POST /v3/getSettlementStatus
Parameters
| Parameter | Type | Required | Description |
tradeID | string | Yes | Matched Trade ID from PPEX |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/getSettlementStatus
-d clientID=someclientid
-d developerAPIKey=somedeveloperkey
-d tradeID=77654
Response
| Field | Type | Description |
tradeDetails | object | Latest settlement notification recorded for the trade |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"tradeDetails": {
"memberid": "123",
"issuerid": "123",
"tradeID": "1235",
"tradeStatus": "Settled"
}
}
POST /v3/notifySettlement
Parameters
| Parameter | Type | Required | Description |
memberid | string | Yes | PPEX Member ID |
issuerid | string | Yes | Issuer ID |
tradeID | string | Yes | Trade ID (same as Match ID) |
tradeStatus | string | Yes | Settled/Canceled |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/notifySettlement
-d clientID=someclientid
-d developerAPIKey=somedeveloperkey
-d memberid=123456
-d issuerid=489651
-d tradeID=5474684246
-d tradeStatus=Settled
Response
| Field | Type | Description |
tradeStatus | string | Status as entered from the tradeStatus |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"tradeStatus": "Settled"
}
GET /v3/ppex/orders
Retrieves a paginated list of PPEX orders with support for filtering, sorting, and optional trade inclusion. This endpoint replaces the deprecated getOrdersForADay.
Parameters
| Parameter | Type | Required | Description |
offset | integer | No | Starting index for pagination. Default: 0 |
limit | integer | No | Number of records to return. Default: 10 |
filter | JSON | No | Filter criteria (see Filtering orders by date) |
sort | string | No | Sort field and direction |
include | string | No | Set to trades to include matched trades nested within each order |
deleted | string | No | Set to include records whose deleted state is DELETED |
Example Request
curl -k -X GET "https://api-sandboxdash.norcapsecurities.com/v3/ppex/orders?offset=0&limit=10" \
-H "clientID: someclientid" \
-H "developerAPIKey: somedeveloperkey"
Response
| Field | Type | Description |
ppex_orders | array | Array of order objects (see fields below) |
pagination | object | Pagination metadata (see below) |
Each ppex_orders element contains:
| Field | Type | Description |
securityId | string | Security ID the order is for |
securityName | string | Security name |
expirationType | string | Expiration type |
expirationDate | string | Expiration date |
memberId | string | Member (account owner) ID that placed the order |
orderId | string | Order ID |
accountId | string | Investor account ID associated with the order |
accountName | string | Account name |
securityType | string | Order side: Bid (buy) or Offer (sell) |
shares | string | Total share quantity on the order |
remainingShares | string | Shares still unfilled |
sharePrice | string | Price per share, or RFQ for request-for-quote orders |
amount | string | Total order amount |
priceNotDisplayed | string | Price Not Displayed flag (Yes / No) |
allOrNone | string | All-or-none flag (Yes / No) |
status | string | Order status. See Order status values for the full set and their meanings. |
type | string | Quote type (e.g. RFQ, LIMIT) |
tradeStatus | string | Trade settlement status |
orderStatus | string | Coarse order lifecycle status: Pending / Completed / Cancelled |
tradeOrderStatus | string | Trade order status (e.g. CREATED) |
negotiationStatus | string | RFQ negotiation status |
deleted | string | Record state (Active / DELETED) |
createdDate | string | Order creation timestamp |
updatedBy | string | User ID that last updated the order (0 if never updated by a user) |
updatedDate | string | Last update timestamp |
executionTime | string | Execution time |
contingencies | string | Order contingencies |
solicited | string | Whether the order was solicited (Yes / No) |
minimumQuantity | string | Minimum quantity threshold for execution |
operationHrStatus | string | Operating-hours status flag |
origination | string | Order origination (e.g. platform) |
cancelDate | string | Cancellation timestamp (when applicable) |
cancelExecutionTime | string | Cancellation execution time (when applicable) |
token | string | Caller-supplied token echoed back |
The pagination object contains:
| Field | Type | Description |
totalRecords | integer | Total number of records matching the query |
startIndex | integer | Zero-based index of the first record returned |
endIndex | integer | Zero-based index of the last record returned |
When include=trades is set, each order additionally contains a trades array; see Filtering orders by date for the trades element fields.
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"ppex_orders": [
{
"securityId": "28365032",
"securityName": "ABCD",
"expirationType": "1",
"expirationDate": "2025-06-14",
"memberId": "777",
"orderId": "2482",
"accountId": "A04834434",
"accountName": "Retirement A/C",
"securityType": "Offer",
"shares": "359.430914",
"remainingShares": "953.744306",
"sharePrice": "4.530231",
"amount": "460186.965273",
"priceNotDisplayed": "No",
"allOrNone": "No",
"status": "Live",
"type": "RFQ",
"tradeStatus": "Pending",
"orderStatus": "Pending",
"tradeOrderStatus": "CREATED",
"negotiationStatus": "Pending",
"deleted": "Active",
"createdDate": "2024-12-10 00:00:00",
"updatedBy": "0",
"updatedDate": "2022-08-28 00:00:00",
"executionTime": "5.45",
"contingencies": "All",
"solicited": "No",
"minimumQuantity": "87.741240",
"operationHrStatus": "1",
"origination": "platform",
"cancelDate": "2025-02-10 22:08:45",
"cancelExecutionTime": "0",
"token": "b8s0zjstfaf"
}
],
"pagination": {
"totalRecords": 142,
"startIndex": 0,
"endIndex": 9
}
}
Filtering orders by date
To replicate the deprecated getOrdersForADay behavior, use the filter parameter with createdDate and include=trades:
curl -k -X GET "https://api-sandboxdash.norcapsecurities.com/v3/ppex/orders?include=trades&limit=100&filter=%7B%22createdDate%22%3A%222026-03-24%22%7D" \
-H "clientID: someclientid" \
-H "developerAPIKey: somedeveloperkey"
The filter parameter is a URL-encoded JSON object:
{"createdDate": "2026-03-24"}
When include=trades is set, each order includes a trades array with matched trade details:
{
"statusCode": "101",
"statusDesc": "Ok",
"ppex_orders": [
{
"orderId": "2482",
"securityId": "28365032",
"securityName": "ABCD",
"securityType": "Offer",
"shares": "359.430914",
"sharePrice": "4.530231",
"status": "Live",
"createdDate": "2026-03-24 11:24:59",
"trades": [
{
"memberId": "777",
"askId": "2482",
"bidId": "2483",
"offeringId": "28365032",
"accountId": "A04834434",
"partyType": "SELLER",
"tradeId": "81",
"transactionType": "BUY",
"amount": "453.023100",
"sharePrice": "4.530231",
"shares": "100.000000",
"status": "SETTLED",
"reportingStatus": "REPORTED",
"createdDate": "2026-03-24 14:30:00",
"deleted": "ACTIVE",
"executionTime": "485",
"updatedDate": "2026-03-24 14:30:00"
}
]
}
],
"pagination": {
"totalRecords": 15,
"startIndex": 0,
"endIndex": 14
}
}
Each trades element is a full trade object with the same fields as a ppex/trades array element.
GET /v3/ppex/orders/{id}
This endpoint retrieves a single PPEX order.
Response
| Field | Type | Description |
ppex_order | object | A single order object. Its fields are identical to a ppex/orders array element. When include=trades is set, it also contains a trades array. |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"ppex_order": {
"securityId": "28365032",
"securityName": "AAPL",
"expirationType": "1",
"expirationDate": "2025-06-14",
"memberId": "777",
"orderId": "2482",
"accountId": "A04834434",
"accountName": "Retirement A/C",
"securityType": "Offer",
"shares": "359.430914",
"remainingShares": "953.744306",
"sharePrice": "4.530231",
"amount": "460186.965273",
"priceNotDisplayed": "No",
"allOrNone": "No",
"status": "Live",
"type": "RFQ",
"tradeStatus": "Pending",
"orderStatus": "Pending",
"tradeOrderStatus": "CREATED",
"negotiationStatus": "Pending",
"deleted": "Active",
"createdDate": "2024-12-10 00:00:00",
"updatedBy": "0",
"updatedDate": "2022-08-28 00:00:00",
"executionTime": "5.45",
"contingencies": "All",
"solicited": "No",
"minimumQuantity": "87.741240",
"operationHrStatus": "1",
"origination": "platform",
"cancelDate": "2025-02-10 22:08:45",
"cancelExecutionTime": "0",
"token": "b8s0zjstfaf"
}
}
Retrieves a paginated list of PPEX trades (matched/settling executions). Supports pagination, filtering, and sorting. A trade is the pairing of a Bid order against an Offer order; the bidId and askId fields identify the two underlying orders.
Parameters
| Parameter | Type | Required | Description |
offset | integer | No | Starting index for pagination. Default: 0 |
limit | integer | No | Number of records to return. Default: 10 |
filter | JSON | No | Filter criteria as a JSON object. Supports the response field names, plus bidId / askId to filter by either underlying order |
sort | string | No | Sort field and direction |
deleted | string | No | Set to include records whose deleted state is DELETED |
Example Request
curl -k -X GET "https://api-sandboxdash.norcapsecurities.com/v3/ppex/trades?offset=0&limit=10" \
-H "clientID: someclientid" \
-H "developerAPIKey: somedeveloperkey"
Response
| Field | Type | Description |
ppex_trades | array | Array of trade objects (see fields below) |
pagination | object | Pagination metadata (see below) |
Each ppex_trades element contains:
| Field | Type | Description |
memberId | string | Member (account owner) ID associated with the trade |
askId | string | Order ID of the sell (Offer) side, or null |
bidId | string | Order ID of the buy (Bid) side, or null |
offeringId | string | Offering (security) ID the trade is for |
accountId | string | Investor account ID associated with the trade |
partyType | string | Party role for the account on this trade (e.g. SELLER, BUYER) |
tradeId | string | Trade ID |
transactionType | string | Trade side (BUY / SELL) |
amount | string | Total trade amount |
sharePrice | string | Execution price per share |
shares | string | Share quantity for the trade |
status | string | Trade status (CREATED, FUNDED, SETTLED, CANCELED, REJECTED, PENDING) |
reportingStatus | string | Regulatory reporting status (e.g. REPORTED, FAILED) |
createdDate | string | Trade creation timestamp |
deleted | string | Record state (ACTIVE / DELETED) |
executionTime | string | Execution time |
updatedDate | string | Last update timestamp |
The pagination object contains:
| Field | Type | Description |
totalRecords | integer | Total number of records matching the query |
startIndex | integer | Zero-based index of the first record returned |
endIndex | integer | Zero-based index of the last record returned |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"ppex_trades": [
{
"memberId": "777",
"askId": "180",
"bidId": "126",
"offeringId": "549119",
"accountId": "ACCpiyiqzn0",
"partyType": "SELLER",
"tradeId": "81",
"transactionType": "BUY",
"amount": "2906.113302",
"sharePrice": "83.307155",
"shares": "564.183958",
"status": "PENDING",
"reportingStatus": "FAILED",
"createdDate": "2024-12-10 00:00:00",
"deleted": "ACTIVE",
"executionTime": "485",
"updatedDate": "2022-02-13 00:00:00"
}
],
"pagination": {
"totalRecords": 100,
"startIndex": 0,
"endIndex": 0
}
}
Retrieves a single PPEX trade by its trade ID.
Response
| Field | Type | Description |
ppex_trade | object | A single trade object. Its fields are identical to a ppex/trades array element. |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"ppex_trade": {
"memberId": "777",
"askId": "180",
"bidId": "126",
"offeringId": "549119",
"accountId": "ACCpiyiqzn0",
"partyType": "SELLER",
"tradeId": "81",
"transactionType": "BUY",
"amount": "2906.113302",
"sharePrice": "83.307155",
"shares": "564.183958",
"status": "PENDING",
"reportingStatus": "FAILED",
"createdDate": "2024-12-10 00:00:00",
"deleted": "ACTIVE",
"executionTime": "485",
"updatedDate": "2022-02-13 00:00:00"
}
}
POST /v3/updateSecurityMarketHours
Parameters
| Parameter | Type | Required | Description |
securityId | string | Yes | Security ID |
mondayHoursStart | string | No | specified time (EST) |
mondayHoursEnd | string | No | specified time (EST) |
mondayClosed | string | No | "yes" if the market is closed, null if hours are specified |
tuesdayHoursStart | string | No | specified time (EST) |
tuesdayHoursEnd | string | No | specified time (EST) |
tuesdayClosed | string | No | "yes" if the market is closed, null if hours are specified |
wednesdayHoursStart | string | No | specified time (EST) |
wednesdayHoursEnd | string | No | specified time (EST) |
wednesdayClosed | string | No | "yes" if the market is closed, null if hours are specified |
thursdayHoursStart | string | No | specified time (EST) |
thursdayHoursEnd | string | No | specified time (EST) |
thursdayClosed | string | No | "yes" if the market is closed, null if hours are specified |
fridayHoursStart | string | No | specified time (EST) |
fridayHoursEnd | string | No | specified time (EST) |
fridayClosed | string | No | "yes" if the market is closed, null if hours are specified |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/updateSecurityMarketHours
-d clientID=someclientid
-d developerAPIKey=somedeveloperkey
-d securityId=94216
-d mondayHoursStart=06:01
-d mondayHoursEnd=16:01
-d mondayClosed=no
-d tuesdayHoursStart=06:01
-d tuesdayHoursEnd=16:01
-d tuesdayClosed=no
-d wednesdayHoursStart=06:01
-d wednesdayHoursEnd=16:01
-d wednesdayClosed=no
-d thursdayHoursStart=06:01
-d thursdayHoursEnd=16:01
-d thursdayClosed=no
-d fridayHoursStart=06:01
-d fridayHoursEnd=16:01
-d fridayClosed=no
Response
| Field | Type | Description |
securityHoursDetails | object | Market hours configured for the security ID |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"securityHoursDetails": {
"securityId": "94216",
"mondayClosed": "No",
"mondayStartHours": "6",
"mondayStartMins": "1",
"mondayCloseHours": "23",
"mondayCloseMins": "59",
"tuesdayClosed": "No",
"tuesdayStartHours": "5",
"tuesdayStartMins": "15",
"tuesdayCloseHours": "23",
"tuesdayCloseMins": "59",
"wednesdayClosed": "No",
"wednesdayStartHours": "3",
"wednesdayStartMins": "0",
"wednesdayCloseHours": "23",
"wednesdayCloseMins": "59",
"thursdayClosed": "No",
"thursdayStartHours": "0",
"thursdayStartMins": "0",
"thursdayCloseHours": "23",
"thursdayCloseMins": "59",
"fridayClosed": "No",
"fridayStartHours": "0",
"fridayStartMins": "0",
"fridayCloseHours": "23",
"fridayCloseMins": "59"
}
}
GET /v3/ppex/market/holidays
Returns market holidays within a date range from the holiday calendar. Defaults to the current date through year-end if no range is specified.
Parameters
| Parameter | Type | Required | Description |
startDate | string | No | Start of date range (YYYY-MM-DD). Defaults to today |
endDate | string | No | End of date range (YYYY-MM-DD). Defaults to Dec 31 of current year |
Example Request
curl -k https://api-sandboxdash.norcapsecurities.com/v3/ppex/market/holidays \
-H "Authorization: Bearer someclientid:somedeveloperkey" \
-G -d startDate=2026-01-01 \
-d endDate=2026-12-31
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"marketHolidays": [
{
"date": "2026-01-01",
"description": "New Year's Day"
},
{
"date": "2026-01-19",
"description": "Martin Luther King Jr. Day"
},
{
"date": "2026-07-03",
"description": "Independence Day (Observed)"
}
]
}
Error Responses
| Status Code | Condition | Example statusDesc |
1400 | startDate or endDate not in YYYY-MM-DD format | Bad request: startDate and endDate must be in YYYY-MM-DD format |
{
"statusCode": "1400",
"statusDesc": "Bad request: startDate and endDate must be in YYYY-MM-DD format"
}
GET /v3/ppex/market/hours
Returns the weekly trading schedule (Monday–Sunday). If a securityId is provided, returns security-specific custom hours when configured; otherwise returns the global market schedule.
Parameters
| Parameter | Type | Required | Description |
securityId | string | No | Security ID for security-specific hours |
Example Request
curl -k https://api-sandboxdash.norcapsecurities.com/v3/ppex/market/hours \
-H "Authorization: Bearer someclientid:somedeveloperkey"
Response
| Field | Type | Description |
marketHours.timezone | string | Always America/New_York |
marketHours.hoursSource | string | global or security |
marketHours.schedule | array | Array of 7 day entries |
schedule[].day | string | Day name (monday–sunday) |
schedule[].dayOfWeek | integer | ISO day number (1=Monday, 7=Sunday) |
schedule[].closed | boolean | Whether the market is closed this day |
schedule[].open | string | Opening time (HH:MM) or null if closed |
schedule[].close | string | Closing time (HH:MM) or null if closed |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"marketHours": {
"timezone": "America/New_York",
"hoursSource": "global",
"schedule": [
{
"day": "monday",
"dayOfWeek": 1,
"closed": false,
"open": "06:00",
"close": "17:00"
},
{
"day": "tuesday",
"dayOfWeek": 2,
"closed": false,
"open": "06:00",
"close": "17:00"
},
{
"day": "saturday",
"dayOfWeek": 6,
"closed": true,
"open": null,
"close": null
}
]
}
}
GET /v3/ppex/market/schedule
Returns a date-by-date merged schedule combining weekly trading hours with holiday closures. Maximum range is 90 days. If no endDate is provided, defaults to 30 days from startDate.
Parameters
| Parameter | Type | Required | Description |
securityId | string | No | Security ID for security-specific hours |
startDate | string | No | Start date (YYYY-MM-DD). Defaults to today |
endDate | string | No | End date (YYYY-MM-DD). Defaults to startDate + 30 days. Max 90 days from startDate |
Example Request
curl -k https://api-sandboxdash.norcapsecurities.com/v3/ppex/market/schedule \
-H "Authorization: Bearer someclientid:somedeveloperkey" \
-G -d startDate=2026-03-23 \
-d endDate=2026-03-27
Response
| Field | Type | Description |
marketSchedule.timezone | string | Always America/New_York |
marketSchedule.hoursSource | string | global or security |
marketSchedule.startDate | string | Start date of the range |
marketSchedule.endDate | string | End date of the range |
marketSchedule.dates | array | Array of per-date entries |
dates[].date | string | Date (YYYY-MM-DD) |
dates[].day | string | Day name |
dates[].open | string | Opening time (HH:MM) or null if closed |
dates[].close | string | Closing time (HH:MM) or null if closed |
dates[].closed | boolean | Whether the market is closed |
dates[].closedReason | string | holiday, weekend, day_closed, or null |
dates[].holidayDescription | string | Holiday name (only present for holidays) |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"marketSchedule": {
"timezone": "America/New_York",
"hoursSource": "global",
"startDate": "2026-03-23",
"endDate": "2026-03-27",
"dates": [
{
"date": "2026-03-23",
"day": "monday",
"open": "06:00",
"close": "17:00",
"closed": false,
"closedReason": null
},
{
"date": "2026-03-25",
"day": "wednesday",
"open": "06:00",
"close": "17:00",
"closed": false,
"closedReason": null
},
{
"date": "2026-03-27",
"day": "friday",
"open": null,
"close": null,
"closed": true,
"closedReason": "holiday",
"holidayDescription": "Good Friday"
}
]
}
}
Error Responses
| Status Code | Condition | Example statusDesc |
1400 | startDate or endDate not in YYYY-MM-DD format | Bad request: startDate must be in YYYY-MM-DD format |
1400 | Range exceeds 90 days from startDate | Bad request: Date range cannot exceed 90 days |
1400 | endDate is before startDate | Bad request: endDate must be on or after startDate |
{
"statusCode": "1400",
"statusDesc": "Bad request: endDate must be on or after startDate"
}
GET /v3/ppex/market/status
Returns whether the PPEX market is currently open or closed, including the reason for closure. Checks holidays first, then the weekly schedule for the current day.
Parameters
| Parameter | Type | Required | Description |
securityId | string | No | Security ID for security-specific hours |
Example Request
curl -k https://api-sandboxdash.norcapsecurities.com/v3/ppex/market/status \
-H "Authorization: Bearer someclientid:somedeveloperkey"
Response
| Field | Type | Description |
marketStatus.isOpen | boolean | Whether the market is currently open |
marketStatus.currentTime | string | Current time in ISO 8601 format |
marketStatus.timezone | string | Always America/New_York |
marketStatus.openTime | string | Today's opening time (HH:MM) or null |
marketStatus.closeTime | string | Today's closing time (HH:MM) or null |
marketStatus.hoursSource | string | global or security; null only when closedReason is holiday |
marketStatus.closedReason | string | holiday, weekend, day_closed, outside_hours, or null if open. outside_hours indicates a normal trading weekday outside today's open/close window. |
Example Response (Open)
{
"statusCode": "101",
"statusDesc": "Ok",
"marketStatus": {
"isOpen": true,
"currentTime": "2026-03-24T10:30:00-04:00",
"timezone": "America/New_York",
"openTime": "06:00",
"closeTime": "17:00",
"hoursSource": "global",
"closedReason": null
}
}
Example Response (Closed — Holiday)
{
"statusCode": "101",
"statusDesc": "Ok",
"marketStatus": {
"isOpen": false,
"currentTime": "2026-01-01T12:00:00-05:00",
"timezone": "America/New_York",
"openTime": null,
"closeTime": null,
"hoursSource": null,
"closedReason": "holiday"
}
}