{"id":47638270,"url":"https://github.com/intrinio/intrinio-realtime-java-sdk","last_synced_at":"2026-04-02T00:29:49.653Z","repository":{"id":18503209,"uuid":"103432561","full_name":"intrinio/intrinio-realtime-java-sdk","owner":"intrinio","description":"Intrinio Java SDK for Real-Time Stock Prices","archived":false,"fork":false,"pushed_at":"2026-01-20T05:51:40.000Z","size":294,"stargazers_count":30,"open_issues_count":2,"forks_count":8,"subscribers_count":15,"default_branch":"master","last_synced_at":"2026-01-20T13:52:16.237Z","etag":null,"topics":["exchange","fintech","forex","java","market-data","real-time","realtime","stock-data","stock-market","stock-market-data","stock-prices","stocks","websocket"],"latest_commit_sha":null,"homepage":"https://intrinio.com","language":"Java","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/intrinio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-09-13T17:54:01.000Z","updated_at":"2025-10-01T15:52:13.000Z","dependencies_parsed_at":"2024-03-14T02:47:49.293Z","dependency_job_id":"f6adab14-1cdc-4c56-b5cf-b5605016aa07","html_url":"https://github.com/intrinio/intrinio-realtime-java-sdk","commit_stats":null,"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/intrinio/intrinio-realtime-java-sdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intrinio%2Fintrinio-realtime-java-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intrinio%2Fintrinio-realtime-java-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intrinio%2Fintrinio-realtime-java-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intrinio%2Fintrinio-realtime-java-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/intrinio","download_url":"https://codeload.github.com/intrinio/intrinio-realtime-java-sdk/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intrinio%2Fintrinio-realtime-java-sdk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31293379,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T21:15:39.731Z","status":"ssl_error","status_checked_at":"2026-04-01T21:15:34.046Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["exchange","fintech","forex","java","market-data","real-time","realtime","stock-data","stock-market","stock-market-data","stock-prices","stocks","websocket"],"created_at":"2026-04-02T00:29:49.027Z","updated_at":"2026-04-02T00:29:49.587Z","avatar_url":"https://github.com/intrinio.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Intrinio Java SDK for Real-Time Stock Prices\nSDK for working with Intrinio's realtime IEX, NASDAQ Basic, CBOE One, delayed SIP prices, and realtime/delayed [OPRA](https://www.opraplan.com/) and Options Edge options feeds.\n\n[Intrinio](https://intrinio.com/) provides real-time and delayed stock prices via a two-way WebSocket connection. To get started, [subscribe to a real-time data feed](https://docs.intrinio.com/tutorial/websocket) and follow the instructions below.\n\n## Programming Language Requirements\n\n- Java 14+\n\n## Minimum Hardware Requirements - Trades only\nEquities Client:\n* Non-lobby mode: 1 hardware core and 1 thread in your configuration for roughly every 100 symbols, up to the lobby mode settings. Absolute minimum 2 cores and threads.\n* Lobby mode: 4 hardware cores and 4 threads in your configuration\n* 5 Mbps connection\n* 0.5 ms latency\n\nOptions Client:\n* Non-lobby mode: 1 hardware core and 1 thread in your configuration for roughly every 250 contracts, up to the lobby mode settings.  3 cores and 3 configured threads for each chain, up to the lobby mode settings. Absolute minimum 3 cores and threads.\n* Lobby mode: 6 hardware cores and 6 threads in your configuration\n* 25 Mbps connection\n* 0.5 ms latency\n\n## Minimum Hardware Requirements - Trades and Quotes\nEquities Client:\n* Non-lobby mode: 1 hardware core and 1 thread in your configuration for roughly every 25 symbols, up to the lobby mode settings. Absolute minimum 4 cores and threads.\n* Lobby mode: 8 hardware cores and 8 threads in your configuration\n* 25 Mbps connection\n* 0.5 ms latency\n\nOptions Client:\n* Non-lobby mode: 1 hardware core and 1 thread in your configuration for roughly every 100 contracts, up to the lobby mode settings.  4 cores and 4 configured threads for each chain, up to the lobby mode settings. Absolute minimum 4 cores and threads.\n* Lobby mode: 12 hardware cores and 12 threads in your configuration\n* 100 Mbps connection\n* 0.5 ms latency\n\n## Docker\nAdd your API key to the config.json file in src/intrinio/realtime/equities or src/intrinio/realtime/options, uncomment the desired example in SampleApp.java, then\n```\ndocker compose build\ndocker compose run example\n```\n\n## Installation\n\nGo to [Release](https://github.com/intrinio/intrinio-realtime-java-sdk/releases/), download the JAR, reference it in your project. The JAR contains dependencies necessary to the SDK.\n\n## Sample Project\n\nFor a sample Java project see: [intrinio-realtime-java-sdk](https://github.com/intrinio/intrinio-realtime-java-sdk)\n\n## Features\n\n* Receive streaming, real-time or delayed equities price quotes (trades, bid, ask)\n* Receive streaming, real-time or delayed options price quotes (trades, conflated bid/ask, unusual activity (block trades, sweeps, whale trades, unusual sweeps), open interest, open, close, high, low)\n* Subscribe to updates from individual securities/chains/contracts, or\n* Subscribe to updates for all securities/contracts (lobby)\n\n## Equities Example Usage\n* See [Equities Sample Websocket](https://github.com/intrinio/intrinio-realtime-java-sdk/blob/master/src/SampleApp/EquitiesSampleApp.java) and [Sample Websocket](https://github.com/intrinio/intrinio-realtime-java-sdk/blob/master/src/SampleApp/SampleApp.java)\n\n## Options Example Usage\n* See [Options Sample Websocket](https://github.com/intrinio/intrinio-realtime-java-sdk/blob/master/src/SampleApp/OptionsSampleApp.java) and [Sample Websocket](https://github.com/intrinio/intrinio-realtime-java-sdk/blob/master/src/SampleApp/SampleApp.java)\n\n## Options and Equities concurrently Example Usage\n* See [Composite Sample Websocket](https://github.com/intrinio/intrinio-realtime-java-sdk/blob/master/src/SampleApp/CompositeSampleApp.java) and [Sample Websocket](https://github.com/intrinio/intrinio-realtime-java-sdk/blob/master/src/SampleApp/SampleApp.java)\n\n## Handling Events\n\nThere are thousands of securities and millions of options contracts, each with their own feed of activity.  We highly encourage you to make your trade and quote handlers has short as possible and follow a queue pattern so your app can handle the volume of activity.\nNote that quotes (ask and bid updates) comprise ~90% of the volume of the entire feed. Be cautious when deciding to receive ask/bid quote updates.\n\n## Data Format\n\n### Equities Trade Message\n\n```java\npublic record Trade(String symbol, SubProvider subProvider, char marketCenter, double price, long size, long timestamp, long totalVolume, String conditions)\n```\n\n* **symbol** - Ticker symbole.\n* **subProvider** - Denotes the detailed source within grouped sources.\n  *    **`NONE`** - No subtype specified.\n  *    **`CTA_A`** - CTA_A in the DELAYED_SIP provider.\n  *    **`CTA_B`** - CTA_B in the DELAYED_SIP provider.\n  *    **`UTP`** - UTP in the DELAYED_SIP provider.\n  *    **`OTC`** - OTC in the DELAYED_SIP provider.\n  *    **`NASDAQ_BASIC`** - NASDAQ Basic in the NASDAQ_BASIC provider.\n  *    **`IEX`** - From the IEX exchange in the REALTIME provider.\n  *    **`CBOE_ONE`** - From the CBOE One exchanges provider.\n  *    **`EQUITIES_EDGE`** - From the Equities Edge provider.\n* **marketCenter** - Provides the market center\n* **price** - the price in USD\n* **size** - the size of the last trade.\n* **totalVolume** - The number of stocks traded so far today for this symbol.\n* **timestamp** - a Unix timestamp in nanoseconds since unix epoch.\n* **conditions** - Provides the conditions\n\n\n### Equities Quote Message\n\n```java\npublic record Quote(QuoteType type, String symbol, SubProvider subProvider, char marketCenter, double price, long size, long timestamp, String conditions)\n```\n\n* **type** - the quote type\n  *    **`ask`** - represents an ask type\n  *    **`bid`** - represents a bid type  \n* **subProvider** - Denotes the detailed source within grouped sources.\n  *    **`NONE`** - No subtype specified.\n  *    **`CTA_A`** - CTA_A in the DELAYED_SIP provider.\n  *    **`CTA_B`** - CTA_B in the DELAYED_SIP provider.\n  *    **`UTP`** - UTP in the DELAYED_SIP provider.\n  *    **`OTC`** - OTC in the DELAYED_SIP provider.\n  *    **`NASDAQ_BASIC`** - NASDAQ Basic in the NASDAQ_BASIC provider.\n  *    **`IEX`** - From the IEX exchange in the REALTIME provider.\n  *    **`CBOE_ONE`** - From the CBOE One exchanges provider.\n  *    **`EQUITIES_EDGE`** - From the Equities Edge provider.\n* **marketCenter** - Provides the market center\n* **symbol** - Ticker symbol.\n* **price** - the price in USD\n* **size** - the size of the last ask or bid).\n* **timestamp** - a Unix timestamp in nanoseconds since unix epoch.\n* **conditions** - Provides the conditions\n\n### Equities Trade Conditions\n\n| Value | Description                                       |\n|-------|---------------------------------------------------|\n| @     | Regular Sale                                      |\n| A     | Acquisition                                       |\n| B     | Bunched Trade                                     |\n| C     | Cash Sale                                         |\n| D     | Distribution                                      |\n| E     | Placeholder                                       |\n| F     | Intermarket Sweep                                 |\n| G     | Bunched Sold Trade                                |\n| H     | Priced Variation Trade                            |\n| I     | Odd Lot Trade                                     |\n| K     | Rule 155 Trade (AMEX)                             |\n| L     | Sold Last                                         |\n| M     | Market Center Official Close                      |\n| N     | Next Day                                          |\n| O     | Opening Prints                                    |\n| P     | Prior Reference Price                             |\n| Q     | Market Center Official Open                       |\n| R     | Seller                                            |\n| S     | Split Trade                                       |\n| T     | Form T                                            |\n| U     | Extended Trading Hours (Sold Out of Sequence)     |\n| V     | Contingent Trade                                  |\n| W     | Average Price Trade                               |\n| X     | Cross/Periodic Auction Trade                      |\n| Y     | Yellow Flag Regular Trade                         |\n| Z     | Sold (Out of Sequence)                            |\n| 1     | Stopped Stock (Regular Trade)                     |\n| 4     | Derivatively Priced                               |\n| 5     | Re-Opening Prints                                 |\n| 6     | Closing Prints                                    |\n| 7     | Qualified Contingent Trade (QCT)                  |\n| 8     | Placeholder for 611 Exempt                        |\n| 9     | Corrected Consolidated Close (Per Listing Market) |\n\n\n### Equities Trade Conditions (CBOE One)\nTrade conditions for CBOE One are represented as the integer representation of a bit flag.\n\nNone                      = 0,\nUpdateHighLowConsolidated = 1,\nUpdateLastConsolidated    = 2,\nUpdateHighLowMarketCenter = 4,\nUpdateLastMarketCenter    = 8,\nUpdateVolumeConsolidated  = 16,\nOpenConsolidated          = 32,\nOpenMarketCenter          = 64,\nCloseConsolidated         = 128,\nCloseMarketCenter         = 256,\nUpdateVolumeMarketCenter  = 512\n\n\n### Equities Quote Conditions\n\n| Value | Description                                 |\n|-------|---------------------------------------------|\n| R     | Regular                                     |\n| A     | Slow on Ask                                 |\n| B     | Slow on Bid                                 |\n| C     | Closing                                     |\n| D     | News Dissemination                          |\n| E     | Slow on Bid (LRP or Gap Quote)              |\n| F     | Fast Trading                                |\n| G     | Trading Range Indication                    |\n| H     | Slow on Bid and Ask                         |\n| I     | Order Imbalance                             |\n| J     | Due to Related - News Dissemination         |\n| K     | Due to Related - News Pending               |\n| O     | Open                                        |\n| L     | Closed                                      |\n| M     | Volatility Trading Pause                    |\n| N     | Non-Firm Quote                              |\n| O     | Opening                                     |\n| P     | News Pending                                |\n| S     | Due to Related                              |\n| T     | Resume                                      |\n| U     | Slow on Bid and Ask (LRP or Gap Quote)      |\n| V     | In View of Common                           |\n| W     | Slow on Bid and Ask (Non-Firm)              |\n| X     | Equipment Changeover                        |\n| Y     | Sub-Penny Trading                           |\n| Z     | No Open / No Resume                         |\n| 1     | Market Wide Circuit Breaker Level 1         |\n| 2     | Market Wide Circuit Breaker Level 2         |        \n| 3     | Market Wide Circuit Breaker Level 3         |\n| 4     | On Demand Intraday Auction                  |        \n| 45    | Additional Information Required (CTS)       |      \n| 46    | Regulatory Concern (CTS)                    |     \n| 47    | Merger Effective                            |    \n| 49    | Corporate Action (CTS)                      |   \n| 50    | New Security Offering (CTS)                 |  \n| 51    | Intraday Indicative Value Unavailable (CTS) |\n\n### Options Trade Message\n\n```java\npublic record Trade(String contract, double price, long size, double timestamp, long totalVolume, double askPriceAtExecution, double bidPriceAtExecution, double underlyingPriceAtExecution)\n```\n\n* **contract** - Identifier for the options contract.  This includes the ticker symbol, put/call, expiry, and strike price.\n* **exchange** - an `Exchange` enum indicating the specific exchange through which the trade occurred\n* **price** - the price in USD\n* **size** - the size of the last trade in hundreds (each contract is for 100 shares).\n* **totalVolume** - The number of contracts traded so far today.\n* **timestamp** - a Unix timestamp (with microsecond precision)\n* **qualifiers** - a `Qualifiers` object containing 4 bytes: each byte represents one trade qualifier. See list of possible [Trade Qualifiers](#trade-qualifiers), below.\n* **askPriceAtExecution** - the last best ask price in USD at execution.\n* **bidPriceAtExecution** - the last best bid price in USD at execution.\n* **underlyingPriceAtExecution** - the price of the underlying security at execution.\n\n### Options Trade Qualifiers\n\n\n| Value | Description                               | Updates Last Trade Price | Updates Last trade Price in Regional and Composite Exchs | Updates Volume | Updates Open price | Updates High/Low |\n|-------|-------------------------------------------| ------------------------ | -------------------------------------------------------- | -------------- |--------------------| ---------------- |\n| 0     | Regular sale                              | Yes | Yes | Yes | (4)                | Yes | \n| 2     | Averagepricetrade                         | No | No | Yes | No                 | No | \n| 3     | Cash Trade (Same Day Clearing)            | No | No | Yes | No                 | No |\n| 5     | AutomaticExecution                        | Yes | Yes | Yes | (4)                | Yes |\n| 6     | Intermarket Sweep Order                   | Yes | Yes | Yes | (4)                | Yes |\n| 8     | Price Variation Trade                     | No | No | Yes | No                 | No|\n| 9     | OddLotTrade                               | No | No | Yes | No                 | No|\n| 10    | Rule 127 Trade (NYSE)                     | Yes | Yes | Yes | (4)                | Yes  |\n| 11    | Rule 155 Trade (NYSE MKT)                 | Yes | Yes | Yes | Yes                | Yes|\n| 12    | Sold Last (Late Reporting)                | (3) | Yes | Yes | (4)                | Yes|\n| 13    | Market Center Official Close              | No | Yes* | No | No                 | Yes*|\n| 14    | Next Day Trade (Next Day Clearing)        | No | No | Yes | No                 | No|\n| 15    | Market center opening trade               | (1) | (2) | Yes | Yes                | Yes|\n| 16    | Prior reference price                     | (2) | (2) | Yes | (4)                | Yes|\n| 17    | Market Center Official Open               | No | No | No | Yes                | Yes|\n| 18    | Seller                                    | No | No | Yes | No                 | No|\n| 20    | Extended Hours Trade (Form T)             | No | No | Yes | No                 | No|\n| 21    | Pre and Post market: sold out of sequence | No | No | Yes | No                 | No|\n| 22    | Contingent trade                          | No | No | Yes | No                 | No|\n| 24    | Cross Trade                               | Yes | Yes | Yes | (4)                | Yes|\n| 26    | Sold (out of sequence)                    | (2) | (2) | Yes | (4)                | Yes|\n| 52    | Derivatively priced                       | (2) | (2) | Yes | (4)                | Yes|\n| 53    | Market center re-opening trade            | Yes | Yes | Yes | (4)                | Yes|\n| 54    | Market center closing trade               | Yes | Yes | Yes | (4)                | Yes|\n| 55    | Qualified contingent trade                | No | No | Yes | No                 | No|\n| 56    | Reserved                                  | No | No | Yes | No                 | No|\n| 57   | Consolidated last price per               | Yes | Yes*** | No | Yes***             | Yes***|\n\n* (1)=YES, if it is the only qualifying last, or if it is that participant’s first qualifying last; otherwise NO. (2)=YES, if it is the only qualifying last; OTHERWISE NO.\n* (3)=YES, if it is the only qualifying last OR it is from the same participant as the last OR it is from the PRIMARY MARKET for the security; otherwise NO.\n* (4)=YES, if it is the first or only qualifying trade of the day, otherwise NO.\n* `*` Updates high/low/last in regional exchanges only.\n* `**` Updates high/low/last in composite only.\n* `***` Updated high/low/last in composite only, last updates CURRENT.PRICE only as this is not a trade.\n\n### Options Quote Message\n\n```java\npublic record Quote(String contract, double askPrice, long askSize, double bidPrice, long bidSize, double timestamp)\n```\n\n* **contract** - Identifier for the options contract.  This includes the ticker symbol, put/call, expiry, and strike price.\n* **askPrice** - the last best ask price in USD\n* **askSize** - the last best ask size of the last ask or bid in hundreds (each contract is for 100 shares).\n* **bidPrice** - the last best bid price in USD\n* **bidSize** - the last best bid size of the last ask or bid in hundreds (each contract is for 100 shares).\n* **timestamp** - a Unix timestamp (with microsecond precision)\n\n\n### Options Open Interest Message\n\n```java\npublic record Refresh (String contract, long openInterest, double openPrice, double closePrice, double highPrice, double lowPrice)\n```\n\n* **contract** - Identifier for the options contract.  This includes the ticker symbol, put/call, expiry, and strike price.\n* **openInterest** - the total quantity of opened contracts as reported at the start of the trading day\n* **openPrice** - the opening price for the day\n* **closePrice** - the closing price for the day\n* **highPrice** - the current high price for the day\n* **lowPrice** - the current low price for the day\n\n### Options Unusual Activity Message\n```java\npublic record UnusualActivity(\n        String contract,\n        UnusualActivityType type,\n        UnusualActivitySentiment sentiment,\n        double totalValue,\n        long totalSize,\n        double averagePrice,\n        double askPriceAtExecution,\n        double bidPriceAtExecution,\n        double underlyingPriceAtExecution,\n        double timestamp)\n```\n\n* **contract** - Identifier for the options contract.  This includes the ticker symbol, put/call, expiry, and strike price.\n* **type** - The type of unusual activity that was detected\n  * **`Block`** - represents an 'block' trade\n  * **`Sweep`** - represents an intermarket sweep\n  * **`Large`** - represents a trade of at least $100,000\n  * **`Unusual Sweep`** - represents an unusually large sweep near market open\n* **sentiment** - The sentiment of the unusual activity event\n  *    **`Neutral`** -\n  *    **`Bullish`** -\n  *    **`Bearish`** -\n* **totalValue** - The total value of the trade in USD. 'Sweeps' and 'blocks' can be comprised of multiple trades. This is the value of the entire event.\n* **totalSize** - The total size of the trade in number of contracts. 'Sweeps' and 'blocks' can be comprised of multiple trades. This is the total number of contracts exchanged during the event.\n* **averagePrice** - The average price at which the trade was executed. 'Sweeps' and 'blocks' can be comprised of multiple trades. This is the average trade price for the entire event.\n* **askAtExecution** - The 'ask' price of the contract at execution of the trade event.\n* **bidAtExecution** - The 'bid' price of the contract at execution of the trade event.\n* **underlyingPriceAtExecution** - The last trade price of the underlying security at execution of the trade event.\n* **timestamp** - a Unix timestamp (with microsecond precision).\n\n## API Keys\n\nYou will receive your Intrinio API Key after [creating an account](https://intrinio.com/signup). You will need a subscription to a [realtime data feed](https://intrinio.com/real-time-multi-exchange) as well.\n\n### Overview\n\nThe Intrinio Realtime Client will handle authorization as well as establishment and management of all necessary WebSocket connections. All you need to get started is your API key.\nThe first thing that you'll do is create a new `Client` object.\nAfter a `Client` object has been created, you will immediately register a series of callbacks, using the `setOnX` methods (e.g. `setOnTrade`). These callback methods tell the client what types of subscriptions you will be setting up.\nYou must register callbacks in order to receive data. And you will only receive data for the types of callbacks that you have registered (i.e. you will only receive trade updates if you register an `OnTrade` callback).\nAfter registering your desired callbacks, you may subscribe to receive feed updates from the server.\nYou may subscribe to a static list of symbols (a mixed list of option contracts and/or option chains).\nOr, you may subscribe, dynamically, to option contracts, option chains, or a mixed list thereof.\nIt is also possible to subscribe to the entire universe of option contracts by calling `JoinLobby`.\nThe volume of data provided by the lobby (`Firehose`) exceeds 100Mbps and requires higher hardware requirements.\nDo not subscribe to lobby and individual symbols/chains/contracts at the same time - either join lobby by itself, or a list of symbols/chains/contracts.\nAfter subscribing your starting list of symbols, you will call the `start` method. The client will immediately attempt to authorize your API key (provided in the config.json file). If authoriztion is successful, the necessary connection(s) will be opened.\nIf you are using the non-firehose feed, you may update your subscriptions on the fly, using the `join` and `leave` methods.\nThe WebSocket client is designed for near-indefinite operation. It will automatically reconnect if a connection drops/fails and when then servers turn on every morning.\nIf you wish to perform a graceful shutdown of the application, please call the `stop` method.\nRealtime vs delayed is automatically handled by your account authorization.  If you wish to force delayed mode and have realtime access, you may use the delayed parameter in your configuration.\n\n## Equities Methods\n\n`Client client = new Client(optionsTradeHandler, optionsQuoteHandler)` - Creates an Intrinio Real-Time client. The provided handlers implement OnTrade and OnQuote, which handle what happens when the associated event happens.\n* **Parameter** `optionsTradeHandler`: The handler for trade events. This function will be invoked when a 'trade' has been received. The trade will be passed as an argument to the callback.\n* **Parameter** `optionsQuoteHandler`: Optional. The handler for quote events. This function will be invoked when a 'quote' has been received. The quote will be passed as an argument to the callback. If 'onQuote' is not provided, the client will NOT request to receive quote updates from the server.\n---------\n`client.join(symbols, tradesOnly);` - Joins the given channels. This can be called at any time. The client will automatically register joined channels and establish the proper subscriptions with the WebSocket connection. If no arguments are provided, this function joins channel(s) configured in config.json.\n* **Parameter** `symbols` - Optional. A string representing a single ticker symbol (e.g. \"AAPL\") or an array of ticker symbols (e.g. [\"AAPL\", \"MSFT\", \"GOOG\"]) to join. You can also use the special symbol, \"lobby\" to join the firehose channel and recieved updates for all ticker symbols. You must have a valid \"firehose\" subscription.\n* **Parameter** `tradesOnly` - Optional (default: false). A boolean value indicating whether the server should return trade data only (as opposed to trade and quote data).\n```java\nclient.join([\"AAPL\", \"MSFT\", \"GOOG\"])\nclient.join(\"GE\", true)\nclient.join(\"lobby\") //must have a valid 'firehose' subscription\n```\n---------\n`client.leave(symbols)` - Leaves the given channels.\n* **Parameter** `symbols` - Optional (default = all channels). A string representing a single ticker symbol (e.g. \"AAPL\") or an array of ticker symbols (e.g. [\"AAPL\", \"MSFT\", \"GOOG\"]) to leave. If not provided, all subscribed channels will be unsubscribed.\n```java\nclient.leave([\"AAPL\", \"MSFT\", \"GOOG\"])\nclient.leave(\"GE\")\nclient.leave(\"lobby\")\nclient.leave()\n```\n---------\n`client.stop()` - Closes the WebSocket, stops the self-healing and heartbeat intervals. Call this to properly dispose of the client.\n\n## Equities Configuration\n\n### config.json\n```json\n{\n\t\"apiKey\": \"\",\n\t\"provider\": \"IEX\", //or DELAYED_SIP or NASDAQ_BASIC or CBOE_ONE or EQUITIES_EDGE or MANUAL\n\t\"symbols\": [ \"AAPL\", \"MSFT\", \"GOOG\" ], //This is a list of individual tickers to subscribe to, or \"lobby\" to subscribe to all at once (firehose).\n\t\"tradesOnly\": true, //This indicates whether you only want trade events (true) or you want trade, ask, and bid events (false).\n\t\"numThreads\": 4 //The number of threads to use for processing events.\n}\n```\n\n### Options Methods\n\n`Client client = new Client(Config config)` - Creates an Intrinio Real-Time client.\n* **Parameter** `config`: Optional - The configuration to be used by the client. If this value is not provided, `config.json` will be picked up (from the project root) and used.\n\n---------\n\n`client.setOnTrade(OnTrade onTrade) throws Exception` - Registers a callback that is invoked for every trade update. If no `onTrade` callback is registered with this method, you will not receive trade updates from the server.\n* **Parameter** `onTrade`: The handler for trade events.\n* **Throws** `Exception`: If the start method has already been called. Or if `OnTrade` has already been set.\n\n`client.setOnQuote(OnQuote onQuote) throws Exception` - Registers a callback that is invoked for every quote update. If no `onQuote` callback is registered with this method, you will not receive quote (ask, bid) updates from the server.\n* **Parameter** `onQuote`: The handler for quote events.\n* **Throws** `Exception`: If the start method has already been called. Or if `OnQuote` has already been set.\n\n`client.setOnRefresh(OnRefresh onRefresh) throws Exception` - Registers a callback that is invoked for refresh update. If no `onRefresh` callback is registered with this method, you will not receive open interest, high, low, open, close data from the server.\n* **Parameter** `onRefresh`: The handler for refresh events.\n* **Throws** `Exception`: If the start method has already been called. Or if `OnRefresh` has already been set.\n\n`client.setOnUnusualActivity(OnUnusualActivity onUnusualActivity) throws Exception` - Registers a callback that is invoked for every unusual trade. If no `onUnusualActivity` callback is registered with this method, you will not receive unusual trade updates from the server.\n* **Parameter** `onUnusualActivity`: The handler for unusual trade events.\n* **Throws** `Exception`: If the start method has already been called. Or if `OnUnusualActivity` has already been set.\n\n---------\n\n`client.start()` - Starts the Intrinio Realtime WebSocket Client.\nThis method will immediately attempt to authorize the API key (provided in config).\nAfter successful authorization, all of the data processing threads will be started, and the websocket connections will be opened.\nIf a subscription has already been created with one of the `join` methods, data will begin to flow.\n\n---------\n\n`client.join()` - Joins channel(s) configured in config.json.\n`client.join(String channel)` - Joins the provided channel. E.g. \"AAPL\" or \"GOOG__210917C01040000\"\n`client.join(String[] channels)` - Joins the provided channels. E.g. [ \"AAPL\", \"MSFT__210917C00180000\", \"GOOG__210917C01040000\" ]\n`client.joinLobby()` - Joins the 'lobby' (aka. firehose) channel. The provider must be set to `OPRA_FIREHOSE` for this to work. This requires special account permissions.\n\n---------\n\n`client.leave()` - Leaves all joined channels/subscriptions, including `lobby`.\n`client.leave(String channel)` - Leaves the specified channel. E.g. \"AAPL\" or \"GOOG__210917C01040000\"\n`client.leave(String[] channels)` - Leaves the specified channels. E.g. [ \"AAPL\", \"MSFT__210917C00180000\", \"GOOG__210917C01040000\" ]\n`client.leaveLobby()` Leaves the `lobby` channel\n\n---------\n`client.stop();` - Stops the Intrinio Realtime WebSocket Client. This method will leave all joined channels, stop all threads, and gracefully close the websocket connection(s).\n\n## Options Configuration\n\n### config.json\n```json\n{\n\t\"apiKey\": \"\",\n\t\"provider\": \"OPRA\", //OPRA, OPTIONS_EDGE\n\t\"symbols\": [ \"GOOG__210917C01040000\", \"MSFT\", \"AAPL__210917C00130000\", \"SPY\" ], //Individual contracts, or option chains to subscribe to all contracts under a symbol.\n\t\"numThreads\": 4, //The number of threads to use for processing events.\n    \"delayed\": false //If you have realtime access but want to force 15minute delayed, set this to true.\n}\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fintrinio%2Fintrinio-realtime-java-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fintrinio%2Fintrinio-realtime-java-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fintrinio%2Fintrinio-realtime-java-sdk/lists"}