tZERO Trading API
Order management for secondary-market trading (fees, submit, cancel, list orders).
Order management for secondary-market trading (fees, submit, cancel, list orders).
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/tzero-trading-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Issuance & Secondary Markets Trading API
description: APIs to Create Individual broker dealer accounts, Trigger KYC on the investors in the account, Review account information and KYC results, View Primary offering that are available to invest and manage investments in the assets.
servers:
- url: https://gateway-web-api.tzero.com/app
tags:
- name: Trading
description: Order management for secondary-market trading (fees, submit, cancel, list orders).
paths:
/trading/v1/fee:
get:
tags:
- Trading
summary: Calculates an estimated fee for the trade
description: Calculates anticipated order fees prior to actually submitting order changes and incurring the fees.
operationId: getOrderFee
security:
- x-api-key: []
bearerAuth: []
parameters:
- name: price
in: query
required: true
schema:
type: string
description: Price (in USD) of a single unit of the item intended to be traded.
- name: assetId
in: query
required: true
schema:
type: string
- name: quantity
in: query
required: true
schema:
type: string
description: The total quantity of the item intended to be traded.
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/FeeResponse'
'400':
description: The request is invalid. The provided data must be changed.
'401':
description: Unauthorized
'403':
description: Forbidden
'500':
description: Internal Server Error
/trading/v1/accounts/{accountId}/orders:
post:
tags:
- Trading
summary: Creates an order for an Account
description: Creates an order for the Account Id in the URL
operationId: createOrder
security:
- x-api-key: []
bearerAuth: []
parameters:
- name: accountId
in: path
required: true
schema:
type: string
description: Account identifier.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateOrderRequest'
example:
symbol: tZERO
assetId: '39737'
side: BUY
timeInForce: DAY
expireDate: '2026-12-31'
type: LIMIT
quantity: 100
limitPrice: 10
transactionId: TRAN-123
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/CreateOrderResponse'
example:
transactionId: TRAN-123
id: ORDER-123456
status: SUBMITTED
symbol: tZERO
assetId: '39737'
side: BUY
timeInForce: DAY
type: LIMIT
quantity: 100
limitPrice: 10
expireTs: '2026-04-29T23:34:59.000000-04:00'
createdTs: '2026-04-20T23:34:59.000000-04:00'
fee: 1.23
'400':
description: 'Bad Request (validation failed or invalid payload). Body: `errors` array; each item has `code`, `message`, optional `field`.
**Submit trade order — example error codes (non-exhaustive):**
| Code | Meaning |
|------|---------|
| TRANSACTION_ID_REQUIRED | transactionId is required. |
| INVALID_TIME_IN_FORCE | timeInForce value is not recognized. Valid: DAY, GTC, GTD. |
| EXPIRE_DATE_REQUIRED | expireDate is required when timeInForce is GOOD_TIL_DATE. |
| EXPIRE_DATE_NOT_ALLOWED | expireDate must be null when timeInForce is DAY. |
'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
'403':
description: Forbidden
'500':
description: Internal Server Error
'503':
description: Service Unavailable
get:
tags:
- Trading
summary: Gets All orders placed for an Account
description: Retrieve a list of orders for the given account, filtered by query parameters when supplied.
operationId: getOrders
security:
- x-api-key: []
bearerAuth: []
parameters:
- name: accountId
in: path
required: true
schema:
type: string
description: Account identifier.
- name: symbol
in: query
required: false
schema:
type: string
- name: assetId
in: query
required: false
schema:
type: string
- name: status
in: query
required: false
schema:
type: string
- name: from
in: query
required: false
schema:
type: string
description: Start of time range filter (ISO-8601).
- name: to
in: query
required: false
schema:
type: string
description: End of time range filter (ISO-8601).
- name: zone
in: query
required: false
schema:
type: string
description: Time zone identifier(America/New_York, America/Los_Angeles) for interpreting `from`/`to`.
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/OrdersListResponse'
'401':
description: Unauthorized
'403':
description: Forbidden
'500':
description: Internal Server Error
/trading/v1/accounts/{accountId}/orders/{orderId}:
get:
tags:
- Trading
summary: Retrieve a single order for the given Order Id
description: Retrieve a single trade order by ID for the given account.
operationId: getOrder
security:
- x-api-key: []
bearerAuth: []
parameters:
- name: accountId
in: path
required: true
schema:
type: string
description: Account identifier.
- name: orderId
in: path
required: true
schema:
type: string
description: Order identifier.
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/OrderResponse'
'401':
description: Unauthorized
'403':
description: Forbidden
'404':
description: Order not found
'500':
description: Internal Server Error
delete:
tags:
- Trading
summary: Attempts to a Cancel a OPEN Order
description: Attempts to Cance a OPEN order associated to the Account Id and Order Id in the URL.
operationId: cancelOrder
security:
- x-api-key: []
bearerAuth: []
parameters:
- name: accountId
in: path
required: true
schema:
type: string
description: Account identifier.
- name: orderId
in: path
required: true
schema:
type: string
description: Order identifier.
responses:
'202':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CancelOrderResponse'
'400':
description: Bad Request (e.g. missing orderId or transactionId).
'401':
description: Unauthorized
'403':
description: Forbidden
'404':
description: Order not found
'422':
description: Order cannot be cancelled
'500':
description: Internal Server Error
'503':
description: Service Unavailable
components:
schemas:
CancelOrderResponse:
type: object
required:
- transactionId
- status
- id
properties:
transactionId:
type: string
id:
type: string
status:
type: string
enum:
- CANCEL_REQUESTED
FeeResponse:
type: object
required:
- fee
- status
- feeFormatted
properties:
fee:
type: number
format: double
description: The amount in USD which will be charged if the previously proposed trade is completed.
feeFormatted:
type: string
description: A formatted string representing the amount in USD which will be charged if the previously proposed trade is completed
status:
type: string
description: DEPRECATED. Text description roughly equivalent to a HTTP status code
CreateOrderRequest:
type: object
required:
- transactionId
- symbol
- assetId
- side
- timeInForce
- type
- quantity
- limitPrice
properties:
symbol:
type: string
assetId:
type: string
side:
type: string
description: BUY or SELL
enum:
- BUY
- SELL
timeInForce:
type: string
enum:
- DAY
- GTD
- GTC
description: 'Time in Force. Accepts (DAY, GTC, GTD)
'
expireDate:
type:
- string
- 'null'
description: Expiration date (yyyy-MM-dd). Required only when timeInForce is GOOD_TIL_DATE; must be null for DAY/GTC.
type:
type: string
enum:
- LIMIT
quantity:
type: number
format: double
limitPrice:
type: number
format: double
transactionId:
type: string
description: Client-provided transaction identifier for idempotency and tracing.
OrderResponse:
type: object
required:
- accountId
- id
- symbol
- side
- type
- limitPrice
- quantity
- filledQuantity
- leavesQuantity
- averagePrice
- timeInForce
- estimatedFee
- estimatedSubTotal
- estimatedGrandTotal
- assetClass
- status
properties:
accountId:
type: string
id:
type: string
symbol:
type: string
side:
type: string
enum:
- BUY
- SELL
type:
type: string
enum:
- LIMIT
limitPrice:
type: number
format: double
quantity:
type: number
format: double
filledQuantity:
type: number
format: double
leavesQuantity:
type: number
format: double
averagePrice:
type:
- number
- 'null'
format: double
timeInForce:
type: string
enum:
- DAY
- GTD
- GTC
description: 'Time until the order is valid for (DAY, GTC, GTD)
'
expireTs:
type:
- string
- 'null'
format: date-time
description: Optional expiration time for the order when applicable.
estimatedFee:
type: number
format: double
description: Estimated fee that will be charged if the entire order is executed for exactly the requested limitPrice. This value will become more accurate as more and more quantity are executed and we know actual amounts billed, as opposed to what is listed in limitPrice.
estimatedSubtotal:
type: number
format: double
description: The total amount a customer will pay for just the securities e.g. (limitPrice * quantity). This does not include the fee.This value will become more accurate as more and more quantity are executed and we know actual amounts billed, as opposed to what is listed in limitPrice.
estimatedGrandTotal:
type: number
format: double
description: The total amount a customer will be expected to pay ((limitPrice * quantity) + estimatedFee). This value will become more accurate as more and more quantity are executed and we know actual amounts billed, as opposed to what is listed in limitPrice.
cumulativeFee:
type:
- number
- 'null'
format: double
description: The total amount charged to facilitate the trade so far. If the order is only partially filled then it is expected this balance will grow with each additional partial fill, or fill.
cumulativeSubtotal:
type:
- number
- 'null'
format: double
description: The amount (in USD) paid so far for all fills in the order. If order was placed at a limit price of $10 for 100 units, but was able to get 10 units for $10 each, 10 units for $9, and 10 units for $8 each then the cumulative would be $170. When the remaining 70 units are filled then this balance is expected to grow. This does not include any fees charged by a broker dealer to facilitate the trade.
cumulativeGrandTotal:
type:
- number
- 'null'
format: double
description: The total amount (in USD) paid so far, for both the executed trsdes as well as the fee(s) charged for facilitating the exchange. This balance is expected to grow if the order is unfilled or only partially filled.
status:
type: string
enum:
- SUBMITTED
- OPEN
- PARTIALLY_FILLED
- FILLED
- CANCEL_REQUESTED
- PENDING_CANCEL
- CANCEL_REJECTED
- CANCELED
- DONE_FOR_DAY
- EXPIRED
- REJECTED
- STOPPED
createdTs:
type:
- string
- 'null'
format: date-time
modifiedTs:
type:
- string
- 'null'
format: date-time
assetClass:
type: string
executionHistory:
type: array
items:
$ref: '#/components/schemas/OrderExecution'
description: Execution history for an order.
ErrorItem:
type: object
properties:
code:
type: string
description: Error/validation code (e.g. DATE_OF_BIRTH_IN_FUTURE, JURISDICTION_COUNTRY_NOT_ALLOWED). See x-businessValidationErrorCodes for business logic codes.
message:
type: string
description: Human-readable message.
field:
type:
- string
- 'null'
description: Request field path when applicable (e.g. investor.dateOfBirth, investor.physicalAddress.country).
details:
type:
- object
- 'null'
additionalProperties: true
description: 'Optional object that will be sent for certain error `code` and documented in the endpoint''s error table.
'
OrdersListResponse:
type: object
required:
- orders
properties:
orders:
type: array
items:
$ref: '#/components/schemas/OrderResponse'
OrderExecution:
type: object
required:
- executionTs
- cumulativeQuantity
- leavesQuantity
- averagePrice
- executionResult
properties:
executionTs:
type: string
description: ISO-8601 timestamp of the execution.
affectedQuantity:
type:
- number
- 'null'
format: double
description: Quantity affected by this execution (fills and cancels).
fillQuantity:
type:
- number
- 'null'
format: double
description: Quantity filled on this execution.
fillPrice:
type:
- number
- 'null'
format: double
description: Price per share on this fill.
cumulativeQuantity:
type: number
format: double
description: Total filled quantity across all executions so far.
executionResult:
type:
- string
- 'null'
enum:
- OPEN
- PARTIALLY_FILLED
- FILLED
- CANCELED
- REJECTED
- CANCEL_REJECTED
- EXPIRED
- STOPPED
- DONE_FOR_DAY
description: Execution result.
leavesQuantity:
type: number
format: double
description: Remaining unfilled quantity.
averagePrice:
type: number
format: double
description: Average price across all fills.
text:
type:
- string
- 'null'
description: Execution context text.
fee:
type:
- number
- 'null'
format: double
description: Fee charged for this execution (in USD).
subtotal:
type:
- number
- 'null'
format: double
description: Execution subtotal before fees (in USD).
grandTotal:
type:
- number
- 'null'
format: double
description: Execution total including fees (in USD).
ErrorResponse:
type: object
description: Error response body for validation and business-rule failures. Contains a list of errors; each item has code, message, and optional field (JSON path).
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ErrorItem'
CreateOrderResponse:
type: object
properties:
transactionId:
type: string
id:
type: string
accountId:
type: string
symbol:
type: string
assetId:
type: string
side:
type: string
enum:
- BUY
- SELL
quantity:
type: number
format: double
type:
type: string
enum:
- LIMIT
limitPrice:
type: number
format: double
timeInForce:
type: string
enum:
- DAY
- GTD
- GTC
description: 'Time the order is valid for (DAY, GTC, GTD)
'
status:
type: string
enum:
- SUBMITTED
expireTs:
type:
- string
- 'null'
format: date-time
createdTs:
type:
- string
- 'null'
format: date-time
modifiedTs:
type:
- string
- 'null'
format: date-time
fee:
type:
- number
- 'null'
format: double
securitySchemes:
x-api-key:
type: apiKey
in: header
name: x-apikey
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
refreshToken:
type: refreshToken
in: header
name: refreshToken