swagger: '2.0' servers: - url: //api.clearstreet.io/v1 description: Production server - url: //api.sandbox.clearstreet.io/v1 description: Sandbox server info: version: 0.0.3 title: Clear Street API contact: name: API Support email: eng@clearstreet.io url: https://clear-street.github.io/docs x-logo: url: 'https://clear-street.github.io/docs/assets/logo.png' backgroundColor: '#FFFFFF' license: name: Apache 2.0 url: 'http://www.apache.org/licenses/LICENSE-2.0.html' description: | This is a beta version of Clear Street's public API. This API is RESTful; it has resource-oriented URLs, returns JSON-encoded responses, and uses standard HTTP codes, authentication, and verbs. # Environments Clear Street operates two environments: sandbox and production. Each environment is completely isolated from the other. No data is ever shared. All activity in our sandbox environment has no actual impact; all accounts in our sandbox use canned data. We recommend testing in our sandbox environment first before moving to production. The following are the base URLs for each environment. Each endpoint in this API must be prefixed with one of the following base URLs: Sandbox base URL: `https://api.sandbox.clearstreet.io/v1` Production base URL: `https://api.clearstreet.io/v1` # Authentication End-to-end security is provided through an SSL connection and an API-key that will be provided to users of our API. The API-key provided to you will take the form a bearer token. Every request you make, therefore, must contain your API-key in the header of the request in the following form:
Authorization: Bearer <KEY>
Where `` is the API-key provided to you. Here's an example of constructing a request in Python: ```python import requests # change URL based on environment URL = "https://api.sandbox.clearstreet.io/v1/trades" # set provided API-key here headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer yJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjYXQiOjE1ODU2MTk2NDYsImV4cCI6MTU4NTYyMzI0NiwidWlkIjoyfQ.B6wdfKRro9JxPrhjn8QchPOfGFSWexfg_2EX0V_tkdA' } # construct your message payload = [{ "type": "allocation_trade", "timestamp": 1556544618, "client_trade_id": "042919-1a", "date": 20190304, "account_id": 100016, "mic": "XNAS", "exec_mpid": "CSMM", "capacity": "principal", "quantity": "100", "price": "140.00", "instrument": { "identifier": "ATRA", "identifier_type": "ticker", "currency": "USD", "country": "USA" }, "side": { "direction": "buy" }, "target_account_id": 100021 }] # send request requests.post(url=URL, headers=headers, json=payload) ``` tags: - name: Trades description: | Trade endpoints are used to insert or cancel trades into a our systems. - name: Uploads description: | Upload endpoints allow you to upload a `CSV` file that contain trades, in the same format as our [trade-file specification](https://github.com/clear-street/docs/blob/master/trade_file.md). You may prefer to use a file-upload if you have a extremely large number of trades (> 10000), or if you have dependency on legacy systems that deal with `CSV` files. We recommend using trade endpoints when possible, especially for real-time trade reporting. basePath: / schemes: - http consumes: - application/json produces: - application/json paths: # trade endpoints # ----------------------------------------------------------------------------- /trades: post: tags: - Trades summary: Insert Trades description: > Insert the provided trades atomically. Use this endpoint if you want atomicity and immediate confirmation; this request will either fully process all your trades, or reject them all atomically. Therefore, a successful call to this endpoint guarantees that your trades have been accepted by our systems. This endpoint can accept up to 1000 trades at a time. The fields below vary depending upon trade-type. Change the value of the `type` drop-down below to switch between trade-types. operationId: trades_insert parameters: - in: body name: trades required: true description: Array of trades to upload schema: type: array items: $ref: '#/definitions/Trade' responses: '202': description: OK schema: type: array items: $ref: '#/definitions/TradeSubmitted' '400': description: Bad Request schema: $ref: '#/definitions/Error' '422': description: Unprocessable Entity schema: $ref: '#/definitions/Error' '500': description: Internal Server Error schema: $ref: '#/definitions/Error' /trades/{trade_id}: delete: tags: - Trades summary: Cancel Trade By ID description: > Cancel a trade either by the Clear Street assigned `trade_id`, or `client_trade_id` that was provided in the original trade. If the ID you provide is, in fact, a `client_trade_id`, you must set `is_client_trade_id` to true, and also provide the `account_id` for the original trade. operationId: trades_cancel parameters: - in: path name: trade_id required: true description: Clear Street assigned unique trade_id type: string - in: query name: is_client_trade_id required: false description: True if the given trade_id is a client_trade_id type: boolean - in: query name: account_id required: false description: Provide only if `is_client_trade_id` is true. This is the account_id the trade was booked to type: integer responses: '202': description: OK '400': description: Bad Request schema: $ref: '#/definitions/Error' '409': description: Conflict schema: $ref: '#/definitions/Error' '500': description: Internal Server Error schema: $ref: '#/definitions/Error' # upload endpoints # ----------------------------------------------------------------------------- /uploads/insert: post: tags: - Uploads summary: Create Insert Upload description: | Upload the provided CSV file for processing asynchronously. Your file will be uploaded to our servers, and then subsequently processed. The columns for a CSV file should match the JSON path dot-notation of the fields available in the insert trades endpoint. For example, the column `side.direction` would be the column header to set the direction of a trade, and the column `instrument.ticker` would set the trade's instrument ticker, etc. Our [trade-file specification](https://github.com/clear-street/docs/blob/master/trade_file.md) has more details. You can also download an example file. operationId: uploads_insert_create consumes: - multipart/form-data parameters: - name: file in: formData type: file required: true description: The file to upload. Must have a *.csv extension. responses: '202': description: OK schema: $ref: '#/definitions/Upload' '400': description: Bad Request schema: $ref: '#/definitions/Error' '409': description: Conflict schema: $ref: '#/definitions/Error' '500': description: Internal Server Error schema: $ref: '#/definitions/Error' /uploads/cancel: post: tags: - Uploads summary: Create Cancel Upload description: | Upload the provided CSV file for processing cancels asynchronously. Example column headers with associated example values:
account100001
trade_id12343
by_client_idfalse
operationId: uploads_cancel_create consumes: - multipart/form-data parameters: - name: file in: formData type: file required: true description: The file to upload. Must have a *.csv extension. responses: '202': description: OK schema: $ref: '#/definitions/Upload' '400': description: Bad Request schema: $ref: '#/definitions/Error' '409': description: Conflict schema: $ref: '#/definitions/Error' '500': description: Internal Server Error schema: $ref: '#/definitions/Error' /uploads/{upload_id}: get: tags: - Uploads summary: Get Upload By ID description: | Get an existing upload. Use this endpoint when you want to the know the status of a previously created upload. operationId: uploads_get_by_id parameters: - in: path name: upload_id required: true description: upload_id that identifies a previously created upload type: string responses: '200': description: OK schema: $ref: '#/definitions/UploadStatus' '404': description: Not Found schema: $ref: '#/definitions/Error' definitions: ErrorBase: type: object properties: message: type: string description: Error details, if any example: message: Error: type: object allOf: - $ref: '#/definitions/ErrorBase' required: - type properties: type: type: string enum: - internal - malformed_trade - too_many_trades - file_exists - empty_file - unsupported_file - upload_not_found - trade_already_canceled - missing_account_id x-nullable: false Upload: type: object description: Represents an upload's details required: - created_at - upload_id - org_id - user_id - name - s3_key properties: created_at: type: integer description: Timestamp when the upload was created; milliseconds since unix epoch x-nullable: false upload_id: type: string description: SHA256 hash of the trades you uploaded. This uniquely identifies your upload example: 3d4b424aa96e2751228ad4b78f8882073e5e29079047ad524a0ed719b57c42db x-nullable: false org_id: type: integer format: int64 description: The orgID of the user who created this upload example: 1 x-nullable: false user_id: type: integer format: int64 description: The userID of the user who created this upload example: 1 x-nullable: false name: type: string description: Name of the upload; this will be the filename if the upload x-nullable: false s3_key: type: string description: AWS S3 key x-nullable: false UploadStatus: type: object allOf: - $ref: '#/definitions/Upload' description: Represents an upload's status required: - trades_processed - trades_skipped - status - completed properties: updated_at: type: integer description: Timestamp when the upload was last updated; milliseconds since unix epoch x-nullable: false trades_processed: type: integer description: The number of trades processed from this upload x-nullable: false trades_skipped: type: integer description: The number of trades skipped from this upload x-nullable: false status: type: string description: The status of this upload x-nullable: false completed: type: boolean description: True if this upload has finished processing x-nullable: false Side: type: object description: Trade direction, either buy or sell with qualifiers required: - direction properties: direction: type: string enum: - 'buy' - 'sell' description: Trade direction example: sell x-nullable: false qualifier: type: string enum: - 'short' description: Trade qualifier, if any default: null x-nullable: true position: type: string enum: - 'open' - 'close' description: Trade position, if any default: null x-nullable: true Interest: type: object description: Interest specific details for fixed income trades only. required: - yield - accrued - accrued_days properties: yield: type: string pattern: "^[-]?[0-9]*\\.?[0-9]+$" description: Yield for the security x-nullable: false accrued: type: string pattern: "^[-]?[0-9]*\\.?[0-9]+$" description: Accrued interest to be paid x-nullable: false accrued_days: type: integer description: Number of days of accrued interest x-nullable: false Fees: type: object description: Fees associated with a trade. properties: commission: type: string pattern: "^[-]?[0-9]*\\.?[0-9]+$" description: Commission charged or paid example: '0' default: null x-nullable: true omit_sec: type: boolean description: True if SEC fees should be applied example: false default: false omit_taf: type: boolean description: True if Clear Street's billable rate should be applied example: false default: false omit_bill: type: boolean description: True if Clear Street's billable rate should be applied example: false default: false x-nullable: true Settlement: type: object description: Settlement details. Required typically for special settlement situations. properties: currency: type: string minLength: 3 maxLength: 3 description: Settlement currency for the trade if different than the issue currency of the security. This should be a 3-letter ISO 4217 code. example: USD default: null x-nullable: true date: type: integer minimum: 20190101 maximum: 21000101 description: Only provide for irregular-way, i.e. you've negotiated a special settlement arrangement for this trade; represents settlement date in YYYYMMDD format default: null x-nullable: true Locate: type: object description: Locate details. Applicable only when locates are required, i.e. for short sales. required: - id - source properties: id: type: string minLength: 1 maxLength: 256 description: ID of the locate obtained for short sales. example: LOC12345 x-nullable: false source: type: string minLength: 1 maxLength: 256 description: Identifies the firm supplying the locate (usually the MPID). Mandatory for short-sales, optional otherwise x-nullable: false Instrument: type: object description: Instrument details. required: - identifier - identifier_type - country - currency properties: identifier: type: string minLength: 1 maxLength: 256 description: Official identifier. If you use `ticker`, then ensure you use a common ticker (e.g. `AAPL` for Apple Inc. on NASDAQ) example: AAPL x-nullable: false identifier_type: type: string enum: - 'ticker' - 'cusip' - 'isin' - 'sedol' description: Identifier type. x-nullable: false country: type: string minLength: 1 maxLength: 4 description: ISO 3166 Alpha-3 Country Code of where the instrument was traded example: USA x-nullable: false currency: type: string minLength: 1 maxLength: 4 description: ISO 4217 Alpha-3 Currency Code of the currency in which the instrument is traded in example: USD x-nullable: false Trade: type: object discriminator: type description: Base trade details; common amongst all trade types. required: - type - timestamp - client_trade_id - date - account_id - quantity - price - instrument - side properties: type: type: string enum: - transfer_trade - allocation_trade - exchange_trade - bilateral_trade description: Trade type. x-nullable: false timestamp: type: integer description: Timestamp of when the trade occurred in milliseconds since unix epoch. example: 1545952392000 x-nullable: false client_trade_id: type: string minLength: 1 maxLength: 256 description: Unique ID for this trade that you define. example: T-50264430-bc41 x-nullable: false date: type: integer minimum: 20010101 maximum: 21000101 description: Trade date for the trade in YYYYMMDD format example: 20200101 x-nullable: false account_id: type: integer minimum: 0 description: Clear Street provided account_id that you want this trade booked to. example: 1002 x-nullable: false quantity: type: string pattern: "^[-]?[0-9]*\\.?[0-9]+$" description: The quantity of the trade x-nullable: false example: '100' price: type: string pattern: "^[-]?[0-9]*\\.?[0-9]+$" description: The price of the trade x-nullable: false example: '10.00' behalf_of_entity_id: type: integer description: DEPRECATED - Prefer behalf_of_account_id instead. EntityID for who this trade is behalf of example: 1002 x-nullable: true behalf_of_account_id: type: integer description: AccountID for who this trade is behalf of example: 1002 x-nullable: true solicited: type: boolean description: True if this trade was solicited x-nullable: true registered_rep: type: string description: The registered rep for this trade, if any x-nullable: true branch_office: type: string description: The branch office submitting this trade, if any x-nullable: true instrument: $ref: '#/definitions/Instrument' side: $ref: '#/definitions/Side' settlement: $ref: '#/definitions/Settlement' user_data: type: object description: Free-form JSON to attach to the trade x-nullable: true order_id: type: string description: The order id is to link all the executions in the avg price account(exchange and bi-lateral trade types) to the allocation trade type default: null x-nullable: true cancel_trade_id: type: string description: The original trade id that is being canceled, if any default: null x-nullable: true TradeSubmitted: type: object description: Submitted trade details properties: client_trade_id: type: string minLength: 1 maxLength: 256 description: Unique ID for this trade that you defined. example: T-50264430-bc41 x-nullable: false trade_id: type: string description: Unique ID for this trade provided by Clear Street. example: 1893 x-nullable: false transfer_trade: type: object allOf: - $ref: '#/definitions/Trade' description: Transfer trade type. required: - target_account_id properties: target_account_id: type: integer minimum: 0 description: The destination Clear Street account_id example: 1002 x-nullable: false capacity: type: string enum: - principal - agency - mixed - riskless_principal description: Capacity on the trade fees: $ref: '#/definitions/Fees' allocation_trade: type: object allOf: - $ref: '#/definitions/Trade' description: Allocation trade type. required: - target_account_id properties: target_account_id: type: integer minimum: 0 description: The destination Clear Street account_id example: 1002 x-nullable: false capacity: type: string enum: - principal - agency - mixed - riskless_principal description: Capacity on the trade x-nullable: false contra_side_qualifier: type: string enum: - 'short' - 'open' - 'close' description: Contra trade side qualifier, if any default: null x-nullable: true fees: $ref: '#/definitions/Fees' exchange_trade: type: object allOf: - $ref: '#/definitions/Trade' description: Trade executed directly on an exchange required: - capacity - mic - exec_mpid properties: capacity: type: string enum: - principal - agency - mixed - riskless_principal description: Your capacity on the trade x-nullable: false mic: type: string description: ISO 10383 Market Identifer Code for the exchange where this trade took place. minLength: 1 maxLength: 10 example: XNAS x-nullable: false exec_mpid: type: string description: MPID of the executing party, if any minLength: 1 maxLength: 10 example: CLST x-nullable: false is_when_issued: type: boolean description: True if the trade was done as When Issued default: false example: false fees: $ref: '#/definitions/Fees' locate: $ref: '#/definitions/Locate' bilateral_trade: type: object allOf: - $ref: '#/definitions/Trade' description: Trade executed bilaterially broker to broker required: - capacity - contra_mpid - contra_dtc_num - exec_mpid properties: capacity: type: string enum: - principal - agency - mixed - riskless_principal description: Your capacity on the trade x-nullable: false contra_mpid: type: string description: Contra party's MPID minLength: 1 maxLength: 10 example: XNAS x-nullable: false contra_dtc_num: type: string description: Contra party's DTC number minLength: 1 x-nullable: false is_when_issued: type: boolean description: True if the trade was done as When Issued default: false example: false exec_mpid: type: string description: MPID of the executing party, if different than contra_mpid minLength: 1 maxLength: 10 example: CLST x-nullable: false interest: $ref: '#/definitions/Interest' fees: $ref: '#/definitions/Fees' locate: $ref: '#/definitions/Locate' last_market: type: string description: The last market is the exchange where the trade executed (if we route orders to a broker(bi lateral trade) and they route to an exchange), if any default: null x-nullable: true nscc_clearing: type: string enum: - contra - agu - qsr - corr - corr_fees description: NSCC clearing details related to locking; They lock when value is contra or agu. We lock in other cases. default: null x-nullable: true