Export formats
Questi contenuti non sono ancora disponibili nella tua lingua.
Health.md uses one captured daily data set to produce formats with different roles. JSON and CSV carry canonical source records. Markdown and Obsidian Bases remain intentionally readable.
Capability matrix
Section titled “Capability matrix”| Capability | JSON | CSV | Markdown | Obsidian Bases |
|---|---|---|---|---|
| Daily summaries | Yes | Yes | Yes | Yes |
| Typed WHOOP provider data | Nested section | Scalars + canonical JSON rows | Labeled tables | Unambiguous whoop_* scalars |
| Canonical UUID-backed records | Embedded | Canonical JSON rows | No | No |
| UUID-free external records | Embedded | Canonical JSON rows | Count only | No dedicated count |
| Full query manifest | Embedded | Archive Manifest row | Counts/safe details | Failure count only |
| Typed recursive metadata | Embedded | Canonical JSON rows | No | No |
| Exact binary values | Base64 | Base64 inside JSON cell | No | No |
| Relationship graph | Embedded | Canonical JSON rows | No | No |
| Human-readable sections | Limited | Limited | Yes | Frontmatter only |
| Custom frontmatter keys | No | No | Yes | Yes |
| Update/merge user writing | No | No | Yes | Generated frontmatter file |
JSON is the authoritative single-file daily representation.
- Top-level schema:
healthmd.health_datav8. - Optional typed provider section:
providers.whoopusinghealthmd.provider.whoop_dailyv1. - Nested archive:
healthmd.healthkit_recordsv1 when lossless capture is requested and available. - Keys are sorted in production output for deterministic serialization.
- Optional summary sections and fields are omitted when absent.
- Binary values are base64.
- Canonical timestamps use UTC; summary display times use captured calendar context.
Complete examples:
JSON parser guidance
Section titled “JSON parser guidance”- Parse numbers without converting all integers to floating point when exactness matters.
- Preserve unknown object keys and enum strings.
- Branch on metadata
typetags. - Treat the canonical archive as source truth, not summary arrays.
CSV begins with the header:
Date,Category,Metric,Value,Unit,TimestampProduction v8 rows retain an intentional v7 compatibility detail:
- many aggregate rows serialize five fields and omit the trailing empty Timestamp field;
- metadata, diagnostic, canonical, and timestamped sample rows commonly serialize six fields.
Consumers must accept both five- and six-field records under the six-name header. A missing sixth field means no timestamp for that aggregate row.
Do not split CSV on commas or physical newline characters. Canonical JSON cells can contain commas, quotes, and embedded line breaks. Use an RFC 4180 parser.
Canonical row types
Section titled “Canonical row types”| Category / Metric | Purpose |
|---|---|
Raw HealthKit / Raw Capture Status |
Daily capture status. |
Raw HealthKit / Archive Manifest |
Archive metadata, ownership, query manifest, warnings, and inventory without record arrays. |
Raw HealthKit / Raw HealthKit Record |
One canonical UUID-backed record JSON object. |
Raw HealthKit / Raw HealthKit External Record |
One UUID-free public record JSON object. |
Raw HealthKit / Query Failure |
One failed/cancelled query result. |
Raw HealthKit / Integrity Warning |
One warning. |
Diagnostics / Partial Failure |
One exporter/fetch partial failure. |
WHOOP Capture / Resource Result |
One safe typed resource result as canonical JSON. |
WHOOP Cycle/Recovery/Sleep/Workout/Body / * Record |
Typed WHOOP records as canonical JSON; timed records use source start timestamps. |
Unambiguous WHOOP daily scalars also use provider-prefixed categories. Recovery and body snapshot rows never substitute provider fetch time for a measurement timestamp. JSON and CSV canonical HealthKit record UUIDs and objects must match.
Complete examples and generated row inventory:
generated/core/summary-day.csvgenerated/core/lossless-day.csvgenerated/core/provider-day.csvgenerated/core/csv-row-contracts.md
Markdown
Section titled “Markdown”Markdown is a readable daily note. With Include Metadata on (the default), it includes schema/time/unit frontmatter. With that user-controlled setting off, the entire frontmatter block is omitted, so the Markdown file does not identify its schema or expose the machine-readable units map. Its body includes:
- selected daily summary sections;
- optional workout details and compatibility sample tables;
- compact lossless capture diagnostics;
- labeled WHOOP summaries and deterministic repeated-record tables when a typed provider section is present.
It does not embed recursive canonical records, route graphs, clinical payloads, waveforms, or binary data. Pair it with JSON or CSV when source identity matters.
Complete generated example:
Obsidian Bases
Section titled “Obsidian Bases”Bases output is a frontmatter-only Markdown file. It exposes selected summary properties and compact diagnostics for database views.
Reserved v8 diagnostics are:
raw_capture_statusraw_record_countraw_query_failure_countraw_integrity_warning_countraw_record_schemaraw_record_schema_version
There are no dedicated Bases/frontmatter properties for external-record count or medication-inventory count. Markdown’s body can show those additional counts. Typed WHOOP sections add reserved whoop_* scalar properties only when the projection is unambiguous; repeated records are not flattened into indexed keys.
Complete generated examples:
generated/core/summary-day-bases.mdgenerated/core/lossless-day-bases.mdgenerated/core/provider-day-bases.md
Units by format
Section titled “Units by format”- JSON uses structured canonical values and a
unitsmap. - CSV uses the
Unitcolumn. - Markdown prose can use selected display units.
- Bases uses stable values plus a frontmatter
unitsmap. - Canonical record quantities carry their own exact unit.
The v8 data dictionary retains µg for microgram summary keys and adds provider-prefixed WHOOP entries with no period roll-ups.
Archive-off behavior
Section titled “Archive-off behavior”When the canonical HealthKit archive is off (Summary or Detailed Time-Series):
raw_capture_statusisnot_requested;- JSON has no
healthkit_record_archive; - CSV has no canonical record/manifest rows;
- Detailed Time-Series may still include compatible sample arrays/rows/tables;
- Markdown/Bases retain compact status/frontmatter behavior;
- summaries remain available.
Connected jobs in true summary-only mode neither fetch nor transfer a hidden archive.
Write behavior
Section titled “Write behavior”- JSON and CSV are regenerated; Update falls back to overwrite.
- Markdown can use Update to replace Health.md-managed sections while preserving user sections.
- Bases is generated frontmatter intended for database consumption.
- When Markdown and Bases are both enabled, Bases uses a
-bases.mdsuffix to avoid collisions.
Serialization failures
Section titled “Serialization failures”Production file writers use throwing serialization paths and fail the affected date rather than silently omitting a malformed canonical record. Convenience preview methods can emit an explicit machine-readable serialization-error fallback. Consumers must not treat that fallback as a complete health-data document.