
Polygon.io is Now Massive
Polygon.io is now Massive.com. The rebrand reflects our focus on scale, reliability, and continued innovation. Your APIs, accounts, and integrations continue to work without interruption.
editor

Introducing
May 26, 2020
The process of generating aggregate bars is more complex than it might seem. Users often encounter difficulties when attempting to replicate our Open, High, Low, Close, and Volume values from our tick data APIs. This is a common challenge, especially when comparing our data to other popular sources like Yahoo Finance or Bloomberg. Additionally, users may notice discrepancies between real-time trades coming in through our WebSocket connection and the High or Low values provided by our Aggregates or Snapshot endpoints.
These discrepancies stem from specific ‘Sale Conditions’ rules, as outlined in the UTP and CTA plan specifications. These rules must be followed to calculate aggregate values accurately.
We've put together resources to explain these concepts and help clear up any confusion that may arise from these technical details.
Wondering what the UTP and CTA are? Great question! You can refer to our “Understanding the SIPs” blog article to learn more about how data flows from exchanges to us and then to our customers.
The CTA plan specification provides a detailed 93-page explanation of how price data is disseminated. To make it easier, we’ve highlighted some of the key points:

The sale conditions mentioned are the raw codes, not the ones we provide in our real-time and historical tick APIs.
To create aggregates that reflect the entire market, you should follow the Consolidated Update guidelines. If you’re focusing on aggregates specific to individual exchanges, the Participant Update guidelines should be applied.
Four key notes can impact how the OHLC (Open, High, Low, Close) values are calculated. These notes act as conditions within the sale conditions.
Multiple conditions can apply to each trade, so what happens if these conditions contradict each other?
That is the TLDR for the CTA’s specification regarding Sale Conditions and their eligibility to be included into the OHLC aggregates. If you still yearn for more information, check out pages 62-64 of the following document: https://www.ctaplan.com/publicdocs/ctaplan/notifications/trader-update/CTS_BINARY_OUTPUT_SPECIFICATION.pdf
Like the CTA specification, the UTP plan has its own rules and regulations regarding the eligibility of trades to update aggregates. While the CTA Plan specification pertains to updating the OHLC values, the UTP plan uses these conditions to determine when to update the HLCV or High, Low, Close, and Volume values.
The UTP Sale condition matrix is available on our Conditions and Indicators page. This spec answers most questions asked about the eligibility for trades to update the volume value.
Similar to the CTA matrix, this table outlines the eligibility of each value to be updated based on two sets of guidelines: the Consolidated Processing Guidelines and the Market Center Processing Guidelines.
If your goal is to create aggregates representing total market volume, follow the Consolidated Processing Guidelines. For aggregates representing each exchange individually, use the Market Center Processing Guidelines.

Much like the CTA plan, certain conditions apply to other conditions. These superscript values appear in some table cells and are defined below:
Additional notes to keep in mind when making these adjustments:
For more information, refer to pages 42 - 47 of the following document: https://www.utpplan.com/DOC/UtpBinaryOutputSpec.pdf
Each trade condition, their definitions, update rules, and CTA/UTP mappings can now be found in our Conditions API endpoint:
{ "asset_class": "stocks", "data_types": [ "trade" ], "id": 2, "name": "Average Price Trade", "sip_mapping": { "CTA": "B", "UTP": "W" }, "type": "condition", "update_rules": { "consolidated": { "updates_high_low": false, "updates_open_close": false, "updates_volume": true }, "market_center": { "updates_high_low": false, "updates_open_close": false, "updates_volume": true }
At Massive.com, we consider both the CTA and UTP specifications when calculating the aggregate bars we provide. We adhere to the consolidated update guidelines of both plans to ensure accuracy. If you’re looking to recreate these bars from our tick data, these are the guidelines you’ll need to follow.
Our system is designed to account for every condition applied to a trade, delivering the most precise data possible. Massive normalizes the conditions between the SIPs into a unified list. You can find the condition codes you need to follow on our Conditions and Indicators page, or access them via our API through our Condition Mappings endpoint.
If you ever have any additional questions, concerns, or suggestions, please don’t hesitate to contact us. We’re always happy to help any way we can.

Jack Bell
jack
See what's happening at massive.com

Polygon.io is now Massive.com. The rebrand reflects our focus on scale, reliability, and continued innovation. Your APIs, accounts, and integrations continue to work without interruption.
editor

There are four new fundamentals endpoints, one daily-refreshed ratios feed, and a developer experience designed for screens, research, and automated reporting.

alexnovotny

Learn how to use Massive.com's MCP server inside of a Pydantic AI agentic workflow, alongside Anthropic's Claude 4 and the Rich Python library.

alexnovotny