Our ROOKScore is a health score based on 3 pillars of health: Physical Health, Sleep Health and Body Health is fed by several sub-pillars. However, these metrics were previously limited to the total result obtained at the end of the day through the pillar summaries. Therefore, with this improvement, it will be possible to receive the original data from the data sources that make up the ROOKScore throughout the day.
This functionality is designed to offer customers and users greater flexibility in managing biometric data. The new field
non_structured_data_array
allows customers to access metrics from manufacturers such as Oura, Garmin, Polar, Whoop, and Withings directly within ROOKScore's JSON.
Technical value
Previously, customers had to choose between using ROOK's standardized scores or performing additional queries to retrieve the original data from the data source. This update resolves data fragmentation by consolidating both streams into a single data structure.
  • Direct access: Provides the original scores (such as Garmin's Body Battery or Whoop's Strain) unprocessed.
  • Seamless integration: Unstructured data does not affect ROOKScore's internal calculations, guaranteeing the integrity of our predictive models.
  • Real-time update: The system replaces the most recent values ​​within the array to keep the information up to date, avoiding the accumulation of unnecessary historical data.
Implementation
The field
non_structured_data_array
is integrated as an array of objects within the ROOK Score JSON. Each object includes the tag
source_of_data_string
to identify the source of the information.
  • Standardization of labels: In specific cases, we rename certain fields to avoid conflicts. For example, the Oura "
    score
    " value is mapped as
    sleep_score
    or
    activity_score
    depending on the context.
  • Granular data management: For devices like Garmin, where a single Body Battery score is not provided, the array captures granular data showing the evolution of the value throughout the day.
  • Scalability: The structure allows each device to maintain its original format, facilitating the incorporation of future new data sources.
Validation and Activation Guide
To ensure a successful transition to production, our team recommends following this verification workflow:
  • Portal settings: It is imperative to verify that the settings in the ROOKScore portal are enabled to allow data transmission. Likewise, to receive unstructured data, the option to receive unstructured data must be activated in the portal.
  • Version validation: Developers must confirm receipt of the field by reviewing
    document_version
    and the
    datetime_string
    to ensure data synchronization.
  • Scale management: It should be noted that each manufacturer uses different scales. For example, Polar uses a range of one to six for recovery status, while Whoop uses a range of 0 to 21 for strain.
Example of JSON with ROOKScore - Non-Structured Data
{
"data_structure": "health_score",
"version": 2,
"document_version": 1,
"user_id": "testUser",
"client_uuid": "019240e3-64ff-7195-a487-c4728502b190",
"health_score_data": {
"metadata": {
"datetime_string": "2023-12-28T00:00:00.000000Z",
"sources_of_data_array": [
"Oura",
"Polar"
],
"user_id_string": "testUser"
},
"overall_scores": {...},
"physical_health_score": {...},
"sleep_health_score": {...},
"body_health_score": {...},
"non_structured_data_array": [
{
"sleep_score": 80,
"source_of_data_string": "Oura"
},
{
"readiness": {
"score": 26
},
"source_of_data_string": "Oura"
},
{
"daily_activity": 70,
"source_of_data_string": "Polar"
}
]
}
}
FAQ
What is the non_structured_data_array field?
It's a new component within the ROOK Score JSON that allows you to integrate ROOKScore scores and native metrics from various data sources. This field gives our customers the flexibility to access original data without it interfering with ROOK's standardized calculations.
What manufacturer metrics can be accessed through this feature?
Currently, we allow access to data from sources such as Oura, Garmin, Polar, Whoop, and Withings. This includes specific metrics such as Oura's Readiness Score, Garmin's Body Battery, and Whoop's Strain.
How does this new data affect the calculation of my ROOK Score?
It has no effect whatsoever. The ROOKScore scoring model is maintained independently within its own system.
Why do some field names differ from the original names in the data source?
We standardize labels in specific cases to avoid naming conflicts. For example, in the case of Oura, the generic value "
score
" is mapped as
sleep_score
or
activity_score
depending on the context of the data.
How does ROOK handle data from devices that do not provide a unique score?
For data sources that provide granular metrics rather than a single value, such as Garmin's Body Battery, the array captures the evolution of the data throughout the day. This allows the customer to receive the detailed information as delivered by the original provider.
Does this field keep a record of scores for the day?
No, this process does not accumulate historical records within the JSON. The system replaces previous values ​​with the most recent ones to ensure that the information provided is always up-to-date and to avoid processing unnecessary data.
How can I start receiving unstructured data in my API calls?
To enable this feature, the client must verify and activate the corresponding option within the ROOK configuration portal. Once enabled, the field will automatically appear in the ROOK Score JSON object.
What should I consider when interpreting scales from different manufacturers?
It is crucial to consider that each data source uses different measurement criteria. For example, while Whoop uses a scale of 0 to 21 for strain, Polar uses a range of one to six for recovery status.
How can we ensure that unstructured data is synchronized?
We recommend that developers always validate the synchronization of information by reviewing the field
datetime_string
and the version of the document (
document_version
) included in the JSON.